{"version":3,"file":"app/main.42d6fb82e7594e6ba473.js","mappings":"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,aACc,IAAjCqK,EAAM7H,KAAKxC,QAAQ,WACa,IAAhCqK,EAAM7H,KAAKxC,QAAQ,a,qGCrGZ,EAAA84H,gBAAkB,CAC7B,SACA,UACA,YACA,QACA,UACA,UACA,SACA,OACA,WACA,WACA,WACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,WACA,WACA,UACA,UACA,WACA,SACA,SACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,WACA,UACA,OACA,UACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,OACA,UACA,YACA,WACA,WACA,UACA,YACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,SACA,QACA,YACA,WACA,SACA,UACA,SACA,SACA,WACA,QACA,SACA,YACA,YACA,YACA,YACA,YACA,OACA,UACA,SACA,SACA,QACA,YACA,SACA,QACA,UACA,QACA,WACA,UACA,YACA,QACA,YACA,YACA,SACA,WACA,YACA,UACA,QACA,OACA,OACA,OACA,MACA,OACA,YACA,QACA,YACA,QACA,UACA,UACA,YACA,QACA,QACA,YACA,WACA,SACA,QACA,QACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,QACA,QACA,YACA,QACA,WACA,UACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,QACA,YACA,QACA,WACA,YACA,YACA,WACA,YACA,YACA,SACA,YACA,YACA,SACA,UACA,UACA,WACA,OACA,QACA,QACA,QACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,SACA,WACA,SACA,YACA,SACA,UACA,WACA,YACA,UACA,YACA,UACA,SACA,UACA,UACA,UACA,SACA,SACA,WACA,OACA,YACA,UACA,QACA,SACA,SACA,SACA,UACA,UACA,YACA,YACA,UACA,SACA,UACA,YACA,YACA,WACA,QACA,YACA,QACA,QACA,WACA,YACA,WACA,WACA,UACA,WACA,UACA,YACA,UACA,YACA,WACA,WACA,WACA,SACA,UACA,YACA,WACA,SACA,WACA,WACA,YACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,SACA,UACA,QACA,QACA,UACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,WACA,QACA,SACA,UACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,QACA,YACA,YACA,UACA,QACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,WACA,QACA,OACA,WACA,YACA,YACA,WACA,OACA,QACA,WACA,WACA,QACA,QACA,YACA,UACA,WACA,QACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,OACA,QACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,QACA,MACA,SACA,YACA,SACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,YACA,SACA,WACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,YACA,SACA,WACA,QACA,OACA,WACA,OACA,SACA,YACA,UACA,SACA,SACA,UACA,YACA,WACA,YACA,YACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,UACA,WACA,QACA,WACA,YACA,SACA,YACA,SACA,SACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,UACA,WACA,QACA,WACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,UACA,SACA,QACA,OACA,OACA,SACA,WACA,SACA,SACA,WACA,YACA,YACA,WACA,SACA,SACA,YACA,WACA,WACA,UACA,YACA,WACA,WACA,YACA,UACA,UACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,YACA,SACA,WACA,WACA,YACA,WACA,QACA,WACA,YACA,SACA,QACA,UACA,QACA,UACA,SACA,WACA,QACA,SACA,UACA,SACA,SACA,YACA,UACA,QACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,SACA,YACA,UACA,SACA,WACA,SACA,UACA,SACA,UACA,QACA,WACA,UACA,WACA,SACA,UACA,SACA,OACA,YACA,UACA,YACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,OACA,YACA,SACA,QACA,QACA,QACA,SACA,SACA,QACA,OACA,QACA,OACA,YACA,WACA,YACA,UACA,UACA,SACA,SACA,UACA,UACA,UACA,QACA,OACA,QACA,UACA,YACA,YACA,QACA,YACA,YACA,QACA,WACA,YACA,SACA,UACA,SACA,QACA,QACA,UACA,QACA,QACA,WACA,QACA,QACA,UACA,UACA,WACA,SACA,OACA,WACA,QACA,WACA,UACA,WACA,OACA,OACA,WACA,WACA,UACA,OACA,SACA,UACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,QACA,WACA,UACA,WACA,WACA,OACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,OACA,SACA,SACA,QACA,OACA,MACA,UACA,OACA,UACA,SACA,UACA,WACA,QACA,WACA,WACA,WACA,QACA,UACA,SACA,SACA,QACA,OACA,YACA,YACA,OACA,YACA,SACA,QACA,SACA,UACA,WACA,UACA,QACA,QACA,QACA,SACA,UACA,WACA,YACA,OACA,YACA,WACA,SACA,QACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,YACA,YACA,SACA,SACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,YACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,QACA,QACA,QACA,QACA,UACA,UACA,SACA,YACA,OACA,QACA,QACA,UACA,UACA,YACA,UACA,UACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,WACA,QACA,QACA,UACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,QACA,QACA,WACA,QACA,YACA,SACA,WACA,SACA,YACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,UACA,UACA,QACA,OACA,QACA,YACA,SACA,OACA,UACA,YACA,YACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,WACA,QACA,QACA,SACA,SACA,SACA,UACA,YACA,WACA,QACA,OACA,SACA,OACA,SACA,UACA,OACA,WACA,OACA,SACA,UACA,SACA,YACA,QACA,UACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,WACA,UACA,OACA,UACA,OACA,WACA,WACA,UACA,YACA,WACA,UACA,YACA,OACA,UACA,UACA,UACA,YACA,QACA,SACA,WACA,SACA,WACA,UACA,WACA,SACA,QACA,SACA,SACA,UACA,SACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,SACA,SACA,QACA,YACA,SACA,UACA,SACA,UACA,UACA,WACA,OACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,UACA,YACA,UACA,YACA,UACA,UACA,QACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,YACA,YACA,YACA,WACA,SACA,YACA,QACA,SACA,UACA,UACA,WACA,UACA,YACA,WACA,YACA,QACA,YACA,YACA,UACA,UACA,UACA,SACA,YACA,QACA,SACA,WACA,SACA,UACA,YACA,YACA,QACA,UACA,UACA,UACA,OACA,OACA,SACA,SACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,WACA,SACA,UACA,WACA,WACA,UACA,YACA,WACA,UACA,SACA,SACA,SACA,UACA,YACA,SACA,QACA,UACA,YACA,SACA,SACA,YACA,QACA,UACA,YACA,UACA,WACA,WACA,UACA,SACA,SACA,QACA,SACA,YACA,WACA,WACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,WACA,QACA,QACA,UACA,YACA,UACA,YACA,WACA,SACA,SACA,UACA,QACA,QACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,WACA,UACA,WACA,UACA,UACA,QACA,UACA,UACA,WACA,QACA,UACA,SACA,WACA,WACA,WACA,UACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,SACA,OACA,YACA,UACA,QACA,YACA,SACA,QACA,QACA,UACA,QACA,WACA,SACA,UACA,QACA,QACA,YACA,YACA,YACA,WACA,YACA,YACA,QACA,QACA,QACA,OACA,WACA,SACA,WACA,WACA,QACA,WACA,WACA,SACA,YACA,UACA,QACA,UACA,WACA,SACA,OACA,SACA,UACA,WACA,SACA,SACA,QACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,UACA,SACA,SACA,OACA,QACA,QACA,OACA,QACA,WACA,SACA,SACA,QACA,YACA,QACA,WACA,UACA,UACA,WACA,UACA,WACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,OACA,OACA,QACA,QACA,QACA,UACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,SACA,UACA,WACA,QACA,SACA,WACA,OACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,UACA,UACA,WACA,QACA,SACA,UACA,WACA,YACA,QACA,WACA,SACA,SACA,YACA,SACA,UACA,QACA,YACA,UACA,UACA,WACA,YACA,YACA,OACA,WACA,SACA,UACA,SACA,QACA,UACA,MACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,OACA,OACA,OACA,OACA,WACA,WACA,UACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,SACA,WACA,OACA,OACA,OACA,UACA,QACA,QACA,SACA,QACA,WACA,UACA,UACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,YACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,QACA,YACA,UACA,WACA,WACA,SACA,WACA,YACA,YACA,UACA,YACA,YACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,YACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,UACA,YACA,OACA,SACA,SACA,UACA,SACA,UACA,SACA,OACA,QACA,OACA,WACA,YACA,UACA,SACA,SACA,SACA,YACA,YACA,WACA,WACA,YACA,QACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,OACA,UACA,SACA,QACA,QACA,QACA,YACA,YACA,WACA,YACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,SACA,WACA,OACA,WACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,YACA,SACA,QACA,YACA,QACA,UACA,UACA,QACA,QACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,UACA,YACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,WACA,WACA,SACA,QACA,QACA,SACA,QACA,QACA,WACA,UACA,WACA,YACA,UACA,WACA,UACA,WACA,OACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,UACA,UACA,UACA,WACA,UACA,YACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,QACA,QACA,UACA,UACA,YACA,UACA,YACA,UACA,QACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,UACA,UACA,WACA,QACA,OACA,SACA,UACA,UACA,YACA,OACA,UACA,UACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,YACA,WACA,UACA,YACA,UACA,QACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,SACA,SACA,SACA,YACA,UACA,QACA,QACA,QACA,UACA,SACA,UACA,SACA,SACA,YACA,QACA,QACA,QACA,OACA,SACA,UACA,YACA,UACA,YACA,WACA,YACA,UACA,MACA,QACA,SACA,UACA,UACA,WACA,SACA,YACA,YACA,MACA,MACA,WACA,SACA,QACA,WACA,SACA,QACA,QACA,WACA,QACA,UACA,YACA,SACA,WACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,WACA,YACA,UACA,WACA,WACA,UACA,OACA,OACA,YACA,OACA,YACA,OACA,WACA,SACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,WACA,SACA,YACA,WACA,SACA,UACA,YACA,QACA,OACA,YACA,SACA,WACA,QACA,UACA,WACA,SACA,QACA,SACA,SACA,QACA,QACA,YACA,QACA,WACA,SACA,WACA,YACA,WACA,UACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,WACA,OACA,WACA,UACA,SACA,YACA,YACA,YACA,QACA,WACA,SACA,WACA,YACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,SACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,SACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,QACA,WACA,UACA,UACA,SACA,SACA,OACA,WACA,YACA,WACA,SACA,YACA,QACA,WACA,QACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,QACA,SACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,SACA,QACA,SACA,QACA,UACA,SACA,UACA,UACA,OACA,YACA,YACA,WACA,YACA,SACA,UACA,YACA,WACA,SACA,SACA,SACA,WACA,YACA,YACA,UACA,UACA,QACA,WACA,SACA,SACA,WACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,WACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,QACA,UACA,WACA,UACA,UACA,YACA,WACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,OACA,WACA,SACA,YACA,QACA,OACA,SACA,UACA,YACA,WACA,YACA,WACA,WACA,YACA,YACA,MACA,WACA,YACA,WACA,OACA,SACA,OACA,WACA,QACA,SACA,SACA,UACA,SACA,QACA,UACA,SACA,YACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,SACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,SACA,WACA,WACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,WACA,OACA,YACA,UACA,OACA,UACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,WACA,WACA,WACA,QACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,WACA,SACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,QACA,SACA,SACA,OACA,WACA,WACA,QACA,QACA,QACA,QACA,OACA,SACA,YACA,SACA,QACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,QACA,QACA,SACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,UACA,QACA,OACA,YACA,SACA,SACA,OACA,SACA,WACA,SACA,OACA,OACA,QACA,OACA,OACA,WACA,YACA,YACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,YACA,QACA,UACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,SACA,QACA,OACA,UACA,QACA,QACA,QACA,UACA,WACA,YACA,WACA,WACA,SACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,QACA,QACA,QACA,YACA,UACA,WACA,UACA,UACA,UACA,QACA,QACA,WACA,SACA,OACA,MACA,SACA,YACA,UACA,WACA,UACA,WACA,WACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,SACA,WACA,OACA,UACA,WACA,WACA,MACA,OACA,SACA,YACA,YACA,UACA,UACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,QACA,QACA,QACA,UACA,UACA,WACA,UACA,YACA,UACA,WACA,UACA,WACA,WACA,OACA,QACA,UACA,UACA,UACA,SACA,UACA,QACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,SACA,UACA,QACA,UACA,SACA,WACA,SACA,YACA,YACA,SACA,WACA,UACA,QACA,SACA,SACA,OACA,OACA,QACA,QACA,QACA,YACA,OACA,SACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,YACA,OACA,WACA,SACA,OACA,UACA,SACA,WACA,YACA,WACA,MACA,YACA,UACA,YACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,UACA,SACA,QACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,SACA,MACA,WACA,WACA,YACA,QACA,UACA,SACA,MACA,UACA,WACA,MACA,YACA,QACA,YACA,WACA,YACA,QACA,UACA,QACA,QACA,UACA,SACA,UACA,YACA,YACA,QACA,WACA,UACA,SACA,SACA,WACA,SACA,YACA,QACA,UACA,YACA,WACA,OACA,QACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,YACA,QACA,MACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,SACA,SACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,YACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,UACA,SACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,YACA,WACA,YACA,WACA,SACA,UACA,SACA,SACA,YACA,SACA,SACA,WACA,UACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,WACA,QACA,OACA,SACA,OACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,WACA,UACA,QACA,SACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,WACA,SACA,SACA,UACA,YACA,SACA,SACA,UACA,QACA,QACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,SACA,WACA,WACA,YACA,YACA,WACA,UACA,UACA,WACA,UACA,QACA,YACA,SACA,YACA,WACA,UACA,QACA,WACA,YACA,YACA,UACA,UACA,OACA,YACA,YACA,YACA,WACA,WACA,QACA,WACA,UACA,OACA,QACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,SACA,UACA,SACA,QACA,WACA,OACA,SACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,YACA,YACA,YACA,QACA,SACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,YACA,SACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,SACA,WACA,SACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,OACA,SACA,UACA,SACA,OACA,QACA,UACA,OACA,WACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,UACA,OACA,UACA,YACA,YACA,UACA,UACA,WACA,SACA,UACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,MACA,QACA,UACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,WACA,WACA,WACA,WACA,QACA,QACA,UACA,SACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,SACA,SACA,WACA,UACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,WACA,QACA,UACA,SACA,WACA,SACA,SACA,SACA,UACA,OACA,SACA,QACA,WACA,SACA,WACA,WACA,UACA,UACA,YACA,QACA,WACA,QACA,UACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,MACA,OACA,UACA,UACA,WACA,WACA,YACA,YACA,QACA,UACA,QACA,QACA,YACA,UACA,WACA,WACA,OACA,UACA,YACA,YACA,YACA,WACA,WACA,SACA,QACA,UACA,WACA,SACA,WACA,UACA,YACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,OACA,UACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,QACA,WACA,OACA,SACA,UACA,QACA,WACA,UACA,UACA,QACA,SACA,UACA,WACA,OACA,MACA,MACA,OACA,QACA,OACA,WACA,SACA,WACA,SACA,WACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,WACA,WACA,UACA,YACA,WACA,YACA,WACA,QACA,QACA,UACA,UACA,YACA,SACA,UACA,QACA,WACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,SACA,YACA,WACA,YACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,WACA,SACA,YACA,WACA,QACA,UACA,UACA,WACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,QACA,SACA,UACA,QACA,UACA,YACA,SACA,OACA,QACA,YACA,UACA,WACA,WACA,YACA,SACA,QACA,QACA,SACA,WACA,YACA,WACA,QACA,YACA,SACA,MACA,QACA,MACA,YACA,UACA,QACA,OACA,YACA,WACA,UACA,SACA,SACA,UACA,YACA,SACA,YACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,MACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,MACA,WACA,YACA,SACA,UACA,WACA,QACA,OACA,OACA,SACA,OACA,QACA,OACA,SACA,MACA,SACA,UACA,WACA,WACA,QACA,UACA,YACA,SACA,QACA,YACA,WACA,YACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,YACA,WACA,YACA,UACA,YACA,UACA,UACA,UACA,QACA,QACA,YACA,SACA,UACA,YACA,QACA,OACA,WACA,YACA,WACA,SACA,WACA,SACA,SACA,SACA,QACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,UACA,UACA,UACA,QACA,YACA,SACA,YACA,UACA,SACA,WACA,YACA,QACA,UACA,QACA,WACA,UACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,QACA,QACA,QACA,UACA,WACA,UACA,OACA,SACA,YACA,UACA,SACA,OACA,OACA,WACA,OACA,UACA,QACA,WACA,WACA,YACA,OACA,UACA,QACA,UACA,OACA,OACA,OACA,QACA,WACA,YACA,QACA,SACA,OACA,SACA,OACA,SACA,WACA,OACA,UACA,SACA,SACA,SACA,OACA,OACA,OACA,WACA,YACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,UACA,WACA,QACA,WACA,WACA,UACA,UACA,UACA,WACA,UACA,SACA,UACA,QACA,WACA,QACA,QACA,UACA,YACA,QACA,QACA,YACA,UACA,UACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,QACA,OACA,UACA,WACA,WACA,YACA,SACA,QACA,UACA,WACA,OACA,YACA,OACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,OACA,UACA,OACA,WACA,SACA,QACA,QACA,SACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,UACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,OACA,WACA,QACA,OACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,OACA,OACA,QACA,QACA,UACA,OACA,SACA,MACA,UACA,WACA,YACA,WACA,UACA,WACA,SACA,SACA,UACA,UACA,MACA,UACA,QACA,OACA,UACA,OACA,SACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,YACA,SACA,QACA,YACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,WACA,QACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,UACA,QACA,UACA,OACA,SACA,QACA,UACA,YACA,QACA,SACA,YACA,WACA,UACA,WACA,YACA,OACA,UACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,WACA,WACA,YACA,YACA,YACA,SACA,SACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,UACA,WACA,OACA,OACA,QACA,UACA,YACA,UACA,QACA,UACA,YACA,QACA,SACA,SACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,QACA,WACA,QACA,SACA,SACA,YACA,QACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,WACA,OACA,MACA,OACA,OACA,OACA,QACA,SACA,WACA,SACA,QACA,YACA,WACA,UACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,SACA,YACA,YACA,SACA,WACA,SACA,OACA,SACA,UACA,WACA,WACA,SACA,SACA,SACA,UACA,SACA,YACA,UACA,QACA,OACA,UACA,OACA,SACA,YACA,MACA,SACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,MACA,UACA,QACA,OACA,OACA,MACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,QACA,OACA,QACA,WACA,SACA,SACA,YACA,WACA,WACA,QACA,YACA,WACA,UACA,WACA,UACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,SACA,YACA,UACA,WACA,YACA,YACA,WACA,SACA,UACA,YACA,YACA,WACA,UACA,YACA,YACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,SACA,SACA,MACA,OACA,SACA,OACA,QACA,MACA,OACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,WACA,YACA,YACA,UACA,QACA,UACA,YACA,UACA,OACA,YACA,SACA,QACA,MACA,MACA,SACA,SACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,MACA,UACA,UACA,SACA,UACA,UACA,WACA,QACA,OACA,QACA,UACA,UACA,OACA,UACA,YACA,OACA,OACA,YACA,UACA,QACA,SACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,OACA,UACA,UACA,MACA,SACA,YACA,SACA,UACA,OACA,UACA,WACA,WACA,YACA,QACA,OACA,MACA,SACA,WACA,YACA,SACA,UACA,WACA,YACA,WACA,QACA,YACA,WACA,YACA,OACA,SACA,WACA,UACA,QACA,YACA,QACA,UACA,UACA,OACA,SACA,QACA,OACA,WACA,WACA,OACA,SACA,UACA,SACA,UACA,WACA,SACA,QACA,OACA,UACA,YACA,UACA,SACA,WACA,WACA,QACA,WACA,UACA,SACA,QACA,QACA,SACA,WACA,OACA,MACA,OACA,SACA,OACA,WACA,WACA,SACA,OACA,OACA,WACA,WACA,YACA,WACA,OACA,SACA,SACA,WACA,SACA,WACA,UACA,UACA,UACA,OACA,UACA,UACA,YACA,WACA,SACA,UACA,UACA,OACA,SACA,QACA,OACA,UACA,WACA,OACA,QACA,WACA,QACA,QACA,QACA,SACA,UACA,QACA,OACA,UACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,UACA,WACA,SACA,UACA,SACA,OACA,OACA,QACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,QACA,UACA,SACA,QACA,SACA,UACA,SACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,SACA,WACA,SACA,UACA,UACA,SACA,WACA,SACA,WACA,SACA,WACA,OACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,OACA,UACA,SACA,YACA,UACA,QACA,OACA,SACA,OACA,OACA,UACA,SACA,UACA,YACA,WACA,SACA,UACA,QACA,WACA,SACA,WACA,YACA,YACA,SACA,UACA,YACA,UACA,UACA,WACA,MACA,OACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,SACA,QACA,QACA,OACA,OACA,UACA,YACA,QACA,QACA,UACA,WACA,OACA,QACA,WACA,WACA,SACA,SACA,WACA,UACA,OACA,OACA,MACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,SACA,SACA,SACA,UACA,QACA,SACA,QACA,YACA,UACA,SACA,SACA,YACA,YACA,QACA,UACA,YACA,WACA,YACA,YACA,SACA,WACA,UACA,SACA,YACA,WACA,YACA,UACA,UACA,SACA,QACA,WACA,WACA,YACA,YACA,OACA,QACA,OACA,YACA,OACA,SACA,WACA,SACA,YACA,UACA,YACA,WACA,QACA,YACA,SACA,QACA,YACA,WACA,WACA,SACA,WACA,WACA,QACA,OACA,UACA,YACA,WACA,UACA,SACA,UACA,WACA,QACA,YACA,WACA,YACA,YACA,YACA,UACA,YACA,WACA,WACA,SACA,WACA,UACA,YACA,WACA,WACA,QACA,YACA,SACA,YACA,OACA,OACA,SACA,UACA,YACA,UACA,WACA,UACA,WACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,YACA,UACA,UACA,UACA,YACA,WACA,YACA,SACA,UACA,UACA,YACA,QACA,UACA,SACA,UACA,QACA,WACA,SACA,SACA,SACA,OACA,MACA,WACA,YACA,UACA,UACA,WACA,QACA,QACA,YACA,YACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,YACA,SACA,UACA,SACA,QACA,YACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,UACA,WACA,SACA,UACA,UACA,UACA,YACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,OACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,WACA,WACA,WACA,QACA,WACA,WACA,UACA,QACA,SACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,QACA,SACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,YACA,WACA,QACA,WACA,OACA,YACA,WACA,WACA,UACA,MACA,YACA,SACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,YACA,YACA,YACA,WACA,MACA,SACA,WACA,UACA,YACA,WACA,WACA,WACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,OACA,WACA,YACA,SACA,WACA,YACA,SACA,YACA,QACA,QACA,YACA,WACA,UACA,WACA,UACA,WACA,QACA,YACA,YACA,QACA,QACA,UACA,OACA,QACA,SACA,QACA,SACA,OACA,OACA,MACA,MACA,WACA,QACA,OACA,SACA,UACA,WACA,WACA,YACA,YACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,WACA,UACA,YACA,SACA,QACA,YACA,QACA,YACA,WACA,SACA,UACA,YACA,WACA,QACA,QACA,SACA,YACA,QACA,UACA,UACA,SACA,YACA,QACA,UACA,SACA,WACA,OACA,YACA,YACA,SACA,OACA,SACA,SACA,SACA,UACA,YACA,UACA,OACA,QACA,MACA,OACA,OACA,SACA,QACA,YACA,OACA,SACA,SACA,UACA,QACA,SACA,UACA,YACA,WACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,WACA,SACA,WACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,UACA,OACA,SACA,OACA,UACA,QACA,OACA,MACA,YACA,SACA,WACA,WACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,QACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,QACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,WACA,YACA,QACA,SACA,QACA,MACA,MACA,QACA,MACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,YACA,OACA,UACA,YACA,YACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,SACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,OACA,MACA,OACA,WACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,WACA,OACA,WACA,UACA,WACA,UACA,QACA,SACA,WACA,OACA,WACA,QACA,UACA,YACA,UACA,OACA,SACA,OACA,OACA,OACA,OACA,UACA,OACA,OACA,WACA,UACA,YACA,YACA,YACA,WACA,QACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,MACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,WACA,QACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,YACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,OACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,UACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,MACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,SACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,QACA,WACA,OACA,YACA,QACA,UACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,SACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,YACA,SACA,SACA,QACA,UACA,UACA,SACA,WACA,SACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,QACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,YACA,SACA,WACA,YACA,OACA,WACA,UACA,QACA,YACA,UACA,SACA,YACA,YACA,SACA,WACA,QACA,YACA,WACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,SACA,UACA,WACA,UACA,SACA,SACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,UACA,SACA,OACA,SACA,WACA,UACA,SACA,UACA,UACA,YACA,WACA,UACA,YACA,QACA,SACA,UACA,WACA,YACA,MACA,WACA,UACA,QACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,QACA,OACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,YACA,SACA,YACA,QACA,SACA,WACA,QACA,YACA,SACA,YACA,YACA,QACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,UACA,UACA,WACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,UACA,WACA,YACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,UACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,YACA,WACA,QACA,WACA,QACA,SACA,YACA,SACA,WACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,UACA,WACA,SACA,OACA,YACA,UACA,QACA,MACA,OACA,OACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,SACA,WACA,QACA,OACA,YACA,UACA,YACA,UACA,SACA,OACA,OACA,UACA,OACA,SACA,SACA,QACA,WACA,WACA,UACA,WACA,YACA,OACA,SACA,WACA,WACA,SACA,YACA,WACA,UACA,SACA,WACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,UACA,WACA,SACA,SACA,UACA,YACA,UACA,UACA,QACA,SACA,WACA,QACA,UACA,OACA,WACA,YACA,UACA,QACA,SACA,MACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,YACA,UACA,SACA,WACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,SACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,UACA,SACA,YACA,YACA,YACA,SACA,UACA,YACA,UACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,UACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,SACA,YACA,WACA,QACA,SACA,YACA,UACA,UACA,SACA,QACA,WACA,QACA,QACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,YACA,WACA,WACA,YACA,QACA,UACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,QACA,QACA,YACA,SACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,UACA,YACA,WACA,SACA,YACA,YACA,WACA,WACA,QACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,QACA,YACA,QACA,UACA,MACA,UACA,SACA,YACA,SACA,SACA,MACA,OACA,YACA,OACA,UACA,QACA,YACA,OACA,SACA,SACA,QACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,SACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,QACA,UACA,WACA,SACA,SACA,UACA,SACA,SACA,WACA,YACA,OACA,QACA,YACA,WACA,UACA,WACA,WACA,YACA,SACA,YACA,UACA,WACA,UACA,SACA,QACA,UACA,OACA,SACA,WACA,UACA,YACA,SACA,QACA,WACA,QACA,WACA,QACA,UACA,YACA,YACA,UACA,UACA,QACA,UACA,UACA,SACA,YACA,YACA,WACA,UACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,QACA,QACA,QACA,UACA,YACA,QACA,OACA,SACA,YACA,WACA,YACA,QACA,QACA,OACA,SACA,SACA,OACA,SACA,QACA,SACA,WACA,YACA,WACA,YACA,WACA,QACA,SACA,SACA,OACA,OACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,SACA,OACA,SACA,QACA,SACA,WACA,OACA,SACA,QACA,YACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,OACA,SACA,SACA,OACA,UACA,SACA,QACA,SACA,SACA,UACA,YACA,WACA,QACA,YACA,WACA,WACA,UACA,WACA,OACA,YACA,WACA,UACA,YACA,YACA,YACA,WACA,SACA,WACA,WACA,WACA,UACA,YACA,SACA,QACA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,YACA,SACA,SACA,SACA,SACA,YACA,YACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,UACA,WACA,WACA,WACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,YACA,UACA,UACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,UACA,SACA,WACA,YACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,UACA,WACA,WACA,QACA,QACA,UACA,UACA,YACA,WACA,WACA,WACA,UACA,QACA,UACA,YACA,UACA,SACA,SACA,SACA,WACA,SACA,YACA,OACA,SACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,QACA,UACA,YACA,SACA,UACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,YACA,YACA,WACA,YACA,YACA,UACA,UACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,SACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,UACA,SACA,UACA,QACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,YACA,OACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,UACA,WACA,SACA,SACA,WACA,YACA,YACA,SACA,WACA,YACA,SACA,YACA,YACA,UACA,UACA,UACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,SACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,UACA,UACA,WACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,UACA,SACA,OACA,OACA,QACA,UACA,OACA,UACA,WACA,WACA,UACA,SACA,WACA,UACA,OACA,SACA,OACA,UACA,UACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,UACA,QACA,UACA,OACA,QACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,QACA,QACA,QACA,OACA,OACA,SACA,SACA,OACA,SACA,UACA,UACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,UACA,QACA,SACA,QACA,SACA,SACA,UACA,SACA,UACA,OACA,SACA,SACA,MACA,SACA,OACA,SACA,WACA,UACA,QACA,YACA,UACA,SACA,UACA,QACA,OACA,SACA,UACA,QACA,OACA,OACA,OACA,MACA,UACA,WACA,YACA,SACA,YACA,SACA,YACA,UACA,WACA,QACA,UACA,SACA,YACA,YACA,SACA,WACA,UACA,OACA,OACA,UACA,QACA,OACA,QACA,OACA,QACA,SACA,WACA,SACA,SACA,QACA,SACA,QACA,OACA,WACA,SACA,UACA,YACA,YACA,OACA,SACA,WACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,UACA,SACA,WACA,UACA,UACA,YACA,UACA,YACA,YACA,WACA,QACA,WACA,YACA,OACA,QACA,UACA,YACA,QACA,UACA,YACA,UACA,OACA,YACA,QACA,UACA,WACA,QACA,YACA,YACA,UACA,WACA,WACA,YACA,QACA,QACA,SACA,UACA,QACA,UACA,SACA,QACA,YACA,MACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,WACA,OACA,UACA,UACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,QACA,UACA,YACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,QACA,QACA,WACA,QACA,QACA,UACA,QACA,SACA,YACA,YACA,SACA,YACA,SACA,UACA,QACA,WACA,SACA,YACA,UACA,WACA,WACA,SACA,WACA,WACA,WACA,YACA,YACA,QACA,UACA,UACA,SACA,WACA,SACA,WACA,YACA,SACA,SACA,UACA,YACA,WACA,WACA,UACA,UACA,WACA,QACA,QACA,WACA,YACA,SACA,UACA,WACA,YACA,YACA,SACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,QACA,SACA,WACA,WACA,WACA,SACA,WACA,UACA,UACA,UACA,SACA,WACA,YACA,YACA,WACA,OACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,UACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,WACA,QACA,YACA,SACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,UACA,WACA,QACA,UACA,UACA,SACA,WACA,UACA,UACA,SACA,WACA,QACA,YACA,YACA,UACA,UACA,WACA,SACA,QACA,SACA,UACA,YACA,UACA,SACA,QACA,QACA,WACA,UACA,YACA,UACA,QACA,QACA,UACA,UACA,QACA,UACA,WACA,QACA,SACA,QACA,UACA,QACA,YACA,UACA,UACA,UACA,YACA,QACA,SACA,OACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,SACA,SACA,UACA,WACA,YACA,SACA,UACA,SACA,UACA,QACA,UACA,YACA,UACA,QACA,OACA,QACA,YACA,QACA,QACA,WACA,UACA,WACA,WACA,QACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,SACA,QACA,QACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,QACA,UACA,YACA,YACA,WACA,QACA,SACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,SACA,SACA,UACA,WACA,YACA,SACA,QACA,SACA,WACA,UACA,UACA,YACA,OACA,QACA,OACA,MACA,UACA,WACA,UACA,SACA,SACA,SACA,OACA,UACA,WACA,WACA,SACA,SACA,UACA,OACA,YACA,QACA,OACA,OACA,SACA,YACA,SACA,YACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,UACA,MACA,QACA,SACA,SACA,SACA,UACA,WACA,YACA,UACA,UACA,QACA,UACA,WACA,YACA,UACA,UACA,OACA,SACA,SACA,WACA,SACA,UACA,YACA,WACA,WACA,UACA,SACA,SACA,SACA,OACA,QACA,QACA,QACA,SACA,UACA,UACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,YACA,UACA,WACA,WACA,QACA,UACA,WACA,WACA,UACA,QACA,YACA,UACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,OACA,UACA,QACA,WACA,YACA,UACA,WACA,QACA,UACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,YACA,SACA,SACA,UACA,QACA,SACA,YACA,UACA,WACA,YACA,WACA,WACA,QACA,WACA,YACA,SACA,OACA,OACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,OACA,YACA,UACA,SACA,OACA,OACA,QACA,QACA,MACA,QACA,UACA,YACA,UACA,WACA,UACA,QACA,WACA,QACA,YACA,QACA,QACA,QACA,UACA,QACA,OACA,SACA,YACA,YACA,UACA,QACA,UACA,SACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,QACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,WACA,QACA,QACA,UACA,WACA,SACA,UACA,SACA,QACA,UACA,UACA,QACA,QACA,WACA,YACA,YACA,UACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,QACA,OACA,QACA,UACA,SACA,WACA,QACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,YACA,SACA,QACA,YACA,UACA,WACA,YACA,UACA,WACA,QACA,OACA,SACA,YACA,SACA,SACA,QACA,SACA,QACA,QACA,UACA,SACA,UACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,YACA,UACA,YACA,WACA,YACA,UACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,UACA,QACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,UACA,UACA,WACA,SACA,UACA,SACA,QACA,SACA,SACA,SACA,QACA,QACA,QACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,QACA,WACA,WACA,SACA,SACA,SACA,YACA,UACA,YACA,YACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,QACA,SACA,WACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,QACA,WACA,UACA,YACA,UACA,WACA,SACA,WACA,UACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,QACA,YACA,WACA,WACA,YACA,QACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,OACA,SACA,UACA,OACA,SACA,UACA,YACA,YACA,WACA,YACA,UACA,OACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,QACA,YACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,UACA,YACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,YACA,YACA,YACA,UACA,QACA,QACA,SACA,QACA,QACA,YACA,YACA,WACA,UACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,QACA,QACA,QACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,QACA,SACA,SACA,SACA,WACA,YACA,QACA,SACA,UACA,SACA,WACA,SACA,SACA,SACA,SACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,WACA,YACA,SACA,YACA,UACA,WACA,QACA,SACA,QACA,UACA,UACA,UACA,WACA,SACA,QACA,UACA,UACA,SACA,QACA,UACA,WACA,SACA,UACA,YACA,QACA,QACA,UACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,YACA,UACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,YACA,YACA,YACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,UACA,SACA,SACA,YACA,UACA,YACA,OACA,UACA,SACA,SACA,OACA,WACA,YACA,UACA,SACA,YACA,WACA,QACA,UACA,QACA,WACA,WACA,WACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,WACA,YACA,SACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,SACA,WACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,SACA,UACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,YACA,WACA,SACA,WACA,UACA,YACA,WACA,QACA,UACA,UACA,WACA,YACA,YACA,OACA,YACA,UACA,YACA,OACA,WACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,QACA,SACA,QACA,QACA,QACA,WACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,QACA,SACA,UACA,UACA,QACA,WACA,SACA,SACA,YACA,UACA,YACA,UACA,SACA,WACA,QACA,OACA,UACA,WACA,UACA,UACA,WACA,UACA,YACA,MACA,UACA,OACA,SACA,SACA,WACA,OACA,QACA,SACA,WACA,QACA,SACA,OACA,SACA,UACA,UACA,UACA,WACA,UACA,WACA,WACA,UACA,UACA,OACA,YACA,SACA,SACA,UACA,QACA,SACA,SACA,WACA,OACA,SACA,QACA,YACA,UACA,QACA,WACA,SACA,WACA,SACA,QACA,SACA,QACA,OACA,OACA,UACA,YACA,OACA,QACA,QACA,WACA,WACA,UACA,UACA,YACA,QACA,SACA,WACA,UACA,UACA,YACA,WACA,WACA,QACA,UACA,QACA,QACA,SACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,WACA,SACA,YACA,SACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,WACA,WACA,OACA,YACA,UACA,QACA,QACA,QACA,SACA,WACA,UACA,OACA,QACA,UACA,UACA,YACA,YACA,WACA,UACA,OACA,SACA,OACA,OACA,QACA,SACA,UACA,YACA,UACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,OACA,UACA,OACA,SACA,SACA,SACA,UACA,YACA,SACA,SACA,SACA,QACA,UACA,QACA,WACA,UACA,QACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,UACA,SACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,WACA,WACA,OACA,YACA,WACA,YACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,SACA,QACA,WACA,SACA,QACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,WACA,WACA,UACA,YACA,SACA,WACA,WACA,UACA,QACA,SACA,YACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,YACA,SACA,WACA,QACA,SACA,QACA,QACA,UACA,QACA,SACA,YACA,UACA,WACA,WACA,YACA,QACA,MACA,QACA,WACA,UACA,UACA,UACA,MACA,UACA,QACA,SACA,WACA,QACA,SACA,UACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,OACA,MACA,QACA,QACA,QACA,WACA,SACA,YACA,SACA,QACA,QACA,UACA,YACA,OACA,WACA,QACA,QACA,QACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,SACA,QACA,OACA,QACA,WACA,YACA,QACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,UACA,YACA,WACA,SACA,SACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,UACA,WACA,WACA,YACA,UACA,YACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,YACA,UACA,YACA,WACA,QACA,YACA,UACA,YACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,SACA,YACA,UACA,YACA,WACA,UACA,WACA,UACA,SACA,WACA,SACA,YACA,UACA,WACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,YACA,YACA,YACA,SACA,WACA,UACA,YACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,QACA,YACA,YACA,YACA,YACA,YACA,QACA,WACA,YACA,SACA,WACA,OACA,YACA,WACA,WACA,UACA,SACA,YACA,YACA,UACA,UACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,UACA,WACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,SACA,YACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,SACA,YACA,YACA,YACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,SACA,WACA,YACA,SACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,UACA,UACA,YACA,WACA,UACA,WACA,WACA,SACA,QACA,QACA,UACA,WACA,WACA,YACA,SACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,UACA,WACA,UACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,YACA,UACA,QACA,YACA,SACA,WACA,YACA,SACA,UACA,YACA,YACA,YACA,SACA,YACA,WACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,WACA,YACA,SACA,UACA,UACA,WACA,SACA,SACA,SACA,WACA,YACA,SACA,OACA,QACA,UACA,WACA,UACA,SACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,WACA,SACA,SACA,UACA,QACA,SACA,WACA,UACA,SACA,SACA,YACA,UACA,SACA,QACA,UACA,OACA,YACA,OACA,QACA,QACA,UACA,UACA,UACA,SACA,SACA,QACA,UACA,SACA,SACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,QACA,SACA,SACA,YACA,QACA,UACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,OACA,QACA,SACA,YACA,SACA,WACA,SACA,WACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,QACA,QACA,YACA,WACA,UACA,UACA,SACA,QACA,UACA,SACA,YACA,WACA,UACA,OACA,SACA,OACA,UACA,OACA,WACA,YACA,SACA,QACA,OACA,WACA,UACA,QACA,WACA,SACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,UACA,WACA,QACA,OACA,YACA,UACA,WACA,UACA,UACA,SACA,WACA,UACA,QACA,QACA,WACA,WACA,UACA,WACA,YACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,QACA,UACA,OACA,WACA,SACA,UACA,UACA,QACA,SACA,UACA,QACA,QACA,SACA,YACA,MACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,OACA,SACA,OACA,UACA,SACA,SACA,QACA,OACA,UACA,SACA,UACA,SACA,WACA,YACA,YACA,WACA,YACA,UACA,SACA,SACA,YACA,UACA,UACA,WACA,YACA,UACA,OACA,UACA,QACA,QACA,WACA,SACA,OACA,WACA,SACA,OACA,QACA,QACA,WACA,QACA,YACA,SACA,QACA,WACA,UACA,QACA,WACA,UACA,WACA,SACA,MACA,OACA,SACA,QACA,SACA,QACA,QACA,YACA,UACA,OACA,OACA,YACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,SACA,YACA,UACA,SACA,YACA,OACA,OACA,QACA,UACA,OACA,OACA,UACA,SACA,WACA,SACA,OACA,QACA,WACA,SACA,OACA,SACA,OACA,OACA,WACA,QACA,UACA,SACA,SACA,WACA,SACA,MACA,OACA,YACA,YACA,YACA,YACA,YACA,UACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,UACA,UACA,YACA,QACA,YACA,YACA,QACA,QACA,QACA,MACA,UACA,QACA,SACA,WACA,UACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,UACA,UACA,YACA,UACA,WACA,UACA,YACA,UACA,OACA,QACA,QACA,MACA,UACA,UACA,OACA,OACA,OACA,WACA,WACA,SACA,WACA,QACA,UACA,OACA,MACA,YACA,UACA,QACA,MACA,SACA,QACA,QACA,OACA,SACA,SACA,OACA,QACA,MACA,UACA,QACA,MACA,WACA,OACA,YACA,QACA,YACA,UACA,UACA,QACA,OACA,MACA,SACA,SACA,OACA,SACA,YACA,YACA,UACA,S,4GCjmPF,iBAEA,MAAavvF,UAA6B,EAAAwvF,aAGxC99H,YAAYuH,GACVhH,MAAMgH,GACM,MAARA,IAGJvG,KAAKkvC,eAAiBlvC,KAAK+8H,oBAAoB,oBARnD,0B,+FCFA,iBAEA,MAAaC,UAAgB,EAAAF,aAQ3B99H,YAAYuH,EAAY,MACtBhH,MAAMgH,GACM,MAARA,IAGJvG,KAAK6yG,eAAiB7yG,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK6vF,MAAQ7vF,KAAK+8H,oBAAoB,SACtC/8H,KAAKouF,OAASpuF,KAAK+8H,oBAAoB,UACvC/8H,KAAKmzG,SAAWnzG,KAAK+8H,oBAAoB,YACzC/8H,KAAKozG,QAAUpzG,KAAK+8H,oBAAoB,WACxC/8H,KAAKgsE,KAAOhsE,KAAK+8H,oBAAoB,UAlBzC,a,+FCAA,iBAEA,MAAaE,UAAiB,EAAAH,aAM5B99H,YAAYuH,EAAY,MACtBhH,MAAMgH,GACM,MAARA,IAGJvG,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK2a,MAAQ3a,KAAK+8H,oBAAoB,SACtC/8H,KAAKoiF,SAAWpiF,KAAK+8H,oBAAoB,cAd7C,c,mGCJA,iBAEA,MAAaG,UAAoB,EAAAJ,aAoB/B99H,YAAYuH,EAAY,MACtBhH,MAAMgH,GACM,MAARA,IAGJvG,KAAKiO,MAAQjO,KAAK+8H,oBAAoB,SACtC/8H,KAAKk2G,UAAYl2G,KAAK+8H,oBAAoB,aAC1C/8H,KAAKo2G,WAAap2G,KAAK+8H,oBAAoB,cAC3C/8H,KAAKm2G,SAAWn2G,KAAK+8H,oBAAoB,YACzC/8H,KAAK67G,SAAW77G,KAAK+8H,oBAAoB,YACzC/8H,KAAK6iH,SAAW7iH,KAAK+8H,oBAAoB,YACzC/8H,KAAK8iH,SAAW9iH,KAAK+8H,oBAAoB,YACzC/8H,KAAK8uD,KAAO9uD,KAAK+8H,oBAAoB,QACrC/8H,KAAKsuB,MAAQtuB,KAAK+8H,oBAAoB,SACtC/8H,KAAKuuD,WAAavuD,KAAK+8H,oBAAoB,cAC3C/8H,KAAKyuD,QAAUzuD,KAAK+8H,oBAAoB,WACxC/8H,KAAK4iH,QAAU5iH,KAAK+8H,oBAAoB,WACxC/8H,KAAK2C,MAAQ3C,KAAK+8H,oBAAoB,SACtC/8H,KAAK27G,MAAQ37G,KAAK+8H,oBAAoB,SACtC/8H,KAAKq7G,IAAMr7G,KAAK+8H,oBAAoB,OACpC/8H,KAAK43C,SAAW53C,KAAK+8H,oBAAoB,YACzC/8H,KAAKo7G,eAAiBp7G,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKm7G,cAAgBn7G,KAAK+8H,oBAAoB,mBA1ClD,iB,+FCFA,iBAEA,WAEA,MAAaI,UAAiB,EAAAL,aAQ5B99H,YAAYuH,EAAY,MAEtB,GADAhH,MAAMgH,GACM,MAARA,EACF,OAEFvG,KAAK43C,SAAW53C,KAAK+8H,oBAAoB,YACzC/8H,KAAK44C,SAAW54C,KAAK+8H,oBAAoB,YACzC/8H,KAAKo9H,qBAAuBp9H,KAAK+8H,oBAAoB,wBACrD/8H,KAAKq5C,KAAOr5C,KAAK+8H,oBAAoB,QACrC/8H,KAAKq9H,mBAAqBr9H,KAAK+8H,oBAAoB,sBAEnD,MAAMxjF,EAAOv5C,KAAK+8H,oBAAoB,QAC1B,MAARxjF,IACFv5C,KAAKu5C,KAAOA,EAAK/yC,KAAK4Q,GAAW,IAAI,EAAAkmH,YAAYlmH,OArBvD,c,mGCHA,iBAEA,MAAakmH,UAAoB,EAAAR,aAI/B99H,YAAYuH,EAAY,MAEtB,GADAhH,MAAMgH,GAHR,KAAA4/E,MAAsB,KAIR,MAAR5/E,EACF,OAEFvG,KAAKw5C,IAAMx5C,KAAK+8H,oBAAoB,OACpC,MAAM52C,EAAQnmF,KAAK+8H,oBAAoB,SACvC/8H,KAAKmmF,MAAiB,MAATA,EAAgBA,EAAQ,MAXzC,iB,sGCHA,iBAEA,MAAatqD,UAAuB,EAAAihG,aA0BlC99H,YAAYuH,EAAY,MAEtB,GADAhH,MAAMgH,GACM,MAARA,EACF,OAAOvG,KAETA,KAAKu9H,gBAAkBv9H,KAAK+8H,oBAAoB,mBAChD/8H,KAAKw9H,mBAAqBx9H,KAAK+8H,oBAAoB,sBACnD/8H,KAAK0zC,cAAgB1zC,KAAK+8H,oBAAoB,iBAG9C/8H,KAAKy9H,qBAAuBz9H,KAAK+8H,oBAAoB,wBACrD/8H,KAAK09H,0BAA4B19H,KAAK+8H,oBAAoB,6BAE1D/8H,KAAKg8B,qBAAuBh8B,KAAK+8H,oBAAoB,wBACrD/8H,KAAKk8B,kBAAoBl8B,KAAK+8H,oBAAoB,qBAClD/8H,KAAKm8B,oBAAsBn8B,KAAK+8H,oBAAoB,uBACpD/8H,KAAKq8B,wBAA0Br8B,KAAK+8H,oBAAoB,2BACxD/8H,KAAKs8B,0BAA4Bt8B,KAAK+8H,oBAAoB,6BAE1D/8H,KAAK29H,cAAgB39H,KAAK+8H,oBAAoB,iBAC9C/8H,KAAK49H,aAAe59H,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK69H,UAAY79H,KAAK+8H,oBAAoB,aAC1C/8H,KAAK89H,eAAiB99H,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK88B,YAAc98B,KAAK+8H,oBAAoB,eAC5C/8H,KAAK68B,oBAAsB78B,KAAK+8H,oBAAoB,wBAlDxD,oB,qGCDA,iBAEA,MAAagB,UAAsB,EAAAjB,aAGjC99H,YAAYuH,EAAY,MACtBhH,MAAMgH,GACM,MAARA,IAGJvG,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,UARzC,mB,mGCHA,iBAEA,MAAaiB,UAAoB,EAAAlB,aAM/B99H,YAAYuH,EAAY,MACtBhH,MAAMgH,GACM,MAARA,IAGJvG,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKqV,SAAWrV,KAAK+8H,oBAAoB,YACzC/8H,KAAKk5C,KAAOl5C,KAAK+8H,oBAAoB,QACrC/8H,KAAKi+H,SAAWj+H,KAAK+8H,oBAAoB,cAd7C,iB,mGCFA,iBAEA,MAAamB,UAAoB,EAAApB,aAI/B99H,YAAYuH,EAAY,MACtBhH,MAAMgH,GACM,MAARA,IAGJvG,KAAK8N,KAAO9N,KAAK+8H,oBAAoB,QACrC/8H,KAAKs+C,OAASt+C,KAAK+8H,oBAAoB,YAAa,IAVxD,iB,oGCFA,iBAOA,WAGA,MAAaoB,UAAqB,EAAArB,aAgFhC99H,YAAYuH,EAAY,MACtBhH,MAAMgH,GACM,MAARA,IAIJvG,KAAKo+H,WAAap+H,KAAK+8H,oBAAoB,cAE3C/8H,KAAKshC,oBAAsBthC,KAAK+8H,oBAAoB,uBACpD/8H,KAAKm1H,gBAAkBn1H,KAAK+8H,oBAAoB,mBAEhD/8H,KAAKq+H,UAAYr+H,KAAK+8H,oBAAoB,aAC1C/8H,KAAKqJ,SAAWrJ,KAAK+8H,oBAAoB,YACzC/8H,KAAK6mC,aAAe7mC,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKs+H,gBAAkBt+H,KAAK+8H,oBAAoB,mBAChD/8H,KAAKu+H,iBAAmBv+H,KAAK+8H,oBAAoB,oBACjD/8H,KAAKw+H,8BAAgCx+H,KAAK+8H,oBAAoB,iCAC9D/8H,KAAKy+H,iBAAmBz+H,KAAK+8H,oBAAoB,oBACjD/8H,KAAK0+H,2BAA6B1+H,KAAK+8H,oBAAoB,8BAC3D/8H,KAAK2+H,0BAA4B3+H,KAAK+8H,oBAAoB,6BAC1D/8H,KAAK4+H,yBAA2B5+H,KAAK+8H,oBAAoB,4BACzD/8H,KAAK6+H,UAAY7+H,KAAK+8H,oBAAoB,aAC1C/8H,KAAK8+H,uBAAyB9+H,KAAK+8H,oBAAoB,0BAEvD/8H,KAAK++H,eAAiB/+H,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKg/H,2BAA6Bh/H,KAAK+8H,oBAAoB,8BAC3D/8H,KAAKi/H,kBAAoBj/H,KAAK+8H,oBAAoB,qBAClD/8H,KAAKk/H,8BAAgCl/H,KAAK+8H,oBAAoB,iCAC9D/8H,KAAKm/H,uBAAyBn/H,KAAK+8H,oBAAoB,0BACvD/8H,KAAKo/H,uBAAyBp/H,KAAK+8H,oBAAoB,0BAEvD/8H,KAAKq/H,YAAcr/H,KAAK+8H,oBAAoB,eAC5C/8H,KAAKs/H,eAAiBt/H,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKu/H,0BAA4Bv/H,KAAK+8H,oBAAoB,6BAC1D/8H,KAAKw/H,0BAA4Bx/H,KAAK+8H,oBAAoB,6BAC1D/8H,KAAKy/H,kBAAoBz/H,KAAK+8H,oBAAoB,qBAClD/8H,KAAK0/H,4BAA8B1/H,KAAK+8H,oBAAoB,+BAC5D/8H,KAAK2/H,iCAAmC3/H,KAAK+8H,oBAC3C,oCAEF/8H,KAAK4/H,iCAAmC5/H,KAAK+8H,oBAC3C,oCAEF/8H,KAAK6/H,2BAA6B7/H,KAAK+8H,oBAAoB,+BA1H7D,gBAAgBtlB,EAAqBqoB,EAAM,IAAI3B,GAwC7C,OAvCA2B,EAAI1B,WAAa3mB,EAAK2mB,WAEtB0B,EAAIx+F,oBAAsBm2E,EAAKn2E,oBAC/Bw+F,EAAI3K,gBAAkB1d,EAAK0d,gBAEvB2K,EAAI1B,aAAe,EAAA/tB,QAAQ0vB,eAC7BD,EAAIzB,UAAY5mB,EAAKuoB,OAAO3B,UAC5ByB,EAAIz2H,SAAWouG,EAAKuoB,OAAO32H,SAC3By2H,EAAIj5F,aAAe4wE,EAAKuoB,OAAOn5F,aAC/Bi5F,EAAIxB,gBAAkB7mB,EAAKuoB,OAAO1B,gBAClCwB,EAAIvB,iBAAmB9mB,EAAKuoB,OAAOzB,iBACnCuB,EAAItB,8BAAgC/mB,EAAKuoB,OAAOxB,8BAChDsB,EAAIrB,iBAAmBhnB,EAAKuoB,OAAOvB,iBACnCqB,EAAIpB,2BAA6BjnB,EAAKuoB,OAAOtB,2BAC7CoB,EAAInB,0BAA4BlnB,EAAKuoB,OAAOrB,0BAC5CmB,EAAIlB,yBAA2BnnB,EAAKuoB,OAAOpB,yBAC3CkB,EAAIjB,UAAYpnB,EAAKuoB,OAAOnB,UAC5BiB,EAAIhB,uBAAyBrnB,EAAKuoB,OAAOlB,wBAChCgB,EAAI1B,aAAe,EAAA/tB,QAAQ4vB,QACpCH,EAAIf,eAAiBtnB,EAAKyoB,KAAKnB,eAC/Be,EAAId,2BAA6BvnB,EAAKyoB,KAAKlB,2BAC3Cc,EAAIb,kBAAoBxnB,EAAKyoB,KAAKjB,kBAClCa,EAAIZ,8BAAgCznB,EAAKyoB,KAAKhB,8BAC9CY,EAAIX,uBAAyB1nB,EAAKyoB,KAAKf,uBACvCW,EAAIV,uBAAyB3nB,EAAKyoB,KAAKd,uBAEvCU,EAAIT,YAAc5nB,EAAKyoB,KAAKb,YAC5BS,EAAIR,eAAiB7nB,EAAKyoB,KAAKZ,eAC/BQ,EAAIP,0BAA4B9nB,EAAKyoB,KAAKX,0BAC1CO,EAAIN,0BAA4B/nB,EAAKyoB,KAAKV,0BAC1CM,EAAIL,kBAAoBhoB,EAAKyoB,KAAKT,kBAClCK,EAAIJ,4BAA8BjoB,EAAKyoB,KAAKR,4BAC5CI,EAAIH,iCAAmCloB,EAAKyoB,KAAKP,iCACjDG,EAAID,2BAA6BpoB,EAAKyoB,KAAKL,2BAG3CC,EAAIF,kCAAoCnoB,EAAKyoB,KAAKC,gCAG7CL,GAzCX,kB,oGCRA,uBAQE9gI,YAAY0C,GACM,MAAZA,IAGJ1B,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKyN,IAAM/L,EAAS+L,IACpBzN,KAAKqV,SAAW3T,EAAS2T,SACzBrV,KAAKoC,IAAMV,EAASU,IACpBpC,KAAKk5C,KAAOx3C,EAASw3C,KACrBl5C,KAAKi+H,SAAWv8H,EAASu8H,a,8FCjB7B,iBAQEj/H,YAAYuH,GACE,MAARA,IAIJvG,KAAK6yG,eAAiBtsG,EAAKssG,eAC3B7yG,KAAK6vF,MAAQtpF,EAAKspF,MAClB7vF,KAAKouF,OAAS7nF,EAAK6nF,OACnBpuF,KAAKmzG,SAAW5sG,EAAK4sG,SACrBnzG,KAAKozG,QAAU7sG,EAAK6sG,QACpBpzG,KAAKgsE,KAAOzlE,EAAKylE,S,kGCnBrB,iBAGA,WACA,WACA,WACA,WACA,UACA,WACA,WAEA,mBAuBEhtE,YAAY0C,EAA2BgoB,GACrC,GAAgB,MAAZhoB,EAAJ,CAmBA,OAfA1B,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKmB,eAAiBO,EAASP,eAC/BnB,KAAKomB,SAAW1kB,EAAS0kB,SACzBpmB,KAAKqY,KAAO3W,EAAS2W,KACrBrY,KAAKq6E,aAAe34E,EAAS24E,aAC7Br6E,KAAKi1E,oBAAsBvzE,EAASuzE,oBACpCj1E,KAAKopB,SAAW1nB,EAAS0nB,SACzBppB,KAAKonC,aAAe1lC,EAAS0lC,aAC7BpnC,KAAKqR,KAAO3P,EAAS2P,KACrBrR,KAAKU,KAAOgB,EAAShB,KACrBV,KAAKyxG,MAAQ/vG,EAAS+vG,MACtBzxG,KAAK0pB,cAAiC,MAAjBA,EAAwBA,EAAgBhoB,EAASgoB,cACtE1pB,KAAK0pC,YAAchoC,EAASgoC,YAC5B1pC,KAAKqrB,SAAW3pB,EAAS2pB,SAEjBrrB,KAAKqR,MACX,KAAK,EAAAs4B,WAAW+O,MACd14C,KAAK24C,MAAQ,IAAI,EAAAynF,UAAU1+H,EAASi3C,OACpC,MACF,KAAK,EAAAhP,WAAWi6C,WACd5jF,KAAKmlF,WAAa,IAAI,EAAAk7C,eAAe3+H,EAASyjF,YAC9C,MACF,KAAK,EAAAx7C,WAAWwlB,KACdnvD,KAAK+kF,KAAO,IAAI,EAAAu7C,SAAS5+H,EAASqjF,MAClC,MACF,KAAK,EAAAp7C,WAAWg6C,SACd3jF,KAAKilF,SAAW,IAAI,EAAAs7C,aAAa7+H,EAASujF,UAMvB,MAAnBvjF,EAASugF,SACXjiF,KAAKiiF,OAASvgF,EAASugF,OAAOz7E,KAAKwvC,GAAM,IAAI,EAAAwqF,UAAUxqF,MAE7B,MAAxBt0C,EAASo4E,cACX95E,KAAK85E,YAAcp4E,EAASo4E,YAAYtzE,KAAKwxB,GAAM,IAAI,EAAAyoG,eAAezoG,MAExC,MAA5Bt2B,EAASk2G,kBACX53G,KAAK43G,gBAAkBl2G,EAASk2G,gBAAgBpxG,KAAK8gH,GAAO,IAAI,EAAAoZ,oBAAoBpZ,U,oGC7E1F,uBAOEtoH,YAAY0C,GACV1B,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKmB,eAAiBO,EAASP,eAC/BnB,KAAKU,KAAOgB,EAAShB,KACrBV,KAAKyxB,WAAa/vB,EAAS+vB,WAC3BzxB,KAAKif,SAAWvd,EAASud,Y,+FCZ7B,qB,+FCEA,kBAMEjgB,YAAY0C,GACM,MAAZA,IAGJ1B,KAAKqR,KAAO3P,EAAS2P,KACrBrR,KAAKU,KAAOgB,EAAShB,KACrBV,KAAK2a,MAAQjZ,EAASiZ,MACtB3a,KAAKoiF,SAAW1gF,EAAS0gF,a,gGCf7B,mBAKEpjF,YAAY0C,GACV1B,KAAKU,KAAOgB,EAAShB,KACrBV,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKonC,aAAe1lC,EAAS0lC,gB,kGCRjC,qBAoBEpoC,YAAYuH,GACE,MAARA,IAIJvG,KAAKiO,MAAQ1H,EAAK0H,MAClBjO,KAAKk2G,UAAY3vG,EAAK2vG,UACtBl2G,KAAKo2G,WAAa7vG,EAAK6vG,WACvBp2G,KAAKm2G,SAAW5vG,EAAK4vG,SACrBn2G,KAAK67G,SAAWt1G,EAAKs1G,SACrB77G,KAAK6iH,SAAWt8G,EAAKs8G,SACrB7iH,KAAK8iH,SAAWv8G,EAAKu8G,SACrB9iH,KAAK8uD,KAAOvoD,EAAKuoD,KACjB9uD,KAAKsuB,MAAQ/nB,EAAK+nB,MAClBtuB,KAAKuuD,WAAahoD,EAAKgoD,WACvBvuD,KAAKyuD,QAAUloD,EAAKkoD,QACpBzuD,KAAK4iH,QAAUr8G,EAAKq8G,QACpB5iH,KAAK2C,MAAQ4D,EAAK5D,MAClB3C,KAAK27G,MAAQp1G,EAAKo1G,MAClB37G,KAAKq7G,IAAM90G,EAAK80G,IAChBr7G,KAAK43C,SAAWrxC,EAAKqxC,SACrB53C,KAAKo7G,eAAiB70G,EAAK60G,eAC3Bp7G,KAAKm7G,cAAgB50G,EAAK40G,kB,gGC1C9B,iBAEA,kBAQEn8G,YAAYuH,GACE,MAARA,IAIJvG,KAAK43C,SAAWrxC,EAAKqxC,SACrB53C,KAAK44C,SAAWryC,EAAKqyC,SACrB54C,KAAKo9H,qBAAuB72H,EAAK62H,qBACjCp9H,KAAKq5C,KAAO9yC,EAAK8yC,KACjBr5C,KAAKq9H,mBAAqB92H,EAAK82H,mBAE3B92H,EAAKgzC,OACPv5C,KAAKu5C,KAAOhzC,EAAKgzC,KAAK/yC,KAAK4Q,GAAM,IAAI,EAAAupH,aAAavpH,U,kGCrBxD,qBAIEpY,YAAYuH,GAFZ,KAAA4/E,MAAsB,KAGR,MAAR5/E,IAGJvG,KAAKw5C,IAAMjzC,EAAKizC,IAChBx5C,KAAKmmF,MAAQ5/E,EAAK4/E,U,sGCNtB,yBAuCEnnF,YAAY0C,GACV1B,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKU,KAAOgB,EAAShB,KACrBV,KAAK+W,OAASrV,EAASqV,OACvB/W,KAAKqR,KAAO3P,EAAS2P,KACrBrR,KAAKuiB,QAAU7gB,EAAS6gB,QACxBviB,KAAKmiB,YAAczgB,EAASygB,YAC5BniB,KAAKkxB,UAAYxvB,EAASwvB,UAC1BlxB,KAAK4gI,aAAel/H,EAASk/H,aAC7B5gI,KAAK2zB,UAAYjyB,EAASiyB,UAC1B3zB,KAAK2zC,QAAUjyC,EAASiyC,QACxB3zC,KAAK4wC,OAASlvC,EAASkvC,OACvB5wC,KAAK6jC,OAASniC,EAASmiC,OACvB7jC,KAAKm1B,OAASzzB,EAASyzB,OACvBn1B,KAAK6gI,gBAAkBn/H,EAASm/H,gBAChC7gI,KAAKoiB,iBAAmB1gB,EAAS0gB,iBACjCpiB,KAAK8gI,SAAWp/H,EAASo/H,SACzB9gI,KAAK+gI,gBAAkBr/H,EAASq/H,gBAChC/gI,KAAK+vC,MAAQruC,EAASquC,MACtB/vC,KAAKghI,eAAiBt/H,EAASs/H,eAC/BhhI,KAAK4pB,aAAeloB,EAASkoB,aAC7B5pB,KAAKihI,SAAWv/H,EAASu/H,SACzBjhI,KAAKsJ,WAAa5H,EAAS4H,WAC3BtJ,KAAKwuB,YAAc9sB,EAAS8sB,YAC5BxuB,KAAKwiB,sBAAwB9gB,EAAS8gB,sBACtCxiB,KAAKiL,OAASvJ,EAASuJ,OACvBjL,KAAKqiB,wBAA0B3gB,EAAS2gB,wBACxCriB,KAAKszB,WAAa5xB,EAAS4xB,WAC3BtzB,KAAK6zB,aAAenyB,EAASmyB,aAC7B7zB,KAAK4mE,8BAAgCllE,EAASklE,8BAC9C5mE,KAAK2mE,2BAA6BjlE,EAASilE,2BAC3C3mE,KAAKmyC,gBAAkBzwC,EAASywC,gBAChCnyC,KAAKshC,oBAAsB5/B,EAAS4/B,oBACpCthC,KAAKm1H,gBAAkBzzH,EAASyzH,gBAChCn1H,KAAKunE,8BAAgC7lE,EAAS6lE,8BAC9CvnE,KAAKsnE,4BAA8B5lE,EAAS4lE,4BAC5CtnE,KAAKqnE,0BAA4B3lE,EAAS2lE,6B,yGC/E9C,4BAIEroE,YAAY0C,GACM,MAAZA,IAIJ1B,KAAK44C,SAAWl3C,EAASk3C,SACzB54C,KAAKwnH,aAAe9lH,EAAS8lH,iB,gGCTjC,mBAOExoH,YAAY0C,GACV1B,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKmB,eAAiBO,EAASP,eAC/BnB,KAAKqR,KAAO3P,EAAS2P,KACrBrR,KAAKuG,KAAO7E,EAAS6E,KACrBvG,KAAKuiB,QAAU7gB,EAAS6gB,W,kGCX5B,qBASEvjB,YAAY0C,GACV1B,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKU,KAAOgB,EAAShB,KACrBV,KAAK+W,OAASrV,EAASqV,OACvB/W,KAAKqR,KAAO3P,EAAS2P,KACrBrR,KAAKuiB,QAAU7gB,EAAS6gB,QACxBviB,KAAKiL,OAASvJ,EAASuJ,OACvBjL,KAAK2zB,UAAYjyB,EAASiyB,a,oGCjB9B,uBAGE30B,YAAYuH,GACE,MAARA,IAIJvG,KAAKqR,KAAO9K,EAAK8K,S,gGCXrB,gBAGA,WACA,WAEA,iBAkBErS,YAAY0C,GACV,GAAgB,MAAZA,EAmBJ,OAfA1B,KAAKG,GAAKuB,EAASvB,GACnBH,KAAKu3F,SAAW71F,EAAS61F,SACzBv3F,KAAKqR,KAAO3P,EAAS2P,KACrBrR,KAAKU,KAAOgB,EAAShB,KACrBV,KAAKyxG,MAAQ/vG,EAAS+vG,MACtBzxG,KAAKoC,IAAMV,EAASU,IACpBpC,KAAKkhI,eAAiBx/H,EAASw/H,eAC/BlhI,KAAKmhI,YAAcz/H,EAASy/H,YAC5BnhI,KAAKonC,aAAe1lC,EAAS0lC,aAC7BpnC,KAAKy8C,eAAiB/6C,EAAS+6C,eAC/Bz8C,KAAK03F,aAAeh2F,EAASg2F,aAC7B13F,KAAK44C,SAAWl3C,EAASk3C,SACzB54C,KAAK85D,SAAWp4D,EAASgoE,QACzB1pE,KAAKu8C,UAAY76C,EAAS66C,UAElBv8C,KAAKqR,MACX,KAAK,EAAA8qC,SAAS+kC,KACZlhF,KAAK8N,KAAO,IAAI,EAAAszH,aAAa1/H,EAASoM,MACtC,MACF,KAAK,EAAAquC,SAASi7C,KACZp3F,KAAKq1C,KAAO,IAAI,EAAAgsF,aAAa3/H,EAAS2zC,U,kGC/C9C,qBAMEr2C,YAAYuH,GACE,MAARA,IAIJvG,KAAKG,GAAKoG,EAAKpG,GACfH,KAAKqV,SAAW9O,EAAK8O,SACrBrV,KAAKk5C,KAAO3yC,EAAK2yC,KACjBl5C,KAAKi+H,SAAW13H,EAAK03H,a,kGCdzB,qBAIEj/H,YAAYuH,GACE,MAARA,IAIJvG,KAAK8N,KAAOvH,EAAKuH,KACjB9N,KAAKs+C,OAAS/3C,EAAK+3C,W,oNCKvB,iBAKA,MAAagjF,GAAb,mBAKA,MAAaC,GAAb,uBAKA,MAAaC,EAAb,cACE,KAAA5zG,QAAuD,IAAI2zG,EAI3D,KAAAhvE,QAAuD,IAAIgvE,EAK3D,KAAA5uE,MAAiD,IAAI4uE,EACrD,KAAAx9G,YAAmE,IAAIw9G,EAIvE,KAAA9+H,SAAoD,IAAI8+H,EACxD,KAAAE,0BAGI,IAAIH,GAnBV,gBA0BA,MAAaI,EAAb,cAKE,KAAAC,mBAAkE,IAAIL,EAItE,KAAAM,iBAA0E,IAAIN,EAI9E,KAAAO,aAAsE,IAAIP,EAI1E,KAAAtrG,WAAmD,IAAIsrG,GAjBzD,gBAuBA,MAAanK,GAAb,mBAoBA,MAAaz8C,EAAb,cAsBE,KAAAonD,gBAAmC,IAAI,EAAAC,gBAOvC,KAAAC,aAAmD,IAAIV,EAIvD,KAAAp/D,mBAA8B,QAjChC,oBAoCA,MAAao1D,GAAb,kBAOA,gBAOEt4H,YAAYyL,GANZ,KAAAlE,KAAqB,IAAIi7H,EACzB,KAAAv9F,KAAqB,IAAIy9F,EACzB,KAAAp9D,QAA2B,IAAI6yD,EAC/B,KAAA9zF,SAA6B,IAAIq3C,EACjC,KAAA28C,OAAyB,IAAIC,EAG3B56F,OAAOC,OAAO38B,KAAM,CAClBuG,KAAM,OAAF,wBACC,IAAIi7H,GACJ/2H,MAAAA,OAAI,EAAJA,EAAMlE,MAEX09B,KAAM,OAAF,wBACC,IAAIy9F,GACJj3H,MAAAA,OAAI,EAAJA,EAAMw5B,MAEXqgC,QAAS,OAAF,wBACF,IAAI6yD,GACJ1sH,MAAAA,OAAI,EAAJA,EAAM65D,SAEXjhC,SAAU,OAAF,wBACH,IAAIq3C,GACJjwE,MAAAA,OAAI,EAAJA,EAAM44B,UAEXg0F,OAAQ,OAAF,wBACD,IAAIC,GACJ7sH,MAAAA,OAAI,EAAJA,EAAM4sH,a,waC1KjB,iBACA,WACA,WAEA,WAEA,WAEA,MAAa4K,UAAmB,UAQ9BjjI,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKk5C,KAAOkc,EAAIlc,KAChBl5C,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEj1D,GAAI,KACJsN,IAAK,KACLwwH,SAAU,KACV5oH,SAAU,KACVjT,IAAK,MAEP,CAAC,KAAM,MAAO,cAIZi8C,QAAQv1B,EAAe9mB,G,yCAC3B,MAAMy1G,QAAaz3G,KAAKmiI,WACtB,IAAI,EAAAC,eAAepiI,MACnB,CACEqV,SAAU,MAEZyT,EACA9mB,GAGF,GAAgB,MAAZhC,KAAKoC,IAAa,CACpB,IAAIvB,EACJ,MAAMwhI,EAAoB,EAAAvgI,MAAMwyD,OAAeguE,0BAC/C,IAAID,EAGF,MAAM,IAAIzgI,MAAM,qDAFhBf,EAAgBwhI,EAAiBE,mBAKnC,IACE,MAAMlxG,QAAexwB,EAAcwvB,UAAUvH,GACvCiS,QAAiBl6B,EAAci6B,eAAe96B,KAAKoC,IAAKivB,MAAAA,EAAAA,EAAUrvB,GACxEy1G,EAAKr1G,IAAM,IAAI,EAAA84B,mBAAmBH,GAClC,MAAOl4B,KAKX,OAAO40G,KAGT+qB,mBACE,MAAMxqG,EAAI,IAAI,EAAAyoG,eAcd,OAbAzoG,EAAEkhB,KAAOl5C,KAAKk5C,KACdl5C,KAAKyiI,eACHziI,KACAg4B,EACA,CACE73B,GAAI,KACJsN,IAAK,KACLwwH,SAAU,KACV5oH,SAAU,KACVjT,IAAK,MAEP,CAAC,KAAM,MAAO,aAET41B,GA3EX,gB,kGCRA,iBAEA,iCACE,KAAAuxD,eAAiB,GACjB,KAAA2W,qBAAsB,EACtB,KAAA5M,oBAAqB,EACrB,KAAA7iC,mBAA4E,KAE5E,sBACE,OAAQ,EAAA3uD,MAAMm7C,mBAAmBj9C,KAAKupF,gBAGxC,wBACE,OAAkC,MAA3BvpF,KAAKywD,sB,4FCdhB,iBACA,WAEA,WAIA,MAAatB,UAAa,UAQxBnwD,YAAYo2D,GACV71D,QACW,MAAP61D,GAIJp1D,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEy9C,eAAgB,KAChBhjB,MAAO,KACPzB,OAAQ,KACR+kB,SAAU,KACVC,QAAS,KACTpnC,KAAM,MAER,IAIJ3tB,QAAQv1B,EAAe9mB,GACrB,OAAOhC,KAAKmiI,WACV,IAAI,EAAAn9C,SACJ,CACE6tB,eAAgB,KAChBhjB,MAAO,KACPzB,OAAQ,KACR+kB,SAAU,KACVC,QAAS,KACTpnC,KAAM,MAERljD,EACA9mB,GAIJ0gI,aACE,MAAMjoH,EAAI,IAAI,EAAA6lH,SASd,OARAtgI,KAAKyiI,eAAeziI,KAAMya,EAAG,CAC3Bo4F,eAAgB,KAChBhjB,MAAO,KACPzB,OAAQ,KACR+kB,SAAU,KACVC,QAAS,KACTpnC,KAAM,OAEDvxD,GAvDX,U,oaCNA,iBACA,WACA,WAEA,WACA,WACA,WAEA,WACA,UACA,WACA,WACA,WAGA,MAAa45B,UAAe,UAwB1Br1C,YAAYo2D,EAAkButE,EAAiB,MAE7C,GADApjI,QACW,MAAP61D,EAAJ,CAgCA,OA5BAp1D,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEj1D,GAAI,KACJgB,eAAgB,KAChBilB,SAAU,KACV1lB,KAAM,KACN+wG,MAAO,MAET,CAAC,KAAM,iBAAkB,aAG3BzxG,KAAKqR,KAAO+jD,EAAI/jD,KAChBrR,KAAKopB,SAAWgsC,EAAIhsC,SACpBppB,KAAKi1E,oBAAsB7f,EAAI6f,oBAC/Bj1E,KAAKqY,KAAO+8C,EAAI/8C,KACQ,MAApB+8C,EAAIilB,aACNr6E,KAAKq6E,aAAejlB,EAAIilB,aAExBr6E,KAAKq6E,cAAe,EAEtBr6E,KAAKonC,aAAmC,MAApBguB,EAAIhuB,aAAuB,IAAIr3B,KAAKqlD,EAAIhuB,cAAgB,KAC5EpnC,KAAK0pB,cAAgB0rC,EAAI1rC,cACzB1pB,KAAK2iI,UAAYA,EACjB3iI,KAAK0pC,YAAiC,MAAnB0rB,EAAI1rB,YAAsB,IAAI35B,KAAKqlD,EAAI1rB,aAAe,KACzE1pC,KAAKqrB,SAAW+pC,EAAI/pC,SAEZrrB,KAAKqR,MACX,KAAK,EAAAs4B,WAAW+O,MACd14C,KAAK24C,MAAQ,IAAI,EAAAD,MAAM0c,EAAIzc,OAC3B,MACF,KAAK,EAAAhP,WAAWi6C,WACd5jF,KAAKmlF,WAAa,IAAI,EAAAvB,WAAWxuB,EAAI+vB,YACrC,MACF,KAAK,EAAAx7C,WAAWwlB,KACdnvD,KAAK+kF,KAAO,IAAI,EAAA51B,KAAKiG,EAAI2vB,MACzB,MACF,KAAK,EAAAp7C,WAAWg6C,SACd3jF,KAAKilF,SAAW,IAAI,EAAAtB,SAASvuB,EAAI6vB,UAMd,MAAnB7vB,EAAI0kB,YACN95E,KAAK85E,YAAc1kB,EAAI0kB,YAAYtzE,KAAKwxB,GAAM,IAAI,EAAAiqG,WAAWjqG,KAE7Dh4B,KAAK85E,YAAc,KAGH,MAAd1kB,EAAI6sB,OACNjiF,KAAKiiF,OAAS7sB,EAAI6sB,OAAOz7E,KAAKwvC,GAAM,IAAI,EAAA4sF,MAAM5sF,KAE9Ch2C,KAAKiiF,OAAS,KAGW,MAAvB7sB,EAAIwiD,gBACN53G,KAAK43G,gBAAkBxiD,EAAIwiD,gBAAgBpxG,KAAK8gH,GAAO,IAAI,EAAA9gC,SAAS8gC,KAEpEtnH,KAAK43G,gBAAkB,MAIrBv5D,QAAQr8C,G,yCACZ,MAAM6gI,EAAQ,IAAI,EAAAl7G,WAAW3nB,MAY7B,aAVMA,KAAKmiI,WACTU,EACA,CACEniI,KAAM,KACN+wG,MAAO,MAETzxG,KAAKmB,eACLa,GAGMhC,KAAKqR,MACX,KAAK,EAAAs4B,WAAW+O,MACdmqF,EAAMlqF,YAAc34C,KAAK24C,MAAM0F,QAAQr+C,KAAKmB,eAAgBa,GAC5D,MACF,KAAK,EAAA2nC,WAAWi6C,WACdi/C,EAAM19C,iBAAmBnlF,KAAKmlF,WAAW9mC,QAAQr+C,KAAKmB,eAAgBa,GACtE,MACF,KAAK,EAAA2nC,WAAWwlB,KACd0zE,EAAM99C,WAAa/kF,KAAK+kF,KAAK1mC,QAAQr+C,KAAKmB,eAAgBa,GAC1D,MACF,KAAK,EAAA2nC,WAAWg6C,SACdk/C,EAAM59C,eAAiBjlF,KAAKilF,SAAS5mC,QAAQr+C,KAAKmB,eAAgBa,GAMtE,MAAM8mB,EAAQ9oB,KAAKmB,eAEnB,GAAwB,MAApBnB,KAAK85E,aAAuB95E,KAAK85E,YAAYlpE,OAAS,EAAG,CAC3D,MAAMkpE,EAAqB,SACrB95E,KAAK85E,YAAY/hD,QAAO,CAACpkB,EAASshC,IAC/BthC,EACJ1S,MAAK,IACGg0C,EAAWoJ,QAAQv1B,EAAO9mB,KAElCf,MAAM6hI,IACLhpD,EAAYziE,KAAKyrH,OAEpBnzH,QAAQ2wB,WACXuiG,EAAM/oD,YAAcA,EAGtB,GAAmB,MAAf95E,KAAKiiF,QAAkBjiF,KAAKiiF,OAAOrxE,OAAS,EAAG,CACjD,MAAMqxE,EAAgB,SAChBjiF,KAAKiiF,OAAOlqD,QAAO,CAACpkB,EAAS2uE,IAC1B3uE,EACJ1S,MAAK,IACGqhF,EAAMjkC,QAAQv1B,EAAO9mB,KAE7Bf,MAAM8hI,IACL9gD,EAAO5qE,KAAK0rH,OAEfpzH,QAAQ2wB,WACXuiG,EAAM5gD,OAASA,EAGjB,GAA4B,MAAxBjiF,KAAK43G,iBAA2B53G,KAAK43G,gBAAgBhnG,OAAS,EAAG,CACnE,MAAMgnG,EAAyB,SACzB53G,KAAK43G,gBAAgB7/E,QAAO,CAACpkB,EAAS2zG,IACnC3zG,EACJ1S,MAAK,IACGqmH,EAAGjpE,QAAQv1B,EAAO9mB,KAE1Bf,MAAM+hI,IACLprB,EAAgBvgG,KAAK2rH,OAExBrzH,QAAQ2wB,WACXuiG,EAAMjrB,gBAAkBA,EAG1B,OAAOirB,KAGTI,eACE,MAAMxoH,EAAI,IAAI,EAAA25B,WAmBd,OAlBA35B,EAAEta,GAAKH,KAAKG,GACZsa,EAAEtZ,eAAiBnB,KAAKmB,eACxBsZ,EAAE2L,SAAWpmB,KAAKomB,SAClB3L,EAAEpC,KAAOrY,KAAKqY,KACdoC,EAAE4/D,aAAer6E,KAAKq6E,aACtB5/D,EAAEw6D,oBAAsBj1E,KAAKi1E,oBAC7Bx6D,EAAE2O,SAAWppB,KAAKopB,SAClB3O,EAAE2sB,aAAoC,MAArBpnC,KAAKonC,aAAuBpnC,KAAKonC,aAAa2Y,cAAgB,KAC/EtlC,EAAEpJ,KAAOrR,KAAKqR,KACdoJ,EAAEiP,cAAgB1pB,KAAK0pB,cACvBjP,EAAEivB,YAAkC,MAApB1pC,KAAK0pC,YAAsB1pC,KAAK0pC,YAAYqW,cAAgB,KAC5EtlC,EAAE4Q,SAAWrrB,KAAKqrB,SAElBrrB,KAAKyiI,eAAeziI,KAAMya,EAAG,CAC3B/Z,KAAM,KACN+wG,MAAO,OAGDh3F,EAAEpJ,MACR,KAAK,EAAAs4B,WAAW+O,MACdj+B,EAAEk+B,MAAQ34C,KAAK24C,MAAMuqF,cACrB,MACF,KAAK,EAAAv5F,WAAWi6C,WACdnpE,EAAE0qE,WAAanlF,KAAKmlF,WAAWg+C,mBAC/B,MACF,KAAK,EAAAx5F,WAAWwlB,KACd10C,EAAEsqE,KAAO/kF,KAAK+kF,KAAK29C,aACnB,MACF,KAAK,EAAA/4F,WAAWg6C,SACdlpE,EAAEwqE,SAAWjlF,KAAKilF,SAASm+C,iBAe/B,OATmB,MAAfpjI,KAAKiiF,SACPxnE,EAAEwnE,OAASjiF,KAAKiiF,OAAOz7E,KAAKwvC,GAAMA,EAAEqtF,iBAEd,MAApBrjI,KAAK85E,cACPr/D,EAAEq/D,YAAc95E,KAAK85E,YAAYtzE,KAAKwxB,GAAMA,EAAEwqG,sBAEpB,MAAxBxiI,KAAK43G,kBACPn9F,EAAEm9F,gBAAkB53G,KAAK43G,gBAAgBpxG,KAAK8gH,GAAOA,EAAGgc,2BAEnD7oH,GAzNX,Y,kGCfA,iBAEA,WAGA,MAAawK,UAAmB,UAQ9BjmB,YAAYo2D,GACV71D,QACW,MAAP61D,GAIJp1D,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEj1D,GAAI,KACJgB,eAAgB,KAChBT,KAAM,KACN+wB,WAAY,KACZxS,SAAU,KACVC,cAAe,MAEjB,CAAC,KAAM,iBAAkB,aAAc,WAAY,kBAIvDm/B,UACE,OAAOr+C,KAAKmiI,WACV,IAAI,EAAA/sB,eAAep1G,MACnB,CACEU,KAAM,MAERV,KAAKmB,iBAnCX,gB,uGCNA,6B,oZCEA,iBAGA,gBACY+gI,iBACRzoF,EACAgqE,EACAj9G,EACA+8H,EAAoB,IAEpB,IAAK,MAAMzqB,KAAQtyG,EAAK,CAEtB,IAAKA,EAAI2xB,eAAe2gF,GACtB,SAGF,MAAM0qB,EAAU/f,EAAQj9G,EAAIsyG,IAASA,GACjCyqB,EAAWx/H,QAAQ+0G,IAAS,EAC7Br/D,EAAeq/D,GAAQ0qB,GAAoB,KAE3C/pF,EAAeq/D,GAAQ0qB,EAAU,IAAI,EAAAhyG,UAAUgyG,GAAW,MAIvDf,eACRhpF,EACAgqE,EACAj9G,EACAi9H,EAA0B,IAE1B,IAAK,MAAM3qB,KAAQtyG,EAAK,CAEtB,IAAKA,EAAI2xB,eAAe2gF,GACtB,SAGF,MAAM0qB,EAAW/pF,EAAejzC,EAAIsyG,IAASA,GACzC2qB,EAAiB1/H,QAAQ+0G,IAAS,EACnC2K,EAAgB3K,GAAmB,MAAX0qB,EAAkBA,EAAU,KAEpD/f,EAAgB3K,GAAmB,MAAX0qB,EAAmBA,EAAsBjhI,gBAAkB,MAK1E4/H,WACduB,EACAl9H,EACAsiB,EACA1mB,EAA0B,M,yCAE1B,MAAMq2C,EAAW,GACX3/B,EAAY9Y,KAElB,IAAK,MAAM84G,KAAQtyG,EAEZA,EAAI2xB,eAAe2gF,IAIxB,SAAW6qB,GACT,MAAMl9H,EAAIkJ,QAAQ2wB,UACfr/B,MAAK,KACJ,MAAM2iI,EAAUp9H,EAAIm9H,IAAYA,EAChC,OAAI7qH,EAAK8qH,GACA9qH,EAAK8qH,GAASvlF,QAAQv1B,EAAO1mB,GAE/B,QAERnB,MAAM0wG,IACJ+xB,EAAkBC,GAAWhyB,KAElCl5D,EAASphC,KAAK5Q,GAZhB,CAaGqyG,GAIL,aADMnpG,QAAQC,IAAI6oC,GACXirF,Q,oGC/EX,uBACE1kI,YAAmBqD,GAAA,KAAAA,OAAAA,K,uaCArB,iBACA,WAIA,kBAQErD,YACE6kI,EACAt9H,EACAu9H,EACAC,GAEA,GAAY,MAARx9H,EAAc,CAEhB,MAAMy9H,EAAUH,EAkBhB,OAfE7jI,KAAKuC,gBADG,MAANuhI,EACqBE,EAAU,IAAMF,EAAK,IAAMv9H,EAE3By9H,EAAU,IAAMz9H,EAI9B,MAAPw9H,IACF/jI,KAAKuC,iBAAmB,IAAMwhI,GAGhC/jI,KAAKikI,eAAiBD,EACtBhkI,KAAKuG,KAAOA,EACZvG,KAAK8jI,GAAKA,OACV9jI,KAAK+jI,IAAMA,GAMb,GADA/jI,KAAKuC,gBAAkBshI,GAClB7jI,KAAKuC,gBACR,OAGF,MAAM2hI,EAAelkI,KAAKuC,gBAAgB4E,MAAM,KAChD,IAAIg9H,EAAsB,KAE1B,GAA4B,IAAxBD,EAAatzH,OACf,IACE5Q,KAAKikI,eAAiB92G,SAAS+2G,EAAa,GAAI,MAChDC,EAAYD,EAAa,GAAG/8H,MAAM,KAClC,MAAOtE,GACP,YAGFshI,EAAYnkI,KAAKuC,gBAAgB4E,MAAM,KACvCnH,KAAKikI,eACkB,IAArBE,EAAUvzH,OACN,EAAAg/F,eAAew0B,yBACf,EAAAx0B,eAAey0B,cAGvB,OAAQrkI,KAAKikI,gBACX,KAAK,EAAAr0B,eAAew0B,yBACpB,KAAK,EAAAx0B,eAAe00B,yBAClB,GAAyB,IAArBH,EAAUvzH,OACZ,OAGF5Q,KAAK8jI,GAAKK,EAAU,GACpBnkI,KAAKuG,KAAO49H,EAAU,GACtBnkI,KAAK+jI,IAAMI,EAAU,GACrB,MACF,KAAK,EAAAv0B,eAAey0B,cAClB,GAAyB,IAArBF,EAAUvzH,OACZ,OAGF5Q,KAAK8jI,GAAKK,EAAU,GACpBnkI,KAAKuG,KAAO49H,EAAU,GACtB,MACF,KAAK,EAAAv0B,eAAe20B,uBACpB,KAAK,EAAA30B,eAAe40B,qBAClB,GAAyB,IAArBL,EAAUvzH,OACZ,OAGF5Q,KAAKuG,KAAO49H,EAAU,GACtB,MACF,QACE,QAIA9lF,QAAQv1B,EAAe1mB,EAA0B,M,yCACrD,GAA2B,MAAvBpC,KAAKykI,eACP,OAAOzkI,KAAKykI,eAGd,IAAI5jI,EACJ,MAAMwhI,EAAoB,EAAAvgI,MAAMwyD,OAAeguE,0BAC/C,IAAID,EAGF,MAAM,IAAIzgI,MAAM,qDAFhBf,EAAgBwhI,EAAiBE,mBAKnC,IACa,MAAPngI,IACFA,QAAYvB,EAAcwvB,UAAUvH,IAEtC9oB,KAAKykI,qBAAuB5jI,EAAc0wB,cAAcvxB,KAAMoC,GAC9D,MAAOS,GACP7C,KAAKykI,eAAiB,0BAExB,OAAOzkI,KAAKykI,qB,qGCrHhB,2B,qGCFA,sCACE,KAAAh9E,KAAe,KACf,KAAAq4E,IAAc,KACd,KAAA76C,SAAmB,KACnB,KAAAy/C,MAAgB,KAChB,KAAAC,cAAwB,KACxB,KAAAx2H,OAAiB,KACjB,KAAAy2H,SAAmB,KACnB,KAAAC,aAAuB,Q,6FCNzB,iBACA,WAEA,WAIA,MAAajC,UAAc,UAMzB5jI,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKqR,KAAO+jD,EAAI/jD,KAChBrR,KAAKoiF,SAAWhtB,EAAIgtB,SACpBpiF,KAAKkiI,iBACHliI,KACAo1D,EACA,CACE10D,KAAM,KACNia,MAAO,MAET,KAIJ0jC,QAAQv1B,EAAe9mB,GACrB,OAAOhC,KAAKmiI,WACV,IAAI,EAAAjgD,UAAUliF,MACd,CACEU,KAAM,KACNia,MAAO,MAETmO,EACA9mB,GAIJqhI,cACE,MAAMrtF,EAAI,IAAI,EAAAwqF,UAYd,OAXAxgI,KAAKyiI,eACHziI,KACAg2C,EACA,CACEt1C,KAAM,KACNia,MAAO,KACPtJ,KAAM,KACN+wE,SAAU,MAEZ,CAAC,OAAQ,aAEJpsC,GAlDX,W,8FCRA,iBAEA,WAGA,MAAa06E,UAAe,UAK1B1xH,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEj1D,GAAI,KACJO,KAAM,MAER,CAAC,OAGHV,KAAKonC,aAAmC,MAApBguB,EAAIhuB,aAAuB,IAAIr3B,KAAKqlD,EAAIhuB,cAAgB,MAG9EiX,UACE,OAAOr+C,KAAKmiI,WACV,IAAI,EAAAt2C,WAAW7rF,MACf,CACEU,KAAM,MAER,OA9BN,Y,8GCNA,iCAIE1B,YAAY45C,EAAkB5jC,GAC5BhV,KAAK44C,SAAWA,EAChB54C,KAAKgV,KAAOA,K,mGCNhB,iBACA,UAEA,WACA,WAEA,kCASE,KAAAkuD,MAAoB,EAAAjb,UAAUC,OAC9B,KAAAh/C,OAAuB,IAAI,EAAA47H,YAa3B,KAAAC,aAA6B,EAAAr0B,aAAas0B,IAC1C,KAAAlD,gBAAmC,IAAI,EAAAC,mB,+FC9BzC,iBACA,WAEA,WAIA,MAAap+C,UAAiB,UAoB5B3kF,YAAYo2D,GACV71D,QACW,MAAP61D,GAIJp1D,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEnnD,MAAO,KACPioG,UAAW,KACXE,WAAY,KACZD,SAAU,KACV0F,SAAU,KACVgH,SAAU,KACVC,SAAU,KACVh0D,KAAM,KACNxgC,MAAO,KACPigC,WAAY,KACZE,QAAS,KACTm0D,QAAS,KACTjgH,MAAO,KACPg5G,MAAO,KACPN,IAAK,KACLzjE,SAAU,KACVwjE,eAAgB,KAChBD,cAAe,MAEjB,IAIJ98D,QAAQv1B,EAAe9mB,GACrB,OAAOhC,KAAKmiI,WACV,IAAI,EAAAj9C,aACJ,CACEj3E,MAAO,KACPioG,UAAW,KACXE,WAAY,KACZD,SAAU,KACV0F,SAAU,KACVgH,SAAU,KACVC,SAAU,KACVh0D,KAAM,KACNxgC,MAAO,KACPigC,WAAY,KACZE,QAAS,KACTm0D,QAAS,KACTjgH,MAAO,KACPg5G,MAAO,KACPN,IAAK,KACLzjE,SAAU,KACVwjE,eAAgB,KAChBD,cAAe,MAEjBryF,EACA9mB,GAIJohI,iBACE,MAAMhrH,EAAI,IAAI,EAAAmoH,aAqBd,OApBAvgI,KAAKyiI,eAAeziI,KAAMoY,EAAG,CAC3BnK,MAAO,KACPioG,UAAW,KACXE,WAAY,KACZD,SAAU,KACV0F,SAAU,KACVgH,SAAU,KACVC,SAAU,KACVh0D,KAAM,KACNxgC,MAAO,KACPigC,WAAY,KACZE,QAAS,KACTm0D,QAAS,KACTjgH,MAAO,KACPg5G,MAAO,KACPN,IAAK,KACLzjE,SAAU,KACVwjE,eAAgB,KAChBD,cAAe,OAEV/iG,GAvGX,c,kGCHA,mCACE,KAAA8jD,SAAU,EACV,KAAA86C,iBAAkB,EAElB,KAAAppF,QAAwB,GACxB,KAAA2kC,QAAwB,GACxB,KAAA2iD,oBAA0C,GAC1C,KAAAnxF,YAAgC,GAChC,KAAAoxF,wBAA8C,M,4JCZhD,iBAGA,iCAGEn2G,YACS2D,EACAsD,EACAujF,EACAusC,GAHA,KAAApzH,MAAAA,EACA,KAAAsD,eAAAA,EACA,KAAAujF,aAAAA,EACA,KAAAusC,UAAAA,EANA,KAAA1kH,KAAO,EAAAs+F,mBAAmBnpB,WAUrC,4BAGExnF,YACSgtE,EACAkzB,EACA0H,EACA99E,EACAitG,GAJA,KAAA/pD,KAAAA,EACA,KAAAkzB,aAAAA,EACA,KAAA0H,YAAAA,EACA,KAAA99E,MAAAA,EACA,KAAAitG,UAAAA,EAPA,KAAA1kH,KAAO,EAAAs+F,mBAAmBs1B,MAWrC,4BAGEjmI,YAAmBqK,EAAyBw9B,GAAzB,KAAAx9B,SAAAA,EAAyB,KAAAw9B,aAAAA,EAFnC,KAAAx1B,KAAO,EAAAs+F,mBAAmBu1B,O,maC3BrC,gBACA,WAEA,WAEA,UAGA,MAAaxsF,UAAc,UAQzB15C,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKo9H,qBACyB,MAA5BhoE,EAAIgoE,qBAA+B,IAAIrtH,KAAKqlD,EAAIgoE,sBAAwB,KAC1Ep9H,KAAKq9H,mBAAqBjoE,EAAIioE,mBAC9Br9H,KAAKkiI,iBACHliI,KACAo1D,EACA,CACExd,SAAU,KACVgB,SAAU,KACVS,KAAM,MAER,IAGE+b,EAAI7b,OACNv5C,KAAKu5C,KAAO,GACZ6b,EAAI7b,KAAK1oC,SAASuG,IAChBpX,KAAKu5C,KAAKliC,KAAK,IAAI,EAAA8tH,SAAS/tH,SAK5BinC,QAAQv1B,EAAe9mB,G,yCAC3B,MAAMy1G,QAAaz3G,KAAKmiI,WACtB,IAAI,EAAAt9C,UAAU7kF,MACd,CACE43C,SAAU,KACVgB,SAAU,KACVS,KAAM,MAERvwB,EACA9mB,GAGF,GAAiB,MAAbhC,KAAKu5C,KAAc,CACrBk+D,EAAKl+D,KAAO,GACZ,IAAK,IAAInhC,EAAI,EAAGA,EAAIpY,KAAKu5C,KAAK3oC,OAAQwH,IAAK,CACzC,MAAMohC,QAAYx5C,KAAKu5C,KAAKnhC,GAAGimC,QAAQv1B,EAAO9mB,GAC9Cy1G,EAAKl+D,KAAKliC,KAAKmiC,IAInB,OAAOi+D,KAGTyrB,cACE,MAAMxiB,EAAI,IAAI,EAAA0f,UAiBd,OAhBA1f,EAAE0c,qBAC6B,MAA7Bp9H,KAAKo9H,qBAA+Bp9H,KAAKo9H,qBAAqBr9E,cAAgB,KAChF2gE,EAAE2c,mBAAqBr9H,KAAKq9H,mBAC5Br9H,KAAKyiI,eAAeziI,KAAM0gH,EAAG,CAC3B9oE,SAAU,KACVgB,SAAU,KACVS,KAAM,OAGS,MAAbr5C,KAAKu5C,MAAgBv5C,KAAKu5C,KAAK3oC,OAAS,IAC1C8vG,EAAEnnE,KAAO,GACTv5C,KAAKu5C,KAAK1oC,SAASuG,IACjBspG,EAAEnnE,KAAKliC,KAAKD,EAAEguH,sBAIX1kB,GA7EX,W,+FCPA,iBACA,UAEA,WAIA,MAAaykB,UAAiB,UAI5BnmI,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKmmF,MAAQ/wB,EAAI+wB,MACjBnmF,KAAKkiI,iBACHliI,KACAo1D,EACA,CACE5b,IAAK,MAEP,KAIJ6E,QAAQv1B,EAAe9mB,GACrB,OAAOhC,KAAKmiI,WACV,IAAI,EAAAr9C,aAAa9kF,MACjB,CACEw5C,IAAK,MAEP1wB,EACA9mB,GAIJojI,iBACE,MAAMhuH,EAAI,IAAI,EAAAupH,aAUd,OATA3gI,KAAKyiI,eACHziI,KACAoX,EACA,CACEoiC,IAAK,KACL2sC,MAAO,MAET,CAAC,UAEI/uE,GA3CX,c,mHCRA,iBAEA,MAAaiuH,UAAoC,UAAjD,c,oBACE,KAAAvkG,cAAgB,EAChB,KAAAC,UAAY,EACZ,KAAAC,cAAe,EACf,KAAAC,cAAe,EACf,KAAAC,gBAAiB,EACjB,KAAAC,gBAAiB,GANnB,iC,oGCFA,iBACA,WACA,WAKA,qBAuCEniC,YAAYo2D,GACC,MAAPA,IAIJp1D,KAAKG,GAAKi1D,EAAIj1D,GACdH,KAAKU,KAAO00D,EAAI10D,KAChBV,KAAK+W,OAASq+C,EAAIr+C,OAClB/W,KAAKqR,KAAO+jD,EAAI/jD,KAChBrR,KAAKuiB,QAAU6yC,EAAI7yC,QACnBviB,KAAKmiB,YAAcizC,EAAIjzC,YACvBniB,KAAKkxB,UAAYkkC,EAAIlkC,UACrBlxB,KAAK4gI,aAAexrE,EAAIwrE,aACxB5gI,KAAK2zB,UAAYyhC,EAAIzhC,UACrB3zB,KAAK2zC,QAAUyhB,EAAIzhB,QACnB3zC,KAAK4wC,OAASwkB,EAAIxkB,OAClB5wC,KAAK6jC,OAASuxB,EAAIvxB,OAClB7jC,KAAKm1B,OAASigC,EAAIjgC,OAClBn1B,KAAK6gI,gBAAkBzrE,EAAIyrE,gBAC3B7gI,KAAKoiB,iBAAmBgzC,EAAIhzC,iBAC5BpiB,KAAK8gI,SAAW1rE,EAAI0rE,SACpB9gI,KAAK+gI,gBAAkB3rE,EAAI2rE,gBAC3B/gI,KAAK+vC,MAAQqlB,EAAIrlB,MACjB/vC,KAAKghI,eAAiB5rE,EAAI4rE,eAC1BhhI,KAAK4pB,aAAewrC,EAAIxrC,aACxB5pB,KAAKihI,SAAW7rE,EAAI6rE,SACpBjhI,KAAKsJ,WAAa8rD,EAAI9rD,WACtBtJ,KAAKwuB,YAAc4mC,EAAI5mC,YACvBxuB,KAAKwiB,sBAAwB4yC,EAAI5yC,sBACjCxiB,KAAKiL,OAASmqD,EAAInqD,OAClBjL,KAAKqiB,wBAA0B+yC,EAAI/yC,wBACnCriB,KAAKszB,WAAa8hC,EAAI9hC,WACtBtzB,KAAK6zB,aAAeuhC,EAAIvhC,aACxB7zB,KAAKslI,eAAiBlwE,EAAIkwE,eAC1BtlI,KAAK4mE,8BAAgCxR,EAAIwR,8BACzC5mE,KAAK2mE,2BAA6BvR,EAAIuR,2BACtC3mE,KAAKmyC,gBAAkBijB,EAAIjjB,gBAC3BnyC,KAAKshC,oBAAsB8zB,EAAI9zB,oBAC/BthC,KAAKm1H,gBAAkB//D,EAAI+/D,gBAC3Bn1H,KAAKunE,8BAAgCnS,EAAImS,8BACzCvnE,KAAKsnE,4BAA8BlS,EAAIkS,4BACvCtnE,KAAKqnE,0BAA4BjS,EAAIiS,2BAGvC,gBACE,OAAIrnE,KAAKqR,OAAS,EAAA+M,qBAAqBqY,OAGhCz2B,KAAKuiB,SAAWviB,KAAK+W,SAAW,EAAAuH,2BAA2B5H,UAGpE,gBACE,OACE1W,KAAKqR,OAAS,EAAA+M,qBAAqBmnH,SACnCvlI,KAAKqR,OAAS,EAAA+M,qBAAqBqY,OACnCz2B,KAAKqR,OAAS,EAAA+M,qBAAqBsY,MAIvC,cACE,OAAO12B,KAAKqR,OAAS,EAAA+M,qBAAqBqY,OAASz2B,KAAKqR,OAAS,EAAA+M,qBAAqBsY,MAGxF,cACE,OAAO12B,KAAKqR,OAAS,EAAA+M,qBAAqBqY,OAASz2B,KAAKslI,eAG1D,yBACE,OAAOtlI,KAAKwlI,SAAWxlI,KAAKwuB,YAAY+uG,gBAG1C,4BACE,OAAOv9H,KAAKwlI,SAAWxlI,KAAKwuB,YAAYgvG,mBAG1C,uBACE,OAAOx9H,KAAKwlI,SAAWxlI,KAAKwuB,YAAYklB,cAG1C,8B,MACE,OACE1zC,KAAKylI,YACiC,QAArC,EAAAzlI,KAAKwuB,YAAYwN,4BAAoB,QAAIh8B,KAAKwuB,YAAYivG,sBAI/D,2B,MACE,OACEz9H,KAAKwlI,UAA8C,QAAlC,EAAAxlI,KAAKwuB,YAAY0N,yBAAiB,QAAIl8B,KAAKwuB,YAAYivG,sBAI5E,6B,MACE,OACEz9H,KAAKwlI,UACgC,QAApC,EAAAxlI,KAAKwuB,YAAY2N,2BAAmB,QAAIn8B,KAAKwuB,YAAYivG,sBAI9D,4BACE,OAAOz9H,KAAKoyB,yBAA2BpyB,KAAK0jB,sBAAwB1jB,KAAKkzB,uBAG3E,iC,MACE,OACElzB,KAAKylI,YACoC,QAAxC,EAAAzlI,KAAKwuB,YAAY6N,+BAAuB,QAAIr8B,KAAKwuB,YAAYkvG,2BAIlE,mC,MACE,OACE19H,KAAKylI,YACsC,QAA1C,EAAAzlI,KAAKwuB,YAAY8N,iCAAyB,QAAIt8B,KAAKwuB,YAAYkvG,2BAIpE,iCACE,OAAO19H,KAAKmzB,8BAAgCnzB,KAAKizB,2BAGnD,sBACE,OAAOjzB,KAAKwlI,SAAWxlI,KAAKwuB,YAAYovG,aAG1C,mBACE,OAAO59H,KAAKwlI,SAAWxlI,KAAKwuB,YAAYqvG,UAG1C,wBACE,OAAO79H,KAAKwlI,SAAWxlI,KAAKwuB,YAAYsvG,eAG1C,qBACE,OAAO99H,KAAKwlI,SAAWxlI,KAAKwuB,YAAYsO,YAG1C,6BACE,OAAO98B,KAAKwlI,SAAWxlI,KAAKwuB,YAAYqO,oBAG1C,2BACE,OAAO78B,KAAKovB,kBAGdX,iBAAiBD,GAoBf,OAlBGA,EAAYglC,SAAS,EAAAp1B,YAAYc,kBAAoBl/B,KAAKsvB,oBAC1Dd,EAAYglC,SAAS,EAAAp1B,YAAYC,qBAAuBr+B,KAAKgvB,uBAC7DR,EAAYglC,SAAS,EAAAp1B,YAAYI,gBAAkBx+B,KAAK0lI,kBACxDl3G,EAAYglC,SAAS,EAAAp1B,YAAYS,uBAAyB7+B,KAAKoyB,yBAC/D5D,EAAYglC,SAAS,EAAAp1B,YAAYU,oBAAsB9+B,KAAK0jB,sBAC5D8K,EAAYglC,SAAS,EAAAp1B,YAAYW,sBAAwB/+B,KAAKkzB,wBAC9D1E,EAAYglC,SAAS,EAAAp1B,YAAYY,0BAChCh/B,KAAKizB,4BACNzE,EAAYglC,SAAS,EAAAp1B,YAAYa,4BAChCj/B,KAAKmzB,8BACN3E,EAAYglC,SAAS,EAAAp1B,YAAYe,eAAiBn/B,KAAKmvB,iBACvDX,EAAYglC,SAAS,EAAAp1B,YAAYkF,qBAAuBtjC,KAAKuuB,SAC7DC,EAAYglC,SAAS,EAAAp1B,YAAYkB,iBAAmBt/B,KAAKovB,mBACzDZ,EAAYglC,SAAS,EAAAp1B,YAAYgB,cAAgBp/B,KAAKivB,gBACtDT,EAAYglC,SAAS,EAAAp1B,YAAYiB,sBAAwBr/B,KAAK21B,wBAC9DnH,EAAYglC,SAAS,EAAAp1B,YAAY+E,YAAcnjC,KAAKqvB,cACpDb,EAAYglC,SAAS,EAAAp1B,YAAYuB,gBAAkB3/B,KAAK0jC,oBAE3B1jC,KAAKuiB,SAAWviB,KAAKuuB,SAGvD,uBACE,OAAOvuB,KAAKuuB,UAAYvuB,KAAKslI,iBAAmBtlI,KAAK2lI,aAGvD,kBACE,OAA0B,MAAnB3lI,KAAKszB,YAA2C,MAArBtzB,KAAK6zB,gB,gGC3N3C,iBACA,WAEA,WAIA,MAAa2yD,UAAiB,UAI5BxnF,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKkiI,iBAAiBliI,KAAMo1D,EAAK,CAC/Bxc,SAAU,OAEZ54C,KAAKwnH,aAAe,IAAIz3G,KAAKqlD,EAAIoyD,eAGnCnpE,QAAQv1B,EAAe9mB,GACrB,OAAOhC,KAAKmiI,WACV,IAAI,EAAA5a,oBAAoBvnH,MACxB,CACE44C,SAAU,MAEZ9vB,EACA9mB,GAIJshI,wBACE,MAAMhc,EAAK,IAAI,EAAAoZ,oBAKf,OAJApZ,EAAGE,aAAexnH,KAAKwnH,aAAaznE,cACpC//C,KAAKyiI,eAAeziI,KAAMsnH,EAAI,CAC5B1uE,SAAU,OAEL0uE,GAjCX,c,sHCPA,iBAEA,MAAase,UAAuC,UAApD,c,oBACE,KAAAnkG,YAAc,GACd,KAAAV,UAAY,EACZ,KAAA8kG,cAAe,EACf,KAAAC,cAAe,EACf,KAAAlkG,YAAa,EACb,KAAAmkG,YAAc,EACd,KAAAlkG,YAAa,EACb,KAAAmkG,aAAe,EACf,KAAAhkG,eAAiB,EACjB,KAAAC,YAAa,EACb,KAAAC,eAAgB,EAEhB+jG,WACE,MACuB,KAArBjmI,KAAKyhC,aACLzhC,KAAK+gC,UAAY,GACjB/gC,KAAK+lI,YAAc,GACnB/lI,KAAKgmI,aAAe,GACpBhmI,KAAK6lI,cACL7lI,KAAK8lI,cACL9lI,KAAK4hC,YACL5hC,KAAK6hC,YACL7hC,KAAKgiC,eAAiB,GACtBhiC,KAAKiiC,YACLjiC,KAAKkiC,eAzBX,oC,8FCCA,iBAEA,MAAax5B,UAAe,UAO1B1J,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKG,GAAKi1D,EAAIj1D,GACdH,KAAKmB,eAAiBi0D,EAAIj0D,eAC1BnB,KAAKqR,KAAO+jD,EAAI/jD,KAChBrR,KAAKuG,KAAO6uD,EAAI7uD,KAChBvG,KAAKuiB,QAAU6yC,EAAI7yC,UAjBvB,Y,gGCLA,iBACA,WAGA,iBASEvjB,YAAYo2D,GACC,MAAPA,IAIJp1D,KAAKG,GAAKi1D,EAAIj1D,GACdH,KAAKU,KAAO00D,EAAI10D,KAChBV,KAAK+W,OAASq+C,EAAIr+C,OAClB/W,KAAKqR,KAAO+jD,EAAI/jD,KAChBrR,KAAKuiB,QAAU6yC,EAAI7yC,QACnBviB,KAAKiL,OAASmqD,EAAInqD,OAClBjL,KAAK2zB,UAAYyhC,EAAIzhC,WAGvB,gBACE,QAAI3zB,KAAKkmI,iBAGFlmI,KAAKuiB,SAAWviB,KAAK+W,SAAW,EAAAo5F,uBAAuBz5F,UAGhE,6BACE,OAAO1W,KAAKuiB,SAAWviB,KAAKkmI,gBAG9B,qBACE,OAAOlmI,KAAKkmI,gBAGd,yBACE,OAAOlmI,KAAKkmI,gBAGd,sBACE,OAAOlmI,KAAKqR,OAAS,EAAA++F,iBAAiB+1B,iB,iHC/C1C,iBAEA,MAAaC,UAAmC,UAAhD,c,oBACE,KAAAnjI,mBAAoB,GADtB,gC,kGCDA,iBACA,WAEA,WAGA,MAAa2gF,UAAmB,UAG9B5kF,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKqR,KAAO+jD,EAAI/jD,MAGlBgtC,QAAQv1B,EAAe9mB,GACrB,OAAO2N,QAAQ2wB,QAAQ,IAAI,EAAA8kD,eAAeplF,OAG5CmjI,mBACE,MAAM7iB,EAAI,IAAI,EAAA+f,eAEd,OADA/f,EAAEjvG,KAAOrR,KAAKqR,KACPivG,GAnBX,gB,kaCNA,gBACA,WAEA,WAEA,WAEA,WACA,WAEA,MAAa+lB,UAAa,UAkBxBrnI,YAAYo2D,GAEV,GADA71D,QACW,MAAP61D,EA2BJ,OAvBAp1D,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEj1D,GAAI,KACJo3F,SAAU,KACV72F,KAAM,KACN+wG,MAAO,KACPrvG,IAAK,MAEP,CAAC,KAAM,aAGTpC,KAAKqR,KAAO+jD,EAAI/jD,KAChBrR,KAAKkhI,eAAiB9rE,EAAI8rE,eAC1BlhI,KAAKmhI,YAAc/rE,EAAI+rE,YACvBnhI,KAAK44C,SAAWwc,EAAIxc,SACpB54C,KAAK85D,SAAW1E,EAAI0E,SACpB95D,KAAKonC,aAAmC,MAApBguB,EAAIhuB,aAAuB,IAAIr3B,KAAKqlD,EAAIhuB,cAAgB,KAC5EpnC,KAAK03F,aAAmC,MAApBtiC,EAAIsiC,aAAuB,IAAI3nF,KAAKqlD,EAAIsiC,cAAgB,KAC5E13F,KAAKy8C,eAAuC,MAAtB2Y,EAAI3Y,eAAyB,IAAI1sC,KAAKqlD,EAAI3Y,gBAAkB,KAClFz8C,KAAKu8C,UAAY6Y,EAAI7Y,UAEbv8C,KAAKqR,MACX,KAAK,EAAA8qC,SAAS+kC,KACZlhF,KAAK8N,KAAO,IAAI,EAAAw4H,SAASlxE,EAAItnD,MAC7B,MACF,KAAK,EAAAquC,SAASi7C,KACZp3F,KAAKq1C,KAAO,IAAI,EAAAkxF,SAASnxE,EAAI/f,OAO7BgJ,U,yCACJ,MAAMwkF,EAAQ,IAAI,EAAAjrC,SAAS53F,MAE3B,IAAIa,EACJ,MAAMwhI,EAAoB,EAAAvgI,MAAMwyD,OAAeguE,0BAC/C,IAAID,EAGF,MAAM,IAAIzgI,MAAM,qDAFhBf,EAAgBwhI,EAAiBE,mBAKnC,IACEM,EAAMzgI,UAAYvB,EAAci6B,eAAe96B,KAAKoC,IAAK,MACzDygI,EAAMjwE,gBAAkB/xD,EAAcu9C,YAAYykF,EAAMzgI,KACxD,MAAOS,IAcT,aAVM7C,KAAKmiI,WACTU,EACA,CACEniI,KAAM,KACN+wG,MAAO,MAET,KACAoxB,EAAMjwE,WAGA5yD,KAAKqR,MACX,KAAK,EAAA8qC,SAASi7C,KACZyrC,EAAMxtF,WAAar1C,KAAKq1C,KAAKgJ,QAAQwkF,EAAMjwE,WAC3C,MACF,KAAK,EAAAzW,SAAS+kC,KACZ2hD,EAAM/0H,WAAa9N,KAAK8N,KAAKuwC,QAAQwkF,EAAMjwE,WAM/C,OAAOiwE,MAlGX,U,waCXA,gBAEA,WAEA,WAEA,WACA,WAGA,MAAa1kF,UAAmB,UAS9Bn/C,YAAYo2D,GAEV,GADA71D,QACW,MAAP61D,EAkBJ,OAdAp1D,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEj1D,GAAI,KACJO,KAAM,KACN+7C,eAAgB,KAChBC,kBAAmB,MAErB,CAAC,KAAM,iBAAkB,sBAG3B18C,KAAKqR,KAAO+jD,EAAI/jD,KAERrR,KAAKqR,MACX,KAAK,EAAA8qC,SAAS+kC,KACZlhF,KAAK8N,KAAO,IAAI,EAAAw4H,SAASlxE,EAAItnD,MAC7B,MACF,KAAK,EAAAquC,SAASi7C,KACZp3F,KAAKq1C,KAAO,IAAI,EAAAkxF,SAASnxE,EAAI/f,OAO7BgJ,QAAQj8C,G,yCACZ,MAAMygI,EAAQ,IAAI,EAAA2D,eAAexmI,MAWjC,aATMA,KAAKmiI,WACTU,EACA,CACEniI,KAAM,MAER,KACA0B,GAGMpC,KAAKqR,MACX,KAAK,EAAA8qC,SAASi7C,KACZyrC,EAAMxtF,WAAar1C,KAAKq1C,KAAKgJ,QAAQj8C,GACrC,MACF,KAAK,EAAA+5C,SAAS+kC,KACZ2hD,EAAM/0H,WAAa9N,KAAK8N,KAAKuwC,QAAQj8C,GAMzC,OAAOygI,MAhEX,gB,saCTA,iBAEA,WAIA,MAAa0D,UAAiB,UAM5BvnI,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKk5C,KAAOkc,EAAIlc,KAChBl5C,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEj1D,GAAI,KACJ89H,SAAU,KACV5oH,SAAU,MAEZ,CAAC,KAAM,cAILgpC,QAAQj8C,G,yCASZ,aARmBpC,KAAKmiI,WACtB,IAAI,EAAAtqC,aAAa73F,MACjB,CACEqV,SAAU,MAEZ,KACAjT,OAhCN,c,gGCNA,gBAEA,WAIA,MAAakkI,UAAiB,UAI5BtnI,YAAYo2D,GACV71D,QACW,MAAP61D,IAIJp1D,KAAKs+C,OAAS8W,EAAI9W,OAClBt+C,KAAKkiI,iBACHliI,KACAo1D,EACA,CACEtnD,KAAM,MAER,KAIJuwC,QAAQj8C,GACN,OAAOpC,KAAKmiI,WACV,IAAI,EAAArqC,aAAa93F,MACjB,CACE8N,KAAM,MAER,KACA1L,IA5BN,c,wGCHA,2BAIEpD,YAA6BynI,GAAA,KAAAA,WAAAA,EAHZ,KAAAC,mBAA2C,IAAI5wH,IAC/C,KAAA6wH,SAA6B,IAAI7wH,IAIlD8wH,SAASn5H,GACP,OAAOzN,KAAK0mI,mBAAmBrwH,IAAI5I,GAGrCo5H,WAAWp5H,EAAamgB,GACtBA,EAAQ1W,KAAKlX,KAAKymI,YAClBzmI,KAAK0mI,mBAAmBzvH,IAAIxJ,EAAK,IAAIq5H,EAAQl5G,IAC7C5tB,KAAK+mI,WAAWt5H,GAGlBu5H,YAAYv5H,GAEV,OADAzN,KAAK+mI,WAAWt5H,GACTzN,KAAK4mI,SAASn5H,GAAOzN,KAAK0mI,mBAAmBlwH,IAAI/I,GAAKu5H,cAAgB,KAG/EC,gBAAgBx5H,GACd,OAAOzN,KAAK4mI,SAASn5H,GAAOzN,KAAK0mI,mBAAmBlwH,IAAI/I,GAAKw5H,kBAAoB,KAGnFC,QAAQz5H,GAEN,OADAzN,KAAK+mI,WAAWt5H,GACTzN,KAAK4mI,SAASn5H,GAAOzN,KAAK0mI,mBAAmBlwH,IAAI/I,GAAKy5H,UAAY,KAG3EC,oBAAoB15H,GACdzN,KAAK4mI,SAASn5H,IAChBzN,KAAK0mI,mBAAmBlwH,IAAI/I,GAAK05H,sBAIrCl3H,QACEjQ,KAAK0mI,mBAAmBz2H,QACxBjQ,KAAK2mI,SAAS12H,QAGR82H,WAAWt5H,GACjB+C,aAAaxQ,KAAK2mI,SAASnwH,IAAI/I,IAC/BzN,KAAK2mI,SAAS1vH,IACZxJ,EACAgD,YAAW,KACTzQ,KAAK0mI,mBAAmB7hH,OAAOpX,GAC/BzN,KAAK2mI,SAAS9hH,OAAOpX,KAjDZ,QAuDjB,MAAMq5H,EAGJ9nI,YAA6B4uB,GAAA,KAAAA,QAAAA,EAF7B,KAAAw5G,eAAiB,EAIjBJ,cAEE,OADAhnI,KAAKonI,cAAgBt/F,KAAK0oC,IAAIxwE,KAAKonI,cAAe,GAC3CpnI,KAAK4tB,QAAQ5tB,KAAKonI,eAG3BH,kBAKE,OAJoBjnI,KAAK4tB,QAAQtW,QAAQ4R,IAAU,MAAC,OAAgB,QAAhB,EAAAA,EAAOy5G,iBAAS,eAAE0E,gBACpCnwH,MAChC,CAAC+gB,EAAGqvG,IAAMA,EAAE3E,UAAU0E,aAAaE,UAAYtvG,EAAE0qG,UAAU0E,aAAaE,YAErD,GAGvBC,eACE,OAAQxnI,KAAKonI,cAAgB,GAAKpnI,KAAK4tB,QAAQhd,OAGjDs2H,UACE,OAAOlnI,KAAK4tB,QAAQ5tB,KAAKwnI,gBAG3BL,sBACEnnI,KAAKonI,cAAgBpnI,KAAKwnI,kB,2FCjF9B,cAUExoI,YAAYq9E,GANZ,KAAA0rC,SAA2C,GAG3C,KAAA0f,sBAAkC,GAClC,KAAAC,gBAAgD,GAG9C1nI,KAAKq8E,QAAUA,K,0GCdnB,iBACA,WAEA,2BAYEr9E,YAAYoD,EAAkB4hI,GAC5B,GAAW,MAAP5hI,EACF,MAAM,IAAIR,MAAM,oBAGlB,GAAe,MAAXoiI,EACF,GAAuB,KAAnB5hI,EAAIy4H,WACNmJ,EAAU,EAAAp0B,eAAey0B,kBACpB,IAAuB,KAAnBjiI,EAAIy4H,WAGb,MAAM,IAAIj5H,MAAM,gCAFhBoiI,EAAU,EAAAp0B,eAAe00B,yBAS7B,GAHAtkI,KAAKoC,IAAMA,EACXpC,KAAKgkI,QAAUA,EAEXA,IAAY,EAAAp0B,eAAey0B,eAAoC,KAAnBjiI,EAAIy4H,WAClD76H,KAAKgC,OAASI,EACdpC,KAAK2nI,OAAS,UACT,GAAI3D,IAAY,EAAAp0B,eAAew0B,0BAA+C,KAAnBhiI,EAAIy4H,WACpE76H,KAAKgC,OAASI,EAAIwV,MAAM,EAAG,IAC3B5X,KAAK2nI,OAASvlI,EAAIwV,MAAM,GAAI,QACvB,IAAIosH,IAAY,EAAAp0B,eAAe00B,0BAA+C,KAAnBliI,EAAIy4H,WAIpE,MAAM,IAAIj5H,MAAM,mCAHhB5B,KAAKgC,OAASI,EAAIwV,MAAM,EAAG,IAC3B5X,KAAK2nI,OAASvlI,EAAIwV,MAAM,GAAI,IAKd,MAAZ5X,KAAKoC,MACPpC,KAAK4nI,OAAS,EAAA9lI,MAAMi8C,gBAAgB/9C,KAAKoC,MAExB,MAAfpC,KAAKgC,SACPhC,KAAK6nI,UAAY,EAAA/lI,MAAMi8C,gBAAgB/9C,KAAKgC,SAE3B,MAAfhC,KAAK2nI,SACP3nI,KAAK8nI,UAAY,EAAAhmI,MAAMi8C,gBAAgB/9C,KAAK2nI,Y,8FCrDlD,iBAKE3oI,YAAYyoG,EAAS/mG,EAAc8sB,GAFnC,KAAAsQ,SAA0B,GAGxB99B,KAAKwtB,OAASA,EACdxtB,KAAKynG,KAAOA,EACZznG,KAAKynG,KAAK/mG,KAAOA,K,iGCRrB,uB,kGCAA,iBACA,WACA,WAEA,MAAaqnI,EAuCX/oI,YAAY4hB,G,gBACD,MAALA,IAIAA,aAAa,EAAAokE,UACfhlF,KAAK6yG,eAAiBjyF,EAAEiyF,eACxB7yG,KAAK6vF,MAAQjvE,EAAEivE,MACf7vF,KAAKouF,OAASxtE,EAAEwtE,OAChBpuF,KAAKmzG,SAAWvyF,EAAEuyF,SAClBnzG,KAAKozG,QAAUxyF,EAAEwyF,QACjBpzG,KAAKgsE,KAAOprD,EAAEorD,OAEdhsE,KAAK6yG,eAAiC,QAAhB,EAAAjyF,EAAEiyF,sBAAc,eAAEtwG,gBACxCvC,KAAK6vF,MAAe,QAAP,EAAAjvE,EAAEivE,aAAK,eAAEttF,gBACtBvC,KAAKouF,OAAiB,QAAR,EAAAxtE,EAAEwtE,cAAM,eAAE7rF,gBACxBvC,KAAKmzG,SAAqB,QAAV,EAAAvyF,EAAEuyF,gBAAQ,eAAE5wG,gBAC5BvC,KAAKozG,QAAmB,QAAT,EAAAxyF,EAAEwyF,eAAO,eAAE7wG,gBAC1BvC,KAAKgsE,KAAa,QAAN,EAAAprD,EAAEorD,YAAI,eAAEzpE,kBAxDxB,kBACE,MAAMgrD,EAAM,IAAIw6E,EAOhB,OANAx6E,EAAIslD,eAAiB,WACrBtlD,EAAIsiC,MAAQ,OACZtiC,EAAI6gC,OAAS,mBACb7gC,EAAI4lD,SAAW,KACf5lD,EAAI6lD,QAAU,OACd7lD,EAAIye,KAAO,MACJze,EAGT,cAAcA,EAAiBkqD,EAAO,IAAI,EAAAzyB,UAOxC,OANAyyB,EAAK5E,eAAiBtlD,EAAIslD,eAC1B4E,EAAK5nB,MAAQtiC,EAAIsiC,MACjB4nB,EAAKrpB,OAAS7gC,EAAI6gC,OAClBqpB,EAAKtE,SAAW5lD,EAAI4lD,SACpBsE,EAAKrE,QAAU7lD,EAAI6lD,QACnBqE,EAAKzrC,KAAOze,EAAIye,KACTyrC,EAGT,gBAAgBlqD,EAAiB9T,EAAS,IAAI,EAAA0V,MAO5C,OANA1V,EAAOo5D,eAAuC,MAAtBtlD,EAAIslD,eAAyB,IAAI,EAAArhF,UAAU+7B,EAAIslD,gBAAkB,KACzFp5D,EAAOo2C,MAAqB,MAAbtiC,EAAIsiC,MAAgB,IAAI,EAAAr+D,UAAU+7B,EAAIsiC,OAAS,KAC9Dp2C,EAAO20C,OAAuB,MAAd7gC,EAAI6gC,OAAiB,IAAI,EAAA58D,UAAU+7B,EAAI6gC,QAAU,KACjE30C,EAAO05D,SAA2B,MAAhB5lD,EAAI4lD,SAAmB,IAAI,EAAA3hF,UAAU+7B,EAAI4lD,UAAY,KACvE15D,EAAO25D,QAAyB,MAAf7lD,EAAI6lD,QAAkB,IAAI,EAAA5hF,UAAU+7B,EAAI6lD,SAAW,KACpE35D,EAAOuyB,KAAmB,MAAZze,EAAIye,KAAe,IAAI,EAAAx6C,UAAU+7B,EAAIye,MAAQ,KACpDvyB,GA7BX,gB,oGCJA,iBACA,WACA,WACA,WACA,WAEA,WACA,WACA,WACA,WACA,WAEA,MAAauuF,EACX,kBACE,MAAMz6E,EAAM,IAAIy6E,EAchB,OAbAz6E,EAAIpsD,eAAiB,KACrBosD,EAAI7jC,cAAgB,KACpB6jC,EAAInnC,SAAW,KACfmnC,EAAIl8C,KAAO,EAAAs4B,WAAW+O,MACtB6U,EAAI7sD,KAAO,YACX6sD,EAAIkkD,MAAQ,8BACZlkD,EAAInkC,UAAW,EACfmkC,EAAI00B,OAAS,GACb10B,EAAI5U,MAAQ,KACZ4U,EAAI43B,WAAa,KACjB53B,EAAIw3B,KAAO,KACXx3B,EAAI03B,SAAW,KACf13B,EAAIliC,SAAW,EAAAgtB,mBAAmBC,KAC3BiV,EAGT,cAAcA,EAAmBkqD,EAAO,IAAI,EAAA9vF,Y,UAM1C,GALA8vF,EAAKpmG,KAAOk8C,EAAIl8C,KAChBomG,EAAKrxF,SAAWmnC,EAAInnC,SACO,MAAvBqxF,EAAKt2G,iBACPs2G,EAAKt2G,eAAiBosD,EAAIpsD,gBAExBs2G,EAAK/tF,eAAiB6jC,EAAI7jC,cAAe,CAC3C,MAAMzS,EAAM,IAAIskE,KAAuB,QAAlB,EAAAk8B,EAAK/tF,qBAAa,QAAI,IAAI3iB,OAAwB,QAAjB,EAAAwmD,EAAI7jC,qBAAa,QAAI,KAC3E+tF,EAAK/tF,cAAgBnb,MAAMC,KAAKyI,EAAIssB,UAWtC,OATAk0E,EAAK/2G,KAAO6sD,EAAI7sD,KAChB+2G,EAAKhG,MAAQlkD,EAAIkkD,MACjBgG,EAAKruF,SAAWmkC,EAAInkC,SACpBquF,EAAKpsF,SAAuB,QAAZ,EAAAkiC,EAAIliC,gBAAQ,QAAI,EAAAgtB,mBAAmBC,KAEjC,MAAdiV,EAAI00B,SACNw1B,EAAKx1B,OAAS10B,EAAI00B,OAAOz7E,KAAKwvC,GAAM,EAAAiyF,YAAYnwB,OAAO9hE,MAGjDuX,EAAIl8C,MACV,KAAK,EAAAs4B,WAAW+O,MACd++D,EAAK9+D,MAAQ,EAAAuvF,YAAYpwB,OAAOvqD,EAAI5U,OACpC,MACF,KAAK,EAAAhP,WAAWi6C,WACd6zB,EAAKtyB,WAAa,EAAAgjD,iBAAiBrwB,OAAOvqD,EAAI43B,YAC9C,MACF,KAAK,EAAAx7C,WAAWwlB,KACdsoD,EAAK1yB,KAAO,EAAAgjD,WAAWjwB,OAAOvqD,EAAIw3B,MAClC,MACF,KAAK,EAAAp7C,WAAWg6C,SACd8zB,EAAKxyB,SAAW,EAAAmjD,eAAetwB,OAAOvqD,EAAI03B,UAI9C,OAAOwyB,EAGT,gBAAgBlqD,EAAmB9T,EAAS,IAAI,EAAApF,Q,MAe9C,OAdAoF,EAAOpoC,KAAOk8C,EAAIl8C,KAClBooC,EAAOrzB,SAAWmnC,EAAInnC,SACO,MAAzBqzB,EAAOt4C,iBACTs4C,EAAOt4C,eAAiBosD,EAAIpsD,gBAE9Bs4C,EAAO/4C,KAAmB,MAAZ6sD,EAAI7sD,KAAe,IAAI,EAAA8wB,UAAU+7B,EAAI7sD,MAAQ,KAC3D+4C,EAAOg4D,MAAqB,MAAblkD,EAAIkkD,MAAgB,IAAI,EAAAjgF,UAAU+7B,EAAIkkD,OAAS,KAC9Dh4D,EAAOrwB,SAAWmkC,EAAInkC,SACtBqwB,EAAOpuB,SAAuB,QAAZ,EAAAkiC,EAAIliC,gBAAQ,QAAI,EAAAgtB,mBAAmBC,KAEnC,MAAdiV,EAAI00B,SACNxoC,EAAOwoC,OAAS10B,EAAI00B,OAAOz7E,KAAKwvC,GAAM,EAAAiyF,YAAYzwB,SAASxhE,MAGrDuX,EAAIl8C,MACV,KAAK,EAAAs4B,WAAW+O,MACde,EAAOd,MAAQ,EAAAuvF,YAAY1wB,SAASjqD,EAAI5U,OACxC,MACF,KAAK,EAAAhP,WAAWi6C,WACdnqC,EAAO0rC,WAAa,EAAAgjD,iBAAiB3wB,SAASjqD,EAAI43B,YAClD,MACF,KAAK,EAAAx7C,WAAWwlB,KACd1V,EAAOsrC,KAAO,EAAAgjD,WAAWvwB,SAASjqD,EAAIw3B,MACtC,MACF,KAAK,EAAAp7C,WAAWg6C,SACdlqC,EAAOwrC,SAAW,EAAAmjD,eAAe5wB,SAASjqD,EAAI03B,UAIlD,OAAOxrC,EAkBT4uF,MAAMznH,G,QAwBJ,OAvBA5gB,KAAKmB,eAAiByf,EAAEzf,eACxBnB,KAAKomB,SAAWxF,EAAEwF,SAClBpmB,KAAKqR,KAAOuP,EAAEvP,KACdrR,KAAKqrB,SAAWzK,EAAEyK,SAEdzK,aAAa,EAAA+G,YACf3nB,KAAKU,KAAOkgB,EAAElgB,KACdV,KAAKyxG,MAAQ7wF,EAAE6wF,QAEfzxG,KAAKU,KAAa,QAAN,EAAAkgB,EAAElgB,YAAI,eAAE6B,gBACpBvC,KAAKyxG,MAAe,QAAP,EAAA7wF,EAAE6wF,aAAK,eAAElvG,iBAGxBvC,KAAKopB,SAAWxI,EAAEwI,SAEF,MAAZxI,EAAEqhE,SACa,EAAAt6D,WACf3nB,KAAKiiF,OAASrhE,EAAEqhE,OAAOz7E,KAAKwvC,GAAM,IAAI,EAAAiyF,YAAYjyF,MAM9Cp1B,EAAEvP,MACR,KAAK,EAAAs4B,WAAW+O,MACd14C,KAAK24C,MAAQ,IAAI,EAAAuvF,YAAYtnH,EAAE+3B,OAC/B,MACF,KAAK,EAAAhP,WAAWi6C,WACd5jF,KAAKmlF,WAAa,IAAI,EAAAgjD,iBAAiBvnH,EAAEukE,YACzC,MACF,KAAK,EAAAx7C,WAAWwlB,KACdnvD,KAAK+kF,KAAO,IAAI,EAAAgjD,WAAWnnH,EAAEmkE,MAC7B,MACF,KAAK,EAAAp7C,WAAWg6C,SACd3jF,KAAKilF,SAAW,IAAI,EAAAmjD,eAAexnH,EAAEqkE,YA3I7C,kB,0GCTA,iBAEA,MAAa0yB,UAA2B,EAAAqwB,aAKtCK,MAAMznH,GACJ5gB,KAAKG,GAAKygB,EAAEzgB,GACZZ,MAAM8oI,MAAMznH,GACZ5gB,KAAK0pB,cAAgB9I,EAAE8I,eAR3B,wB,wGCLA,iBACA,WACA,WAEA,MAAa4+G,EACX,kBACE,MAAM/6E,EAAM,IAAI+6E,EAIhB,OAHA/6E,EAAIpsD,eAAiB,uCACrBosD,EAAI7sD,KAAO,kBACX6sD,EAAI97B,WAAa,KACV87B,EAGT,cAAcA,EAAuBkqD,EAAO,IAAI,EAAArC,gBAM9C,OALAqC,EAAK/2G,KAAO6sD,EAAI7sD,KAChB+2G,EAAKhmF,WAAa87B,EAAI97B,WACK,MAAvBgmF,EAAKt2G,iBACPs2G,EAAKt2G,eAAiBosD,EAAIpsD,gBAErBs2G,EAGT,gBAAgBlqD,EAAuB9T,EAAS,IAAI,EAAAx0B,YAMlD,OALAw0B,EAAO/4C,KAAmB,MAAZ6sD,EAAI7sD,KAAe,IAAI,EAAA8wB,UAAU+7B,EAAI7sD,MAAQ,KAC3D+4C,EAAOhoB,WAAa87B,EAAI97B,WACK,MAAzBgoB,EAAOt4C,iBACTs4C,EAAOt4C,eAAiBosD,EAAIpsD,gBAEvBs4C,EAQT4uF,MAAMznH,G,MACJ5gB,KAAKmB,eAAiByf,EAAEzf,eACpByf,aAAa,EAAAw0F,eACfp1G,KAAKU,KAAOkgB,EAAElgB,KAEdV,KAAKU,KAAa,QAAN,EAAAkgB,EAAElgB,YAAI,eAAE6B,gBAEtBvC,KAAKyxB,WAAa7Q,EAAE6Q,YAvCxB,sB,8GCDA,iBAEA,MAAa8lF,UAA+B,EAAA+wB,iBAI1CD,MAAMznH,GACJ5gB,KAAKG,GAAKygB,EAAEzgB,GACZZ,MAAM8oI,MAAMznH,IANhB,4B,mGCLA,iBAGA,oBAYE5hB,YAAYoP,GACVpO,KAAKqN,QAAUe,EAAMuG,qBACrB3U,KAAK4U,QAAUxG,EAAMwG,QACrB5U,KAAK6U,QAAUzG,EAAMyG,QACrB7U,KAAKiL,OAASmD,EAAMnD,OACpBjL,KAAKyU,SAAWrG,EAAMqG,SACtBzU,KAAK+U,UAAY3G,EAAM2G,UACvB/U,KAAKgV,KAAO5G,EAAM4G,KAClBhV,KAAKiV,GAAK7G,EAAM6G,GAChBjV,KAAKqR,KAAO,EAAAkvC,UAAUnyC,EAAMiD,MAC5BrR,KAAK8U,eAAiB1G,EAAM0G,kB,mGCzBhC,iBAEA,WACA,WACA,WAEA,MAAamzH,EA8BXjpI,YAAY4hB,G,QACD,MAALA,IAIAA,aAAa,EAAAshE,WACfliF,KAAKU,KAAOkgB,EAAElgB,KACdV,KAAK2a,MAAQiG,EAAEjG,QAEf3a,KAAKU,KAAa,QAAN,EAAAkgB,EAAElgB,YAAI,eAAE6B,gBACpBvC,KAAK2a,MAAe,QAAP,EAAAiG,EAAEjG,aAAK,eAAEpY,iBAExBvC,KAAKqR,KAAOuP,EAAEvP,KACdrR,KAAKoiF,SAAWxhE,EAAEwhE,UA1CpB,kBACE,MAAM70B,EAAM,IAAI06E,EAIhB,OAHA16E,EAAI7sD,KAAO,aACX6sD,EAAI5yC,MAAQ,aACZ4yC,EAAIl8C,KAAO,EAAA4vE,UAAUC,KACd3zB,EAGT,cAAcA,EAAkBkqD,EAAO,IAAI,EAAAv1B,WAKzC,OAJAu1B,EAAKpmG,KAAOk8C,EAAIl8C,KAChBomG,EAAK98F,MAAQ4yC,EAAI5yC,MACjB88F,EAAK/2G,KAAO6sD,EAAI7sD,KAChB+2G,EAAKr1B,SAAW70B,EAAI60B,SACbq1B,EAGT,gBAAgBlqD,EAAkB9T,EAAS,IAAI,EAAAmpF,OAK7C,OAJAnpF,EAAOpoC,KAAOk8C,EAAIl8C,KAClBooC,EAAO9+B,MAAqB,MAAb4yC,EAAI5yC,MAAgB,IAAI,EAAA6W,UAAU+7B,EAAI5yC,OAAS,KAC9D8+B,EAAO/4C,KAAmB,MAAZ6sD,EAAI7sD,KAAe,IAAI,EAAA8wB,UAAU+7B,EAAI7sD,MAAQ,KAC3D+4C,EAAO2oC,SAAW70B,EAAI60B,SACf3oC,GAtBX,iB,oGCNA,iBACA,WACA,WAEA,MAAa8uF,EACX,kBACE,MAAMh7E,EAAM,IAAIg7E,EAEhB,OADAh7E,EAAI7sD,KAAO,cACJ6sD,EAGT,cAAcA,EAAmBkqD,EAAO,IAAI,EAAA5rB,YAE1C,OADA4rB,EAAK/2G,KAAO6sD,EAAI7sD,KACT+2G,EAGT,gBAAgBlqD,EAAmB9T,EAAS,IAAI,EAAAi3E,QAE9C,OADAj3E,EAAO/4C,KAAmB,MAAZ6sD,EAAI7sD,KAAe,IAAI,EAAA8wB,UAAU+7B,EAAI7sD,MAAQ,KACpD+4C,EAMT4uF,MAAMznH,G,MACAA,aAAa,EAAAirE,WACf7rF,KAAKU,KAAOkgB,EAAElgB,KAEdV,KAAKU,KAAa,QAAN,EAAAkgB,EAAElgB,YAAI,eAAE6B,iBAxB1B,kB,0GCDA,iBAEA,MAAam1G,UAA2B,EAAA6wB,aAItCF,MAAMznH,GACJ5gB,KAAKG,GAAKygB,EAAEzgB,GACZZ,MAAM8oI,MAAMznH,IANhB,wB,sGCLA,iBACA,UACA,WAEA,MAAawnH,EAuFXppI,YAAY4hB,G,wCACD,MAALA,IAIAA,aAAa,EAAAskE,cACfllF,KAAKiO,MAAQ2S,EAAE3S,MACfjO,KAAKk2G,UAAYt1F,EAAEs1F,UACnBl2G,KAAKo2G,WAAax1F,EAAEw1F,WACpBp2G,KAAKm2G,SAAWv1F,EAAEu1F,SAClBn2G,KAAK67G,SAAWj7F,EAAEi7F,SAClB77G,KAAK6iH,SAAWjiG,EAAEiiG,SAClB7iH,KAAK8iH,SAAWliG,EAAEkiG,SAClB9iH,KAAK8uD,KAAOluC,EAAEkuC,KACd9uD,KAAKsuB,MAAQ1N,EAAE0N,MACftuB,KAAKuuD,WAAa3tC,EAAE2tC,WACpBvuD,KAAKyuD,QAAU7tC,EAAE6tC,QACjBzuD,KAAK4iH,QAAUhiG,EAAEgiG,QACjB5iH,KAAK2C,MAAQie,EAAEje,MACf3C,KAAK27G,MAAQ/6F,EAAE+6F,MACf37G,KAAKq7G,IAAMz6F,EAAEy6F,IACbr7G,KAAK43C,SAAWh3B,EAAEg3B,SAClB53C,KAAKo7G,eAAiBx6F,EAAEw6F,eACxBp7G,KAAKm7G,cAAgBv6F,EAAEu6F,gBAEvBn7G,KAAKiO,MAAe,QAAP,EAAA2S,EAAE3S,aAAK,eAAE1L,gBACtBvC,KAAKk2G,UAAuB,QAAX,EAAAt1F,EAAEs1F,iBAAS,eAAE3zG,gBAC9BvC,KAAKo2G,WAAyB,QAAZ,EAAAx1F,EAAEw1F,kBAAU,eAAE7zG,gBAChCvC,KAAKm2G,SAAqB,QAAV,EAAAv1F,EAAEu1F,gBAAQ,eAAE5zG,gBAC5BvC,KAAK67G,SAAqB,QAAV,EAAAj7F,EAAEi7F,gBAAQ,eAAEt5G,gBAC5BvC,KAAK6iH,SAAqB,QAAV,EAAAjiG,EAAEiiG,gBAAQ,eAAEtgH,gBAC5BvC,KAAK8iH,SAAqB,QAAV,EAAAliG,EAAEkiG,gBAAQ,eAAEvgH,gBAC5BvC,KAAK8uD,KAAa,QAAN,EAAAluC,EAAEkuC,YAAI,eAAEvsD,gBACpBvC,KAAKsuB,MAAe,QAAP,EAAA1N,EAAE0N,aAAK,eAAE/rB,gBACtBvC,KAAKuuD,WAAyB,QAAZ,EAAA3tC,EAAE2tC,kBAAU,eAAEhsD,gBAChCvC,KAAKyuD,QAAmB,QAAT,EAAA7tC,EAAE6tC,eAAO,eAAElsD,gBAC1BvC,KAAK4iH,QAAmB,QAAT,EAAAhiG,EAAEgiG,eAAO,eAAErgH,gBAC1BvC,KAAK2C,MAAe,QAAP,EAAAie,EAAEje,aAAK,eAAEJ,gBACtBvC,KAAK27G,MAAe,QAAP,EAAA/6F,EAAE+6F,aAAK,eAAEp5G,gBACtBvC,KAAKq7G,IAAW,QAAL,EAAAz6F,EAAEy6F,WAAG,eAAE94G,gBAClBvC,KAAK43C,SAAqB,QAAV,EAAAh3B,EAAEg3B,gBAAQ,eAAEr1C,gBAC5BvC,KAAKo7G,eAAiC,QAAhB,EAAAx6F,EAAEw6F,sBAAc,eAAE74G,gBACxCvC,KAAKm7G,cAA+B,QAAf,EAAAv6F,EAAEu6F,qBAAa,eAAE54G,kBAhI1C,kBACE,MAAMgrD,EAAM,IAAI66E,EAmBhB,OAlBA76E,EAAIt/C,MAAQ,KACZs/C,EAAI2oD,UAAY,OAChB3oD,EAAI6oD,WAAa,UACjB7oD,EAAI4oD,SAAW,MACf5oD,EAAIsuD,SAAW,aACftuD,EAAIs1D,SAAW,WACft1D,EAAIu1D,SAAW,KACfv1D,EAAIuB,KAAO,WACXvB,EAAIj/B,MAAQ,KACZi/B,EAAIgB,WAAa,QACjBhB,EAAIkB,QAAU,KACdlB,EAAIq1D,QAAU,YACdr1D,EAAI5qD,MAAQ,mBACZ4qD,EAAIouD,MAAQ,aACZpuD,EAAI8tD,IAAM,eACV9tD,EAAI3V,SAAW,OACf2V,EAAI6tD,eAAiB,eACrB7tD,EAAI4tD,cAAgB,oBACb5tD,EAGT,cAAcA,EAAqBkqD,EAAO,IAAI,EAAAvyB,cAmB5C,OAlBAuyB,EAAKxpG,MAAQs/C,EAAIt/C,MACjBwpG,EAAKvB,UAAY3oD,EAAI2oD,UACrBuB,EAAKrB,WAAa7oD,EAAI6oD,WACtBqB,EAAKtB,SAAW5oD,EAAI4oD,SACpBsB,EAAKoE,SAAWtuD,EAAIsuD,SACpBpE,EAAKoL,SAAWt1D,EAAIs1D,SACpBpL,EAAKqL,SAAWv1D,EAAIu1D,SACpBrL,EAAK3oD,KAAOvB,EAAIuB,KAChB2oD,EAAKnpF,MAAQi/B,EAAIj/B,MACjBmpF,EAAKlpD,WAAahB,EAAIgB,WACtBkpD,EAAKhpD,QAAUlB,EAAIkB,QACnBgpD,EAAKmL,QAAUr1D,EAAIq1D,QACnBnL,EAAK90G,MAAQ4qD,EAAI5qD,MACjB80G,EAAKkE,MAAQpuD,EAAIouD,MACjBlE,EAAK4D,IAAM9tD,EAAI8tD,IACf5D,EAAK7/D,SAAW2V,EAAI3V,SACpB6/D,EAAK2D,eAAiB7tD,EAAI6tD,eAC1B3D,EAAK0D,cAAgB5tD,EAAI4tD,cAClB1D,EAGT,gBAAgBlqD,EAAqB9T,EAAS,IAAI,EAAAkqC,UAmBhD,OAlBAlqC,EAAOxrC,MAAqB,MAAbs/C,EAAIt/C,MAAgB,IAAI,EAAAujB,UAAU+7B,EAAIt/C,OAAS,KAC9DwrC,EAAOy8D,UAA6B,MAAjB3oD,EAAI2oD,UAAoB,IAAI,EAAA1kF,UAAU+7B,EAAI2oD,WAAa,KAC1Ez8D,EAAO28D,WAA+B,MAAlB7oD,EAAI6oD,WAAqB,IAAI,EAAA5kF,UAAU+7B,EAAI6oD,YAAc,KAC7E38D,EAAO08D,SAA2B,MAAhB5oD,EAAI4oD,SAAmB,IAAI,EAAA3kF,UAAU+7B,EAAI4oD,UAAY,KACvE18D,EAAOoiE,SAA2B,MAAhBtuD,EAAIsuD,SAAmB,IAAI,EAAArqF,UAAU+7B,EAAIsuD,UAAY,KACvEpiE,EAAOopE,SAA2B,MAAhBt1D,EAAIs1D,SAAmB,IAAI,EAAArxF,UAAU+7B,EAAIs1D,UAAY,KACvEppE,EAAOqpE,SAA2B,MAAhBv1D,EAAIu1D,SAAmB,IAAI,EAAAtxF,UAAU+7B,EAAIu1D,UAAY,KACvErpE,EAAOqV,KAAmB,MAAZvB,EAAIuB,KAAe,IAAI,EAAAt9B,UAAU+7B,EAAIuB,MAAQ,KAC3DrV,EAAOnrB,MAAqB,MAAbi/B,EAAIj/B,MAAgB,IAAI,EAAAkD,UAAU+7B,EAAIj/B,OAAS,KAC9DmrB,EAAO8U,WAA+B,MAAlBhB,EAAIgB,WAAqB,IAAI,EAAA/8B,UAAU+7B,EAAIgB,YAAc,KAC7E9U,EAAOgV,QAAyB,MAAflB,EAAIkB,QAAkB,IAAI,EAAAj9B,UAAU+7B,EAAIkB,SAAW,KACpEhV,EAAOmpE,QAAyB,MAAfr1D,EAAIq1D,QAAkB,IAAI,EAAApxF,UAAU+7B,EAAIq1D,SAAW,KACpEnpE,EAAO92C,MAAqB,MAAb4qD,EAAI5qD,MAAgB,IAAI,EAAA6uB,UAAU+7B,EAAI5qD,OAAS,KAC9D82C,EAAOkiE,MAAqB,MAAbpuD,EAAIouD,MAAgB,IAAI,EAAAnqF,UAAU+7B,EAAIouD,OAAS,KAC9DliE,EAAO4hE,IAAiB,MAAX9tD,EAAI8tD,IAAc,IAAI,EAAA7pF,UAAU+7B,EAAI8tD,KAAO,KACxD5hE,EAAO7B,SAA2B,MAAhB2V,EAAI3V,SAAmB,IAAI,EAAApmB,UAAU+7B,EAAI3V,UAAY,KACvE6B,EAAO2hE,eAAuC,MAAtB7tD,EAAI6tD,eAAyB,IAAI,EAAA5pF,UAAU+7B,EAAI6tD,gBAAkB,KACzF3hE,EAAO0hE,cAAqC,MAArB5tD,EAAI4tD,cAAwB,IAAI,EAAA3pF,UAAU+7B,EAAI4tD,eAAiB,KAC/E1hE,GAjEX,oB,mGCJA,iBACA,WACA,WAEA,WAEA,MAAayuF,EAmCXlpI,YAAY4hB,G,UACD,MAALA,IAIU,MAAVA,EAAE24B,OACa,EAAAsrC,UACf7kF,KAAKu5C,KAAO34B,EAAE24B,KAAK/yC,KAAK4Q,GAAM,IAAI,EAAAoxH,eAAepxH,MAMjDwJ,aAAa,EAAAikE,WACf7kF,KAAK43C,SAAWh3B,EAAEg3B,SAClB53C,KAAK44C,SAAWh4B,EAAEg4B,SAClB54C,KAAKq5C,KAAOz4B,EAAEy4B,OAEdr5C,KAAK43C,SAAqB,QAAV,EAAAh3B,EAAEg3B,gBAAQ,eAAEr1C,gBAC5BvC,KAAK44C,SAAqB,QAAV,EAAAh4B,EAAEg4B,gBAAQ,eAAEr2C,gBAC5BvC,KAAKq5C,KAAa,QAAN,EAAAz4B,EAAEy4B,YAAI,eAAE92C,kBAtDxB,kBACE,MAAMgrD,EAAM,IAAI26E,EAKhB,OAJA36E,EAAIhU,KAAO,GACXgU,EAAI3V,SAAW,OACf2V,EAAI3U,SAAW,gBACf2U,EAAIlU,KAAO,mBACJkU,EAGT,cAAcA,EAAkBkqD,EAAO,IAAI,EAAA5yB,WAOzC,OANgB,MAAZt3B,EAAIhU,OACNk+D,EAAKl+D,KAAOgU,EAAIhU,KAAK/yC,KAAK4Q,GAAM,EAAAoxH,eAAe1wB,OAAO1gG,MAExDqgG,EAAK7/D,SAAW2V,EAAI3V,SACpB6/D,EAAK7+D,SAAW2U,EAAI3U,SACpB6+D,EAAKp+D,KAAOkU,EAAIlU,KACTo+D,EAGT,gBAAgBlqD,EAAkB9T,EAAS,IAAI,EAAAf,OAO7C,OANgB,MAAZ6U,EAAIhU,OACNE,EAAOF,KAAOgU,EAAIhU,KAAK/yC,KAAK4Q,GAAM,EAAAoxH,eAAehxB,SAASpgG,MAE5DqiC,EAAO7B,SAA2B,MAAhB2V,EAAI3V,SAAmB,IAAI,EAAApmB,UAAU+7B,EAAI3V,UAAY,KACvE6B,EAAOb,SAA2B,MAAhB2U,EAAI3U,SAAmB,IAAI,EAAApnB,UAAU+7B,EAAI3U,UAAY,KACvEa,EAAOJ,KAAmB,MAAZkU,EAAIlU,KAAe,IAAI,EAAA7nB,UAAU+7B,EAAIlU,MAAQ,KACpDI,GA3BX,iB,sGCLA,iBACA,UACA,UAEA,MAAa+uF,EAuBXxpI,YAAY4hB,G,MAFZ,KAAAulE,MAAsB,KAGX,MAALvlE,IAIAA,aAAa,EAAAkkE,aACf9kF,KAAKw5C,IAAM54B,EAAE44B,IAEbx5C,KAAKw5C,IAAW,QAAL,EAAA54B,EAAE44B,WAAG,eAAEj3C,gBAEpBvC,KAAKmmF,MAAQvlE,EAAEulE,OAhCjB,kBACE,MAAM54B,EAAM,IAAIi7E,EAGhB,OAFAj7E,EAAI/T,IAAM,qBACV+T,EAAI44B,MAAQ,KACL54B,EAGT,cAAcA,EAAqBkqD,EAAO,IAAI,EAAA3yB,cAG5C,OAFA2yB,EAAKj+D,IAAM+T,EAAI/T,IACfi+D,EAAKtxB,MAAQ54B,EAAI44B,MACVsxB,EAGT,gBAAgBlqD,EAAqB9T,EAAS,IAAI,EAAA0rF,UAGhD,OAFA1rF,EAAOD,IAAiB,MAAX+T,EAAI/T,IAAc,IAAI,EAAAhoB,UAAU+7B,EAAI/T,KAAO,KACxDC,EAAO0sC,MAAQ54B,EAAI44B,MACZ1sC,GAjBX,oB,wGCLA,iBACA,WACA,WAEA,MAAa0uF,EAmBXnpI,YAAY4hB,GACD,MAALA,IAIJ5gB,KAAKqR,KAAOuP,EAAEvP,MAvBhB,kBACE,MAAMk8C,EAAM,IAAI46E,EAEhB,OADA56E,EAAIl8C,KAAO,EAAAg0E,eAAeC,QACnB/3B,EAGT,cAAcA,EAAuBkqD,EAAO,IAAI,EAAAryB,gBAE9C,OADAqyB,EAAKpmG,KAAOk8C,EAAIl8C,KACTomG,EAGT,gBAAgBlqD,EAAuBkqD,EAAO,IAAI,EAAA7zB,YAEhD,OADA6zB,EAAKpmG,KAAOk8C,EAAIl8C,KACTomG,GAdX,sB,8GCDA,kCAOEz4G,YACEoD,EACAq4B,EACAC,EACA+tG,EACAxkG,GAEAjkC,KAAKoC,IAAMA,EACXpC,KAAKy6B,IAAMA,EACXz6B,KAAK06B,cAAgBA,EACrB16B,KAAKyoI,cAAgBA,EACrBzoI,KAAKikC,KAAOA,K,sGCrBhB,yBAGEjlC,YAAY6kG,GACV7jG,KAAK6jG,IAAMA,K,uGCJf,6B,8GCAA,iCACE7kG,YAAoBkwC,GAAA,KAAAA,eAAAA,K,0GCDtB,gC,6GCAA,gCAIElwC,YAAY0pI,EAAevnI,GACzBnB,KAAK0oI,IAAa,MAAPA,EAAc,GAAKA,EAC9B1oI,KAAKmB,eAAiBA,K,0GCN1B,8BAIEnC,YAAY0pI,EAAetiH,GACzBpmB,KAAK0oI,IAAa,MAAPA,EAAc,GAAKA,EAC9B1oI,KAAKomB,SAAWA,K,8GCNpB,iCAGEpnB,YAAY0pI,GACV1oI,KAAK0oI,IAAa,MAAPA,EAAc,GAAKA,K,8GCFlC,iBAEA,+BAIE1pI,YAAY4uB,EAAmBlE,GACd,MAAXkE,IACF5tB,KAAK4tB,QAAU,GACfA,EAAQ/c,SAAS4J,IACfza,KAAK4tB,QAAQvW,KAAK,IAAI,EAAAq7C,oBAAoBj4C,QAG9Cza,KAAK0pB,cAAgBA,K,6GCfzB,iCAGE1qB,YAAY0qB,GACV1pB,KAAK0pB,cAAiC,MAAjBA,EAAwB,GAAKA,K,2GCFtD,iBAEA,4BAIE1qB,YAAYkqB,GACVlpB,KAAKkpB,OAAS,IAAI,EAAAsrB,cAActrB,GAChClpB,KAAK0pB,cAAgBR,EAAOQ,iB,qGCThC,iBACA,WACA,UACA,WACA,UACA,WACA,WAGA,WAGA,sBAmBE1qB,YAAYkqB,GAUV,OATAlpB,KAAKqR,KAAO6X,EAAO7X,KACnBrR,KAAKomB,SAAW8C,EAAO9C,SACvBpmB,KAAKmB,eAAiB+nB,EAAO/nB,eAC7BnB,KAAKU,KAAOwoB,EAAOxoB,KAAOwoB,EAAOxoB,KAAK6B,gBAAkB,KACxDvC,KAAKyxG,MAAQvoF,EAAOuoF,MAAQvoF,EAAOuoF,MAAMlvG,gBAAkB,KAC3DvC,KAAKopB,SAAWF,EAAOE,SACvBppB,KAAK2oI,sBAAwBz/G,EAAOke,aACpCpnC,KAAKqrB,SAAWnC,EAAOmC,SAEfrrB,KAAKqR,MACX,KAAK,EAAAs4B,WAAW+O,MACd14C,KAAK24C,MAAQ,IAAI,EAAAwkF,SACjBn9H,KAAK24C,MAAMY,KAAO,KAClBv5C,KAAK24C,MAAMf,SAAW1uB,EAAOyvB,MAAMf,SAAW1uB,EAAOyvB,MAAMf,SAASr1C,gBAAkB,KACtFvC,KAAK24C,MAAMC,SAAW1vB,EAAOyvB,MAAMC,SAAW1vB,EAAOyvB,MAAMC,SAASr2C,gBAAkB,KACtFvC,KAAK24C,MAAMykF,qBAC4B,MAArCl0G,EAAOyvB,MAAMykF,qBACTl0G,EAAOyvB,MAAMykF,qBAAqBr9E,cAClC,KACN//C,KAAK24C,MAAMU,KAAOnwB,EAAOyvB,MAAMU,KAAOnwB,EAAOyvB,MAAMU,KAAK92C,gBAAkB,KAC1EvC,KAAK24C,MAAM0kF,mBAAqBn0G,EAAOyvB,MAAM0kF,mBAEpB,MAArBn0G,EAAOyvB,MAAMY,OACfv5C,KAAK24C,MAAMY,KAAOrwB,EAAOyvB,MAAMY,KAAK/yC,KAAK4Q,IACvC,MAAMoiC,EAAM,IAAI,EAAA8jF,YAGhB,OAFA9jF,EAAIA,IAAe,MAATpiC,EAAEoiC,IAAcpiC,EAAEoiC,IAAIj3C,gBAAkB,KAClDi3C,EAAI2sC,MAAmB,MAAX/uE,EAAE+uE,MAAgB/uE,EAAE+uE,MAAQ,KACjC3sC,MAGX,MACF,KAAK,EAAA7P,WAAWi6C,WACd5jF,KAAKmlF,WAAa,IAAI,EAAA44C,cACtB/9H,KAAKmlF,WAAW9zE,KAAO6X,EAAOi8D,WAAW9zE,KACzC,MACF,KAAK,EAAAs4B,WAAWwlB,KACdnvD,KAAK+kF,KAAO,IAAI,EAAAi4C,QAChBh9H,KAAK+kF,KAAK8tB,eACsB,MAA9B3pF,EAAO67D,KAAK8tB,eAAyB3pF,EAAO67D,KAAK8tB,eAAetwG,gBAAkB,KACpFvC,KAAK+kF,KAAK8K,MAA6B,MAArB3mE,EAAO67D,KAAK8K,MAAgB3mE,EAAO67D,KAAK8K,MAAMttF,gBAAkB,KAClFvC,KAAK+kF,KAAKqJ,OAA+B,MAAtBllE,EAAO67D,KAAKqJ,OAAiBllE,EAAO67D,KAAKqJ,OAAO7rF,gBAAkB,KACrFvC,KAAK+kF,KAAKouB,SACgB,MAAxBjqF,EAAO67D,KAAKouB,SAAmBjqF,EAAO67D,KAAKouB,SAAS5wG,gBAAkB,KACxEvC,KAAK+kF,KAAKquB,QACe,MAAvBlqF,EAAO67D,KAAKquB,QAAkBlqF,EAAO67D,KAAKquB,QAAQ7wG,gBAAkB,KACtEvC,KAAK+kF,KAAK/Y,KAA2B,MAApB9iD,EAAO67D,KAAK/Y,KAAe9iD,EAAO67D,KAAK/Y,KAAKzpE,gBAAkB,KAC/E,MACF,KAAK,EAAAonC,WAAWg6C,SACd3jF,KAAKilF,SAAW,IAAI,EAAAi4C,YACpBl9H,KAAKilF,SAASh3E,MACa,MAAzBib,EAAO+7D,SAASh3E,MAAgBib,EAAO+7D,SAASh3E,MAAM1L,gBAAkB,KAC1EvC,KAAKilF,SAASixB,UACiB,MAA7BhtF,EAAO+7D,SAASixB,UAAoBhtF,EAAO+7D,SAASixB,UAAU3zG,gBAAkB,KAClFvC,KAAKilF,SAASmxB,WACkB,MAA9BltF,EAAO+7D,SAASmxB,WAAqBltF,EAAO+7D,SAASmxB,WAAW7zG,gBAAkB,KACpFvC,KAAKilF,SAASkxB,SACgB,MAA5BjtF,EAAO+7D,SAASkxB,SAAmBjtF,EAAO+7D,SAASkxB,SAAS5zG,gBAAkB,KAChFvC,KAAKilF,SAAS42B,SACgB,MAA5B3yF,EAAO+7D,SAAS42B,SAAmB3yF,EAAO+7D,SAAS42B,SAASt5G,gBAAkB,KAChFvC,KAAKilF,SAAS49B,SACgB,MAA5B35F,EAAO+7D,SAAS49B,SAAmB35F,EAAO+7D,SAAS49B,SAAStgH,gBAAkB,KAChFvC,KAAKilF,SAAS69B,SACgB,MAA5B55F,EAAO+7D,SAAS69B,SAAmB55F,EAAO+7D,SAAS69B,SAASvgH,gBAAkB,KAChFvC,KAAKilF,SAASn2B,KACY,MAAxB5lC,EAAO+7D,SAASn2B,KAAe5lC,EAAO+7D,SAASn2B,KAAKvsD,gBAAkB,KACxEvC,KAAKilF,SAAS32D,MACa,MAAzBpF,EAAO+7D,SAAS32D,MAAgBpF,EAAO+7D,SAAS32D,MAAM/rB,gBAAkB,KAC1EvC,KAAKilF,SAAS12B,WACkB,MAA9BrlC,EAAO+7D,SAAS12B,WAAqBrlC,EAAO+7D,SAAS12B,WAAWhsD,gBAAkB,KACpFvC,KAAKilF,SAASx2B,QACe,MAA3BvlC,EAAO+7D,SAASx2B,QAAkBvlC,EAAO+7D,SAASx2B,QAAQlsD,gBAAkB,KAC9EvC,KAAKilF,SAAS29B,QACe,MAA3B15F,EAAO+7D,SAAS29B,QAAkB15F,EAAO+7D,SAAS29B,QAAQrgH,gBAAkB,KAC9EvC,KAAKilF,SAAStiF,MACa,MAAzBumB,EAAO+7D,SAAStiF,MAAgBumB,EAAO+7D,SAAStiF,MAAMJ,gBAAkB,KAC1EvC,KAAKilF,SAAS02B,MACa,MAAzBzyF,EAAO+7D,SAAS02B,MAAgBzyF,EAAO+7D,SAAS02B,MAAMp5G,gBAAkB,KAC1EvC,KAAKilF,SAASo2B,IACW,MAAvBnyF,EAAO+7D,SAASo2B,IAAcnyF,EAAO+7D,SAASo2B,IAAI94G,gBAAkB,KACtEvC,KAAKilF,SAASrtC,SACgB,MAA5B1uB,EAAO+7D,SAASrtC,SAAmB1uB,EAAO+7D,SAASrtC,SAASr1C,gBAAkB,KAChFvC,KAAKilF,SAASm2B,eACsB,MAAlClyF,EAAO+7D,SAASm2B,eACZlyF,EAAO+7D,SAASm2B,eAAe74G,gBAC/B,KACNvC,KAAKilF,SAASk2B,cACqB,MAAjCjyF,EAAO+7D,SAASk2B,cACZjyF,EAAO+7D,SAASk2B,cAAc54G,gBAC9B,KAMW,MAAjB2mB,EAAO+4D,SACTjiF,KAAKiiF,OAAS/4D,EAAO+4D,OAAOz7E,KAAKwvC,IAC/B,MAAMssC,EAAQ,IAAI,EAAA26C,SAKlB,OAJA36C,EAAMjxE,KAAO2kC,EAAE3kC,KACfixE,EAAM5hF,KAAOs1C,EAAEt1C,KAAOs1C,EAAEt1C,KAAK6B,gBAAkB,KAC/C+/E,EAAM3nE,MAAQq7B,EAAEr7B,MAAQq7B,EAAEr7B,MAAMpY,gBAAkB,KAClD+/E,EAAMF,SAAWpsC,EAAEosC,SACZE,MAImB,MAA1Bp5D,EAAO0uF,kBACT53G,KAAK43G,gBAAkB,GACvB1uF,EAAO0uF,gBAAgB/mG,SAASy2G,IAC9BtnH,KAAK43G,gBAAgBvgG,KAAK,CACxBmwG,aAAcF,EAAGE,aACjB5uE,SAAU0uE,EAAG1uE,SAAW0uE,EAAG1uE,SAASr2C,gBAAkB,WAKlC,MAAtB2mB,EAAO4wD,cACT95E,KAAK85E,YAAc,GACnB95E,KAAK4oI,aAAe,GACpB1/G,EAAO4wD,YAAYjpE,SAASokC,IAC1B,MAAM5/B,EAAW4/B,EAAW5/B,SAAW4/B,EAAW5/B,SAAS9S,gBAAkB,KAC7EvC,KAAK85E,YAAY7kC,EAAW90C,IAAMkV,EAClC,MAAMwzH,EAAoB,IAAI,EAAAC,kBAC9BD,EAAkBxzH,SAAWA,EACP,MAAlB4/B,EAAW7yC,MACbymI,EAAkBzmI,IAAM6yC,EAAW7yC,IAAIG,iBAEzCvC,KAAK4oI,aAAa3zF,EAAW90C,IAAM0oI,S,0GC7J3C,iBAEA,2BAIE7pI,YAAYkqB,GACVlpB,KAAKkpB,OAAS,IAAI,EAAAsrB,cAActrB,GAChClpB,KAAK0pB,cAAgBR,EAAOQ,iB,2GCRhC,iBAEA,MAAagpC,UAA4B,EAAAle,cAGvCx1C,YAAYkqB,GACV3pB,MAAM2pB,GACNlpB,KAAKG,GAAK+oB,EAAO/oB,IALrB,yB,uGCAA,0BAKEnB,YAAYosB,GAFZ,KAAA6F,OAAqC,GAGjB,MAAd7F,IAGJprB,KAAKU,KAAO0qB,EAAW1qB,KAAO0qB,EAAW1qB,KAAK6B,gBAAkB,KAChEvC,KAAKyxB,WAAarG,EAAWqG,e,0GCdjC,gC,mGCGA,sBAMEzyB,YAAY03H,EAAex3H,GACzBc,KAAKqR,KAAOnS,EAAqBq+E,YACjCv9E,KAAKU,KAAOxB,EAAqBu+E,kBACjCz9E,KAAKsJ,WAAaotH,EAClB12H,KAAK+oI,UAAY,Q,+GCbrB,kCAGE/pI,YAAYwtE,GACVxsE,KAAKwsE,iCAAmCA,K,oGCJ5C,iBAEA,MAAa5b,UAAqB,EAAAK,mBAAlC,kB,yGCFA,iBAEA,MAAaA,UAA0B,EAAA4d,2BAAvC,uB,kHCFA,wC,mHCAA,yC,kHCEA,wC,oHCFA,0C,kHCEA,wC,kGCAA,wB,mGCAA,sBAGE7vE,YAAYwzD,GACVxyD,KAAKU,KAAO8xD,EAAO9xD,KAAO8xD,EAAO9xD,KAAK6B,gBAAkB,Q,2GCJ5D,iBAEA,MAAakwD,UAA4B,EAAAu2E,cAGvChqI,YAAYwzD,GACVjzD,MAAMizD,GACNxyD,KAAKG,GAAKqyD,EAAOryD,IALrB,yB,kGCFA,mCAIE,KAAA4jB,YAA0C,M,uGCJ5C,gBAGA,MAAawxG,UAAwB,EAAA0T,aACnCjqI,YACSqK,EACAw9B,EACGkvF,EACVmT,GAEA3pI,MAAMw2H,EAAWmT,GALV,KAAA7/H,SAAAA,EACA,KAAAw9B,aAAAA,EACG,KAAAkvF,UAAAA,EAMZoT,kBACE,MAAM/zE,EAAM71D,MAAM4pI,gBAAgBnpI,KAAKqJ,UAMvC,OAJA+rD,EAAIhwB,MAAQplC,KAAKqJ,SAASqrG,WAAW,gBAAkB,mBAAqB,MAC5Et/C,EAAIg0E,WAAa,qBACjBh0E,EAAIi0E,cAAgBrpI,KAAK6mC,aAElBuuB,GAjBX,qB,4GCJA,iBAIA,UAGA,MAAa6iE,UAA6B,EAAAgR,aACxCjqI,YACS2D,EACAiF,EACAouH,EACGD,EACVmT,GAEA3pI,MAAMw2H,EAAWmT,GANV,KAAAvmI,MAAAA,EACA,KAAAiF,mBAAAA,EACA,KAAAouH,gBAAAA,EACG,KAAAD,UAAAA,EAMZoT,gBAAgB9/H,GACd,MAAM+rD,EAAM71D,MAAM4pI,gBAAgB9/H,GAUlC,OARA+rD,EAAIg0E,WAAa,WACjBh0E,EAAIxd,SAAW53C,KAAK2C,MACpByyD,EAAIxc,SAAW54C,KAAK4H,mBAEQ,MAAxB5H,KAAKg2H,kBACP5gE,EAAI4gE,gBAAkBh2H,KAAKg2H,iBAGtB5gE,EAGTk0E,0BAA0Bxb,GACxBA,EAAQ72G,IAAI,aAAc,EAAAnV,MAAMynI,iBAAiBvpI,KAAK2C,SA1B1D,0B,uGCNA,gBAGA,MAAa01H,UAAwB,EAAA4Q,aACnCjqI,YACSgtE,EACAkzB,EACAj2F,EACG8sH,EACVmT,GAEA3pI,MAAMw2H,EAAWmT,GANV,KAAAl9D,KAAAA,EACA,KAAAkzB,aAAAA,EACA,KAAAj2F,YAAAA,EACG,KAAA8sH,UAAAA,EAMZoT,gBAAgB9/H,GACd,MAAM+rD,EAAM71D,MAAM4pI,gBAAgB9/H,GAOlC,OALA+rD,EAAIg0E,WAAa,qBACjBh0E,EAAI4W,KAAOhsE,KAAKgsE,KAChB5W,EAAIo0E,cAAgBxpI,KAAKk/F,aACzB9pC,EAAIq0E,aAAezpI,KAAKiJ,YAEjBmsD,GAnBX,qB,iGCDA,qBAGEp2D,YAAsB+2H,EAAkCmT,GAAlC,KAAAnT,UAAAA,EACpB/1H,KAAKkpI,OAAmB,MAAVA,EAAiBA,EAAS,KAI1CI,0BAA0Bxb,IAI1BmI,aAAaF,GACX/1H,KAAK+1H,UAAYA,EAGToT,gBAAgB9/H,GACxB,MAAM+rD,EAAW,CACfhwB,MAAO,qBACPskG,UAAWrgI,GAiBb,OAdIrJ,KAAKkpI,SACP9zE,EAAIhV,WAAapgD,KAAKkpI,OAAO73H,KAC7B+jD,EAAI2tC,iBAAmB/iG,KAAKkpI,OAAO5/H,WACnC8rD,EAAIu0E,WAAa3pI,KAAKkpI,OAAOxoI,MAK3BV,KAAK+1H,UAAUh2H,OAAoC,MAA3BC,KAAK+1H,UAAUzrH,WACzC8qD,EAAIqiE,eAAiBz3H,KAAK+1H,UAAUh2H,MACpCq1D,EAAIw0E,kBAAoB5pI,KAAK+1H,UAAUzrH,SACvC8qD,EAAIy0E,kBAAoB7pI,KAAK+1H,UAAU10B,SAAW,IAAM,KAGnDjsC,K,2GCtCX,8BACEp2D,YACSsL,EAAkC,KAClCvK,EAAgB,KAChBshG,GAAoB,GAFpB,KAAA/2F,SAAAA,EACA,KAAAvK,MAAAA,EACA,KAAAshG,SAAAA,K,0GCFX,2CACE,KAAAzzE,QAA2B,GAC3B,KAAA2kC,QAA2B,GAC3B,KAAA2iD,oBAAoD,M,sHCHtD,uDACE,KAAAtnF,QAA2B,GAC3B,KAAA7J,YAAmC,GACnC,KAAAoxF,wBAAwD,M,kGCL1D,iBAEA,MAAa1jD,UAAmB,EAAAQ,iBAAhC,gB,gHCJA,mCAGEjzD,YAAYoD,GACVpC,KAAKoC,IAAMA,K,iGCJf,oBAIEpD,YAAY6C,EAAmB84B,GAC7B36B,KAAK6B,UAAYA,EACjB7B,KAAK26B,oBAAsBA,K,gGCN/B,mBAIE37B,YAAYoD,EAASuY,GACnB3a,KAAKoC,IAAMA,EACXpC,KAAK2a,MAAQA,K,0HCJjB,gD,iHCFA,iBAEA,WAEA,MAAaosB,UAAkC,EAAA8nC,0BAA/C,c,oBACE,KAAAx9D,KAA+B,EAAA21B,uBAAuB8yD,SADxD,+B,mHCGA,sCACE96F,YACSmC,EACAkQ,EACAkR,EACAvC,GAHA,KAAA7e,eAAAA,EACA,KAAAkQ,KAAAA,EACA,KAAAkR,QAAAA,EACA,KAAAvC,OAAAA,K,+GCPX,qC,+GCLA,iBAEA,MAAa8V,UAAgC,EAAAygE,YAC3Cv3F,YAAY6C,EAAmB84B,GAC7Bp7B,MAAMsC,EAAW84B,IAFrB,6B,2HCFA,8CACE37B,YAAmBunC,EAA+BJ,GAA/B,KAAAI,eAAAA,EAA+B,KAAAJ,kBAAAA,K,wHCDpD,iBAEA,MAAa2iC,UAAyC,EAAAC,sBAAtD,sC,8GCAA,qC,gHCEA,sC,kHCJA,yC,wHCKA,2CAGE/pE,YAAYilC,GACVjkC,KAAKikC,KAAOA,K,iHCThB,oCAGEjlC,YAAY0pI,GACV1oI,KAAK0oI,IAAa,MAAPA,EAAc,GAAKA,K,oHCJlC,0C,mHCKA,oDACE,KAAAxrG,OAAmB,GAGnB,KAAAnZ,YAA0C,M,oICT5C,iBAEA,MAAa1D,UAAuD,EAAAwuD,2BAApE,oD,0HCFA,gD,yHCAA,0DACE,KAAAnxC,SAAqB,M,mHCIvB,oDAGE,KAAA3Z,YAA0C,M,yGCR5C,4BAGE/kB,YAAY2D,GACV3C,KAAK2C,MAAQA,K,uGCJjB,iBAEA,MAAasvD,UAAwB,EAAA4c,2BAArC,qB,sGCDA,iBAEA,MAAa1gB,UAAuB,EAAA2a,kCAApC,oB,mGCDA,yB,qGCFA,wBAGE9pE,YAAY2D,GACV3C,KAAK2C,MAAQA,K,uHCFjB,0CACE3D,YACS89D,EACAG,GADA,KAAAH,iBAAAA,EACA,KAAAG,0BAAAA,K,2GCLX,iC,qGCMA,wBAMEj+D,YACS2D,EACAjC,EACAkH,EACP68D,EACOriE,EACAq4B,EACAC,EACAxyB,EACA8tH,GARA,KAAArzH,MAAAA,EACA,KAAAjC,KAAAA,EACA,KAAAkH,mBAAAA,EAEA,KAAAxF,IAAAA,EACA,KAAAq4B,IAAAA,EACA,KAAAC,cAAAA,EACA,KAAAxyB,cAAAA,EACA,KAAA8tH,gBAAAA,EAEPh2H,KAAKykE,mBAAqBA,GAA0C,Q,+GCvBxE,qC,8GCAA,iCAKEzlE,YAAYmB,EAAY8e,EAAmBC,GACzClf,KAAKG,GAAKA,EACVH,KAAKif,SAAWA,EAChBjf,KAAKkf,cAAgBA,K,uGCRzB,6B,mGCAA,gBACA,WACA,WAGA,oBAeElgB,YAAY0F,EAAYolI,GAatB,OAZA9pI,KAAKqR,KAAO3M,EAAK2M,KACjBrR,KAAK8pI,WAAaA,EAClB9pI,KAAKU,KAAOgE,EAAKhE,KAAOgE,EAAKhE,KAAK6B,gBAAkB,KACpDvC,KAAKyxG,MAAQ/sG,EAAK+sG,MAAQ/sG,EAAK+sG,MAAMlvG,gBAAkB,KACvDvC,KAAKkhI,eAAiBx8H,EAAKw8H,eAC3BlhI,KAAKy8C,eAAwC,MAAvB/3C,EAAK+3C,eAAyB/3C,EAAK+3C,eAAesD,cAAgB,KACxF//C,KAAK03F,aAAoC,MAArBhzF,EAAKgzF,aAAuBhzF,EAAKgzF,aAAa33C,cAAgB,KAClF//C,KAAKoC,IAAkB,MAAZsC,EAAKtC,IAAcsC,EAAKtC,IAAIG,gBAAkB,KACzDvC,KAAK44C,SAAWl0C,EAAKk0C,SACrB54C,KAAK85D,SAAWp1D,EAAKo1D,SACrB95D,KAAKu8C,UAAY73C,EAAK63C,UAEdv8C,KAAKqR,MACX,KAAK,EAAA8qC,SAAS+kC,KACZlhF,KAAK8N,KAAO,IAAI,EAAAowH,YAChBl+H,KAAK8N,KAAKA,KAAyB,MAAlBpJ,EAAKoJ,KAAKA,KAAepJ,EAAKoJ,KAAKA,KAAKvL,gBAAkB,KAC3EvC,KAAK8N,KAAKwwC,OAAS55C,EAAKoJ,KAAKwwC,OAC7B,MACF,KAAK,EAAAnC,SAASi7C,KACZp3F,KAAKq1C,KAAO,IAAI,EAAA2oF,YAChBh+H,KAAKq1C,KAAKhgC,SAAiC,MAAtB3Q,EAAK2wC,KAAKhgC,SAAmB3Q,EAAK2wC,KAAKhgC,SAAS9S,gBAAkB,S,yGCvC/F,iBAEA,MAAaswD,UAA0B,EAAAk3E,YAGrC/qI,YAAY0F,GACVnF,MAAMmF,GACN1E,KAAKG,GAAKuE,EAAKvE,IALnB,uB,wGCAA,2BASEnB,YACE4I,EACAxF,EACAqiE,EACAhqC,EACAC,EACA+tG,EACAxkG,GAEAjkC,KAAK4H,mBAAqBA,EAC1B5H,KAAKoC,IAAMA,EACXpC,KAAKykE,mBAAqBA,EAC1BzkE,KAAKy6B,IAAMA,EACXz6B,KAAK06B,cAAgBA,EACrB16B,KAAKyoI,cAAgBA,EACrBzoI,KAAKikC,KAAOA,K,oGC5BhB,0B,0GCAA,gC,6GCAA,iBAEA,MAAaqnC,UAA8B,EAAAuD,2BAA3C,2B,gHCAA,iBAEA,MAAatE,UAAiC,EAAAsE,2BAA9C,8B,gHCJA,iBAEA,MAAapnE,UAAiC,EAAAonE,2BAA9C,8B,0GCFA,gC,sGCIA,uCACE,KAAAjhD,QAAiC,GACjC,KAAA2kC,QAAiC,GACjC,KAAAI,MAA6B,M,0GCP/B,6BAKE3zD,YAAY0B,EAAc+jE,GAF1B,KAAAulE,QAAU,QAGRhqI,KAAKU,KAAOA,EACZV,KAAKykE,mBAAqBA,GAA0C,Q,gHCPxE,iBAEA,MAAa6+B,UAAkC,EAAA9nE,sCAA/C,+B,2HCFA,iBAEA,MAAaquC,UAA4C,EAAAgF,2BAAzD,yC,iHCFA,iBAEA,MAAajE,UAAkC,EAAAiE,2BAA/C,+B,mHCFA,iBAEA,MAAanD,UAAoC,EAAAmD,2BAAjD,iC,4HCFA,iBAEA,MAAaH,UAA6C,EAAAG,2BAA1D,0C,sHCFA,iBAEA,MAAaP,UAAuC,EAAAO,2BAApD,oC,sHCFA,iBAEA,MAAagB,UAAuC,EAAAhB,2BAApD,oC,uGCFA,6B,gHCAA,mCAIE7vE,YAAYiM,EAAgBlL,GAC1BC,KAAKiL,OAASA,EACdjL,KAAKD,MAAQA,K,wGCNjB,2BAIEf,YAAYiM,EAAgBlL,GAC1BC,KAAKiL,OAASA,EACdjL,KAAKD,MAAQA,K,sGCNjB,iBAEA,MAAakqI,UAAuB,EAAAnN,aAIlC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKknC,OAASlnC,KAAK+8H,oBAAoB,UACvC/8H,KAAKonC,aAAe,IAAIr3B,KAAK/P,KAAK+8H,oBAAoB,kBAP1D,oB,0GCFA,iBAEA,MAAamN,UAA2B,EAAApN,aAQtC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKyN,IAAMzN,KAAK+8H,oBAAoB,OACpC/8H,KAAKqV,SAAWrV,KAAK+8H,oBAAoB,YACzC/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,OACpC/8H,KAAKk5C,KAAOl5C,KAAK+8H,oBAAoB,QACrC/8H,KAAKi+H,SAAWj+H,KAAK+8H,oBAAoB,aAf7C,wB,oHCAA,iBACA,WAEA,MAAaoN,UAAqC,EAAArN,aAMhD99H,YAAY0C,GACVnC,MAAMmC,GAFR,KAAA+L,IAAc,KAGZzN,KAAKy1C,aAAez1C,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKoqI,eAAiBpqI,KAAK+8H,oBAAoB,kBAC/C,MAAM3lE,EAAiBp3D,KAAK+8H,oBAAoB,kBAC1CsN,EAAqBrqI,KAAK+8H,oBAAoB,sBACpD/8H,KAAKo3D,eAAmC,MAAlBA,EAAyB,KAAO,IAAI,EAAAkzE,eAAelzE,GACzEp3D,KAAKqqI,mBACmB,MAAtBA,EAA6B,KAAO,IAAI,EAAAC,eAAeD,GACzDrqI,KAAKyN,IAAMzN,KAAK+8H,oBAAoB,QAfxC,kC,kGCLA,qBAGE/9H,YAAY0C,GACV1B,KAAK0B,SAAWA,EAGRq7H,oBACRwN,EACA7oI,EAAgB,KAChB8oI,GAAY,GAEZ,GAAoB,MAAhBD,GAAyC,KAAjBA,EAC1B,MAAM,IAAI3oI,MAAM,wCAKlB,GAHgB,MAAZF,GAAqC,MAAjB1B,KAAK0B,WAC3BA,EAAW1B,KAAK0B,UAEF,MAAZA,EACF,OAAO,KAET,IAAK8oI,QAAwC57H,IAA3BlN,EAAS6oI,GAA6B,CACtD,IAAIE,EAAgC,KAElCA,EADEF,EAAat9G,OAAO,KAAOs9G,EAAat9G,OAAO,GAAGN,cAC5B49G,EAAat9G,OAAO,GAAG/lB,cAEvBqjI,EAAat9G,OAAO,GAAGN,cAE7C49G,EAAa35H,OAAS,IACxB65H,GAAyBF,EAAa3yH,MAAM,SAIfhJ,IAA3BlN,EADJ6oI,EAAeE,KAEbF,EAAeA,EAAarjI,oBAEC0H,IAA3BlN,EAAS6oI,KACXA,EAAeA,EAAa59G,eAGhC,OAAOjrB,EAAS6oI,M,8GCxCpB,iBACA,WAEA,MAAaG,UAA+B,EAAA5N,aAI1C99H,YAAY0C,GACVnC,MAAMmC,GAJR,KAAAsqC,SAAqC,GACrC,KAAAC,aAA6C,GAI3C,MAAMA,EAAejsC,KAAK+8H,oBAAoB,gBACxC/wF,EAAWhsC,KAAK+8H,oBAAoB,YACtB,MAAhB9wF,IACFjsC,KAAKisC,aAAeA,EAAazlC,KAAKlG,GAAW,IAAI,EAAAqqI,2BAA2BrqI,MAElE,MAAZ0rC,IACFhsC,KAAKgsC,SAAWA,EAASxlC,KAAK4R,GAAW,IAAI,EAAAwyH,uBAAuBxyH,MAIxE,mBACE,OAA+B,GAAxBpY,KAAKgsC,SAASp7B,QAA2C,GAA5B5Q,KAAKisC,aAAar7B,QAjB1D,4B,8GCHA,iBACA,WAEA,MAAai6H,UAA+B,EAAA/N,aAI1C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAK4rC,QAAU5rC,KAAK+8H,oBAAoB,WACxC,MAAMlxF,EAAgB7rC,KAAK+8H,oBAAoB,iBAC/C/8H,KAAK6rC,cAAiC,MAAjBA,EAAwB,KAAO,IAAI,EAAAi/F,sBAAsBj/F,IARlF,4B,qLCAA,iBAEA,MAAak/F,UAAwB,EAAAjO,aAMnC99H,YAAY0C,GACVnC,MAAMmC,GAJR,KAAAsqC,SAAqC,GACrC,KAAAC,aAA6C,GAI3CjsC,KAAK4rC,QAAU5rC,KAAK+8H,oBAAoB,WACxC,MAAMlxF,EAAgB7rC,KAAK+8H,oBAAoB,iBACzC9wF,EAAejsC,KAAK+8H,oBAAoB,gBACxC/wF,EAAWhsC,KAAK+8H,oBAAoB,YAC1C/8H,KAAK6rC,cAAiC,MAAjBA,EAAwB,KAAO,IAAIi/F,EAAsBj/F,GAC1D,MAAhBI,IACFjsC,KAAKisC,aAAeA,EAAazlC,KAAKlG,GAAW,IAAIqqI,EAA2BrqI,MAElE,MAAZ0rC,IACFhsC,KAAKgsC,SAAWA,EAASxlC,KAAK4R,GAAW,IAAIwyH,EAAuBxyH,OAjB1E,oBAsBA,MAAa0yH,UAA8B,EAAAhO,aAMzC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKgrI,UAAYhrI,KAAK+8H,oBAAoB,aAC1C/8H,KAAKwgC,YAAcxgC,KAAK+8H,oBAAoB,eAC5C/8H,KAAKirI,kBAAoBjrI,KAAK+8H,oBAAoB,sBAXtD,0BAeA,MAAa6N,UAA+B,EAAA9N,aAQ1C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKyN,IAAMzN,KAAK+8H,oBAAoB,OACpC/8H,KAAKkrI,OAASlrI,KAAK+8H,oBAAoB,UACvC/8H,KAAKouF,OAASpuF,KAAK+8H,oBAAoB,UACvC/8H,KAAKmrI,KAAOnrI,KAAK+8H,oBAAoB,QACrC/8H,KAAKgV,KAAOhV,KAAK+8H,oBAAoB,QACrC/8H,KAAK0tD,OAAS1tD,KAAK+8H,oBAAoB,WAf3C,2BAmBA,MAAa4N,UAAmC,EAAA7N,aAU9C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKorI,YAAcprI,KAAK+8H,oBAAoB,eAC5C/8H,KAAK0tD,OAAS1tD,KAAK+8H,oBAAoB,UACvC/8H,KAAKqrI,SAAWrrI,KAAK+8H,oBAAoB,YACzC/8H,KAAKsrI,kBAAoBtrI,KAAK+8H,oBAAoB,qBAClD/8H,KAAKurI,eAAiBvrI,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKyqC,kBAAoBzqC,KAAK+8H,oBAAoB,qBAClD/8H,KAAKyzD,QAAUzzD,KAAK+8H,oBAAoB,YAnB5C,gC,6GC7DA,iBAEA,MAAayO,UAA8B,EAAA1O,aAczC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKyrI,UAAYzrI,KAAK+8H,oBAAoB,aAC1C/8H,KAAK0rI,WAAa1rI,KAAK+8H,oBAAoB,cAC3C/8H,KAAK2rI,YAAc3rI,KAAK+8H,oBAAoB,eAC5C/8H,KAAKwgC,YAAcxgC,KAAK+8H,oBAAoB,eAC5C/8H,KAAKy5C,OAASz5C,KAAK+8H,oBAAoB,UACvC/8H,KAAK4rI,SAAW5rI,KAAK+8H,oBAAoB,YACzC/8H,KAAK6rI,WAAa7rI,KAAK+8H,oBAAoB,cAC3C/8H,KAAK8rI,SAAW9rI,KAAK+8H,oBAAoB,YACzC/8H,KAAK+rI,aAAe/rI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKgsI,SAAWhsI,KAAK+8H,oBAAoB,YACzC/8H,KAAKiO,MAAQjO,KAAK+8H,oBAAoB,UA3B1C,2B,sGCFA,iBACA,WACA,UACA,WACA,UACA,WAEA,WACA,WACA,WAEA,MAAauN,UAAuB,EAAAxN,aAuBlC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKomB,SAAWpmB,KAAK+8H,oBAAoB,aAAe,KACxD/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKyxG,MAAQzxG,KAAK+8H,oBAAoB,SACtC/8H,KAAKopB,SAAWppB,KAAK+8H,oBAAoB,cAAe,EACxD/8H,KAAKqY,OAASrY,KAAK+8H,oBAAoB,QACS,MAA5C/8H,KAAK+8H,oBAAoB,gBAC3B/8H,KAAKq6E,cAAe,EAEpBr6E,KAAKq6E,aAAer6E,KAAK+8H,oBAAoB,gBAE/C/8H,KAAKi1E,oBAAsBj1E,KAAK+8H,oBAAoB,uBACpD/8H,KAAKonC,aAAepnC,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK0pB,cAAgB1pB,KAAK+8H,oBAAoB,iBAC9C/8H,KAAK0pC,YAAc1pC,KAAK+8H,oBAAoB,eAE5C,MAAMpkF,EAAQ34C,KAAK+8H,oBAAoB,SAC1B,MAATpkF,IACF34C,KAAK24C,MAAQ,IAAI,EAAAwkF,SAASxkF,IAG5B,MAAMosC,EAAO/kF,KAAK+8H,oBAAoB,QAC1B,MAARh4C,IACF/kF,KAAK+kF,KAAO,IAAI,EAAAi4C,QAAQj4C,IAG1B,MAAME,EAAWjlF,KAAK+8H,oBAAoB,YAC1B,MAAZ93C,IACFjlF,KAAKilF,SAAW,IAAI,EAAAi4C,YAAYj4C,IAGlC,MAAME,EAAanlF,KAAK+8H,oBAAoB,cAC1B,MAAd53C,IACFnlF,KAAKmlF,WAAa,IAAI,EAAA44C,cAAc54C,IAGtC,MAAMlD,EAASjiF,KAAK+8H,oBAAoB,UAC1B,MAAV96C,IACFjiF,KAAKiiF,OAASA,EAAOz7E,KAAKwvC,GAAW,IAAI,EAAAinF,SAASjnF,MAGpD,MAAM8jC,EAAc95E,KAAK+8H,oBAAoB,eAC1B,MAAfjjD,IACF95E,KAAK85E,YAAcA,EAAYtzE,KAAKwxB,GAAW,IAAI,EAAAkyG,mBAAmBlyG,MAGxE,MAAM4/E,EAAkB53G,KAAK+8H,oBAAoB,mBAC1B,MAAnBnlB,IACF53G,KAAK43G,gBAAkBA,EAAgBpxG,KAAK60F,GAAW,IAAI,EAAA4wC,wBAAwB5wC,MAGrFr7F,KAAKqrB,SAAWrrB,KAAK+8H,oBAAoB,aAAe,EAAA1kF,mBAAmBC,MA9E/E,oB,uKCXA,iBACA,WAEA,MAAa4zF,UAA2B,EAAApP,aAMtC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKyxB,WAAazxB,KAAK+8H,oBAAoB,eAX/C,uBAeA,0CAA+CmP,EAG7CltI,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKif,SAAWjf,KAAK+8H,oBAAoB,cAAe,IAI5D,+CAAoDmP,EAGlDltI,YAAY0C,GACVnC,MAAMmC,GAHR,KAAAuvB,OAAsC,GAIpC,MAAMA,EAASjxB,KAAK+8H,oBAAoB,UAC1B,MAAV9rG,IACFjxB,KAAKixB,OAASA,EAAOzqB,KAAKmrB,GAAW,IAAI,EAAAw6G,0BAA0Bx6G,S,kHClCzE,iBAEA,MAAay6G,UAAmC,EAAAtP,aAI9C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKssE,mCAAqCtsE,KAAK+8H,oBAC7C,sCAEF/8H,KAAKwsE,iCAAmCxsE,KAAK+8H,oBAC3C,qCAVN,gC,uGCFA,iBACA,WAEA,MAAasP,UAAwB,EAAAvP,aAInC99H,YAAY0C,GACVnC,MAAMmC,GAHR,KAAA+yD,wBAAkD,GAIhDz0D,KAAKw0D,kBAAoBx0D,KAAK+8H,oBAAoB,qBAClD,MAAMtoE,EAA0Bz0D,KAAK+8H,oBAAoB,2BAEvD/8H,KAAKy0D,wBADwB,MAA3BA,EAC6BA,EAAwBjuD,KACpD8rB,GAAW,IAAI,EAAAg6G,qBAAqBh6G,KAGR,IAbrC,qB,qOCCA,iBACA,WAEA,MAAa0lC,UAA8C,EAAA8kE,aAUzD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAK0zD,UAAY1zD,KAAK+8H,oBAAoB,aAC1C/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK2C,MAAQ3C,KAAK+8H,oBAAoB,SACtC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAK+W,OAAS/W,KAAK+8H,oBAAoB,UACvC/8H,KAAK6zD,aAAe7zD,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKusI,aAAevsI,KAAK+8H,oBAAoB,iBAnBjD,0CAuBA,MAAayP,UAA8C,EAAA1P,aAUzD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKysI,UAAYzsI,KAAK+8H,oBAAoB,aAC1C/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK2C,MAAQ3C,KAAK+8H,oBAAoB,SACtC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAK+W,OAAS/W,KAAK+8H,oBAAoB,UACvC/8H,KAAK6zD,aAAe7zD,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKusI,aAAevsI,KAAK+8H,oBAAoB,iBAnBjD,0CAuBA,MAAa2P,UAAwC,EAAA5P,aAKnD99H,YAAY0C,GACVnC,MAAMmC,GAEN1B,KAAK8zD,aAAe9zD,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKy6B,IAAMz6B,KAAK+8H,oBAAoB,OACpC/8H,KAAK06B,cAAgB16B,KAAK+8H,oBAAoB,kBAVlD,oCAcA,MAAa4P,UAAoC,EAAA7P,aAI/C99H,YAAY0C,GACVnC,MAAMmC,GAHR,KAAAksB,QAA4B,GAK1B5tB,KAAK8zD,aAAe9zD,KAAK+8H,oBAAoB,gBAE7C,MAAMnvG,EAAU5tB,KAAK+8H,oBAAoB,WAC1B,MAAXnvG,IACF5tB,KAAK4tB,QAAUA,EAAQpnB,KAAKiU,GAAW,IAAI,EAAA6vH,eAAe7vH,OAXhE,iC,qGCnEA,iBAEA,WAEA,MAAa8jC,UAAsB,EAAAu+E,aAOjC99H,YAAY0C,EAAeqV,EAAgB61H,G,QACzCrtI,MAAMmC,GACN,IAAImrI,EAAa,KACjB,GAAgB,MAAZnrI,EAAkB,CACpB,MAAMorI,EAAqB9sI,KAAK+8H,oBAAoB,cAElD8P,EADEC,GAAsBF,EACXE,EAEAprI,EAIbmrI,GACF7sI,KAAKqN,QAAUrN,KAAK+8H,oBAAoB,UAAW8P,GACnD7sI,KAAKovG,iBAAmBpvG,KAAK+8H,oBAAoB,mBAAoB8P,GACrE7sI,KAAKupF,eAAwD,QAAvC,EAAqB,QAArB,EAAAvpF,KAAKovG,wBAAgB,eAAE29B,wBAAgB,eAAG,GAChE/sI,KAAKmkG,iBAAmB,EAAAriG,MAAMm7C,mBAAmBj9C,KAAKupF,iBAEvC,MAAXxyE,IACF/W,KAAKqN,QAAU,yCAGnBrN,KAAK25B,WAAa5iB,EAGpBgwE,mBACE,GAA6B,MAAzB/mF,KAAKovG,iBACP,OAAOpvG,KAAKqN,QAEd,IAAK,MAAMjL,KAAOpC,KAAKovG,iBAErB,GAAKpvG,KAAKovG,iBAAiBj3E,eAAe/1B,IAGtCpC,KAAKovG,iBAAiBhtG,GAAKwO,OAC7B,OAAO5Q,KAAKovG,iBAAiBhtG,GAAK,GAGtC,OAAOpC,KAAKqN,QAGdgiG,iBACE,MAAM29B,EAAqB,GAC3B,GAA6B,MAAzBhtI,KAAKovG,iBACP,OAAO49B,EAET,IAAK,MAAM5qI,KAAOpC,KAAKovG,iBAEhBpvG,KAAKovG,iBAAiBj3E,eAAe/1B,IAG1CpC,KAAKovG,iBAAiBhtG,GAAKyO,SAAS44B,IAClC,IAAIiiD,EAAS,GACb,GAAItpF,EAAI2B,QAAQ,MAAQ,GAAK3B,EAAI2B,QAAQ,MAAQ,EAAG,CAClD,MAAMkpI,EAAU7qI,EAAI2oG,YAAY,KAChCrf,EAAStpF,EAAI4E,OAAO,EAAGimI,GAAW,EAAIA,EAAU7qI,EAAIwO,QAAU,KAEhEo8H,EAAS31H,KAAKq0E,EAASjiD,MAG3B,OAAOujG,GAnEX,mB,qGCDA,iBAEA,MAAaE,UAAsB,EAAApQ,aAkBjC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKszB,WAAatzB,KAAK+8H,oBAAoB,cAC3C/8H,KAAKwnB,SAAWxnB,KAAK+8H,oBAAoB,YACzC/8H,KAAKqmB,aAAermB,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKo0B,QAAUp0B,KAAK+8H,oBAAoB,WACxC/8H,KAAKu4B,SAAWv4B,KAAK+8H,oBAAoB,YACzC/8H,KAAKoB,mBAAqBpB,KAAK+8H,oBAAoB,sBACnD/8H,KAAKskD,eAAiBtkD,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK4kD,uBAAyB5kD,KAAK+8H,oBAAoB,0BACvD/8H,KAAKoU,aAAepU,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKgV,KAAOhV,KAAK+8H,oBAAoB,QACrC/8H,KAAKogD,WAAapgD,KAAK+8H,oBAAoB,cAC3C/8H,KAAKkV,UAAYlV,KAAK+8H,oBAAoB,aAC1C/8H,KAAK8U,eAAiB9U,KAAK+8H,oBAAoB,mBAnCnD,mB,sGCLA,iBAEA,MAAaoQ,UAAuB,EAAArQ,aAKlC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKonC,aAAepnC,KAAK+8H,oBAAoB,iBATjD,oB,4GCFA,iBAEA,MAAauP,UAA6B,EAAAxP,aAKxC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAK00D,QAAU10D,KAAK+8H,oBAAoB,WACxC/8H,KAAK20D,SAAW30D,KAAK+8H,oBAAoB,aAT7C,0B,2HCFA,iBACA,WAEA,MAAaqQ,UAAsB,EAAAtQ,aAOjC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKgf,UAAYhf,KAAK+8H,oBAAoB,aAC1C/8H,KAAKyxB,WAAazxB,KAAK+8H,oBAAoB,eAb/C,kBAiBA,qCAA0CqQ,EAGxCpuI,YAAY0C,GACVnC,MAAMmC,GAHR,KAAAqiB,YAA2C,GAIzC,MAAMA,EAAc/jB,KAAK+8H,oBAAoB,eAC1B,MAAfh5G,IACF/jB,KAAK+jB,YAAcA,EAAYvd,KAAKiU,GAAW,IAAI,EAAA0xH,0BAA0B1xH,S,+GC3BnF,iBAEA,MAAa67G,UAAgC,EAAAwG,aAG3C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAK2zH,QAAU3zH,KAAK+8H,oBAAoB,qBAL5C,6B,4GCAA,iBAEA,MAAavG,UAA8B,EAAAsG,aAgBzC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKk3H,YAAcx1H,EAAS2rI,aAC5BrtI,KAAKstI,UAAY5rI,EAAS6rI,WAC1BvtI,KAAKu3H,aAAe71H,EAAS8rI,cAC7BxtI,KAAKytI,UAAY/rI,EAASgsI,WAE1B1tI,KAAKkgG,oBAAsBlgG,KAAK+8H,oBAAoB,uBACpD/8H,KAAKg2B,WAAah2B,KAAK+8H,oBAAoB,cAC3C/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,OACpC/8H,KAAKy3H,eAAiBz3H,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKy6B,IAAMz6B,KAAK+8H,oBAAoB,OACpC/8H,KAAK06B,cAAgB16B,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKszF,mBAAqBtzF,KAAK+8H,oBAAoB,sBACnD/8H,KAAKk1H,mBAAqBl1H,KAAK+8H,oBAAoB,sBACnD/8H,KAAKm1H,gBAAkBn1H,KAAK+8H,oBAAoB,oBA/BpD,2B,iHCFA,iBAEA,MAAa3G,UAAkC,EAAA0G,aAK7C99H,YAAY0C,GACVnC,MAAMmC,GAJR,KAAAk2H,oBAAsB,IAAI9hH,IAKxB9V,KAAKwpF,aAAexpF,KAAK+8H,oBAAoB,sBAC7C/8H,KAAKywD,mBAAqBzwD,KAAK+8H,oBAAoB,sBACnD,MAAMnF,EAAsB53H,KAAK+8H,oBAAoB,uBACrD,GAA2B,MAAvBnF,EACF,IAAK,MAAM9e,KAAQ8e,EAEbA,EAAoBz/F,eAAe2gF,IACrC94G,KAAK43H,oBAAoB3gH,IAAIkW,SAAS2rF,EAAM,MAAO8e,EAAoB9e,KAdjF,+B,mHCJA,iBAEA,MAAa60B,UAAoC,EAAA7Q,aAG/C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,QALxC,iC,oGCFA,iBAEA,MAAa6Q,UAAqB,EAAA9Q,aAIhC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKg2B,WAAah2B,KAAK+8H,oBAAoB,cAC3C/8H,KAAK6B,UAAY7B,KAAK+8H,oBAAoB,cAP9C,kB,mGCFA,iBAEA,MAAa8Q,UAAwB,EAAA/Q,aAInC99H,YAAY0C,EAAepB,GACzBf,MAAMmC,GACN,MAAM6E,EAAOvG,KAAK+8H,oBAAoB,QACtC/8H,KAAKuG,KAAe,MAARA,EAAe,GAAKA,EAAKC,KAAKsnI,GAAY,IAAIxtI,EAAEwtI,KAC5D9tI,KAAK6T,kBAAoB7T,KAAK+8H,oBAAoB,sBARtD,kB,wMCFA,gBAEA,WAEA,MAAagR,UAA6B,EAAAjR,aAKxC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKguI,UAAYhuI,KAAK+8H,oBAAoB,aAC1C/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QAErC,MAAM97D,EAAUjhE,KAAK+8H,oBAAoB,WACzC,OAAQ/8H,KAAKqR,MACX,KAAK,EAAA6+F,iBAAiB+9B,iBACtB,KAAK,EAAA/9B,iBAAiBg+B,iBACtB,KAAK,EAAAh+B,iBAAiBi+B,iBACtB,KAAK,EAAAj+B,iBAAiBk+B,gBACpBpuI,KAAKihE,QAAU,IAAIotE,EAAuBptE,GAC1C,MACF,KAAK,EAAAivC,iBAAiBo+B,iBACtB,KAAK,EAAAp+B,iBAAiBq+B,iBACtB,KAAK,EAAAr+B,iBAAiBs+B,iBACpBxuI,KAAKihE,QAAU,IAAIwtE,EAAuBxtE,GAC1C,MACF,KAAK,EAAAivC,iBAAiBw+B,UACtB,KAAK,EAAAx+B,iBAAiBy+B,YACtB,KAAK,EAAAz+B,iBAAiB0+B,YACtB,KAAK,EAAA1+B,iBAAiB2+B,aACtB,KAAK,EAAA3+B,iBAAiB4+B,OACpB9uI,KAAKihE,QAAU,IAAI8tE,EAAiB9tE,GACpC,MACF,KAAK,EAAAivC,iBAAiB8+B,eACtB,KAAK,EAAA9+B,iBAAiB++B,eACtB,KAAK,EAAA/+B,iBAAiBg/B,eACpBlvI,KAAKihE,QAAU,IAAIkuE,EAAqBluE,KAjChD,yBAyCA,MAAaotE,UAA+B,EAAAvR,aAO1C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK0pB,cAAgB1pB,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKonC,aAAe,IAAIr3B,KAAK/P,KAAK+8H,oBAAoB,kBAb1D,2BAiBA,MAAa0R,UAA+B,EAAA3R,aAK1C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKonC,aAAe,IAAIr3B,KAAK/P,KAAK+8H,oBAAoB,kBAT1D,2BAaA,MAAagS,UAAyB,EAAAjS,aAIpC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKgV,KAAO,IAAIjF,KAAK/P,KAAK+8H,oBAAoB,UAPlD,qBAWA,MAAaoS,UAA6B,EAAArS,aAKxC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKonC,aAAe,IAAIr3B,KAAK/P,KAAK+8H,oBAAoB,kBAT1D,0B,+GCtFA,iBACA,WAEA,MAAaqS,UAAgC,EAAAtS,aAK3C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAKuG,KACiC,MAApCvG,KAAK+8H,oBAAoB,QACrB,IAAI,EAAAoB,aAAan+H,KAAK+8H,oBAAoB,SAC1C,KACN/8H,KAAKwnD,KAAO,IAAI6nF,EAAQrvI,KAAK+8H,oBAAoB,UAZrD,4BAgBA,MAAMsS,UAAgB,EAAAvS,aAOpB99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKsvI,aAAetvI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKuvI,sBAAwBvvI,KAAK+8H,oBAAoB,yBACtD/8H,KAAKwvI,WAAaxvI,KAAK+8H,oBAAoB,cAC3C/8H,KAAKyvI,cAAgBzvI,KAAK+8H,oBAAoB,iBAC9C/8H,KAAK0vI,SAAW1vI,KAAK+8H,oBAAoB,e,6HC9B7C,iBAEA,MAAa4S,UAA8C,EAAA7S,aAGzD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKglC,QAAUhlC,KAAK+8H,oBAAoB,YAL5C,2C,4HCJA,iBAEA,MAAa6S,UAA6C,EAAA9S,aAIxD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAK68F,qBAAuB78F,KAAK+8H,oBAAoB,yBAPzD,0C,sHCEA,iBAKA,MAAa8S,UAEH,EAAA/S,aAOR99H,YAAY0C,EAAe08H,GACzB7+H,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC,MAAM+S,EAAY9vI,KAAK+8H,oBAAoB,UAC3C/8H,KAAKggB,OAAsB,MAAb8vH,EAAoB,KAAO,IAAI1R,EAAW0R,IAhB5D,oC,+GCTA,iBAEA,MAAaC,UAAiC,EAAAnC,aAC5C5uI,YAAY0C,GACVnC,MAAMmC,IAFV,8B,4GCAA,iBACA,WAEA,MAAasuI,UAA6B,EAAAlT,aA0BxC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKsJ,WAAatJ,KAAK+8H,oBAAoB,cAC3C/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK+jC,aAAe/jC,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKiwI,iBAAmBjwI,KAAK+8H,oBAAoB,oBACjD/8H,KAAKkwI,iBAAmBlwI,KAAK+8H,oBAAoB,oBACjD/8H,KAAKmwI,iBAAmBnwI,KAAK+8H,oBAAoB,oBACjD/8H,KAAKowI,gBAAkBpwI,KAAK+8H,oBAAoB,mBAChD/8H,KAAKqwI,kBAAoBrwI,KAAK+8H,oBAAoB,qBAClD/8H,KAAKgkC,aAAehkC,KAAK+8H,oBAAoB,gBAC7C,MAAM13H,EAAOrF,KAAK+8H,oBAAoB,QACtC/8H,KAAKqF,KAAe,MAARA,EAAe,KAAO,IAAI,EAAAirI,aAAajrI,GACnDrF,KAAKkwC,SAAWlwC,KAAK+8H,oBAAoB,YACzC/8H,KAAK+vC,MAAQ/vC,KAAK+8H,oBAAoB,SACtC/8H,KAAKmmC,kBAAoBnmC,KAAK+8H,oBAAoB,qBAClD/8H,KAAKghI,eAAiBhhI,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK4pB,aAAe5pB,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKkxB,UAAYlxB,KAAK+8H,oBAAoB,aAC1C/8H,KAAK4gI,aAAe5gI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK2zB,UAAY3zB,KAAK+8H,oBAAoB,aAC1C/8H,KAAK2zC,QAAU3zC,KAAK+8H,oBAAoB,WACxC/8H,KAAK4wC,OAAS5wC,KAAK+8H,oBAAoB,UACvC/8H,KAAK6jC,OAAS7jC,KAAK+8H,oBAAoB,UACvC/8H,KAAKoiB,iBAAmBpiB,KAAK+8H,oBAAoB,oBACjD/8H,KAAKqiB,wBAA0BriB,KAAK+8H,oBAAoB,4BApD5D,0B,iICLA,iBAEA,MAAawT,UAAkD,EAAAzT,aAG7D99H,YAAY0C,GACVnC,MAAMmC,GACN,MAAMklC,EAAe5mC,KAAK+8H,oBAAoB,gBAC1Cn2F,IACF5mC,KAAK4mC,aAAe,IAAI72B,KAAK62B,KAPnC,+C,wHCFA,iBACA,WAKA,MAAa4pG,UAAyC,EAAAR,qBAOpDhxI,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKywI,YAAczwI,KAAK+8H,oBAAoB,eAC5C/8H,KAAK0vC,UAAY1vC,KAAK+8H,oBAAoB,aAC1C,MAAMztF,EAAetvC,KAAK+8H,oBAAoB,gBAC9C/8H,KAAKsvC,aAA+B,MAAhBA,EAAuB,KAAO,IAAI,EAAAohG,4BAA4BphG,GAClF,MAAMG,EAAkBzvC,KAAK+8H,oBAAoB,mBACjD/8H,KAAKyvC,gBACgB,MAAnBA,EACI,KACA,IAAI,EAAAkhG,2CAA2ClhG,GACrDzvC,KAAKqvC,WAAarvC,KAAK+8H,oBAAoB,eAlB/C,sC,6HCNA,iBAEA,MAAa6T,UAA8C,EAAA9T,aAKzD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,QATxC,2C,oHCFA,iBAEA,MAAa8T,UAAqC,EAAA/T,aAIhD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAK8C,MAAQ9C,KAAK+8H,oBAAoB,UAP1C,kC,sOCCA,iBAEA,WACA,WAEA,MAAa+T,UAAiC,EAAAhU,aAS5C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAK+W,OAAS/W,KAAK+8H,oBAAoB,UACvC/8H,KAAKwuB,YAAc,IAAI,EAAAqN,eAAe77B,KAAK+8H,oBAAoB,gBAC/D/8H,KAAKgf,UAAYhf,KAAK+8H,oBAAoB,aAC1C/8H,KAAKwiB,sBAAwBxiB,KAAK+8H,oBAAoB,0BAjB1D,6BAqBA,oDAAyD+T,EAMvD9xI,YAAY0C,G,MACVnC,MAAMmC,GACN1B,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK2C,MAAQ3C,KAAK+8H,oBAAoB,SACtC/8H,KAAK+wI,iBAAmB/wI,KAAK+8H,oBAAoB,oBACjD/8H,KAAK62B,iBAA+D,QAA5C,EAAA72B,KAAK+8H,oBAAoB,2BAAmB,WAIxE,gDAAqD+T,EAGnD9xI,YAAY0C,GACVnC,MAAMmC,GAHR,KAAAqiB,YAA2C,GAIzC,MAAMA,EAAc/jB,KAAK+8H,oBAAoB,eAC1B,MAAfh5G,IACF/jB,KAAK+jB,YAAcA,EAAYvd,KAAKiU,GAAW,IAAI,EAAA0xH,0BAA0B1xH,QAKnF,MAAau2H,UAAoD,EAAAlU,aAM/D99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKy6B,IAAMz6B,KAAK+8H,oBAAoB,OACpC/8H,KAAK06B,cAAgB16B,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKsC,iBAAmBtC,KAAK+8H,oBAAoB,oBACjD/8H,KAAK26B,oBAAsB36B,KAAK+8H,oBAAoB,wBAXxD,iD,+GCxDA,iBAEA,MAAakP,UAAgC,EAAAnP,aAI3C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAK44C,SAAW54C,KAAK+8H,oBAAoB,YACzC/8H,KAAKwnH,aAAexnH,KAAK+8H,oBAAoB,iBAPjD,6B,qGCFA,iBACA,WAEA,MAAakU,UAAwB,EAAAnU,aAKnC99H,YAAY0C,GACVnC,MAAMmC,GACN,MAAMwvI,EAAclxI,KAAK+8H,oBAAoB,eAC1B,MAAfmU,IACFlxI,KAAKkxI,YAAc,IAAI,EAAAC,gBAAgBD,IAEzClxI,KAAK8vD,0BAA4B9vD,KAAK+8H,oBAAoB,6BAC1D/8H,KAAKk8D,QAAUl8D,KAAK+8H,oBAAoB,YAZ5C,qB,oGCAA,iBAEA,MAAauT,UAAqB,EAAAxT,aA8ChC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAK8xC,QAAU9xC,KAAK+8H,oBAAoB,WACxC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK6vC,SAAW7vC,KAAK+8H,oBAAoB,YACzC/8H,KAAKoxI,oBAAsBpxI,KAAK+8H,oBAAoB,uBACpD/8H,KAAKqxI,2BAA6BrxI,KAAK+8H,oBAAoB,8BAC3D/8H,KAAK45D,oBAAsB55D,KAAK+8H,oBAAoB,uBACpD/8H,KAAKm7D,UAAYn7D,KAAK+8H,oBAAoB,aAC1C/8H,KAAKsxI,cAAgBtxI,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKghI,eAAiBhhI,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKuxI,SAAWvxI,KAAK+8H,oBAAoB,YACzC/8H,KAAKgwC,yBAA2BhwC,KAAK+8H,oBAAoB,4BACzD/8H,KAAKwxI,mBAAqBxxI,KAAK+8H,oBAAoB,sBACnD/8H,KAAKo6D,2BAA6Bp6D,KAAK+8H,oBAAoB,8BAC3D/8H,KAAKyxI,qBAAuBzxI,KAAK+8H,oBAAoB,wBACrD/8H,KAAKu6D,uBAAyBv6D,KAAK+8H,oBAAoB,0BACvD/8H,KAAKy6D,gBAAkBz6D,KAAK+8H,oBAAoB,mBAChD/8H,KAAK0xI,YAAc1xI,KAAK+8H,oBAAoB,eAC5C/8H,KAAK2xI,YAAc3xI,KAAK+8H,oBAAoB,eAC5C/8H,KAAK4xI,UAAY5xI,KAAK+8H,oBAAoB,aAC1C/8H,KAAK6xI,aAAe7xI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK8xI,UAAY9xI,KAAK+8H,oBAAoB,aAC1C/8H,KAAKu6E,QAAUv6E,KAAK+8H,oBAAoB,WACxC/8H,KAAK+xI,OAAS/xI,KAAK+8H,oBAAoB,UACvC/8H,KAAKgyI,OAAShyI,KAAK+8H,oBAAoB,UACvC/8H,KAAKiyI,OAASjyI,KAAK+8H,oBAAoB,UACvC/8H,KAAKkyI,iBAAmBlyI,KAAK+8H,oBAAoB,oBACjD/8H,KAAK+gI,gBAAkB/gI,KAAK+8H,oBAAoB,mBAChD/8H,KAAKmyI,iBAAmBnyI,KAAK+8H,oBAAoB,oBACjD/8H,KAAKoyI,iBAAmBpyI,KAAK+8H,oBAAoB,aACjD/8H,KAAK65D,WAAa75D,KAAK+8H,oBAAoB,cAC3C/8H,KAAK85D,SAAW95D,KAAK+8H,oBAAoB,YACzC/8H,KAAKqyI,aAAeryI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKsyI,iBAAmBtyI,KAAK+8H,oBAAoB,oBACjD/8H,KAAKuyI,oBAAsBvyI,KAAK+8H,oBAAoB,uBACpD/8H,KAAKwyI,0BAA4BxyI,KAAK+8H,oBAAoB,6BAC1D/8H,KAAKg6D,UAAYh6D,KAAK+8H,oBAAoB,aAC1C/8H,KAAK+lC,UAAY/lC,KAAK+8H,oBAAoB,aAC1C/8H,KAAK8vC,4BAA8B9vC,KAAK+8H,oBAAoB,+BAC5D/8H,KAAKw6D,yBAA2Bx6D,KAAK+8H,oBAAoB,6BAvF7D,kB,sGCHA,iBAEA,MAAanjG,UAAuB,EAAAkjG,aAOlC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKuG,KAAOvG,KAAK+8H,oBAAoB,QACrC/8H,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,YAb5C,oB,wGCFA,iBAEA,MAAa0V,UAAyB,EAAA3V,aAIpC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKy6B,IAAMz6B,KAAK+8H,oBAAoB,OACpC/8H,KAAK06B,cAAgB16B,KAAK+8H,oBAAoB,kBAPlD,sB,kHCDA,iBAEA,WAEA,MAAa2V,UAAoC,EAAA5V,aAuC/C99H,YAAY0C,G,QACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKmiB,YAAcniB,KAAK+8H,oBAAoB,eAC5C/8H,KAAKkxB,UAAYlxB,KAAK+8H,oBAAoB,aAC1C/8H,KAAK4gI,aAAe5gI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK2zB,UAAY3zB,KAAK+8H,oBAAoB,aAC1C/8H,KAAK2zC,QAAU3zC,KAAK+8H,oBAAoB,WACxC/8H,KAAK4wC,OAAS5wC,KAAK+8H,oBAAoB,UACvC/8H,KAAK6jC,OAAS7jC,KAAK+8H,oBAAoB,UACvC/8H,KAAKm1B,OAASn1B,KAAK+8H,oBAAoB,UACvC/8H,KAAK6gI,gBAA6D,QAA3C,EAAA7gI,KAAK+8H,oBAAoB,0BAAkB,SAClE/8H,KAAKoiB,iBAAmBpiB,KAAK+8H,oBAAoB,oBACjD/8H,KAAK8gI,SAAW9gI,KAAK+8H,oBAAoB,YACzC/8H,KAAK+gI,gBAAkB/gI,KAAK+8H,oBAAoB,mBAChD/8H,KAAK+vC,MAAQ/vC,KAAK+8H,oBAAoB,SACtC/8H,KAAKghI,eAAiBhhI,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK4pB,aAAe5pB,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,OACpC/8H,KAAKqiB,wBAA0BriB,KAAK+8H,oBAAoB,2BACxD/8H,KAAK+W,OAAS/W,KAAK+8H,oBAAoB,UACvC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAKihI,SAAWjhI,KAAK+8H,oBAAoB,YACzC/8H,KAAKsJ,WAAatJ,KAAK+8H,oBAAoB,cAC3C/8H,KAAKwuB,YAAc,IAAI,EAAAqN,eAAe77B,KAAK+8H,oBAAoB,gBAC/D/8H,KAAKwiB,sBAAwBxiB,KAAK+8H,oBAAoB,yBACtD/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKszB,WAAatzB,KAAK+8H,oBAAoB,cAC3C/8H,KAAK6zB,aAAe7zB,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK4mE,8BAAgC5mE,KAAK+8H,oBAAoB,iCAC9D/8H,KAAK2mE,2BAA6B3mE,KAAK+8H,oBAAoB,8BAC3D/8H,KAAKmyC,gBAAkBnyC,KAAK+8H,oBAAoB,mBAChD/8H,KAAKshC,oBAAqE,QAA/C,EAAAthC,KAAK+8H,oBAAoB,8BAAsB,SAC1E/8H,KAAKm1H,gBAAkBn1H,KAAK+8H,oBAAoB,mBAChD,MAAM4V,EAAsC3yI,KAAK+8H,oBAC/C,iCAEE4V,IACF3yI,KAAKunE,8BAAgC,IAAIx3D,KAAK4iI,IAEhD,MAAMC,EAAoC5yI,KAAK+8H,oBAC7C,+BAEE6V,IACF5yI,KAAKsnE,4BAA8B,IAAIv3D,KAAK6iI,IAE9C5yI,KAAKqnE,0BAA4BrnE,KAAK+8H,oBAAoB,8BAvF9D,iC,2HCPA,gBAEA,MAAa8V,UAA4C,EAAAH,4BACvD1zI,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKshC,qBAAsB,GAH/B,yC,+GCAA,iBAEA,WAEA,MAAawxG,UAAgC,EAAAhW,aAW3C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,OACpC/8H,KAAK+W,OAAS/W,KAAK+8H,oBAAoB,UACvC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAKwuB,YAAc,IAAI,EAAAqN,eAAe77B,KAAK+8H,oBAAoB,gBAC/D/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAK2zB,UAAY3zB,KAAK+8H,oBAAoB,cArB9C,6B,uGCNA,iBACA,UACA,WACA,WAEA,MAAaoU,UAAwB,EAAArU,aAmBnC99H,YAAY0C,G,QACVnC,MAAMmC,GALR,KAAAwZ,cAA+C,GAC/C,KAAA6B,UAAuC,GACvC,KAAAg2H,sBAA+D,GAI7D/yI,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK2C,MAAQ3C,KAAK+8H,oBAAoB,SACtC/8H,KAAKk3F,cAAgBl3F,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKykE,mBAAqBzkE,KAAK+8H,oBAAoB,sBACnD/8H,KAAKgzI,kBAAoBhzI,KAAK+8H,oBAAoB,WAClD/8H,KAAKizI,wBAA0BjzI,KAAK+8H,oBAAoB,2BACxD/8H,KAAKgqI,QAAUhqI,KAAK+8H,oBAAoB,WACxC/8H,KAAK+wI,iBAAmB/wI,KAAK+8H,oBAAoB,oBACjD/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,OACpC/8H,KAAKg2B,WAAah2B,KAAK+8H,oBAAoB,cAC3C/8H,KAAKkzI,cAAgBlzI,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKszF,mBAAmE,QAA9C,EAAAtzF,KAAK+8H,oBAAoB,6BAAqB,SACxE/8H,KAAK62B,iBAA+D,QAA5C,EAAA72B,KAAK+8H,oBAAoB,2BAAmB,SAEpE,MAAM7hH,EAAgBlb,KAAK+8H,oBAAoB,iBAC1B,MAAjB7hH,IACFlb,KAAKkb,cAAgBA,EAAc1U,KAAKoa,GAAW,IAAI,EAAA8xH,4BAA4B9xH,MAErF,MAAM7D,EAAY/c,KAAK+8H,oBAAoB,aAC1B,MAAbhgH,IACF/c,KAAK+c,UAAYA,EAAUvW,KAAKoa,GAAW,IAAI,EAAAkyH,wBAAwBlyH,MAEzE,MAAMmyH,EAAwB/yI,KAAK+8H,oBAAoB,yBAC1B,MAAzBgW,IACF/yI,KAAK+yI,sBAAwBA,EAAsBvsI,KAChDoa,GAAW,IAAI,EAAAiyH,oCAAoCjyH,OA/C5D,qB,sKCLA,iBAEA,MAAauyH,UAAqC,EAAArW,aAShD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKszB,WAAatzB,KAAK+8H,oBAAoB,cAC3C/8H,KAAKmB,eAAiBnB,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,OACpC/8H,KAAKqjC,SAAWrjC,KAAK+8H,oBAAoB,YACzC/8H,KAAKusI,aAAevsI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKonC,aAAepnC,KAAK+8H,oBAAoB,iBAjBjD,iCAqBA,gEAAqEoW,EAGnEn0I,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuB,iBAAmBvB,KAAK+8H,oBAAoB,uB,wGC5BrD,iBAEA,MAAaqW,UAAyB,EAAAtW,aAMpC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK+jC,aAAe/jC,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKgkC,aAAehkC,KAAK+8H,oBAAoB,iBAXjD,sB,yHCFA,iBAEA,MAAasW,UAA0C,EAAAzC,uCAAvD,uC,gHCFA,iBAEA,MAAa0C,UAAiC,EAAAxW,aAI5C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAK8C,MAAQ9C,KAAK+8H,oBAAoB,UAP1C,8B,6ICAA,iBACA,WAEA,MAAawW,UAA6B,EAAAzW,aAOxC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAK+W,OAAS/W,KAAK+8H,oBAAoB,UACvC/8H,KAAKwuB,YAAc,IAAI,EAAAqN,eAAe77B,KAAK+8H,oBAAoB,iBAbnE,yBAiBA,gDAAqDwW,EAInDv0I,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK2C,MAAQ3C,KAAK+8H,oBAAoB,Y,iHC7B1C,iBAEA,MAAaoP,UAAkC,EAAArP,aAK7C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKif,SAAWjf,KAAK+8H,oBAAoB,YACzC/8H,KAAKkf,cAAgBlf,KAAK+8H,oBAAoB,kBATlD,+B,0GCDA,iBACA,WAEA,WAEA,MAAayW,UAA2B,EAAA1W,aAStC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QAErC,MAAMjvH,EAAO9N,KAAK+8H,oBAAoB,QAC1B,MAARjvH,IACF9N,KAAK8N,KAAO,IAAI,EAAAowH,YAAYpwH,IAG9B,MAAMunC,EAAOr1C,KAAK+8H,oBAAoB,QAC1B,MAAR1nF,IACFr1C,KAAKq1C,KAAO,IAAI,EAAA2oF,YAAY3oF,IAG9Br1C,KAAKy8C,eAAiBz8C,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK08C,kBAAoB18C,KAAK+8H,oBAAoB,sBA1BtD,wB,oHCNA,iBAEA,MAAa0W,UAAqC,EAAA3W,aAGhD99H,YAAY0C,GACVnC,MAAMmC,GAHR,KAAAvB,GAAa,KACb,KAAAsN,IAAc,KAGZzN,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKyN,IAAMzN,KAAK+8H,oBAAoB,QANxC,kC,kHCAA,iBACA,WAEA,MAAa2W,UAAmC,EAAA5W,aAI9C99H,YAAY0C,GACVnC,MAAMmC,GAFR,KAAA+L,IAAc,KAGZzN,KAAKoqI,eAAiBpqI,KAAK+8H,oBAAoB,kBAC/C,MAAM/+E,EAAeh+C,KAAK+8H,oBAAoB,gBAC9C/8H,KAAKg+C,aAA+B,MAAhBA,EAAuB,KAAO,IAAI,EAAA21F,aAAa31F,GACnEh+C,KAAKyN,IAAMzN,KAAK+8H,oBAAoB,QATxC,gC,oGCJA,iBACA,WAEA,WAEA,MAAa4W,UAAqB,EAAA7W,aAkBhC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKu3F,SAAWv3F,KAAK+8H,oBAAoB,YACzC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,QACrC/8H,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKyxG,MAAQzxG,KAAK+8H,oBAAoB,SACtC/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,OACpC/8H,KAAKkhI,eAAiBlhI,KAAK+8H,oBAAoB,kBAC/C/8H,KAAKmhI,YAAcnhI,KAAK+8H,oBAAoB,eAC5C/8H,KAAKonC,aAAepnC,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKy8C,eAAiBz8C,KAAK+8H,oBAAoB,kBAC/C/8H,KAAK03F,aAAe13F,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK44C,SAAW54C,KAAK+8H,oBAAoB,YACzC/8H,KAAK0pE,QAAU1pE,KAAK+8H,oBAAoB,cAAe,EACvD/8H,KAAKu8C,UAAYv8C,KAAK+8H,oBAAoB,eAAgB,EAE1D,MAAMjvH,EAAO9N,KAAK+8H,oBAAoB,QAC1B,MAARjvH,IACF9N,KAAK8N,KAAO,IAAI,EAAAowH,YAAYpwH,IAG9B,MAAMunC,EAAOr1C,KAAK+8H,oBAAoB,QAC1B,MAAR1nF,IACFr1C,KAAKq1C,KAAO,IAAI,EAAA2oF,YAAY3oF,KA1ClC,kB,8GCNA,iBAEA,MAAau+F,UAA+B,EAAA9W,aAG1C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKD,MAAQC,KAAK+8H,oBAAoB,UAL1C,4B,yNCFA,iBAEA,MAAa8W,UAA6B,EAAA/W,aAUxC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKywI,YAAczwI,KAAK+8H,oBAAoB,eAC5C/8H,KAAK0vC,UAAY1vC,KAAK+8H,oBAAoB,aAC1C/8H,KAAK4pB,aAAe5pB,KAAK+8H,oBAAoB,gBAC7C/8H,KAAKkqC,QAAUlqC,KAAK+8H,oBAAoB,WACxC/8H,KAAKqvC,WAAarvC,KAAK+8H,oBAAoB,cAC3C/8H,KAAK8wE,mBAAqB9wE,KAAK+8H,oBAAoB,sBACnD,MAAMztF,EAAetvC,KAAK+8H,oBAAoB,gBACxCttF,EAAkBzvC,KAAK+8H,oBAAoB,mBACjD/8H,KAAKsvC,aAA+B,MAAhBA,EAAuB,KAAO,IAAIohG,EAA4BphG,GAClFtvC,KAAKyvC,gBACgB,MAAnBA,EACI,KACA,IAAIkhG,EAA2ClhG,IAxBzD,yBA4BA,MAAaihG,UAAoC,EAAA5T,aAW/C99H,YAAY0C,GACVnC,MAAMmC,GAHR,KAAAooC,MAA2C,GAIzC9pC,KAAK8zI,aAAe9zI,KAAK+8H,oBAAoB,kBAC7C/8H,KAAK8zI,aAAe9zI,KAAK+8H,oBAAoB,gBAC7C/8H,KAAK+zI,gBAAkB/zI,KAAK+8H,oBAAoB,mBAChD/8H,KAAKg0I,cAAgBh0I,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKi0I,cAAgBj0I,KAAK+8H,oBAAoB,iBAC9C/8H,KAAKwvC,gBAAkBxvC,KAAK+8H,oBAAoB,mBAChD/8H,KAAK+W,OAAS/W,KAAK+8H,oBAAoB,UACvC/8H,KAAKuvC,UAAYvvC,KAAK+8H,oBAAoB,aAC1C,MAAMjzF,EAAQ9pC,KAAK+8H,oBAAoB,SAC1B,MAATjzF,IACF9pC,KAAK8pC,MAAQA,EAAMtjC,KAAK4R,GAAW,IAAI87H,EAAgC97H,OAvB7E,gCA4BA,MAAa87H,UAAwC,EAAApX,aAOnD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAK0tD,OAAS1tD,KAAK+8H,oBAAoB,UACvC/8H,KAAKm0I,SAAWn0I,KAAK+8H,oBAAoB,YACzC/8H,KAAKgmC,SAAWhmC,KAAK+8H,oBAAoB,YACzC/8H,KAAKiwC,0BAA4BjwC,KAAK+8H,oBAAoB,8BAb9D,oCAiBA,MAAa4T,UAAmD,EAAA7T,aAI9D99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKgV,KAAOhV,KAAK+8H,oBAAoB,QACrC/8H,KAAK0tD,OAAS1tD,KAAK+8H,oBAAoB,WAP3C,gD,oGC3EA,iBACA,WACA,WACA,WACA,WACA,WACA,WACA,WAEA,MAAaqX,UAAqB,EAAAtX,aAShC99H,YAAY0C,GACVnC,MAAMmC,GARR,KAAA6wD,QAA4B,GAC5B,KAAAxuC,YAA2C,GAC3C,KAAA6J,QAA4B,GAE5B,KAAAnrB,SAA8B,GAC9B,KAAAkwD,MAAwB,GAKtB,MAAM2R,EAAUtkE,KAAK+8H,oBAAoB,WAC1B,MAAXz4D,IACFtkE,KAAKskE,QAAU,IAAI,EAAA6sE,gBAAgB7sE,IAGrC,MAAM/R,EAAUvyD,KAAK+8H,oBAAoB,WAC1B,MAAXxqE,IACFvyD,KAAKuyD,QAAUA,EAAQ/rD,KAAKwvC,GAAW,IAAI,EAAAm3F,eAAen3F,MAG5D,MAAMjyB,EAAc/jB,KAAK+8H,oBAAoB,eAC1B,MAAfh5G,IACF/jB,KAAK+jB,YAAcA,EAAYvd,KAAKiU,GAAW,IAAI,EAAA45H,0BAA0B55H,MAG/E,MAAMmT,EAAU5tB,KAAK+8H,oBAAoB,WAC1B,MAAXnvG,IACF5tB,KAAK4tB,QAAUA,EAAQpnB,KAAKiU,GAAW,IAAI,EAAA6vH,eAAe7vH,MAG5D,MAAMi6C,EAAU10D,KAAK+8H,oBAAoB,WAC1B,MAAXroE,IACF10D,KAAK00D,QAAU,IAAI,EAAA23E,gBAAgB33E,IAGrC,MAAMjyD,EAAWzC,KAAK+8H,oBAAoB,YAC1B,MAAZt6H,IACFzC,KAAKyC,SAAWA,EAAS+D,KAAKC,GAAW,IAAI,EAAAmzB,eAAenzB,MAG9D,MAAMksD,EAAQ3yD,KAAK+8H,oBAAoB,SAC1B,MAATpqE,IACF3yD,KAAK2yD,MAAQA,EAAMnsD,KAAKqU,GAAW,IAAI,EAAA84H,aAAa94H,OA5C1D,kB,uGCTA,iBAEA,MAAay5H,UAAwB,EAAAxX,aAUnC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAK2uD,MAAQ3uD,KAAK+8H,oBAAoB,eACtC/8H,KAAKu0I,UAAYv0I,KAAK+8H,oBAAoB,aAC1C/8H,KAAK4uD,MAAQ5uD,KAAK+8H,oBAAoB,SACtC/8H,KAAK6uD,MAAQ7uD,KAAK+8H,oBAAoB,SACtC/8H,KAAK8uD,KAAO9uD,KAAK+8H,oBAAoB,QACrC/8H,KAAKsuB,MAAQtuB,KAAK+8H,oBAAoB,SACtC/8H,KAAKuuD,WAAavuD,KAAK+8H,oBAAoB,cAC3C/8H,KAAKyuD,QAAUzuD,KAAK+8H,oBAAoB,YAnB5C,qB,uGCFA,iBAEA,MAAayX,UAAwB,EAAA1X,aAOnC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAKyuD,QAAUzuD,KAAK+8H,oBAAoB,WACxC/8H,KAAKsuB,MAAQtuB,KAAK+8H,oBAAoB,SACtC/8H,KAAKuuD,WAAavuD,KAAK+8H,oBAAoB,cAC3C/8H,KAAK4oE,KAAO5oE,KAAK+8H,oBAAoB,SAbzC,qB,sHCFA,iBAEA,MAAa0X,UAAuC,EAAA3X,aAIlD99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAKoC,IAAMpC,KAAK+8H,oBAAoB,QAPxC,oC,4GCFA,iBAEA,MAAa2X,UAA6B,EAAA5X,aAMxC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAKirE,KAAOjrE,KAAK+8H,oBAAoB,QACrC/8H,KAAK+qE,UAAY/qE,KAAK+8H,oBAAoB,aAC1C/8H,KAAK6qE,eAAiB7qE,KAAK+8H,oBAAoB,mBAXnD,0B,6GCFA,iBAEA,MAAa4X,UAA+B,EAAA7X,aAI1C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAK2C,MAAQ3C,KAAK+8H,oBAAoB,UAP1C,4B,iHCAA,iBAEA,MAAa6X,UAAkC,EAAA9X,aAI7C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAKqR,KAAOrR,KAAK+8H,oBAAoB,SAPzC,+B,gHCJA,iBAEA,MAAa8X,UAAiC,EAAA/X,aAG5C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKgsE,KAAOhsE,KAAK+8H,oBAAoB,SALzC,8B,mJCFA,iBAEA,WAEA,MAAa+X,UAAkC,EAAAhY,aAI7C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC,MAAM94F,EAAOjkC,KAAK+8H,oBAAoB,QACtC/8H,KAAKikC,KAAe,MAARA,EAAe,KAAOA,EAAKz9B,KAAKipE,GAAW,IAAIslE,EAAYtlE,MAR3E,8BAYA,MAAaslE,UAAoB,EAAAjY,aAK/B99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKU,KAAOV,KAAK+8H,oBAAoB,QACrC/8H,KAAKG,GAAKH,KAAK+8H,oBAAoB,MACnC/8H,KAAK2vE,SAAW3vE,KAAK+8H,oBAAoB,aAT7C,gBAaA,MAAaiY,UAA0B,EAAAlY,aAWrC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKi1I,YAAcj1I,KAAK+8H,oBAAoB,eAC5C/8H,KAAKk1I,uBAAyBl1I,KAAK+8H,oBAAoB,0BACvD/8H,KAAKgvE,UAAY,EAAAltE,MAAM47C,kBAAkB19C,KAAK+8H,oBAAoB,cAClE/8H,KAAKm1I,mBAAqBn1I,KAAK+8H,oBAAoB,sBAAsBv2H,KAAKiU,IAC5EA,EAAEta,GAAK,EAAA2B,MAAM47C,kBAAkBjjC,EAAEta,IAAIkC,OAC9BoY,KAETza,KAAKo1I,WAAap1I,KAAK+8H,oBAAoB,cAC3C/8H,KAAKq1I,iBAAmBr1I,KAAK+8H,oBAAoB,oBACjD/8H,KAAKs1I,GAAKt1I,KAAK+8H,oBAAoB,MACnC/8H,KAAKO,QAAUP,KAAK+8H,oBAAoB,WAExC,MAAMxoH,EAAOvU,KAAK+8H,oBAAoB,QACtCxoH,EAAKpU,GAAK,EAAA2B,MAAM47C,kBAAkBnpC,EAAKpU,IAEvCH,KAAKuU,KAAOA,GA5BhB,uB,gHC7BA,iBAEA,MAAaghI,UAAiC,EAAAzY,aAS5C99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKuiB,QAAUviB,KAAK+8H,oBAAoB,WACxC/8H,KAAK8vE,KAAO9vE,KAAK+8H,oBAAoB,QACrC/8H,KAAK+vE,KAAO/vE,KAAK+8H,oBAAoB,QACrC/8H,KAAKgwE,KAAOhwE,KAAK+8H,oBAAoB,QACrC/8H,KAAKiwE,KAAOjwE,KAAK+8H,oBAAoB,QACrC/8H,KAAKkwE,KAAOlwE,KAAK+8H,oBAAoB,QACrC/8H,KAAK4vE,IAAM5vE,KAAK+8H,oBAAoB,QAjBxC,8B,uGCFA,iBAEA,MAAayY,UAAwB,EAAA1Y,aAInC99H,YAAY0C,GACVnC,MAAMmC,GACN1B,KAAKiL,OAASjL,KAAK+8H,oBAAoB,UACvC/8H,KAAK6B,UAAY7B,KAAK+8H,oBAAoB,cAP9C,qB,oGCGA,uBAQE/9H,YAAYg5B,GAPZ,KAAA73B,GAAa,KACb,KAAAsN,IAAc,KACd,KAAAyrC,KAAe,KACf,KAAA+kF,SAAmB,KACnB,KAAA5oH,SAAmB,KACnB,KAAAjT,IAA0B,KAGnB41B,IAILh4B,KAAKG,GAAK63B,EAAE73B,GACZH,KAAKyN,IAAMuqB,EAAEvqB,IACbzN,KAAKk5C,KAAOlhB,EAAEkhB,KACdl5C,KAAKi+H,SAAWjmG,EAAEimG,UAGpB,eACE,IACE,GAAiB,MAAbj+H,KAAKk5C,KACP,OAAO/rB,SAASntB,KAAKk5C,KAAM,MAE7B,UAGF,OAAO,K,6kBChCX,iBACA,WAEA,WAEA,MAAa8rC,UAAiB,EAAAywD,SAc5Bz2I,cACEO,QAbF,KAAAszG,eAAyB,KAEzB,KAAAM,SAAmB,KAEnB,KAAAC,QAAkB,KAElB,KAAApnC,KAAe,KAEP,KAAA0pE,OAAiB,KACjB,KAAAC,QAAkB,KAClB,KAAAC,UAAoB,KAM5B,iBACE,OAAoB,MAAb51I,KAAKgsE,KAAe,IAAI6pE,OAAO71I,KAAKgsE,KAAKp7D,QAAU,KAG5D,mBACE,OAAsB,MAAf5Q,KAAKouF,OAAiB,IAAIynD,OAAO71I,KAAKouF,OAAOx9E,QAAU,KAIhE,YACE,OAAO5Q,KAAK01I,OAEd,UAAU/6H,GACR3a,KAAK01I,OAAS/6H,EACd3a,KAAK41I,UAAY,KAInB,aACE,OAAO51I,KAAK21I,QAEd,WAAWh7H,GACT3a,KAAK21I,QAAUh7H,EACf3a,KAAK41I,UAAY,KAGnB,eACE,GAAsB,MAAlB51I,KAAK41I,YACP51I,KAAK41I,UAAY51I,KAAK6vF,MACH,MAAf7vF,KAAKouF,QAAkBpuF,KAAKouF,OAAOx9E,QAAU,GAAG,CAC5B,MAAlB5Q,KAAK41I,WAAwC,KAAnB51I,KAAK41I,UACjC51I,KAAK41I,WAAa,KAElB51I,KAAK41I,UAAY,GAInB,MAAM9sG,EACJ9oC,KAAKouF,OAAOx9E,QAAU,GAAgD,MAA3C5Q,KAAKouF,OAAOjI,MAAM,IAAI2uB,OAAO,WAAqB,EAAI,EACnF90G,KAAK41I,WAAa,IAAM51I,KAAKouF,OAAOpnF,OAAOhH,KAAKouF,OAAOx9E,OAASk4B,GAGpE,OAAO9oC,KAAK41I,UAGd,iBACE,IAAK51I,KAAKmzG,WAAanzG,KAAKozG,QAC1B,OAAO,KAGT,IAAI0iC,EAAuB,MAAjB91I,KAAKmzG,UAAoB,IAAMnzG,KAAKmzG,UAAUv7F,OAAO,GAAK,KAEpE,OADAk+H,GAAO,OAAyB,MAAhB91I,KAAKozG,QAAkBpzG,KAAK+1I,WAAW/1I,KAAKozG,SAAW,QAChE0iC,EAGDC,WAAWx5H,GACjB,OAAuB,IAAhBA,EAAK3L,OAAe,KAAO2L,EAAOA,GAxE3C,GADC,EAAAumE,kBAAkB,eAASkzD,gB,8DAG5B,GADC,EAAAlzD,kBAAkB,eAASmzD,SAAU,mB,wDAGtC,GADC,EAAAnzD,kBAAkB,eAASozD,QAAS,kB,uDAGrC,GADC,EAAApzD,kBAAkB,eAASqzD,KAAM,gB,oDAoBlC,GADC,EAAArzD,kBAAkB,eAASszD,O,mFAU5B,GADC,EAAAtzD,kBAAkB,eAASsgC,Q,oFAnC9B,c,kGCLA,iBACA,WAKA,WAEA,WACA,WAEA,WAGA,mBAwBEpkH,YAAYyb,G,MAvBZ,KAAAta,GAAa,KACb,KAAAgB,eAAyB,KACzB,KAAAilB,SAAmB,KACnB,KAAA1lB,KAAe,KACf,KAAA+wG,MAAgB,KAChB,KAAApgG,KAAmB,KACnB,KAAA+X,UAAW,EACX,KAAA6rD,qBAAsB,EACtB,KAAA58D,MAAO,EACP,KAAAgiE,cAAe,EAEf,KAAA1hC,MAAQ,IAAI,EAAAksC,UACZ,KAAAI,SAAW,IAAI,EAAAC,aACf,KAAAH,KAAO,IAAI,EAAAC,SACX,KAAAG,WAAa,IAAI,EAAAC,eACjB,KAAAtL,YAAgC,KAChC,KAAAmI,OAAsB,KACtB,KAAA21B,gBAAyC,KACzC,KAAAluF,cAA0B,KAC1B,KAAA0d,aAAqB,KACrB,KAAAsC,YAAoB,KACpB,KAAAre,SAA+B,EAAAgtB,mBAAmBC,KAG3C79B,IAILza,KAAKG,GAAKsa,EAAEta,GACZH,KAAKmB,eAAiBsZ,EAAEtZ,eACxBnB,KAAKomB,SAAW3L,EAAE2L,SAClBpmB,KAAKopB,SAAW3O,EAAE2O,SAClBppB,KAAKi1E,oBAAsBx6D,EAAEw6D,oBAC7Bj1E,KAAKqY,KAAOoC,EAAEpC,KACdrY,KAAKq6E,aAAe5/D,EAAE4/D,aACtBr6E,KAAKqR,KAAOoJ,EAAEpJ,KACdrR,KAAK2iI,UAAYloH,EAAEkoH,UACnB3iI,KAAK0pB,cAAgBjP,EAAEiP,cACvB1pB,KAAKonC,aAAe3sB,EAAE2sB,aACtBpnC,KAAK0pC,YAAcjvB,EAAEivB,YAErB1pC,KAAKqrB,SAAqB,QAAV,EAAA5Q,EAAE4Q,gBAAQ,QAAI,EAAAgtB,mBAAmBC,MAGnD,WACE,OAAQt4C,KAAKqR,MACX,KAAK,EAAAs4B,WAAW+O,MACd,OAAO14C,KAAK24C,MACd,KAAK,EAAAhP,WAAWi6C,WACd,OAAO5jF,KAAKmlF,WACd,KAAK,EAAAx7C,WAAWwlB,KACd,OAAOnvD,KAAK+kF,KACd,KAAK,EAAAp7C,WAAWg6C,SACd,OAAO3jF,KAAKilF,SAKhB,OAAO,KAGT,eACE,OAAOjlF,KAAKypC,KAAK4sG,SAGnB,yBACE,OAAOr2I,KAAK43G,iBAAmB53G,KAAK43G,gBAAgBhnG,OAAS,EAG/D,qBACE,OAAO5Q,KAAK85E,aAAe95E,KAAK85E,YAAYlpE,OAAS,EAGvD,wBACE,GAAI5Q,KAAKs2I,eACP,IAAK,IAAIl+H,EAAI,EAAGA,EAAIpY,KAAK85E,YAAYlpE,OAAQwH,IAC3C,GAA+B,MAA3BpY,KAAK85E,YAAY1hE,GAAGhW,IACtB,OAAO,EAIb,OAAO,EAGT,gBACE,OAAOpC,KAAKiiF,QAAUjiF,KAAKiiF,OAAOrxE,OAAS,EAG7C,kCACE,OAAI5Q,KAAKqR,OAAS,EAAAs4B,WAAW+O,OAAuB,MAAd14C,KAAK24C,OAET,MAAvB34C,KAAK24C,MAAMC,UAA4C,KAAxB54C,KAAK24C,MAAMC,SAD5C,KAIF54C,KAAK24C,MAAMykF,qBAGpB,gBACE,OAA2B,MAApBp9H,KAAK0pC,YAGd,yBACE,OAAO1pC,KAAKypC,KAAK03C,mBAGnBo1D,iBAAiBp2I,G,MACf,MAAM2iF,EAA2C,QAAvB,EAAA9iF,KAAKmhF,0BAAkB,eAAE3qE,IAAIrW,GACvD,GAAyB,MAArB2iF,EACF,OAAO,KAGI9iF,KAAKypC,KAClB,OAAOzpC,KAAKypC,KAAKq5C,EAAkB8xC,aAGrC4hB,mBAAmBr2I,G,MACjB,OAAsC,QAA/B,EAAAH,KAAKmhF,mBAAmB3qE,IAAIrW,UAAG,eAAE4iF,W,sGCnI5C,iBAMA,uBAQE/jF,YAAYyb,GAPZ,KAAAta,GAAa,KACb,KAAAgB,eAAyB,KACzB,KAAAT,KAAe,KACf,KAAA+wB,WAAqB,KACrB,KAAAxS,SAAoB,KACpB,KAAAC,cAAyB,KAGlBzE,IAILza,KAAKG,GAAKsa,EAAEta,GACZH,KAAKmB,eAAiBsZ,EAAEtZ,eACxBnB,KAAKyxB,WAAahX,EAAEgX,WAChBhX,aAAa,EAAAwK,aACfjlB,KAAKif,SAAWxE,EAAEwE,SAClBjf,KAAKkf,cAAgBzE,EAAEyE,mB,+FCtB7B,kBAaElgB,YAAYuH,GACVvG,KAAKqN,QAAU9G,EAAK8G,QACpBrN,KAAK2U,qBAAuBpO,EAAKoO,qBACjC3U,KAAK4U,QAAUrO,EAAKqO,QACpB5U,KAAK6U,QAAUtO,EAAKsO,QACpB7U,KAAKiL,OAAS1E,EAAK0E,OACnBjL,KAAKyU,SAAWlO,EAAKkO,SACrBzU,KAAK+U,UAAYxO,EAAKwO,UACtB/U,KAAKgV,KAAOzO,EAAKyO,KACjBhV,KAAKiV,GAAK1O,EAAK0O,GACfjV,KAAKqR,KAAO9K,EAAK8K,KACjBrR,KAAK8U,eAAiBvO,EAAKuO,kB,+FCpB/B,kBASE9V,YAAYg3C,GARZ,KAAAt1C,KAAe,KACf,KAAAia,MAAgB,KAChB,KAAAtJ,KAAkB,KAClB,KAAA8wE,UAAW,EACX,KAAAK,WAAY,EACZ,KAAAi0D,WAAY,EACZ,KAAAr0D,SAAyB,KAGlBpsC,IAILh2C,KAAKqR,KAAO2kC,EAAE3kC,KACdrR,KAAKoiF,SAAWpsC,EAAEosC,UAGpB,kBACE,OAAqB,MAAdpiF,KAAK2a,MAAgB,WAAa,Q,gGCpB7C,mBAKE3b,YAAYg3C,GAJZ,KAAA71C,GAAa,KACb,KAAAO,KAAe,KACf,KAAA0mC,aAAqB,KAGd4O,IAILh2C,KAAKG,GAAK61C,EAAE71C,GACZH,KAAKonC,aAAe4O,EAAE5O,iB,ilBChB1B,iBACA,WACA,WAEA,WAEA,MAAa89C,UAAqB,EAAAuwD,SAsChCz2I,cACEO,QArCF,KAAA0O,MAAgB,KAEhB,KAAAmoG,WAAqB,KAErB,KAAAyF,SAAmB,KAEnB,KAAAgH,SAAmB,KAEnB,KAAAC,SAAmB,KAEnB,KAAAh0D,KAAe,KAEf,KAAAxgC,MAAgB,KAEhB,KAAAigC,WAAqB,KAErB,KAAAE,QAAkB,KAElB,KAAAm0D,QAAkB,KAElB,KAAAjgH,MAAgB,KAEhB,KAAAg5G,MAAgB,KAEhB,KAAAN,IAAc,KAEd,KAAAzjE,SAAmB,KAEnB,KAAAwjE,eAAyB,KAEzB,KAAAD,cAAwB,KAEhB,KAAAu7B,WAAqB,KACrB,KAAAC,UAAoB,KACpB,KAAAf,UAAoB,KAO5B,gBACE,OAAO51I,KAAK02I,WAEd,cAAc/7H,GACZ3a,KAAK02I,WAAa/7H,EAClB3a,KAAK41I,UAAY,KAInB,eACE,OAAO51I,KAAK22I,UAEd,aAAah8H,GACX3a,KAAK22I,UAAYh8H,EACjB3a,KAAK41I,UAAY,KAGnB,eAcE,OAbsB,MAAlB51I,KAAK41I,WAAwC,MAAlB51I,KAAKk2G,WAAsC,MAAjBl2G,KAAKm2G,WAC5Dn2G,KAAK41I,UAAY,GACK,MAAlB51I,KAAKk2G,YACPl2G,KAAK41I,UAAY51I,KAAKk2G,WAEH,MAAjBl2G,KAAKm2G,WACgB,KAAnBn2G,KAAK41I,YACP51I,KAAK41I,WAAa,KAEpB51I,KAAK41I,WAAa51I,KAAKm2G,WAIpBn2G,KAAK41I,UAId,eACE,GACgB,MAAd51I,KAAKiO,OACa,MAAlBjO,KAAKk2G,WACc,MAAnBl2G,KAAKo2G,YACY,MAAjBp2G,KAAKm2G,SACL,CACA,IAAIz1G,EAAO,GAaX,OAZkB,MAAdV,KAAKiO,QACPvN,GAAQV,KAAKiO,MAAQ,KAED,MAAlBjO,KAAKk2G,YACPx1G,GAAQV,KAAKk2G,UAAY,KAEJ,MAAnBl2G,KAAKo2G,aACP11G,GAAQV,KAAKo2G,WAAa,KAEP,MAAjBp2G,KAAKm2G,WACPz1G,GAAQV,KAAKm2G,UAERz1G,EAAKuG,OAGd,OAAO,KAGT,kBACE,IAAI60G,EAAU97G,KAAK67G,SAanB,OAZK,EAAA/5G,MAAMm7C,mBAAmBj9C,KAAK6iH,YAC5B,EAAA/gH,MAAMm7C,mBAAmB6+D,KAC5BA,GAAW,MAEbA,GAAW97G,KAAK6iH,UAEb,EAAA/gH,MAAMm7C,mBAAmBj9C,KAAK8iH,YAC5B,EAAAhhH,MAAMm7C,mBAAmB6+D,KAC5BA,GAAW,MAEbA,GAAW97G,KAAK8iH,UAEXhH,EAGT,uBACE,GAAiB,MAAb97G,KAAK8uD,MAA8B,MAAd9uD,KAAKsuB,OAAoC,MAAnBtuB,KAAKuuD,WAClD,OAAO,KAET,MAAMO,EAAO9uD,KAAK8uD,MAAQ,IACpBxgC,EAAQtuB,KAAKsuB,MACbigC,EAAavuD,KAAKuuD,YAAc,IACtC,IAAIqoF,EAAe9nF,EAKnB,OAJK,EAAAhtD,MAAMm7C,mBAAmB3uB,KAC5BsoH,GAAgB,KAAOtoH,GAEzBsoH,GAAgB,KAAOroF,EAChBqoF,GAnIT,GADC,EAAA9zD,kBAAkB,mBAAS4+B,O,qDAG5B,GADC,EAAA5+B,kBAAkB,mBAAS+zD,Y,0DAG5B,GADC,EAAA/zD,kBAAkB,mBAASg0D,U,wDAG5B,GADC,EAAAh0D,kBAAkB,mBAASi0D,U,wDAG5B,GADC,EAAAj0D,kBAAkB,mBAASk0D,U,wDAG5B,GADC,EAAAl0D,kBAAkB,mBAASm0D,KAAM,Y,oDAGlC,GADC,EAAAn0D,kBAAkB,mBAASygC,MAAO,iB,qDAGnC,GADC,EAAAzgC,kBAAkB,mBAASo0D,WAAY,iB,0DAGxC,GADC,EAAAp0D,kBAAkB,mBAAS0gC,S,uDAG5B,GADC,EAAA1gC,kBAAkB,mBAASwgC,S,uDAG5B,GADC,EAAAxgC,kBAAkB,mBAASpyB,O,qDAG5B,GADC,EAAAoyB,kBAAkB,mBAAS+2B,O,qDAG5B,GADC,EAAA/2B,kBAAkB,mBAASq0D,K,mDAG5B,GADC,EAAAr0D,kBAAkB,mBAAS42B,U,wDAG5B,GADC,EAAA52B,kBAAkB,mBAASs0D,gB,8DAG5B,GADC,EAAAt0D,kBAAkB,mBAASu0D,e,6DAY5B,GADC,EAAAv0D,kBAAkB,mBAASw0D,W,uFAU5B,GADC,EAAAx0D,kBAAkB,mBAASy0D,U,sFA2B5B,GADC,EAAAz0D,kBAAkB,mBAAS00D,U,gFA7E9B,kB,8FCFA,oB,mGCJA,iBACA,WAKMC,EAAqB,CACzB,WACA,UACA,SACA,SACA,UACA,SACA,SAEA,SACA,SACA,YACA,YACA,iBAGF,qBASEz4I,YAAYoY,GARZ,KAAA+uE,MAAsB,KAEd,KAAAuxD,KAAe,KACf,KAAAC,QAAkB,KAClB,KAAAC,UAAoB,KACpB,KAAAC,MAAgB,KAChB,KAAAC,WAAsB,KAGvB1gI,IAILpX,KAAKmmF,MAAQ/uE,EAAE+uE,OAGjB,UACE,OAAOnmF,KAAK03I,KAEd,QAAQ/8H,GACN3a,KAAK03I,KAAO/8H,EACZ3a,KAAK23I,QAAU,KACf33I,KAAK83I,WAAa,KAGpB,aAQE,OAPoB,MAAhB93I,KAAK23I,SAA+B,MAAZ33I,KAAKw5C,MAC/Bx5C,KAAK23I,QAAU,EAAA71I,MAAM43C,UAAU15C,KAAKw5C,KACf,KAAjBx5C,KAAK23I,UACP33I,KAAK23I,QAAU,OAIZ33I,KAAK23I,QAGd,eACE,OAAI33I,KAAKmmF,QAAU,EAAAlC,aAAaI,kBACvB,MAEa,MAAlBrkF,KAAK43I,WAAiC,MAAZ53I,KAAKw5C,MACjCx5C,KAAK43I,UAAY,EAAA91I,MAAM8tF,YAAY5vF,KAAKw5C,KACjB,KAAnBx5C,KAAK43I,YACP53I,KAAK43I,UAAY,OAId53I,KAAK43I,WAGd,WACE,OAAI53I,KAAKmmF,QAAU,EAAAlC,aAAaI,kBACvB,MAES,MAAdrkF,KAAK63I,OAA6B,MAAZ73I,KAAKw5C,MAC7Bx5C,KAAK63I,MAAQ,EAAA/1I,MAAMi2I,QAAQ/3I,KAAKw5C,KACb,KAAfx5C,KAAK63I,QACP73I,KAAK63I,MAAQ,OAIV73I,KAAK63I,OAGd,oBACE,OAAwB,MAAjB73I,KAAKy0G,SAAmBz0G,KAAKy0G,SAAWz0G,KAAKw5C,IAGtD,gBACE,OAAoB,MAAbx5C,KAAKirE,KAAejrE,KAAKirE,KAAOjrE,KAAKw5C,IAG9C,gBACE,OACc,MAAZx5C,KAAKw5C,MAC4B,IAAhCx5C,KAAKw5C,IAAIz1C,QAAQ,YACiB,IAAjC/D,KAAKw5C,IAAIz1C,QAAQ,aAChB/D,KAAKw5C,IAAIz1C,QAAQ,OAAS,GAAK,EAAAjC,MAAM+5H,eAAe9mB,KAAK/0G,KAAKw5C,MAIrE,gBACE,GAAuB,MAAnBx5C,KAAK83I,WACP,OAAO93I,KAAK83I,WAEd,GAAgB,MAAZ93I,KAAKw5C,KAAex5C,KAAKmmF,QAAU,EAAAlC,aAAaI,kBAAmB,CACrE,MAAM7qC,EAAMx5C,KAAK6N,UACjB,IAAK,IAAIuK,EAAI,EAAGA,EAAIq/H,EAAmB7mI,OAAQwH,IAC7C,GAA2C,IAAvCohC,EAAIz1C,QAAQ0zI,EAAmBr/H,IAEjC,OADApY,KAAK83I,YAAa,EACX93I,KAAK83I,WAKlB,OADA93I,KAAK83I,YAAa,EACX93I,KAAK83I,WAGd,gBACE,OAAO93I,KAAKw5C,IAAIz1C,QAAQ,OAAS,GAAK,EAAAjC,MAAM+5H,eAAe9mB,KAAK/0G,KAAKw5C,KACjE,UAAYx5C,KAAKw5C,IACjBx5C,KAAKw5C,O,8kBC5Hb,iBACA,WACA,WAGA,WAGA,MAAaqrC,UAAkB,EAAA4wD,SAW7Bz2I,YAAY0hH,GACVnhH,QAVF,KAAAq4C,SAAmB,KAEnB,KAAAgB,SAAmB,KAEnB,KAAAwkF,qBAA8B,KAC9B,KAAA/jF,KAAe,KACf,KAAAE,KAAuB,KACvB,KAAA8jF,mBAA8B,KAIvB3c,IAIL1gH,KAAKo9H,qBAAuB1c,EAAE0c,qBAC9Bp9H,KAAKq9H,mBAAqB3c,EAAE2c,oBAG9B,UACE,OAAOr9H,KAAKs5C,QAAUt5C,KAAKu5C,KAAK,GAAGC,IAAM,KAG3C,qBACE,OAAwB,MAAjBx5C,KAAK44C,SAAmB,WAAa,KAG9C,eACE,OAAO54C,KAAK43C,SAGd,gBACE,OAAO53C,KAAKs5C,SAAWt5C,KAAKu5C,KAAK9mC,MAAM2E,GAAMA,EAAEq+D,YAGjD,cACE,OAAQ,EAAA3zE,MAAMm7C,mBAAmBj9C,KAAKq5C,MAGxC,gBACE,GAAIr5C,KAAKs5C,QAAS,CAChB,MAAME,EAAMx5C,KAAKu5C,KAAK54B,MAAMvJ,GAAMA,EAAEq+D,YACpC,GAAW,MAAPj8B,EACF,OAAOA,EAAI3rC,UAGf,OAAO,KAGT,cACE,OAAoB,MAAb7N,KAAKu5C,MAAgBv5C,KAAKu5C,KAAK3oC,OAAS,GAlDjD,GADC,EAAAkyE,kBAAkB,gBAAS42B,U,wDAG5B,GADC,EAAA52B,kBAAkB,gBAAS0D,U,wDAH9B,e,yGCJA,4BAIExnF,YAAYsoH,GAHZ,KAAA1uE,SAAmB,KACnB,KAAA4uE,aAAqB,KAGdF,IAILtnH,KAAKwnH,aAAeF,EAAGE,iB,sGCV3B,iBAEA,MAAapiC,UAAuB,EAAAqwD,SAGlCz2I,YAAYshH,GACV/gH,QAHF,KAAA8R,KAAuB,KAIhBivG,IAILtgH,KAAKqR,KAAOivG,EAAEjvG,MAGhB,eACE,OAAO,MAbX,oB,sGCFA,iBACA,UAGA,uBASErS,YAAY6b,GARZ,KAAA1a,GAAa,KACb,KAAAO,KAAe,KACf,KAAA2Q,KAAiB,KACjB,KAAAvD,KAAO,IAAI,EAAAgqF,aACX,KAAAziD,KAAO,IAAI,EAAAwiD,aACX,KAAAp7C,eAAuB,KACvB,KAAAC,kBAA4B,KAGrB7hC,IAIL7a,KAAKG,GAAK0a,EAAE1a,GACZH,KAAKqR,KAAOwJ,EAAExJ,KACdrR,KAAKy8C,eAAiB5hC,EAAE4hC,eACxBz8C,KAAK08C,kBAAoB7hC,EAAE6hC,sB,kGCpB/B,qBAME19C,YAAYg3C,GALZ,KAAA71C,GAAa,KACb,KAAA+4C,KAAe,KACf,KAAA+kF,SAAmB,KACnB,KAAA5oH,SAAmB,KAGZ2gC,IAILh2C,KAAKG,GAAK61C,EAAE71C,GACZH,KAAKk5C,KAAOlD,EAAEkD,KACdl5C,KAAKi+H,SAAWjoF,EAAEioF,UAGpB,eACE,IACE,GAAiB,MAAbj+H,KAAKk5C,KACP,OAAO/rB,SAASntB,KAAKk5C,KAAM,MAE7B,UAGF,OAAO,K,iGCxBX,qBAIEl6C,YAAYsB,GAHZ,KAAAwN,KAAe,KAIRxN,IAILN,KAAKs+C,OAASh+C,EAAEg+C,QAGlB,iBACE,OAAoB,MAAbt+C,KAAK8N,KAAe,WAAa,Q,gGChB5C,iBAIA,WACA,UAGA,iBAmBE9O,YAAY6b,GAlBZ,KAAA1a,GAAa,KACb,KAAAo3F,SAAmB,KACnB,KAAA72F,KAAe,KACf,KAAA+wG,MAAgB,KAGhB,KAAApgG,KAAiB,KACjB,KAAAvD,KAAO,IAAI,EAAAgqF,aACX,KAAAziD,KAAO,IAAI,EAAAwiD,aACX,KAAAqpC,eAA0B,KAC1B,KAAAC,YAAc,EACd,KAAA/5F,aAAqB,KACrB,KAAAswD,aAAqB,KACrB,KAAAj7C,eAAuB,KACvB,KAAA7D,SAAmB,KACnB,KAAAkhB,UAAW,EACX,KAAAvd,WAAY,EAGL1hC,IAIL7a,KAAKG,GAAK0a,EAAE1a,GACZH,KAAKu3F,SAAW18E,EAAE08E,SAClBv3F,KAAKqR,KAAOwJ,EAAExJ,KACdrR,KAAKkhI,eAAiBrmH,EAAEqmH,eACxBlhI,KAAKmhI,YAActmH,EAAEsmH,YACrBnhI,KAAKonC,aAAevsB,EAAEusB,aACtBpnC,KAAK03F,aAAe78E,EAAE68E,aACtB13F,KAAKy8C,eAAiB5hC,EAAE4hC,eACxBz8C,KAAK85D,SAAWj/C,EAAEi/C,SAClB95D,KAAK44C,SAAW/9B,EAAE+9B,SAClB54C,KAAKu8C,UAAY1hC,EAAE0hC,WAGrB,gBACE,OAAO,EAAAz6C,MAAMgyF,mBAAmB9zF,KAAKoC,KAGvC,4BACE,OAA2B,MAAvBpC,KAAKkhI,gBAGFlhI,KAAKmhI,aAAenhI,KAAKkhI,eAGlC,cACE,OAA2B,MAAvBlhI,KAAKy8C,gBAGFz8C,KAAKy8C,gBAAkB,IAAI1sC,KAGpC,oBACE,OAAO/P,KAAK03F,cAAgB,IAAI3nF,Q,waC/DpC,iBACA,WAEA,WACA,WACA,WAIA,WAMA,WAEA,WA0BA,WAqEA,WACA,WACA,WACA,WACA,WACA,WACA,WAIA,WACA,WACA,WAMA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,WACA,UACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WAKA,SACA,WACA,WACA,WACA,WACA,WAIA,WACA,WACA,WACA,UAIA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YAIA,YACA,YAGA,mBAME/Q,YACU4M,EACA1M,EACAqE,EACAwG,EACAiuI,EACAC,EAA0B,MAL1B,KAAArsI,aAAAA,EACA,KAAA1M,qBAAAA,EACA,KAAAqE,mBAAAA,EACA,KAAAwG,aAAAA,EACA,KAAAiuI,eAAAA,EACA,KAAAC,gBAAAA,EATF,KAAAC,aAAc,EACd,KAAAC,iBAAkB,EAUxBn4I,KAAKkpI,OAAShqI,EAAqBq+E,YACnCv9E,KAAKogD,WAAapgD,KAAKkpI,OAAO5jI,WAC9BtF,KAAKk4I,YACHl4I,KAAKkpI,SAAW,EAAAlkF,WAAWmB,WAC3BnmD,KAAKkpI,SAAW,EAAAlkF,WAAWa,eAC3B7lD,KAAKkpI,SAAW,EAAAlkF,WAAWkB,aAC3BlmD,KAAKkpI,SAAW,EAAAlkF,WAAWc,gBAC3B9lD,KAAKkpI,SAAW,EAAAlkF,WAAWe,cAC3B/lD,KAAKkpI,SAAW,EAAAlkF,WAAWgB,eAC3BhmD,KAAKkpI,SAAW,EAAAlkF,WAAWoB,gBAC3BpmD,KAAKkpI,SAAW,EAAAlkF,WAAWiB,eAC7BjmD,KAAKm4I,gBACHn4I,KAAKkpI,SAAW,EAAAlkF,WAAWU,gBAC3B1lD,KAAKkpI,SAAW,EAAAlkF,WAAWW,cAC3B3lD,KAAKkpI,SAAW,EAAAlkF,WAAWY,aAKzBuwE,kBACJt2H,G,yCAEA,MAAMiuH,EAAU,IAAIsqB,QAAQ,CAC1B,eAAgB,mDAChBC,OAAQ,mBACR,cAAer4I,KAAKogD,aAEM,MAAxBpgD,KAAKi4I,iBACPnqB,EAAQ72G,IAAI,aAAcjX,KAAKi4I,iBAEjCp4I,EAAQypI,0BAA0Bxb,GAElC,MAAMwqB,EACJz4I,aAAmB,EAAA01H,gBACf11H,EAAQspI,kBACRtpI,EAAQspI,gBAAgBnpI,KAAKd,qBAAqBw+E,iBAElDh8E,QAAiB1B,KAAK25C,MAC1B,IAAIC,QAAQ55C,KAAKuD,mBAAmBq8F,iBAAmB,iBAAkB,CACvEnuF,KAAMzR,KAAKu4I,YAAYD,GACvBjpE,YAAarvE,KAAKw4I,iBAClBt7F,MAAO,WACP4wE,QAASA,EACTrhE,OAAQ,UAIZ,IAAI5S,EAAoB,KAKxB,GAJI75C,KAAKy4I,eAAe/2I,KACtBm4C,QAAqBn4C,EAASo4C,QAGZ,MAAhBD,EAAsB,CACxB,GAAwB,MAApBn4C,EAASqV,OACX,OAAO,IAAI,EAAAy/G,sBAAsB38E,GAC5B,GACe,MAApBn4C,EAASqV,QACT8iC,EAAa6+F,qBACbh8G,OAAOuH,KAAK4V,EAAa6+F,qBAAqB9nI,OAG9C,aADM5Q,KAAK4L,aAAa+sI,sBACjB,IAAI,EAAAviB,0BAA0Bv8E,GAChC,GACe,MAApBn4C,EAASqV,QACT8iC,EAAakzF,kBACbrwG,OAAOuH,KAAK4V,EAAakzF,kBAAkBn8H,OAE3C,OAAO,IAAI,EAAA0lH,wBAAwBz8E,GAIvC,OAAOlqC,QAAQ4oD,OAAO,IAAI,EAAAha,cAAc1E,EAAcn4C,EAASqV,QAAQ,OAGnE1L,uB,yCACJ,UACQrL,KAAK44I,gBACX,MAAO/1I,GACP,OAAO8M,QAAQ4oD,OAAO,UAMpBgM,a,yCACJ,MAAMpwD,QAAUnU,KAAK0E,KAAK,MAAO,oBAAqB,MAAM,GAAM,GAClE,OAAO,IAAI,EAAAysI,gBAAgBh9H,MAGvB08D,sB,yCACJ,MAAM18D,QAAUnU,KAAK0E,KAAK,MAAO,yBAA0B,MAAM,GAAM,GACvE,OAAO,IAAI,GAAAmvI,qBAAqB1/H,MAG5Bq0D,a,yCACJ,MAAMr0D,QAAUnU,KAAK0E,KAAK,MAAO,gBAAiB,MAAM,GAAM,GAC9D,OAAO,IAAI,GAAA4vI,gBAAgBngI,MAGvBuwD,WAAW7kE,G,yCACf,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,oBAAqB7E,GAAS,GAAM,GACrE,OAAO,IAAI,EAAAsxI,gBAAgBh9H,MAG7B+0D,WAAWrpE,GACT,OAAOG,KAAK0E,KAAK,MAAO,gBAAiB7E,GAAS,GAAM,GAGpDg5I,aAAah5I,G,yCACjB,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,qBACA7E,GACA,GACA,EACAG,KAAKd,qBAAqBmjE,QACtBriE,KAAKuD,mBAAmBq8F,iBACxB5/F,KAAKuD,mBAAmBu1I,aAE9B,OAAO,IAAI,EAAArG,iBAAiBt+H,MAG9B+8C,eAAerxD,GACb,OAAOG,KAAK0E,KAAK,OAAQ,wBAAyB7E,GAAS,GAAM,GAGnEkxD,UAAUlxD,GACR,OAAOG,KAAK0E,KAAK,OAAQ,kBAAmB7E,GAAS,GAAM,GAG7DqyD,aAAaryD,GACX,OAAOG,KAAK0E,KAAK,OAAQ,qBAAsB7E,GAAS,GAAM,GAGhEm9F,YAAYn9F,GACV,OAAOG,KAAK0E,KAAK,OAAQ,yBAA0B7E,GAAS,GAAM,GAGpEk5I,uBAAuBl5I,GACrB,OAAOG,KAAK0E,KAAK,OAAQ,kCAAmC7E,GAAS,GAAM,GAG7Eu0D,kBAAkBv0D,GAChB,OAAOG,KAAK0E,KAAK,OAAQ,2BAA4B7E,GAAS,GAAM,GAGtEwsD,cAAcxsD,GACZ,OAAOG,KAAK0E,KAAK,SAAU,YAAa7E,GAAS,GAAM,GAGnDm5I,yB,yCAEJ,aADgBh5I,KAAK0E,KAAK,MAAO,0BAA2B,MAAM,GAAM,MAI1E6pF,iBAAiB1uF,GACf,OAAOG,KAAK0E,KAAK,OAAQ,0BAA2B7E,GAAS,GAAO,GAGtE42F,aAAa52F,GACX,OAAOG,KAAK0E,KACV,OACA,qBACA7E,GACA,GACA,EACAG,KAAKd,qBAAqBmjE,QACtBriE,KAAKuD,mBAAmBq8F,iBACxB5/F,KAAKuD,mBAAmBu1I,aAI1B50E,YAAY39D,G,yCAChB,MAAM4N,QAAUnU,KAAK0E,KAAK,OAAQ,oBAAqB6B,GAAM,GAAM,GACnE,OAAO,IAAI,EAAA0qI,gBAAgB98H,MAGvB8kI,aAAap5I,G,yCACjB,OAAOG,KAAK0E,KAAK,OAAQ,sBAAuB7E,GAAS,GAAM,MAGjEkxE,uBACE,OAAO/wE,KAAK0E,KAAK,OAAQ,8BAA+B,MAAM,GAAM,GAGtEssE,oBACE,OAAOhxE,KAAK0E,KAAK,OAAQ,2BAA4B,MAAM,GAAM,GAG7DkrD,mBAAmB/vD,G,yCACvB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,oBAAqB7E,GAAS,GAAM,GACtE,OAAO,IAAI,EAAAoxI,gBAAgB98H,MAG7Bu6C,mBAAmB7uD,GACjB,OAAOG,KAAK0E,KAAK,OAAQ,oBAAqB7E,GAAS,GAAM,GAG/DmkE,mBAAmBz9D,GACjB,OAAOvG,KAAK0E,KAAK,OAAQ,oBAAqB6B,GAAM,GAAM,GAG5DuxH,gBAAgBj4H,GACd,OAAOG,KAAK0E,KAAK,OAAQ,iBAAkB7E,GAAS,GAAM,GAG5DizD,eAAejzD,GACb,OAAOG,KAAK0E,KAAK,OAAQ,gBAAiB7E,GAAS,GAAM,GAG3DwxE,yBACE,OAAOrxE,KAAK0E,KAAK,OAAQ,yBAA0B,MAAM,GAAM,GAGjEwG,4BAA4BrL,GAC1B,OAAOG,KAAK0E,KAAK,OAAQ,+BAAgC7E,GAAS,GAAO,GAG3EmxF,0BAA0BnxF,GACxB,OAAOG,KAAK0E,KAAK,OAAQ,4BAA6B7E,GAAS,GAAM,GAGvE0H,yBAAyB1H,GACvB,OAAOG,KAAK0E,KAAK,OAAQ,2BAA4B7E,GAAS,GAAO,GAGvE2L,8BAA8B3L,GAC5B,OAAOG,KAAK0E,KAAK,OAAQ,iCAAkC7E,GAAS,GAAO,GAG7E6xD,eAAe7xD,GACb,OAAOG,KAAK0E,KAAK,OAAQ,gBAAiB7E,GAAS,GAAM,GAGrD8iB,cAAcxhB,G,yCAClB,OAAOnB,KAAK0E,KAAK,SAAU,iBAAmBvD,EAAgB,MAAM,GAAM,MAGtE2+F,uB,yCACJ,OAAO9/F,KAAK0E,KAAK,MAAO,gCAAiC,MAAM,GAAM,MAGjEsgE,eAAe7kE,EAAYN,G,yCAC/B,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,oBAAqB7E,GAAS,GAAM,GACtE,OAAO,IAAI,EAAAoqI,eAAe91H,MAGtBgxD,qBACJhlE,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,2BAA4B7E,GAAS,GAAM,GAC7E,OAAO,IAAI,EAAAoqI,eAAe91H,MAG5BovF,sBAAsB1jG,GACpB,OAAOG,KAAK0E,KAAK,MAAO,iCAAkC7E,GAAS,GAAM,GAG3Eq5I,wBACE,OAAOl5I,KAAK0E,KAAK,OAAQ,wBAAyB,MAAM,GAAM,GAGhEy0I,qBAAqBt5I,GACnB,OAAOG,KAAK0E,KAAK,OAAQ,uBAAwB7E,GAAS,GAAM,GAGlEu5I,4BACE,OAAOp5I,KAAK0E,KAAK,OAAQ,qCAAsC,MAAM,GAAM,GAKvE20I,wB,yCACJ,MAAMllI,QAAUnU,KAAK0E,KAAK,MAAO,4BAA6B,MAAM,GAAM,GAC1E,OAAO,IAAI,EAAAgmI,uBAAuBv2H,MAG9BupD,wB,yCACJ,MAAMvpD,QAAUnU,KAAK0E,KAAK,MAAO,mCAAoC,MAAM,GAAM,GACjF,OAAO,IAAI,EAAAmmI,uBAAuB12H,MAK9BmlI,UAAUn5I,G,yCACd,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAI,MAAM,GAAM,GAC/D,OAAO,IAAI,EAAAgtI,eAAeh5H,MAGtBolI,WAAW15I,G,yCACf,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,WAAY7E,GAAS,GAAM,GAC7D,OAAO,IAAI,EAAAstI,eAAeh5H,MAGtBqlI,UAAUr5I,EAAYN,G,yCAC1B,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAIN,GAAS,GAAM,GAClE,OAAO,IAAI,EAAAstI,eAAeh5H,MAG5BslI,aAAat5I,GACX,OAAOH,KAAK0E,KAAK,SAAU,YAAcvE,EAAI,MAAM,GAAM,GAKrDu5I,QAAQv5I,G,yCACZ,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,UAAYvE,EAAI,MAAM,GAAM,GAC7D,OAAO,IAAI,GAAAwzI,aAAax/H,MAGpB8pC,eACJ99C,EACAN,EACA85I,G,yCAEA,MAGMxlI,QAAUnU,KAAK0E,KACnB,OACA,iBAAmBvE,EACnBN,GACA,GACA,EACA85I,GATuB7rB,IACvBA,EAAQ72G,IAAI,UAAW9W,MAWzB,OAAO,IAAI,EAAAqzI,mBAAmBr/H,MAG1B4oC,wBACJr4C,EACA7E,EACA85I,G,yCAEA,MAGMxlI,QAAUnU,KAAK0E,KACnB,OACA,UAAYA,EAAKvE,GAAK,gBAAkBuE,EAAK2wC,KAAKl1C,GAClDN,GACA,GACA,EACA85I,GATuB7rB,IACvBA,EAAQ72G,IAAI,UAAWvS,EAAKvE,OAW9B,OAAO,IAAI,GAAAszI,6BAA6Bt/H,MAGpCylI,W,yCACJ,MAAMzlI,QAAUnU,KAAK0E,KAAK,MAAO,SAAU,MAAM,GAAM,GACvD,OAAO,IAAI,EAAAmpI,aAAa15H,EAAG,GAAAw/H,iBAGvBkG,SAASh6I,G,yCACb,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,SAAU7E,GAAS,GAAM,GAC3D,OAAO,IAAI,GAAA8zI,aAAax/H,MAGpB2lI,iBAAiBj6I,G,yCACrB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,iBAAkB7E,GAAS,GAAM,GACnE,OAAO,IAAI,GAAA6zI,2BAA2Bv/H,MAGlC4lI,uBACJp9F,EACAq9F,G,yCAEA,MAAM7lI,QAAUnU,KAAK0E,KAAK,MAAO,UAAYi4C,EAAS,SAAWq9F,EAAQ,MAAM,GAAM,GACrF,OAAO,IAAI,GAAAtG,2BAA2Bv/H,MAGxC8lI,aAAat9F,EAAgBq9F,EAAgBzzI,GAC3C,OAAOvG,KAAK0E,KAAK,OAAQ,UAAYi4C,EAAS,SAAWq9F,EAAQzzI,GAAM,GAAM,GAOzE2zI,mBAAmB3zI,G,yCACvB,MAAM4N,QAAUnU,KAAK0E,KAAK,OAAQ,cAAe6B,GAAM,GAAM,GAC7D,OAAO,IAAI,GAAAotI,aAAax/H,MAGpBgmI,QAAQh6I,EAAYN,G,yCACxB,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,UAAYvE,EAAIN,GAAS,GAAM,GAChE,OAAO,IAAI,GAAA8zI,aAAax/H,MAGpBimI,sBAAsBj6I,G,yCAC1B,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,UAAYvE,EAAK,mBAAoB,MAAM,GAAM,GAClF,OAAO,IAAI,GAAAwzI,aAAax/H,MAG1BkmI,WAAWl6I,GACT,OAAOH,KAAK0E,KAAK,SAAU,UAAYvE,EAAI,MAAM,GAAM,GAKnDm6I,UAAUn6I,G,yCACd,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAI,MAAM,GAAM,GAC/D,OAAO,IAAI,EAAAmqI,eAAen2H,MAGtBggC,eAAeh0C,G,yCACnB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,SAAU,MAAM,GAAM,GAC1E,OAAO,IAAI,EAAAmqI,eAAen2H,MAGtBomI,uBAAuBp5I,G,yCAC3B,MAAMgT,QAAUnU,KAAK0E,KACnB,MACA,gDAAkDvD,EAClD,MACA,GACA,GAEF,OAAO,IAAI,EAAA0sI,aAAa15H,EAAG,EAAAm2H,mBAGvBkQ,WAAW36I,G,yCACf,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,WAAY7E,GAAS,GAAM,GAC7D,OAAO,IAAI,EAAAyqI,eAAen2H,MAGtBsmI,iBAAiB56I,G,yCACrB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,kBAAmB7E,GAAS,GAAM,GACpE,OAAO,IAAI,EAAAyqI,eAAen2H,MAGtBwgC,gBAAgB90C,G,yCACpB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,iBAAkB7E,GAAS,GAAM,GACnE,OAAO,IAAI,EAAAyqI,eAAen2H,MAGtBumI,UAAUv6I,EAAYN,G,yCAC1B,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAIN,GAAS,GAAM,GAClE,OAAO,IAAI,EAAAyqI,eAAen2H,MAGtBsgC,eAAet0C,EAAYN,G,yCAC/B,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,SAAUN,GAAS,GAAM,GAC7E,OAAO,IAAI,EAAAyqI,eAAen2H,MAG5BygC,aAAaz0C,GACX,OAAOH,KAAK0E,KAAK,SAAU,YAAcvE,EAAI,MAAM,GAAM,GAG3D00C,kBAAkB10C,GAChB,OAAOH,KAAK0E,KAAK,SAAU,YAAcvE,EAAK,SAAU,MAAM,GAAM,GAGtEw6I,kBAAkB96I,GAChB,OAAOG,KAAK0E,KAAK,SAAU,WAAY7E,GAAS,GAAM,GAGxDy4E,uBAAuBz4E,GACrB,OAAOG,KAAK0E,KAAK,SAAU,iBAAkB7E,GAAS,GAAM,GAG9D+6I,eAAe/6I,GACb,OAAOG,KAAK0E,KAAK,MAAO,gBAAiB7E,GAAS,GAAM,GAGpDg7I,eAAe16I,EAAYN,G,yCAC/B,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,SAAUN,GAAS,GAAM,GAC7E,OAAO,IAAI,EAAAyqI,eAAen2H,MAG5B2mI,gBAAgBj7I,GACd,OAAOG,KAAK0E,KAAK,MAAO,iBAAkB7E,GAAS,GAAM,GAG3Dk7I,qBAAqB56I,EAAYN,GAC/B,OAAOG,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,eAAgBN,GAAS,GAAM,GAG5Ey2C,0BAA0Bn2C,EAAYN,GACpC,OAAOG,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,qBAAsBN,GAAS,GAAM,GAGlF8kE,iBACE9kE,EACAsB,EAAyB,MAEzB,IAAIukB,EAAO,iBAIX,OAHsB,MAAlBvkB,IACFukB,GAAQ,mBAAqBvkB,GAExBnB,KAAK0E,KAAK,OAAQghB,EAAM7lB,GAAS,GAAM,GAGhDm7I,kBAAkBn7I,GAChB,OAAOG,KAAK0E,KAAK,OAAQ,kBAAmB7E,GAAS,GAAM,GAG7Do7I,8BACE95I,EACAtB,GAEA,OAAOG,KAAK0E,KACV,OACA,+CAAiDvD,EACjDtB,GACA,GACA,GAIJq7I,gBAAgB/6I,GACd,OAAOH,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,UAAW,MAAM,GAAM,GAGpE20C,qBAAqB30C,GACnB,OAAOH,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,gBAAiB,MAAM,GAAM,GAG1Eg7I,qBAAqBt7I,GACnB,OAAOG,KAAK0E,KAAK,MAAO,kBAAmB7E,GAAS,GAAM,GAG5D04E,0BAA0B14E,GACxB,OAAOG,KAAK0E,KAAK,MAAO,wBAAyB7E,GAAS,GAAM,GAG5Du7I,iBAAiBj7I,G,yCACrB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,WAAY,MAAM,GAAM,GAC5E,OAAO,IAAI,EAAAmqI,eAAen2H,MAGtBknI,sBAAsBl7I,G,yCAC1B,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,YAAcvE,EAAK,iBAAkB,MAAM,GAAM,GAClF,OAAO,IAAI,EAAAmqI,eAAen2H,MAGtBmnI,sBACJz7I,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,mBAAoB7E,GAAS,GAAM,GACpE,OAAO,IAAI,EAAAguI,aAA6B15H,EAAG,EAAAm2H,mBAKvCxjD,kBACJt/D,EACAiuB,EACAkgB,G,yCAEA,MAAMjwC,GACkB,MAArBiwC,EAA4B,qBAAuBA,EAAoB,IAAM,aAC9EnuC,EACA,eACAiuB,EACIthC,QAAUnU,KAAK0E,KAAK,MAAOghB,EAAM,MAAM,GAAM,GACnD,OAAO,IAAI,EAAAwkH,mBAAmB/1H,MAG1BonI,qBACJp7I,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,YAAcvE,EAAK,iBAAkBN,GAAS,GAAM,GACtF,OAAO,IAAI,EAAAsqI,6BAA6Bh2H,MAOpCqnI,2BAA2Br7I,EAAYoG,G,yCAC3C,MAAM4N,QAAUnU,KAAK0E,KAAK,OAAQ,YAAcvE,EAAK,cAAeoG,GAAM,GAAM,GAChF,OAAO,IAAI,EAAA+jI,eAAen2H,MAOtBsnI,gCAAgCt7I,EAAYoG,G,yCAChD,MAAM4N,QAAUnU,KAAK0E,KAAK,OAAQ,YAAcvE,EAAK,oBAAqBoG,GAAM,GAAM,GACtF,OAAO,IAAI,EAAA+jI,eAAen2H,MAG5BqhC,uBAAuBr1C,EAAYs1C,GACjC,OAAOz1C,KAAK0E,KAAK,SAAU,YAAcvE,EAAK,eAAiBs1C,EAAc,MAAM,GAAM,GAG3FC,4BAA4Bv1C,EAAYs1C,GACtC,OAAOz1C,KAAK0E,KACV,SACA,YAAcvE,EAAK,eAAiBs1C,EAAe,SACnD,MACA,GACA,GAIJimG,0BACEv7I,EACAs1C,EACAlvC,EACApF,GAEA,OAAOnB,KAAK0E,KACV,OACA,YAAcvE,EAAK,eAAiBs1C,EAAe,yBAA2Bt0C,EAC9EoF,GACA,GACA,GAIEo1I,yBACJx7I,EACAs1C,G,yCAEA,MAAMthC,QAAUnU,KAAK0E,KACnB,MACA,YAAcvE,EAAK,eAAiBs1C,EAAe,SACnD,MACA,GACA,GAEF,OAAO,IAAI,EAAA00F,6BAA6Bh2H,MAG1CynI,mBAAmBz7I,EAAYs1C,EAAsBlvC,GACnD,OAAOvG,KAAK0E,KAAK,OAAQ,YAAcvE,EAAK,eAAiBs1C,EAAclvC,GAAM,GAAM,GAKnF+qB,qBACJnwB,EACAhB,G,yCAEA,MAAMgU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,gBAAkBhB,EAAK,WAC5D,MACA,GACA,GAEF,OAAO,IAAI,EAAA07I,+BAA+B1nI,MAGtCoe,qB,yCACJ,MAAMpe,QAAUnU,KAAK0E,KAAK,MAAO,eAAgB,MAAM,GAAM,GAC7D,OAAO,IAAI,EAAAmpI,aAAa15H,EAAG,EAAA+3H,uBAGvBnnH,eAAe5jB,G,yCACnB,MAAMgT,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,eACrC,MACA,GACA,GAEF,OAAO,IAAI,EAAA0sI,aAAa15H,EAAG,EAAA+3H,uBAGvBntH,mBACJ5d,EACAhB,G,yCASA,aAPgBH,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,gBAAkBhB,EAAK,SAC5D,MACA,GACA,IAEOqG,KAAKsnI,GAAY,IAAI,EAAA3B,0BAA0B2B,QAGpD/7G,eACJ5wB,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,kBAAoBvD,EAAiB,eACrCtB,GACA,GACA,GAEF,OAAO,IAAI,EAAAqsI,mBAAmB/3H,MAG1B2d,cACJ3wB,EACAhB,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,gBAAkBhB,EACvDN,GACA,GACA,GAEF,OAAO,IAAI,EAAAqsI,mBAAmB/3H,MAG1BsL,mBACJte,EACAhB,EACAN,G,+CAEMG,KAAK0E,KACT,MACA,kBAAoBvD,EAAiB,gBAAkBhB,EAAK,SAC5DN,GACA,GACA,MAIJoyB,iBAAiB9wB,EAAwBhB,GACvC,OAAOH,KAAK0E,KACV,SACA,kBAAoBvD,EAAiB,gBAAkBhB,EACvD,MACA,GACA,GAIJ27I,qBACE36I,EACAhB,EACAiB,GAEA,OAAOpB,KAAK0E,KACV,SACA,kBAAoBvD,EAAiB,gBAAkBhB,EAAK,SAAWiB,EACvE,MACA,GACA,GAMEkzB,gBAAgBnzB,EAAwBhB,G,yCAC5C,MAAMgU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,WAAahB,EAAK,WACvD,MACA,GACA,GAEF,OAAO,IAAI,EAAA47I,qBAAqB5nI,MAG5Bid,UAAUjwB,G,yCACd,MAAMgT,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,UACrC,MACA,GACA,GAEF,OAAO,IAAI,EAAA0sI,aAAa15H,EAAG,EAAAi5H,kBAGvBvuH,cAAc1d,EAAwBhB,G,yCAQ1C,aAPgBH,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,WAAahB,EAAK,SACvD,MACA,GACA,MAKEs0B,UAAUtzB,EAAwBtB,G,yCACtC,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,kBAAoBvD,EAAiB,UACrCtB,GACA,GACA,GAEF,OAAO,IAAI,EAAAutI,cAAcj5H,MAGrBqgB,SACJrzB,EACAhB,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,WAAahB,EAClDN,GACA,GACA,GAEF,OAAO,IAAI,EAAAutI,cAAcj5H,MAGrBoL,cAAcpe,EAAwBhB,EAAYN,G,+CAChDG,KAAK0E,KACT,MACA,kBAAoBvD,EAAiB,WAAahB,EAAK,SACvDN,GACA,GACA,MAIJ60B,YAAYvzB,EAAwBhB,GAClC,OAAOH,KAAK0E,KACV,SACA,kBAAoBvD,EAAiB,WAAahB,EAClD,MACA,GACA,GAIJ67I,gBAAgB76I,EAAwBhB,EAAYiB,GAClD,OAAOpB,KAAK0E,KACV,SACA,kBAAoBvD,EAAiB,WAAahB,EAAK,SAAWiB,EAClE,MACA,GACA,GAMEs4B,UAAUv4B,EAAwBkQ,G,yCACtC,MAAM8C,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,aAAekQ,EACpD,MACA,GACA,GAEF,OAAO,IAAI,EAAAuoB,eAAezlB,MAGtBmkB,YAAYn3B,G,yCAChB,MAAMgT,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,YACrC,MACA,GACA,GAEF,OAAO,IAAI,EAAA0sI,aAAa15H,EAAG,EAAAylB,mBAGvBl3B,mBACJvB,EACApB,EACA4C,EACAvB,G,yCAEA,MAAM+S,QAAUnU,KAAK0E,KACnB,MACA,kBACEvD,EADF,yBAIE8oE,mBAAmBlqE,GACnB,UACAkqE,mBAAmBtnE,GACnB,uBACAvB,EACF,MACA,GACA,GAEF,OAAO,IAAI,EAAAysI,aAAa15H,EAAG,EAAAylB,mBAGvBqiH,yBACJ96I,EACA8J,G,yCAEA,MAAMkJ,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAApB,iCAA6E8J,EAC7E,MACA,GACA,GAEF,OAAO,IAAI,EAAA4iI,aAAa15H,EAAG,EAAAylB,mBAGvBE,UACJ34B,EACAkQ,EACAxR,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,aAAekQ,EACpDxR,GACA,GACA,GAEF,OAAO,IAAI,EAAA+5B,eAAezlB,MAKtBooB,oBACJp7B,EACAhB,G,yCAEA,MAAMgU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,UAAYhB,EACjD,MACA,GACA,GAEF,OAAO,IAAI,EAAA+7I,gCAAgC/nI,MAGvCopB,0BAA0Bp8B,EAAwBhB,G,yCAQtD,aAPgBH,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,UAAYhB,EAAK,UACtD,MACA,GACA,MAKEwe,qBACJxd,G,yCAEA,MAAMgT,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,SACrC,MACA,GACA,GAEF,OAAO,IAAI,EAAA0sI,aAAa15H,EAAG,EAAAgoI,wCAGvB5hH,wCACJp5B,EACAhB,G,yCAEA,MAAMgU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,UAAYhB,EAAK,0BACtD,MACA,GACA,GAEF,OAAO,IAAI,EAAA6wI,4CAA4C78H,MAGnDyoF,gCACJtzF,G,yCAEA,MAAM6K,QAAUnU,KAAK0E,KACnB,MACA,kBAAoB4E,EAAa,sBACjC,MACA,GACA,GAEF,OAAO,IAAI,EAAAsmI,qCAAqCz7H,MAGlDgpB,2BACEh8B,EACAtB,GAEA,OAAOG,KAAK0E,KACV,OACA,kBAAoBvD,EAAiB,gBACrCtB,GACA,GACA,GAIJs2B,6BAA6Bh1B,EAAwBhB,GACnD,OAAOH,KAAK0E,KACV,OACA,kBAAoBvD,EAAiB,UAAYhB,EAAK,YACtD,MACA,GACA,GAIEg3B,iCACJh2B,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,kBAAoBvD,EAAiB,kBACrCtB,GACA,GACA,GAEF,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAA08H,iCAG7B3vI,2BACEC,EACAhB,EACAN,GAEA,OAAOG,KAAK0E,KACV,OACA,kBAAoBvD,EAAiB,UAAYhB,EAAK,UACtDN,GACA,GACA,GAIJw2B,4BACEl1B,EACAhB,EACAN,GAEA,OAAOG,KAAK0E,KACV,OACA,kBAAoBvD,EAAiB,UAAYhB,EAAK,WACtDN,GACA,GACA,GAIEuwB,+BACJjvB,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,kBAAoBvD,EAAiB,qBACrCtB,GACA,GACA,GAEF,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAAy8H,0CAGvBrgH,gCACJpvB,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,kBAAoBvD,EAAiB,iBACrCtB,GACA,GACA,GAEF,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAA08H,iCAG7B7zG,oBACE77B,EACAhB,EACAN,GAEA,OAAOG,KAAK0E,KACV,MACA,kBAAoBvD,EAAiB,UAAYhB,EACjDN,GACA,GACA,GAIJ89B,0BACEx8B,EACAhB,EACAN,GAEA,OAAOG,KAAK0E,KACV,MACA,kBAAoBvD,EAAiB,UAAYhB,EAAK,UACtDN,GACA,GACA,GAIJ2gB,2CACErf,EACA8J,EACApL,GAEA,OAAOG,KAAK0E,KACV,MACA,kBAAoBvD,EAAiB,UAAY8J,EAAS,6BAC1DpL,GACA,GACA,GAIJ67B,iCACEv6B,EACAhB,EACAN,GAEA,OAAOG,KAAK0E,KACV,MACA,kBAAoBvD,EAAiB,UAAYhB,EAAK,kBACtDN,GACA,GACA,GAIJq2B,uBAAuB/0B,EAAwBhB,GAC7C,OAAOH,KAAK0E,KACV,SACA,kBAAoBvD,EAAiB,UAAYhB,EACjD,MACA,GACA,GAIEuwB,4BACJvvB,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,SACA,kBAAoBvD,EAAiB,SACrCtB,GACA,GACA,GAEF,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAA08H,iCAKvBr3E,W,yCACJ,MAAMrlD,QAAUnU,KAAK0E,KAAK,MAAO,UAAW,MAAM,GAAM,GACxD,OAAO,IAAI,EAAAmpI,aAAa15H,EAAG,EAAAm8H,iBAGvB8L,oBAAoBj7I,EAAwBtB,G,yCAChD,OAAOG,KAAK0E,KAAK,OAAQ,kBAAoBvD,EAAiB,UAAWtB,GAAS,GAAM,MAGpFw8I,0BAA0Bx8I,G,yCAC9B,OAAOG,KAAK0E,KAAK,OAAQ,8BAA+B7E,GAAS,GAAM,MAGnE6oE,c,yCACJ,MAAMv0D,QAAUnU,KAAK0E,KAAK,MAAO,0BAA2B,MAAM,GAAM,GACxE,OAAO,IAAI,EAAAmpI,aAAa15H,EAAG,GAAAqgI,oBAKvBjgF,qB,yCACJ,MAAMpgD,QAAUnU,KAAK0E,KAAK,MAAO,oBAAqB,MAAM,GAAM,GAClE,OAAO,IAAI,EAAA2nI,gBAAgBl4H,MAGvB+gD,mBAAmBr1D,G,yCACvB,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,oBAAqB7E,GAAS,GAAM,GACrE,OAAO,IAAI,EAAAwsI,gBAAgBl4H,MAKvBmoI,U,yCACJ,MAAM52H,EAAO1lB,KAAKm4I,iBAAmBn4I,KAAKk4I,YAAc,4BAA8B,QAChF/jI,QAAUnU,KAAK0E,KAAK,MAAOghB,EAAM,MAAM,GAAM,GACnD,OAAO,IAAI,GAAA0uH,aAAajgI,MAKpBk9B,wB,yCACJ,MAAMl9B,QAAUnU,KAAK0E,KAAK,MAAO,cAAe,MAAM,GAAM,GAC5D,OAAO,IAAI,EAAAmpI,aAAa15H,EAAG,GAAAygI,8BAGvBtjG,kCACJnwC,G,yCAEA,MAAMgT,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,cACrC,MACA,GACA,GAEF,OAAO,IAAI,EAAA0sI,aAAa15H,EAAG,GAAAygI,8BAGvB3mE,0BACJpuE,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,gCAAiC7E,GAAS,GAAM,GAClF,OAAO,IAAI,GAAA40I,+BAA+BtgI,MAGtC45D,kBAAkBluE,G,yCACtB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,wBAAyB7E,GAAS,GAAM,GAC1E,OAAO,IAAI,GAAA80I,uBAAuBxgI,MAG9B25D,gBAAgBjuE,G,yCACpB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,sBAAuB7E,GAAS,GAAM,GACxE,OAAO,IAAI,GAAA60I,qBAAqBvgI,MAG5B05D,4BACJ1sE,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,kBAAoBvD,EAAiB,sBACrCtB,GACA,GACA,GAEF,OAAO,IAAI,GAAA60I,qBAAqBvgI,MAG5B+5D,oBAAoBruE,G,yCACxB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,0BAA2B7E,GAAS,GAAM,GAC5E,OAAO,IAAI,GAAA01I,yBAAyBphI,MAGhC65D,qBACJnuE,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,2BAA4B7E,GAAS,GAAM,GAC7E,OAAO,IAAI,GAAAi1I,0BAA0B3gI,MAGjC46D,8BACJlvE,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,qCAAsC7E,GAAS,GAAM,GACvF,OAAO,IAAI,GAAAm1I,kBAAkB7gI,MAGzBy5D,oBAAoB/tE,G,yCACxB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,0BAA2B7E,GAAS,GAAM,GAC5E,OAAO,IAAI,GAAAg1I,yBAAyB1gI,MAGhC21D,0BACJjqE,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,4BAA6B7E,GAAS,GAAM,GAC7E,OAAO,IAAI,GAAA40I,+BAA+BtgI,MAGtCw3D,kBAAkB9rE,G,yCACtB,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,oBAAqB7E,GAAS,GAAM,GACrE,OAAO,IAAI,GAAA80I,uBAAuBxgI,MAG9Bg3D,gBAAgBtrE,G,yCACpB,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAmB7E,GAAS,GAAM,GACnE,OAAO,IAAI,GAAA60I,qBAAqBvgI,MAG5B+2D,4BACJ/pE,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,kBACrCtB,GACA,GACA,GAEF,OAAO,IAAI,GAAA60I,qBAAqBvgI,MAG5Bg8D,oBACJtwE,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,sBAAuB7E,GAAS,GAAM,GACvE,OAAO,IAAI,GAAA01I,yBAAyBphI,MAGhCq6D,qBACJ3uE,G,yCAEA,MAAM6B,EAAW7B,EAAQ0uE,eAAe7sE,SAClC6E,EAAYm2B,OAAOC,OAAO,GAAI98B,GAEpC0G,EAAKgoE,eAAiB,CACpBpuE,GAAIN,EAAQ0uE,eAAepuE,GAC3Bo8I,MAAO/zD,KAAK3oF,EAAQ0uE,eAAepuE,IACnCkR,KAAMxR,EAAQ0uE,eAAel9D,KAC7B+jI,WAAYv1I,EAAQ0uE,eAAeiuE,4BACnC96I,SAAU,CACR+6I,kBAAmB,EAAA36I,MAAMi8C,gBAAgBr8C,EAASg7I,mBAClDC,eAAgB,EAAA76I,MAAMi8C,gBAAgBr8C,EAASk7I,kBAInD,MAAMzoI,QAAUnU,KAAK0E,KAAK,MAAO,uBAAwB6B,GAAM,GAAM,GACrE,OAAO,IAAI,GAAAuuI,0BAA0B3gI,MAGjCw6D,wBACJ9uE,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,SAAU,uBAAwB7E,GAAS,GAAM,GAC3E,OAAO,IAAI,GAAAi1I,0BAA0B3gI,MAGjCs2D,oBAAoB5qE,G,yCACxB,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,sBAAuB7E,GAAS,GAAM,GACvE,OAAO,IAAI,GAAA+0I,0BAA0BzgI,MAGjCq2D,gCACJrpE,EACAtB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvD,EAAiB,sBACrCtB,GACA,GACA,GAEF,OAAO,IAAI,GAAA+0I,0BAA0BzgI,MAGvCrM,qBAAqBjI,GACnB,OAAOG,KAAK0E,KAAK,OAAQ,sBAAuB7E,GAAS,GAAO,GAGlE2rE,wBAAwB3rE,GACtB,OAAOG,KAAK0E,KAAK,OAAQ,yBAA0B7E,GAAS,GAAM,GAGpEojG,mBAAmBpjG,GACjB,OAAOG,KAAK0E,KAAK,OAAQ,+BAAgC7E,GAAS,GAAO,GAGrEwsE,gC,yCACJ,MAAMl4D,QAAUnU,KAAK0E,KACnB,MACA,+CACA,MACA,GACA,GAEF,OAAO,IAAI,EAAA0nI,2BAA2Bj4H,MAGlCk5D,8BACJxtE,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,MACA,2CACA7E,GACA,GACA,GAEF,OAAO,IAAI,EAAAusI,2BAA2Bj4H,MAKlC++C,4B,yCACJ,MAAM/+C,QAAUnU,KAAK0E,KAAK,MAAO,4BAA6B,MAAM,GAAM,GAC1E,OAAO,IAAI,EAAAmpI,aAAa15H,EAAG,EAAA6jD,0CAGvBL,4B,yCACJ,MAAMxjD,QAAUnU,KAAK0E,KAAK,MAAO,4BAA6B,MAAM,GAAM,GAC1E,OAAO,IAAI,EAAAmpI,aAAa15H,EAAG,EAAAq4H,0CAGvB32E,mBAAmB11D,G,yCACvB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,qBAAuBvE,EAAI,MAAM,GAAM,GACxE,OAAO,IAAI,EAAA63D,sCAAsC7jD,MAG7CoiD,4BAA4Bp2D,G,yCAChC,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,qBAAuBvE,EAAK,YAAa,MAAM,GAAM,GACtF,OAAO,IAAI,EAAA0tI,aAAa15H,EAAG,EAAAylB,mBAG7Bm6B,mBAAmB5zD,EAAYN,GAC7B,OAAOG,KAAK0E,KAAK,MAAO,qBAAuBvE,EAAIN,GAAS,GAAM,GAGpEk4D,sBAAsB53D,GACpB,OAAOH,KAAK0E,KAAK,SAAU,qBAAuBvE,EAAI,MAAM,GAAM,GAGpE61D,0BAA0Bn2D,GACxB,OAAOG,KAAK0E,KAAK,OAAQ,2BAA4B7E,GAAS,GAAM,GAGtEg4D,4BAA4B13D,GAC1B,OAAOH,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,YAAa,MAAM,GAAM,GAGhFD,0BAA0BC,EAAYN,GACpC,OAAOG,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,UAAWN,GAAS,GAAM,GAGjFg5D,2BAA2B14D,EAAYN,GACrC,OAAOG,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,WAAYN,GAAS,GAAM,GAGlFu4D,4BAA4Bj4D,GAC1B,OAAOH,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,YAAa,MAAM,GAAM,GAGhFm4D,2BAA2Bn4D,GACzB,OAAOH,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,WAAY,MAAM,GAAM,GAG/Eq4D,0BAA0Br4D,GACxB,OAAOH,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,UAAW,MAAM,GAAM,GAGxEu2D,4BAA4Bv2D,G,yCAChC,MAAMgU,QAAUnU,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,YAAa,MAAM,GAAM,GACvF,OAAO,IAAI,EAAAusI,gCAAgCv4H,MAGvC2iD,4BACJ32D,EACAN,G,+CAEMG,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,YAAaN,GAAS,GAAM,MAG5Eo3D,wBAAwB92D,G,yCAC5B,MAAMgU,QAAUnU,KAAK0E,KAAK,OAAQ,qBAAuBvE,EAAK,QAAS,MAAM,GAAM,GACnF,OAAO,IAAI,EAAAwsI,4BAA4Bx4H,MAKnCyvB,gBAAgBzjC,G,yCACpB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAI,MAAM,GAAM,GACrE,OAAO,IAAI,EAAA6vI,qBAAqB77H,MAG5B22B,uBAAuB3qC,G,yCAC3B,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAK,WAAY,MAAM,GAAM,GAClF,OAAO,IAAI,EAAA4qI,gBAAgB52H,MAGvB04B,4BAA4B1sC,G,yCAChC,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAK,gBAAiB,MAAM,GAAM,GACvF,OAAO,IAAI,EAAAqwI,iCAAiCr8H,MAGxC84B,gC,yCAEJ,aADgBjtC,KAAK0E,KAAK,MAAO,qCAAsC,MAAM,GAAM,MAI/EyoC,0BACJhtC,EACAkR,EACA+sH,G,yCAEA,MAAMjqH,QAAUnU,KAAK0E,KAAK,MAAO,8BAA8BvE,KAAMkR,IAAQ,MAAM,GAAM,GACzF,OAAO,IAAI,EAAAw+H,+BAA+B17H,EAAGiqH,MAGzCluE,6BACJrwD,EACAu+H,G,yCAEA,MAAMjqH,QAAUnU,KAAK0E,KAAK,OAAQ,8BAA+B7E,GAAS,GAAM,GAChF,OAAO,IAAI,EAAAgwI,+BAA+B17H,EAAGiqH,MAGzCjuE,6BACJtwD,EACAu+H,EACAye,G,yCAEA,MAAM1oI,QAAUnU,KAAK0E,KACnB,MACA,8BAAgCm4I,EAChCh9I,GACA,GACA,GAEF,OAAO,IAAI,EAAAgwI,+BAA+B17H,EAAGiqH,MAGzC/tE,6BAA6BlwD,G,yCACjC,OAAOH,KAAK0E,KAAK,SAAU,8BAAgCvE,EAAI,MAAM,GAAM,MAGvE8pC,uBAAuB9pC,EAAY2U,G,yCACvC,OAAO9U,KAAK0E,KACV,MACA,kBAAoBvE,EAAK,2BAA6B2U,EACtD,MACA,GACA,MAIEyzD,uBAAuBpoE,G,yCAC3B,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAK,OAAQ,MAAM,GAAM,GAC9E,OAAO,IAAI,GAAAm0I,gBAAgBngI,MAGvB2oI,mBAAmB38I,G,yCACvB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAK,OAAQ,MAAM,GAAM,GAC9E,OAAO,IAAI,EAAAivI,wBAAwBj7H,MAG/BgpD,iBAAiBt9D,G,yCACrB,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,iBAAkB7E,GAAS,GAAM,GACnE,OAAO,IAAI,EAAAmwI,qBAAqB77H,MAG5B+vB,gBACJ/jC,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAIN,GAAS,GAAM,GACxE,OAAO,IAAI,EAAAmwI,qBAAqB77H,MAG5B80D,uBACJ9oE,EACAN,G,yCAEA,OAAOG,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAK,OAAQN,GAAS,GAAM,MAG1EgjB,sBAAsB1iB,GACpB,OAAOH,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,SAAU,MAAM,GAAM,GAGpEq9D,wBAAwBj3D,G,yCAC5B,MAAM4N,QAAUnU,KAAK0E,KAAK,OAAQ,yBAA0B6B,GAAM,GAAM,GACxE,OAAO,IAAI,EAAAypI,qBAAqB77H,MAG5By8D,8BAA8BzwE,EAAYoG,G,yCAC9C,OAAOvG,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,WAAYoG,GAAM,GAAM,MAGtE2+B,uBACJ/kC,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,WAAYN,GAAS,GAAM,GACtF,OAAO,IAAI,EAAAoqI,eAAe91H,MAGtB44B,iCACJ5sC,G,yCAEA,MAAMgU,QAAUnU,KAAK0E,KACnB,MACA,kBAAoBvE,EAAK,uBACzB,MACA,GACA,GAEF,OAAO,IAAI,EAAA0tI,aAAa15H,EAAG,EAAAw7H,0CAGvB/pG,6BACJzlC,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,kBAAoBvE,EAAK,kBACzBN,GACA,GACA,GAEF,OAAO,IAAI,EAAAoqI,eAAe91H,MAGtB4oI,oBACJ58I,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,OAAQN,GAAS,GAAM,GAClF,OAAO,IAAI,EAAAuvI,wBAAwBj7H,MAG/B8nD,wBACJ97D,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,WAAYN,GAAS,GAAM,GACtF,OAAO,IAAI,EAAAoxI,gBAAgB98H,MAGvBsyB,mCACJtmC,EACAN,G,yCAEA,OAAOG,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,gBAAiBN,GAAS,GAAM,MAG9Em9I,qBAAqB78I,EAAYN,G,yCACrC,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,QAASN,GAAS,GAAM,GACnF,OAAO,IAAI,EAAAoxI,gBAAgB98H,MAGvB07C,wBAAwB1vD,EAAYN,G,yCACxC,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,WAAYN,GAAS,GAAM,GACtF,OAAO,IAAI,EAAAoxI,gBAAgB98H,MAG7B46C,wBAAwB5uD,EAAYN,GAClC,OAAOG,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,WAAYN,GAAS,GAAM,GAG/EyrC,2BAA2BnrC,EAAYN,GACrC,OAAOG,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,eAAgBN,GAAS,GAAM,GAGnF8tC,uBAAuBxtC,GACrB,OAAOH,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,UAAW,MAAM,GAAM,GAG3EstC,0BAA0BttC,GACxB,OAAOH,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,aAAc,MAAM,GAAM,GAG9EmkC,mBAAmBnkC,EAAYN,GAC7B,OAAOG,KAAK0E,KAAK,SAAU,kBAAoBvE,EAAIN,GAAS,GAAM,GAG9D8B,oBAAoBxB,G,yCACxB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,kBAAoBvE,EAAK,QAAS,MAAM,GAAM,GAC/E,OAAO,IAAI,EAAA4vI,yBAAyB57H,MAGhC4hB,qBACJ51B,EACAN,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,kBAAoBvE,EAAK,QAASN,GAAS,GAAM,GACnF,OAAO,IAAI,EAAAkwI,yBAAyB57H,MAKhC8oI,kBAAkB98I,EAAYN,G,yCAClC,MAAMsU,QAAUnU,KAAK0E,KAAK,OAAQ,cAAgBvE,EAAK,SAAUN,GAAS,GAAM,GAChF,OAAO,IAAI,EAAAuzI,iBAAiBj/H,MAGxB+oI,YAAY/8I,G,yCAChB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,cAAgBvE,EAAI,MAAM,GAAM,GACjE,OAAO,IAAI,EAAAizI,iBAAiBj/H,MAGxBgpI,YAAYh9I,EAAYN,G,yCAC5B,MAAMsU,QAAUnU,KAAK0E,KAAK,MAAO,cAAgBvE,EAAIN,GAAS,GAAM,GACpE,OAAO,IAAI,EAAAuzI,iBAAiBj/H,MAKxByf,iBACJN,G,yCAEA,MAAMnf,QAAUnU,KAAK0E,KAAK,MAAO,cAAgB4uB,EAAa,SAAU,MAAM,GAAM,GACpF,OAAO,IAAI,EAAAu6G,aAAa15H,EAAG,EAAAipI,oCAGvBC,gBAAgB/pH,EAAoBnzB,G,yCACxC,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,cAAgB4uB,EAAa,UAAYnzB,EAAI,MAAM,GAAM,GAC1F,OAAO,IAAI,EAAAozI,qBAAqBp/H,MAGlCmpI,uBAAuBhqH,EAAoBzzB,GACzC,OAAOG,KAAK0E,KAAK,OAAQ,cAAgB4uB,EAAa,gBAAiBzzB,GAAS,GAAM,GAGxF09I,yBAAyBjqH,EAAoBnzB,GAC3C,OAAOH,KAAK0E,KACV,OACA,cAAgB4uB,EAAa,UAAYnzB,EAAK,YAC9C,MACA,GACA,GAIEq9I,6BACJlqH,EACAzzB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,cAAgB4uB,EAAa,kBAC7BzzB,GACA,GACA,GAEF,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAAm/H,6BAGvBmK,4BACJnqH,EACAzzB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,cAAgB4uB,EAAa,iBAC7BzzB,GACA,GACA,GAEF,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAAm/H,6BAGvBoK,wBACJpqH,EACAzzB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KAAK,SAAU,cAAgB4uB,EAAa,SAAUzzB,GAAS,GAAM,GAC1F,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAAm/H,6BAG7BqK,uBACErqH,EACAnzB,EACAN,GAEA,OAAOG,KAAK0E,KACV,OACA,cAAgB4uB,EAAa,UAAYnzB,EAAK,UAC9CN,GACA,GACA,GAIJ+9I,wBACEtqH,EACAnzB,EACAN,GAEA,OAAOG,KAAK0E,KACV,OACA,cAAgB4uB,EAAa,UAAYnzB,EAAK,WAC9CN,GACA,GACA,GAIEg+I,2BACJvqH,EACAzzB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,cAAgB4uB,EAAa,qBAC7BzzB,GACA,GACA,GAEF,OAAO,IAAI,EAAAguI,aAAa15H,EAAG,EAAAk/H,sCAG7ByK,gBACExqH,EACAnzB,EACAN,GAEA,OAAOG,KAAK0E,KAAK,MAAO,cAAgB4uB,EAAa,UAAYnzB,EAAIN,GAAS,GAAM,GAGtFk+I,mBAAmBzqH,EAAoBnzB,GACrC,OAAOH,KAAK0E,KAAK,SAAU,cAAgB4uB,EAAa,UAAYnzB,EAAI,MAAM,GAAM,GAKhF69I,mBACJ1qH,G,yCAEA,MAAMnf,QAAUnU,KAAK0E,KACnB,MACA,cAAgB4uB,EAAa,iBAC7B,MACA,GACA,GAEF,OAAO,IAAI,EAAAu6G,aAAa15H,EAAG,EAAA8pI,oDAG7BC,4BACE5qH,EACAzzB,GAEA,OAAOG,KAAK0E,KACV,OACA,cAAgB4uB,EAAa,qBAC7BzzB,GACA,GACA,GAIEq9D,+BACJ5pC,EACAzzB,G,yCAEA,MAAMsU,QAAUnU,KAAK0E,KACnB,OACA,cAAgB4uB,EAAa,iBAC7BzzB,GACA,GACA,GAEF,OAAO,IAAI,EAAAszI,6BAA6Bh/H,MAG1CgqI,2BAA2B7qH,EAAoBnzB,GAC7C,OAAOH,KAAK0E,KACV,SACA,cAAgB4uB,EAAa,kBAAoBnzB,EACjD,MACA,GACA,GAMEi+I,UAAUnrI,EAAeC,EAAanT,G,yCAC1C,MAAMoU,QAAUnU,KAAK0E,KACnB,MACA1E,KAAKq+I,mBAAmB,UAAWprI,EAAOC,EAAKnT,GAC/C,MACA,GACA,GAEF,OAAO,IAAI,EAAA8tI,aAAa15H,EAAG,EAAA+4H,kBAGvBz5G,gBACJtzB,EACA8S,EACAC,EACAnT,G,yCAEA,MAAMoU,QAAUnU,KAAK0E,KACnB,MACA1E,KAAKq+I,mBAAmB,YAAcl+I,EAAK,UAAW8S,EAAOC,EAAKnT,GAClE,MACA,GACA,GAEF,OAAO,IAAI,EAAA8tI,aAAa15H,EAAG,EAAA+4H,kBAGvBn5G,sBACJ5zB,EACA8S,EACAC,EACAnT,G,yCAEA,MAAMoU,QAAUnU,KAAK0E,KACnB,MACA1E,KAAKq+I,mBAAmB,kBAAoBl+I,EAAK,UAAW8S,EAAOC,EAAKnT,GACxE,MACA,GACA,GAEF,OAAO,IAAI,EAAA8tI,aAAa15H,EAAG,EAAA+4H,kBAGvB15G,0BACJryB,EACAhB,EACA8S,EACAC,EACAnT,G,yCAEA,MAAMoU,QAAUnU,KAAK0E,KACnB,MACA1E,KAAKq+I,mBACH,kBAAoBl9I,EAAiB,UAAYhB,EAAK,UACtD8S,EACAC,EACAnT,GAEF,MACA,GACA,GAEF,OAAO,IAAI,EAAA8tI,aAAa15H,EAAG,EAAA+4H,kBAGvBoR,kBACJn+I,EACA8S,EACAC,EACAnT,G,yCAEA,MAAMoU,QAAUnU,KAAK0E,KACnB,MACA1E,KAAKq+I,mBAAmB,cAAgBl+I,EAAK,UAAW8S,EAAOC,EAAKnT,GACpE,MACA,GACA,GAEF,OAAO,IAAI,EAAA8tI,aAAa15H,EAAG,EAAA+4H,kBAGvB35G,sBACJD,EACAnzB,EACA8S,EACAC,EACAnT,G,yCAEA,MAAMoU,QAAUnU,KAAK0E,KACnB,MACA1E,KAAKq+I,mBACH,cAAgB/qH,EAAa,UAAYnzB,EAAK,UAC9C8S,EACAC,EACAnT,GAEF,MACA,GACA,GAEF,OAAO,IAAI,EAAA8tI,aAAa15H,EAAG,EAAA+4H,kBAGvBqR,kBAAkB1+I,G,yCACtB,MAAM2+I,QAAmBx+I,KAAKy+I,uBACxB3wB,EAAU,IAAIsqB,QAAQ,CAC1B,cAAep4I,KAAKogD,WACpBs+F,cAAe,UAAYF,EAC3B,eAAgB,oCAEU,MAAxBx+I,KAAKi4I,iBACPnqB,EAAQ72G,IAAI,aAAcjX,KAAKi4I,iBAWjC,GAAwB,aATDj4I,KAAK25C,MAC1B,IAAIC,QAAQ55C,KAAKuD,mBAAmBo7I,eAAiB,WAAY,CAC/DzhG,MAAO,WACPmyB,YAAarvE,KAAKw4I,iBAClB/rF,OAAQ,OACRh7C,KAAM24B,KAAKC,UAAUxqC,GACrBiuH,QAASA,MAGA/2G,OACX,OAAOpH,QAAQ4oD,OAAO,yBAMpBp/C,iBAAiBhZ,G,yCACrB,MAAMgU,QAAUnU,KAAK0E,KAAK,MAAO,UAAYvE,EAAK,cAAe,MAAM,GAAM,GAC7E,OAAO,IAAI,GAAAq1I,gBAAgBrhI,MAKvByqI,cAAchnG,G,yCAElB,aADgB53C,KAAK0E,KAAK,MAAO,yBAA2BkzC,EAAU,MAAM,GAAM,IACzEpxC,KAAKwxB,GAAW,IAAI,EAAAwzG,sBAAsBxzG,QAK/C41B,kBAAkB/tD,G,yCAEtB,aADgBG,KAAK0E,KAAK,OAAQ,kBAAmB7E,GAAS,GAAM,MAIhEwhE,mB,yCAEJ,aADgBrhE,KAAK0E,KAAK,OAAQ,iBAAkB,MAAM,GAAM,MAM5Dm6I,2BAA2B1pB,G,yCAC/B,MAAMqpB,QAAmBx+I,KAAKy+I,uBAExB/8I,QAAiB1B,KAAK25C,MAC1B,IAAIC,QAAQu7E,EAAkB,aAAc,CAC1Cj4E,MAAO,WACPuP,OAAQ,MACRqhE,QAAS,IAAIsqB,QAAQ,CACnBC,OAAQ,mBACRqG,cAAe,UAAYF,OAKjC,GAAwB,MAApB98I,EAASqV,OAAgB,CAC3B,MAAMjU,QAAc9C,KAAK8+I,YAAYp9I,GAAU,GAAO,GACtD,OAAOiO,QAAQ4oD,OAAOz1D,GAGxB,OAAO,IAAI,EAAA6qI,kCAAkCjsI,EAASo4C,WAGlDilG,0BACJ5pB,EACAt1H,G,yCAEA,MAAM2+I,QAAmBx+I,KAAKy+I,uBAExB/8I,QAAiB1B,KAAK25C,MAC1B,IAAIC,QAAQu7E,EAAkB,aAAc,CAC1Cj4E,MAAO,WACPuP,OAAQ,OACRqhE,QAAS,IAAIsqB,QAAQ,CACnBC,OAAQ,mBACRqG,cAAe,UAAYF,EAC3B,eAAgB,oCAElB/sI,KAAM24B,KAAKC,UAAUxqC,MAIzB,GAAwB,MAApB6B,EAASqV,OAAgB,CAC3B,MAAMjU,QAAc9C,KAAK8+I,YAAYp9I,GAAU,GAAO,GACtD,OAAOiO,QAAQ4oD,OAAOz1D,OAIpBk8I,qBAAqB7pB,G,yCACzB,MAAMzzH,QAAiB1B,KAAK25C,MAC1B,IAAIC,QAAQu7E,EAAkB,SAAU,CACtCj4E,MAAO,WACPuP,OAAQ,MACRqhE,QAAS,IAAIsqB,QAAQ,CACnBC,OAAQ,mBACR,eAAgB,uCAKtB,GAAwB,MAApB32I,EAASqV,OAAgB,CAC3B,MAAMjU,QAAc9C,KAAK8+I,YAAYp9I,GAAU,GAAO,GACtD,OAAOiO,QAAQ4oD,OAAOz1D,OAMpB27I,uB,yCACJ,IAAIvnB,QAAoBl3H,KAAK4L,aAAaqzI,WAK1C,aAJUj/I,KAAK4L,aAAaszI,6BACpBl/I,KAAK44I,gBACX1hB,QAAoBl3H,KAAK4L,aAAaqzI,YAEjC/nB,KAGHv9E,MAAM95C,G,yCAUV,MATuB,QAAnBA,EAAQ4sD,SACV5sD,EAAQiuH,QAAQ72G,IAAI,gBAAiB,YACrCpX,EAAQiuH,QAAQ72G,IAAI,SAAU,aAEhCpX,EAAQiuH,QAAQ72G,IAAI,wBAAyBjX,KAAKd,qBAAqBw+E,iBACvE79E,EAAQiuH,QAAQ72G,IACd,iCACMjX,KAAKd,qBAAqBwd,yBAE3B1c,KAAKm/I,YAAYt/I,MAG1Bs/I,YAAYt/I,GACV,OAAO85C,MAAM95C,GAGT4/F,eAAen2F,G,yCACnB,GAAkB,MAAdA,GAAqC,KAAfA,EACxB,MAAM,IAAI1H,MAAM,6CAElB,MAAMksH,EAAU,IAAIsqB,QAAQ,CAC1BC,OAAQ,mBACR,cAAer4I,KAAKogD,aAEM,MAAxBpgD,KAAKi4I,iBACPnqB,EAAQ72G,IAAI,aAAcjX,KAAKi4I,iBAGjC,MAAMvyH,EAAO,mCAAmCukD,mBAAmB3gE,KAC7D5H,QAAiB1B,KAAK25C,MAC1B,IAAIC,QAAQ55C,KAAKuD,mBAAmBq8F,iBAAmBl6E,EAAM,CAC3Dw3B,MAAO,WACPmyB,YAAarvE,KAAKw4I,iBAClB1qB,QAASA,EACTrhE,OAAQ,SAIZ,GAAwB,MAApB/qD,EAASqV,OAAgB,CAC3B,MAAMtF,QAAa/P,EAASo4C,OAC5B,OAAO,IAAI,EAAA85F,uBAAuBniI,GAC7B,CACL,MAAM3O,QAAc9C,KAAK8+I,YAAYp9I,GAAU,GAAO,GACtD,OAAOiO,QAAQ4oD,OAAOz1D,OAIpBujE,sBACJ+4E,EACAv/I,G,yCAEA,aAAaG,KAAK0E,KAChB,OACA,8BACG1E,KAAKd,qBAAqB8d,aAAe,eAAiB,IAC3DoiI,EACA,2BACFv/I,GACA,GACA,MAIE0nC,yBACJ63G,G,yCAEA,MAAM19I,QAAiB1B,KAAK0E,KAC1B,MACA,6BAA+B06I,EAAiB,eAChD,MACA,GACA,GAEF,OAAO,IAAI,EAAA7O,0CAA0C7uI,MAGjDomE,wBAAwBu3E,G,yCAC5B,aAAar/I,KAAK0E,KAChB,SACA,8BACG1E,KAAKd,qBAAqB8d,aAAe,eAAiB,IAC3DqiI,EACF,MACA,GACA,MAIEzwG,wBAAwB0wG,G,yCAC5B,aAAat/I,KAAK0E,KAChB,SACA,uCAAyC46I,EACzC,MACA,GACA,MAIErtG,gCAAgC1sC,G,yCASpC,aARgBvF,KAAK0E,KACnB,OACA,6DACEulE,mBAAmB1kE,GACrB,MACA,GACA,MAKEotC,sBACJptC,EACA1F,G,yCAEA,aAAaG,KAAK0E,KAChB,OACA,qDAAuDulE,mBAAmB1kE,GAC1E1F,GACA,GACA,MAIEgoE,2BAA2By3E,G,yCAC/B,aAAat/I,KAAK0E,KAChB,OACA,6BAA+B46I,EAAkB,kCACjD,MACA,GACA,MAIY1G,gB,yCACd,MAAMrhB,QAAqBv3H,KAAK4L,aAAa2zI,kBAC7C,GAAoB,MAAhBhoB,GAAyC,KAAjBA,EAC1B,OAAOv3H,KAAKw/I,iBAGd,MAAMn2I,QAAiBrJ,KAAK4L,aAAa6zI,cACnC54G,QAAqB7mC,KAAK4L,aAAa8zI,kBAC7C,IAAK,EAAA59I,MAAMm7C,mBAAmB5zC,KAAc,EAAAvH,MAAMm7C,mBAAmBpW,GACnE,OAAO7mC,KAAK2/I,oBAGd,MAAM,IAAI/9I,MAAM,oEAGF49I,iB,yCACd,MAAMjoB,QAAqBv3H,KAAK4L,aAAa2zI,kBAC7C,GAAoB,MAAhBhoB,GAAyC,KAAjBA,EAC1B,MAAM,IAAI31H,MAEZ,MAAMksH,EAAU,IAAIsqB,QAAQ,CAC1B,eAAgB,mDAChBC,OAAQ,mBACR,cAAer4I,KAAKogD,aAEM,MAAxBpgD,KAAKi4I,iBACPnqB,EAAQ72G,IAAI,aAAcjX,KAAKi4I,iBAGjC,MAAM2H,QAAqB5/I,KAAK4L,aAAaqrH,cACvCv1H,QAAiB1B,KAAK25C,MAC1B,IAAIC,QAAQ55C,KAAKuD,mBAAmBq8F,iBAAmB,iBAAkB,CACvEnuF,KAAMzR,KAAKu4I,YAAY,CACrBnP,WAAY,gBACZM,UAAWkW,EAAalW,UACxB8D,cAAejW,IAEjBr6E,MAAO,WACPmyB,YAAarvE,KAAKw4I,iBAClB1qB,QAASA,EACTrhE,OAAQ,UAIZ,GAAwB,MAApB/qD,EAASqV,OAQN,CACL,MAAMjU,QAAc9C,KAAK8+I,YAAYp9I,GAAU,GAAM,GACrD,OAAOiO,QAAQ4oD,OAAOz1D,GAVK,CAC3B,MAAM+2C,QAAqBn4C,EAASo4C,OAC9Bm7E,EAAgB,IAAI,EAAAuB,sBAAsB38E,SAC1C75C,KAAK4L,aAAai0I,UACtB5qB,EAAciC,YACdjC,EAAcsC,aACd,UAQUooB,oB,yCACd,MAAMt2I,QAAiBrJ,KAAK4L,aAAa6zI,cACnC54G,QAAqB7mC,KAAK4L,aAAa8zI,kBAEvChpB,QAAc12H,KAAK+J,aAAai5F,WAChC88C,EAAgB,IAAI,EAAAnpB,cAAcD,EAAO12H,KAAKd,sBAE9Co2H,EAAe,IAAI,EAAAC,gBACvBlsH,EACAw9B,EACA,IAAI,EAAAg8D,sBACJi9C,GAGIp+I,QAAiB1B,KAAKm2H,kBAAkBb,GAC9C,KAAM5zH,aAAoB,EAAA80H,uBACxB,MAAM,IAAI50H,MAAM,6DAGZ5B,KAAK4L,aAAam0I,SAASr+I,EAASw1H,gBAG9BxyH,KACZ+nD,EACA/mC,EACAjU,EACAe,EACAwtI,EACArG,EACAsG,G,yCAIA,MAAMC,GAFNvG,EAAS,EAAA73I,MAAMm7C,mBAAmB08F,GAAU35I,KAAKuD,mBAAmBu1I,YAAca,GAEtDj0H,EAE5B,GAAI,IAAIo5D,IAAIohE,GAAY34F,OAAS24F,EAC/B,OAAOvwI,QAAQ4oD,OAAO,6BAGxB,MAAMu1D,EAAU,IAAIsqB,QAAQ,CAC1B,cAAep4I,KAAKogD,aAEM,MAAxBpgD,KAAKi4I,iBACPnqB,EAAQ72G,IAAI,aAAcjX,KAAKi4I,iBAGjC,MAAMkI,EAA2B,CAC/BjjG,MAAO,WACPmyB,YAAarvE,KAAKw4I,iBAClB/rF,OAAQA,GAGV,GAAIj6C,EAAQ,CACV,MAAMgsI,QAAmBx+I,KAAKy+I,uBAC9B3wB,EAAQ72G,IAAI,gBAAiB,UAAYunI,GAE/B,MAAR/sI,IACkB,iBAATA,GACT0uI,EAAY1uI,KAAOA,EACnBq8G,EAAQ72G,IAAI,eAAgB,qDACH,iBAATxF,IACZA,aAAgB6rD,SAClB6iF,EAAY1uI,KAAOA,GAEnBq8G,EAAQ72G,IAAI,eAAgB,mCAC5BkpI,EAAY1uI,KAAO24B,KAAKC,UAAU54B,MAIpCuuI,GACFlyB,EAAQ72G,IAAI,SAAU,oBAEJ,MAAhBgpI,GACFA,EAAanyB,GAGfqyB,EAAYryB,QAAUA,EACtB,MAAMpsH,QAAiB1B,KAAK25C,MAAM,IAAIC,QAAQsmG,EAAYC,IAE1D,GAAIH,GAAmC,MAApBt+I,EAASqV,OAAgB,CAE1C,aAD2BrV,EAASo4C,OAE/B,GAAwB,MAApBp4C,EAASqV,OAAgB,CAClC,MAAMjU,QAAc9C,KAAK8+I,YAAYp9I,GAAU,EAAO8Q,GACtD,OAAO7C,QAAQ4oD,OAAOz1D,OAIZg8I,YACZp9I,EACA0+I,EACA5tI,G,yCAEA,GACEA,IACE4tI,GAAkC,MAApB1+I,EAASqV,QACH,MAApBrV,EAASqV,QACW,MAApBrV,EAASqV,QAGX,aADM/W,KAAKg4I,gBAAe,GACnB,KAGT,IAAIn+F,EAAoB,KAOxB,OANI75C,KAAKy4I,eAAe/2I,GACtBm4C,QAAqBn4C,EAASo4C,OACrB95C,KAAKqgJ,eAAe3+I,KAC7Bm4C,EAAe,CAAEymG,cAAe5+I,EAASoM,SAGpC,IAAI,EAAAywC,cAAc1E,EAAcn4C,EAASqV,OAAQqpI,MAGlD7H,YAAYrxH,GAClB,OAAOwV,OAAOuH,KAAK/c,GAChB1gB,KAAKpE,GACG6nE,mBAAmB7nE,GAAO,IAAM6nE,mBAAmB/iD,EAAO9kB,MAElEwX,KAAK,KAGF4+H,iBACN,IAAKx4I,KAAKk4I,aAAel4I,KAAKuD,mBAAmBg9I,aAC/C,MAAO,UAKHlC,mBAAmB52F,EAAcx0C,EAAeC,EAAanT,GAYnE,OAXa,MAATkT,IACFw0C,GAAQ,UAAYx0C,GAEX,MAAPC,IACFu0C,GAAQA,EAAK1jD,QAAQ,MAAQ,EAAI,IAAM,IACvC0jD,GAAQ,OAASv0C,GAEN,MAATnT,IACF0nD,GAAQA,EAAK1jD,QAAQ,MAAQ,EAAI,IAAM,IACvC0jD,GAAQ,qBAAuB1nD,GAE1B0nD,EAGDgxF,eAAe/2I,GACrB,MAAM8+I,EAAa9+I,EAASosH,QAAQt3G,IAAI,gBACxC,OAAqB,MAAdgqI,GAAsBA,EAAWz8I,QAAQ,qBAAuB,EAGjEs8I,eAAe3+I,GACrB,MAAM8+I,EAAa9+I,EAASosH,QAAQt3G,IAAI,gBACxC,OAAqB,MAAdgqI,GAAsBA,EAAWz8I,QAAQ,SAAW,K,0aCvlF/D,iBACA,WAEA,qBACE/E,YAAoByhJ,GAAA,KAAAA,eAAAA,EAEpBz9C,WACE,OAAOhjG,KAAK0gJ,gBAAgB,SAG9BC,oBACE,OAAO3gJ,KAAK0gJ,gBAAgB,kBAGhBA,gBAAgBt+I,G,yCAC5B,MAAMw+I,QAAmB5gJ,KAAKygJ,eAAejqI,IAAYpU,EAAK,CAC5Dy4E,oBAAqB,EAAAC,oBAAoBG,QAE3C,GAAkB,MAAd2lE,EACF,OAAOA,EAGT,MAAMC,EAAO,EAAA/+I,MAAMg/I,UAInB,aAHM9gJ,KAAKygJ,eAAenlE,KAAKl5E,EAAKy+I,EAAM,CACxChmE,oBAAqB,EAAAC,oBAAoBG,QAEpC4lE,Q,44BCzBX,gBACA,WAMA,MAAah1C,EACX7sG,YACUuF,EACAlF,GADA,KAAAkF,sBAAAA,EACA,KAAAlF,WAAAA,EAIJw5C,eAAeD,G,yCACnB,MAAMgvC,QAAkB5nF,KAAKuE,sBAAsBwoB,KAAK6rB,EAAU,QAC5D7rB,EAAO,EAAAjrB,MAAM+lF,gBAAgBD,GAAWj7D,cACxCo0H,EAAYh0H,EAAK/lB,OAAO,EAAG,GAC3Bg6I,EAAaj0H,EAAK/lB,OAAO,GAEzBtF,QAAiB1B,KAAKX,WAAW8/I,YAAY,IAAIvlG,QAfjC,wCAe6DmnG,IAE7E56D,SADqBzkF,EAASoM,QACT3G,MAAM,SAASwZ,MAAMsb,GACvCA,EAAE90B,MAAM,KAAK,KAAO65I,IAG7B,OAAgB,MAAT76D,EAAgBh5D,SAASg5D,EAAMh/E,MAAM,KAAK,GAAI,IAAM,KAGvDwwC,iBAAiBC,G,yCACrB,IACE,aAAa53C,KAAKX,WAAWu/I,cAAchnG,GAC3C,MAAO/0C,GAEP,GAAyB,MADXA,EACJ82B,WACR,MAAO,GAET,MAAM,IAAI/3B,WAvBd,GADC,EAAAq/I,SAAS,KAAK,IAAM,mB,6HANvB,kB,waCGA,iBACA,WAEA,WACA,WACA,WACA,WASA,WACA,WAIA,oBAcEjiJ,YACY6B,EACAxB,EACAuM,EACA7B,EACA7K,EACAmE,EACAtC,EACA0C,EACAF,EACAjE,EACAqK,EACAxK,GAXA,KAAA0B,cAAAA,EACA,KAAAxB,WAAAA,EACA,KAAAuM,aAAAA,EACA,KAAA7B,aAAAA,EACA,KAAA7K,qBAAAA,EACA,KAAAmE,iBAAAA,EACA,KAAAtC,WAAAA,EACA,KAAA0C,oBAAAA,EACA,KAAAF,mBAAAA,EACA,KAAAjE,aAAAA,EACA,KAAAqK,iBAAAA,EACA,KAAAxK,YAAAA,EAzBZ,YACE,OAAOa,KAAKkhJ,yBAAyB,EAAAnpB,sBAAwB/3H,KAAKkhJ,cAAcv+I,MAAQ,KAG1F,yBACE,OAAO3C,KAAKkhJ,yBAAyB,EAAAnpB,sBACjC/3H,KAAKkhJ,cAAct5I,mBACnB,KAqBAurF,MACJ9jB,G,yCAIA,IAAI8xE,EAFJnhJ,KAAKohJ,aAID/xE,EAAYh+D,OAAS,EAAAs+F,mBAAmBnpB,SAC1C26D,EAAW,IAAI,EAAAppB,sBACb/3H,KAAKa,cACLb,KAAKX,WACLW,KAAK4L,aACL5L,KAAK+J,aACL/J,KAAKd,qBACLc,KAAKqD,iBACLrD,KAAKe,WACLf,KAAKV,aACLU,KAAK2J,iBACL3J,MAEOqvE,EAAYh+D,OAAS,EAAAs+F,mBAAmBs1B,IACjDkc,EAAW,IAAI,EAAAjpB,iBACbl4H,KAAKa,cACLb,KAAKX,WACLW,KAAK4L,aACL5L,KAAK+J,aACL/J,KAAKd,qBACLc,KAAKqD,iBACLrD,KAAKe,WACLf,KAAKV,aACLU,KAAK2J,iBACL3J,KAAKyD,qBAEE4rE,EAAYh+D,OAAS,EAAAs+F,mBAAmBu1B,MACjDic,EAAW,IAAI,EAAApsB,iBACb/0H,KAAKa,cACLb,KAAKX,WACLW,KAAK4L,aACL5L,KAAK+J,aACL/J,KAAKd,qBACLc,KAAKqD,iBACLrD,KAAKe,WACLf,KAAKV,aACLU,KAAK2J,iBACL3J,KAAKuD,mBACLvD,KAAKyD,sBAIT,MAAMV,QAAeo+I,EAAShuD,MAAM9jB,GAKpC,OAHItsE,MAAAA,OAAM,EAANA,EAAQqwF,oBACVpzF,KAAKqhJ,UAAUF,GAEVp+I,KAGH6/F,eACJmzB,EACAC,G,yCAEA,GAA0B,MAAtBh2H,KAAKkhJ,cACP,MAAM,IAAIt/I,MAAM5B,KAAKb,YAAYmB,EAAE,mBAGrC,IACE,MAAMyC,QAAe/C,KAAKkhJ,cAAct+C,eAAemzB,EAAWC,GAMlE,OAHKjzH,EAAOqwF,mBAAsBrwF,EAAOu+I,iBACvCthJ,KAAKohJ,aAEAr+I,EACP,MAAOF,GAKP,MAHMA,aAAa,EAAA07C,eACjBv+C,KAAKohJ,aAEDv+I,MAIVsB,OAAO08E,GACLA,IACA7gF,KAAKqD,iBAAiBqB,KAAK,aAG7B2+F,oBACE,OAAOrjG,KAAKkhJ,yBAAyB,EAAAnsB,iBAGvC3xB,iBACE,OAAOpjG,KAAKkhJ,yBAAyB,EAAAhpB,iBAGvC/0B,sBACE,OAAOnjG,KAAKkhJ,yBAAyB,EAAAnpB,sBAGjC77G,cAAcjR,G,yCAElB,WAD8BjL,KAAKV,aAAa8L,mBAAmB,CAAEH,OAAQA,KAE3E,OAAO,EAAAkR,qBAAqBC,iBAMrBpc,KAAKa,cAAcyxF,aAAa,EAAAZ,iBAAiB6vD,KAAMt2I,aACtDjL,KAAKV,aAAakiJ,oBAAoB,CAAEv2I,OAAQA,aAIlDjL,KAAKa,cAAcgoC,OAAO,EAAA6oD,iBAAiB6vD,KAAMt2I,IAIzD,aAD6BjL,KAAKa,cAAc4gJ,eAAex2I,IAKxD,EAAAkR,qBAAqBulI,SAHnB,EAAAvlI,qBAAqBE,UAM1B1U,gBAAgB1B,EAAwBtD,G,yCAC5CA,EAAQA,EAAMsE,OAAOC,cACrB,IAAIuzB,EAAe,KACfC,EAAwB,KAC5B,IACE,MAAMinH,QAAyB3hJ,KAAKX,WAAWw5I,aAAa,IAAI,EAAA+I,gBAAgBj/I,IACxD,MAApBg/I,IACFlnH,EAAMknH,EAAiBlnH,IACvBC,EAAgBinH,EAAiBjnH,eAEnC,MAAO73B,GACP,GAAS,MAALA,GAA8B,MAAjBA,EAAE82B,WACjB,MAAM92B,EAGV,OAAO7C,KAAKa,cAAcu6B,QAAQn1B,EAAgBtD,EAAO83B,EAAKC,MAGxD2mH,UAAUF,GAChBnhJ,KAAKkhJ,cAAgBC,EACrBnhJ,KAAK6hJ,sBAGCT,aACNphJ,KAAKkhJ,cAAgB,KACrBlhJ,KAAK8hJ,sBAGCD,sBACN7hJ,KAAK8hJ,sBACL9hJ,KAAK+hJ,eAAiBtxI,YAAW,IAAMzQ,KAAKohJ,cAzLnB,MA4LnBU,sBACqB,MAAvB9hJ,KAAK+hJ,gBACPvxI,aAAaxQ,KAAK+hJ,mB,obC5NxB,iBAMA,+BACE/iJ,YAAoB+B,GAAA,KAAAA,WAAAA,EAEdihJ,OAAOv0I,EAAalH,EAAsB07I,G,yCAC9C,OAAI17I,EAAKlE,OAAOw4H,YAPgB,gBAQjB76H,KAAKkiJ,gBAAgBz0I,EAAKlH,SAE1BvG,KAAKmiJ,kBAAkB10I,EAAKlH,EAAM07I,MAGrCC,gBAAgBz0I,EAAalH,G,yCACzC,MAAM67I,EAAY,EAAAtgJ,MAAM65H,OAAOluH,GACzBqgH,EAAU,IAAIsqB,QAAQ,CAC1B,aAAa,IAAIroI,MAAO43G,cACxB,eAAgBy6B,EAAUC,aAAa7rI,IAAI,MAC3C,iBAAkBjQ,EAAKlE,OAAOw4H,WAAWv1H,WACzC,iBAAkB,cAGdzF,EAAU,IAAI+5C,QAAQnsC,EAAK,CAC/BgE,KAAMlL,EAAKlE,OACX66C,MAAO,WACPuP,OAAQ,MACRqhE,QAASA,IAGLw0B,QAAqB3oG,MAAM95C,GAEjC,GAA4B,MAAxByiJ,EAAavrI,OACf,MAAM,IAAInV,MAAM,gCAAgC0gJ,EAAavrI,aAGnDorI,kBACZ10I,EACAlH,EACA07I,G,yCAEA,MAAM36F,EAAU,EAAAxlD,MAAM65H,OAAOluH,GACvB80I,EAAYviJ,KAAKwiJ,gBAAgBl7F,EAAQ+6F,aAAa7rI,IAAI,OAChE,IAAIisI,EAAa,EACjB,MAAMC,EAAY56G,KAAK66G,KAAKp8I,EAAKlE,OAAOw4H,WAAa0nB,GAC/CK,EAAyB,GAE/B,GAAIF,EA7CoB,IA8CtB,MAAM,IAAI9gJ,MACR,+CA/CoB,IA+C2B2gJ,GAKnD,IACE,KAAOE,EAAaC,GAAW,CAC7Bj1I,QAAYzN,KAAK6iJ,oBAAoBp1I,EAAKw0I,GAC1C,MAAMa,EAAW,EAAAhhJ,MAAM65H,OAAOluH,GACxBs1I,EAAU/iJ,KAAKgjJ,eAAeP,GACpCK,EAAST,aAAa9kF,OAAO,OAAQ,SACrCulF,EAAST,aAAa9kF,OAAO,UAAWwlF,GACxC,MAAM9vI,EAAQwvI,EAAaF,EACrBU,EAAY18I,EAAKlE,OAAOuV,MAAM3E,EAAOA,EAAQsvI,GAC7CW,EAAe,IAAI9K,QAAQ,CAC/B,aAAa,IAAIroI,MAAO43G,cACxB,eAAgBm7B,EAAST,aAAa7rI,IAAI,MAC1C,iBAAkBysI,EAAUpoB,WAAWv1H,aAGnC69I,EAAe,IAAIvpG,QAAQkpG,EAASx9I,WAAY,CACpDmM,KAAMwxI,EACN/lG,MAAO,WACPuP,OAAQ,MACRqhE,QAASo1B,IAGLE,QAAsBzpG,MAAMwpG,GAElC,GAA6B,MAAzBC,EAAcrsI,OAAgB,CAChC,MAAM1J,EAAU,2CAA2C+1I,EAAcrsI,SAEzE,MADA/W,KAAKe,WAAW+B,MAAMuK,EAAU,YAAc+1I,EAActpG,SACtD,IAAIl4C,MAAMyL,GAGlBu1I,EAAavrI,KAAK0rI,GAClBN,IAGFh1I,QAAYzN,KAAK6iJ,oBAAoBp1I,EAAKw0I,GAC1C,MAAMoB,EAAe,EAAAvhJ,MAAM65H,OAAOluH,GAC5B61I,EAAetjJ,KAAKsjJ,aAAaV,GACvCS,EAAahB,aAAa9kF,OAAO,OAAQ,aACzC,MAAMuwD,EAAU,IAAIsqB,QAAQ,CAC1B,aAAa,IAAIroI,MAAO43G,cACxB,eAAgB07B,EAAahB,aAAa7rI,IAAI,MAC9C,iBAAkB8sI,EAAa1yI,OAAOtL,aAGlCzF,EAAU,IAAI+5C,QAAQypG,EAAa/9I,WAAY,CACnDmM,KAAM6xI,EACNpmG,MAAO,WACPuP,OAAQ,MACRqhE,QAASA,IAGLpsH,QAAiBi4C,MAAM95C,GAE7B,GAAwB,MAApB6B,EAASqV,OAAgB,CAC3B,MAAM1J,EAAU,gDAAgD3L,EAASqV,SAEzE,MADA/W,KAAKe,WAAW+B,MAAMuK,EAAU,YAAc3L,EAASo4C,SACjD,IAAIl4C,MAAMyL,IAElB,MAAOxK,GACP,MAAMA,MAIIggJ,oBACZp1I,EACAw0I,G,+CAEA,MAAMG,EAAY,EAAAtgJ,MAAM65H,OAAOluH,GACzB+vG,EAAS,IAAIztG,KAAqC,QAAhC,EAAAqyI,EAAUC,aAAa7rI,IAAI,aAAK,QAAI,IAM5D,OAJIspC,MAAM09D,EAAOntG,YACfmtG,EAAOtjB,QAAQnqF,KAAKK,MAAQ,MAG1BotG,EAAOntG,UAAYN,KAAKK,MAAQ,UACrB6xI,IAERx0I,KAGDu1I,eAAeP,GAErB,MAAMc,GACJ,mDAAqDd,EAAWn9I,YAChEsS,OAAO,IACT,OAAO,EAAA9V,MAAM0hJ,cAAcD,GAGrBD,aAAaG,GACnB,IAAIC,EAAM,oDAKV,OAJAD,EAAY5yI,SAASkyI,IACnBW,GAAO,WAAWX,gBAEpBW,GAAO,eACAA,EAGDlB,gBAAgB/lI,GACtB,OAAIknI,EAAQ9wE,QAAQp2D,EAAS,eAAiB,EACrC,UACEknI,EAAQ9wE,QAAQp2D,EAAS,eAAiB,EAC5C,UAEA,UAKb,MAAMknI,EA6BJ3kJ,YAAYyd,GAJZ,KAAAF,KAAO,EACP,KAAA22F,MAAQ,EACR,KAAA0wC,IAAM,EAGJ,IACE,MAAMl7D,EAAQjsE,EAAQtV,MAAM,KAAKX,KAAKy1B,GAAMmnF,OAAOj2F,SAAS8O,EAAG,MAC/Dj8B,KAAKuc,KAAOmsE,EAAM,GAClB1oF,KAAKkzG,MAAQxqB,EAAM,GACnB1oF,KAAK4jJ,IAAMl7D,EAAM,GACjB,WA3BJ,eAAe1wD,EAA+BikB,GAS5C,MARiB,iBAANjkB,IACTA,EAAI,IAAI2rH,EAAQ3rH,IAGD,iBAANikB,IACTA,EAAI,IAAI0nG,EAAQ1nG,IAGXjkB,EAAEzb,OAAS0/B,EAAE1/B,KAChByb,EAAEzb,KAAO0/B,EAAE1/B,KACXyb,EAAEk7E,QAAUj3D,EAAEi3D,MACdl7E,EAAEk7E,MAAQj3D,EAAEi3D,MACZl7E,EAAE4rH,MAAQ3nG,EAAE2nG,IACZ5rH,EAAE4rH,IAAM3nG,EAAE2nG,IACV,EAsBN/wE,QAAQgxE,GACN,OAAOF,EAAQ9wE,QAAQ7yE,KAAM6jJ,M,wbClNjC,iBAGA,mCACE7kJ,YAAoBK,GAAA,KAAAA,WAAAA,EAEd2iJ,OACJ8B,EACAC,EACAp2E,G,yCAEA,MAAMtQ,EAAK,IAAIC,SACf,IACE,MAAMmhB,EAAO,IAAII,KAAK,CAACklE,EAAkB1hJ,QAAS,CAAEgP,KAAM,6BAC1DgsD,EAAGE,OAAO,OAAQkhB,EAAMqlE,GACxB,MAAOjhJ,GACP,IAAI,EAAAf,MAAMkxF,QAAW,EAAAlxF,MAAMixF,UAUzB,MAAMlwF,EATNw6D,EAAGE,OACD,OACA88D,OAAO7rH,KAAKu1I,EAAkB1hJ,QAC9B,CACE2hJ,SAAUF,EACVG,YAAa,mCAQft2E,EAAQtQ,S,wGC7BlB,yCACE,KAAA6mF,YAAkD,IAAIpuI,IAEtDpR,KAAK2I,EAAclN,GACP,MAANA,EAOJH,KAAKkkJ,YAAYrzI,SAAS8J,IACxBA,EAAMtN,MAPFrN,KAAKkkJ,YAAY7tI,IAAIlW,IACvBH,KAAKkkJ,YAAY1tI,IAAIrW,EAArBH,CAAyBqN,GAU/BrI,UAAU7E,EAAYgkJ,GACpBnkJ,KAAKkkJ,YAAYjtI,IAAI9W,EAAIgkJ,GAG3B30I,YAAYrP,GACNH,KAAKkkJ,YAAY7tI,IAAIlW,IACvBH,KAAKkkJ,YAAYr/H,OAAO1kB,M,84BCf9B,iBACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAIA,WACA,UACA,WACA,UACA,WACA,WACA,WAGA,WACA,UACA,WACA,WACA,UACA,WACA,WACA,WAEA,WAIA,WAGMikJ,EAAuB,IAAItuI,IAAyB,CACxD,CAAC,aAAc,IAAIylE,IAAI,CAAC,yBAG1B,MAAahwB,EAKXvsD,YACU6B,EACAiL,EACAzM,EACA+sG,EACAjtG,EACAgN,EACApL,EACAzB,GAPA,KAAAuB,cAAAA,EACA,KAAAiL,gBAAAA,EACA,KAAAzM,WAAAA,EACA,KAAA+sG,kBAAAA,EACA,KAAAjtG,YAAAA,EACA,KAAAgN,cAAAA,EACA,KAAApL,WAAAA,EACA,KAAAzB,aAAAA,EAZF,KAAA+kJ,mBAAyC,IAAI,EAAAC,mBACnDtkJ,KAAKukJ,uBAcDC,0B,yCAEJ,aAD+BxkJ,KAAKV,aAAamlJ,yBAI7CC,wBAAwB/pI,G,+CACtB3a,KAAKV,aAAaqlJ,oBAAoBhqI,GAClB,MAAtB3a,KAAKmM,gBACM,MAATwO,EACF3a,KAAKmM,gBAAgB+D,aAErBlQ,KAAKmM,gBAAgB2pC,mBAKrB8uG,WAAW35I,G,+CACTjL,KAAK6kJ,2BAA2B55I,MAGlC4mB,QACJgxG,EACAzgI,EACA0xC,EAAyB,M,yCAGzB,GAAgB,MAAZ+uF,EAAM1iI,GAAY,CAIpB,GAHsB,MAAlB2zC,IACFA,QAAuB9zC,KAAKwW,IAAIqsH,EAAM1iI,KAElB,MAAlB2zC,EAAwB,CAC1B,MAAMgxG,QAAuBhxG,EAAeuK,UAE5C,GADAwkF,EAAMjrB,gBAAkBktC,EAAeltC,iBAAmB,GACtDirB,EAAMxxH,OAAS,EAAAs4B,WAAW+O,OAASosG,EAAezzI,OAAS,EAAAs4B,WAAW+O,MACxE,GACmC,MAAjCosG,EAAensG,MAAMC,UACa,KAAlCksG,EAAensG,MAAMC,UACrBksG,EAAensG,MAAMC,WAAaiqF,EAAMlqF,MAAMC,SAC9C,CACA,MAAM0uE,EAAK,IAAI,EAAAC,oBACfD,EAAG1uE,SAAWksG,EAAensG,MAAMC,SACnC0uE,EAAGE,aAAeqb,EAAMlqF,MAAMykF,qBAAuB,IAAIrtH,KACzD8yH,EAAMjrB,gBAAgB5+F,OAAO,EAAG,EAAGsuG,QAEnCub,EAAMlqF,MAAMykF,qBAAuB0nB,EAAensG,MAAMykF,qBAG5D,GAAI0nB,EAAeC,UAAW,CAC5B,MAAMC,EAAuBF,EAAe7iE,OAAO3qE,QAChD0+B,GACCA,EAAE3kC,OAAS,EAAA4vE,UAAUM,QACX,MAAVvrC,EAAEt1C,MACS,KAAXs1C,EAAEt1C,MACS,MAAXs1C,EAAEr7B,OACU,KAAZq7B,EAAEr7B,QAEAsqI,EACY,MAAhBpiB,EAAM5gD,OACF,GACA4gD,EAAM5gD,OAAO3qE,QACV0+B,GAAMA,EAAE3kC,OAAS,EAAA4vE,UAAUM,QAAoB,MAAVvrC,EAAEt1C,MAA2B,KAAXs1C,EAAEt1C,OAElEskJ,EAAqBn0I,SAASq0I,IAC5B,MAAMC,EAAeF,EAAatkI,MAAMq1B,GAAMA,EAAEt1C,OAASwkJ,EAAGxkJ,OAC5D,GAAoB,MAAhBykJ,GAAwBA,EAAaxqI,QAAUuqI,EAAGvqI,MAAO,CAC3D,MAAM2sG,EAAK,IAAI,EAAAC,oBACfD,EAAG1uE,SAAWssG,EAAGxkJ,KAAO,KAAOwkJ,EAAGvqI,MAClC2sG,EAAGE,aAAe,IAAIz3G,KACtB8yH,EAAMjrB,gBAAgB5+F,OAAO,EAAG,EAAGsuG,QAKd,MAAzBub,EAAMjrB,iBAA4D,IAAjCirB,EAAMjrB,gBAAgBhnG,OACzDiyH,EAAMjrB,gBAAkB,KACU,MAAzBirB,EAAMjrB,iBAA2BirB,EAAMjrB,gBAAgBhnG,OAAS,IAEzEiyH,EAAMjrB,gBAAkBirB,EAAMjrB,gBAAgBhgG,MAAM,EAAG,IAI3D,MAAMsR,EAAS,IAAI,EAAAmrB,OAUnB,GATAnrB,EAAO/oB,GAAK0iI,EAAM1iI,GAClB+oB,EAAO9C,SAAWy8G,EAAMz8G,SACxB8C,EAAOE,SAAWy5G,EAAMz5G,SACxBF,EAAO/nB,eAAiB0hI,EAAM1hI,eAC9B+nB,EAAO7X,KAAOwxH,EAAMxxH,KACpB6X,EAAOQ,cAAgBm5G,EAAMn5G,cAC7BR,EAAOke,aAAey7F,EAAMz7F,aAC5Ble,EAAOmC,SAAWw3G,EAAMx3G,SAEb,MAAPjpB,GAAwC,MAAzB8mB,EAAO/nB,gBAEb,OADXiB,QAAYpC,KAAKa,cAAcwvB,UAAUnH,EAAO/nB,iBAE9C,MAAM,IAAIS,MAAM,mDAyBpB,aAtBM+N,QAAQC,IAAI,CAChB5P,KAAKolJ,mBACHviB,EACA35G,EACA,CACExoB,KAAM,KACN+wG,MAAO,MAETrvG,GAEFpC,KAAKqlJ,kBAAkBn8H,EAAQ25G,EAAOzgI,GACtCpC,KAAKslJ,cAAcziB,EAAM5gD,OAAQ7/E,GAAKnB,MAAMghF,IAC1C/4D,EAAO+4D,OAASA,KAElBjiF,KAAKulJ,yBAAyB1iB,EAAMjrB,gBAAiBx1G,GAAKnB,MAAMqmH,IAC9Dp+F,EAAO0uF,gBAAkB0P,KAE3BtnH,KAAKwlJ,mBAAmB3iB,EAAM/oD,YAAa13E,GAAKnB,MAAM64E,IACpD5wD,EAAO4wD,YAAcA,OAIlB5wD,KAGHs8H,mBACJC,EACArjJ,G,yCAEA,GAAwB,MAApBqjJ,GAAwD,IAA5BA,EAAiB70I,OAC/C,OAAO,KAGT,MAAM6nC,EAA2B,GAC3BitG,EAA+B,GAwBrC,OAvBAD,EAAiB50I,SAAegyH,GAAU,EAAD,gCACvC,MAAM5tF,EAAa,IAAI,EAAAgtF,WACvBhtF,EAAW90C,GAAK0iI,EAAM1iI,GACtB80C,EAAWiE,KAAO2pF,EAAM3pF,KACxBjE,EAAWgpF,SAAW4E,EAAM5E,SAC5BhpF,EAAWxnC,IAAMo1H,EAAMp1H,IACvB,MAAMkG,EAAU3T,KAAKolJ,mBACnBviB,EACA5tF,EACA,CACE5/B,SAAU,MAEZjT,GACAnB,MAAK,IAAY,EAAD,gCACC,MAAb4hI,EAAMzgI,MACR6yC,EAAW7yC,UAAYpC,KAAKa,cAAcgxB,QAAQgxG,EAAMzgI,IAAIA,IAAKA,IAEnEsjJ,EAAeruI,KAAK49B,QAEtBwD,EAASphC,KAAK1D,cAGVhE,QAAQC,IAAI6oC,GACXitG,KAGHJ,cAAcK,EAA0BvjJ,G,yCAC5C,IAAKujJ,IAAgBA,EAAY/0I,OAC/B,OAAO,KAGT,MAAMkI,EAAO9Y,KACP4lJ,EAAqB,GAO3B,aANMD,EAAY5tH,QAAO,CAAOpkB,EAAS2uE,IAAU,EAAD,sCAC1C3uE,EACN,MAAMkyI,QAAiB/sI,EAAKgtI,aAAaxjE,EAAOlgF,GAChDwjJ,EAAUvuI,KAAKwuI,OACdl2I,QAAQ2wB,WAEJslH,KAGHE,aAAaC,EAAuB3jJ,G,yCACxC,MAAMkgF,EAAQ,IAAI,EAAAsgD,MAkBlB,OAjBAtgD,EAAMjxE,KAAO00I,EAAW10I,KACxBixE,EAAMF,SAAW2jE,EAAW3jE,SAExB2jE,EAAW10I,OAAS,EAAA4vE,UAAUO,SAAgC,SAArBukE,EAAWprI,QACtDorI,EAAWprI,MAAQ,eAGf3a,KAAKolJ,mBACTW,EACAzjE,EACA,CACE5hF,KAAM,KACNia,MAAO,MAETvY,GAGKkgF,KAGHijE,yBACJS,EACA5jJ,G,yCAEA,IAAK4jJ,IAAaA,EAASp1I,OACzB,OAAO,KAGT,MAAMkI,EAAO9Y,KACPimJ,EAAqB,GAO3B,aANMD,EAASjuH,QAAO,CAAOpkB,EAAS2zG,IAAO,EAAD,sCACpC3zG,EACN,MAAMuyI,QAAcptI,EAAKqtI,uBAAuB7+B,EAAIllH,GACpD6jJ,EAAO5uI,KAAK6uI,OACXv2I,QAAQ2wB,WAEJ2lH,KAGHE,uBACJC,EACAhkJ,G,yCAEA,MAAMklH,EAAK,IAAI,EAAA9gC,SAYf,OAXA8gC,EAAGE,aAAe4+B,EAAQ5+B,mBAEpBxnH,KAAKolJ,mBACTgB,EACA9+B,EACA,CACE1uE,SAAU,MAEZx2C,GAGKklH,KAGH9wG,IAAIrW,G,yCACR,MAAMytB,QAAgB5tB,KAAKV,aAAai9E,sBAExC,GAAe,MAAX3uD,IAAoBA,EAAQuK,eAAeh4B,GAC7C,OAAO,KAGT,MAAMwiI,QAAkB3iI,KAAKV,aAAa+mJ,eAC1C,OAAO,IAAI,EAAAhyG,OAAOzmB,EAAQztB,GAAKwiI,EAAYA,EAAUxiI,GAAM,SAGvDib,S,yCACJ,MAAMunH,QAAkB3iI,KAAKV,aAAa+mJ,eACpCz4H,QAAgB5tB,KAAKV,aAAai9E,sBAClC76E,EAAqB,GAC3B,IAAK,MAAMvB,KAAMytB,EAEXA,EAAQuK,eAAeh4B,IACzBuB,EAAS2V,KAAK,IAAI,EAAAg9B,OAAOzmB,EAAQztB,GAAKwiI,EAAYA,EAAUxiI,GAAM,OAGtE,OAAOuB,KAIHm0C,kB,+CACJ,MAAM5qC,QAAejL,KAAKV,aAAaoQ,YACvC,GAA8C,aAAnC1P,KAAKwkJ,2BAOd,OALwB,MAAtBxkJ,KAAKmM,gBACgC,QAApC,EAAAnM,KAAKmM,gBAAgBujG,uBAAe,QAAIzkG,KAAYA,UAE/CjL,KAAKmM,gBAAgB2pC,aAAa7qC,QAAcjL,KAAKwkJ,kCAEhDxkJ,KAAKwkJ,0BAGpB,MAAMrtF,EAA2B,GAEjC,WADqBn3D,KAAKa,cAAcylJ,UAEtC,MAAM,IAAI1kJ,MAAM,WAGlB,MAAM62C,EAAkB,GASxB,aARsBz4C,KAAKob,UACnBvK,SAAeqY,GAAW,EAAD,gCAC/BuvB,EAASphC,KAAK6R,EAAOm1B,UAAUp9C,MAAMwZ,GAAM08C,EAAW9/C,KAAKoD,iBAGvD9K,QAAQC,IAAI6oC,GAClB0e,EAAWjgD,KAAKlX,KAAKs3D,kCACft3D,KAAK0kJ,wBAAwBvtF,GAC5BA,KAGHovF,2BAA2BC,EAAoBh0F,GAAS,G,yCAG5D,aAFsBxyD,KAAK61C,mBAEZv+B,QAAQ4R,IACjBA,EAAOG,eAGPmpC,GAAUtpC,EAAO9C,WAAaogI,KAG/Bh0F,GACuB,MAAxBtpC,EAAOQ,eACPR,EAAOQ,cAAc3lB,QAAQyiJ,IAAe,QAS5CC,sBACJh5I,EACAi5I,EACAC,EAA6B,M,yCAE7B,GAAW,MAAPl5I,GAAoC,MAArBi5I,EACjB,OAAO/2I,QAAQ2wB,QAAQ,IAGzB,MAAMmZ,EAAS,EAAA33C,MAAM43C,UAAUjsC,GACzBm5I,EACM,MAAVntG,EACI9pC,QAAQ2wB,QAAQ,IAChBtgC,KAAK8L,gBAAgB+6I,uBAAuB5lJ,MAAM6lJ,IAChD,IAAIlmE,EAAiB,GAWrB,OAVAkmE,EAAUj2I,SAASk2I,IACbA,EAASn2I,QAAUm2I,EAAShjJ,QAAQ01C,IAAW,IACjDmnC,EAAUA,EAAQ75E,OAAOggJ,OAIxBnmE,EAAQhwE,QACXgwE,EAAQvpE,KAAKoiC,GAGRmnC,KAGT79E,QAAe4M,QAAQC,IAAI,CAACg3I,EAAkB5mJ,KAAK61C,oBACnDmxG,EAAkBjkJ,EAAO,GACzB6qB,EAAU7qB,EAAO,GASvB,OAPoB,MAAhB4jJ,GAEkB,OADpBA,QAAqB3mJ,KAAKV,aAAa2nJ,wBAErCN,EAAe,EAAA1iE,aAAaC,QAIzBt2D,EAAQtW,QAAQ4R,IACrB,GAA0B,MAAtBA,EAAOwgB,YACT,OAAO,EAET,GAAyB,MAArBg9G,GAA6BA,EAAkB3iJ,QAAQmlB,EAAO7X,OAAS,EACzE,OAAO,EAGT,GAAW,MAAP5D,GAAeyb,EAAO7X,OAAS,EAAAs4B,WAAW+O,OAA8B,MAArBxvB,EAAOyvB,MAAMY,KAClE,IAAK,IAAInhC,EAAI,EAAGA,EAAI8Q,EAAOyvB,MAAMY,KAAK3oC,OAAQwH,IAAK,CACjD,MAAMhB,EAAI8R,EAAOyvB,MAAMY,KAAKnhC,GAC5B,GAAa,MAAThB,EAAEoiC,IACJ,SAIF,OADyB,MAAXpiC,EAAE+uE,MAAgBwgE,EAAevvI,EAAE+uE,OAE/C,KAAK,EAAAlC,aAAaC,OAChB,GAAc,MAAVzqC,GAA8B,MAAZriC,EAAEqiC,QAAkButG,EAAgBjjJ,QAAQqT,EAAEqiC,SAAW,EAAG,CAChF,IAAI2qG,EAAqB/tI,IAAIe,EAAEqiC,QAM7B,OAAO,EAN+B,CACtC,MAAMytG,EAAgB,EAAAplJ,MAAMi2I,QAAQtqI,GACpC,IAAK22I,EAAqB5tI,IAAIY,EAAEqiC,QAAQpjC,IAAI6wI,GAC1C,OAAO,GAMb,MACF,KAAK,EAAAjjE,aAAaE,KAAM,CACtB,MAAMgjE,EAAU,EAAArlJ,MAAMi2I,QAAQtqI,GAC9B,GAAe,MAAX05I,GAAmBA,IAAY,EAAArlJ,MAAMi2I,QAAQ3gI,EAAEoiC,KACjD,OAAO,EAET,MAEF,KAAK,EAAAyqC,aAAaK,MAChB,GAAI72E,IAAQ2J,EAAEoiC,IACZ,OAAO,EAET,MACF,KAAK,EAAAyqC,aAAaG,WAChB,GAAI32E,EAAIinG,WAAWt9F,EAAEoiC,KACnB,OAAO,EAET,MACF,KAAK,EAAAyqC,aAAaI,kBAChB,IAEE,GADc,IAAIywB,OAAO19F,EAAEoiC,IAAK,KACtBu7D,KAAKtnG,GACb,OAAO,EAET,MAAO5K,GACP7C,KAAKe,WAAW+B,MAAMD,GAExB,MACF,KAAK,EAAAohF,aAAaM,QAOxB,OAAO,QAIL/6C,6BAA6BroC,G,yCACjC,MAAMysB,QAAgB5tB,KAAKX,WAAWk7I,uBAAuBp5I,GAC7D,GAAe,MAAXysB,GAAmC,MAAhBA,EAAQrnB,MAAgBqnB,EAAQrnB,KAAKqK,OAAQ,CAClE,MAAMumD,EAA2B,GAC3B1e,EAAkB,GAQxB,OAPA7qB,EAAQrnB,KAAKsK,SAASsD,IACpB,MAAM5N,EAAO,IAAI,EAAA6tC,WAAWjgC,GACtB+U,EAAS,IAAI,EAAAmrB,OAAO9tC,GAC1BkyC,EAASphC,KAAK6R,EAAOm1B,UAAUp9C,MAAMwZ,GAAM08C,EAAW9/C,KAAKoD,eAEvD9K,QAAQC,IAAI6oC,GAClB0e,EAAWjgD,KAAKlX,KAAKs3D,4BACdH,EAEP,MAAO,MAILiwF,kBAAkB35I,EAAa4vH,GAAqB,G,yCACxD,OAAOr9H,KAAKqnJ,gBAAgB55I,GAAK,GAAM,EAAO4vH,MAG1CiqB,sBAAsB75I,EAAa4vH,GAAqB,G,yCAC5D,OAAOr9H,KAAKqnJ,gBAAgB55I,GAAK,GAAO,EAAM4vH,MAG1CkqB,oBAAoB95I,G,yCACxB,OAAOzN,KAAKqnJ,gBAAgB55I,GAAK,GAAO,GAAO,MAGjD+5I,0BAA0B/5I,GACxBzN,KAAKqkJ,mBAAmBld,oBAAoB15H,GAGxCg6I,mBAAmBtnJ,G,yCACvB,IAAIunJ,QAAyB1nJ,KAAKV,aAAa+mJ,eAC1CqB,IACHA,EAAmB,IAGjBA,EAAiBvnJ,GACnBunJ,EAAiBvnJ,GAAIqnH,cAAe,IAAIz3G,MAAOM,UAE/Cq3I,EAAiBvnJ,GAAM,CACrBqnH,cAAc,IAAIz3G,MAAOM,iBAIvBrQ,KAAKV,aAAaqoJ,aAAaD,GAErC,MAAME,QAA6B5nJ,KAAKV,aAAamlJ,sBACrD,GAAKmD,EAAL,CAIA,IAAK,IAAIxvI,EAAI,EAAGA,EAAIwvI,EAAqBh3I,OAAQwH,IAAK,CACpD,MAAMyvI,EAASD,EAAqBxvI,GACpC,GAAIyvI,EAAO1nJ,KAAOA,EAAI,CACpB0nJ,EAAOllB,UAAY+kB,EAAiBvnJ,GACpC,aAGEH,KAAKV,aAAaqlJ,oBAAoBiD,OAGxCE,uBAAuB3nJ,G,yCAC3B,IAAIunJ,QAAyB1nJ,KAAKV,aAAa+mJ,eAC1CqB,IACHA,EAAmB,IAGjBA,EAAiBvnJ,GACnBunJ,EAAiBvnJ,GAAIknI,cAAe,IAAIt3H,MAAOM,UAE/Cq3I,EAAiBvnJ,GAAM,CACrBqnH,cAAc,IAAIz3G,MAAOM,iBAIvBrQ,KAAKV,aAAaqoJ,aAAaD,GAErC,MAAME,QAA6B5nJ,KAAKV,aAAamlJ,sBACrD,GAAKmD,EAAL,CAIA,IAAK,IAAIxvI,EAAI,EAAGA,EAAIwvI,EAAqBh3I,OAAQwH,IAAK,CACpD,MAAMyvI,EAASD,EAAqBxvI,GACpC,GAAIyvI,EAAO1nJ,KAAOA,EAAI,CACpB0nJ,EAAOllB,UAAY+kB,EAAiBvnJ,GACpC,aAGEH,KAAKV,aAAaqlJ,oBAAoBiD,OAGxCG,gBAAgBtuG,G,yCACpB,GAAc,MAAVA,EACF,OAGF,IAAIib,QAAgB10D,KAAKV,aAAa0oJ,kBACjCtzF,IACHA,EAAU,IAEZA,EAAQjb,GAAU,WACZz5C,KAAKV,aAAa2oJ,gBAAgBvzF,MAGpC+xB,eAAev9D,G,yCACnB,IAAIxnB,EACJ,GAAiB,MAAbwnB,EAAO/oB,GAAY,CACrB,GAA4B,MAAxB+oB,EAAOQ,cAAuB,CAChC,MAAM7pB,EAAU,IAAI,EAAA60C,oBAAoBxrB,GACxCxnB,QAAiB1B,KAAKX,WAAWo7I,iBAAiB56I,OAC7C,CACL,MAAMA,EAAU,IAAI,EAAA20C,cAActrB,GAClCxnB,QAAiB1B,KAAKX,WAAWm7I,WAAW36I,GAE9CqpB,EAAO/oB,GAAKuB,EAASvB,OAChB,CACL,MAAMN,EAAU,IAAI,EAAA20C,cAActrB,GAClCxnB,QAAiB1B,KAAKX,WAAWq7I,UAAUxxH,EAAO/oB,GAAIN,GAGxD,MAAM0G,EAAO,IAAI,EAAA6tC,WAAW1yC,EAAUwnB,EAAOQ,qBACvC1pB,KAAKkoJ,OAAO3hJ,MAGdw4F,gBACJ71E,EACA/nB,EACAuoB,G,yCAEA,MAAMy+H,EAAqC,GACjB,MAAtBj/H,EAAO4wD,aACT5wD,EAAO4wD,YAAYjpE,SAASokC,IACJ,MAAlBA,EAAW7yC,KACb+lJ,EAAmB9wI,KACjBrX,KAAKooJ,0BAA0BnzG,EAAY/rB,EAAO/oB,GAAIgB,aAKxDwO,QAAQC,IAAIu4I,GAElBj/H,EAAO/nB,eAAiBA,EACxB+nB,EAAOQ,cAAgBA,EACvB,MAAM2+H,QAAkBroJ,KAAK6xB,QAAQ3I,GAC/BrpB,EAAU,IAAI,EAAAyoJ,mBAAmBD,GACjC3mJ,QAAiB1B,KAAKX,WAAWw7I,eAAe3xH,EAAO/oB,GAAIN,GAC3D0G,EAAO,IAAI,EAAA6tC,WAAW1yC,EAAUgoB,SAChC1pB,KAAKkoJ,OAAO3hJ,MAGdyyE,oBACJprD,EACAzsB,EACAuoB,G,yCAEA,MAAM+uB,EAA2B,GAC3B8vG,EAAuB,GAC7B,IAAK,MAAMr/H,KAAU0E,EACnB1E,EAAO/nB,eAAiBA,EACxB+nB,EAAOQ,cAAgBA,EACvB+uB,EAASphC,KACPrX,KAAK6xB,QAAQ3I,GAAQjoB,MAAMwZ,IACzB8tI,EAAWlxI,KAAKoD,aAIhB9K,QAAQC,IAAI6oC,GAClB,MAAM54C,EAAU,IAAI,EAAA2oJ,uBAAuBD,EAAY7+H,GACvD,UACQ1pB,KAAKX,WAAWy7I,gBAAgBj7I,GACtC,MAAOgD,GACP,IAAK,MAAMqmB,KAAU0E,EACnB1E,EAAO/nB,eAAiB,KACxB+nB,EAAOQ,cAAgB,KAEzB,MAAM7mB,QAEF7C,KAAKkoJ,OAAOK,EAAW/hJ,KAAKiU,GAAMA,EAAEwoH,qBAG5C3tF,yBAAyBpsB,EAAgBu/H,EAAsBzhE,GAAQ,GACrE,OAAO,IAAIr3E,SAAQ,CAAC2wB,EAASi4B,KAC3B,MAAMub,EAAS,IAAIC,WACnBD,EAAO40E,kBAAkBD,GACzB30E,EAAO7U,OAAgBgV,GAAa,EAAD,gCACjC,IACE,MAAM00E,QAAc3oJ,KAAKinF,4BACvB/9D,EACAu/H,EAAgB/nJ,KAChBuzE,EAAII,OAAOtxE,OACXikF,GAEF1mD,EAAQqoH,GACR,MAAO9lJ,GACP01D,EAAO11D,OAGXixE,EAAOS,QAAU,KACfhc,EAAO,2BAKP0uB,4BACJ/9D,EACA0/H,EACAriJ,EACAygF,GAAQ,G,yCAER,MAAM5kF,QAAYpC,KAAKa,cAAcwvB,UAAUnH,EAAO/nB,gBAChD0nJ,QAAoB7oJ,KAAKa,cAAcgxB,QAAQ+2H,EAAUxmJ,GAEzD0mJ,QAAmB9oJ,KAAKa,cAAcsxD,WAAW/vD,GACjD81G,QAAgBl4G,KAAKa,cAAckoJ,eAAexiJ,EAAMuiJ,EAAW,IAEnEjpJ,EAA6B,CACjCuC,IAAK0mJ,EAAW,GAAGvmJ,gBACnB8S,SAAUwzI,EAAYtmJ,gBACtBymJ,SAAU9wC,EAAQ71G,OAAOw4H,WACzBouB,aAAcjiE,GAGhB,IAAItlF,EACJ,IACE,MAAMwnJ,QAA2BlpJ,KAAKX,WAAWk8I,qBAAqBryH,EAAO/oB,GAAIN,GACjF6B,EAAWslF,EAAQkiE,EAAmB7e,mBAAqB6e,EAAmB9xF,qBACxEp3D,KAAKosG,kBAAkB+8C,uBAC3BniE,EACAkiE,EACAL,EACA3wC,GAEF,MAAOr1G,GACP,KACGA,aAAa,EAAA07C,eAAqD,MAAnC17C,EAAoB82B,YAChB,MAAnC92B,EAAoB82B,YAShB,MAAI92B,aAAa,EAAA07C,cAChB,IAAI38C,MAAOiB,EAAoBkkF,oBAE/BlkF,EAVNnB,QAAiB1B,KAAKopJ,iCACpBpiE,EACA99D,EAAO/oB,GACP0oJ,EACA3wC,EACA4wC,EAAW,IASjB,MAAMH,EAAQ,IAAI,EAAAv0G,WAAW1yC,EAAUwnB,EAAOQ,eAI9C,OAHKs9D,UACGhnF,KAAKkoJ,OAAOS,IAEb,IAAI,EAAAt0G,OAAOs0G,MAOdS,iCACJpiE,EACAx/D,EACAqhI,EACA3wC,EACA91G,G,yCAEA,MAAMi7D,EAAK,IAAIC,SACf,IACE,MAAMmhB,EAAO,IAAII,KAAK,CAACq5B,EAAQ71G,QAAS,CAAEgP,KAAM,6BAChDgsD,EAAGE,OAAO,MAAOn7D,EAAIG,iBACrB86D,EAAGE,OAAO,OAAQkhB,EAAMoqE,EAAYtmJ,iBACpC,MAAOM,GACP,IAAI,EAAAf,MAAMkxF,QAAW,EAAAlxF,MAAMixF,UAWzB,MAAMlwF,EAVNw6D,EAAGE,OAAO,MAAOn7D,EAAIG,iBACrB86D,EAAGE,OACD,OACA88D,OAAO7rH,KAAK0pG,EAAQ71G,QACpB,CACE2hJ,SAAU6E,EAAYtmJ,gBACtB0hJ,YAAa,6BAQrB,IAAIviJ,EACJ,IAEIA,EADEslF,QACehnF,KAAKX,WAAWo8I,gCAAgCj0H,EAAU61C,SAE1Dr9D,KAAKX,WAAWm8I,2BAA2Bh0H,EAAU61C,GAExE,MAAOx6D,GACP,MAAM,IAAIjB,MAAOiB,EAAoBkkF,oBAGvC,OAAOrlF,KAGHkpF,0BAA0B1hE,G,yCAC9B,MAAMrpB,EAAU,IAAI,EAAAw2C,yBAAyBntB,EAAOQ,qBAC9C1pB,KAAKX,WAAW07I,qBAAqB7xH,EAAO/oB,GAAIN,GACtD,MAAM0G,EAAO2iB,EAAO+5G,qBACdjjI,KAAKkoJ,OAAO3hJ,MAGd2hJ,OAAOh/H,G,yCACX,IAAI0E,QAAgB5tB,KAAKV,aAAai9E,sBAKtC,GAJe,MAAX3uD,IACFA,EAAU,IAGR1E,aAAkB,EAAAkrB,WAAY,CAChC,MAAM35B,EAAIyO,EACV0E,EAAQnT,EAAEta,IAAMsa,OAEfyO,EAAwBrY,SAAS4J,IAChCmT,EAAQnT,EAAEta,IAAMsa,WAIdza,KAAKW,QAAQitB,MAGfjtB,QAAQitB,G,+CACN5tB,KAAK6kJ,mCACL7kJ,KAAKV,aAAam9E,oBAAoB7uD,MAGxC3d,MAAMhF,G,+CACJjL,KAAKqpJ,2BAA2Bp+I,SAChCjL,KAAK4kJ,WAAW35I,MAGlButE,mBAAmBkwD,EAAetiH,G,+CAChCpmB,KAAKX,WAAWu7I,eAAe,IAAI,EAAA0O,sBAAsB5gB,EAAKtiH,IAEpE,IAAIwH,QAAgB5tB,KAAKV,aAAai9E,sBACvB,MAAX3uD,IACFA,EAAU,IAGZ86G,EAAI73H,SAAS1Q,IAEPytB,EAAQuK,eAAeh4B,KACzBytB,EAAQztB,GAAIimB,SAAWA,YAIrBpmB,KAAK4kJ,mBACL5kJ,KAAKV,aAAam9E,oBAAoB7uD,MAGxC/I,OAAO1kB,G,yCACX,MAAMytB,QAAgB5tB,KAAKV,aAAai9E,sBACxC,GAAe,MAAX3uD,EAAJ,CAIA,GAAkB,iBAAPztB,EAAiB,CAC1B,GAAmB,MAAfytB,EAAQztB,GACV,cAEKytB,EAAQztB,QAEdA,EAAgB0Q,SAASuH,WACjBwV,EAAQxV,YAIbpY,KAAK4kJ,mBACL5kJ,KAAKV,aAAam9E,oBAAoB7uD,OAGxC4sD,iBAAiBr6E,G,+CACfH,KAAKX,WAAWu1C,aAAaz0C,SAC7BH,KAAK6kB,OAAO1kB,MAGd+3E,qBAAqBwwD,G,+CACnB1oI,KAAKX,WAAWs7I,kBAAkB,IAAI,EAAAtiE,wBAAwBqwD,UAC9D1oI,KAAK6kB,OAAO6jH,MAGd6gB,iBAAiBppJ,EAAYs1C,G,yCACjC,MAAM7nB,QAAgB5tB,KAAKV,aAAai9E,sBAGxC,GAAe,MAAX3uD,GAAoBA,EAAQuK,eAAeh4B,IAAkC,MAA3BytB,EAAQztB,GAAI25E,YAAlE,CAIA,IAAK,IAAI1hE,EAAI,EAAGA,EAAIwV,EAAQztB,GAAI25E,YAAYlpE,OAAQwH,IAC9CwV,EAAQztB,GAAI25E,YAAY1hE,GAAGjY,KAAOs1C,GACpC7nB,EAAQztB,GAAI25E,YAAY9gE,OAAOZ,EAAG,SAIhCpY,KAAK4kJ,mBACL5kJ,KAAKV,aAAam9E,oBAAoB7uD,OAGxCw5D,2BAA2BjnF,EAAYs1C,G,yCAC3C,UACQz1C,KAAKX,WAAWm2C,uBAAuBr1C,EAAIs1C,GACjD,MAAO5yC,GACP,OAAO8M,QAAQ4oD,OAAQ11D,EAAoBkkF,0BAEvC/mF,KAAKupJ,iBAAiBppJ,EAAIs1C,MAGlC8uG,sBAAsBvsH,EAAeikB,GACnC,MAAMutG,EACJxxH,EAAE2qG,WAAa3qG,EAAE2qG,UAAUnb,aAAgBxvF,EAAE2qG,UAAUnb,aAA0B,KAC7EiiC,EACJxtG,EAAE0mF,WAAa1mF,EAAE0mF,UAAUnb,aAAgBvrE,EAAE0mF,UAAUnb,aAA0B,KAE7EkiC,EAA2B,MAAbF,GAAkC,MAAbC,EACzC,OAAIC,GAAeF,EAAYC,EACtB,EAEQ,MAAbD,GAAkC,MAAbC,GAIrBC,GAAeF,EAAYC,GAHrB,EAMO,MAAbA,GAAkC,MAAbD,EAChB,EAGF,EAGTG,8BAA8B3xH,EAAeikB,GAC3C,MAAMl5C,EAAS/C,KAAKukJ,sBAAsBvsH,EAAGikB,GAC7C,OAAe,IAAXl5C,EACKA,EAGF/C,KAAKs3D,0BAALt3D,CAAgCg4B,EAAGikB,GAG5Cqb,2BACE,MAAO,CAACt/B,EAAGikB,KACT,IAAI2tG,EAAQ5xH,EAAEt3B,KACVmpJ,EAAQ5tG,EAAEv7C,KAEd,GAAa,MAATkpJ,GAA0B,MAATC,EACnB,OAAQ,EAEV,GAAa,MAATD,GAA0B,MAATC,EACnB,OAAO,EAET,GAAa,MAATD,GAA0B,MAATC,EACnB,OAAO,EAGT,MAAM9mJ,EAAS/C,KAAKb,YAAYyzE,SAC5B5yE,KAAKb,YAAYyzE,SAASC,QAAQ+2E,EAAOC,GACzCD,EAAM92E,cAAc+2E,GAExB,OAAe,IAAX9mJ,GAAgBi1B,EAAE3mB,OAAS,EAAAs4B,WAAW+O,OAASuD,EAAE5qC,OAAS,EAAAs4B,WAAW+O,MAChE31C,GAGe,MAApBi1B,EAAE2gB,MAAMf,WACVgyG,GAAS5xH,EAAE2gB,MAAMf,UAGK,MAApBqE,EAAEtD,MAAMf,WACViyG,GAAS5tG,EAAEtD,MAAMf,UAGZ53C,KAAKb,YAAYyzE,SACpB5yE,KAAKb,YAAYyzE,SAASC,QAAQ+2E,EAAOC,GACzCD,EAAM92E,cAAc+2E,KAItBC,WAAW3pJ,G,yCACf,MAAMytB,QAAgB5tB,KAAKV,aAAai9E,sBACxC,GAAe,MAAX3uD,EACF,OAGF,MAAMm8H,EAAkBviI,IACG,MAArBoG,EAAQpG,KAGZoG,EAAQpG,GAAUkiB,aAAc,IAAI35B,MAAOgwC,gBAG3B,iBAAP5/C,EACT4pJ,EAAe5pJ,GAEdA,EAAgB0Q,QAAQk5I,SAGrB/pJ,KAAK4kJ,mBACL5kJ,KAAKV,aAAam9E,oBAAoB7uD,MAGxC6sD,qBAAqBt6E,G,+CACnBH,KAAKX,WAAW67I,gBAAgB/6I,SAChCH,KAAK8pJ,WAAW3pJ,MAGlBg4E,yBAAyBuwD,G,+CACvB1oI,KAAKX,WAAW87I,qBAAqB,IAAI,EAAA9iE,wBAAwBqwD,UACjE1oI,KAAK8pJ,WAAWphB,MAGlBzuD,QACJ/wD,G,yCAEA,MAAM0E,QAAgB5tB,KAAKV,aAAai9E,sBACxC,GAAe,MAAX3uD,EACF,OAGF,MAAMo8H,EAAoBvvI,IACH,MAAjBmT,EAAQnT,EAAEta,MAGdytB,EAAQnT,EAAEta,IAAIupC,YAAc,KAC5B9b,EAAQnT,EAAEta,IAAIinC,aAAe3sB,EAAE2sB,eAG7Ble,EAAOlqB,YAAY0B,OAAS6N,MAAM7N,KACnCwoB,EAAkDrY,QAAQm5I,GAE3DA,EAAiB9gI,SAGblpB,KAAK4kJ,mBACL5kJ,KAAKV,aAAam9E,oBAAoB7uD,MAGxCssD,kBAAkB/5E,G,yCACtB,MAAMuB,QAAiB1B,KAAKX,WAAW+7I,iBAAiBj7I,SAClDH,KAAKi6E,QAAQ,CAAE95E,GAAIA,EAAIinC,aAAc1lC,EAAS0lC,kBAGhDqxC,sBAAsBiwD,G,yCAC1B,MAAMhnI,QAAiB1B,KAAKX,WAAWi8I,sBAAsB,IAAI,EAAA2O,yBAAyBvhB,IACpFwhB,EAAmD,GACzD,IAAK,MAAMhhI,KAAUxnB,EAAS6E,KAC5B2jJ,EAAS7yI,KAAK,CAAElX,GAAI+oB,EAAO/oB,GAAIinC,aAAcle,EAAOke,qBAEhDpnC,KAAKi6E,QAAQiwE,MAKP9B,0BACZ+B,EACA3iI,EACArmB,G,yCAEA,MAAMipJ,QAA2BpqJ,KAAKX,WAAW8/I,YAC/C,IAAIvlG,QAAQuwG,EAAe18I,IAAK,CAAEyvC,MAAO,cAE3C,GAAkC,MAA9BktG,EAAmBrzI,OACrB,MAAMnV,MAAM,kCAAoCwoJ,EAAmBrzI,OAAOzR,YAG5E,MAAM63C,QAAYitG,EAAmBhtG,cAC/BC,QAAer9C,KAAKa,cAAcy8C,iBAAiBH,EAAK,MACxD/6C,QAAYpC,KAAKa,cAAcwvB,UAAUlvB,GACzC0nJ,QAAoB7oJ,KAAKa,cAAcgxB,QAAQs4H,EAAe90I,SAAUjT,GAExE0mJ,QAAmB9oJ,KAAKa,cAAcsxD,WAAW/vD,GACjD81G,QAAgBl4G,KAAKa,cAAckoJ,eAAe1rG,EAAQyrG,EAAW,IAErEzrF,EAAK,IAAIC,SACf,IACE,MAAMmhB,EAAO,IAAII,KAAK,CAACq5B,EAAQ71G,QAAS,CAAEgP,KAAM,6BAChDgsD,EAAGE,OAAO,MAAOurF,EAAW,GAAGvmJ,iBAC/B86D,EAAGE,OAAO,OAAQkhB,EAAMoqE,EAAYtmJ,iBACpC,MAAOM,GACP,IAAI,EAAAf,MAAMkxF,QAAW,EAAAlxF,MAAMixF,UAWzB,MAAMlwF,EAVNw6D,EAAGE,OAAO,MAAOurF,EAAW,GAAGvmJ,iBAC/B86D,EAAGE,OACD,OACA88D,OAAO7rH,KAAK0pG,EAAQ71G,QACpB,CACE2hJ,SAAU6E,EAAYtmJ,gBACtB0hJ,YAAa,6BAQrB,UACQjkJ,KAAKX,WAAWq8I,0BACpBl0H,EACA2iI,EAAehqJ,GACfk9D,EACAl8D,GAEF,MAAO0B,GACP,MAAM,IAAIjB,MAAOiB,EAAoBkkF,wBAI3Bq+D,mBACZviB,EACAztE,EACA5uD,EACApE,G,yCAEA,MAAMq2C,EAAW,GACX3/B,EAAO9Y,KAEb,IAAK,MAAM84G,KAAQtyG,EAEZA,EAAI2xB,eAAe2gF,IAIxB,SAAW6qB,EAAS0mB,GAClB,MAAM5jJ,EAAIkJ,QAAQ2wB,UACfr/B,MAAK,KACJ,MAAMqpJ,EAAaznB,EAAcr8H,EAAIm9H,IAAYA,GACjD,OAAI2mB,GAA2B,KAAdA,EACRxxI,EAAKjY,cAAcgxB,QAAQy4H,EAAWloJ,GAExC,QAERnB,MAAM0wG,IACJ04C,EAAe1mB,GAAWhyB,KAE/Bl5D,EAASphC,KAAK5Q,GAZhB,CAaGqyG,EAAM1jD,SAGLzlD,QAAQC,IAAI6oC,MAGN4sG,kBAAkBn8H,EAAgB25G,EAAmBzgI,G,yCACjE,OAAQ8mB,EAAO7X,MACb,KAAK,EAAAs4B,WAAW+O,MAed,GAdAxvB,EAAOyvB,MAAQ,IAAI,EAAAD,MACnBxvB,EAAOyvB,MAAMykF,qBAAuByF,EAAMlqF,MAAMykF,qBAChDl0G,EAAOyvB,MAAM0kF,mBAAqBwF,EAAMlqF,MAAM0kF,yBACxCr9H,KAAKolJ,mBACTviB,EAAMlqF,MACNzvB,EAAOyvB,MACP,CACEf,SAAU,KACVgB,SAAU,KACVS,KAAM,MAERj3C,GAGsB,MAApBygI,EAAMlqF,MAAMY,KAAc,CAC5BrwB,EAAOyvB,MAAMY,KAAO,GACpB,IAAK,IAAInhC,EAAI,EAAGA,EAAIyqH,EAAMlqF,MAAMY,KAAK3oC,OAAQwH,IAAK,CAChD,MAAMk8F,EAAW,IAAI,EAAA6wB,SACrB7wB,EAASnuB,MAAQ08C,EAAMlqF,MAAMY,KAAKnhC,GAAG+tE,YAC/BnmF,KAAKolJ,mBACTviB,EAAMlqF,MAAMY,KAAKnhC,GACjBk8F,EACA,CACE96D,IAAK,MAEPp3C,GAEF8mB,EAAOyvB,MAAMY,KAAKliC,KAAKi9F,IAG3B,OACF,KAAK,EAAA3qE,WAAWi6C,WAGd,OAFA16D,EAAOi8D,WAAa,IAAI,EAAAvB,gBACxB16D,EAAOi8D,WAAW9zE,KAAOwxH,EAAM19C,WAAW9zE,MAE5C,KAAK,EAAAs4B,WAAWwlB,KAed,OAdAjmC,EAAO67D,KAAO,IAAI,EAAA51B,gBACZnvD,KAAKolJ,mBACTviB,EAAM99C,KACN77D,EAAO67D,KACP,CACE8tB,eAAgB,KAChBhjB,MAAO,KACPzB,OAAQ,KACR+kB,SAAU,KACVC,QAAS,KACTpnC,KAAM,MAER5pE,IAGJ,KAAK,EAAAunC,WAAWg6C,SA2Bd,OA1BAz6D,EAAO+7D,SAAW,IAAI,EAAAtB,oBAChB3jF,KAAKolJ,mBACTviB,EAAM59C,SACN/7D,EAAO+7D,SACP,CACEh3E,MAAO,KACPioG,UAAW,KACXE,WAAY,KACZD,SAAU,KACV0F,SAAU,KACVgH,SAAU,KACVC,SAAU,KACVh0D,KAAM,KACNxgC,MAAO,KACPigC,WAAY,KACZE,QAAS,KACTm0D,QAAS,KACTjgH,MAAO,KACPg5G,MAAO,KACPN,IAAK,KACLzjE,SAAU,KACVwjE,eAAgB,KAChBD,cAAe,MAEjB/4G,IAGJ,QACE,MAAM,IAAIR,MAAM,4BAIRylJ,gBACZ55I,EACA88I,EACAljB,EACAhK,G,yCAEA,MAAMthF,EAAWshF,EAAqB,sBAAwB5vH,EAAMA,EAEpE,IAAKzN,KAAKqkJ,mBAAmBzd,SAAS7qF,GAAW,CAC/C,IAAInuB,QAAgB5tB,KAAKymJ,sBAAsBh5I,GAC/C,IAAKmgB,EACH,OAAO,KAGT,GAAIyvG,EAAoB,CACtB,MAAMmtB,QAAkCxqJ,KAAKV,aAAamrJ,+BAM1D,GALA78H,EAAUA,EAAQtW,QACf4R,GACCA,EAAOyvB,MAAM0kF,oBACuB,MAAnCn0G,EAAOyvB,MAAM0kF,qBAA4D,IAA9BmtB,IAEzB,IAAnB58H,EAAQhd,OACV,OAAO,KAIX5Q,KAAKqkJ,mBAAmBxd,WAAW9qF,EAAUnuB,GAG/C,OAAIy5G,EACKrnI,KAAKqkJ,mBAAmBpd,gBAAgBlrF,GACtCwuG,EACFvqJ,KAAKqkJ,mBAAmBrd,YAAYjrF,GAEpC/7C,KAAKqkJ,mBAAmBnd,QAAQnrF,MAI7BstG,2BAA2Bp+I,G,+CACjCjL,KAAKV,aAAam9E,oBAAoB,KAAM,CAAExxE,OAAQA,OAGhD45I,2BAA2B55I,G,+CACjCjL,KAAKV,aAAaqlJ,oBAAoB,KAAM,CAAE15I,OAAQA,IAC5DjL,KAAK0qJ,wBAGCA,qBACN1qJ,KAAKqkJ,mBAAmBp0I,SAj7B1B,GADC,EAAA06I,eAAc,IAAM,oB,wHAlRvB,mB,8aC9CA,iBACA,WACA,WACA,WAEA,WAIA,0BACE3rJ,YACU6B,EACA1B,EACAG,GAFA,KAAAuB,cAAAA,EACA,KAAA1B,YAAAA,EACA,KAAAG,aAAAA,EAGJslJ,WAAW35I,G,+CACTjL,KAAKV,aAAasrJ,wBAAwB,KAAM,CAAE3/I,OAAQA,OAG5D4mB,QAAQgxG,G,yCACZ,GAA4B,MAAxBA,EAAM1hI,eACR,MAAM,IAAIS,MAAM,sCAElB,MAAMQ,QAAYpC,KAAKa,cAAcwvB,UAAUwyG,EAAM1hI,gBACrD,GAAW,MAAPiB,EACF,MAAM,IAAIR,MAAM,8CAElB,MAAMwpB,EAAa,IAAI,EAAAnG,WAKvB,OAJAmG,EAAWjrB,GAAK0iI,EAAM1iI,GACtBirB,EAAWjqB,eAAiB0hI,EAAM1hI,eAClCiqB,EAAWnM,SAAW4jH,EAAM5jH,SAC5BmM,EAAW1qB,WAAaV,KAAKa,cAAcgxB,QAAQgxG,EAAMniI,KAAM0B,GACxDgpB,KAGHjG,YAAYpB,G,yCAChB,GAAmB,MAAfA,EACF,MAAO,GAET,MAAM8mI,EAAmC,GACnCpyG,EAA2B,GAKjC,OAJA10B,EAAYlT,SAASua,IACnBqtB,EAASphC,KAAK+T,EAAWizB,UAAUp9C,MAAMwZ,GAAMowI,EAAexzI,KAAKoD,eAE/D9K,QAAQC,IAAI6oC,GACXoyG,EAAe3zI,KAAK,EAAApV,MAAMqV,gBAAgBnX,KAAKb,YAAa,YAG/DqX,IAAIrW,G,yCACR,MAAM4jB,QAAoB/jB,KAAKV,aAAao9E,0BAE5C,OAAmB,MAAf34D,GAAwBA,EAAYoU,eAAeh4B,GAIhD,IAAI,EAAA8kB,WAAWlB,EAAY5jB,IAHzB,QAMLib,S,yCACJ,MAAM2I,QAAoB/jB,KAAKV,aAAao9E,0BACtCh7E,EAAyB,GAC/B,IAAK,MAAMvB,KAAM4jB,EAEXA,EAAYoU,eAAeh4B,IAC7BuB,EAAS2V,KAAK,IAAI,EAAA4N,WAAWlB,EAAY5jB,KAG7C,OAAOuB,KAGHm0C,kB,yCACJ,IAAIi1G,QAA6B9qJ,KAAKV,aAAayrJ,0BACnD,GAA4B,MAAxBD,EACF,OAAOA,EAIT,WADqB9qJ,KAAKa,cAAcylJ,UAEtC,MAAM,IAAI1kJ,MAAM,WAGlB,MAAMmiB,QAAoB/jB,KAAKob,SAG/B,OAFA0vI,QAA6B9qJ,KAAKmlB,YAAYpB,SACxC/jB,KAAKV,aAAasrJ,wBAAwBE,GACzCA,KAGHzlI,aAAatB,EAAgC,M,yCAC9B,MAAfA,IACFA,QAAoB/jB,KAAK61C,mBAE3B,MAAM3xB,EAAoC,GAQ1C,OAPAH,EAAYlT,SAAS4J,IACnB,MAAMuwI,EAAiB,IAAI,EAAA51C,eAC3B41C,EAAe7qJ,GAAKsa,EAAEta,GACtB6qJ,EAAe7pJ,eAAiBsZ,EAAEtZ,eAClC,MAAMunF,EAAkB,MAAVjuE,EAAE/Z,KAAe+Z,EAAE/Z,KAAKC,QAAQ,aAAc,IAAIwG,MA1F7C,KA0FuE,GAC1F,EAAA0xH,aAAaM,eAAej1G,EAAO,EAAGwkE,EAAOsiE,EAAgB,KA3F1C,QA6Fd9mI,KAGH+mI,UAAU9qJ,G,yCACd,MAAM4jB,QAAoB/jB,KAAKqlB,eAC/B,OAAO,EAAAwzG,aAAaQ,kBAAkBt1G,EAAa5jB,MAG/C+nJ,OAAO98H,G,yCACX,IAAIrH,QAAoB/jB,KAAKV,aAAao9E,0BAK1C,GAJmB,MAAf34D,IACFA,EAAc,IAGZqH,aAAsB,EAAAlG,eAAgB,CACxC,MAAMzK,EAAI2Q,EACVrH,EAAYtJ,EAAEta,IAAMsa,OAEnB2Q,EAAgCva,SAAS4J,IACxCsJ,EAAYtJ,EAAEta,IAAMsa,WAIlBza,KAAKW,QAAQojB,MAGfpjB,QAAQojB,G,+CACN/jB,KAAK4kJ,mBACL5kJ,KAAKV,aAAaq9E,wBAAwB54D,MAG5C9T,MAAMhF,G,+CACJjL,KAAK4kJ,WAAW35I,SAChBjL,KAAKV,aAAaq9E,wBAAwB,KAAM,CAAE1xE,OAAQA,OAG5D4Z,OAAO1kB,G,yCACX,MAAM4jB,QAAoB/jB,KAAKV,aAAao9E,0BACzB,MAAf34D,IAIc,iBAAP5jB,SACF4jB,EAAY5jB,GAElBA,EAAgB0Q,SAASuH,WACjB2L,EAAY3L,YAIjBpY,KAAKW,QAAQojB,U,yGC1JvB,iBAGA,WAEA,0BAGE/kB,YACYqjE,EACA/qD,EAA2C,MAD3C,KAAA+qD,MAAAA,EACA,KAAA/qD,OAAAA,EAJF,KAAA4zI,UAA2C,IAAIp1I,IAOzD6iD,MAAMtrD,GACCrN,KAAKqiE,OAGVriE,KAAK+rE,MAAM,EAAAkkC,aAAak7C,MAAO99I,GAGjCsM,KAAKtM,GACHrN,KAAK+rE,MAAM,EAAAkkC,aAAam7C,KAAM/9I,GAGhCymB,QAAQzmB,GACNrN,KAAK+rE,MAAM,EAAAkkC,aAAao7C,QAASh+I,GAGnCvK,MAAMuK,GACJrN,KAAK+rE,MAAM,EAAAkkC,aAAaruG,MAAOyL,GAGjC0+D,MAAMu/E,EAAqBj+I,GACzB,GAAmB,MAAfrN,KAAKsX,SAAkBtX,KAAKsX,OAAOg0I,GAIvC,OAAQA,GACN,KAAK,EAAAr7C,aAAak7C,MAIlB,KAAK,EAAAl7C,aAAam7C,KAEhBrqF,QAAQoO,IAAI9hE,GACZ,MACF,KAAK,EAAA4iG,aAAao7C,QAEhBtqF,QAAQuf,KAAKjzE,GACb,MACF,KAAK,EAAA4iG,aAAaruG,MAEhBm/D,QAAQj+D,MAAMuK,IAOpBg6G,KAAK1mD,EAAQ,WACN3gE,KAAKkrJ,UAAU70I,IAAIsqD,IACtB3gE,KAAKkrJ,UAAUj0I,IAAI0pD,EAAO4qF,KAI9BC,QAAQ7qF,EAAQ,WACd,MAAM8qF,EAAUF,EAAOvrJ,KAAKkrJ,UAAU10I,IAAImqD,IAG1C,OAFA3gE,KAAKkrJ,UAAUrmI,OAAO87C,GACtB3gE,KAAK+rE,MAAM,EAAAkkC,aAAam7C,KAAM,GAAGzqF,MAAuB,IAAb8qF,EAAQ,GAAYA,EAAQ,GAAK,SACrEA,K,qGCnEX,yBACEzsJ,YAAoB6B,GAAA,KAAAA,cAAAA,EAGpBynD,eAAenB,GACbnnD,KAAK0rJ,eAAevkG,GAGtBukG,eAAep3F,GACRA,EAAOguE,4BACVhuE,EAAOguE,0BAA4BtiI,MAIvCuiI,mBACE,OAAOviI,KAAKa,iB,84BCjBhB,iBAOA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAKA,MAAa8qD,EACX3sD,YACUuF,EACEnE,EACAW,EACAzB,GAHF,KAAAiF,sBAAAA,EACE,KAAAnE,oBAAAA,EACA,KAAAW,WAAAA,EACA,KAAAzB,aAAAA,EAGN0yF,OAAO5vF,EAAyB6I,G,+CAC9BjL,KAAKV,aAAaqsJ,mBAAmBvpJ,EAAK,CAAE6I,OAAQA,UACpDjL,KAAK4rJ,SAASxpJ,EAAK6I,MAGrBkmF,WAAW06D,G,+CACT7rJ,KAAKV,aAAa6xF,WAAW06D,MAG/BvuD,UAAUt7F,G,yCACA,MAAVA,UAIEhC,KAAKV,aAAawsJ,+BAA+B,YACjD9rJ,KAAKV,aAAaysJ,+BAA+B/pJ,OAGnDu7F,iBAAiBlrC,G,yCACA,MAAjBA,UAIEryD,KAAKV,aAAa0sJ,uBAAuB,YACzChsJ,KAAKV,aAAa2sJ,uBAAuB55F,OAG3C65F,WACJ/wI,EACAgxI,G,yCAEA,MAAM5rI,EAAe,GACrBpF,EAAKtK,SAAS1L,IACZob,EAAQpb,EAAIhF,IAAMgF,EAAI/C,OAGxB,IAAK,MAAMgqJ,KAAeD,EAAc,CAEtC,MAAMpvF,QAAoB/8D,KAAKg9D,eAAeovF,EAAY94H,YACpDyH,QAAiB/6B,KAAK86B,eAAe,IAAI,EAAAtJ,UAAU46H,EAAYhqJ,KAAM26D,GAC3Ex8C,EAAQ6rI,EAAYjsJ,WAAaH,KAAKmC,WAAW44B,IAAWx4B,gBAI9D,aADMvC,KAAKV,aAAa+sJ,6BAA6B,YACxCrsJ,KAAKV,aAAagtJ,6BAA6B/rI,MAGxDgsI,gBAAgBxvI,G,yCACpB,MAAM8kH,EAAoB,GAM1B,OALA9kH,EAAUlM,SAASvG,IACjBu3H,EAAav3H,EAASnK,IAAMmK,EAASlI,aAGjCpC,KAAKV,aAAaktJ,yBAAyB,YACpCxsJ,KAAKV,aAAamtJ,yBAAyB5qB,MAGpDh5F,OAAO6jH,EAA8BzhJ,G,yCACzC,MAAM0hJ,QAAoB3sJ,KAAKV,aAAastJ,mBAAmB,CAAE3hJ,OAAQA,IAEzE,GAAmB,MAAf0hJ,EACF,OAAOA,EAGTD,IAAAA,EAAc,EAAAh7D,iBAAiB6vD,MAC/B,MAAMsL,QAAqB7sJ,KAAK8sJ,kBAAkBJ,EAAWzhJ,GAO7D,OALoB,MAAhB4hJ,GAEF7sJ,KAAKgyF,OAAO66D,EAAc5hJ,GAGrB4hJ,KAGHC,kBACJJ,EACAzhJ,G,yCAEA,MAAM7I,QAAYpC,KAAK+sJ,uBAAuBL,EAAWzhJ,GACzD,GAAW,MAAP7I,EAAa,CACf,MAAMyqJ,EAAe,IAAI,EAAA3xH,mBAAmB,EAAAp5B,MAAMC,eAAeK,GAAKC,QAEtE,aAAYrC,KAAKgtJ,YAAYH,IAMtBA,GALL7sJ,KAAKe,WAAW+yB,QAAQ,6CAClB9zB,KAAKitJ,oBAAoBhiJ,GACxB,MAKX,OAAO,QAGH0lF,a,yCACJ,aAAa3wF,KAAKV,aAAaqxF,gBAG3BC,wBAAwB3qF,EAAwB7D,G,yCACpD,MAAM8qJ,QAAsBltJ,KAAK2wF,aACjC,GAAsB,MAAlB1qF,GAA2C,MAAjBinJ,EAAuB,CACnD,MAAMj8D,QAAqBjxF,KAAK6H,aAC9B5B,EACA7D,EACA,EAAA0uF,YAAYI,oBAEd,GAAoB,MAAhBD,GAAwBi8D,IAAkBj8D,EAC5C,OAAO,EAIT,MAAMJ,QAAsB7wF,KAAK6H,aAC/B5B,EACA7D,EACA,EAAA0uF,YAAYC,qBAEd,GAAqB,MAAjBF,GAAyBq8D,IAAkBr8D,EAE7C,aADM7wF,KAAKmxF,WAAWF,IACf,EAIX,OAAO,KAIThvF,UAAUG,EAA0B,MAClC,OAAOpC,KAAKmtJ,gBAAgB/qJ,GAGxBgrJ,e,yCACJ,MAAMC,QAA0BrtJ,KAAKV,aAAa8tJ,eAClD,GAAyB,MAArBC,EACF,OAAOA,EAGT,MAAMr3H,QAAmBh2B,KAAKoyD,gBAC9B,GAAkB,MAAdp8B,EACF,OAAO,KAGT,MAAMn0B,QAAkB7B,KAAKuE,sBAAsB+oJ,oBAAoBt3H,GAEvE,aADMh2B,KAAKV,aAAaiuJ,aAAa1rJ,GAC9BA,KAGHuwD,gB,yCACJ,MAAMo7F,QAA4BxtJ,KAAKV,aAAamuJ,yBACpD,GAA2B,MAAvBD,EACF,OAAOA,EAGT,MAAMn7F,QAAsBryD,KAAKV,aAAaouJ,yBAC9C,GAAqB,MAAjBr7F,EACF,OAAO,KAGT,MAAMr8B,QAAmBh2B,KAAK86B,eAAe,IAAI,EAAAtJ,UAAU6gC,GAAgB,MAE3E,aADMryD,KAAKV,aAAa0sJ,uBAAuBh2H,GACxCA,KAGHtc,eAAezO,EAAgBpJ,G,yCAInC,GAHiB,MAAbA,IACFA,QAAkB7B,KAAKotJ,gBAEP,OAAdvrJ,EACF,MAAM,IAAID,MAAM,4BAElB,MAAM+rJ,QAAuB3tJ,KAAKuE,sBAAsBwoB,KAAKlrB,EAAW,UAClE+rJ,QAAwB5tJ,KAAKuE,sBAAsBspJ,WACvDF,EACA1iJ,EACA,GACA,UAEF,OAAOjL,KAAK8tJ,WAAWF,MAInBG,a,yCACJ,MAAMxtI,EAA2C,IAAIzK,IAC/Ck4I,QAAkChuJ,KAAKV,aAAa2uJ,+BAC1D,GAAiC,MAA7BD,GAAqCA,EAA0B90G,KAAO,EACxE,OAAO80G,EAGT,MAAME,QAAmBluJ,KAAKV,aAAa6uJ,+BAC3C,GAAkB,MAAdD,EACF,OAAO,KAGT,IAAIl8D,GAAS,EAEb,IAAK,MAAMlpE,KAASolI,EAAY,CAE9B,IAAKA,EAAW/1H,eAAerP,GAC7B,SAGF,MAAMiS,QAAiB/6B,KAAKg7B,WAAWkzH,EAAWplI,IAClDvI,EAAQtJ,IAAI6R,EAAO,IAAI,EAAAoS,mBAAmBH,IAC1Ci3D,GAAS,EAOX,OAJIA,UACIhyF,KAAKV,aAAa+sJ,6BAA6B9rI,IAGhDA,KAGH8P,UAAUvH,G,yCACd,GAAa,MAATA,EACF,OAAO,KAGT,MAAMvI,QAAgBvgB,KAAK+tJ,aAC3B,OAAe,MAAXxtI,GAAoBA,EAAQlK,IAAIyS,GAI7BvI,EAAQ/J,IAAIsS,GAHV,QAOLslI,kB,yCACJ,MAAMvsB,EAAgD,IAAI/rH,IACpDu4I,QAA8BruJ,KAAKV,aAAagvJ,2BACtD,GAA6B,MAAzBD,GAAiCA,EAAsBn1G,KAAO,EAChE,OAAOm1G,EAGT,MAAME,QAAwBvuJ,KAAKV,aAAakvJ,2BAChD,GAAuB,MAAnBD,EACF,OAAO,KAGT,IAAIv8D,GAAS,EAEb,IAAK,MAAMlpE,KAASylI,EAAiB,CAEnC,IAAKA,EAAgBp2H,eAAerP,GAClC,SAGF,MAAMiS,QAAiB/6B,KAAKg7B,WAAWuzH,EAAgBzlI,IACvD+4G,EAAa5qH,IAAI6R,EAAO,IAAI,EAAAoS,mBAAmBH,IAC/Ci3D,GAAS,EAOX,OAJIA,UACIhyF,KAAKV,aAAaktJ,yBAAyB3qB,IAG5CA,KAGH7kE,eAAe1pC,G,yCACnB,GAAkB,MAAdA,EACF,OAAO,KAGT,MAAMuuG,QAAqB7hI,KAAKouJ,kBAChC,OAAoB,MAAhBvsB,GAAyBA,EAAaxrH,IAAIid,GAIvCuuG,EAAarrH,IAAI8c,GAHf,QAMLgzH,S,yCACJ,aACStmJ,KAAKyhJ,0BACLzhJ,KAAKsyF,aAAa,EAAAZ,iBAAiB6vD,eACnCvhJ,KAAKsyF,aAAa,EAAAZ,iBAAiBC,eAIxC8vD,eAAex2I,G,yCACnB,OAA2E,aAA7DjL,KAAKV,aAAastJ,mBAAmB,CAAE3hJ,OAAQA,QAGzDqnF,aAAao6D,EAA6BzhJ,G,yCAC9C,OAAQyhJ,GACN,KAAK,EAAAh7D,iBAAiB6vD,KACpB,OAA+E,aAAjEvhJ,KAAKV,aAAamvJ,uBAAuB,CAAExjJ,OAAQA,KACnE,KAAK,EAAAymF,iBAAiBC,UACpB,OAAqF,WAAvE3xF,KAAKV,aAAaovJ,4BAA4B,CAAEzjJ,OAAQA,KACxE,QACE,OAAO,MAIPsc,Y,yCACJ,OAAqE,aAAvDvnB,KAAKV,aAAaqvJ,qCAG5BC,SAASC,GAAqB,EAAM5jJ,G,+CAClCjL,KAAKV,aAAaqsJ,mBAAmB,KAAM,CAAE1gJ,OAAQA,UACrDjL,KAAKV,aAAawvJ,gBAAgB,KAAM,CAAE7jJ,OAAQA,IACpD4jJ,UACI7uJ,KAAKitJ,oBAAoBhiJ,OAI7B8jJ,eAAerC,G,yCACnBA,IAAc,EAAAh7D,iBAAiB6vD,WACrBvhJ,KAAKV,aAAa0vJ,uBAAuB,YACzChvJ,KAAKV,aAAa2vJ,4BAA4B,SAGpDC,aAAajkJ,G,yCACjB,aAAajL,KAAKV,aAAa6xF,WAAW,KAAM,CAAElmF,OAAQA,OAGtDkkJ,YAAYC,EAAsBnkJ,G,+CAChCjL,KAAKV,aAAawsJ,+BAA+B,KAAM,CAAE7gJ,OAAQA,IAClEmkJ,UACGpvJ,KAAKV,aAAaysJ,+BAA+B,KAAM,CAAE9gJ,OAAQA,QAIrEokJ,aAAaD,EAAsBnkJ,G,yCACvC,MAAMqkJ,EAA+B,CACnCtvJ,KAAKV,aAAa0sJ,uBAAuB,KAAM,CAAE/gJ,OAAQA,IACzDjL,KAAKV,aAAaiuJ,aAAa,KAAM,CAAEtiJ,OAAQA,KAKjD,OAHKmkJ,GACHE,EAAYj4I,KAAKrX,KAAKV,aAAa2sJ,uBAAuB,KAAM,CAAEhhJ,OAAQA,KAErE0E,QAAQC,IAAI0/I,MAGfC,aAAaH,EAAsBnkJ,G,+CACjCjL,KAAKV,aAAa+sJ,6BAA6B,KAAM,CAAEphJ,OAAQA,IAChEmkJ,UACGpvJ,KAAKV,aAAagtJ,6BAA6B,KAAM,CAAErhJ,OAAQA,QAInEukJ,kBAAkBJ,EAAsBnkJ,G,+CACtCjL,KAAKV,aAAaktJ,yBAAyB,KAAM,CAAEvhJ,OAAQA,IAC5DmkJ,UACGpvJ,KAAKV,aAAamtJ,yBAAyB,KAAM,CAAExhJ,OAAQA,QAI/DwkJ,qBAAqBxkJ,G,yCACzB,aAAajL,KAAKV,aAAaowJ,yBAAyB,KAAM,CAAEzkJ,OAAQA,OAGpE+E,UAAU/E,G,+CACRjL,KAAK4uJ,UAAS,EAAM3jJ,SACpBjL,KAAKkvJ,aAAajkJ,SAClBjL,KAAKuvJ,cAAa,EAAOtkJ,SACzBjL,KAAKwvJ,mBAAkB,EAAOvkJ,SAC9BjL,KAAKmvJ,aAAY,EAAOlkJ,SACxBjL,KAAKqvJ,cAAa,EAAOpkJ,SACzBjL,KAAKyvJ,qBAAqBxkJ,MAG5B0kJ,Y,yCACJ,MAAMvtJ,QAAYpC,KAAK6oC,eAEjB7oC,KAAKgyF,OAAO5vF,MAGdg5B,QACJwd,EACAy/D,EACA59E,EACAC,G,yCAEA,IAAIt4B,EAAmB,KACvB,GAAW,MAAPq4B,GAAeA,IAAQ,EAAA22B,QAAQC,cAQjC,MAAM,IAAIzvD,MAAM,gBAPhB,GAAqB,MAAjB84B,EACFA,EAAgB,SACX,GAAIA,EAAgB,IACzB,MAAM,IAAI94B,MAAM,qCAMpB,OAJEQ,QAAYpC,KAAKuE,sBAAsBs5C,OAAOjF,EAAUy/D,EAAM,SAAU39E,GAInE,IAAI,EAAAQ,mBAAmB94B,MAG1BiuF,eACJP,EACAuoB,EACA59E,EACAC,EACAk1H,EAA4B,M,yCAE5B,GAAsB,MAAlBA,EAAwB,CAC1B,MAAMC,QAAwB7vJ,KAAKV,aAAawwJ,2BAChD,GAAuB,MAAnBD,EACF,MAAM,IAAIjuJ,MAAM,+BAElBguJ,EAAiB,IAAI,EAAAp+H,UAAUq+H,GAEjC,MAAMx+D,QAAerxF,KAAKsxF,WAAWxB,EAAKuoB,EAAM59E,EAAKC,GAC/CmiB,QAAe78C,KAAK86B,eAAe80H,EAAgBv+D,GACzD,OAAO,IAAI,EAAAn2D,mBAAmB2hB,MAG1B0e,e,yCACJ,MAAMD,QAAiBt7D,KAAKuE,sBAAsBwrJ,YAAY,IACxDluJ,QAAkB7B,KAAKotJ,eAE7B,MAAO,OADmBptJ,KAAKmC,WAAWm5D,EAAUz5D,GAC/B,IAAI,EAAAq5B,mBAAmBogC,OAGxCzlC,YAAYzzB,G,yCAChB,MAAM4tJ,QAAgBhwJ,KAAKuE,sBAAsB0rJ,mBAAmB,MAGpE,MAAO,CAFW,EAAAnuJ,MAAMi8C,gBAAgBiyG,EAAQ,UACvBhwJ,KAAK6xB,QAAQm+H,EAAQ,GAAI5tJ,OAI9CkvF,WACJxB,EACAuoB,EACA59E,EACAC,G,yCAEA,MAAM22D,QAAerxF,KAAKo7B,QAAQ00D,EAAKuoB,EAAM59E,EAAKC,GAClD,aAAa16B,KAAKkwJ,WAAW7+D,MAGzBjzC,YAAY+xG,G,yCAChB,MAAMC,QAAgBpwJ,KAAKuE,sBAAsB8rJ,KAC/CF,EACA,iBACA,OACA,GACA,UAEF,OAAO,IAAI,EAAAj1H,mBAAmBk1H,MAG1BvoJ,aACJ+wC,EACAx2C,EACAkuJ,G,yCAKA,GAHW,MAAPluJ,IACFA,QAAYpC,KAAK6oC,UAEH,MAAZ+P,GAA2B,MAAPx2C,EACtB,MAAM,IAAIR,MAAM,uBAGlB,MAAM2uJ,EAAaD,IAAgB,EAAAx/D,YAAYI,mBAAqB,EAAI,EAClEnkE,QAAa/sB,KAAKuE,sBAAsBs5C,OAAOz7C,EAAIA,IAAKw2C,EAAU,SAAU23G,GAClF,OAAO,EAAAzuJ,MAAMi8C,gBAAgBhxB,MAGzBolC,WAAW/vD,G,yCACf,MAAMouJ,QAAexwJ,KAAKywJ,oBAAoBruJ,GACxCJ,QAAehC,KAAKuE,sBAAsBwrJ,YAAY,IAC5D,OAAO/vJ,KAAK0wJ,YAAYF,EAAQxuJ,MAG5Bu5B,aACJn5B,EACAJ,G,yCAKA,OAHc,MAAVA,IACFA,QAAehC,KAAKiC,aAEfjC,KAAK0wJ,YAAYtuJ,EAAKJ,EAAOI,QAGhCyvB,QAAQ8+H,EAAkCvuJ,G,yCAC9C,GAAkB,MAAduuJ,EACF,OAAOhhJ,QAAQ2wB,QAAQ,MAGzB,IAAIswH,EAEFA,EADwB,iBAAfD,EACE,EAAA7uJ,MAAM05H,gBAAgBm1B,GAAYtuJ,OAElCsuJ,EAGb,MAAME,QAAe7wJ,KAAK8wJ,WAAWF,EAAUxuJ,GACzC0hI,EAAK,EAAAhiI,MAAMi8C,gBAAgB8yG,EAAO/sB,IAClCv9H,EAAO,EAAAzE,MAAMi8C,gBAAgB8yG,EAAOtqJ,MACpCw9H,EAAoB,MAAd8sB,EAAO9sB,IAAc,EAAAjiI,MAAMi8C,gBAAgB8yG,EAAO9sB,KAAO,KACrE,OAAO,IAAI,EAAAvyG,UAAUq/H,EAAOzuJ,IAAI4hI,QAASz9H,EAAMu9H,EAAIC,MAG/CglB,eAAe4H,EAAyBvuJ,G,yCAC5C,MAAM2uJ,QAAiB/wJ,KAAK8wJ,WAAWH,EAAYvuJ,GACnD,IAAI4uJ,EAAS,EACO,MAAhBD,EAAShtB,MACXitB,EAASD,EAAShtB,IAAIlJ,YAGxB,MAAMo2B,EAAW,IAAI72B,WAAW,EAAI22B,EAASjtB,GAAGjJ,WAAam2B,EAASD,EAASxqJ,KAAKs0H,YAQpF,OAPAo2B,EAASh6I,IAAI,CAAC85I,EAAS3uJ,IAAI4hI,UAC3BitB,EAASh6I,IAAI,IAAImjH,WAAW22B,EAASjtB,IAAK,GACtB,MAAhBitB,EAAShtB,KACXktB,EAASh6I,IAAI,IAAImjH,WAAW22B,EAAShtB,KAAM,EAAIgtB,EAASjtB,GAAGjJ,YAG7Do2B,EAASh6I,IAAI,IAAImjH,WAAW22B,EAASxqJ,MAAO,EAAIwqJ,EAASjtB,GAAGjJ,WAAam2B,GAClE,IAAI,EAAAE,eAAeD,EAAS5uJ,WAG/BF,WAAWoE,EAAmB1E,G,yCAIlC,GAHiB,MAAbA,IACFA,QAAkB7B,KAAKotJ,gBAER,MAAbvrJ,EACF,MAAM,IAAID,MAAM,2BAGlB,MAAMqvJ,QAAiBjxJ,KAAKuE,sBAAsBpC,WAAWoE,EAAM1E,EAAW,QAC9E,OAAO,IAAI,EAAA2vB,UAAU,EAAAo+E,eAAe40B,qBAAsB,EAAA1iI,MAAMi8C,gBAAgBkzG,OAG5Ej2H,WAAW+1H,EAAkBI,G,yCACjC,MAAMjtB,EAAe6sB,EAAS5pJ,MAAM,KACpC,IACIg9H,EADAH,EAA0B,KAG9B,GAA4B,IAAxBE,EAAatzH,OACfozH,EAAU,EAAAp0B,eAAe20B,uBACzBJ,EAAY,CAACD,EAAa,SACrB,GAA4B,IAAxBA,EAAatzH,OACtB,IACEozH,EAAU72G,SAAS+2G,EAAa,GAAI,MACpCC,EAAYD,EAAa,GAAG/8H,MAAM,KAClC,MAAOtE,GACP7C,KAAKe,WAAW+B,MAAMD,GAI1B,OAAQmhI,GACN,KAAK,EAAAp0B,eAAe20B,uBACpB,KAAK,EAAA30B,eAAe40B,qBACpB,KAAK,EAAA50B,eAAewhD,kCACpB,KAAK,EAAAxhD,eAAeyhD,gCAClB,MACF,QACE,MAAM,IAAIzvJ,MAAM,wBAGpB,GAAiB,MAAbuiI,GAAqBA,EAAUvzH,QAAU,EAC3C,MAAM,IAAIhP,MAAM,0BAGlB,MAAM2E,EAAO,EAAAzE,MAAMC,eAAeoiI,EAAU,IAAI9hI,OAC1C2zB,EAAam7H,MAAAA,EAAAA,QAA0BnxJ,KAAKoyD,gBAClD,GAAkB,MAAdp8B,EACF,MAAM,IAAIp0B,MAAM,mBAGlB,IAAI0vJ,EAAyB,OAC7B,OAAQttB,GACN,KAAK,EAAAp0B,eAAe20B,uBACpB,KAAK,EAAA30B,eAAewhD,kCAClBE,EAAM,SACN,MACF,KAAK,EAAA1hD,eAAe40B,qBACpB,KAAK,EAAA50B,eAAeyhD,gCAClB,MACF,QACE,MAAM,IAAIzvJ,MAAM,wBAGpB,OAAO5B,KAAKuE,sBAAsBy2B,WAAWz0B,EAAMyvB,EAAYs7H,MAG3Dx2H,eAAey2H,EAAsBnvJ,G,yCACzC,MAAM0hI,EAAK,EAAAhiI,MAAMC,eAAewvJ,EAAUztB,IAAIzhI,OACxCkE,EAAO,EAAAzE,MAAMC,eAAewvJ,EAAUhrJ,MAAMlE,OAC5C0hI,EAAMwtB,EAAUxtB,IAAM,EAAAjiI,MAAMC,eAAewvJ,EAAUxtB,KAAK1hI,OAAS,KACnEmvJ,QAAiBxxJ,KAAKyxJ,kBAAkBF,EAAUttB,eAAgB19H,EAAMu9H,EAAIC,EAAK3hI,GACvF,OAAgB,MAAZovJ,EACK,KAGFA,KAGHjgI,cAAcggI,EAAsBnvJ,G,yCACxC,aAAapC,KAAK0xJ,iBAChBH,EAAUttB,eACVstB,EAAUhrJ,KACVgrJ,EAAUztB,GACVytB,EAAUxtB,IACV3hI,MAIEk7C,iBAAiBq0G,EAAqBvvJ,G,yCAC1C,GAAc,MAAVuvJ,EACF,MAAM,IAAI/vJ,MAAM,cAGlB,MAAMqvJ,EAAW,IAAI72B,WAAWu3B,GAC1B3tB,EAAUitB,EAAS,GACzB,IAAIW,EAAsB,KACtBC,EAAsB,KACtBC,EAAuB,KAE3B,OAAQ9tB,GACN,KAAK,EAAAp0B,eAAew0B,yBACpB,KAAK,EAAAx0B,eAAe00B,yBAClB,GAAI2sB,EAASrgJ,QAAU,GAErB,OAAO,KAGTihJ,EAAUZ,EAASr5I,MAAM,EAAG,IAC5Bk6I,EAAWb,EAASr5I,MAAM,GAAI,IAC9Bg6I,EAAUX,EAASr5I,MAAM,IACzB,MACF,KAAK,EAAAg4F,eAAey0B,cAClB,GAAI4sB,EAASrgJ,QAAU,GAErB,OAAO,KAGTihJ,EAAUZ,EAASr5I,MAAM,EAAG,IAC5Bg6I,EAAUX,EAASr5I,MAAM,IACzB,MACF,QACE,OAAO,KAGX,aAAa5X,KAAKyxJ,kBAChBztB,EACA4tB,EAAQvvJ,OACRwvJ,EAAQxvJ,OACI,MAAZyvJ,EAAmBA,EAASzvJ,OAAS,KACrCD,MAME2vJ,aAAaC,EAAaxhF,G,yCAC9B,IAAIyhF,EAAO,EACX,MAAMC,EAAQ1hF,EAAMwhF,EAAM,EACpBG,EAAarqH,KAAK66G,KAAK76G,KAAKsqH,KAAKF,IACvC,GAAIC,EAAa,GACf,MAAM,IAAIvwJ,MAAM,mDAGlB,MAAMywJ,EAAcvqH,KAAK66G,KAAKwP,EAAa,GACrCG,EAAOxqH,KAAKyqH,IAAI,EAAGJ,GAAc,EAIjCK,EAAY,IAAIp4B,iBAAiBp6H,KAAKuE,sBAAsBwrJ,YAAYsC,IAE9E,IAAI5rJ,EAAwB,GAAnB4rJ,EAAc,GACvB,IAAK,IAAIj6I,EAAI,EAAGA,EAAIi6I,EAAaj6I,IAC/B65I,GAAQO,EAAUp6I,GAAK0vB,KAAKyqH,IAAI,EAAG9rJ,GACnCA,GAAK,EAMP,OAFAwrJ,GAAcK,EAEVL,GAAQC,EAEHlyJ,KAAK+xJ,aAAaC,EAAKxhF,GAIzBwhF,EAAMC,KAGTjF,YAAY5qJ,G,yCAChB,IACE,MAAMiwD,QAAsBryD,KAAKV,aAAaouJ,yBACxC1rJ,QAAehC,KAAKmtJ,gBAAgB/qJ,GAC1C,GAAqB,MAAjBiwD,GAAmC,MAAVrwD,EAC3B,OAAO,EAGT,MAAMg0B,QAAmBh2B,KAAK86B,eAAe,IAAI,EAAAtJ,UAAU6gC,GAAgBrwD,SACrEhC,KAAKuE,sBAAsB+oJ,oBAAoBt3H,GACrD,MAAOnzB,GACP,OAAO,EAGT,OAAO,KAIO+oJ,SAASxpJ,EAAyB6I,G,gDACtCjL,KAAKyyJ,eAAe,EAAA/gE,iBAAiB6vD,KAAMt2I,UAC7CjL,KAAKV,aAAa0vJ,uBAAuB5sJ,EAAIwlI,OAAQ,CAAE38H,OAAQA,WACtDjL,KAAKyyJ,eAAe,EAAA/gE,iBAAiBC,UAAW1mF,UACzDjL,KAAKV,aAAa2vJ,4BAA4B7sJ,EAAIwlI,OAAQ,CAAE38H,OAAQA,WAEpEjL,KAAKV,aAAa0vJ,uBAAuB,KAAM,CAAE/jJ,OAAQA,UACzDjL,KAAKV,aAAa2vJ,4BAA4B,KAAM,CAAEhkJ,OAAQA,QAIxDwnJ,eAAe/F,EAA6BzhJ,G,yCAC1D,IAAIwnJ,GAAiB,EACrB,GAAI/F,IAAc,EAAAh7D,iBAAiB6vD,KAAM,CAEvCkR,EAAiC,aADNzyJ,KAAKV,aAAaojE,gBAAgB,CAAEz3D,OAAQA,UAElE,GAAIyhJ,IAAc,EAAAh7D,iBAAiBC,UAAW,CAEnD8gE,SAD8BzyJ,KAAKV,aAAaozJ,mBAAmB,CAAEznJ,OAAQA,MACzCjL,KAAKI,oBAAoBsgF,wBAE/D,OAAO+xE,KAGO1F,uBAAuBL,EAA6BzhJ,G,yCAClE,OAAOyhJ,IAAc,EAAAh7D,iBAAiB6vD,WAC5BvhJ,KAAKV,aAAamvJ,uBAAuB,CAAExjJ,OAAQA,UACnDjL,KAAKV,aAAaqzJ,4BAA4B,CAAE1nJ,OAAQA,OAGtD6lJ,WAAWvqJ,EAAmBnE,G,yCAC1C,MAAMgzD,EAAM,IAAI,EAAAw9F,gBAKhB,GAJAx9F,EAAIhzD,UAAYpC,KAAKywJ,oBAAoBruJ,GACzCgzD,EAAI0uE,SAAW9jI,KAAKuE,sBAAsBwrJ,YAAY,IACtD36F,EAAI7uD,WAAavG,KAAKuE,sBAAsBusJ,WAAWvqJ,EAAM6uD,EAAI0uE,GAAI1uE,EAAIhzD,IAAIJ,QAEvD,MAAlBozD,EAAIhzD,IAAIulI,OAAgB,CAC1B,MAAMkrB,EAAU,IAAIz4B,WAAWhlE,EAAI0uE,GAAGjJ,WAAazlE,EAAI7uD,KAAKs0H,YAC5Dg4B,EAAQ57I,IAAI,IAAImjH,WAAWhlE,EAAI0uE,IAAK,GACpC+uB,EAAQ57I,IAAI,IAAImjH,WAAWhlE,EAAI7uD,MAAO6uD,EAAI0uE,GAAGjJ,YAC7CzlE,EAAI2uE,UAAY/jI,KAAKuE,sBAAsB+hH,KAAKusC,EAAQxwJ,OAAQ+yD,EAAIhzD,IAAIulI,OAAQ,UAGlF,OAAOvyE,KAGKs8F,iBACZ1tB,EACAz9H,EACAu9H,EACAC,EACA3hI,G,yCAEA,MAAM0wJ,QAAkB9yJ,KAAKywJ,oBAAoBruJ,GAC3CouJ,QAAexwJ,KAAK+yJ,iBAAiB/uB,EAAS8uB,GAEpD,GAAqB,MAAjBtC,EAAO7oB,QAAyB,MAAP5D,EAE3B,OADA/jI,KAAKe,WAAW+B,MAAM,iBACf,KAGT,GAAI0tJ,EAAOxsB,UAAYA,EAErB,OADAhkI,KAAKe,WAAW+B,MAAM,wBACf,KAGT,MAAMkwJ,EAAahzJ,KAAKuE,sBAAsB0uJ,yBAAyB1sJ,EAAMu9H,EAAIC,EAAKysB,GACtF,GAAyB,MAArBwC,EAAWrrB,QAAoC,MAAlBqrB,EAAWjvB,IAAa,CACvD,MAAMmvB,QAAoBlzJ,KAAKuE,sBAAsB4uJ,SACnDH,EAAWH,QACXG,EAAWrrB,OACX,UAGF,WADwB3nI,KAAKuE,sBAAsB6uJ,YAAYJ,EAAWjvB,IAAKmvB,IAG7E,OADAlzJ,KAAKe,WAAW+B,MAAM,eACf,KAIX,OAAO9C,KAAKuE,sBAAsB8uJ,eAAeL,MAGrCvB,kBACZztB,EACAz9H,EACAu9H,EACAC,EACA3hI,G,yCAEA,MAAM0wJ,QAAkB9yJ,KAAKywJ,oBAAoBruJ,GAC3CouJ,QAAexwJ,KAAK+yJ,iBAAiB/uB,EAAS8uB,GAEpD,GAAqB,MAAjBtC,EAAO7oB,QAAyB,MAAP5D,EAC3B,OAAO,KAGT,GAAIysB,EAAOxsB,UAAYA,EACrB,OAAO,KAGT,GAAqB,MAAjBwsB,EAAO7oB,QAAyB,MAAP5D,EAAa,CACxC,MAAM8uB,EAAU,IAAIz4B,WAAW0J,EAAGjJ,WAAat0H,EAAKs0H,YACpDg4B,EAAQ57I,IAAI,IAAImjH,WAAW0J,GAAK,GAChC+uB,EAAQ57I,IAAI,IAAImjH,WAAW7zH,GAAOu9H,EAAGjJ,YACrC,MAAMq4B,QAAoBlzJ,KAAKuE,sBAAsB+hH,KACnDusC,EAAQxwJ,OACRmuJ,EAAO7oB,OACP,UAEF,GAAoB,OAAhBurB,EACF,OAAO,KAIT,WADwBlzJ,KAAKuE,sBAAsBsuE,QAAQkxD,EAAKmvB,IAG9D,OADAlzJ,KAAKe,WAAW+B,MAAM,eACf,KAIX,aAAa9C,KAAKuE,sBAAsB+uJ,WAAW/sJ,EAAMu9H,EAAI0sB,EAAOxuJ,WAGxDyuJ,oBAAoBruJ,G,yCAChC,GAAW,MAAPA,EACF,OAAOA,EAGT,MAAMJ,QAAehC,KAAKiC,YAC1B,OAAc,MAAVD,EACKA,QAGIhC,KAAK6oC,YAGNkqH,iBACZ/uB,EACA5hI,G,yCAEA,GACE4hI,IAAY,EAAAp0B,eAAew0B,0BAC3BhiI,EAAI4hI,UAAY,EAAAp0B,eAAey0B,cAC/B,CAEA,IAAIkvB,QAAkBvzJ,KAAKV,aAAak0J,kBAKxC,OAJiB,MAAbD,IACFA,EAAY,IAAI,EAAAr4H,mBAAmB94B,EAAIA,IAAK,EAAAwtG,eAAew0B,gCACrDpkI,KAAKV,aAAawvJ,gBAAgByE,IAEnCA,EAGT,OAAOnxJ,KAGK8tJ,WAAW9tJ,G,yCACvB,MAAM+4B,EAAS,IAAIi/F,WAAW,IACxBp4H,QAAehC,KAAKuE,sBAAsBspJ,WAAWzrJ,EAAIA,IAAK,MAAO,GAAI,UACzEulI,QAAe3nI,KAAKuE,sBAAsBspJ,WAAWzrJ,EAAIA,IAAK,MAAO,GAAI,UAG/E,OAFA+4B,EAAOlkB,IAAI,IAAImjH,WAAWp4H,IAC1Bm5B,EAAOlkB,IAAI,IAAImjH,WAAWuN,GAAS,IAC5B,IAAI,EAAAzsG,mBAAmBC,EAAO94B,WAGzByrJ,WAAW/gI,EAAmB0mI,EAAiB,I,yCAC3D,MAAMC,EAAiB5rH,KAAKqnC,IAAI,EAAA0tD,gBAAgBjsH,QAAUk3B,KAAKqnC,IAAI,GACnE,IAAIwkF,EAAW7rH,KAAK66G,KAAK8Q,EAAiBC,GAE1C,MAAME,EAAUrlJ,MAAMC,KAAK,IAAI4rH,WAAWrtG,IAE1C,GAAI4mI,EAAWD,EAD2B,EAAjBE,EAAQhjJ,OAE/B,MAAM,IAAIhP,MAAM,gDAGlB,MAAMiyJ,EAAmB,GACzB,IAAIC,EAAaC,EAAOC,UAAUJ,EAAS,KAC3C,KAAOD,KAAY,CACjB,MAAMM,EAAYH,EAAWz9E,IAAI,EAAAwmD,gBAAgBjsH,QACjDkjJ,EAAaA,EAAWI,OAAO,EAAAr3B,gBAAgBjsH,QAC/CijJ,EAAOx8I,KAAK,EAAAwlH,gBAAgBo3B,IAE9B,OAAOJ,KAGKnD,YACZtuJ,EACAJ,G,yCAEA,IAAImyJ,EAAuB,KAC3B,GAA2B,KAAvB/xJ,EAAIA,IAAIy4H,WAAmB,CAC7B,MAAM1/F,QAAen7B,KAAKkwJ,WAAW9tJ,GACrC+xJ,QAAkBn0J,KAAK6xB,QAAQ7vB,EAAQm5B,OAClC,IAA2B,KAAvB/4B,EAAIA,IAAIy4H,WAGjB,MAAM,IAAIj5H,MAAM,qBAFhBuyJ,QAAkBn0J,KAAK6xB,QAAQ7vB,EAAQI,GAIzC,MAAO,CAAC,IAAI,EAAA84B,mBAAmBl5B,GAASmyJ,MAG5BlH,oBAAoBhiJ,G,+CAC1BjL,KAAKV,aAAa0vJ,uBAAuB,KAAM,CAAE/jJ,OAAQA,UACzDjL,KAAKV,aAAa2vJ,4BAA4B,KAAM,CAAEhkJ,OAAQA,OAGxDkiJ,gBAAgB/qJ,EAA0B,M,yCACtD,MAAMuqJ,QAAoB3sJ,KAAKV,aAAa80J,iCAC5C,GAAmB,MAAfzH,EACF,OAAOA,EAGT,MAAM3qJ,QAAehC,KAAKV,aAAaqvJ,iCACvC,GAAc,MAAV3sJ,EACF,OAAO,KAMT,GAHW,MAAPI,IACFA,QAAYpC,KAAK6oC,UAER,MAAPzmC,EACF,OAAO,KAGT,IAAIiyJ,EACJ,MAAMC,EAAe,IAAI,EAAA9iI,UAAUxvB,GACnC,GAAIsyJ,EAAarwB,iBAAmB,EAAAr0B,eAAey0B,cACjDgwB,QAAkBr0J,KAAK86B,eAAew5H,EAAclyJ,OAC/C,IAAIkyJ,EAAarwB,iBAAmB,EAAAr0B,eAAe00B,yBAIxD,MAAM,IAAI1iI,MAAM,4BAJkE,CAClF,MAAMu5B,QAAen7B,KAAKkwJ,WAAW9tJ,GACrCiyJ,QAAkBr0J,KAAK86B,eAAew5H,EAAcn5H,IAItD,GAAiB,MAAbk5H,EACF,OAAO,KAET,MAAME,EAAqB,IAAI,EAAAr5H,mBAAmBm5H,GAElD,aADMr0J,KAAKV,aAAawsJ,+BAA+ByI,GAChDA,MA1yBT,GADC,EAAA5J,eAAc,IAAM,c,iDACN,EAAAzvH,qB,8DAsDf,GADC,EAAAyvH,eAAc,IAAM,e,mHA+CrB,GADC,EAAAA,eAAc,IAAM,oB,wHAzOvB,mB,gbCtBA,iBAOA,WAEA,2BAaE3rJ,YAAoBM,GAAA,KAAAA,aAAAA,EAZH,KAAAk1J,YAAc,IAAI,EAAAj/D,QACnC,KAAA/tC,KAAyBxnD,KAAKw0J,YAY5Bx0J,KAAKV,aAAa4wF,cAAclrF,WAAU,IAAY,EAAD,sCAC7ChF,KAAKy0J,0BAIflU,aACE,OAAuB,MAAhBvgJ,KAAKsnD,QAGdotG,sBACE,OAA6B,MAAzB10J,KAAK20J,iBACA30J,KAAK20J,iBAGM,MAAhB30J,KAAKsnD,QACAtnD,KAAKsnD,QAAU,iBAGjB,sCAGTqiC,iBACE,OAAwB,MAApB3pF,KAAK0pF,YACA1pF,KAAK0pF,YAGV1pF,KAAKsnD,QACAtnD,KAAKsnD,QAEP,8BAGTgwC,aACE,MAAiC,gCAA1Bt3F,KAAK2pF,iBACR,+BACA3pF,KAAK2pF,iBAAmB,WAG9ByF,cACE,OAAqB,MAAjBpvF,KAAKmvF,SACAnvF,KAAKmvF,SAGVnvF,KAAKsnD,QACAtnD,KAAKsnD,QAAU,SAGjB,8BAGTwxF,YACE,OAAmB,MAAf94I,KAAK25I,OACA35I,KAAK25I,OAGV35I,KAAKsnD,QACAtnD,KAAKsnD,QAAU,OAGjB,4BAGTs4C,iBACE,OAAwB,MAApB5/F,KAAK40J,YACA50J,KAAK40J,YAGV50J,KAAKsnD,QACAtnD,KAAKsnD,QAAU,YAGjB,iCAGTq3F,eACE,OAAsB,MAAlB3+I,KAAK60J,UACA70J,KAAK60J,UAGV70J,KAAKsnD,QACAtnD,KAAKsnD,QAAU,UAGjB,+BAGT8tE,qBACE,OAAOp1H,KAAKm1H,gBAGRs/B,qB,yCACJ,MAAMjtG,QAAkBxnD,KAAKV,aAAaw1J,qBACpCC,EAAU,IAAI,EAAAhzB,gBAEpB/hI,KAAKsnD,QAAUytG,EAAQttG,KAAOD,EAAKC,KACnCznD,KAAK0pF,YAAcliC,EAAKo9E,SACxB5kI,KAAK25I,OAASob,EAAQj1B,IAAMt4E,EAAKs4E,IACjC9/H,KAAK40J,YAAcG,EAAQ9vE,SAAWz9B,EAAKy9B,SAC3CjlF,KAAKmvF,SAAW3nC,EAAKk9E,MACrB1kI,KAAK20J,iBAAmBntG,EAAKm9E,cAC7B3kI,KAAK60J,UAAYE,EAAQ5mJ,OAASq5C,EAAKr5C,OACvCnO,KAAKm1H,gBAAkB3tE,EAAKq9E,gBAGxBn9E,QAAQF,G,yCAgCZ,OA/BAA,EAAKC,KAAOznD,KAAKg1J,UAAUxtG,EAAKC,MAChCD,EAAKo9E,SAAW5kI,KAAKg1J,UAAUxtG,EAAKo9E,UACpCp9E,EAAKs4E,IAAM9/H,KAAKg1J,UAAUxtG,EAAKs4E,KAC/Bt4E,EAAKy9B,SAAWjlF,KAAKg1J,UAAUxtG,EAAKy9B,UACpCz9B,EAAKk9E,MAAQ1kI,KAAKg1J,UAAUxtG,EAAKk9E,OACjCl9E,EAAKm9E,cAAgB3kI,KAAKg1J,UAAUxtG,EAAKm9E,eACzCn9E,EAAKr5C,OAASnO,KAAKg1J,UAAUxtG,EAAKr5C,QAClCq5C,EAAKq9E,aAAe7kI,KAAKg1J,UAAUxtG,EAAKq9E,oBAElC7kI,KAAKV,aAAa21J,mBAAmB,CACzCxtG,KAAMD,EAAKC,KACXq4E,IAAKt4E,EAAKs4E,IACV76C,SAAUz9B,EAAKy9B,SACf2/C,SAAUp9E,EAAKo9E,SACfF,MAAOl9E,EAAKk9E,MACZC,cAAen9E,EAAKm9E,cACpBx2H,OAAQq5C,EAAKr5C,OACb02H,aAAcr9E,EAAKq9E,eAGrB7kI,KAAKsnD,QAAUE,EAAKC,KACpBznD,KAAK0pF,YAAcliC,EAAKo9E,SACxB5kI,KAAK25I,OAASnyF,EAAKs4E,IACnB9/H,KAAK40J,YAAcptG,EAAKy9B,SACxBjlF,KAAKmvF,SAAW3nC,EAAKk9E,MACrB1kI,KAAK20J,iBAAmBntG,EAAKm9E,cAC7B3kI,KAAK60J,UAAYrtG,EAAKr5C,OACtBnO,KAAKm1H,gBAAkB3tE,EAAKq9E,aAE5B7kI,KAAKw0J,YAAY9vI,KAAK8iC,GAEfA,KAGT0tG,UACE,MAAO,CACLztG,KAAMznD,KAAKsnD,QACXs9E,SAAU5kI,KAAK0pF,YACfo2C,IAAK9/H,KAAK25I,OACV10D,SAAUjlF,KAAK40J,YACflwB,MAAO1kI,KAAKmvF,SACZw1C,cAAe3kI,KAAK20J,iBACpBxmJ,OAAQnO,KAAK60J,UACbhwB,aAAc7kI,KAAKm1H,iBAIf6/B,UAAUvnJ,GAChB,OAAW,MAAPA,GAAuB,KAARA,EACV,OAGTA,EAAMA,EAAI9M,QAAQ,QAAS,KAClB+zG,WAAW,YAAejnG,EAAIinG,WAAW,cAChDjnG,EAAM,WAAaA,GAGdA,EAAIxG,W,0aClLf,iBACA,WAEA,qBAGEjI,YACUK,EACA0M,EACAzM,EACAyB,EACAia,GAJA,KAAA3b,WAAAA,EACA,KAAA0M,cAAAA,EACA,KAAAzM,aAAAA,EACA,KAAAyB,WAAAA,EACA,KAAAia,oBAAAA,EAPF,KAAA8+G,QAAS,EAUjBrvH,KAAK0qJ,GACCn1J,KAAK85H,SAIT95H,KAAK85H,QAAS,EACVq7B,IACFn1J,KAAKyP,eACL6lE,aAAY,IAAMt1E,KAAKyP,gBAAgB,OAIrCmmE,QACJyL,EACA75D,EAAmB,KACnB4tI,GAAoB,G,yCAGpB,WADqBp1J,KAAKV,aAAa8L,sBAErC,OAEF,MAAM8P,QAAsBlb,KAAKgb,oBAAoBI,SACrD,GAAqB,MAAjBF,EACF,OAEF,MAAMm6I,EAAS,IAAI95E,IAAYrgE,EAAc5D,QAAQsJ,GAAMA,EAAE+S,YAAWntB,KAAKoa,GAAMA,EAAEzgB,MACrF,GAAoB,IAAhBk1J,EAAOn8G,KACT,OAEF,GAAgB,MAAZ1xB,EAAkB,CACpB,MAAM0B,QAAelpB,KAAK+L,cAAcyK,IAAIgR,GAC5C,GAAc,MAAV0B,GAA2C,MAAzBA,EAAO/nB,iBAA2Bk0J,EAAOh/I,IAAI6S,EAAO/nB,gBACxE,OAGJ,IAAIm0J,QAAwBt1J,KAAKV,aAAai2J,qBACvB,MAAnBD,IACFA,EAAkB,IAEpB,MAAMlnJ,EAAQ,IAAI,EAAAonJ,UAClBpnJ,EAAMiD,KAAOgwE,EACbjzE,EAAMoZ,SAAWA,EACjBpZ,EAAM4G,MAAO,IAAIjF,MAAOgwC,cACxBu1G,EAAgBj+I,KAAKjJ,SACfpO,KAAKV,aAAam2J,mBAAmBH,GACvCF,UACIp1J,KAAKyP,mBAITA,aAAaxE,G,yCAEjB,WADqBjL,KAAKV,aAAa8L,mBAAmB,CAAEH,OAAQA,KAElE,OAEF,MAAMqqJ,QAAwBt1J,KAAKV,aAAai2J,mBAAmB,CAAEtqJ,OAAQA,IAC7E,GAAuB,MAAnBqqJ,GAAsD,IAA3BA,EAAgB1kJ,OAC7C,OAEF,MAAM/Q,EAAUy1J,EAAgB9uJ,KAAK3D,IACnC,MAAM0qD,EAAM,IAAI,EAAAmoG,aAIhB,OAHAnoG,EAAIl8C,KAAOxO,EAAEwO,KACbk8C,EAAI/lC,SAAW3kB,EAAE2kB,SACjB+lC,EAAIv4C,KAAOnS,EAAEmS,KACNu4C,KAET,UACQvtD,KAAKX,WAAWk/I,kBAAkB1+I,GACxCG,KAAK6P,YAAY5E,GACjB,MAAOpI,GACP7C,KAAKe,WAAW+B,MAAMD,OAIpBgN,YAAY5E,G,+CACVjL,KAAKV,aAAam2J,mBAAmB,KAAM,CAAExqJ,OAAQA,U,2aChG/D,iBAWA,WACA,WACA,WACA,WACA,WACA,WACA,WAEA,WACA,WACA,WACA,WAOA,sBACEjM,YACU6M,EACAE,EACA1M,EACAwB,EACA0D,GAJA,KAAAsH,cAAAA,EACA,KAAAE,cAAAA,EACA,KAAA1M,WAAAA,EACA,KAAAwB,cAAAA,EACA,KAAA0D,sBAAAA,EAGJknF,UAAUz4C,EAAuB,MAAO7xC,G,yCAC5C,OAAIA,QACWnB,KAAK+yC,sBAAsB5xC,EAAgB6xC,GAG3C,mBAAXA,EACKhzC,KAAK21J,qBAEL31J,KAAK41J,mBAAmB5iH,MAI7B6iH,2BAA2Bj9G,EAAkBz3C,G,yCACjD,MAAM20J,EAAY30J,QACRnB,KAAK+yC,sBAAsB5xC,EAAgB,cAC3CnB,KAAKyrF,UAAU,QAEnB4sB,EAAO,EAAAv2G,MAAMi8C,sBAAsB/9C,KAAKuE,sBAAsBwrJ,YAAY,KAC1Er1H,EAAgB,EAAA82B,uBAChBpvD,QAAYpC,KAAKa,cAAcywF,WACnC14C,EACAy/D,EACA,EAAAjnD,QAAQC,cACR32B,GAGI28E,QAAyBr3G,KAAKa,cAAcgxB,QAAQ,EAAA/vB,MAAMg/I,UAAW1+I,GACrE2zJ,QAAgB/1J,KAAKa,cAAcgxB,QAAQikI,EAAW1zJ,GAEtD4zJ,EAAe,CACnB/+C,WAAW,EACXF,mBAAmB,EACnBsB,KAAMA,EACN39E,cAAeA,EACfF,QAAS,EAAA42B,QAAQC,cACjB+lD,6BAA8BC,EAAiB90G,gBAC/CgE,KAAMwvJ,EAAQxzJ,iBAGhB,OAAO6nC,KAAKC,UAAU2rH,EAAS,KAAM,SAGjCjjH,sBACJ5xC,EACA6xC,EAAuB,O,yCAEvB,MAAe,mBAAXA,EACKhzC,KAAKi2J,+BAA+B90J,GAEpCnB,KAAKk2J,+BAA+B/0J,EAAgB6xC,MAIzD59B,eAAejH,G,yCACnB,OAAO8lG,EAAKkiD,QAAQhoJ,EAAO3H,KAAK3D,GAAM,IAAI,EAAAuzJ,YAAYvzJ,SAGxDyS,YAAYo2E,EAAiB,KAAMC,EAAY,OAC7C,MAAMv7E,EAAM,IAAIL,KAYhB,MAAO,aAAe27E,EAAS,IAAMA,EAAS,IAAM,YAVlDt7E,EAAIoM,cACJ,GACAxc,KAAKq2J,UAAUjmJ,EAAIovC,WAAa,EAAG,GAEnCx/C,KAAKq2J,UAAUjmJ,EAAIqvC,UAAW,GAC9Bz/C,KAAKq2J,UAAUjmJ,EAAIy2C,WAAY,GAE/B7mD,KAAKq2J,UAAUjmJ,EAAI02C,aAAc,GACjC9mD,KAAKq2J,UAAUjmJ,EAAIkmJ,aAAc,IAE2C,IAAM3qE,EAGxEiqE,mBAAmB5iH,G,yCAC/B,IAAIujH,EAA2B,GAC3Bp/F,EAA2B,GAC/B,MAAM1e,EAAW,GAgBjB,GAdAA,EAASphC,KACPrX,KAAK6L,cAAcgqC,kBAAkB50C,MAAMsxD,IACzCgkG,EAAahkG,MAIjB9Z,EAASphC,KACPrX,KAAK+L,cAAc8pC,kBAAkB50C,MAAM2sB,IACzCupC,EAAavpC,EAAQtW,QAAQ0+B,GAAuB,MAAjBA,EAAEtM,wBAInC/5B,QAAQC,IAAI6oC,GAEH,QAAXzF,EAAkB,CACpB,MAAMkrE,EAAa,IAAIpoG,IACvBygJ,EAAW1lJ,SAASmlC,IACN,MAARA,EAAE71C,IACJ+9G,EAAWjnG,IAAI++B,EAAE71C,GAAI61C,MAIzB,MAAMwgH,EAAuB,GAkB7B,OAjBAr/F,EAAWtmD,SAAS4J,IAElB,GAAIA,EAAEpJ,OAAS,EAAAs4B,WAAW+O,OAASj+B,EAAEpJ,OAAS,EAAAs4B,WAAWi6C,WACvD,OAEF,GAAwB,MAApBnpE,EAAEtZ,eACJ,OAGF,MAAM+nB,EAAc,GACpBA,EAAOspC,OACS,MAAd/3C,EAAE2L,UAAoB83F,EAAW7nG,IAAIoE,EAAE2L,UAAY83F,EAAW1nG,IAAIiE,EAAE2L,UAAU1lB,KAAO,KACvFwoB,EAAOE,SAAW3O,EAAE2O,SAAW,EAAI,KACnCppB,KAAKy2J,kBAAkBvtI,EAAQzO,GAC/B+7I,EAAcn/I,KAAK6R,MAGd+qF,EAAKkiD,QAAQK,GACf,CACL,MAAMR,EAAe,CACnB/+C,WAAW,EACX1kD,QAAS,GACTzoB,MAAO,IAsBT,OAnBAysH,EAAW1lJ,SAASmlC,IAClB,GAAY,MAARA,EAAE71C,GACJ,OAEF,MAAMqyD,EAAS,IAAI,qBACnBA,EAAO61E,MAAMryF,GACbggH,EAAQzjG,QAAQl7C,KAAKm7C,MAGvB2E,EAAWtmD,SAAS4J,IAClB,GAAwB,MAApBA,EAAEtZ,eACJ,OAEF,MAAM+nB,EAAS,IAAI,qBACnBA,EAAOm/G,MAAM5tH,GACbyO,EAAOQ,cAAgB,KACvBssI,EAAQlsH,MAAMzyB,KAAK6R,MAGdkhB,KAAKC,UAAU2rH,EAAS,KAAM,UAI3BL,qB,yCACZ,IAAIpjG,EAAoB,GACpB3kC,EAAoB,GACxB,MAAM6qB,EAAW,GAEjBA,EAASphC,KACPrX,KAAK6L,cAAcuP,SAASna,MAAM+0C,IAChCuc,EAAUvc,MAIdyC,EAASphC,KACPrX,KAAK+L,cAAcqP,SAASna,MAAMwZ,IAChCmT,EAAUnT,EAAEnD,QAAQ0+B,GAAuB,MAAjBA,EAAEtM,wBAI1B/5B,QAAQC,IAAI6oC,GAElB,MAEMu9G,EAAe,CACnB/+C,WAAW,EACXG,oCAJ6Bp3G,KAAKa,cAAcgxB,QAAQ,EAAA/vB,MAAMg/I,YAIfv+I,gBAC/CgwD,QAAS,GACTzoB,MAAO,IAsBT,OAnBAyoB,EAAQ1hD,SAASmlC,IACf,GAAY,MAARA,EAAE71C,GACJ,OAEF,MAAMqyD,EAAS,IAAI,qBACnBA,EAAO61E,MAAMryF,GACbggH,EAAQzjG,QAAQl7C,KAAKm7C,MAGvB5kC,EAAQ/c,SAAS4J,IACf,GAAwB,MAApBA,EAAEtZ,eACJ,OAEF,MAAM+nB,EAAS,IAAI,qBACnBA,EAAOm/G,MAAM5tH,GACbyO,EAAOQ,cAAgB,KACvBssI,EAAQlsH,MAAMzyB,KAAK6R,MAGdkhB,KAAKC,UAAU2rH,EAAS,KAAM,SAGzBE,+BACZ/0J,EACA6xC,G,yCAEA,MAAM63G,EAAmC,GACnC1zF,EAA2B,GAC3B1e,EAAW,GAwCjB,GAtCAA,EAASphC,KACPrX,KAAKX,WAAW0lB,eAAe5jB,GAAgBF,MAAM8iB,IACnD,MAAM2yI,EAA0B,GAWhC,OAVmB,MAAf3yI,GAA2C,MAApBA,EAAYxd,MAAgBwd,EAAYxd,KAAKqK,OAAS,GAC/EmT,EAAYxd,KAAKsK,SAAS4J,IACxB,MAAM2Q,EAAa,IAAI,EAAAnG,WAAW,IAAI,EAAAC,eAAezK,IACrDi8I,EAAmBr/I,KACjB+T,EAAWizB,UAAUp9C,MAAM01J,IACzB9L,EAAexzI,KAAKs/I,UAKrBhnJ,QAAQC,IAAI8mJ,OAIvBj+G,EAASphC,KACPrX,KAAKX,WAAWk7I,uBAAuBp5I,GAAgBF,MAAM2sB,IAC3D,MAAMgpI,EAAsB,GAa5B,OAZe,MAAXhpI,GAAmC,MAAhBA,EAAQrnB,MAAgBqnB,EAAQrnB,KAAKqK,OAAS,GACnEgd,EAAQrnB,KACL+Q,QAAQmD,GAAwB,OAAlBA,EAAEivB,cAChB74B,SAAS4J,IACR,MAAMyO,EAAS,IAAI,EAAAmrB,OAAO,IAAI,EAAAD,WAAW35B,IACzCm8I,EAAev/I,KACb6R,EAAOm1B,UAAUp9C,MAAM41J,IACrB1/F,EAAW9/C,KAAKw/I,UAKnBlnJ,QAAQC,IAAIgnJ,aAIjBjnJ,QAAQC,IAAI6oC,GAEH,QAAXzF,EAAkB,CACpB,MAAM8jH,EAAiB,IAAIhhJ,IAC3B+0I,EAAeh6I,SAAS4J,IACtBq8I,EAAe7/I,IAAIwD,EAAEta,GAAIsa,MAG3B,MAAM+7I,EAAuB,GAkB7B,OAjBAr/F,EAAWtmD,SAAS4J,IAElB,GAAIA,EAAEpJ,OAAS,EAAAs4B,WAAW+O,OAASj+B,EAAEpJ,OAAS,EAAAs4B,WAAWi6C,WACvD,OAGF,MAAM16D,EAAc,CACpB,YAAqB,IACE,MAAnBzO,EAAEiP,gBACJR,EAAOnF,YAActJ,EAAEiP,cACpBpS,QAAQnX,GAAO22J,EAAezgJ,IAAIlW,KAClCqG,KAAKrG,GAAO22J,EAAetgJ,IAAIrW,GAAIO,QAExCV,KAAKy2J,kBAAkBvtI,EAAQzO,GAC/B+7I,EAAcn/I,KAAK6R,MAGd+qF,EAAKkiD,QAAQK,GACf,CACL,MAAMR,EAAe,CACnB/+C,WAAW,EACXlzF,YAAa,GACb+lB,MAAO,IAcT,OAXA+gH,EAAeh6I,SAAS4J,IACtB,MAAM2Q,EAAa,IAAI,yBACvBA,EAAWi9G,MAAM5tH,GACjBu7I,EAAQjyI,YAAY1M,KAAK+T,MAG3B+rC,EAAWtmD,SAAS4J,IAClB,MAAMyO,EAAS,IAAI,qBACnBA,EAAOm/G,MAAM5tH,GACbu7I,EAAQlsH,MAAMzyB,KAAK6R,MAEdkhB,KAAKC,UAAU2rH,EAAS,KAAM,UAI3BC,+BAA+B90J,G,yCAC3C,MAAM4iB,EAA4B,GAC5B6J,EAAoB,GACpB6qB,EAAW,GAEjBA,EAASphC,KACPrX,KAAKX,WAAW0lB,eAAe5jB,GAAgBF,MAAMwZ,IAE1C,MAALA,GAAuB,MAAVA,EAAElU,MAAgBkU,EAAElU,KAAKqK,OAAS,GACjD6J,EAAElU,KAAKsK,SAASsD,IACd,MAAMiX,EAAa,IAAI,EAAAnG,WAAW,IAAI,EAAAC,eAAe/Q,IACrD4P,EAAY1M,KAAK+T,MAGdzb,QAAQC,IAPiB,QAWpC6oC,EAASphC,KACPrX,KAAKX,WAAWk7I,uBAAuBp5I,GAAgBF,MAAMwZ,IAElD,MAALA,GAAuB,MAAVA,EAAElU,MAAgBkU,EAAElU,KAAKqK,OAAS,GACjD6J,EAAElU,KACC+Q,QAAQmyB,GAA8B,OAArBA,EAAKC,cACtB74B,SAAS44B,IACR,MAAMvgB,EAAS,IAAI,EAAAmrB,OAAO,IAAI,EAAAD,WAAW3K,IACzC7b,EAAQvW,KAAK6R,MAGZvZ,QAAQC,IATa,cAa1BD,QAAQC,IAAI6oC,GAElB,MAAMpnB,QAAerxB,KAAKa,cAAcwvB,UAAUlvB,GAG5C60J,EAAe,CACnB/+C,WAAW,EACXG,oCAJ6Bp3G,KAAKa,cAAcgxB,QAAQ,EAAA/vB,MAAMg/I,UAAWzvH,IAI1B9uB,gBAC/CwhB,YAAa,GACb+lB,MAAO,IAcT,OAXA/lB,EAAYlT,SAAS4J,IACnB,MAAM2Q,EAAa,IAAI,yBACvBA,EAAWi9G,MAAM5tH,GACjBu7I,EAAQjyI,YAAY1M,KAAK+T,MAG3BwC,EAAQ/c,SAAS4J,IACf,MAAMyO,EAAS,IAAI,qBACnBA,EAAOm/G,MAAM5tH,GACbu7I,EAAQlsH,MAAMzyB,KAAK6R,MAEdkhB,KAAKC,UAAU2rH,EAAS,KAAM,SAG/BK,UAAUtvG,EAAa8hC,EAAekuE,EAAe,KAC3D,MAAMC,EAAYjwG,EAAIzhD,WACtB,OAAO0xJ,EAAUpmJ,QAAUi4E,EACvBmuE,EACA,IAAIzoJ,MAAMs6E,EAAQmuE,EAAUpmJ,OAAS,GAAGgJ,KAAKm9I,GAAgBC,EAG3DP,kBAAkBvtI,EAAazO,GAwBrC,OAvBAyO,EAAO7X,KAAO,KACd6X,EAAOxoB,KAAO+Z,EAAE/Z,KAChBwoB,EAAOuoF,MAAQh3F,EAAEg3F,MACjBvoF,EAAO+4D,OAAS,KAChB/4D,EAAOmC,SAAW5Q,EAAE4Q,SAEpBnC,EAAO2tF,UAAY,KACnB3tF,EAAOytF,eAAiB,KACxBztF,EAAO0tF,eAAiB,KACxB1tF,EAAOwtF,WAAa,KAEhBj8F,EAAEwnE,QACJxnE,EAAEwnE,OAAOpxE,SAASmlC,IACX9sB,EAAO+4D,OAGV/4D,EAAO+4D,QAAU,KAFjB/4D,EAAO+4D,OAAS,GAKlB/4D,EAAO+4D,SAAWjsC,EAAEt1C,MAAQ,IAAM,KAAOs1C,EAAEr7B,SAIvCF,EAAEpJ,MACR,KAAK,EAAAs4B,WAAW+O,MACdxvB,EAAO7X,KAAO,QACd6X,EAAOytF,eAAiBl8F,EAAEk+B,MAAMf,SAChC1uB,EAAO0tF,eAAiBn8F,EAAEk+B,MAAMC,SAChC1vB,EAAOwtF,WAAaj8F,EAAEk+B,MAAMU,KAExB5+B,EAAEk+B,MAAMY,OACVrwB,EAAO2tF,UAAY,GACnBp8F,EAAEk+B,MAAMY,KAAK1oC,SAASuG,IACpB8R,EAAO2tF,UAAUx/F,KAAKD,EAAEoiC,SAG5B,MACF,KAAK,EAAA7P,WAAWi6C,WACd16D,EAAO7X,KAAO,OACd,MACF,QACE,OAGJ,OAAO6X,K,+aCtbX,iBAMA,WACA,WAEA,0BAIElqB,YAAoB+B,EAAgC1B,GAAhC,KAAA0B,WAAAA,EAAgC,KAAA1B,WAAAA,EAClDW,KAAKi3J,uBAAyB,IAAI,EAAAC,uBAAuBn2J,GACzDf,KAAKm3J,2BAA6B,IAAI,EAAAC,2BAA2B/3J,GAG7Dg4J,eACJC,EACAjiJ,EACA0uI,G,yCAEA,IACE,OAAQuT,EAAWltB,gBACjB,KAAK,EAAAv6B,eAAe0nD,aACZv3J,KAAKm3J,2BAA2BnV,OACpC3sI,EAAS9S,gBACTwhJ,GACC1mF,GACCr9D,KAAKX,WAAW46I,aACdqd,EAAWt5G,aAAa79C,GACxBm3J,EAAWt5G,aAAa3I,KAAKl1C,GAC7Bk9D,KAGN,MACF,KAAK,EAAAwyC,eAAe2nD,MAAO,CACzB,MAAMvV,EAAkB,IAAY,EAAD,gCAKjC,aAJ8BjiJ,KAAKX,WAAW06I,uBAC5Cud,EAAWt5G,aAAa79C,GACxBm3J,EAAWt5G,aAAa3I,KAAKl1C,KAERsN,aAEnBzN,KAAKi3J,uBAAuBjV,OAChCsV,EAAW7pJ,IACXs2I,EACA9B,GAEF,MAEF,QACE,MAAM,IAAIrgJ,MAAM,6BAEpB,MAAOiB,GAEP,YADM7C,KAAKX,WAAWg7I,WAAWid,EAAWt5G,aAAa79C,IACnD0C,MAIJsmJ,uBACJniE,EACAswE,EACAxT,EACAC,G,yCAEA,MAAMriJ,EAAWslF,EAAQswE,EAAWjtB,mBAAqBitB,EAAWlgG,eACpE,IACE,OAAQkgG,EAAWltB,gBACjB,KAAK,EAAAv6B,eAAe0nD,aACZv3J,KAAKm3J,2BAA2BnV,OACpC8B,EAAkBvhJ,gBAClBwhJ,GACC1mF,GAAOr9D,KAAKX,WAAWu8I,mBAAmBl6I,EAASvB,GAAIm3J,EAAW7hH,aAAc4nB,KAEnF,MACF,KAAK,EAAAwyC,eAAe2nD,MAAO,CACzB,MAAMvV,EAAkB,IAAY,EAAD,gCAKjC,aAJ8BjiJ,KAAKX,WAAWs8I,yBAC5Cj6I,EAASvB,GACTm3J,EAAW7hH,eAEUhoC,aAEnBzN,KAAKi3J,uBAAuBjV,OAChCsV,EAAW7pJ,IACXs2I,EACA9B,GAEF,MAEF,QACE,MAAM,IAAIrgJ,MAAM,8BAEpB,MAAOiB,GAMP,MALImkF,QACIhnF,KAAKX,WAAWq2C,4BAA4Bh0C,EAASvB,GAAIm3J,EAAW7hH,oBAEpEz1C,KAAKX,WAAWm2C,uBAAuB9zC,EAASvB,GAAIm3J,EAAW7hH,cAEjE5yC,S,2aClGZ,iBACA,WAEA,WACA,WAGA,WAEA,WAIA,sBACE7D,YACU6B,EACAxB,EACAF,EACA4M,EACAzM,GAJA,KAAAuB,cAAAA,EACA,KAAAxB,WAAAA,EACA,KAAAF,YAAAA,EACA,KAAA4M,cAAAA,EACA,KAAAzM,aAAAA,EAGJslJ,WAAW35I,G,+CACTjL,KAAKV,aAAam4J,oBAAoB,KAAM,CAAExsJ,OAAQA,OAGxD4mB,QAAQgxG,EAAmBzgI,G,yCAC/B,MAAMowD,EAAS,IAAI,EAAAk+D,OAGnB,OAFAl+D,EAAOryD,GAAK0iI,EAAM1iI,GAClBqyD,EAAO9xD,WAAaV,KAAKa,cAAcgxB,QAAQgxG,EAAMniI,KAAM0B,GACpDowD,KAGHh8C,IAAIrW,G,yCACR,MAAMoyD,QAAgBvyD,KAAKV,aAAas9E,sBAExC,OAAe,MAAXrqB,GAAoBA,EAAQp6B,eAAeh4B,GAIxC,IAAI,EAAAuwH,OAAOn+D,EAAQpyD,IAHjB,QAMLib,S,yCACJ,MAAMm3C,QAAgBvyD,KAAKV,aAAas9E,sBAClCl7E,EAAqB,GAC3B,IAAK,MAAMvB,KAAMoyD,EAEXA,EAAQp6B,eAAeh4B,IACzBuB,EAAS2V,KAAK,IAAI,EAAAq5G,OAAOn+D,EAAQpyD,KAGrC,OAAOuB,KAGHm0C,kB,yCACJ,MAAM6hH,QAAyB13J,KAAKV,aAAaq4J,sBACjD,GAAwB,MAApBD,EACF,OAAOA,EAIT,WADqB13J,KAAKa,cAAcylJ,UAEtC,MAAM,IAAI1kJ,MAAM,WAGlB,MAAM20J,EAA2B,GAC3B99G,EAA2B,UACXz4C,KAAKob,UACnBvK,SAAS2hD,IACf/Z,EAASphC,KAAKm7C,EAAOnU,UAAUp9C,MAAM+0C,GAAMugH,EAAWl/I,KAAK2+B,eAGvDrmC,QAAQC,IAAI6oC,GAClB89G,EAAWr/I,KAAK,EAAApV,MAAMqV,gBAAgBnX,KAAKb,YAAa,SAExD,MAAMy4J,EAAa,IAAI,EAAA/rE,WAKvB,OAJA+rE,EAAWl3J,KAAOV,KAAKb,YAAYmB,EAAE,cACrCi2J,EAAWl/I,KAAKugJ,SAEV53J,KAAKV,aAAam4J,oBAAoBlB,GACrCA,KAGHlxI,aAAaktC,G,yCACjBA,EAAUA,MAAAA,EAAAA,QAAkBvyD,KAAK61C,kBACjC,MAAM3xB,EAAgC,GAQtC,OAPAquC,EAAQ1hD,SAASmlC,IACf,MAAM6hH,EAAa,IAAI,EAAAhsE,WACvBgsE,EAAW13J,GAAK61C,EAAE71C,GAClB03J,EAAWzwH,aAAe4O,EAAE5O,aAC5B,MAAMshD,EAAkB,MAAV1yC,EAAEt1C,KAAes1C,EAAEt1C,KAAKC,QAAQ,aAAc,IAAIwG,MAhF7C,KAgFuE,GAC1F,EAAA0xH,aAAaM,eAAej1G,EAAO,EAAGwkE,EAAOmvE,EAAY,KAjFtC,QAmFd3zI,KAGH+mI,UAAU9qJ,G,yCACd,MAAMoyD,QAAgBvyD,KAAKqlB,eAC3B,OAAO,EAAAwzG,aAAaQ,kBAAkB9mE,EAASpyD,MAG3CsmF,eAAej0B,G,yCACnB,MAAM3yD,EAAU,IAAI,EAAAmpI,cAAcx2E,GAElC,IAAI9wD,EACa,MAAb8wD,EAAOryD,IACTuB,QAAiB1B,KAAKX,WAAWk6I,WAAW15I,GAC5C2yD,EAAOryD,GAAKuB,EAASvB,IAErBuB,QAAiB1B,KAAKX,WAAWm6I,UAAUhnF,EAAOryD,GAAIN,GAGxD,MAAM0G,EAAO,IAAI,EAAAuxJ,WAAWp2J,SACtB1B,KAAKkoJ,OAAO3hJ,MAGd2hJ,OAAO11F,G,yCACX,IAAID,QAAgBvyD,KAAKV,aAAas9E,sBAKtC,GAJe,MAAXrqB,IACFA,EAAU,IAGRC,aAAkB,EAAAslG,WAAY,CAChC,MAAM9hH,EAAIwc,EACVD,EAAQvc,EAAE71C,IAAM61C,OAEfwc,EAAwB3hD,SAASmlC,IAChCuc,EAAQvc,EAAE71C,IAAM61C,WAIdh2C,KAAKV,aAAam4J,oBAAoB,YACtCz3J,KAAKV,aAAau9E,oBAAoBtqB,MAGxC5xD,QAAQ4xD,G,+CACNvyD,KAAKV,aAAam4J,oBAAoB,YACtCz3J,KAAKV,aAAau9E,oBAAoBtqB,MAGxCtiD,MAAMhF,G,+CACJjL,KAAKV,aAAam4J,oBAAoB,KAAM,CAAExsJ,OAAQA,UACtDjL,KAAKV,aAAau9E,oBAAoB,KAAM,CAAE5xE,OAAQA,OAGxD4Z,OAAO1kB,G,yCACX,MAAMoyD,QAAgBvyD,KAAKV,aAAas9E,sBACxC,GAAe,MAAXrqB,EACF,OAGF,GAAkB,iBAAPpyD,EAAiB,CAC1B,GAAmB,MAAfoyD,EAAQpyD,GACV,cAEKoyD,EAAQpyD,QAEdA,EAAgB0Q,SAASuH,WACjBm6C,EAAQn6C,YAIbpY,KAAKV,aAAam4J,oBAAoB,YACtCz3J,KAAKV,aAAau9E,oBAAoBtqB,GAG5C,MAAM3kC,QAAgB5tB,KAAKV,aAAai9E,sBACxC,GAAe,MAAX3uD,EAAiB,CACnB,MAAMmqI,EAAwB,GAC9B,IAAK,MAAMlgD,KAAOjqF,EACZA,EAAQiqF,GAAKzxF,WAAajmB,IAC5BytB,EAAQiqF,GAAKzxF,SAAW,KACxB2xI,EAAQ1gJ,KAAKuW,EAAQiqF,KAGrBkgD,EAAQnnJ,OAAS,GACnB5Q,KAAK+L,cAAcm8I,OAAO6P,OAK1Bv9E,iBAAiBr6E,G,+CACfH,KAAKX,WAAWo6I,aAAat5I,SAC7BH,KAAK6kB,OAAO1kB,S,uaC5LtB,oBAoEEnB,YACY08E,EACAC,EACAq8E,GAFA,KAAAt8E,eAAAA,EACA,KAAAC,iBAAAA,EACA,KAAAq8E,eAAAA,EApEZ,KAAAz1F,4BAAwC,CAAC,MAGzC,KAAAC,YAAc,IAAI1sD,IAAoB,CACpC,CAAC,KAAM,aACP,CAAC,KAAM,gBACP,CAAC,KAAM,cACP,CAAC,KAAM,aACP,CAAC,KAAM,SACP,CAAC,KAAM,kBACP,CAAC,KAAM,UACP,CAAC,KAAM,WACP,CAAC,KAAM,SACP,CAAC,KAAM,WACP,CAAC,KAAM,YACP,CAAC,KAAM,WACP,CAAC,QAAS,qBACV,CAAC,QAAS,mBACV,CAAC,KAAM,aACP,CAAC,KAAM,WACP,CAAC,KAAM,SACP,CAAC,KAAM,SACP,CAAC,KAAM,SACP,CAAC,MAAO,mBACR,CAAC,KAAM,YACP,CAAC,KAAM,SACP,CAAC,KAAM,UACP,CAAC,KAAM,YACP,CAAC,KAAM,UACP,CAAC,KAAM,oBACP,CAAC,KAAM,YACP,CAAC,KAAM,OACP,CAAC,KAAM,WACP,CAAC,KAAM,8BACP,CAAC,KAAM,SACP,CAAC,KAAM,OACP,CAAC,KAAM,kBACP,CAAC,KAAM,aACP,CAAC,KAAM,cACP,CAAC,KAAM,UACP,CAAC,KAAM,kBACP,CAAC,KAAM,cACP,CAAC,KAAM,iBACP,CAAC,KAAM,UACP,CAAC,QAAS,uBACV,CAAC,QAAS,aACV,CAAC,KAAM,UACP,CAAC,KAAM,WACP,CAAC,KAAM,SACP,CAAC,KAAM,cACP,CAAC,KAAM,gCACP,CAAC,KAAM,UACP,CAAC,KAAM,WACP,CAAC,KAAM,OACP,CAAC,KAAM,UACP,CAAC,KAAM,cACP,CAAC,KAAM,cACP,CAAC,QAAS,YACV,CAAC,QAAS,YAIF,KAAAmiJ,gBAAuB,GACvB,KAAAC,eAAsB,GAO9Bl4J,KAAK07E,eAAiBA,EAAe/6E,QAAQ,IAAK,KAG9C8J,KAAKmC,G,yCACT,GAAI5M,KAAK85H,OACP,MAAM,IAAIl4H,MAAM,6BAElB,GAAwC,MAApC5B,KAAKuiE,6BAAmF,IAA5CviE,KAAKuiE,4BAA4B3xD,OAC/E,MAAM,IAAIhP,MAAM,wCAGlB5B,KAAK85H,QAAS,EACd95H,KAAK4M,OAAS5M,KAAK6nD,kBAA8B,MAAVj7C,EAAiBA,EAAS5M,KAAK07E,eAEtE,IACE17E,KAAK4yE,SAAW,IAAIulF,KAAKC,SAASp4J,KAAK4M,OAAQ,CAAEyrJ,SAAS,EAAMC,YAAa,SAC7E,SACAt4J,KAAK4yE,SAAW,MAGwD,IAAtE5yE,KAAKuiE,4BAA4Bx+D,QAAQ/D,KAAK6nD,qBAChD7nD,KAAK6nD,kBAAoB7nD,KAAK6nD,kBAAkBjwC,MAAM,EAAG,IAEiB,IAAtE5X,KAAKuiE,4BAA4Bx+D,QAAQ/D,KAAK6nD,qBAChD7nD,KAAK6nD,kBAAoB7nD,KAAKuiE,4BAA4B,KAIjC,MAAzBviE,KAAK27E,yBACD37E,KAAKu4J,aAAav4J,KAAK6nD,kBAAmB7nD,KAAKk4J,gBACjDl4J,KAAK6nD,oBAAsB7nD,KAAKuiE,4BAA4B,WACxDviE,KAAKu4J,aAAav4J,KAAKuiE,4BAA4B,GAAIviE,KAAKi4J,sBAKxE33J,EAAEH,EAAYgkD,EAAauoB,EAAas+B,GACtC,OAAOhrG,KAAKw4J,UAAUr4J,EAAIgkD,EAAIuoB,EAAIs+B,GAGpCwtD,UAAUr4J,EAAYgkD,EAAauoB,EAAas+B,GAC9C,IAAIjoG,EAuBJ,OApBEA,EADE/C,KAAKk4J,eAAe//H,eAAeh4B,IAAOH,KAAKk4J,eAAe/3J,GACvDH,KAAKk4J,eAAe/3J,GAEpBH,KAAKi4J,gBAAgB9/H,eAAeh4B,IAAOH,KAAKi4J,gBAAgB93J,GAChEH,KAAKi4J,gBAAgB93J,GAErB,GAGI,KAAX4C,IACQ,MAANohD,IACFphD,EAASA,EAAOoE,MAAM,UAAUyS,KAAKuqC,IAE7B,MAANuoB,IACF3pE,EAASA,EAAOoE,MAAM,UAAUyS,KAAK8yD,IAE7B,MAANs+B,IACFjoG,EAASA,EAAOoE,MAAM,UAAUyS,KAAKoxF,KAIlCjoG,EAGKw1J,aAAa3rJ,EAAgB6rJ,G,yCACzC,MAAM78E,EAAkBhvE,EAAOjM,QAAQ,IAAK,KACtC+3J,QAAgB14J,KAAKg4J,eAAep8E,GAC1C,IAAK,MAAMk9B,KAAQ4/C,EAEjB,GAAKA,EAAQvgI,eAAe2gF,KAG5B2/C,EAAY3/C,GAAQ4/C,EAAQ5/C,GAAMzrG,QAE9BqrJ,EAAQ5/C,GAAM6/C,cAChB,IAAK,MAAMC,KAAaF,EAAQ5/C,GAAM6/C,aAAc,CAClD,IACGD,EAAQ5/C,GAAM6/C,aAAaxgI,eAAeygI,KAC1CF,EAAQ5/C,GAAM6/C,aAAaC,GAAWxmF,QAEvC,SAGF,MAAMymF,EAAe,MAAQD,EAAUjsI,cAAgB,MACvD,IAAImsI,EAAiBJ,EAAQ5/C,GAAM6/C,aAAaC,GAAWxmF,QACpC,OAAnB0mF,GAA8C,OAAnBA,GAA8C,OAAnBA,IACxDA,EAAiB,MAAQA,EAAiB,MAE5CL,EAAY3/C,GAAQ2/C,EAAY3/C,GAAMn4G,QACpC,IAAIm0G,OAAO+jD,EAAc,KACzBC,U,2aChKZ,iBACA,WAMA,UACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WAEA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YAEA,YACA,YACA,YACA,YACA,YACA,YACA,YAGA,sBAKE95J,YACU+M,EACAF,EACAxM,EACAF,EACA8M,EACA/M,EACA2B,GANA,KAAAkL,cAAAA,EACA,KAAAF,cAAAA,EACA,KAAAxM,WAAAA,EACA,KAAAF,YAAAA,EACA,KAAA8M,kBAAAA,EACA,KAAA/M,qBAAAA,EACA,KAAA2B,cAAAA,EAXV,KAAA4xE,sBAAwB,EAAAA,sBAExB,KAAAE,qBAAuB,EAAAA,qBAYvBomF,mBACE,OAAO/4J,KAAKyyE,sBAAsB1rE,OAAO/G,KAAK2yE,sBAG1CL,OACJL,EACAE,EACAhxE,EAAyB,M,yCAEzB,MAAM63J,QAAqB/mF,EAASoJ,MAAMlJ,GAC1C,GAAI6mF,EAAa98F,QAAS,CACxB,GAAoC,IAAhC88F,EAAazmG,QAAQ3hD,QAAgD,IAAhCooJ,EAAaprI,QAAQhd,OAC5D,OAAO,IAAI,EAAA6uG,YAAYz/G,KAAKb,YAAYmB,EAAE,uBACrC,GAAI04J,EAAaprI,QAAQhd,OAAS,EAAG,CAC1C,MAAMqoJ,EAAUnxH,KAAKmf,MAAM+xG,EAAaprI,QAAQhd,OAAS,GACnDsoJ,EAAOF,EAAaprI,QAAQhd,OAAS,EAE3C,GACE5Q,KAAKm5J,QAAQH,EAAaprI,QAAQ,KAClC5tB,KAAKm5J,QAAQH,EAAaprI,QAAQqrI,KAClCj5J,KAAKm5J,QAAQH,EAAaprI,QAAQsrI,IAElC,OAAO,IAAI,EAAAz5C,YAAYz/G,KAAKb,YAAYmB,EAAE,sBAG9C,UACQN,KAAKo5J,WAAWJ,EAAc73J,GACpC,MAAO2B,GACP,MAAMu2J,EAAgB,IAAI,GAAA96G,cAAcz7C,EAAO,KAC/C,OAAO9C,KAAKs5J,kBAAkBD,EAAeL,GAE/C,OAAO,KAEP,OAAK,GAAAl3J,MAAMm7C,mBAAmB+7G,EAAatmJ,cAGlC,IAAI,EAAA+sG,YACTz/G,KAAKb,YAAYmB,EAAE,qBACnB04J,EAAahiD,iBAJR,IAAI,EAAAyI,YAAYu5C,EAAatmJ,aAAcsmJ,EAAahiD,oBAUrE9kC,YACEl/B,EACA7xC,EAAyB,KACzBy3C,EAAmB,MAEnB,MAAMq5B,EAAWjyE,KAAKu5J,oBAAoBvmH,EAAQ4F,GAClD,OAAgB,MAAZq5B,EACK,MAETA,EAAS9wE,eAAiBA,EACnB8wE,GAGDsnF,oBAAoBvmH,EAAmD4F,GAC7E,GAAc,MAAV5F,EACF,OAAO,KAGT,OAAQA,GACN,IAAK,eACH,OAAO,IAAI,EAAAqjE,qBACb,IAAK,gBACH,OAAO,IAAI,EAAAS,sBAAsB92G,KAAKa,cAAeb,KAAKb,aAC5D,IAAK,6BACH,OAAO,IAAI,EAAA44G,mCACT/3G,KAAKa,cACLb,KAAKb,YACLy5C,GAEJ,IAAK,cACL,IAAK,cACH,OAAO,IAAI,EAAAipE,oBACb,IAAK,cACH,OAAO,IAAI,EAAAJ,oBACb,IAAK,WACH,OAAO,IAAI,EAAApO,iBACb,IAAK,UACH,OAAO,IAAI,EAAAqF,gBACb,IAAK,iBACH,OAAO,IAAI,GAAAsY,uBACb,IAAK,aACH,OAAO,IAAI,EAAAnD,mBACb,IAAK,cACH,OAAO,IAAI,EAAAjN,oBACb,IAAK,YACL,IAAK,WACL,IAAK,aACH,OAAO,IAAI,EAAA7H,kBACb,IAAK,aACH,OAAO,IAAI,EAAA+F,mBACb,IAAK,SACH,OAAO,IAAI,GAAAkU,eACb,IAAK,eACH,OAAO,IAAI,GAAAvB,qBACb,IAAK,YACH,OAAO,IAAI,EAAAX,kBACb,IAAK,aACH,OAAO,IAAI,EAAAjN,mBACb,IAAK,gBACH,OAAO,IAAI,EAAAsC,wBACb,IAAK,gBACH,OAAO,IAAI,EAAA2B,wBACb,IAAK,kBACH,OAAO,IAAI,EAAA4F,0BACb,IAAK,kBACH,OAAO,IAAI,EAAAD,0BACb,IAAK,YACH,OAAO,IAAI,EAAA7L,kBAGb,IAAK,oBACH,OAAO,IAAI,EAAA2N,0BACb,IAAK,YACH,OAAO,IAAI,EAAA5R,kBACb,IAAK,aACH,OAAO,IAAI,EAAAM,mBACb,IAAK,YACH,OAAO,IAAI,EAAA2R,wBACb,IAAK,cACH,OAAO,IAAI,EAAA1V,oBACb,IAAK,eACH,OAAO,IAAI,EAAA8B,qBACb,IAAK,aACH,OAAO,IAAI,EAAAiI,mBACb,IAAK,oBACH,OAAO,IAAI,GAAA8N,0BACb,IAAK,aACH,OAAO,IAAI,GAAAY,mBACb,IAAK,eACH,OAAO,IAAI,EAAA3Z,qBACb,IAAK,cACH,OAAO,IAAI,EAAAyX,oBACb,IAAK,aACH,OAAO,IAAI,EAAArf,mBACb,IAAK,mBACH,OAAO,IAAI,EAAA6d,yBACb,IAAK,eACH,OAAO,IAAI,GAAAiE,qBACb,IAAK,cACH,OAAO,IAAI,GAAAtB,oBACb,IAAK,cACH,OAAO,IAAI,EAAA5D,oBACb,IAAK,YACH,OAAO,IAAI,EAAA7O,kBACb,IAAK,mBACH,OAAO,IAAI,EAAA2P,yBACb,IAAK,cACH,OAAO,IAAI,EAAAR,oBACb,IAAK,cACH,OAAO,IAAI,EAAAJ,oBACb,IAAK,WACH,OAAO,IAAI,EAAA9b,iBACb,IAAK,YACH,OAAO,IAAI,EAAAE,kBACb,IAAK,aACH,OAAO,IAAI,EAAAyM,mBACb,IAAK,eACH,OAAO,IAAI,EAAAe,qBACb,IAAK,eACH,OAAO,IAAI,EAAAoQ,qBACb,IAAK,oBACH,OAAO,IAAI,EAAAD,0BACb,IAAK,UACH,OAAO,IAAI,EAAAxL,gBACb,IAAK,gBACH,OAAO,IAAI,GAAAiN,sBACb,IAAK,eACH,OAAO,IAAI,EAAA9N,qBACb,IAAK,gBACH,OAAO,IAAI,EAAAtL,sBACb,IAAK,eACH,OAAO,IAAI,EAAAM,qBACb,IAAK,cACH,OAAO,IAAI,EAAAS,oBACb,IAAK,cACH,OAAO,IAAI,EAAA+D,oBACb,IAAK,UACH,OAAO,IAAI,GAAA6V,gBACb,IAAK,cACH,OAAO,IAAI,EAAAzN,oBACb,QACE,OAAO,MAIC4zC,WAAWJ,EAA4B73J,EAAyB,M,yCAC5E,GAAsB,MAAlBA,EAAwB,CAC1B,MAAMtB,EAAU,IAAI,GAAA25J,qBACpB,IAAK,IAAIphJ,EAAI,EAAGA,EAAI4gJ,EAAaprI,QAAQhd,OAAQwH,IAAK,CACpD,MAAMqC,QAAUza,KAAK+L,cAAc8lB,QAAQmnI,EAAaprI,QAAQxV,IAChEvY,EAAQ+tB,QAAQvW,KAAK,IAAI,GAAAm9B,cAAc/5B,IAEzC,GAA4B,MAAxBu+I,EAAazmG,QACf,IAAK,IAAIn6C,EAAI,EAAGA,EAAI4gJ,EAAazmG,QAAQ3hD,OAAQwH,IAAK,CACpD,MAAM49B,QAAUh2C,KAAK6L,cAAcgmB,QAAQmnI,EAAazmG,QAAQn6C,IAChEvY,EAAQ0yD,QAAQl7C,KAAK,IAAI,GAAA2xH,cAAchzF,IAQ3C,OALwC,MAApCgjH,EAAa9jD,qBACf8jD,EAAa9jD,oBAAoBrkG,SAASsD,GACxCtU,EAAQq1G,oBAAoB79F,KAAK,IAAI,GAAAoiJ,WAAWtlJ,EAAE,GAAIA,EAAE,aAG/CnU,KAAKX,WAAW27I,kBAAkBn7I,GAC1C,CACL,MAAMA,EAAU,IAAI,GAAA65J,iCACpB,IAAK,IAAIthJ,EAAI,EAAGA,EAAI4gJ,EAAaprI,QAAQhd,OAAQwH,IAAK,CACpD4gJ,EAAaprI,QAAQxV,GAAGjX,eAAiBA,EACzC,MAAMsZ,QAAUza,KAAK+L,cAAc8lB,QAAQmnI,EAAaprI,QAAQxV,IAChEvY,EAAQ+tB,QAAQvW,KAAK,IAAI,GAAAm9B,cAAc/5B,IAEzC,GAAgC,MAA5Bu+I,EAAaj1I,YACf,IAAK,IAAI3L,EAAI,EAAGA,EAAI4gJ,EAAaj1I,YAAYnT,OAAQwH,IAAK,CACxD4gJ,EAAaj1I,YAAY3L,GAAGjX,eAAiBA,EAC7C,MAAMsZ,QAAUza,KAAKiM,kBAAkB4lB,QAAQmnI,EAAaj1I,YAAY3L,IACxEvY,EAAQkkB,YAAY1M,KAAK,IAAI,GAAAua,kBAAkBnX,IAQnD,OAL4C,MAAxCu+I,EAAa7jD,yBACf6jD,EAAa7jD,wBAAwBtkG,SAASsD,GAC5CtU,EAAQs1G,wBAAwB99F,KAAK,IAAI,GAAAoiJ,WAAWtlJ,EAAE,GAAIA,EAAE,aAGnDnU,KAAKX,WAAW47I,8BAA8B95I,EAAgBtB,OAIvEs5J,QAAQ1+I,GACd,OACa,MAAVA,EAAE/Z,MAA2B,OAAX+Z,EAAE/Z,OACrB+Z,EAAEpJ,OAAS,EAAAs4B,WAAW+O,OACX,MAAXj+B,EAAEk+B,OACF,GAAA72C,MAAMm7C,mBAAmBxiC,EAAEk+B,MAAMC,UAI7B0gH,kBAAkBD,EAA8BL,GACtD,GAAsC,MAAlCK,EAAcjqD,iBAChB,OAAO,IAAI,EAAAqQ,YAAY45C,EAAchsJ,SAGvC,IAAIqF,EAAe,GAmCnB,OAjCAgqB,OAAOswF,QAAQqsC,EAAcjqD,kBAAkBv+F,SAAQ,EAAEzO,EAAKuY,GAAQT,KACpE,IAAIuvB,EACAkwH,EACJ,MAAMvhJ,EAAIgrG,OAAOhhH,EAAI+jF,MAAM,UAAU,IAErC,OAAQ/jF,EAAI+jF,MAAM,QAAQ,IACxB,IAAK,UACH18C,EAAOuvH,EAAaprI,QAAQxV,GAC5BuhJ,EAAW,EAAAhwH,WAAWF,EAAKp4B,MAC3B,MACF,IAAK,UACHo4B,EAAOuvH,EAAazmG,QAAQn6C,GAC5BuhJ,EAAW,SACX,MACF,IAAK,cACHlwH,EAAOuvH,EAAaj1I,YAAY3L,GAChCuhJ,EAAW,aACX,MACF,QACE,OAGAz/I,EAAQ,IACVxH,GAAgB,QAGD,WAAbinJ,GAAsC,eAAbA,IAC3BjnJ,GAAgB,KAAO0F,EAAI,GAAK,MAGlC1F,GAAgB,IAAMinJ,EAAW,MAAQlwH,EAAK/oC,KAAO,MAAQia,KAGxD,IAAI,EAAA8kG,YAAY/sG,M,gbCnX3B,iBACA,WACA,WACA,UACA,WACA,WAGA,4BACE1T,YACUM,EACAuB,EACAxB,EACAuM,EACA7K,EACAia,EACAzW,EACAyzI,GAPA,KAAA14I,aAAAA,EACA,KAAAuB,cAAAA,EACA,KAAAxB,WAAAA,EACA,KAAAuM,aAAAA,EACA,KAAA7K,WAAAA,EACA,KAAAia,oBAAAA,EACA,KAAAzW,sBAAAA,EACA,KAAAyzI,eAAAA,EAGV4hB,oBAAoB/iI,GAClB,OAAO72B,KAAKV,aAAas6J,oBAAoB/iI,GAGzCo1B,sB,yCACJ,aAAajsD,KAAKV,aAAa2sD,yBAG3B4tG,qB,yCACJ,MAAMC,QAAyB95J,KAAK4L,aAAamuJ,gBAC3CC,EAAmE,aAAnCh6J,KAAK62F,2BACrCojE,UAAqCj6J,KAAKisD,uBAEhD,OAAO6tG,GAAoBE,GAA0BC,KAGjDljE,c,yCACJ,MAAM92E,QAAqBjgB,KAAK62F,0BAC1Bz0F,QAAYpC,KAAKa,cAAcgoC,SAC/BqxH,EAAsB,IAAI,EAAAC,2BAA2B/3J,EAAIylI,WAE/D,UACQ7nI,KAAKX,WAAW0/I,0BACpB9+H,EAAak1G,gBACb+kC,GAEF,MAAOr3J,GACP7C,KAAKo6J,wBAAwBv3J,SAGzB7C,KAAKX,WAAW+5I,+BAGlB/jB,aAAa5nH,G,yCACjB,IACE,MAAM4sJ,QAAwBr6J,KAAKX,WAAWw/I,2BAA2BpxI,GACnE6sJ,EAAS,EAAAx4J,MAAMC,eAAes4J,EAAgBj4J,KAC9CqtE,EAAI,IAAI,EAAAv0C,mBAAmBo/H,SAC3Bt6J,KAAKa,cAAcmxF,OAAOviB,GAChC,MAAO5sE,GACP7C,KAAKo6J,wBAAwBv3J,OAI3Bg0F,0B,yCAEJ,aADmB72F,KAAKgb,oBAAoBI,UAChCuF,MACTC,GACCA,EAAE0gB,qBACF1gB,EAAEvP,OAAS,EAAA+M,qBAAqBsY,OAChC9V,EAAEvP,OAAS,EAAA+M,qBAAqBqY,QAC/B7V,EAAE0kH,oBAIHlN,gCAAgCnD,EAAsCnsG,G,yCAC1E,MAAM,IAAE2R,EAAG,cAAEC,EAAa,gBAAEy6F,GAAoBF,EAC1Cr8E,QAAiB54C,KAAKuE,sBAAsBwrJ,YAAY,IAExDtgF,QAAUzvE,KAAKa,cAAcu6B,QACjC,EAAAt5B,MAAMi8C,gBAAgBnF,SAChB54C,KAAK4L,aAAasR,WACxBud,EACAC,GAEIw/H,EAAsB,IAAI,EAAAC,2BAA2B1qF,EAAEo4D,iBACvD7nI,KAAKa,cAAcmxF,OAAOviB,GAEhC,MAAMztE,QAAehC,KAAKa,cAAcsxD,WAAWsd,SAC7CzvE,KAAKa,cAAcy8F,UAAUt7F,EAAO,GAAGO,iBAE7C,MAAOg4J,EAAQC,SAAiBx6J,KAAKa,cAAcg1B,cAEnD,UACQ71B,KAAKX,WAAW0/I,0BAA0B5pB,EAAiB+kC,GACjE,MAAOr3J,GACP7C,KAAKo6J,wBAAwBv3J,GAG/B,MAAMohC,EAAO,IAAI,EAAAsyD,YAAYgkE,EAAQC,EAAQj4J,iBACvCk4J,EAAqB,IAAI,EAAAC,0BAC7B14J,EAAO,GAAGO,gBACVk4B,EACAC,EACA5R,EACAmb,SAEIjkC,KAAKX,WAAW05I,uBAAuB0hB,MAGzCE,0BAA0B5jJ,G,+CACxB/W,KAAKV,aAAas7J,gCAAgC7jJ,MAGpD2vF,4B,yCACJ,aAAa1mG,KAAKV,aAAau7J,qCAG3B7jE,+B,+CACEh3F,KAAKV,aAAas7J,gCAAgC,SAGpD3qJ,Q,+CACEjQ,KAAKg3F,kCAGLojE,wBAAwBv3J,GAK9B,MAJA7C,KAAKe,WAAW+B,MAAMD,GACK,MAAvB7C,KAAKg4I,gBACPh4I,KAAKg4I,gBAAe,GAEhB,IAAIp2I,MAAM,0B,kbC3IpB,iBACA,WAUA,WACA,UACA,WAOA,6BAQE5C,YACU+J,EACAgB,EACA1K,EACAkE,EACAy0I,EACAj3I,EACAzB,EACA+E,GAPA,KAAA0E,YAAAA,EACA,KAAAgB,aAAAA,EACA,KAAA1K,WAAAA,EACA,KAAAkE,mBAAAA,EACA,KAAAy0I,eAAAA,EACA,KAAAj3I,WAAAA,EACA,KAAAzB,aAAAA,EACA,KAAA+E,YAAAA,EAbF,KAAAy2J,WAAY,EACZ,KAAAhhC,QAAS,EACT,KAAAihC,UAAW,EACX,KAAAC,eAAsB,KAY5Bh7J,KAAKuD,mBAAmBikD,KAAKxiD,WAAU,KAChChF,KAAK85H,QAIV95H,KAAKyK,UAIHA,O,yCACJzK,KAAK85H,QAAS,EACd95H,KAAKyN,IAAMzN,KAAKuD,mBAAmBmxJ,sBAIlB,cAAb10J,KAAKyN,MAIqB,MAA1BzN,KAAKi7J,oBACPj7J,KAAKi7J,kBAAkBC,IAAI,kBAC3Bl7J,KAAKi7J,kBAAkBC,IAAI,mBACrBl7J,KAAKi7J,kBAAkBt4D,OAC7B3iG,KAAK86J,WAAY,EACjB96J,KAAKi7J,kBAAoB,MAG3Bj7J,KAAKi7J,mBAAoB,IAAIE,EAAQC,sBAClCC,QAAQr7J,KAAKyN,IAAM,OAAQ,CAC1B6tJ,mBAAoB,IAAMt7J,KAAKX,WAAWo/I,uBAC1C8c,iBAAiB,EACjBC,UAAWL,EAAQM,kBAAkBC,aAEtCC,gBAAgB,IAAIC,EAAeC,wBAEnCxzB,QAEHroI,KAAKi7J,kBAAkBlyG,GAAG,kBAAmBxiD,GAC3CvG,KAAK87J,oBAAoB,IAAI,EAAA/tB,qBAAqBxnI,MAGpDvG,KAAKi7J,kBAAkBlyG,GAAG,aAAcxiD,QAGxCvG,KAAKi7J,kBAAkBc,SAAQ,KAC7B/7J,KAAK86J,WAAY,EACjB96J,KAAKg8J,WAAU,MAEjBh8J,KAAK85H,QAAS,SACJ95H,KAAKi8J,+BACPj8J,KAAKg8J,WAAU,QAInBxuJ,iBAAiB0uJ,GAAO,G,yCAC5B,GAAKl8J,KAAK85H,OAGV,WACY95H,KAAKi8J,6BACPj8J,KAAKg8J,UAAUE,SAEfl8J,KAAKi7J,kBAAkBt4D,OAE/B,MAAO9/F,GACP7C,KAAKe,WAAW+B,MAAMD,EAAEyC,gBAItBiM,wB,yCACJvR,KAAK+6J,UAAW,EACZ/6J,KAAK85H,SAAW95H,KAAK86J,kBACjB96J,KAAKg8J,WAAU,OAInB1qJ,2B,yCACJtR,KAAK+6J,UAAW,EACZ/6J,KAAK85H,QAAU95H,KAAK86J,kBAChB96J,KAAKi7J,kBAAkBt4D,WAInBm5D,oBAAoBK,G,yCAChC,MAAMzlC,QAAc12H,KAAK+J,aAAai5F,WACtC,GAAoB,MAAhBm5D,GAAwBA,EAAanuB,YAActX,EACrD,OAGF,MAAM0lC,QAAwBp8J,KAAKV,aAAa8L,qBAC1CixJ,EAAgBF,EAAal7F,QAAQh2D,QAAUkxJ,EAAal7F,QAAQq7F,OACpEC,QAAiBv8J,KAAKV,aAAaoQ,YACzC,IAAI0sJ,GAAoC,MAAjBC,GAAyBA,IAAkBE,EAIlE,OAAQJ,EAAa9qJ,MACnB,KAAK,EAAA6+F,iBAAiB+9B,iBACtB,KAAK,EAAA/9B,iBAAiBi+B,uBACdnuI,KAAK+I,YAAYyzJ,iBACrBL,EAAal7F,QACbk7F,EAAa9qJ,OAAS,EAAA6+F,iBAAiBi+B,kBAEzC,MACF,KAAK,EAAAj+B,iBAAiBg+B,iBACtB,KAAK,EAAAh+B,iBAAiBk+B,sBACdpuI,KAAK+I,YAAY0zJ,iBAAiBN,EAAal7F,SACrD,MACF,KAAK,EAAAivC,iBAAiBo+B,iBACtB,KAAK,EAAAp+B,iBAAiBs+B,uBACdxuI,KAAK+I,YAAY2zJ,iBACrBP,EAAal7F,QACbk7F,EAAa9qJ,OAAS,EAAA6+F,iBAAiBs+B,kBAEzC,MACF,KAAK,EAAAt+B,iBAAiBq+B,uBACdvuI,KAAK+I,YAAY4zJ,iBAAiBR,EAAal7F,SACrD,MACF,KAAK,EAAAivC,iBAAiBw+B,UACtB,KAAK,EAAAx+B,iBAAiBy+B,YACtB,KAAK,EAAAz+B,iBAAiB2+B,aAChButB,UACIp8J,KAAK+I,YAAYqU,UAAS,IAElC,MACF,KAAK,EAAA8yF,iBAAiB0+B,YAChBwtB,UACIp8J,KAAK+I,YAAYqU,UAAS,SAE1Bpd,KAAKi7J,kBAAkBt4D,QAE/B,MACF,KAAK,EAAAuN,iBAAiB4+B,OAChBstB,GACFp8J,KAAKg4I,gBAAe,GAEtB,MACF,KAAK,EAAA9nC,iBAAiB8+B,eACtB,KAAK,EAAA9+B,iBAAiB++B,qBACdjvI,KAAK+I,YAAY6zJ,eACrBT,EAAal7F,QACbk7F,EAAa9qJ,OAAS,EAAA6+F,iBAAiB++B,gBAEzC,MACF,KAAK,EAAA/+B,iBAAiBg/B,qBACdlvI,KAAK+I,YAAY8zJ,eAAeV,EAAal7F,aAO3C+6F,UAAUE,G,yCAKtB,GAJ2B,MAAvBl8J,KAAKg7J,iBACPxqJ,aAAaxQ,KAAKg7J,gBAClBh7J,KAAKg7J,eAAiB,MAEpBh7J,KAAK86J,YAAc96J,KAAK85H,QAAU95H,KAAK+6J,SACzC,OAGF,SADgC/6J,KAAKi8J,sBACrC,CAIA,UACQj8J,KAAKi7J,kBAAkBhoJ,QAC7BjT,KAAK86J,WAAY,EACboB,UACIl8J,KAAK+I,YAAYqU,UAAS,IAElC,MAAOva,GACP7C,KAAKe,WAAW+B,MAAMD,GAGnB7C,KAAK86J,YACR96J,KAAKg7J,eAAiBvqJ,YAAW,IAAMzQ,KAAKg8J,UAAUE,IAAOl8J,KAAKy7H,OAAO,KAAQ,WAIvEwgC,sB,yCAEZ,aADyBj8J,KAAKqE,YAAY6X,kBACrB,EAAAC,qBAAqBulI,YAGpCjmB,OAAOu2B,EAAaxhF,GAG1B,OAFAwhF,EAAMlqH,KAAK66G,KAAKqP,GAChBxhF,EAAM1oC,KAAKmf,MAAMupB,GACV1oC,KAAKmf,MAAMnf,KAAK2zF,UAAYjrD,EAAMwhF,EAAM,IAAMA,K,ibC/NzD,iBAEA,4BACEhzJ,YAAoBM,GAAA,KAAAA,aAAAA,EAEdkX,IAAIrW,G,yCACR,MAAM+a,QAAsBlb,KAAKV,aAAaw9J,mBAE9C,OAAqB,MAAjB5hJ,GAA0BA,EAAcid,eAAeh4B,GAIpD,IAAI,EAAA48J,aAAa7hJ,EAAc/a,IAH7B,QAML68J,gBAAgB1zJ,G,yCACpB,MAAM4R,QAAsBlb,KAAKob,SACjC,OAAqB,MAAjBF,GAAkD,IAAzBA,EAActK,OAClC,KAGFsK,EAAcyF,MAAMC,GAAMA,EAAEtX,aAAeA,OAG9C8R,OAAOnQ,G,yCACX,MAAMiQ,QAAsBlb,KAAKV,aAAaw9J,iBAAiB,CAAE7xJ,OAAQA,IACnEvJ,EAA2B,GACjC,IAAK,MAAMvB,KAAM+a,EAEXA,EAAcid,eAAeh4B,KAAQ+a,EAAc/a,GAAImlI,gBACzD5jI,EAAS2V,KAAK,IAAI,EAAA0lJ,aAAa7hJ,EAAc/a,KAIjD,OADuBuB,EAASwV,MAAK,CAAC8gB,EAAGikB,IAAMjkB,EAAEt3B,KAAKoyE,cAAc72B,EAAEv7C,WAIlE46E,KAAKpgE,G,yCACT,aAAalb,KAAKV,aAAa29J,iBAAiB/hJ,MAG5CqqD,wB,yCAEJ,aADmBvlE,KAAKob,UACZ3I,MACTmO,GAAMA,EAAE+lD,4BAAkE,OAApC/lD,EAAEgmD,mCAIvCkkB,iBAAiB7/E,G,yCAErB,aAD4BjL,KAAKob,OAAOnQ,IACnB2F,OAAS,Q,ubCrDlC,iBAMA,UACA,WACA,WACA,WACA,WAGMssJ,EAAiB,CACrBtsJ,OAAQ,GACR87E,WAAW,EACX0B,QAAQ,EACR+uE,UAAW,EACXjvE,WAAW,EACXkvE,aAAc,EACdjvE,WAAW,EACXkvE,aAAc,EACdhvE,SAAS,EACTtsD,WAAY,EACZ1wB,KAAM,WACNsiJ,SAAU,EACV2J,cAAe,IACfr7H,YAAY,EACZC,eAAe,GAKjB,kCACEljC,YACU6B,EACAC,EACAxB,GAFA,KAAAuB,cAAAA,EACA,KAAAC,cAAAA,EACA,KAAAxB,aAAAA,EAGJ26B,iBAAiBtpB,G,yCAErB,MAAMiQ,EAAI8b,OAAOC,OAAO,GAAIugI,EAAgBvsJ,GAE5C,GAAe,eAAXiQ,EAAEvP,KACJ,OAAOrR,KAAKu9J,mBAAmB5sJ,GAIjC3Q,KAAKw9J,uBAAuB58I,GAAG,GAE/B,MAAMmgB,EAAoBngB,EAAEw8I,aAAex8I,EAAEy8I,aAAez8I,EAAEu8I,UAAYv8I,EAAEmhB,WACxEnhB,EAAEhQ,OAASmwB,IACbngB,EAAEhQ,OAASmwB,GAGb,MAAM08H,EAAsB,GAC5B,GAAI78I,EAAEutE,WAAavtE,EAAEy8I,aAAe,EAClC,IAAK,IAAIjlJ,EAAI,EAAGA,EAAIwI,EAAEy8I,aAAcjlJ,IAClCqlJ,EAAUpmJ,KAAK,KAGnB,GAAIuJ,EAAEstE,WAAattE,EAAEw8I,aAAe,EAClC,IAAK,IAAIhlJ,EAAI,EAAGA,EAAIwI,EAAEw8I,aAAchlJ,IAClCqlJ,EAAUpmJ,KAAK,KAGnB,GAAIuJ,EAAEwtE,QAAUxtE,EAAEu8I,UAAY,EAC5B,IAAK,IAAI/kJ,EAAI,EAAGA,EAAIwI,EAAEu8I,UAAW/kJ,IAC/BqlJ,EAAUpmJ,KAAK,KAGnB,GAAIuJ,EAAEytE,SAAWztE,EAAEmhB,WAAa,EAC9B,IAAK,IAAI3pB,EAAI,EAAGA,EAAIwI,EAAEmhB,WAAY3pB,IAChCqlJ,EAAUpmJ,KAAK,KAGnB,KAAOomJ,EAAU7sJ,OAASgQ,EAAEhQ,QAC1B6sJ,EAAUpmJ,KAAK,WAIXrX,KAAK09J,aAAaD,GAGxB,IAAIE,EAAa,GAEbC,EAAmB,4BACnBh9I,EAAE8rE,YACJkxE,GAAoB,KAElBh9I,EAAEutE,YACJwvE,GAAcC,GAGhB,IAAIC,EAAmB,2BACnBj9I,EAAE8rE,YACJmxE,GAAoB,MAElBj9I,EAAEstE,YACJyvE,GAAcE,GAGhB,IAAIC,EAAgB,WAChBl9I,EAAE8rE,YACJoxE,GAAiB,MAEfl9I,EAAEwtE,SACJuvE,GAAcG,GAGhB,MAAMC,EAAiB,WACnBn9I,EAAEytE,UACJsvE,GAAcI,GAGhB,IAAInlH,EAAW,GACf,IAAK,IAAIxgC,EAAI,EAAGA,EAAIwI,EAAEhQ,OAAQwH,IAAK,CACjC,IAAI4lJ,EACJ,OAAQP,EAAUrlJ,IAChB,IAAK,IACH4lJ,EAAgBJ,EAChB,MACF,IAAK,IACHI,EAAgBH,EAChB,MACF,IAAK,IACHG,EAAgBF,EAChB,MACF,IAAK,IACHE,EAAgBD,EAChB,MACF,IAAK,IACHC,EAAgBL,EAMpB,MAAMM,QAAwBj+J,KAAKa,cAAckxJ,aAAa,EAAGiM,EAAcptJ,OAAS,GACxFgoC,GAAYolH,EAAc/wI,OAAOgxI,GAGnC,OAAOrlH,KAGH2kH,mBAAmB5sJ,G,yCACvB,MAAMiQ,EAAI8b,OAAOC,OAAO,GAAIugI,EAAgBvsJ,IAE1B,MAAdiQ,EAAE+yI,UAAoB/yI,EAAE+yI,UAAY,KACtC/yI,EAAE+yI,SAAWuJ,EAAevJ,WAEP,MAAnB/yI,EAAE08I,eAAoD,IAA3B18I,EAAE08I,cAAc1sJ,QAAgBgQ,EAAE08I,cAAc1sJ,OAAS,KACtFgQ,EAAE08I,cAAgB,KAEA,MAAhB18I,EAAEqhB,aACJrhB,EAAEqhB,YAAa,GAEM,MAAnBrhB,EAAEshB,gBACJthB,EAAEshB,eAAgB,GAGpB,MAAMg8H,EAAa,EAAArhC,gBAAgBjsH,OAAS,EACtCutJ,EAAW,IAAI5vJ,MAAMqS,EAAE+yI,UAC7B,IAAK,IAAIv7I,EAAI,EAAGA,EAAIwI,EAAE+yI,SAAUv7I,IAAK,CACnC,MAAMgmJ,QAAkBp+J,KAAKa,cAAckxJ,aAAa,EAAGmM,GACvDt9I,EAAEqhB,WACJk8H,EAAS/lJ,GAAKpY,KAAKiiC,WAAW,EAAA46F,gBAAgBuhC,IAE9CD,EAAS/lJ,GAAK,EAAAykH,gBAAgBuhC,GAOlC,OAHIx9I,EAAEshB,sBACEliC,KAAKq+J,+BAA+BF,IAErCA,EAASvkJ,KAAKgH,EAAE08I,kBAGnBpjI,a,yCACJ,IAAIvpB,QAAgB3Q,KAAKV,aAAag/J,+BAEpC3tJ,EADa,MAAXA,EACQ+rB,OAAOC,OAAO,GAAIugI,GAElBxgI,OAAOC,OAAO,GAAIugI,EAAgBvsJ,SAExC3Q,KAAKV,aAAai/J,6BAA6B5tJ,GACrD,MAAM6tJ,QAAwBx+J,KAAKy+J,0CAA0C9tJ,GAE7E,OADAA,EAAU6tJ,EAAgB,GACnB,CAAC7tJ,EAAS6tJ,EAAgB,OAG7BC,0CACJ9tJ,G,yCAEA,IAAIhI,QAA8B3I,KAAK0+J,oCA0DvC,OAzD6B,MAAzB/1J,GACEgI,EAAQC,OAASjI,EAAsBo4B,YACzCpwB,EAAQC,OAASjI,EAAsBo4B,WAGrCp4B,EAAsBk9H,eACxBl1H,EAAQu9E,WAAY,GAGlBvlF,EAAsBm9H,eACxBn1H,EAAQw9E,WAAY,GAGlBxlF,EAAsBi5B,aACxBjxB,EAAQy9E,QAAS,GAGfz9E,EAAQwsJ,UAAYx0J,EAAsBo9H,cAC5Cp1H,EAAQwsJ,UAAYx0J,EAAsBo9H,aAGxCp9H,EAAsBk5B,aACxBlxB,EAAQ09E,SAAU,GAGhB19E,EAAQoxB,WAAap5B,EAAsBq9H,eAC7Cr1H,EAAQoxB,WAAap5B,EAAsBq9H,cAIzCr1H,EAAQoxB,WAAapxB,EAAQwsJ,UAAYxsJ,EAAQC,SACnDD,EAAQoxB,WAAapxB,EAAQC,OAASD,EAAQwsJ,WAG5CxsJ,EAAQgjJ,SAAWhrJ,EAAsBq5B,iBAC3CrxB,EAAQgjJ,SAAWhrJ,EAAsBq5B,gBAGvCr5B,EAAsBs5B,aACxBtxB,EAAQsxB,YAAa,GAGnBt5B,EAAsBu5B,gBACxBvxB,EAAQuxB,eAAgB,GAKc,aAAtCv5B,EAAsB84B,aACgB,eAAtC94B,EAAsB84B,cAEtB9wB,EAAQU,KAAO1I,EAAsB84B,cAIvC94B,EAAwB,IAAI,EAAAi9H,+BAEvB,CAACj1H,EAAShI,MAGb+1J,oC,yCACJ,MAAMj8J,EACkB,MAAtBzC,KAAKc,cACD,WACMd,KAAKc,cAAcsa,OAAO,EAAA4G,WAAWuf,mBACjD,IAAIi9H,EAAkD,KAEtD,OAAgB,MAAZ/7J,GAAwC,IAApBA,EAASmO,QAIjCnO,EAASoO,SAAS8tJ,IACXA,EAAcp8I,SAAiC,MAAtBo8I,EAAcp4J,OAIrB,MAAnBi4J,IACFA,EAAkB,IAAI,EAAA54B,gCAIc,MAAlC+4B,EAAcp4J,KAAKk7B,aAAuD,aAAhC+8H,EAAgB/8H,cAC5D+8H,EAAgB/8H,YAAck9H,EAAcp4J,KAAKk7B,aAIjB,MAAhCk9H,EAAcp4J,KAAKw6B,WACnB49H,EAAcp4J,KAAKw6B,UAAYy9H,EAAgBz9H,YAE/Cy9H,EAAgBz9H,UAAY49H,EAAcp4J,KAAKw6B,WAG7C49H,EAAcp4J,KAAKm7B,WACrB88H,EAAgB34B,cAAe,GAG7B84B,EAAcp4J,KAAKo7B,WACrB68H,EAAgB14B,cAAe,GAG7B64B,EAAcp4J,KAAKq7B,aACrB48H,EAAgB58H,YAAa,GAII,MAAjC+8H,EAAcp4J,KAAKu7B,YACnB68H,EAAcp4J,KAAKu7B,WAAa08H,EAAgBz4B,cAEhDy4B,EAAgBz4B,YAAc44B,EAAcp4J,KAAKu7B,YAG/C68H,EAAcp4J,KAAKs7B,aACrB28H,EAAgB38H,YAAa,GAII,MAAjC88H,EAAcp4J,KAAKw7B,YACnB48H,EAAcp4J,KAAKw7B,WAAay8H,EAAgBx4B,eAEhDw4B,EAAgBx4B,aAAe24B,EAAcp4J,KAAKw7B,YAIb,MAArC48H,EAAcp4J,KAAKy7B,gBACnB28H,EAAcp4J,KAAKy7B,eAAiBw8H,EAAgBx8H,iBAEpDw8H,EAAgBx8H,eAAiB28H,EAAcp4J,KAAKy7B,gBAGlD28H,EAAcp4J,KAAK07B,aACrBu8H,EAAgBv8H,YAAa,GAG3B08H,EAAcp4J,KAAK27B,gBACrBs8H,EAAgBt8H,eAAgB,OAlE3Bs8H,KAyEL3wE,YAAYl9E,G,+CACV3Q,KAAKV,aAAai/J,6BAA6B5tJ,MAGjDolF,a,yCAEJ,WADqB/1F,KAAKa,cAAcylJ,UAEtC,OAAO,IAAI/3I,MAGb,GAAyE,aAA9DvO,KAAKV,aAAas/J,yCAAkD,CAC7E,MAAM3nD,QAAkBj3G,KAAKV,aAAau/J,wCACpCC,QAAkB9+J,KAAK++J,eAAe9nD,SACtCj3G,KAAKV,aAAa0/J,sCAAsCF,GAGhE,MAAMr9B,QACEzhI,KAAKV,aAAas/J,wCAC1B,OAAoC,MAA7Bn9B,EACHA,EACA,IAAIlzH,SAGJm/E,WAAW90C,G,yCAGf,WADqB54C,KAAKa,cAAcylJ,UAEtC,OAGF,MAAM2Y,QAAuBj/J,KAAK+1F,aAGlC,GAAI/1F,KAAKk/J,gBAAgBtmH,EAAUqmH,GACjC,OAGFA,EAAeE,QAAQ,IAAI,EAAAC,yBAAyBxmH,EAAU7oC,KAAKK,QAG/D6uJ,EAAeruJ,OA1VO,KA2VxBquJ,EAAez2J,MAGjB,MAAM62J,QAAmBr/J,KAAKs/J,eAAeL,GAC7C,aAAaj/J,KAAKV,aAAaigK,sCAAsCF,MAGjEpvJ,MAAMhF,G,+CACJjL,KAAKV,aAAaigK,sCAAsC,KAAM,CAAEt0J,OAAQA,UACxEjL,KAAKV,aAAa0/J,sCAAsC,KAAM,CAAE/zJ,OAAQA,OAGhFjF,iBAAiB4yC,EAAkB4mH,EAAuB,MACxD,GAAgB,MAAZ5mH,GAAwC,IAApBA,EAAShoC,OAC/B,OAAO,KAET,IAAI6uJ,EAAmB,CAAC,YAAa,MAAO,UAC1B,MAAdD,GAAsBA,EAAW5uJ,OAAS,IAC5C6uJ,EAAmBA,EAAiB14J,OAAOy4J,IAG7C,MAAME,EAAkBnxJ,MAAMC,KAAK,IAAI+sE,IAAIkkF,IAE3C,OADeE,EAAO/mH,EAAU8mH,GAIlCpxE,iBAAiB39E,EAAchI,GAC7BgI,EAAQ0sJ,aAAe,EACvB1sJ,EAAQysJ,aAAe,GAElBzsJ,EAAQC,QAAUD,EAAQC,OAAS,EACtCD,EAAQC,OAAS,EACRD,EAAQC,OAAS,MAC1BD,EAAQC,OAAS,KAGfD,EAAQC,OAASjI,EAAsBo4B,YACzCpwB,EAAQC,OAASjI,EAAsBo4B,WAGpCpwB,EAAQwsJ,UAEFxsJ,EAAQwsJ,UAAYxsJ,EAAQC,OACrCD,EAAQwsJ,UAAYxsJ,EAAQC,OACnBD,EAAQwsJ,UAAY,IAC7BxsJ,EAAQwsJ,UAAY,GAJpBxsJ,EAAQwsJ,UAAY,EAOlBxsJ,EAAQwsJ,UAAYx0J,EAAsBo9H,cAC5Cp1H,EAAQwsJ,UAAYx0J,EAAsBo9H,aAGvCp1H,EAAQoxB,WAEFpxB,EAAQoxB,WAAapxB,EAAQC,OACtCD,EAAQoxB,WAAapxB,EAAQC,OACpBD,EAAQoxB,WAAa,IAC9BpxB,EAAQoxB,WAAa,GAJrBpxB,EAAQoxB,WAAa,EAOnBpxB,EAAQoxB,WAAap5B,EAAsBq9H,eAC7Cr1H,EAAQoxB,WAAap5B,EAAsBq9H,cAGzCr1H,EAAQoxB,WAAapxB,EAAQwsJ,UAAYxsJ,EAAQC,SACnDD,EAAQoxB,WAAapxB,EAAQC,OAASD,EAAQwsJ,WAGxB,MAApBxsJ,EAAQgjJ,UAAoBhjJ,EAAQC,OAAS,EAC/CD,EAAQgjJ,SAAW,EACVhjJ,EAAQgjJ,SAAW,KAC5BhjJ,EAAQgjJ,SAAW,IAGjBhjJ,EAAQgjJ,SAAWhrJ,EAAsBq5B,iBAC3CrxB,EAAQgjJ,SAAWhrJ,EAAsBq5B,gBAGd,MAAzBrxB,EAAQ2sJ,eAAyB3sJ,EAAQ2sJ,cAAc1sJ,OAAS,IAClED,EAAQ2sJ,cAAgB3sJ,EAAQ2sJ,cAAc,IAGhDt9J,KAAKw9J,uBAAuB7sJ,GAAS,GAG/BsxB,WAAWnV,GACjB,OAAOA,EAAIG,OAAO,GAAGN,cAAgBG,EAAIlV,MAAM,GAGnCymJ,+BAA+BF,G,yCAC3C,GAAgB,MAAZA,GAAoBA,EAASvtJ,QAAU,EACzC,OAEF,MAAMsJ,QAAcla,KAAKa,cAAckxJ,aAAa,EAAGoM,EAASvtJ,OAAS,GACnEm2C,QAAY/mD,KAAKa,cAAckxJ,aAAa,EAAG,GACrDoM,EAASjkJ,GAASikJ,EAASjkJ,GAAS6sC,KAGxBu4G,eACZ5tF,G,yCAEA,GAAe,MAAXA,GAAsC,IAAnBA,EAAQ9gE,OAC7B,OAAOjB,QAAQ2wB,QAAQ,IAGzB,MAAMmY,EAAWi5B,EAAQlrE,KAAWijC,GAAS,EAAD,gCAC1C,MAAMwtE,QAAkBj3G,KAAKa,cAAcgxB,QAAQ4X,EAAKmP,UACxD,OAAO,IAAI,EAAAwmH,yBAAyBnoD,EAAU10G,gBAAiBknC,EAAKz0B,WAGtE,aAAarF,QAAQC,IAAI6oC,MAGbsmH,eACZrtF,G,yCAEA,GAAe,MAAXA,GAAsC,IAAnBA,EAAQ9gE,OAC7B,OAAOjB,QAAQ2wB,QAAQ,IAGzB,MAAMmY,EAAWi5B,EAAQlrE,KAAWijC,GAAS,EAAD,gCAC1C,MAAMq1H,QAAkB9+J,KAAKa,cAAc0wB,cAAc,IAAI,EAAAC,UAAUiY,EAAKmP,WAC5E,OAAO,IAAI,EAAAwmH,yBAAyBN,EAAWr1H,EAAKz0B,WAGtD,aAAarF,QAAQC,IAAI6oC,MAGnBymH,gBAAgBtmH,EAAkB84B,GACxC,OAAe,MAAXA,GAAsC,IAAnBA,EAAQ9gE,QAIxB8gE,EAAQA,EAAQ9gE,OAAS,GAAGgoC,WAAaA,EAIpC8kH,aAAakC,G,yCACzB,IAAK,IAAIxnJ,EAAIwnJ,EAAMhvJ,OAAS,EAAGwH,EAAI,EAAGA,IAAK,CACzC,MAAMynJ,QAAU7/J,KAAKa,cAAckxJ,aAAa,EAAG35I,IAClDwnJ,EAAMxnJ,GAAIwnJ,EAAMC,IAAM,CAACD,EAAMC,GAAID,EAAMxnJ,QAIpColJ,uBAAuB7sJ,EAAcmvJ,GAC3C,IAAIC,EAAmB,EACnBC,EAAmB,EACnBC,EAAwBtvJ,EAAQwsJ,UAChC+C,EAAyBvvJ,EAAQoxB,WAEjCpxB,EAAQu9E,WAAav9E,EAAQysJ,cAAgB,EAC/C2C,EAAmB,EACTpvJ,EAAQu9E,YAClB6xE,EAAmB,GAGjBpvJ,EAAQw9E,WAAax9E,EAAQ0sJ,cAAgB,EAC/C2C,EAAmB,EACTrvJ,EAAQw9E,YAClB6xE,EAAmB,GAGjBrvJ,EAAQy9E,QAAUz9E,EAAQwsJ,WAAa,EACzC8C,EAAgB,EACNtvJ,EAAQy9E,SAClB6xE,EAAgB,GAGdtvJ,EAAQ09E,SAAW19E,EAAQoxB,YAAc,EAC3Cm+H,EAAiB,EACPvvJ,EAAQ09E,UAClB6xE,EAAiB,KAIdvvJ,EAAQC,QAAUD,EAAQC,OAAS,KACtCD,EAAQC,OAAS,IAGnB,MAAMmwB,EAAoBg/H,EAAmBC,EAAmBC,EAAgBC,EAE5EvvJ,EAAQC,OAASmwB,IACnBpwB,EAAQC,OAASmwB,GAIf++H,IACFnvJ,EAAQysJ,aAAe2C,EACvBpvJ,EAAQ0sJ,aAAe2C,EACvBrvJ,EAAQwsJ,UAAY8C,EACpBtvJ,EAAQoxB,WAAam+H,M,2aCpjB3B,iBACA,WACA,UACA,WACA,WAEA,WACA,UAIA,sBAGElhK,YACUM,EACA0b,EACA3b,GAFA,KAAAC,aAAAA,EACA,KAAA0b,oBAAAA,EACA,KAAA3b,WAAAA,EAGJulJ,a,+CACE5kJ,KAAKV,aAAa6gK,qBAAqB,SAGzC/kJ,OAAO/J,EAAmBpG,G,yCAC9B,IAAIvJ,EAAqB,GACzB,MAAM0+J,QAA0BpgK,KAAKV,aAAa+gK,qBAAqB,CAAEp1J,OAAQA,IACjF,GAAyB,MAArBm1J,EACF1+J,EAAW0+J,MACN,CACL,MAAME,QAAqBtgK,KAAKV,aAAaihK,qBAAqB,CAAEt1J,OAAQA,IAC5E,IAAK,MAAM9K,KAAMmgK,EAEXA,EAAanoI,eAAeh4B,IAC9BuB,EAAS2V,KAAK,IAAI,EAAA3O,OAAO43J,EAAangK,WAGpCH,KAAKV,aAAa6gK,qBAAqBz+J,EAAU,CAAEuJ,OAAQA,IAEnE,OAAY,MAARoG,EACK3P,EAAS4V,QAAQgL,GAAWA,EAAOjR,OAASA,IAE5C3P,KAILu0B,yBAAyBgD,EAAwB93B,G,yCACrD,MAAMgE,QAAYnF,KAAKgb,oBAAoBxE,IAAIrV,GAC/C,GAAIgE,MAAAA,OAAG,EAAHA,EAAKmgI,eAAgB,CACvB,MACMhjH,SADoBtiB,KAAKX,WAAWi5B,YAAYn3B,IAC3BoF,KAAKoa,MAAMla,GAAMA,EAAEtF,iBAAmBA,IAEjE,OAAc,MAAVmhB,EACK,KAGF,IAAI,EAAA5Z,OAAO,IAAI,EAAAhC,WAAW4b,IAInC,aADuBtiB,KAAKob,OAAO6d,IACnBtY,MAAMla,GAAMA,EAAEtF,iBAAmBA,OAG7CR,QAAQ8B,G,+CACNzC,KAAKV,aAAa6gK,qBAAqB,YACvCngK,KAAKV,aAAakhK,qBAAqB/9J,MAGzCwN,MAAMhF,G,+CACJjL,KAAKV,aAAa6gK,qBAAqB,KAAM,CAAEl1J,OAAQA,UACvDjL,KAAKV,aAAakhK,qBAAqB,KAAM,CAAEv1J,OAAQA,OAGzD6xF,yCACJh0E,G,yCAEA,MAAM7d,QAAejL,KAAKV,aAAaoQ,YACjChO,QAAiB1B,KAAKX,WAAW48I,yBAAyBnzH,EAAO7d,GACjExI,QAAiBzC,KAAK4C,qBAAqBlB,GACjD,OAAO1B,KAAK8F,+BAA+BrD,MAGvCqD,+BAA+BrD,G,yCACnC,IAAI+7J,EAA+C,KAQnD,OAAgB,OALd/7J,EADc,MAAZA,QACezC,KAAKob,OAAO,EAAA4G,WAAW2e,gBAE7Bl+B,EAAS6U,QAAQ7Q,GAAMA,EAAE4K,OAAS,EAAA2Q,WAAW2e,mBAGd,IAApBl+B,EAASmO,QAIjCnO,EAASoO,SAAS8tJ,IACXA,EAAcp8I,SAAiC,MAAtBo8I,EAAcp4J,OAIrB,MAAnBi4J,IACFA,EAAkB,IAAI,EAAAn5B,6BAIc,MAApCs5B,EAAcp4J,KAAKu6B,eACnB69H,EAAcp4J,KAAKu6B,cAAgB09H,EAAgB19H,gBAEnD09H,EAAgB19H,cAAgB69H,EAAcp4J,KAAKu6B,eAInB,MAAhC69H,EAAcp4J,KAAKw6B,WACnB49H,EAAcp4J,KAAKw6B,UAAYy9H,EAAgBz9H,YAE/Cy9H,EAAgBz9H,UAAY49H,EAAcp4J,KAAKw6B,WAG7C49H,EAAcp4J,KAAKy6B,eACrBw9H,EAAgBx9H,cAAe,GAG7B29H,EAAcp4J,KAAK06B,eACrBu9H,EAAgBv9H,cAAe,GAG7B09H,EAAcp4J,KAAK26B,iBACrBs9H,EAAgBt9H,gBAAiB,GAG/By9H,EAAcp4J,KAAK46B,iBACrBq9H,EAAgBr9H,gBAAiB,OAvC5Bq9H,KA8CXn4J,uBACEL,EACA+zB,EACApxB,GAEA,OAA6B,MAAzBA,KAKFA,EAAsBm4B,cAAgB,GACtCn4B,EAAsBm4B,cAAgB96B,OAMtC2C,EAAsBo4B,UAAY,GAClCp4B,EAAsBo4B,UAAYhH,EAAYnpB,YAK5CjI,EAAsBq4B,cAAgBjH,EAAY0mI,sBAAwB1mI,OAI1EpxB,EAAsBs4B,cAAgBlH,EAAY2mI,sBAAwB3mI,OAI1EpxB,EAAsBu4B,iBAAmB,QAAQ6zE,KAAKh7E,OAKtDpxB,EAAsBw4B,iBAAmB,eAAe4zE,KAAKh7E,QAOnE/2B,8BACEP,EACAqmB,G,UAEA,MAAM63I,EAA6B,IAAI,EAAAv6B,2BAEvC,GAAgB,MAAZ3jI,GAA6B,MAATqmB,EACtB,MAAO,CAAC63I,GAA4B,GAGtC,MAAMr+I,EAAS7f,EAASke,MACrBla,GAAMA,EAAEtF,iBAAmB2nB,GAASriB,EAAE4K,OAAS,EAAA2Q,WAAWC,eAAiBxb,EAAE8b,UAIhF,OAFAo+I,EAA2B19J,kBAAmD,QAA/B,EAAY,QAAZ,EAAAqf,MAAAA,OAAM,EAANA,EAAQ/b,YAAI,eAAEtD,yBAAiB,SAEvE,CAAC09J,EAA2C,QAAf,EAAAr+I,MAAAA,OAAM,EAANA,EAAQC,eAAO,UAGrD3f,qBAAqBg+J,GACnB,GAAwB,MAApBA,GAAqD,MAAzBA,EAAiBr6J,KAC/C,OAAO,KAIT,OADqBq6J,EAAiBr6J,KAAKC,KAAKC,GAAM,IAAI,EAAAC,WAAWD,KACjDD,KAAKC,GAAM,IAAI,EAAAiC,OAAOjC,KAGtCm1D,oBACJ3iC,EACA4nI,EACA51J,G,yCAEA,MAAMxI,QAAiBzC,KAAKob,OAAO6d,EAAYhuB,GACzCiQ,QAAsBlb,KAAKgb,oBAAoBI,OAAOnQ,GAC5D,IAAI61J,EAGFA,EADkB,MAAhBD,EACiBp+J,EAAS6U,QAAQ7Q,GAAMA,EAAE8b,SAAWs+I,EAAap6J,KAEjDhE,EAAS6U,QAAQ7Q,GAAMA,EAAE8b,UAG9C,MAAMw+I,EAAY,IAAIxlF,IAAIulF,EAAiBt6J,KAAKC,GAAMA,EAAEtF,kBAExD,OAAO+Z,EAAczI,MAClBmO,GACCA,EAAE2B,SACF3B,EAAE7J,QAAU,EAAAuH,2BAA2B7H,UACvCmK,EAAEuB,cACDniB,KAAKghK,sBAAsBpgJ,EAAGqY,IAC/B8nI,EAAU1qJ,IAAIuK,EAAEzgB,SAId6gK,sBAAsB/gJ,EAA4BgZ,GACxD,OAAIA,IAAe,EAAAjX,WAAW+gB,oBACrB9iB,EAAa5O,OAAS,EAAA+M,qBAAqBqY,MAG7CxW,EAAaghJ,wB,6aCjPxB,iBAEA,wBACEjiK,YAAoBM,GAAA,KAAAA,aAAAA,EAEdkX,IAAIrW,G,yCACR,MAAM4c,QAAkB/c,KAAKV,aAAawiG,eAE1C,OAAiB,MAAb/kF,GAAsBA,EAAUob,eAAeh4B,GAI5C,IAAI,EAAA+gK,SAASnkJ,EAAU5c,IAHrB,QAMLib,S,yCACJ,MAAM2B,QAAkB/c,KAAKV,aAAawiG,eACpCpgG,EAAuB,GAC7B,IAAK,MAAMvB,KAAM4c,EAEXA,EAAUob,eAAeh4B,IAC3BuB,EAAS2V,KAAK,IAAI,EAAA6pJ,SAASnkJ,EAAU5c,KAGzC,OAAOuB,KAGH45E,KAAKv+D,G,+CACH/c,KAAKV,aAAau4H,aAAa96G,S,2aC/BzC,iBAMA,WACA,WACA,WAIA,MAAasvF,EAMXrtG,YACU+M,EACAhL,EACA5B,GAFA,KAAA4M,cAAAA,EACA,KAAAhL,WAAAA,EACA,KAAA5B,YAAAA,EARV,KAAAuwG,gBAA2B,KACnB,KAAAyxD,UAAW,EACX,KAAAjnJ,MAAoB,KACpB,KAAAknJ,oBAAsB,GAO4B,IAApD,CAAC,QAAS,SAASr9J,QAAQ5E,EAAYyN,UACzC5M,KAAKohK,oBAAsB,GAG7BC,EAAKC,SAASC,iBAAiBvhK,KAAKwhK,iCAAkC,oBAGxEtxJ,aACElQ,KAAK0vG,gBAAkB,KACvB1vG,KAAKka,MAAQ,KAGfJ,aAAay7F,GAMX,QAHW,OAFXA,EAAQlJ,EAAco1D,qBAAqBlsD,KAG1B,MAAdv1G,KAAKka,OAAiBq7F,EAAM3kG,OAAS5Q,KAAKohK,qBAC5B,MAAdphK,KAAKka,OAAiBq7F,EAAM3kG,OAAS5Q,KAAKohK,qBAA8C,IAAvB7rD,EAAMxxG,QAAQ,MAI9E+xC,aAAa45D,EAA0B9hF,G,yCAC3C,GAAI5tB,KAAKmhK,SACP,OAGFnhK,KAAKe,WAAWsmH,KAAK,mBACrBrnH,KAAKmhK,UAAW,EAChBnhK,KAAK0vG,gBAAkBA,EACvB1vG,KAAKka,MAAQ,KACb,MAAMwnJ,EAAU,IAAIL,EAAKM,QACzBD,EAAQE,SAASjwJ,IAAI3R,KAAKwhK,kCAC1BE,EAAQzzH,IAAI,MACZyzH,EAAQp/E,MAAM,UAAW,CAAEu/E,MAAO,IAAKC,UAAYrnJ,GAAkBA,EAAEta,GAAG6G,OAAO,EAAG,KACpF06J,EAAQp/E,MAAM,OAAQ,CACpBu/E,MAAO,KAETH,EAAQp/E,MAAM,WAAY,CACxBu/E,MAAO,EACPC,UAAYrnJ,GACQ,MAAdA,EAAE47H,UAAoB57H,EAAEpJ,OAAS,EAAAs4B,WAAWwlB,KACvC10C,EAAE47H,SAAS11I,QAAQ,MAAO,IAE5B8Z,EAAE47H,WAGbqrB,EAAQp/E,MAAM,SACdo/E,EAAQp/E,MAAM,iBAAkB,CAC9Bw/E,UAAYrnJ,GACVA,EAAEpJ,OAAS,EAAAs4B,WAAW+O,OAAoB,MAAXj+B,EAAEk+B,MAAgBl+B,EAAEk+B,MAAMf,SAAW,OAExE8pH,EAAQp/E,MAAM,aAAc,CAAEu/E,MAAO,EAAGC,UAAYrnJ,GAAkBza,KAAK+hK,aAAatnJ,KACxFinJ,EAAQp/E,MAAM,SAAU,CAAEw/E,UAAYrnJ,GAAkBza,KAAKgiK,eAAevnJ,GAAG,KAC/EinJ,EAAQp/E,MAAM,gBAAiB,CAAEw/E,UAAYrnJ,GAAkBza,KAAKgiK,eAAevnJ,GAAG,KACtFinJ,EAAQp/E,MAAM,cAAe,CAC3Bw/E,UAAYrnJ,GAAkBza,KAAKiiK,oBAAoBxnJ,GAAG,KAE5DinJ,EAAQp/E,MAAM,qBAAsB,CAClCw/E,UAAYrnJ,GAAkBza,KAAKiiK,oBAAoBxnJ,GAAG,KAE5DinJ,EAAQp/E,MAAM,iBAAkB,CAAEw/E,UAAYrnJ,GAAkBA,EAAEtZ,kBAClEysB,EAAUA,UAAkB5tB,KAAK+L,cAAc8pC,oBACvChlC,SAAS4J,GAAMinJ,EAAQ/vJ,IAAI8I,KACnCza,KAAKka,MAAQwnJ,EAAQr5B,QAErBroI,KAAKmhK,UAAW,EAEhBnhK,KAAKe,WAAWyqJ,QAAQ,sBAGpB5xE,cACJ27B,EACAj+F,EAAkF,KAClFsW,EAAwB,M,yCAExB,MAAM4kD,EAAwB,GAkB9B,GAjBa,MAAT+iC,IACFA,EAAQlJ,EAAco1D,qBAAqBlsD,EAAMtuG,OAAOC,gBAE5C,KAAVquG,IACFA,EAAQ,MAGK,MAAX3nF,IACFA,QAAgB5tB,KAAK+L,cAAc8pC,mBAGvB,MAAVv+B,GAAkB/I,MAAM2zJ,QAAQ5qJ,IAAWA,EAAO1G,OAAS,EAC7Dgd,EAAUA,EAAQtW,QAAQmD,GAAMnD,EAAOoD,OAAOs7B,GAAW,MAALA,GAAaA,EAAEv7B,OAChD,MAAVnD,IACTsW,EAAUA,EAAQtW,OAAOA,KAGtBtX,KAAK8Z,aAAay7F,GACrB,OAAO3nF,EAGL5tB,KAAKmhK,iBACD,IAAIxxJ,SAASwE,GAAM1D,WAAW0D,EAAG,OACnCnU,KAAKmhK,iBACD,IAAIxxJ,SAASwE,GAAM1D,WAAW0D,EAAG,SAI3C,MAAM+F,EAAQla,KAAKmiK,oBACnB,GAAa,MAATjoJ,EAEF,OAAOla,KAAKoiK,mBAAmBx0I,EAAS2nF,GAG1C,MAAM8sD,EAAa,IAAIvsJ,IACvB8X,EAAQ/c,SAAS4J,GAAM4nJ,EAAWprJ,IAAIwD,EAAEta,GAAIsa,KAE5C,IAAI6nJ,EAAqC,KAEzC,GAD+B,MAAT/sD,GAAiBA,EAAM3kG,OAAS,GAA4B,IAAvB2kG,EAAMxxG,QAAQ,KAEvE,IACEu+J,EAAgBpoJ,EAAM+D,OAAOs3F,EAAMvuG,OAAO,GAAGC,QAC7C,MAAOpE,GACP7C,KAAKe,WAAW+B,MAAMD,OAEnB,CACL,MAAM0/J,EAASlB,EAAKmB,MAAMC,SAASC,QAAUrB,EAAKmB,MAAMC,SAASE,SACjEL,EAAgBpoJ,EAAMq7F,OAAOqtD,IAC3BvB,EAAKwB,UAAUttD,GAAO1kG,SAAS9Q,IAC7B,MAAMO,EAAIP,EAAMuF,WAChBs9J,EAAEE,KAAKxiK,EAAG,CAAE2hF,OAAQ,CAAC,QAASwgF,SAAUF,IACxCK,EAAEE,KAAKxiK,EAAG,CAAE2hF,OAAQ,CAAC,YAAawgF,SAAUF,IAC5CK,EAAEE,KAAKxiK,EAAG,CAAE2hF,OAAQ,CAAC,cAAewgF,SAAUF,IAC9CK,EAAEE,KAAKxiK,EAAG,UAYhB,OAPqB,MAAjBgiK,GACFA,EAAczxJ,SAASsD,IACjBkuJ,EAAWhsJ,IAAIlC,EAAE85B,MACnBukC,EAAQn7D,KAAKgrJ,EAAW7rJ,IAAIrC,EAAE85B,SAI7BukC,KAGT4vF,mBAAmBx0I,EAAuB2nF,EAAe5uF,GAAU,GAEjE,OADA4uF,EAAQlJ,EAAco1D,qBAAqBlsD,EAAMtuG,OAAOC,eACjD0mB,EAAQtW,QAAQmD,GACjBkM,IAAYlM,EAAE4O,YAGJ,MAAV5O,EAAE/Z,MAAgB+Z,EAAE/Z,KAAKwG,cAAcnD,QAAQwxG,IAAU,OAGzDA,EAAM3kG,QAAU,GAAK6J,EAAEta,GAAGu0G,WAAWa,MAGvB,MAAd96F,EAAE47H,UAAoB57H,EAAE47H,SAASnvI,cAAcnD,QAAQwxG,IAAU,MAGjE96F,EAAEk+B,OAAwB,MAAfl+B,EAAEk+B,MAAMa,KAAe/+B,EAAEk+B,MAAMa,IAAItyC,cAAcnD,QAAQwxG,IAAU,QAOtF9Y,YAAY9pC,EAAmB4iD,GAE7B,GAAc,QADdA,EAAQlJ,EAAco1D,qBAAqBlsD,EAAMtuG,OAAOw5J,sBAEtD,OAAO9tG,EAET,MAAMowG,EAA2B,GAC3BC,EAAiC,GAmBvC,OAlBArwG,EAAM9hD,SAASgK,I,UACC,MAAVA,EAAEna,MAAgBma,EAAEna,KAAKwG,cAAcnD,QAAQwxG,IAAU,EAC3DwtD,EAAa1rJ,KAAKwD,IAElB06F,EAAM3kG,QAAU,IACfiK,EAAE1a,GAAGu0G,WAAWa,IACf16F,EAAE08E,SAASkpE,oBAAoB/rD,WAAWa,IAC3B,OAAR,QAAN,EAAA16F,EAAEw6B,YAAI,eAAEl1C,KAAc0a,EAAEw6B,KAAKl1C,GAAGu0G,WAAWa,KAG1B,MAAX16F,EAAE42F,OAAiB52F,EAAE42F,MAAMvqG,cAAcnD,QAAQwxG,IAAU,GAE3C,OAAV,QAAN,EAAA16F,EAAE/M,YAAI,eAAEA,OAAgB+M,EAAE/M,KAAKA,KAAK5G,cAAcnD,QAAQwxG,IAAU,GAEhD,OAAd,QAAN,EAAA16F,EAAEw6B,YAAI,eAAEhgC,WAAoBwF,EAAEw6B,KAAKhgC,SAASnO,cAAcnD,QAAQwxG,IAAU,IALrFytD,EAAmB3rJ,KAAKwD,MASrBkoJ,EAAah8J,OAAOi8J,GAG7Bb,oBACE,OAAOniK,KAAKka,MAGN8nJ,eAAevnJ,EAAewoJ,GACpC,IAAKxoJ,EAAEsqI,UACL,OAAO,KAET,IAAI9iE,EAAmB,GAUvB,OATAxnE,EAAEwnE,OAAOpxE,SAASmlC,IACF,MAAVA,EAAEt1C,MACJuhF,EAAO5qE,KAAK2+B,EAAEt1C,MAEZs1C,EAAE3kC,OAAS,EAAA4vE,UAAUC,MAAmB,MAAXlrC,EAAEr7B,OACjCsnE,EAAO5qE,KAAK2+B,EAAEr7B,UAGlBsnE,EAASA,EAAO3qE,QAAQ0+B,GAAmB,KAAbA,EAAE/uC,SACV,IAAlBg7E,EAAOrxE,OACF,KAEFqyJ,EAAShhF,EAAOroE,KAAK,KAAOqoE,EAG7BggF,oBAAoBxnJ,EAAewoJ,GACzC,IAAKxoJ,EAAE67H,eACL,OAAO,KAET,IAAIx8D,EAAwB,GAW5B,OAVAr/D,EAAEq/D,YAAYjpE,SAASmnB,IACZ,MAALA,GAA2B,MAAdA,EAAE3iB,WACb4tJ,GAAUjrI,EAAE3iB,SAAStR,QAAQ,MAAQ,EACvC+1E,EAAYziE,KAAK2gB,EAAE3iB,SAASrO,OAAO,EAAGgxB,EAAE3iB,SAAS01F,YAAY,OAE7DjxB,EAAYziE,KAAK2gB,EAAE3iB,cAIzBykE,EAAcA,EAAYxiE,QAAQ0+B,GAAmB,KAAbA,EAAE/uC,SACf,IAAvB6yE,EAAYlpE,OACP,KAEFqyJ,EAASnpF,EAAYlgE,KAAK,KAAOkgE,EAGlCioF,aAAatnJ,GACnB,GAAIA,EAAEpJ,OAAS,EAAAs4B,WAAW+O,OAAoB,MAAXj+B,EAAEk+B,QAAkBl+B,EAAEk+B,MAAMW,QAC7D,OAAO,KAET,MAAMC,EAAiB,GAsBvB,OArBA9+B,EAAEk+B,MAAMY,KAAK1oC,SAASuG,IACpB,GAAa,MAATA,EAAEoiC,KAAyB,KAAVpiC,EAAEoiC,IACrB,OAEF,GAAkB,MAAdpiC,EAAEq9F,SAEJ,YADAl7D,EAAKliC,KAAKD,EAAEq9F,UAGd,IAAIj7D,EAAMpiC,EAAEoiC,IACZ,GAAIpiC,EAAE+uE,QAAU,EAAAlC,aAAaI,kBAAmB,CAC9C,MAAM6+E,EAAgB1pH,EAAIz1C,QAAQ,OAC9Bm/J,GAAiB,IACnB1pH,EAAMA,EAAIxyC,OAAOk8J,EAAgB,IAEnC,MAAMC,EAAa3pH,EAAIv7B,OAAO,UAC1BklJ,GAAc,IAChB3pH,EAAMA,EAAItsB,UAAU,EAAGi2I,IAG3B5pH,EAAKliC,KAAKmiC,MAELD,EAAK3oC,OAAS,EAAI2oC,EAAO,KAG1BioH,iCAAiCzhK,GACvC,MAAMqjK,EAAmB,CAAC,OAAQ,iBAAkB,WAAY,SAIhE,OAHgBrjK,EAAcsjK,SAAiB,OACpB3oJ,OAAOtC,GAAWgrJ,EAAiB5vG,SAASp7C,KAG9Di0F,EAAco1D,qBAAqB1hK,EAAMuF,YAG3CvF,EAIT,4BAA4Bw1G,GAC1B,OAAOA,MAAAA,OAAK,EAALA,EAAO+tD,UAAU,OAAO3iK,QAAQ,mBAAoB,KArS/D,mB,yaCLA,iBACA,UACA,WACA,WAGA,WACA,WACA,WAEA,WACA,WAIA,oBACE3B,YACU6B,EACAxB,EACA+sG,EACAjtG,EACAoF,EACAjF,GALA,KAAAuB,cAAAA,EACA,KAAAxB,WAAAA,EACA,KAAA+sG,kBAAAA,EACA,KAAAjtG,YAAAA,EACA,KAAAoF,sBAAAA,EACA,KAAAjF,aAAAA,EAGJslJ,a,+CACE5kJ,KAAKV,aAAaikK,kBAAkB,SAGtC1xI,QACJgxG,EACAxtF,EACAuD,EACAx2C,G,yCAEA,IAAIohK,EAA2B,KAC/B,MAAM9+J,EAAO,IAAI,EAAA2hI,KAUjB,GATA3hI,EAAKvE,GAAK0iI,EAAM1iI,GAChBuE,EAAK2M,KAAOwxH,EAAMxxH,KAClB3M,EAAKo1D,SAAW+oE,EAAM/oE,SACtBp1D,EAAK63C,UAAYsmF,EAAMtmF,UACvB73C,EAAKw8H,eAAiB2B,EAAM3B,eACX,MAAb2B,EAAMzgI,MACRygI,EAAMzgI,UAAYpC,KAAKuE,sBAAsBwrJ,YAAY,IACzDltB,EAAMjwE,gBAAkB5yD,KAAKa,cAAcu9C,YAAYykF,EAAMzgI,MAE/C,MAAZw2C,EAAkB,CACpB,MAAMgF,QAAqB59C,KAAKuE,sBAAsBs5C,OACpDjF,EACAiqF,EAAMzgI,IACN,SACA,EAAA07C,qBAEFp5C,EAAKk0C,SAAW,EAAA92C,MAAMi8C,gBAAgBH,GAKxC,GAHAl5C,EAAKtC,UAAYpC,KAAKa,cAAcgxB,QAAQgxG,EAAMzgI,IAAKA,GACvDsC,EAAKhE,WAAaV,KAAKa,cAAcgxB,QAAQgxG,EAAMniI,KAAMmiI,EAAMjwE,WAC/DluD,EAAK+sG,YAAczxG,KAAKa,cAAcgxB,QAAQgxG,EAAMpxB,MAAOoxB,EAAMjwE,WAC7DluD,EAAK2M,OAAS,EAAA8qC,SAAS+kC,KACzBx8E,EAAKoJ,KAAO,IAAI,EAAAw4H,SAChB5hI,EAAKoJ,KAAKA,WAAa9N,KAAKa,cAAcgxB,QAAQgxG,EAAM/0H,KAAKA,KAAM+0H,EAAMjwE,WACzEluD,EAAKoJ,KAAKwwC,OAASukF,EAAM/0H,KAAKwwC,YACzB,GAAI55C,EAAK2M,OAAS,EAAA8qC,SAASi7C,OAChC1yF,EAAK2wC,KAAO,IAAI,EAAAkxF,SACJ,MAARlxF,GACF,GAAIA,aAAgBouH,YAAa,CAC/B,MAAO/iK,EAAM6F,SAAcvG,KAAK0jK,gBAC9B7gC,EAAMxtF,KAAKhgC,SACXggC,EACAwtF,EAAMjwE,WAERluD,EAAK2wC,KAAKhgC,SAAW3U,EACrB8iK,EAAWj9J,OAEXi9J,QAAiBxjK,KAAK2jK,UAAUj/J,EAAM2wC,EAAMwtF,EAAMjwE,WAKxD,MAAO,CAACluD,EAAM8+J,MAGVhtJ,IAAIrW,G,yCACR,MAAMwyD,QAAc3yD,KAAKV,aAAaw9E,oBAEtC,OAAa,MAATnqB,GAAkBA,EAAMx6B,eAAeh4B,GAIpC,IAAI,EAAAkmI,KAAK1zE,EAAMxyD,IAHb,QAMLib,S,yCACJ,MAAMu3C,QAAc3yD,KAAKV,aAAaw9E,oBAChCp7E,EAAmB,GACzB,IAAK,MAAMvB,KAAMwyD,EAEXA,EAAMx6B,eAAeh4B,IACvBuB,EAAS2V,KAAK,IAAI,EAAAgvH,KAAK1zE,EAAMxyD,KAGjC,OAAOuB,KAGHm0C,kB,yCACJ,IAAI+tH,QAAiB5jK,KAAKV,aAAaukK,oBACvC,GAAgB,MAAZD,EACF,OAAOA,EAGTA,EAAW,GAEX,WADqB5jK,KAAKa,cAAcylJ,UAEtC,MAAM,IAAI1kJ,MAAM,WAGlB,MAAM62C,EAA2B,GAUjC,aAToBz4C,KAAKob,UACnBvK,SAASnM,IACb+zC,EAASphC,KAAK3S,EAAK25C,UAAUp9C,MAAM+0C,GAAM4tH,EAASvsJ,KAAK2+B,eAGnDrmC,QAAQC,IAAI6oC,GAClBmrH,EAAS1sJ,KAAK,EAAApV,MAAMqV,gBAAgBnX,KAAKb,YAAa,eAEhDa,KAAKV,aAAaikK,kBAAkBK,GACnCA,KAGHn9E,eAAe2R,G,+CACnB,MAAMv4F,EAAU,IAAI,EAAAkqI,YAAY3xC,EAAS,GAAe,QAAX,EAAAA,EAAS,UAAE,eAAE/1F,OAAOw4H,YACjE,IAAIn5H,EACJ,GAAsB,MAAlB02F,EAAS,GAAGj4F,GAAY,CAC1B,GAAIi4F,EAAS,GAAG/mF,OAAS,EAAA8qC,SAAS+kC,KAChCx/E,QAAiB1B,KAAKX,WAAWw6I,SAASh6I,QAE1C,IACE,MAAMqpJ,QAA2BlpJ,KAAKX,WAAWy6I,iBAAiBj6I,GAClE6B,EAAWwnJ,EAAmBlrG,mBAExBh+C,KAAKosG,kBAAkBirD,eAC3BnO,EACA9wD,EAAS,GAAG/iD,KAAKhgC,SACjB+iF,EAAS,IAEX,MAAOv1F,GACP,KAAIA,aAAa,EAAA07C,eAAqD,MAAnC17C,EAAoB82B,YAEhD,MAAI92B,aAAa,EAAA07C,cAChB,IAAI38C,MAAOiB,EAAoBkkF,oBAE/BlkF,EAJNnB,QAAiB1B,KAAK8jK,2BAA2B1rE,EAAUv4F,GAQjEu4F,EAAS,GAAGj4F,GAAKuB,EAASvB,GAC1Bi4F,EAAS,GAAGb,SAAW71F,EAAS61F,cAEhC71F,QAAiB1B,KAAKX,WAAW86I,QAAQ/hD,EAAS,GAAGj4F,GAAIN,GAG3D,MAAM0G,EAAO,IAAI,EAAAw9J,SAASriK,SACpB1B,KAAKkoJ,OAAO3hJ,MAOdu9J,2BACJ1rE,EACAv4F,G,yCAEA,MAAMw9D,EAAK,IAAIC,SACf,IACE,MAAMmhB,EAAO,IAAII,KAAK,CAACuZ,EAAS,GAAG/1F,QAAS,CAAEgP,KAAM,6BACpDgsD,EAAGE,OAAO,QAASnzB,KAAKC,UAAUxqC,IAClCw9D,EAAGE,OAAO,OAAQkhB,EAAM2Z,EAAS,GAAG/iD,KAAKhgC,SAAS9S,iBAClD,MAAOM,GACP,IAAI,EAAAf,MAAMkxF,QAAW,EAAAlxF,MAAMixF,UAWzB,MAAMlwF,EAVNw6D,EAAGE,OAAO,QAASnzB,KAAKC,UAAUxqC,IAClCw9D,EAAGE,OACD,OACA88D,OAAO7rH,KAAK4pF,EAAS,GAAG/1F,QACxB,CACE2hJ,SAAU5rD,EAAS,GAAG/iD,KAAKhgC,SAAS9S,gBACpC0hJ,YAAa,6BAOrB,aAAajkJ,KAAKX,WAAW66I,mBAAmB78E,MAG5C6qF,OAAOxjJ,G,yCACX,IAAIiuD,QAAc3yD,KAAKV,aAAaw9E,oBAKpC,GAJa,MAATnqB,IACFA,EAAQ,IAGNjuD,aAAgB,EAAAq/J,SAAU,CAC5B,MAAMlpJ,EAAInW,EACViuD,EAAM93C,EAAE1a,IAAM0a,OAEbnW,EAAoBmM,SAASgK,IAC5B83C,EAAM93C,EAAE1a,IAAM0a,WAIZ7a,KAAKW,QAAQgyD,MAGfhyD,QAAQgyD,G,+CACN3yD,KAAKV,aAAaikK,kBAAkB,YACpCvjK,KAAKV,aAAay9E,kBAAkBpqB,MAGtC1iD,Q,+CACEjQ,KAAKV,aAAaikK,kBAAkB,YACpCvjK,KAAKV,aAAay9E,kBAAkB,SAGtCl4D,OAAO1kB,G,yCACX,MAAMwyD,QAAc3yD,KAAKV,aAAaw9E,oBACtC,GAAa,MAATnqB,EAAJ,CAIA,GAAkB,iBAAPxyD,EAAiB,CAC1B,GAAiB,MAAbwyD,EAAMxyD,GACR,cAEKwyD,EAAMxyD,QAEZA,EAAgB0Q,SAASuH,WACjBu6C,EAAMv6C,YAIXpY,KAAKW,QAAQgyD,OAGf6nB,iBAAiBr6E,G,+CACfH,KAAKX,WAAWg7I,WAAWl6I,SAC3BH,KAAK6kB,OAAO1kB,MAGdg8F,yBAAyBh8F,G,yCAC7B,MAAMuB,QAAiB1B,KAAKX,WAAW+6I,sBAAsBj6I,GACvDoG,EAAO,IAAI,EAAAw9J,SAASriK,SACpB1B,KAAKkoJ,OAAO3hJ,MAGZo9J,UAAUj/J,EAAY2wC,EAAYjzC,GACxC,OAAO,IAAIuN,SAAQ,CAAC2wB,EAASi4B,KAC3B,MAAMub,EAAS,IAAIC,WACnBD,EAAO40E,kBAAkBrzG,GACzBy+B,EAAO7U,OAAgBgV,GAAQ,EAAD,gCAC5B,IACE,MAAOvzE,EAAM6F,SAAcvG,KAAK0jK,gBAC9BruH,EAAK30C,KACLuzE,EAAII,OAAOtxE,OACXX,GAEFsC,EAAK2wC,KAAKhgC,SAAW3U,EACrB4/B,EAAQ/5B,GACR,MAAO1D,GACP01D,EAAO11D,OAGXixE,EAAOS,QAAU,KACfhc,EAAO,2BAKCmrG,gBACZruJ,EACA9O,EACAnE,G,yCAIA,MAAO,OAFmBpC,KAAKa,cAAcgxB,QAAQxc,EAAUjT,SACrCpC,KAAKa,cAAckoJ,eAAexiJ,EAAMnE,U,2aChStE,MAAM4hK,EAEe,oBAGrB,wBACEhlK,YAAoBM,GAAA,KAAAA,aAAAA,EAEdslJ,a,+CACE5kJ,KAAKV,aAAa2kK,YAAY,SAGtCpd,uBACE,OAAO7mJ,KAAKkkK,eAAeF,GAGvBG,qBAAqB3vG,G,+CACnBx0D,KAAKokK,eAAeJ,EAAwBxvG,MAG9CvkD,MAAMhF,G,+CACJjL,KAAKV,aAAa2kK,YAAY,KAAM,CAAEh5J,OAAQA,OAKxCo5J,c,yCACZ,MAAMhhI,QAAiBrjC,KAAKV,aAAa+kK,cACzC,GAAgB,MAAZhhI,EAAkB,OAECrjC,KAAKV,aAAaoQ,YAEzC,OAAO2zB,KAGK6gI,eAAe9hK,G,yCAC3B,MAAMihC,QAAiBrjC,KAAKqkK,cAC5B,OAAgB,MAAZhhI,GAAoBA,EAASjhC,GACxBihC,EAASjhC,GAEX,QAGKgiK,eAAehiK,EAAauY,G,yCACxC,IAAI0oB,QAAiBrjC,KAAKqkK,cACrBhhI,IACHA,EAAW,IAGbA,EAASjhC,GAAOuY,QACV3a,KAAKV,aAAa2kK,YAAY5gI,S,0aCrDxC,iBAMA,WAEA,WAYA,WAEA,WAIA,WAGA,WAMMY,EACI,SADJA,EAEmB,wBAFnBA,EAGU,eAHVA,EAIiB,sBAJjBA,EAKa,kBAGbqgI,EACK,kBADLA,EAEU,uBAFVA,EAGO,aAGb,qBAgBEtlK,YACYyhJ,EACA8jB,EACAxjK,EACAyjK,EACAtnF,EACAunF,GAA2B,GAL3B,KAAAhkB,eAAAA,EACA,KAAA8jB,qBAAAA,EACA,KAAAxjK,WAAAA,EACA,KAAAyjK,sBAAAA,EACA,KAAAtnF,aAAAA,EACA,KAAAunF,gBAAAA,EAjBZ,KAAA18C,SAAW,IAAI,EAAAxjG,gBAAgD,IAC/D,KAAA2rE,cAAgB,IAAI,EAAA3rE,gBAAwB,MAElC,KAAA+J,MAAuC,IAAI,EAAAi1F,MACnDvjH,KAAK0kK,iBAGC,KAAAC,eAAgB,EAYtB3kK,KAAK4kK,iBAAmB,IAAI9uJ,IAGxBrL,O,yCACAzK,KAAK2kK,uBAIC3kK,KAAKwkK,sBAAsBK,0BAC7B7kK,KAAKwkK,sBAAsBM,iBAG7B9kK,KAAK+kK,mBACX/kK,KAAK2kK,eAAgB,MAGjBI,mB,+CACJ/kK,KAAKsuB,MAAMm5G,sBAC4D,QAApE,QAAMznI,KAAKygJ,eAAejqI,IAAcytB,UAA4B,QAAI,GAC3E,IAAK,MAAM7rB,KAAKpY,KAAKsuB,MAAMm5G,sBAChB,MAALrvH,UACIpY,KAAKglK,oBAAoBhlK,KAAKsuB,MAAMm5G,sBAAsBrvH,KAGpE,MAAM6sJ,QAAyBjlK,KAAKygJ,eAAejqI,IAAYytB,GACvC,MAApBghI,IACFjlK,KAAKsuB,MAAM42I,aAAeD,SAEtBjlK,KAAKmlK,eACXnlK,KAAKkwF,cAAcxrE,KAAK1kB,KAAKsuB,MAAM42I,iBAG/BF,oBAAoB/5J,G,yCACxB,GAAc,MAAVA,EACF,OAEFjL,KAAKsuB,MAAMy5F,SAAS98G,GAAUjL,KAAKmxG,gBACnC,MAAMi0D,QAAoBplK,KAAKqlK,mBAAmB,CAAEp6J,OAAQA,IAC5DjL,KAAKsuB,MAAMy5F,SAAS98G,GAAQq5D,QAAU8gG,EAAY9gG,WAG9C0X,WAAWC,G,yCACfA,QAAgBj8E,KAAKslK,0BAA0BrpF,GAC/Cj8E,KAAKsuB,MAAMm5G,sBAAsBpwH,KAAK4kE,EAAQ3X,QAAQr5D,cAChDjL,KAAKygJ,eAAenlE,KAAKr3C,EAA4BjkC,KAAKsuB,MAAMm5G,uBACtEznI,KAAKsuB,MAAMy5F,SAAS9rC,EAAQ3X,QAAQr5D,QAAUgxE,QACxCj8E,KAAKulK,0BAA0BtpF,SAC/Bj8E,KAAKsQ,eAAc,IAAIP,MAAOM,UAAW,CAAEpF,OAAQgxE,EAAQ3X,QAAQr5D,eACnEjL,KAAKwlK,cAAcvpF,EAAQ3X,QAAQr5D,QACzCjL,KAAKkwF,cAAcxrE,KAAKu3D,EAAQ3X,QAAQr5D,WAGpCu6J,cAAcv6J,G,yCAClBjL,KAAKylK,kCACLzlK,KAAKsuB,MAAM42I,aAAej6J,QACpBjL,KAAKygJ,eAAenlE,KAAKr3C,EAAmBh5B,GAClDjL,KAAKkwF,cAAcxrE,KAAK1kB,KAAKsuB,MAAM42I,oBAC7BllK,KAAKmlK,kBAGPh1J,MAAMQ,G,yCACVA,EAAU3Q,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,8BACxCx8E,KAAK0lK,sBAAsB/0J,EAAQ1F,QACrC0F,EAAQ1F,SAAWjL,KAAKsuB,MAAM42I,qBAC1BllK,KAAK2lK,kCAGP3lK,KAAK4lK,sBAAsBj1J,MAAAA,OAAO,EAAPA,EAAS1F,QAC1CjL,KAAK6lK,wBAAwBl1J,MAAAA,OAAO,EAAPA,EAAS1F,cAChCjL,KAAKmlK,kBAGPW,eAAen1J,G,iDAEnB,OADAA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACJ,QAAvC,EAA+B,QAAhC,QAAO3Q,KAAKgmK,WAAWr1J,UAAS,eAAE0mH,cAAM,eAAEH,eAG7C+uC,eAAetrJ,EAAehK,G,yCAClCA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACnD,MAAMsrE,QAAgBj8E,KAAKgmK,WAAWr1J,GACtCsrE,EAAQo7C,OAAOH,YAAcv8G,QACvB3a,KAAKkmK,YAAYjqF,EAAStrE,MAG5Bg0E,qBAAqBh0E,G,iDACzB,OACQ,QADA,EAAmF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFj2E,YAAI,eAAEm+E,qBAGNE,qBAAqBjqE,EAAYhK,G,yCACrC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ11E,KAAKm+E,kBAAoB/pE,QAC3B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhE2pF,kBAAkBx1J,G,iDACtB,OAEoB,QADjB,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtFC,sBAAc,YAIhBC,kBAAkB3rJ,EAAgBhK,G,yCACtC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQgqF,eAAiB1rJ,QACnB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCG,kBAAkB51J,G,iDAEtB,OADAA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACH,QAAxC,EAA+B,QAAhC,QAAO3Q,KAAKgmK,WAAWr1J,UAAS,eAAE2zD,eAAO,eAAEkiG,kBAG9C5wC,kBAAkBj7G,EAAehK,G,yCACrCA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACnD,MAAMsrE,QAAgBj8E,KAAKgmK,WAAWr1J,GACtCsrE,EAAQ3X,QAAQkiG,eAAiB7rJ,QAC3B3a,KAAKkmK,YAAYjqF,EAAStrE,MAG5B81J,sBAAsB91J,G,iDAE1B,OADAA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACN,QAArC,EAA+B,QAAhC,QAAO3Q,KAAKgmK,WAAWr1J,UAAS,eAAEszB,YAAI,eAAEyiI,sBAG3C7wC,sBAAsBl7G,EAAehK,G,yCACzCA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACnD,MAAMsrE,QAAgBj8E,KAAKgmK,WAAWr1J,GACtCsrE,EAAQh4C,KAAKyiI,mBAAqB/rJ,QAC5B3a,KAAKkmK,YAAYjqF,EAAStrE,MAG5B0I,2BAA2B1I,G,mDAC/B,OAEuC,QADpC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEsjI,+BAAuB,YAInCtpI,2BAA2B1iB,EAAgBhK,G,yCAC/C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASsjI,wBAA0BhsJ,QACrC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC3b,6BAA6B95I,G,mDACjC,OAEyC,QADtC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEujI,iCAAyB,YAIrCC,6BAA6BlsJ,EAAgBhK,G,yCACjD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASujI,0BAA4BjsJ,QACvC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCU,+BAA+Bn2J,G,iDACnC,OAEiC,QAD9B,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtFW,mCAA2B,YAI7BC,+BAA+BrsJ,EAAgBhK,G,yCACnD,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ0qF,4BAA8BpsJ,QAChC3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCa,iCAAiCt2J,G,iDACrC,OAEmC,QADhC,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtFc,qCAA6B,YAI/BC,iCAAiCxsJ,EAAgBhK,G,yCACrD,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ6qF,8BAAgCvsJ,QAClC3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCgB,mBAAmBz2J,G,mDACvB,OAEqB,QADlB,EAA6F,QAA9F,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eAAEn5C,gBAAQ,eAC1FgkI,uBAAe,YAIjBp1E,mBAAmBt3E,EAAgBhK,G,yCACvC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ54C,SAASgkI,gBAAkB1sJ,QAC7B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEgW,iBAAiB7hF,G,+CACrB,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE7zE,iBAGC+0E,iBAAiB3sJ,EAAehK,G,yCACpC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQkW,cAAgB53E,QAClB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC1T,mBAAmB/hJ,G,mDACvB,OAE+B,QAD5B,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEkkI,uBAAe,YAI3BC,mBAAmB7sJ,EAAgBhK,G,yCACvC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASkkI,gBAAkB5sJ,QAC7B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCh/I,oBAAoBzW,G,yCACxB,eAAY3Q,KAAKoL,mBAAmBuF,aAK3B3Q,KAAK+jE,wBAAwBpzD,YAC7B3Q,KAAKwlE,8BAA8B70D,QAIxCozD,wBAAwBpzD,G,+CAC5B,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C,OAAuB,QAAhB,EAAAnqF,MAAAA,OAAO,EAAPA,EAAS3X,eAAO,eAAE8yD,wBAGrBqwC,wBAAwB9sJ,EAAgBhK,G,yCAC5C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQ8yD,qBAAuBz8G,QACjC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC5gG,8BAA8B70D,G,+CAClC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAG5C,GAAmB,QAAf,EAAAnqF,EAAQ3X,eAAO,eAAEojG,2BACnB,OAAO,EAKT,MAAMxsJ,QAAsBlb,KAAK88J,iBAAiBnsJ,GAClD,GAAqB,MAAjBuK,EACF,OAAO,EAGT,IAAK,MAAM/a,KAAMu8B,OAAOuH,KAAK/oB,GAAgB,CAC3C,MAAM0F,EAAI1F,EAAc/a,GACxB,GAAIygB,EAAE2B,SAAW3B,EAAEmgH,kBAAoBngH,EAAE0kH,eACvC,OAAO,EAIX,OAAO,KAGHqiC,8BAA8BhtJ,EAAgBhK,G,yCAClD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQojG,2BAA6B/sJ,QACvC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCwB,kBAAkBj3J,G,mDACtB,OAK6B,QAJ1B,EAIU,QAJX,EAIC,QAJD,QACQ3Q,KAAKgmK,WACThmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCAE7C,eAAE/4C,gBAAQ,eAAEwkI,sBAAc,QAAI,QAI7BC,kBAAkBntJ,EAAehK,G,yCACrC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAASwkI,eAAiBltJ,QAC5B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCktB,sBAAsB34F,G,iDAC1B,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE/4C,gBAAQ,eAAE0kI,sBAGT1+D,sBAAsB1uF,EAAiBhK,G,yCAC3C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAAS0kI,mBAAqBptJ,QAChC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCy+E,gCAAgClqJ,G,iDACpC,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE9hG,eAAO,eAAE0jG,gCAGRpN,gCAAgCjgJ,EAAgBhK,G,yCACpD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQ0jG,6BAA+BrtJ,QACzC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCxZ,mBAAmBj8I,G,iDACvB,OACQ,QADA,EAAmF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFv4C,YAAI,eAAEgkI,mBAGNtc,mBAAmBhxI,EAA2BhK,G,yCAClD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQh4C,KAAKgkI,gBAAkBttJ,QACzB3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEiyE,uBAAuB99I,G,yCAK3B,OAAuB,OAAnBA,OAJJA,EAAU3Q,KAAKm8E,iBACbn8E,KAAKm8E,iBAAiBxrE,EAAS,CAAE+7I,UAAW,eACtC1sJ,KAAKkoK,qCAEF,EAAPv3J,EAAS1F,QACJ,WAEIjL,KAAKukK,qBAAqB/tJ,IAAI,GAAG7F,EAAQ1F,SAASq5J,IAAuB3zJ,MAGlFq+I,uBAAuBr0I,EAAehK,G,yCAKnB,OAAnBA,OAJJA,EAAU3Q,KAAKm8E,iBACbn8E,KAAKm8E,iBAAiBxrE,EAAS,CAAE+7I,UAAW,eACtC1sJ,KAAKkoK,qCAEF,EAAPv3J,EAAS1F,gBAGPjL,KAAKmoK,qBAAqB7D,EAAqB3pJ,EAAOhK,OAGxDy3J,sBAAsBz3J,G,yCAE1B,OAAuB,OAAnBA,OADJA,EAAU3Q,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKkoK,qCACzC,EAAPv3J,EAAS1F,QACJ,WAEIjL,KAAKukK,qBAAqB/tJ,IACrC,GAAG7F,MAAAA,OAAO,EAAPA,EAAS1F,SAASq5J,IACrB3zJ,MAIE03J,sBAAsB1tJ,EAAehK,G,yCAElB,OAAnBA,OADJA,EAAU3Q,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKkoK,qCACzC,EAAPv3J,EAAS1F,gBAGPjL,KAAKmoK,qBAAqB7D,EAAuB3pJ,EAAOhK,OAG1DgiJ,4BAA4BhiJ,G,yCAKhC,OAAuB,OAAnBA,OAJJA,EAAU3Q,KAAKm8E,iBACbn8E,KAAKm8E,iBAAiBxrE,EAAS,CAAE+7I,UAAW,oBACtC1sJ,KAAKkoK,qCAEF,EAAPv3J,EAAS1F,QACJ,WAEIjL,KAAKukK,qBAAqB/tJ,IACrC,GAAG7F,EAAQ1F,SAASq5J,IACpB3zJ,MAIE+9I,4BAA4B/9I,G,yCAKhC,OAAuB,OAAnBA,OAJJA,EAAU3Q,KAAKm8E,iBACbn8E,KAAKm8E,iBAAiBxrE,EAAS,CAAE+7I,UAAW,oBACtC1sJ,KAAKkoK,qCAEF,EAAPv3J,EAAS1F,gBAGAjL,KAAKukK,qBAAqBluJ,IACrC,GAAG1F,EAAQ1F,SAASq5J,IACpB3zJ,OAIEs+I,4BAA4Bt0I,EAAehK,G,yCAKxB,OAAnBA,OAJJA,EAAU3Q,KAAKm8E,iBACbn8E,KAAKm8E,iBAAiBxrE,EAAS,CAAE+7I,UAAW,oBACtC1sJ,KAAKkoK,qCAEF,EAAPv3J,EAAS1F,gBAGPjL,KAAKmoK,qBAAqB7D,EAA0B3pJ,EAAOhK,OAG7D23J,gBAAgB33J,G,iDACpB,OACU,QADF,EAAmF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvF66C,cAAM,eAAEuoB,gBAGR2oB,gBAAgB5tJ,EAAYhK,G,yCAChC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQo7C,OAAOuoB,aAAejlI,QACxB3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEioE,oBAAoB9zI,G,mDACxB,OACiB,QADT,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFj2E,YAAI,eAAEqnB,eAAO,eAAEkxI,aAGfna,oBAAoBhqI,EAAqBhK,G,yCAC7C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ11E,KAAKqnB,QAAQkxI,UAAYnkJ,QAC3B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEuuE,wBAAwBp6I,G,mDAC5B,OACqB,QADb,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFj2E,YAAI,eAAEwd,mBAAW,eAAE+6I,aAGnBlU,wBAAwBjwI,EAAyBhK,G,yCACrD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ11E,KAAKwd,YAAY+6I,UAAYnkJ,QAC/B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhE43E,+BAA+BzjJ,G,mDACnC,OAC4B,QADpB,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFv4C,YAAI,eAAE09F,0BAAkB,eAAEm9B,aAG1BhT,+BACJnxI,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQh4C,KAAK09F,mBAAmBm9B,UAAYnkJ,QACtC3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEm7E,oBAAoBhnJ,G,mDACxB,OACiB,QADT,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFj2E,YAAI,eAAEgsD,eAAO,eAAEusG,aAGfrH,oBAAoB98I,EAAqBhK,G,yCAC7C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ11E,KAAKgsD,QAAQusG,UAAYnkJ,QAC3B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEyxE,6BACJt9I,G,mDAEA,OAC0B,QADlB,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFv4C,YAAI,eAAE29F,wBAAgB,eAAEk9B,aAGxBzS,6BACJ1xI,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQh4C,KAAK29F,iBAAiBk9B,UAAYnkJ,QACpC3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEoiF,sCACJjuJ,G,mDAEA,OACmC,QAD3B,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFj2E,YAAI,eAAEk7H,iCAAyB,eAAEq9B,aAGjCE,sCACJrkJ,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ11E,KAAKk7H,0BAA0Bq9B,UAAYnkJ,QAC7C3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhE8T,yBAAyB3/E,G,mDAC7B,OAC0B,QADlB,EACI,QADL,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFn5C,gBAAQ,eAAE2+F,oBAAY,eAAE88B,aAGxBvtE,yBAAyB52E,EAAkBhK,G,yCAC/C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ54C,SAAS2+F,aAAa88B,UAAYnkJ,QACpC3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhE6jF,qBAAqB1vJ,G,mDACzB,OACkB,QADV,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFj2E,YAAI,eAAE9D,gBAAQ,eAAEq8J,aAGhBqB,qBAAqBxlJ,EAAiBhK,G,yCAC1C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ11E,KAAK9D,SAASq8J,UAAYnkJ,QAC5B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEixE,uBAAuB98I,G,mDAC3B,OACoB,QADZ,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFv4C,YAAI,eAAEjO,kBAAU,eAAE8oI,aAGlB9S,uBAAuBrxI,EAAoBhK,G,yCAC/C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQh4C,KAAKjO,WAAW8oI,UAAYnkJ,QAC9B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhE8xE,yBACJ39I,G,mDAEA,OACsB,QADd,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFv4C,YAAI,eAAE49F,oBAAY,eAAEi9B,aAGpBtS,yBACJ7xI,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQh4C,KAAK49F,aAAai9B,UAAYnkJ,QAChC3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEqnF,kBAAkBlzJ,G,mDACtB,OACe,QADP,EACA,QADD,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFj2E,YAAI,eAAEosD,aAAK,eAAEmsG,aAGbyE,kBAAkB5oJ,EAAmBhK,G,yCACzC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ11E,KAAKosD,MAAMmsG,UAAYnkJ,QACzB3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEyqE,mBAAmBt2I,G,iDACvB,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE/iI,gBAAQ,eAAEmlI,mBAGTC,mBAAmB9tJ,EAAqBhK,G,yCAC5C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASmlI,gBAAkB7tJ,QAC7B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCsC,+BAA+B/3J,G,mDACnC,OAE2C,QADxC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEslI,mCAA2B,YAIvCC,+BAA+BjuJ,EAAgBhK,G,yCACnD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASslI,4BAA8BhuJ,QACzC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCyC,+BAA+Bl4J,G,mDACnC,OAE2C,QADxC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEylI,mCAA2B,YAIvCC,+BAA+BpuJ,EAAgBhK,G,yCACnD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASylI,4BAA8BnuJ,QACzC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC4C,uBAAuBr4J,G,mDAC3B,OAEmC,QADhC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAE4lI,2BAAmB,YAI/BC,uBAAuBvuJ,EAAgBhK,G,yCAC3C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAAS4lI,oBAAsBtuJ,QACjC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC+C,uBAAuBx4J,G,mDAC3B,OAEmC,QADhC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAE+lI,2BAAmB,YAI/BC,uBAAuB1uJ,EAAgBhK,G,yCAC3C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAAS+lI,oBAAsBzuJ,QACjC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCkD,sCAAsC34J,G,mDAC1C,OAEkD,QAD/C,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEkmI,0CAAkC,YAI9CC,sCACJ7uJ,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASkmI,mCAAqC5uJ,QAChD3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCqD,0BAA0B94J,G,mDAC9B,OAEsC,QADnC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEqmI,8BAAsB,YAIlCC,0BAA0BhvJ,EAAgBhK,G,yCAC9C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASqmI,uBAAyB/uJ,QACpC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCvjG,kBAAkBlyD,G,iDACtB,OAKmB,QAJhB,EAIA,QAJD,QACQ3Q,KAAKk8E,WACTl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCAE7C,eAAE+V,sBAAc,YAIf7uB,kBAAkB3oD,EAAgBhK,G,yCACtC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CC,EAAQ8V,eAAiBx3E,QACnB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCwtF,aAAaj5J,G,mDACjB,OAEyB,QADtB,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEwmI,iBAAS,YAIrBC,aAAanvJ,EAAgBhK,G,yCACjC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASwmI,UAAYlvJ,QACvB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC2D,2BAA2Bp5J,G,mDAC/B,OAEuC,QADpC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAE2mI,+BAAuB,YAInCC,2BAA2BtvJ,EAAgBhK,G,yCAC/C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAAS2mI,wBAA0BrvJ,QACrC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC8D,gCAAgCv5J,G,mDACpC,OAE4C,QADzC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAE8mI,oCAA4B,YAIxCC,gCAAgCzvJ,EAAgBhK,G,yCACpD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAAS8mI,6BAA+BxvJ,QAC1C3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxClpJ,SAASvM,G,iDACb,OACW,QADH,EAAmF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFlY,eAAO,eAAE3hE,SAGT0nK,SAAS1vJ,EAAehK,G,yCAC5B,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ3X,QAAQ3hE,MAAQgY,QAClB3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEz1D,iBAAiBpW,G,iDACrB,OAE2B,QADxB,EAAyF,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF9hG,QAAQ4yB,qBAAa,YAIvBozE,iBAAiB3vJ,EAAgBhK,G,yCACrC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQ4yB,cAAgBv8E,QAC1B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCmE,qBAAqB55J,G,qDACzB,MAAM65J,EAEK,QAFgB,EAE1B,QAFyB,QAClBxqK,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE/iI,gBAAQ,eAAEonI,kBACPC,EAEL,QAFyB,QAClB1qK,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAEqE,kBACH,OAA4C,QAArC,EAAAD,MAAAA,EAAAA,EAAqBE,SAAgB,YAGxCC,qBAAqBhwJ,EAAgBhK,G,yCACzC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASonI,kBAAoB9vJ,QAC/B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAG5C,MAAM/pF,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQouF,kBAAoB9vJ,QACtB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCwE,4BAA4Bj6J,G,mDAChC,OAEwC,QADrC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEwnI,gCAAwB,YAIpCC,4BAA4BnwJ,EAAgBhK,G,yCAChD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASwnI,yBAA2BlwJ,QACtC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC2E,mBAAmBp6J,G,iDACvB,OAEsB,QADnB,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF4E,wBAAgB,YAIlBC,mBAAmBtwJ,EAAgBhK,G,yCACvC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ2uF,iBAAmBrwJ,QACrB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC8E,4BAA4Bv6J,G,iDAChC,OAE8B,QAD3B,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF+E,gCAAwB,YAI1BC,4BAA4BzwJ,EAAgBhK,G,yCAChD,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ8uF,yBAA2BxwJ,QAC7B3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCiF,uCAAuC16J,G,iDAC3C,OAEyC,QADtC,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtFkF,2CAAmC,YAIrCC,uCACJ5wJ,EACAhK,G,yCAEA,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQivF,oCAAsC3wJ,QACxC3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCoF,qBAAqB76J,G,iDACzB,OAEuB,QADpB,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtFqF,yBAAiB,YAInBC,qBAAqB/wJ,EAAgBhK,G,yCACzC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQovF,kBAAoB9wJ,QACtB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC50J,mBAAmBb,G,mDACvB,OAK8B,QAJ3B,EAIU,QAJX,EAIC,QAJD,QACQ3Q,KAAKgmK,WACThmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCAE7C,eAAE/4C,gBAAQ,eAAE2/B,uBAAe,YAI1BQ,mBAAmB7oD,EAAgBhK,G,yCACvC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAAS2/B,gBAAkBroD,QAC7B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCrZ,mBAAmBpyD,G,mDACvB,OAK8B,QAJ3B,EAIU,QAJX,EAIC,QAJD,QACQ3Q,KAAKgmK,WACThmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCAE7C,eAAE/4C,gBAAQ,eAAEsoI,uBAAe,YAI1BpoG,mBAAmB5oD,EAAgBhK,G,yCACvC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAASsoI,gBAAkBhxJ,QAC7B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCwvF,wBAAwBj7J,G,iDAC5B,OAE0B,QADvB,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtFyF,4BAAoB,YAItBC,wBAAwBnxJ,EAAgBhK,G,yCAC5C,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQwvF,qBAAuBlxJ,QACzB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC2F,qBAAqBp7J,G,iDACzB,OAEuB,QADpB,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF4F,yBAAiB,YAInBC,qBAAqBtxJ,EAAgBhK,G,yCACzC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ2vF,kBAAoBrxJ,QACtB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC8F,cAAcv7J,G,iDAClB,OAEgB,QADb,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF+F,kBAAU,YAIZC,cAAczxJ,EAAgBhK,G,yCAClC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ8vF,WAAaxxJ,QACf3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC7pF,oBAAoB5rE,G,mDACxB,OAEgB,QAFR,EAED,QAFA,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,sCACjE,eAAE9lK,YAAI,eAAEqnB,eAAO,eAAEqpF,aAGdx6B,oBACJ9hE,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,+BAE5CpwF,EAAQ11E,KAAKqnB,QAAQqpF,UAAYt8F,QAC3B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,kCAIxC3vF,wBACJ/rE,G,mDAEA,OAEoB,QAFZ,EAED,QAFA,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,sCACjE,eAAE9lK,YAAI,eAAEwd,mBAAW,eAAEkzF,aAGlBt6B,wBACJhiE,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,+BAE5CpwF,EAAQ11E,KAAKwd,YAAYkzF,UAAYt8F,QAC/B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,kCAIxC1d,+BAA+Bh+I,G,+CACnC,OAEC,QAFO,QACA3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAEniI,KAAK09F,mBAAmB1qB,aAGvB80C,+BAA+BpxI,EAAehK,G,yCAClD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQh4C,KAAK09F,mBAAmB1qB,UAAYt8F,QACtC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCxpF,oBAAoBjsE,G,mDACxB,OAEgB,QAFR,EAED,QAFA,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,sCACjE,eAAE9lK,YAAI,eAAEgsD,eAAO,eAAE0kD,aAGdp6B,oBACJliE,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,+BAE5CpwF,EAAQ11E,KAAKgsD,QAAQ0kD,UAAYt8F,QAC3B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,kCAIxCle,6BAA6Bx9I,G,iDACjC,OAEO,QAFC,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAEniI,YAAI,eAAE29F,iBAAiB3qB,aAGtBq1C,6BACJ3xI,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQh4C,KAAK29F,iBAAiB3qB,UAAYt8F,QACpC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCvH,sCACJluJ,G,mDAEA,OAEkC,QAF1B,EAED,QAFA,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE7/J,YAAI,eAAEk7H,iCAAyB,eAAExqB,aAGhCsoD,sCACJ5kJ,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ11E,KAAKk7H,0BAA0BxqB,UAAYt8F,QAC7C3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCtW,yBAAyBn/I,G,mDAC7B,OAEyB,QAFjB,EAEG,QAFJ,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE/iI,gBAAQ,eAAE2+F,oBAAY,eAAE/qB,aAGvBy4C,yBAAyB/0I,EAAehK,G,yCAC5C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAAS2+F,aAAa/qB,UAAYt8F,QACpC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC7F,qBAAqB5vJ,G,mDACzB,OAEiB,QAFT,EAED,QAFA,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE7/J,YAAI,eAAE9D,gBAAQ,eAAEw0G,aAGfupD,qBACJ7lJ,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ11E,KAAK9D,SAASw0G,UAAYt8F,QAC5B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC1Y,uBAAuB/8I,G,mDAC3B,OAEmB,QAFX,EAED,QAFA,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAEniI,YAAI,eAAEjO,kBAAU,eAAEihF,aAGjBg1C,uBAAuBtxI,EAAehK,G,yCAC1C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQh4C,KAAKjO,WAAWihF,UAAYt8F,QAC9B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC5X,yBAAyB79I,G,mDAC7B,OAEqB,QAFb,EAED,QAFA,EAEN,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAEniI,YAAI,eAAE49F,oBAAY,eAAE5qB,aAGnBw1C,yBAAyB9xI,EAAYhK,G,yCACzC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQh4C,KAAK49F,aAAa5qB,UAAYt8F,QAChC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCtpF,kBAAkBnsE,G,iDACtB,OAEO,QAFC,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,sCACjE,eAAE9lK,YAAI,eAAEosD,MAAMskD,aAGXl6B,kBACJpiE,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,+BAE5CpwF,EAAQ11E,KAAKosD,MAAMskD,UAAYt8F,QACzB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,kCAIxCC,YAAY37J,G,iDAChB,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE9X,eAAO,eAAExlD,YAGRytJ,YAAY5xJ,EAAehK,G,yCAC/B,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ3X,QAAQxlD,SAAWnE,QACrB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCowF,cAAc77J,G,iDAClB,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE9X,eAAO,eAAEmoG,cAGRC,cAAc/xJ,EAAehK,G,yCACjC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ3X,QAAQmoG,WAAa9xJ,QACvB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxC04E,mBAAmBnkJ,G,mDACvB,OAA+B,MAA3B3Q,KAAKsuB,MAAM42I,mBACAllK,KAAK2sK,yBAAyBh8J,IAE7CA,EAAU3Q,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,wBACc,QAA1D,EAAyC,QAA1C,EAAgC,QAAhC,QAAOpmK,KAAKgmK,WAAWr1J,UAAS,eAAE0yB,gBAAQ,eAAEy+F,uBAAe,QAAI,IAAI,EAAAC,oBAGtEkzB,mBAAmBt6I,EAAwBhK,G,yCAG/C,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQylD,gBAAkBnnH,QACpB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCvf,qBAAqBl2I,G,iDACzB,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE/iI,gBAAQ,eAAEmxB,qBAGT2vG,qBAAqBxpJ,EAAehK,G,yCACxC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASmxB,kBAAoB75C,QAC/B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC7Q,mBAAmB5kJ,G,iDACvB,OAEO,QAFC,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE7/J,YAAI,eAAE+uJ,mBAGLG,mBAAmB96I,EAAoBhK,G,yCAC3C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ11E,KAAK+uJ,gBAAkB36I,QACzB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC5kB,oBAAoB7wI,G,mDACxB,OAEsB,QADnB,EAA4F,QAA7F,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eAAElY,eAAO,eACzFsoG,wBAAgB,YAIlB16E,oBAAoBv3E,EAAgBhK,G,yCACxC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ3X,QAAQsoG,iBAAmBjyJ,QAC7B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEqwF,sBAAsBl8J,G,mDAC1B,OAEwB,QADrB,EAA4F,QAA7F,EAAoF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eAAElY,eAAO,eACzFgvB,0BAAkB,YAIpBw5E,sBAAsBnyJ,EAAgBhK,G,yCAC1C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQ3X,QAAQgvB,mBAAqB34E,QAC/B3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEuwF,oBAAoBp8J,G,+CACxB,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE4G,oBAGCC,oBAAoBtyJ,EAAehK,G,yCACvC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ2wF,iBAAmBryJ,QACrB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCh7J,mBAAmBuF,G,yCACvB,OAA+C,aAAjC3Q,KAAK8lK,eAAen1J,KAAwD,aAA5B3Q,KAAK0P,UAAUiB,OAGzEmgD,iBAAiBngD,G,iDACrB,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE9hG,eAAO,eAAE5pC,iBAGR2iE,iBAAiB1iF,EAAehK,G,yCACpC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQ5pC,cAAgB/f,QAC1B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCv1G,WAAWlgD,G,iDACf,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE9hG,eAAO,eAAE9pC,WAGR4iE,WAAWziF,EAAgBhK,G,yCAC/B,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQ9pC,QAAU7f,QACpB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCz1E,WAAWhgF,G,iDACf,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE9hG,eAAO,eAAEunF,WAGR16D,WAAWx2E,EAAehK,G,yCAC9B,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQunF,QAAUlxI,QACpB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC8G,cAAcv8J,G,yCAClBA,EAAU3Q,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,wBAEpD,MAAM1+B,QAAwB1nI,KAAKygJ,eAAejqI,IAChDytB,EACAtzB,GAGF,OAAuB,MAAnB+2H,GAA2BhrG,OAAOuH,KAAKyjG,GAAiB92H,OAAS,EAC5D,KAGF82H,EAAgB/2H,EAAQ1F,WAG3BqF,cAAcqK,EAAehK,G,+CAEjC,GAAsB,OADtBA,EAAU3Q,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBACxCn7J,OACV,OAEF,MAAMy8H,EAIF,QAHD,QAAM1nI,KAAKygJ,eAAejqI,IACzBytB,EACAtzB,UACA,QAAI,GACR+2H,EAAgB/2H,EAAQ1F,QAAU0P,QAC5B3a,KAAKygJ,eAAenlE,KAAKr3C,EAAsByjG,EAAiB/2H,MAGlEwM,YAAYxM,G,iDAChB,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,sCACjE,eAAE/nG,eAAO,eAAE6oG,YAGRr9J,YAAY6K,EAAehK,G,yCAC/B,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,+BAE5CpwF,EAAQ3X,QAAQ6oG,SAAWxyJ,QACrB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,kCAIxC7Y,gBAAgB7iJ,G,iDACpB,OAEO,QAFC,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAEniI,YAAI,eAAEmpI,gBAGLte,gBAAgBn0I,EAA2BhK,G,yCAC/C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQh4C,KAAKmpI,aAAezyJ,QACtB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC/f,aAAa11I,G,iDACjB,OAEO,QAFC,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE71E,YAAI,eAAEo8H,aAELglB,aAAahtI,EAAehK,G,yCAChC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ11E,KAAKo8H,UAAYhoH,QACnB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCz0B,UAAUh3C,G,+CACd,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAExvE,UAGC82D,UAAU/oD,EAAehK,G,yCAC7B,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CC,EAAQzvE,OAAS+N,QACX3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCixF,kBAAkB18J,G,+CACtB,OAA2F,QAAnF,QAAM3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvF8wF,kBAGAC,kBAAkB5yJ,EAAehK,G,yCACrC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCH,EAAQixF,eAAiB3yJ,QACnB3a,KAAKs8E,YAAYD,EAASr8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEgxF,6BAA6B78J,G,mDACjC,OAEyC,QADtC,EACW,QADZ,EAA0F,QAA1F,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF/iI,gBAAQ,eAAEoqI,iCAAyB,YAIrCC,6BAA6B/yJ,EAAgBhK,G,yCACjD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASoqI,0BAA4B9yJ,QACvC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCpe,gBAAgBr3I,G,iDACpB,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE/iI,gBAAQ,eAAEsqI,gBAGT1lB,gBAAgBttI,EAA8BhK,G,yCAClD,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASsqI,aAAehzJ,QAC1B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCwH,0BAA0Bj9J,G,iDAC9B,OAE4B,QADzB,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtFyH,8BAAsB,YAIxBC,0BAA0BnzJ,EAAgBhK,G,yCAC9C,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQwxF,uBAAyBlzJ,QAC3B3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC2H,8BAA8Bp9J,G,+CAClC,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE4H,8BAGCC,8BAA8BtzJ,EAAehK,G,yCACjD,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ2xF,2BAA6BrzJ,QAC/B3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC8H,eAAev9J,G,iDACnB,OAEiB,QADd,EAAyF,QAA1F,QAAO3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCAAyB,eACtF+H,mBAAW,YAIbC,eAAezzJ,EAAgBhK,G,yCACnC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ8xF,YAAcxzJ,QAChB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCzgK,0BAA0BgL,G,+CAC9B,OAA2F,QAAnF,QAAM3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvF6xF,0BAGAhtK,0BAA0BsZ,EAAYhK,G,yCAC1C,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCH,EAAQgyF,uBAAyB1zJ,QAC3B3a,KAAKs8E,YAAYD,EAASr8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhEsgF,iBAAiBnsJ,G,iDACrB,OAEO,QAFC,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE7/J,YAAI,eAAE2U,iBAGL+hJ,iBACJtiJ,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ11E,KAAK2U,cAAgBP,QACvB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC9H,6BAA6B3tJ,G,iDACjC,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE/4C,gBAAQ,eAAEirI,6BAGT/P,6BAA6B5jJ,EAAYhK,G,yCAC7C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAASirI,0BAA4B3zJ,QACvC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCmyF,6BAA6B59J,G,iDACjC,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE/4C,gBAAQ,eAAEmrI,6BAGTC,6BAA6B9zJ,EAAYhK,G,yCAC7C,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAASmrI,0BAA4B7zJ,QACvC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxC6Q,oBAAoBt8E,G,iDACxB,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE/4C,gBAAQ,eAAE2pD,oBAGTK,oBAAoB1yE,EAAYhK,G,yCACpC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAAS2pD,iBAAmBryE,QAC9B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCoU,gBAAgB7/E,G,iDACpB,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE/iI,gBAAQ,eAAEktD,gBAGTm+E,gBAAgB/zJ,EAAehK,G,yCACnC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ54C,SAASktD,aAAe51E,QAC1B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCtkE,aAAanxF,G,iDACjB,OAEO,QAFC,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE7/J,YAAI,eAAEwW,aAGL86G,aACJl9G,EACAhK,G,yCAEA,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ11E,KAAKwW,UAAYpC,QACnB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxChZ,aAAaz8I,G,iDACjB,OACQ,QADA,EAAmF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvFv4C,YAAI,eAAEpiC,aAGN0rJ,aAAa5yI,EAAoBhK,G,yCACrC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQh4C,KAAKpiC,UAAY8Y,QACnB3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhE+iE,gBAAgB5uI,G,iDAEpB,OADAA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACJ,QAAvC,EAA+B,QAAhC,QAAO3Q,KAAKgmK,WAAWr1J,UAAS,eAAE0mH,cAAM,eAAEE,gBAG7Co3C,gBAAgBh0J,EAAehK,G,yCACnCA,QAAgB3Q,KAAK+lK,8BAA8Bp1J,GACnD,MAAMsrE,QAAgBj8E,KAAKgmK,WAAWr1J,GACtCsrE,EAAQo7C,OAAOE,aAAe58G,QACxB3a,KAAKkmK,YAAYjqF,EAAStrE,MAG5BmiF,mBAAmBniF,G,+CACvB,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAEwyF,mBAGChoK,mBAAmB+T,EAAehK,G,yCACtC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CC,EAAQuyF,gBAAkBj0J,QACpB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCyyF,iBAAiBl+J,G,iDACrB,OACU,QADF,EAAmF,QAApF,QAAO3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,gCAAyB,eACvF66C,cAAM,eAAE6b,iBAGR47B,iBAAiBn0J,EAAehK,G,yCACpC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,yBAEtCP,EAAQo7C,OAAO6b,cAAgBv4H,QACzB3a,KAAKkmK,YAAYjqF,EAASj8E,KAAKm8E,iBAAiBxrE,EAAS3Q,KAAKw8E,4BAGhE6nF,YAAY1zJ,G,iDAChB,OAEW,QAFH,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,sCACjE,eAAEhpI,gBAAQ,eAAEA,YAGT4gI,YAAYtpJ,EAAehK,G,yCAC/B,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,+BAE5CpwF,EAAQ54C,SAASA,SAAW1oB,QACtB3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKqsK,kCAIxCltE,mBAAmBxuF,G,+CACvB,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAEzyE,mBAGCK,mBAAmBr5E,EAAehK,G,yCACtC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQsX,gBAAkBh5E,QACpB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC58J,oBAAoBmH,G,+CACxB,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE2yF,6BAGCtlK,6BAA6BkR,EAAehK,G,yCAChD,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CC,EAAQ0yF,0BAA4Bp0J,QAC9B3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCgjB,YAAYzuF,G,+CAChB,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE4I,YAGCj7E,YAAYp5E,EAAehK,G,yCAC/B,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5C/pF,EAAQ2yF,SAAWr0J,QACb3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxCp+G,SAASr3C,G,+CACb,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAElZ,SAGCpD,SAASnlD,EAAkBhK,G,yCAC/B,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CC,EAAQnZ,MAAQvoD,QACV3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxC06C,kBAAkBnmH,G,+CACtB,OAEC,QAFO,QACA3Q,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAEq7C,kBAGCC,kBAAkB/8G,EAAehK,G,yCACrC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CC,EAAQo7C,eAAiB98G,QACnB3a,KAAKs8E,YACTD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxC1sE,UAAUiB,G,iDACd,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE9hG,eAAO,eAAEr5D,UAGRghD,oBAAoBt7C,G,iDACxB,OAEU,QAFF,EAEP,QAFM,QACC3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,gCACjE,eAAE9hG,eAAO,eAAEztC,oBAGR+iI,oBAAoBj/I,EAAgBhK,G,yCACxC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAE5CnqF,EAAQ3X,QAAQztC,iBAAmBlc,QAC7B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAIxC1jG,gBAAgB/xD,G,iDAIpB,OADW,QAFkB,EAE5B,QAF2B,QACpB3Q,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE/4C,gBAAQ,eAAE8+B,gBAIT8sG,gBAAgBt0J,EAAehK,G,yCACnC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAAS8+B,aAAexnD,QAC1B3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCzZ,sBAAsBhyD,G,mDAC1B,MAAMu+J,EAEK,QAFwB,EAElC,QAFiC,QAC1BlvK,KAAKgmK,WAAWhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAE/4C,gBAAQ,eAAE6+B,mBACPitG,EAEL,QAFiC,QAC1BnvK,KAAKk8E,WAAWl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,qCACjE,eAAEla,mBACH,OAAOgtG,MAAAA,EAAAA,EAA6BC,KAGhCC,sBAAsBz0J,EAAehK,G,yCACzC,MAAMsrE,QAAgBj8E,KAAKgmK,WACzBhmK,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,8BAE5CH,EAAQ54C,SAAS6+B,mBAAqBvnD,QAChC3a,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKo8E,iCAIxCizF,kB,+CACJ,OAAmF,QAA3E,SAAMrvK,KAAKk8E,iBAAiBl8E,KAAKo8E,8BAA8B2oD,oBAAY,QAAI,KAGnFuqC,gBAAgB30J,G,yCACpB,MAAM0hE,QAAgBr8E,KAAKk8E,iBAAiBl8E,KAAKomK,wBACjD/pF,EAAQ0oD,aAAepqH,QACjB3a,KAAKs8E,YAAYD,QAAer8E,KAAKomK,2BAGvCmJ,Y,yCACJ,MAAMlzF,QAAgBr8E,KAAKk8E,iBAAiBl8E,KAAKomK,wBACjD,OAA0B,OAAnB/pF,MAAAA,OAAO,EAAPA,EAASnzE,SAAkBwzB,OAAOuH,KAAKo4C,EAAQnzE,QAAQ0H,OAAS,EACnEyrE,EAAQnzE,OACR,IAAI,EAAA47H,eAGJ0qC,UAAU70J,EAAoBhK,G,yCAClC,MAAM0rE,QAAgBr8E,KAAKk8E,WACzBl8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,yBAG5C,OADA/pF,EAAQnzE,OAASyR,QACJ3a,KAAKs8E,YAChBD,EACAr8E,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,4BAI9BlqF,WAAWvrE,G,yCACzB,IAAI0rE,EASJ,OARIr8E,KAAKyvK,UAAU9+J,EAAQ++J,mBACzBrzF,EAAUr8E,KAAK2vK,wBAGb3vK,KAAK4vK,SAAsB,MAAXvzF,IAClBA,QAAgBr8E,KAAK6vK,mBAAmBl/J,IAGnC0rE,MAAAA,EAAAA,EAAWr8E,KAAK0kK,mBAGTpoF,YAAYD,EAAuB1rE,G,yCACjD,OAAO3Q,KAAKyvK,UAAU9+J,EAAQ++J,iBAC1B1vK,KAAK8vK,oBAAoBzzF,SACnBr8E,KAAK+vK,kBAAkB1zF,EAAS1rE,MAGlCg/J,uBACR,OAAO3vK,KAAKsuB,MAAM+tD,QAGJwzF,mBAAmBl/J,G,yCACjC,aAAa3Q,KAAKygJ,eAAejqI,IAAkBytB,EAAatzB,MAGxDm/J,oBAAoBzzF,GAC5Br8E,KAAKsuB,MAAM+tD,QAAUA,EAGP0zF,kBAAkB1zF,EAAuB1rE,G,yCACnDA,EAAQq/J,uBACJhwK,KAAKukK,qBAAqBjpF,KAAKr3C,EAAao4C,EAAS1rE,SAErD3Q,KAAKygJ,eAAenlE,KAAKr3C,EAAao4C,EAAS1rE,MAIzCq1J,WAAWr1J,G,yCACzB,IACE,IAAIsrE,EASJ,OARIj8E,KAAKyvK,UAAU9+J,EAAQ++J,mBACzBzzF,EAAUj8E,KAAKiwK,qBAAqBt/J,IAGlC3Q,KAAK4vK,QAAQj/J,EAAQ++J,kBAA+B,MAAXzzF,IAC3CA,QAAgBj8E,KAAKqlK,mBAAmB10J,IAGnCsrE,EACP,MAAOp5E,GACP7C,KAAKe,WAAW+B,MAAMD,OAIhBotK,qBAAqBt/J,GAC7B,OAA2B,MAAvB3Q,KAAKsuB,MAAMy5F,SACN,KAEF/nH,KAAKsuB,MAAMy5F,SAAS/nH,KAAKkwK,oBAAoBv/J,IAG5Cu/J,oBAAoBv/J,G,QAC5B,OAA0B,OAAnBA,MAAAA,OAAO,EAAPA,EAAS1F,QACgC,QAA5C,EAAmC,QAAnC,EAAAjL,KAAKsuB,MAAMy5F,SAASp3G,EAAQ1F,eAAO,eAAEq5D,eAAO,eAAEr5D,OAC9CjL,KAAKsuB,MAAM42I,aAGDG,mBAAmB10J,G,+CACjC,GAAuB,OAAnBA,MAAAA,OAAO,EAAPA,EAAS1F,SAA6C,MAA3BjL,KAAKsuB,MAAM42I,aACxC,OAAO,KAGT,GAAIllK,KAAKykK,gBAAiB,CACxB,MAAM0L,EAAgBnwK,KAAK4kK,iBAAiBpuJ,IAAI7F,EAAQ1F,QACxD,GAAqB,MAAjBklK,EACF,OAAOA,EAIX,MAAMl0F,GAAUtrE,MAAAA,OAAO,EAAPA,EAASq/J,kBACmD,QAAvE,QAAMhwK,KAAKukK,qBAAqB/tJ,IAAc7F,EAAQ1F,OAAQ0F,UAAS,cACjE3Q,KAAKygJ,eAAejqI,IACzB7F,EAAQ1F,OACRjL,KAAKm8E,iBAAiBxrE,EAAS,CAAEkqE,oBAAqB,EAAAC,oBAAoBG,eAEtEj7E,KAAKygJ,eAAejqI,IAAc7F,EAAQ1F,OAAQ0F,GAK5D,OAHI3Q,KAAKykK,iBACPzkK,KAAK4kK,iBAAiB3tJ,IAAItG,EAAQ1F,OAAQgxE,GAErCA,KAGCwzF,UAAUC,GAClB,OAAOA,IAAoB,EAAA/+D,gBAAgBy/D,QAAUV,IAAoB,EAAA/+D,gBAAgB0/D,KAGjFT,QAAQF,GAChB,OAAOA,IAAoB,EAAA/+D,gBAAgB2/D,MAAQZ,IAAoB,EAAA/+D,gBAAgB0/D,KAGzEnK,YACdjqF,EACAtrE,EAA0B,CACxB++J,gBAAiB,EAAA/+D,gBAAgB0/D,KACjCL,kBAAkB,I,yCAGpB,OAAOhwK,KAAKyvK,UAAU9+J,EAAQ++J,uBACpB1vK,KAAKuwK,oBAAoBt0F,SACzBj8E,KAAKwwK,kBAAkBv0F,EAAStrE,MAG5B6/J,kBAAkBv0F,EAAmBtrE,G,yCACnD,MAAM++J,EAAkB/+J,EAAQq/J,iBAC5BhwK,KAAKukK,qBACLvkK,KAAKygJ,qBAEHivB,EAAgBp0F,KAAK,GAAG3qE,EAAQ1F,SAAUgxE,EAAStrE,GAErD3Q,KAAKykK,iBACPzkK,KAAK4kK,iBAAiB//I,OAAOlU,EAAQ1F,WAIzBslK,oBAAoBt0F,G,yCACoC,OAAlEj8E,KAAKiwK,qBAAqB,CAAEhlK,OAAQgxE,EAAQ3X,QAAQr5D,WACtDjL,KAAKsuB,MAAMy5F,SAAS9rC,EAAQ3X,QAAQr5D,QAAUgxE,SAE1Cj8E,KAAKmlK,kBAGGI,0BAA0BtpF,G,yCAExC,MAAMw0F,EAAYrmI,KAAKixC,MAAMjxC,KAAKC,UAAU4xC,UACtCj8E,KAAK0wK,+BAA+BD,SACpCzwK,KAAK2wK,iCAAiCF,SACtCzwK,KAAK4wK,gCAAgCH,MAK7BC,+BAA+Bz0F,G,yCAC7C,MAAM40F,QAAsB7wK,KAAKgmK,WAC/BhmK,KAAKm8E,iBACH,CAAElxE,OAAQgxE,EAAQ3X,QAAQr5D,cACpBjL,KAAKo8E,8BAIT0lD,EAAkB7lD,EAAQ54C,SAASy+F,gBACV,OAA3B+uC,MAAAA,OAAa,EAAbA,EAAextI,UACjB44C,EAAQ54C,SAAWwtI,EAAcxtI,gBAClBrjC,KAAKygJ,eAAepqI,IAAI4tB,MACvCg4C,EAAQ54C,eAAiBrjC,KAAKygJ,eAAejqI,IAASytB,SAChDjkC,KAAKygJ,eAAe7uI,OAAOqyB,IAEnCg4C,EAAQ54C,SAASy+F,gBAAkBA,EACS,WAAxC7lD,EAAQ54C,SAAS6+B,oBAAoE,MAAjC+Z,EAAQ54C,SAAS8+B,eACvE8Z,EAAQo7C,OAAOH,YAAc,KAC7Bj7C,EAAQo7C,OAAOE,aAAe,KAC9Bt7C,EAAQ3X,QAAQkiG,eAAiB,KACjCvqF,EAAQh4C,KAAKyiI,mBAAqB,YAE9B1mK,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBACH,CAAElxE,OAAQgxE,EAAQ3X,QAAQr5D,cACpBjL,KAAKo8E,iCAKDw0F,gCAAgC30F,G,yCAC9C,MAAM40F,QAAsB7wK,KAAKgmK,WAC/BhmK,KAAKm8E,iBACH,CAAElxE,OAAQgxE,EAAQ3X,QAAQr5D,cACpBjL,KAAKqsK,+BAGgB,OAA3BwE,MAAAA,OAAa,EAAbA,EAAextI,YACjBwtI,EAAcxtI,SAASy+F,gBAAkB7lD,EAAQ54C,SAASy+F,gBAC1D7lD,EAAQ54C,SAAWwtI,EAAcxtI,gBAE7BrjC,KAAKygJ,eAAenlE,KACxBW,EAAQ3X,QAAQr5D,OAChBgxE,QACMj8E,KAAKqsK,oCAEPrsK,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBACH,CAAElxE,OAAQgxE,EAAQ3X,QAAQr5D,cACpBjL,KAAKqsK,kCAKDsE,iCAAiC10F,G,yCAC/C,MAAM40F,QAAsB7wK,KAAKgmK,WAC/BhmK,KAAKm8E,iBAAiB,CAAElxE,OAAQgxE,EAAQ3X,QAAQr5D,cAAgBjL,KAAKomK,yBAExC,OAA3ByK,MAAAA,OAAa,EAAbA,EAAextI,YACjBwtI,EAAcxtI,SAASy+F,gBAAkB7lD,EAAQ54C,SAASy+F,gBAC1D7lD,EAAQ54C,SAAWwtI,EAAcxtI,gBAE7BrjC,KAAKygJ,eAAenlE,KACxBW,EAAQ3X,QAAQr5D,OAChBgxE,QACMj8E,KAAKqsK,oCAEPrsK,KAAKkmK,YACTjqF,EACAj8E,KAAKm8E,iBAAiB,CAAElxE,OAAQgxE,EAAQ3X,QAAQr5D,cAAgBjL,KAAKomK,4BAKzDjB,e,qDACRnlK,KAAK8wK,wBACiB,OAAd,QAAV,EAAA9wK,KAAKsuB,aAAK,eAAEy5F,WAAoBrrF,OAAOuH,KAAKjkC,KAAKsuB,MAAMy5F,UAAUn3G,OAAS,EAC5E5Q,KAAK+nH,SAASrjG,KAAK,MAIrB1kB,KAAK+nH,SAASrjG,KAAK1kB,KAAKsuB,MAAMy5F,aAGtB5rC,iBACR40F,EACA/1F,G,cAEA,OAAwB,MAApB+1F,EACK/1F,GAET+1F,EAAiB9lK,OAAiC,QAAxB,EAAA8lK,MAAAA,OAAgB,EAAhBA,EAAkB9lK,cAAM,QAAI+vE,EAAe/vE,OACrE8lK,EAAiBrB,gBACkB,QAAjC,EAAAqB,MAAAA,OAAgB,EAAhBA,EAAkBrB,uBAAe,QAAI10F,EAAe00F,gBACtDqB,EAAiBf,iBACmB,QAAlC,EAAAe,MAAAA,OAAgB,EAAhBA,EAAkBf,wBAAgB,QAAIh1F,EAAeg1F,iBACvDe,EAAiBl2F,oBACsB,QAArC,EAAAk2F,MAAAA,OAAgB,EAAhBA,EAAkBl2F,2BAAmB,QAAIG,EAAeH,oBAC1Dk2F,EAAiBrkB,UAAuC,QAA3B,EAAAqkB,MAAAA,OAAgB,EAAhBA,EAAkBrkB,iBAAS,QAAI1xE,EAAe0xE,UACpEqkB,GAGT,6BACE,MAAO,CAAErB,gBAAiB,EAAA/+D,gBAAgBy/D,OAAQnlK,OAAQjL,KAAKsuB,MAAM42I,cAGvDkB,uB,+CACd,MAAO,CACLsJ,gBAAiB,EAAA/+D,gBAAgB2/D,KACjCz1F,oBAAqB,EAAAC,oBAAoBC,QACzC9vE,OAA+B,QAAvB,EAAAjL,KAAKsuB,MAAM42I,oBAAY,cAAWllK,KAAKgxK,6BAC/ChB,kBAAkB,MAIN5zF,4B,+CACd,MAAO,CACLszF,gBAAiB,EAAA/+D,gBAAgB2/D,KACjCz1F,oBAAqB,EAAAC,oBAAoBG,MACzChwE,OAA+B,QAAvB,EAAAjL,KAAKsuB,MAAM42I,oBAAY,cAAWllK,KAAKgxK,6BAC/ChB,kBAAkB,MAIN3D,6B,+CACd,MAAO,CACLqD,gBAAiB,EAAA/+D,gBAAgB2/D,KACjCz1F,oBAAqB,EAAAC,oBAAoBs1F,OACzCnlK,OAA+B,QAAvB,EAAAjL,KAAKsuB,MAAM42I,oBAAY,cAAWllK,KAAK0P,YAC/CsgK,kBAAkB,MAIN9H,8B,+CACd,MAAO,CACLwH,gBAAiB,EAAA/+D,gBAAgB2/D,KACjCN,kBAAkB,EAClB/kK,OAA+B,QAAvB,EAAAjL,KAAKsuB,MAAM42I,oBAAY,cAAWllK,KAAKgxK,iCAInCA,6B,yCACd,aAAahxK,KAAKygJ,eAAejqI,IAAYytB,MAG/BgtI,8BACdhmK,EAAiBjL,KAAKsuB,MAAM42I,c,yCAE5B,MAAM2L,QAAsB7wK,KAAKgmK,WAC/BhmK,KAAKm8E,iBAAiB,CAAElxE,OAAQA,SAAgBjL,KAAKo8E,oCAEjDp8E,KAAKkmK,YACTlmK,KAAKkxK,aAAaL,GAClB7wK,KAAKm8E,iBAAiB,CAAElxE,OAAQA,SAAgBjL,KAAKo8E,iCAIzC+0F,gCACdlmK,EAAiBjL,KAAKsuB,MAAM42I,c,yCAE5B,MAAM2L,QAAsB7wK,KAAKgmK,WAC/BhmK,KAAKm8E,iBAAiB,CAAElxE,OAAQA,SAAgBjL,KAAKomK,+BAEjDpmK,KAAKkmK,YACTlmK,KAAKkxK,aAAaL,GAClB7wK,KAAKm8E,iBAAiB,CAAElxE,OAAQA,SAAgBjL,KAAKomK,4BAIzCgL,+BACdnmK,EAAiBjL,KAAKsuB,MAAM42I,c,+CAEtBllK,KAAKgvJ,uBAAuB,KAAM,CAAE/jJ,OAAQA,UAC5CjL,KAAKivJ,4BAA4B,KAAM,CAAEhkJ,OAAQA,UACjDjL,KAAKqoK,sBAAsB,KAAM,CAAEp9J,OAAQA,OAGzC46J,wBAAwB56J,EAAiBjL,KAAKsuB,MAAM42I,qBACrDllK,KAAKsuB,MAAMy5F,SAAS98G,GACvBjL,KAAKykK,iBACPzkK,KAAK4kK,iBAAiB//I,OAAO5Z,GAIjB6lK,wB,yCAEd,IAAK,MAAM7lK,KAAUjL,KAAKsuB,MAAMy5F,gBAClB/nH,KAAKoL,mBAAmB,CAAEH,OAAQA,MAC5CjL,KAAK6lK,wBAAwB56J,MAMzBimK,aAAaj1F,GACrB,MAAMo1F,EAA+B,CAAEhuI,SAAU44C,EAAQ54C,UACzD,OAAO3G,OAAOC,OAAO38B,KAAKmxG,gBAAiBkgE,GAG7B/L,0BAA0BrpF,G,yCAExC,OADAA,EAAQ54C,SAASy+F,sBAAwB9hI,KAAK2sK,2BACvC1wF,KAGO0wF,yBAAyBh8J,G,+CAEvC,OADAA,EAAU3Q,KAAKm8E,iBAAiBxrE,QAAe3Q,KAAKomK,wBACG,QAA/C,SAAMpmK,KAAKk8E,WAAWvrE,IAAUmxH,uBAAe,QAAI,IAAI,EAAAC,mBAGvD0jC,kC,QACR,MAAMx6J,EAASjL,KAAKsuB,MAAM42I,aACZ,MAAVj6J,GAAwD,OAAV,QAA5B,EAAU,QAAV,EAAAjL,KAAKsuB,aAAK,eAAEy5F,SAAS98G,UAAO,eAAE1E,QAGpDvG,KAAKsuB,MAAMy5F,SAAS98G,GAAQ1E,KAAO,IAAI,EAAAi7H,aAG/BrwB,cAAc1mG,EAA0B,MAChD,OAAOzK,KAAKk9E,aAAai0B,cAAc1mG,GAG/Bi6J,cAAcj6J,EAA8B,MACpD,OAAOzK,KAAKk9E,aAAaC,aAAa1yE,GAGxBi7J,sBAAsBz6J,G,+CAC9BjL,KAAKimK,eAAe,KAAM,CAAEh7J,OAAQA,UACpCjL,KAAKsQ,cAAc,KAAM,CAAErF,OAAQA,IACzCjL,KAAKsuB,MAAMm5G,sBAAwBznI,KAAKsuB,MAAMm5G,sBAAsBnwH,QACjE4tJ,GAAiBA,IAAiBj6J,UAE/BjL,KAAKygJ,eAAenlE,KAAKr3C,EAA4BjkC,KAAKsuB,MAAMm5G,0BAGxDm+B,sBAAsB36J,G,+CAC9BjL,KAAKmxK,gCAAgClmK,SACrCjL,KAAKixK,8BAA8BhmK,SACnCjL,KAAKoxK,+BAA+BnmK,MAG5B06J,2B,yCACd,GAA2B,MAAvB3lK,KAAKsuB,MAAMy5F,UAAoBrrF,OAAOuH,KAAKjkC,KAAKsuB,MAAMy5F,UAAUn3G,OAAS,QACrE5Q,KAAKwlK,cAAc,WAG3B,IAAK,MAAMv6J,KAAUjL,KAAKsuB,MAAMy5F,SAC9B,GAAc,MAAV98G,EAAJ,CAGA,SAAUjL,KAAKoL,mBAAmB,CAAEH,OAAQA,IAAW,OAC/CjL,KAAKwlK,cAAcv6J,GACzB,YAEIjL,KAAKwlK,cAAc,UAIfO,8BAA8Bp1J,G,yCAC1C,MAAM2gK,QAAsBtxK,KAAK2iE,sBAAsB,CAAE13D,OAAQ0F,MAAAA,OAAO,EAAPA,EAAS1F,SACpE1K,QAAgBP,KAAK0iE,gBAAgB,CAAEz3D,OAAQ0F,MAAAA,OAAO,EAAPA,EAAS1F,SACxD+vE,EACc,WAAlBs2F,GAAyC,MAAX/wK,EAC1BP,KAAKw8E,6BACCx8E,KAAKomK,uBACjB,OAAOpmK,KAAKm8E,iBAAiBxrE,EAASqqE,MAG1BmtF,qBAAqB/lK,EAAauY,EAAehK,G,yCAC7D,OAAgB,MAATgK,QACG3a,KAAKukK,qBAAqB3yJ,OAAO,GAAGjB,EAAQ1F,SAAS7I,IAAOuO,SAC5D3Q,KAAKukK,qBAAqBjpF,KAAK,GAAG3qE,EAAQ1F,SAAS7I,IAAOuY,EAAOhK,S,mbC9/E/E,iBAEA,WAiBA,WAIM4gK,EAAoC,CACxCr6C,YAAa,cACbmvC,eAAgB,iBAChBmL,wBAAyB,0BACzB5K,0BAA2B,4BAC3BG,4BAA6B,8BAC7BG,8BAA+B,gCAC/B30E,cAAe,gBACfg1E,gBAAiB,YACjBM,eAAgB,oBAChBx+J,SAAU,kBACVw9B,aAAc,sBACdkhI,mBAAoB,qBACpBC,6BAA8B,+BAC9BQ,gBAAiB,kBACjBG,4BAA6B,8BAC7BG,4BAA6B,yBAC7BG,oBAAqB,sBACrBG,oBAAqB,sBACrBG,mCAAoC,qCACpCG,uBAAwB,yBACxBv3E,eAAgB,iBAChB03E,UAAW,YACXG,wBAAyB,0BACzBG,6BAA8B,+BAC9BjzE,cAAe,gBACfuzE,kBAAmB,uBACnBI,yBAA0B,2BAC1B4G,gBAAiB,mBACjBtG,yBAA0B,2BAC1BG,oCAAqC,sCACrCG,kBAAmB,oBACnBzoG,gBAAiB,kBACjBF,gBAAiB,kBACjB+oG,qBAAsB,uBACtBG,kBAAmB,uBACnBG,WAAY,aACZnqK,OAAQ,SACRksJ,WAAY,aACZwjB,WAAY,gBACZnjB,gBAAiB,kBACjBzvI,SAAU,WACV2tJ,WAAY,aACZ3qC,gBAAiB,kBACjBttE,kBAAmB,oBACnB8gG,gBAAiB,kBACjBhiE,mBAAoB,qBACpB5hB,QAAS,2BACTs7F,iBAAkB,mBAClBvyI,IAAK,MACLC,cAAe,gBACft4B,IAAK,MACLypJ,QAAS,UACT8lB,WAAY,aACZhvC,UAAW,iBACX/1H,OAAQ,SACR0gK,eAAgB,iBAChBG,0BAA2B,+BAC3BE,aAAc,eACdK,2BAA4B,6BAC5BG,YAAa,cACbG,0BAA2B,4BAC3BtsC,aAAc,kBACdzxC,aAAc,eACdgnC,aAAc,eACd5jC,gBAAiB,kBACjBi+E,cAAe,mBACf5C,SAAU,WACV6C,MAAO,gBACP3uG,MAAO,QACPnuD,UAAW,YACX9J,OAAQ,SACR6mK,cAAe,mBACf5vG,mBAAoB,qBACpBC,aAAc,aACdysG,gBAAiB,mBAGbmD,EAA2C,CAC/CnkJ,QAAS,WACT7J,YAAa,eACbwuC,QAAS,WACT46G,SAAU,YACV1qK,SAAU,YACVg1H,eAAgB,kBAChBv8G,cAAe,iBACf6B,UAAW,aACX41C,MAAO,SACPtvB,SAAU,aAGNY,EACI,SADJA,EAEmB,wBAFnBA,EAGU,eAHVA,EAIiB,sBAJjBA,EAKa,kBAGbqgI,EACK,kBADLA,EAEU,uBAFVA,EAGO,aAGb,8BAIEtlK,YACYyhJ,EACA8jB,EACArnF,GAFA,KAAAujE,eAAAA,EACA,KAAA8jB,qBAAAA,EACA,KAAArnF,aAAAA,EAGN2nF,iB,yCACJ,MAAMmN,QAA4BhyK,KAAKiyK,yBACvC,OAA8B,MAAvBD,GAA+BA,EAAsB,EAAAthE,aAAawhE,UAGrEpN,U,yCACJ,IAAIkN,QAA4BhyK,KAAKiyK,yBACrC,KAAOD,EAAsB,EAAAthE,aAAawhE,QAAQ,CAChD,OAAQF,GACN,KAAK,EAAAthE,aAAas0B,UACVhlI,KAAKi9E,uBACX,MACF,KAAK,EAAAyzB,aAAayhE,UACVnyK,KAAKoyK,uBACX,MACF,KAAK,EAAA1hE,aAAa2hE,YACVryK,KAAKsyK,uBAIfN,GAAuB,MAIX/0F,uB,mJACd,MAAMs1F,GAAqBC,GAA4B,EAAD,gCACpD,IAAK,MAAMpwK,KAAOmvK,EACL,MAAPnvK,UAGEpC,KAAKiX,IAAIs6J,EAAOnvK,GAAM,OAE9B,GAAsB,MAAlBowK,EACF,IAAK,MAAMC,KAAaV,EACL,MAAbU,UAGEzyK,KAAKiX,IAAI86J,EAAcU,GAAaxnK,GAAQ,UAWlDoxE,GACsC,QAAzC,QAAMr8E,KAAKwW,IAAiBytB,UAAa,QAAIjkC,KAAKk9E,aAAaC,aAAa,MAC/Ed,GAAQ0oD,aAAe,EAAAr0B,aAAayhE,IACpC91F,GAAQylD,gBACmD,QAAxD,QAAM9hI,KAAKwW,IAAqB+6J,EAAOzvC,wBAAiB,QAAIzlD,GAAQylD,gBACvEzlD,GAAQzvE,OAAgD,QAAtC,QAAM5M,KAAKwW,IAAY+6J,EAAO3kK,eAAQ,QAAIyvE,GAAQzvE,OACpEyvE,GAAQwxF,uBACuD,QAA5D,QAAM7tK,KAAKwW,IAAa+6J,EAAOzI,oCAA6B,QAC7DzsF,GAAQwxF,uBACVxxF,GAAQ2xF,2BACqD,QAA1D,QAAMhuK,KAAKwW,IAAY+6J,EAAOvD,mCAA4B,QAC3D3xF,GAAQ2xF,2BACV3xF,GAAQsX,gBAC0C,QAA/C,QAAM3zF,KAAKwW,IAAY+6J,EAAO59E,wBAAiB,QAAItX,GAAQsX,gBAC9DtX,GAAQ0yF,0BACwC,QAA7C,QAAM/uK,KAAKwW,IAAY+6J,EAAOK,sBAAe,QAAIv1F,GAAQ0yF,0BAC5D1yF,GAAQ2yF,SAAiD,QAArC,QAAMhvK,KAAKwW,IAAS+6J,EAAOvC,iBAAU,QAAI3yF,GAAQ2yF,SACrE3yF,GAAQuyF,gBAC0C,QAA/C,QAAM5uK,KAAKwW,IAAY+6J,EAAO3C,wBAAiB,QAAIvyF,GAAQuyF,gBAC9DvyF,GAAQnZ,MAAiD,QAAxC,QAAMljE,KAAKwW,IAAe+6J,EAAOruG,cAAO,QAAImZ,GAAQnZ,MACrEmZ,GAAQla,aAA4D,QAA5C,QAAMniE,KAAKwW,IAAY+6J,EAAOpvG,qBAAc,QAAIka,GAAQla,aAChFka,GAAQna,mBAC6C,QAAlD,QAAMliE,KAAKwW,IAAY+6J,EAAOrvG,2BAAoB,QAAIma,GAAQna,mBACjEma,GAAQnzE,OAAqD,QAA3C,QAAMlJ,KAAKwW,IAAS+6J,EAAOjE,uBAAgB,QAAIjxF,GAAQnzE,OACzEmzE,GAAQ8vF,WAAyD,QAA3C,QAAMnsK,KAAKwW,IAAa+6J,EAAOpF,mBAAY,QAAI9vF,GAAQ8vF,WAC7E9vF,GAAQwvF,qBACgD,QAArD,QAAM7rK,KAAKwW,IAAa+6J,EAAO1F,6BAAsB,QAAIxvF,GAAQwvF,qBACpExvF,GAAQovF,kBAC6C,QAAlD,QAAMzrK,KAAKwW,IAAa+6J,EAAO9F,0BAAmB,QAAIpvF,GAAQovF,kBACjEpvF,GAAQ2vF,kBAC6C,QAAlD,QAAMhsK,KAAKwW,IAAa+6J,EAAOvF,0BAAmB,QAAI3vF,GAAQ2vF,kBACjE3vF,GAAQ8xF,YAA2D,QAA5C,QAAMnuK,KAAKwW,IAAa+6J,EAAOpD,oBAAa,QAAI9xF,GAAQ8xF,YAC/E9xF,GAAQgqF,eAC0C,QAA/C,QAAMrmK,KAAKwW,IAAa+6J,EAAOlL,uBAAgB,QAAIhqF,GAAQgqF,eAC9DhqF,GAAQ8uF,yBACoD,QAAzD,QAAMnrK,KAAKwW,IAAa+6J,EAAOpG,iCAA0B,QAC1D9uF,GAAQ8uF,yBACV9uF,GAAQivF,oCAC+D,QAApE,QAAMtrK,KAAKwW,IAAa+6J,EAAOjG,4CAAqC,QACrEjvF,GAAQivF,oCAEV,MAAMrgK,GACmC,QAAtC,QAAMjL,KAAKwW,IAAY+6J,EAAOtmK,eAAQ,cAAWjL,KAAKwW,IAAY+6J,EAAOzyJ,UAEtE4zJ,GAAiB1yK,KAAKk9E,aAAai0B,cAAc,MACjDwhE,GAAmC,CACvChM,wBAC2D,QAAxD,QAAM3mK,KAAKwW,IAAa+6J,EAAOC,gCAAyB,QACzDkB,GAAervI,SAASsjI,wBAC1BC,0BAC6D,QAA1D,QAAM5mK,KAAKwW,IAAa+6J,EAAO3K,kCAA2B,QAC3D8L,GAAervI,SAASujI,0BAC1BS,gBAAiB,KACjBE,gBACmD,QAAhD,QAAMvnK,KAAKwW,IAAa+6J,EAAOhK,wBAAiB,QACjDmL,GAAervI,SAASkkI,gBAC1BM,eACiD,QAA9C,QAAM7nK,KAAKwW,IAAY+6J,EAAO1J,uBAAgB,QAAI6K,GAAervI,SAASwkI,eAC7EW,gBAC+C,QAA5C,QAAMxoK,KAAKwW,IAAS+6J,EAAO/I,wBAAiB,QAAIkK,GAAervI,SAASmlI,gBAC3EG,4BAC+D,QAA5D,QAAM3oK,KAAKwW,IAAa+6J,EAAO5I,oCAA6B,QAC7D+J,GAAervI,SAASslI,4BAC1BG,4BAC+D,QAA5D,QAAM9oK,KAAKwW,IAAa+6J,EAAOzI,oCAA6B,QAC7D4J,GAAervI,SAASylI,4BAC1BG,oBACuD,QAApD,QAAMjpK,KAAKwW,IAAa+6J,EAAOtI,4BAAqB,QACrDyJ,GAAervI,SAAS4lI,oBAC1BG,oBACuD,QAApD,QAAMppK,KAAKwW,IAAa+6J,EAAOnI,4BAAqB,QACrDsJ,GAAervI,SAAS+lI,oBAC1BG,mCACsE,QAAnE,QAAMvpK,KAAKwW,IAAa+6J,EAAOhI,2CAAoC,QACpEmJ,GAAervI,SAASkmI,mCAC1BG,uBAC0D,QAAvD,QAAM1pK,KAAKwW,IAAa+6J,EAAO7H,+BAAwB,QACxDgJ,GAAervI,SAASqmI,uBAC1BG,UAAsD,QAA1C,QAAM7pK,KAAKwW,IAAa+6J,EAAO1H,kBAAW,QAAI6I,GAAervI,SAASwmI,UAClFG,wBAC2D,QAAxD,QAAMhqK,KAAKwW,IAAa+6J,EAAOvH,gCAAyB,QACzD0I,GAAervI,SAAS2mI,wBAC1BG,6BACgE,QAA7D,QAAMnqK,KAAKwW,IAAa+6J,EAAOpH,qCAA8B,QAC9DuI,GAAervI,SAAS8mI,6BAC1BM,kBACqD,QAAlD,QAAMzqK,KAAKwW,IAAa+6J,EAAO9G,0BAAmB,QACnDiI,GAAervI,SAASonI,kBAC1BI,yBAC4D,QAAzD,QAAM7qK,KAAKwW,IAAa+6J,EAAO1G,iCAA0B,QAC1D6H,GAAervI,SAASwnI,yBAC1B4G,gBACmD,QAAhD,QAAMzxK,KAAKwW,IAAa+6J,EAAOE,wBAAiB,QACjDiB,GAAervI,SAASouI,gBAC1BzuG,gBACmD,QAAhD,QAAMhjE,KAAKwW,IAAa+6J,EAAOvuG,wBAAiB,QACjD0vG,GAAervI,SAAS2/B,gBAC1B2oG,gBACmD,QAAhD,QAAM3rK,KAAKwW,IAAa+6J,EAAOzuG,wBAAiB,QACjD4vG,GAAervI,SAASsoI,gBAC1B7pC,gBAAwC,QAAvB,EAAAzlD,GAAQylD,uBAAe,QAAI4wC,GAAervI,SAASy+F,gBACpEttE,kBACiD,QAA9C,SAAMx0D,KAAKwW,IAAS+6J,EAAO/8G,0BAAmB,UAC/Ck+G,GAAervI,SAASmxB,kBAC1Bi5G,0BAC6D,QAA1D,SAAMztK,KAAKwW,IAAa+6J,EAAO9D,kCAA2B,UAC3DiF,GAAervI,SAASoqI,0BAC1BE,aAC4C,QAAzC,SAAM3tK,KAAKwW,IAAS+6J,EAAO5D,qBAAc,UAAI+E,GAAervI,SAASsqI,aACxEW,0BACyD,QAAtD,SAAMtuK,KAAKwW,IAAS+6J,EAAOjD,kCAA2B,UACvDoE,GAAervI,SAASirI,0BAC1BtsC,aAAc,CACZ88B,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAY+6J,EAAOvvC,eAE3CzxC,mBAAoBvwF,KAAKwW,IAAY+6J,EAAOhhF,cAC5CltD,SAAoB,MAAVp4B,GAAiB,WAAajL,KAAKwW,IAASu7J,EAAc1uI,SAAWp4B,IAC/Ek3D,aAC+C,QAA5C,SAAMniE,KAAKwW,IAAY+6J,EAAOpvG,qBAAc,UAAIuwG,GAAervI,SAAS8+B,aAC3ED,mBACqD,QAAlD,SAAMliE,KAAKwW,IAAY+6J,EAAOrvG,2BAAoB,UACnDwwG,GAAervI,SAAS6+B,oBAK5B,GAAc,MAAVj3D,GAMF,aALMjL,KAAKiX,IAAIgtB,EAA0B0uI,UACnC3yK,KAAKiX,IAAIgtB,EAAao4C,UACtBr8E,KAAKiX,IAAIgtB,EAA4B,UACrCjkC,KAAKiX,IAAIgtB,EAAmB,iBAC5BsuI,MAIRl2F,GAAQo7C,qBAAuBz3H,KAAKwW,IAAYu7J,EAAct6C,eAAiBxsH,UACzEjL,KAAKiX,IAAIgtB,EAAao4C,UACtBr8E,KAAKiX,IAAIhM,GAAQ,CACrB1E,KAAM,CACJm+E,kBAAmB,KACnB92D,QAAS,CACPkxI,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAkCu7J,EAAcnkJ,QAAU3iB,KAElF88J,mBAAoB,KACpBhkJ,YAAa,CACX+6I,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IACpBu7J,EAAchuJ,YAAc9Y,KAGhCqqJ,sBAAuBt1J,KAAKwW,IAAiB+6J,EAAOjc,iBACpD/iG,QAAS,CACPusG,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAkCu7J,EAAcx/G,QAAUtnD,KAElF03H,UAAW,KACXznH,oBAAqBlb,KAAKwW,IACxBu7J,EAAc72J,cAAgBjQ,IAEhCw2H,0BAA2B,CACzBq9B,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAgC+6J,EAAO7/F,UAE/DjvE,SAAU,CACRq8J,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAkCu7J,EAActvK,SAAWwI,KAEnF8R,gBAAiB/c,KAAKwW,IAAoCu7J,EAAch1J,UAAY9R,IACpF0nD,MAAO,CACLmsG,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAgCu7J,EAAcp/G,MAAQ1nD,MAGhFg5B,KAAM,CACJyiI,yBAA0B1mK,KAAKwW,IAAY+6J,EAAO1qI,cAClDohI,gBAAiB,KACjB2K,oBAAqB,KACrBC,mBAAoB,KACpBC,yBAA0B,KAC1BnxC,mBAAoB,CAClB1qB,gBAAiBj3G,KAAKwW,IAAY+6J,EAAOvvK,QACzC88J,UAAW,MAEbsO,aAAc,KACdxrC,iBAAkB,CAChBk9B,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAS+6J,EAAOrjB,aAExCl4H,WAAY,CACV8oI,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAY+6J,EAAOG,aAE3C7vC,aAAc,CACZi9B,UAAW,KACX7nD,gBAAiBj3G,KAAKwW,IAAS+6J,EAAOhjB,kBAExC1sJ,UAAW,MAEbyiE,QAAS,CACPkiG,qBAAsBxmK,KAAKwW,IAAY+6J,EAAOloK,UAC9C0pK,qBAAsB,KACtB/K,mCAAoChoK,KAAKwW,IAAa+6J,EAAOvJ,8BAC7DrlK,YAAa3C,KAAKwW,IAAY+6J,EAAOx8J,WACrCmiF,oBAAqBl3F,KAAKwW,IAAa+6J,EAAOr6E,eAC9Cp4E,SAAU,KACV2tJ,WAAY,KACZG,iBAAkB,KAClBt5E,mBAAoB,KACpB8jC,qBAAsB,KACtB18F,oBAAqB16B,KAAKwW,IAAY+6J,EAAO72I,eAC7CF,cAAex6B,KAAKwW,IAAa+6J,EAAO92I,KACxCoxH,cAAe7rJ,KAAKwW,IAAY+6J,EAAO1lB,SACvCshB,SAAU,KACVliK,OAAQA,GACR4rB,iBAAkB,MAEpBwM,SAAUsvI,GACVt7C,OAAQ,CACNH,kBAAmBl3H,KAAKwW,IAAY+6J,EAAOr6C,aAC3C0oB,aAAc,KACdroB,mBAAoBv3H,KAAKwW,IAAY+6J,EAAOh6C,cAC5C2b,cAAe,cAIblzI,KAAKiX,IAAIgtB,EAA4B,CAACh5B,WACtCjL,KAAKiX,IAAIgtB,EAAmBh5B,IAElC,MAAMy8H,GAAgD,CACpD,CAACz8H,UAAejL,KAAKwW,IAAY+6J,EAAOI,aAE1CjqC,GAAgBz8H,UAAgBjL,KAAKwW,IAAY+6J,EAAOI,kBAClD3xK,KAAKiX,IAAIgtB,EAAsByjG,UAE/B6qC,GAAYtnK,WAERjL,KAAKukK,qBAAqBluJ,IAAIk7J,EAAOnvK,IAAK,CAAEsqJ,UAAW,uBACzD1sJ,KAAKukK,qBAAqBjpF,KAC9B,GAAGrwE,KAASq5J,UACNtkK,KAAKukK,qBAAqB/tJ,IAAI+6J,EAAOnvK,IAAK,CAAEsqJ,UAAW,cAC7D,CAAEA,UAAW,oBAET1sJ,KAAKukK,qBAAqB3yJ,OAAO2/J,EAAOnvK,IAAK,CAAEsqJ,UAAW,sBAGxD1sJ,KAAKukK,qBAAqBluJ,IAAIk7J,EAAOnvK,IAAK,CAAEsqJ,UAAW,kBACzD1sJ,KAAKukK,qBAAqBjpF,KAC9B,GAAGrwE,KAASq5J,UACNtkK,KAAKukK,qBAAqB/tJ,IAAI+6J,EAAOnvK,IAAK,CAAEsqJ,UAAW,SAC7D,CAAEA,UAAW,eAET1sJ,KAAKukK,qBAAqB3yJ,OAAO2/J,EAAOnvK,IAAK,CAAEsqJ,UAAW,iBAGxD1sJ,KAAKukK,qBAAqBluJ,IAAIk7J,EAAOnvK,cACvCpC,KAAKukK,qBAAqBjpF,KAC9B,GAAGrwE,KAASq5J,UACNtkK,KAAKukK,qBAAqB/tJ,IAAI+6J,EAAOnvK,YAEvCpC,KAAKukK,qBAAqB3yJ,OAAO2/J,EAAOnvK,SAIlCgwK,uB,yCACd,MAAMY,QAA6BhzK,KAAKwW,IAAcytB,SAChDt0B,QAAQC,IACZojK,EAAqBxsK,KAAWyE,GAAW,EAAD,gC,QACxC,MAAMgxE,QAAgBj8E,KAAKwW,IAAcvL,GACzC,GAC6C,QAA3B,QAAhB,EAAAgxE,MAAAA,OAAO,EAAPA,EAAS3X,eAAO,eAAE8yD,uBACa,OAAjB,QAAd,EAAAn7C,EAAQo7C,cAAM,eAAEH,aAChB,CACA,MAAM0oB,QAAqB,EAAA5zC,aAAairB,YAAYh7C,EAAQo7C,OAAOH,aACnEj7C,EAAQ3X,QAAQ8yD,qBAAuBwoB,EAAa36I,cAC9CjF,KAAKiX,IAAIhM,EAAQgxE,UAK7B,MAAMI,QAAgBr8E,KAAKk8E,aAC3BG,EAAQ0oD,aAAe,EAAAr0B,aAAa2hE,YAC9BryK,KAAKiX,IAAIgtB,EAAao4C,MAGdi2F,uB,yCACd,MAAMU,QAA6BhzK,KAAKwW,IAAcytB,SAChDt0B,QAAQC,IACZojK,EAAqBxsK,KAAWyE,GAAW,EAAD,gC,MACxC,MAAMgxE,QAAgBj8E,KAAKwW,IAAcvL,GACzC,GAA0C,OAAtB,QAAhB,EAAAgxE,MAAAA,OAAO,EAAPA,EAAS3X,eAAO,eAAEsoG,kBAEpB,cADO3wF,EAAQ3X,QAAQsoG,iBAChB5sK,KAAKiX,IAAIhM,EAAQgxE,SAK9B,MAAMI,QAAgBr8E,KAAKk8E,aAC3BG,EAAQ0oD,aAAe,EAAAr0B,aAAauiE,WAC9BjzK,KAAKiX,IAAIgtB,EAAao4C,MAG9B,cACE,MAAO,CAAExB,oBAAqB,EAAAC,oBAAoBG,OAG1CzkE,IAAOpU,GACf,OAAOpC,KAAKygJ,eAAejqI,IAAOpU,EAAKpC,KAAK2Q,SAGpCsG,IAAI7U,EAAauY,GACzB,OAAa,MAATA,EACK3a,KAAKygJ,eAAe7uI,OAAOxP,EAAKpC,KAAK2Q,SAEvC3Q,KAAKygJ,eAAenlE,KAAKl5E,EAAKuY,EAAO3a,KAAK2Q,SAGnCurE,a,yCACd,aAAal8E,KAAKwW,IAAkBytB,MAGtBguI,yB,iDACd,OAA8C,QAAtC,EAAwB,QAAzB,QAAOjyK,KAAKk8E,oBAAa,eAAE6oD,oBAAY,QAAI,EAAAr0B,aAAas0B,U,44BC/enE,iBACA,WACA,WACA,WACA,WACA,WACA,WACA,WAcA,MAAal4B,EAGX9tG,YACUK,EACAyM,EACAD,EACAE,EACAlL,EACAoL,EACA5I,EACAvC,EACA29C,EACA19C,EACA0C,EACAnE,EACA0b,EACA6B,EACAm7H,GAdA,KAAA34I,WAAAA,EACA,KAAAyM,gBAAAA,EACA,KAAAD,cAAAA,EACA,KAAAE,cAAAA,EACA,KAAAlL,cAAAA,EACA,KAAAoL,kBAAAA,EACA,KAAA5I,iBAAAA,EACA,KAAAvC,cAAAA,EACA,KAAA29C,YAAAA,EACA,KAAA19C,WAAAA,EACA,KAAA0C,oBAAAA,EACA,KAAAnE,aAAAA,EACA,KAAA0b,oBAAAA,EACA,KAAA6B,gBAAAA,EACA,KAAAm7H,eAAAA,EAjBV,KAAAk7B,gBAAiB,EAoBX/1J,c,yCACJ,GAA6C,aAAlCnd,KAAKV,aAAaoQ,aAC3B,OAAO,KAGT,MAAMy9J,QAAiBntK,KAAKV,aAAa6d,cACzC,OAAIgwJ,EACK,IAAIp9J,KAAKo9J,GAGX,QAGHr9J,YAAYkF,EAAY/J,G,+CACtBjL,KAAKV,aAAawQ,YAAYkF,EAAKm+J,SAAU,CAAEloK,OAAQA,OAIzDmS,SAASg2J,EAAoBC,GAAoB,G,yCACrDrzK,KAAKszK,cAEL,WAD8BtzK,KAAKV,aAAa8L,sBAE9C,OAAOpL,KAAKuzK,eAAc,GAG5B,MAAMnjK,EAAM,IAAIL,KAChB,IAAIyjK,GAAY,EAChB,IACEA,QAAkBxzK,KAAKyzK,aAAaL,GACpC,MAAOvwK,GACP,GAAIwwK,EACF,MAAMxwK,EAIV,IAAK2wK,EAEH,aADMxzK,KAAK8P,YAAYM,GAChBpQ,KAAKuzK,eAAc,GAG5B,UACQvzK,KAAKX,WAAWgM,uBACtB,MAAM3J,QAAiB1B,KAAKX,WAAWi9I,UAWvC,aATMt8I,KAAK0zK,YAAYhyK,EAAS4iE,eAC1BtkE,KAAK2zK,YAAYjyK,EAAS6wD,eAC1BvyD,KAAK4zK,gBAAgBlyK,EAASqiB,mBAC9B/jB,KAAK6zK,YAAYnyK,EAASksB,eAC1B5tB,KAAK8zK,UAAUpyK,EAASixD,aACxB3yD,KAAK+zK,aAAaryK,EAASgzD,eAC3B10D,KAAKg0K,aAAatyK,EAASe,gBAE3BzC,KAAK8P,YAAYM,GAChBpQ,KAAKuzK,eAAc,GAC1B,MAAO1wK,GACP,GAAIwwK,EACF,MAAMxwK,EAEN,OAAO7C,KAAKuzK,eAAc,OAK1B7W,iBAAiBP,EAAsC8X,G,yCAE3D,GADAj0K,KAAKszK,oBACKtzK,KAAKV,aAAa8L,qBAC1B,IACE,MAAM8oK,QAAoBl0K,KAAK6L,cAAc2K,IAAI2lJ,EAAah8J,IAC9D,IACI8zK,GAAyB,MAAfC,GACXD,GAAyB,MAAfC,GAAuBA,EAAY9sI,aAAe+0H,EAAa/0H,aAC1E,CACA,MAAM+sI,QAAqBn0K,KAAKX,WAAWi6I,UAAU6iB,EAAah8J,IAClE,GAAoB,MAAhBg0K,EAGF,aAFMn0K,KAAK6L,cAAcq8I,OAAO,IAAI,EAAA4P,WAAWqc,IAC/Cn0K,KAAKqD,iBAAiBqB,KAAK,uBAAwB,CAAE0hB,SAAU+1I,EAAah8J,KACrEH,KAAKuzK,eAAc,IAG9B,MAAO1wK,GACP7C,KAAKe,WAAW+B,MAAMD,GAG1B,OAAO7C,KAAKuzK,eAAc,MAGtB5W,iBAAiBR,G,yCAErB,OADAn8J,KAAKszK,qBACKtzK,KAAKV,aAAa8L,6BACpBpL,KAAK6L,cAAcgZ,OAAOs3I,EAAah8J,IAC7CH,KAAKqD,iBAAiBqB,KAAK,sBAAuB,CAAE0hB,SAAU+1I,EAAah8J,KAC3EH,KAAKuzK,eAAc,IACZ,GAEFvzK,KAAKuzK,eAAc,MAGtB/W,iBAAiBL,EAAsC8X,G,yCAE3D,GADAj0K,KAAKszK,oBACKtzK,KAAKV,aAAa8L,qBAC1B,IACE,IAAIgpK,GAAe,EACnB,MAAMC,QAAoBr0K,KAAK+L,cAAcyK,IAAI2lJ,EAAah8J,IAC3C,MAAfk0K,GAAuBA,EAAYjtI,cAAgB+0H,EAAa/0H,eAClEgtI,GAAe,GAGjB,IAAIE,GAAmB,EAevB,GAdIF,IACEH,GACFG,EAA8B,MAAfC,EACfC,GAAmB,GAEe,MAA9BnY,EAAazyI,eAAwD,MAA/ByyI,EAAah7J,eACrDizK,EAA8B,MAAfC,GAEfD,GAAe,EACfE,GAAmB,KAMtBF,GACDE,GAC+B,MAA/BnY,EAAah7J,gBACiB,MAA9Bg7J,EAAazyI,eACbyyI,EAAazyI,cAAc9Y,OAAS,EACpC,CACA,MAAMmT,QAAoB/jB,KAAKiM,kBAAkBmP,SACjD,GAAmB,MAAf2I,EACF,IAAK,IAAI3L,EAAI,EAAGA,EAAI2L,EAAYnT,OAAQwH,IACtC,GAAI+jJ,EAAazyI,cAAc3lB,QAAQggB,EAAY3L,GAAGjY,KAAO,EAAG,CAC9Di0K,GAAe,EACf,OAMR,GAAIA,EAAc,CAChB,MAAMG,QAAqBv0K,KAAKX,WAAWi7I,UAAU6hB,EAAah8J,IAClE,GAAoB,MAAhBo0K,EAGF,aAFMv0K,KAAK+L,cAAcm8I,OAAO,IAAI,EAAA9zG,WAAWmgI,IAC/Cv0K,KAAKqD,iBAAiBqB,KAAK,uBAAwB,CAAE8iB,SAAU20I,EAAah8J,KACrEH,KAAKuzK,eAAc,IAG9B,MAAO1wK,GACP,GAAS,MAALA,GAA8B,MAAjBA,EAAE82B,YAAsBs6I,EAGvC,aAFMj0K,KAAK+L,cAAc8Y,OAAOs3I,EAAah8J,IAC7CH,KAAKqD,iBAAiBqB,KAAK,sBAAuB,CAAE8iB,SAAU20I,EAAah8J,KACpEH,KAAKuzK,eAAc,GAIhC,OAAOvzK,KAAKuzK,eAAc,MAGtB9W,iBAAiBN,G,yCAErB,OADAn8J,KAAKszK,qBACKtzK,KAAKV,aAAa8L,6BACpBpL,KAAK+L,cAAc8Y,OAAOs3I,EAAah8J,IAC7CH,KAAKqD,iBAAiBqB,KAAK,sBAAuB,CAAE8iB,SAAU20I,EAAah8J,KACpEH,KAAKuzK,eAAc,IAErBvzK,KAAKuzK,eAAc,MAGtB3W,eAAeT,EAAoC8X,G,yCAEvD,GADAj0K,KAAKszK,oBACKtzK,KAAKV,aAAa8L,qBAC1B,IACE,MAAMopK,QAAkBx0K,KAAKy+C,YAAYjoC,IAAI2lJ,EAAah8J,IAC1D,IACI8zK,GAAuB,MAAbO,GACXP,GAAuB,MAAbO,GAAqBA,EAAUptI,aAAe+0H,EAAa/0H,aACtE,CACA,MAAMqtI,QAAmBz0K,KAAKX,WAAWq6I,QAAQyiB,EAAah8J,IAC9D,GAAkB,MAAds0K,EAGF,aAFMz0K,KAAKy+C,YAAYypG,OAAO,IAAI,EAAA6b,SAAS0Q,IAC3Cz0K,KAAKqD,iBAAiBqB,KAAK,qBAAsB,CAAEi4C,OAAQw/G,EAAah8J,KACjEH,KAAKuzK,eAAc,IAG9B,MAAO1wK,GACP7C,KAAKe,WAAW+B,MAAMD,GAG1B,OAAO7C,KAAKuzK,eAAc,MAGtB1W,eAAeV,G,yCAEnB,OADAn8J,KAAKszK,qBACKtzK,KAAKV,aAAa8L,6BACpBpL,KAAKy+C,YAAY55B,OAAOs3I,EAAah8J,IAC3CH,KAAKqD,iBAAiBqB,KAAK,oBAAqB,CAAEi4C,OAAQw/G,EAAah8J,KACvEH,KAAKuzK,eAAc,IACZ,GAEFvzK,KAAKuzK,eAAc,MAKpBD,cACNtzK,KAAKkzK,gBAAiB,EACtBlzK,KAAKqD,iBAAiBqB,KAAK,eAGrB6uK,cAAcnrJ,GAGpB,OAFApoB,KAAKkzK,gBAAiB,EACtBlzK,KAAKqD,iBAAiBqB,KAAK,gBAAiB,CAAE0jB,aAAcA,IACrDA,EAGKqrJ,aAAaL,G,yCACzB,GAAIA,EACF,OAAO,EAGT,MAAMjG,QAAiBntK,KAAKmd,cAC5B,GAAgB,MAAZgwJ,GAA2C,IAAvBA,EAAS98J,UAC/B,OAAO,EAGT,MAAM3O,QAAiB1B,KAAKX,WAAW25I,yBACvC,QAAI,IAAIjpI,KAAKrO,IAAayrK,MAMduG,YAAYhyK,G,yCACxB,MAAMmwK,QAAc7xK,KAAKV,aAAauvK,mBACtC,GAAa,MAATgD,GAAiBA,IAAUnwK,EAASwxI,cAKtC,MAJ2B,MAAvBlzI,KAAKg4I,uBACDh4I,KAAKg4I,gBAAe,IAGtB,IAAIp2I,MAAM,2BAGZ5B,KAAKa,cAAcy8F,UAAU57F,EAASU,WACtCpC,KAAKa,cAAc08F,iBAAiB77F,EAASs0B,kBAC7Ch2B,KAAKa,cAAc0rJ,gBAAgB7qJ,EAASqb,iBAC5C/c,KAAKa,cAAcqrJ,WAAWxqJ,EAASwZ,cAAexZ,EAASqxI,6BAC/D/yI,KAAKV,aAAawvK,iBAAiBptK,EAASwxI,qBAC5ClzI,KAAKV,aAAagrK,iBAAiB5oK,EAASw1F,qBAC5Cl3F,KAAKV,aAAamoK,wBAAwB/lK,EAASsxI,yBACnDhzI,KAAKV,aAAaqoK,8BAA8BjmK,EAASuxI,+BACzDjzI,KAAKV,aAAawtK,sBAAsBprK,EAAS4xF,0BACjDtzF,KAAKyD,oBAAoBm2J,oBAAoBl4J,EAASm1B,kBAE5D,MAAM3b,EAAoD,GAC1DxZ,EAASwZ,cAAcrK,SAAS+P,IAC9B1F,EAAc0F,EAAEzgB,IAAM,IAAI,EAAAu0K,iBAAiB9zJ,MAG7C,MAAM7D,EAA4C,GAClDrb,EAASqb,UAAUlM,SAASpK,IAC1BsW,EAAUtW,EAAEtG,IAAM,IAAI,EAAAw0K,aAAaluK,MAGrC/E,EAASqxI,sBAAsBliI,SAAS+P,IACX,MAAvB1F,EAAc0F,EAAEzgB,MAClB+a,EAAc0F,EAAEzgB,IAAM,IAAI,EAAAu0K,iBAAiB9zJ,GAC3C1F,EAAc0F,EAAEzgB,IAAImlI,gBAAiB,YAInCtlI,KAAKgb,oBAAoBsgE,KAAKpgE,SAC9Blb,KAAK6c,gBAAgBy+D,KAAKv+D,UAEtB/c,KAAKyD,oBAAoBo2J,6BAC3B75J,KAAKyD,oBAAoBk3J,2BAA0B,GACzD36J,KAAKqD,iBAAiBqB,KAAK,iCAE3B1E,KAAKyD,oBAAoBuzF,kCAIf28E,YAAYjyK,G,yCACxB,MAAM6wD,EAAwC,GAI9C,OAHA7wD,EAASmP,SAASmlC,IAChBuc,EAAQvc,EAAE71C,IAAM,IAAI,EAAA23J,WAAW9hH,YAEpBh2C,KAAK6L,cAAclL,QAAQ4xD,MAG5BqhH,gBAAgBlyK,G,yCAC5B,MAAMqiB,EAAgD,GAItD,OAHAriB,EAASmP,SAAS4J,IAChBsJ,EAAYtJ,EAAEta,IAAM,IAAI,EAAA+kB,eAAezK,YAE5Bza,KAAKiM,kBAAkBtL,QAAQojB,MAGhC8vJ,YAAYnyK,G,yCACxB,MAAMksB,EAAwC,GAI9C,OAHAlsB,EAASmP,SAAS4J,IAChBmT,EAAQnT,EAAEta,IAAM,IAAI,EAAAi0C,WAAW35B,YAEpBza,KAAK+L,cAAcpL,QAAQitB,MAG5BkmJ,UAAUpyK,G,yCACtB,MAAMixD,EAAoC,GAI1C,OAHAjxD,EAASmP,SAASgK,IAChB83C,EAAM93C,EAAE1a,IAAM,IAAI,EAAA4jK,SAASlpJ,YAEhB7a,KAAKy+C,YAAY99C,QAAQgyD,MAG1BohH,aAAaryK,G,yCACzB,IAAIolJ,EAAwB,GAa5B,OAZgB,MAAZplJ,GAAkD,MAA9BA,EAAS8yD,oBAC/BsyF,EAAYA,EAAU//I,OAAOrF,EAAS8yD,oBAGxB,MAAZ9yD,GAAwD,MAApCA,EAAS+yD,yBAC/B/yD,EAAS+yD,wBAAwB5jD,SAASyjD,IACpCA,EAAOI,QAAQ9jD,OAAS,GAC1Bk2I,EAAUzvI,KAAKi9C,EAAOI,YAKrB10D,KAAK8L,gBAAgBq4J,qBAAqBrd,MAGrCktB,aAAatyK,G,yCACzB,MAAMe,EAAyC,GAM/C,OALgB,MAAZf,GACFA,EAASmP,SAASpK,IAChBhE,EAASgE,EAAEtG,IAAM,IAAI,EAAAuG,WAAWD,YAGvBzG,KAAKc,cAAcH,QAAQ8B,OAhU1C,GADC,EAAAkoJ,eAAc,IAAM,a,+HAtCvB,iB,0aClCA,iBAGA,MAAa3+C,EAoBXhtG,YAAoBM,GAAA,KAAAA,aAAAA,EAnBpB,mBAAmBS,GACjB,GAAa,MAATA,EACF,MAAM,IAAI6B,MAAM,uBAGlB,MAAM8mF,EAAQ3oF,EAAMoH,MAAM,KAC1B,GAAqB,IAAjBuhF,EAAM93E,OACR,MAAM,IAAIhP,MAAM,yBAGlB,MAAMgzK,EAAU,EAAA9yK,MAAM+yK,iBAAiBnsF,EAAM,IAC7C,GAAe,MAAXksF,EACF,MAAM,IAAIhzK,MAAM,2BAIlB,OADqBwoC,KAAKixC,MAAMu5F,GAM5B/0B,UACJ3oB,EACAK,EACAu9C,G,+CAEM90K,KAAK+/I,SAAS7oB,SACdl3H,KAAK2uK,gBAAgBp3C,GACC,MAAxBu9C,UACI90K,KAAK+0K,YAAYD,EAAqB,UACtC90K,KAAKg1K,gBAAgBF,EAAqB,QAI9CC,YAAY1rK,G,yCAChB,aAAarJ,KAAKV,aAAas2H,kBAAkBvsH,MAG7Co2I,c,yCACJ,aAAaz/I,KAAKV,aAAainK,uBAG3ByO,gBAAgBnuI,G,yCACpB,aAAa7mC,KAAKV,aAAau2H,sBAAsBhvF,MAGjD64G,kB,yCACJ,aAAa1/I,KAAKV,aAAamnK,2BAG3B1mB,SAAShgJ,G,+CACPC,KAAKV,aAAa2mK,eAAelmK,MAGnCk/I,W,yCACJ,aAAaj/I,KAAKV,aAAawmK,oBAG3B6I,gBAAgBp3C,G,yCACpB,aAAav3H,KAAKV,aAAaqvK,gBAAgBp3C,MAG3CgoB,kB,yCACJ,aAAav/I,KAAKV,aAAaigJ,qBAG3B7nB,kBAAkBzC,G,yCACtB,aAAaj1H,KAAKV,aAAao4H,kBAAkBzC,EAAcwC,mBAG3DX,oB,yCACJ,aAAa92H,KAAKV,aAAaw3H,uBAG3B6hB,sB,yCACJ,aAAa34I,KAAKV,aAAao4H,kBAAkB,SAG7Cu9C,WAAWhqK,G,+CACTjL,KAAKV,aAAa2mK,eAAe,KAAM,CAAEh7J,OAAQA,UACjDjL,KAAKV,aAAaqvK,gBAAgB,KAAM,CAAE1jK,OAAQA,UAClDjL,KAAKV,aAAas2H,kBAAkB,KAAM,CAAE3qH,OAAQA,UACpDjL,KAAKV,aAAau2H,sBAAsB,KAAM,CAAE5qH,OAAQA,OAM1DgsH,YAAYl3H,G,yCAChB,MAAMm1K,QAAoBl1K,KAAKV,aAAagpK,kBAC5C,GAAc,OAAVvoK,GAAiC,MAAfm1K,EACpB,OAAOA,EAKT,GAAa,OAFbn1K,EAAQA,MAAAA,EAAAA,QAAgBC,KAAKV,aAAawmK,kBAGxC,MAAM,IAAIlkK,MAAM,oBAGlB,OAAOoqG,EAAairB,YAAYl3H,MAG5Bo1K,yB,yCACJ,MAAMP,QAAgB50K,KAAKi3H,cAC3B,QAA2B,IAAhB29C,EAAQ9+B,IACjB,OAAO,KAGT,MAAMxjH,EAAI,IAAIviB,KAAK,GAEnB,OADAuiB,EAAE8iJ,cAAcR,EAAQ9+B,KACjBxjH,KAGH+iJ,sBAAsBC,EAAgB,G,yCAC1C,MAAMhjJ,QAAUtyB,KAAKm1K,yBACrB,GAAS,MAAL7iJ,EACF,OAAO,EAGT,MAAMijJ,EAAcjjJ,EAAEi1G,YAAa,IAAIx3H,MAAOw3H,UAA4B,IAAhB+tC,GAC1D,OAAOxtI,KAAKE,MAAMutI,EAAc,QAG5Br2B,kBAAkB3jD,EAAU,G,yCAEhC,aADyBv7F,KAAKq1K,yBACV,GAAK95E,KAGrB7rF,Y,yCACJ,MAAMklK,QAAgB50K,KAAKi3H,cAC3B,QAA2B,IAAhB29C,EAAQhoI,IACjB,MAAM,IAAIhrC,MAAM,oBAGlB,OAAOgzK,EAAQhoI,OAGX1vB,W,yCACJ,MAAM03J,QAAgB50K,KAAKi3H,cAC3B,QAA6B,IAAlB29C,EAAQjyK,MACjB,MAAM,IAAIf,MAAM,kBAGlB,OAAOgzK,EAAQjyK,SAGXokB,mB,yCACJ,MAAM6tJ,QAAgB50K,KAAKi3H,cAC3B,QAAsC,IAA3B29C,EAAQY,eACjB,MAAM,IAAI5zK,MAAM,+BAGlB,OAAOgzK,EAAQY,kBAGXv4J,U,yCACJ,MAAM23J,QAAgB50K,KAAKi3H,cAC3B,YAA4B,IAAjB29C,EAAQl0K,KACV,KAGFk0K,EAAQl0K,QAGX+0K,Y,yCACJ,MAAMb,QAAgB50K,KAAKi3H,cAC3B,QAA2B,IAAhB29C,EAAQc,IACjB,MAAM,IAAI9zK,MAAM,mBAGlB,OAAOgzK,EAAQc,OAGX3b,gB,yCACJ,MAAM6a,QAAgB50K,KAAKi3H,cAE3B,OAAO1oH,MAAM2zJ,QAAQ0S,EAAQe,MAAQf,EAAQe,IAAIniH,SAAS,gBAlL9D,kB,yaCDA,iBAEMoiH,EAAW,mCACXC,EAAa,6BAEnB,oBACE72K,YACUuF,EACAxD,EACAzB,GAFA,KAAAiF,sBAAAA,EACA,KAAAxD,WAAAA,EACA,KAAAzB,aAAAA,EAGJ22E,QAAQ7zE,G,yCACZ,GAAW,MAAPA,EACF,OAAO,KAET,IAAI0zK,EAAS,GACTxkB,EAAoC,OACpCykB,EAAS,EACTC,EAAS5zK,EACb,MAAM6zK,EAAwD,IAA5C7zK,EAAI8E,cAAcnD,QAAQ,cACtCmyK,GAAeD,GAAuD,IAA1C7zK,EAAI8E,cAAcnD,QAAQ,YAC5D,GAAIkyK,EAAW,CACb,MAAM/uJ,EAAS,EAAAplB,MAAMq0K,eAAe/zK,GACpC,GAAI8kB,EAAO7Q,IAAI,WAAqC,MAAxB6Q,EAAO1Q,IAAI,UACrC,IACE,MAAM4/J,EAAcjpJ,SAASjG,EAAO1Q,IAAI,UAAUvP,OAAQ,MACtDmvK,EAAc,GAChBL,EAAS,GACAK,EAAc,IACvBL,EAASK,GAEX,SACAp2K,KAAKe,WAAW+B,MAAM,yBAG1B,GAAIokB,EAAO7Q,IAAI,WAAqC,MAAxB6Q,EAAO1Q,IAAI,UACrC,IACE,MAAM6/J,EAAclpJ,SAASjG,EAAO1Q,IAAI,UAAUvP,OAAQ,MACtDovK,EAAc,IAChBP,EAASO,GAEX,SACAr2K,KAAKe,WAAW+B,MAAM,yBAM1B,GAHIokB,EAAO7Q,IAAI,WAAqC,MAAxB6Q,EAAO1Q,IAAI,YACrCw/J,EAAS9uJ,EAAO1Q,IAAI,WAElB0Q,EAAO7Q,IAAI,cAA2C,MAA3B6Q,EAAO1Q,IAAI,aAAsB,CAC9D,MAAM8/J,EAAWpvJ,EAAO1Q,IAAI,aAAatP,cACxB,SAAbovK,GAAoC,WAAbA,GAAsC,WAAbA,IAClDhlB,EAAMglB,SAGDJ,IACTF,EAAS5zK,EAAI4E,OAAO,WAAW4J,QAC/BmlK,EAAS,GAGX,MAAMQ,EAAQzuI,KAAKE,OAAM,IAAIj4B,MAAOM,UAAY,KAC1CmmK,EAAUx2K,KAAKy2K,QAAQz2K,KAAK02K,SAAS5uI,KAAKmf,MAAMsvH,EAAQT,IAAU,GAAI,KACtEa,EAAY,EAAA70K,MAAM80K,eAAeJ,GACjCK,EAAW72K,KAAK82K,WAAWd,GAEjC,IAAKa,EAASjmK,SAAW+lK,EAAU/lK,OACjC,OAAO,KAGT,MAAMmc,QAAa/sB,KAAK+2K,KAAKF,EAAUF,EAAWrlB,GAClD,GAAoB,IAAhBvkI,EAAKnc,OACP,OAAO,KAGT,MAAMomK,EAAiC,GAAxBjqJ,EAAKA,EAAKnc,OAAS,GAC5BgqH,GACa,IAAf7tG,EAAKiqJ,KAAmB,IACL,IAAnBjqJ,EAAKiqJ,EAAS,KAAc,IACT,IAAnBjqJ,EAAKiqJ,EAAS,KAAc,EACV,IAAnBjqJ,EAAKiqJ,EAAS,GAEjB,IAAItpG,EAAM,GACV,GAAIwoG,EAAa,CACf,IAAIe,EAAoB,WAATr8C,EACf,IAAK,IAAIxiH,EAAI,EAAGA,EAAI29J,EAAQ39J,IAC1Bs1D,GAAOmoG,EAAWoB,EAAWpB,EAAWjlK,QACxCqmK,EAAWnvI,KAAKovI,MAAMD,EAAWpB,EAAWjlK,aAG9C88D,GAAOktD,EAAS9yF,KAAKyqH,IAAI,GAAIwjB,IAASzwK,WACtCooE,EAAM1tE,KAAKy2K,QAAQ/oG,EAAKqoG,EAAQ,KAGlC,OAAOroG,KAGTyH,gBAAgB/yE,GACd,IAAI0zK,EAAS,GACb,GAAW,MAAP1zK,GAA2D,IAA5CA,EAAI8E,cAAcnD,QAAQ,cAAqB,CAChE,MAAMmjB,EAAS,EAAAplB,MAAMq0K,eAAe/zK,GACpC,GAAI8kB,EAAO7Q,IAAI,WAAqC,MAAxB6Q,EAAO1Q,IAAI,UACrC,IACEs/J,EAAS3oJ,SAASjG,EAAO1Q,IAAI,UAAUvP,OAAQ,MAC/C,SACAjH,KAAKe,WAAW+B,MAAM,0BAI5B,OAAOgzK,EAGHqB,oB,yCACJ,cAAen3K,KAAKV,aAAa0pK,6BAK3ByN,QAAQ57J,EAAW6lG,EAAWj6G,GAIpC,OAHIi6G,EAAI,GAAK7lG,EAAEjK,SACbiK,EAAItM,MAAMmyG,EAAI,EAAI7lG,EAAEjK,QAAQgJ,KAAKnT,GAAKoU,GAEjCA,EAGD67J,SAASpkJ,GACf,OAAQA,EAAI,KAAO,IAAM,IAAMwV,KAAKE,MAAM1V,GAAGhtB,SAAS,IAGhD8xK,SAASv8J,GACfA,EAAIA,EAAE8R,cACN,IAAI0qJ,EAAe,GAEnB,IAAK,IAAIj/J,EAAI,EAAGA,EAAIyC,EAAEjK,OAAQwH,IACxBw9J,EAAS7xK,QAAQ8W,EAAEzC,IAAM,IAI7Bi/J,GAAgBx8J,EAAEzC,IAEpByC,EAAIw8J,EAEJ,IAAIC,EAAO,GACPC,EAAM,GACV,IAAK,IAAIn/J,EAAI,EAAGA,EAAIyC,EAAEjK,OAAQwH,IAAK,CACjC,MAAMo/J,EAAY5B,EAAS7xK,QAAQ8W,EAAEoS,OAAO7U,IACxCo/J,EAAY,IAGhBF,GAAQt3K,KAAKy2K,QAAQe,EAAUlyK,SAAS,GAAI,EAAG,MAEjD,IAAK,IAAI8S,EAAI,EAAGA,EAAI,GAAKk/J,EAAK1mK,OAAQwH,GAAK,EAAG,CAC5C,MAAMq/J,EAAQH,EAAKtwK,OAAOoR,EAAG,GAC7Bm/J,GAAYpqJ,SAASsqJ,EAAO,GAAGnyK,SAAS,IAE1C,OAAOiyK,EAGDT,WAAWj8J,GACjB,OAAO,EAAA/Y,MAAM80K,eAAe52K,KAAKo3K,SAASv8J,IAG9Bk8J,KACZF,EACAF,EACArlB,G,yCAEA,MAAMomB,QAAkB13K,KAAKuE,sBAAsB+hH,KAAKqwD,EAAUt0K,OAAQw0K,EAASx0K,OAAQivJ,GAC3F,OAAO,IAAIl3B,WAAWs9C,S,6HCrK1B,iBAGa,EAAAjrG,mBACX,CACE,CAAC,EAAA57B,sBAAsBw4B,eAAgB,CACrCh4D,KAAM,EAAAw/B,sBAAsBw4B,cAC5B3oE,KAAM,KACN8/B,YAAa,KACbm3I,SAAU,EACVzgK,KAAM,EACNjS,SAAS,GAEX,CAAC,EAAA4rC,sBAAsBg8B,SAAU,CAC/Bx7D,KAAM,EAAAw/B,sBAAsBg8B,QAC5BnsE,KAAM,KACN8/B,YAAa,KACbm3I,SAAU,EACVzgK,KAAM,EACNjS,SAAS,GAEX,CAAC,EAAA4rC,sBAAsB85B,KAAM,CAC3Bt5D,KAAM,EAAAw/B,sBAAsB85B,IAC5BjqE,KAAM,MACN8/B,YAAa,KACbm3I,SAAU,EACVzgK,KAAM,EACNjS,SAAS,GAEX,CAAC,EAAA4rC,sBAAsBC,iBAAkB,CACvCz/B,KAAM,EAAAw/B,sBAAsBC,gBAC5BpwC,KAAM,qBACN8/B,YAAa,KACbm3I,SAAU,GACVzgK,KAAM,EACNjS,SAAS,GAEX,CAAC,EAAA4rC,sBAAsB6f,OAAQ,CAC7Br/C,KAAM,EAAAw/B,sBAAsB6f,MAC5BhwD,KAAM,KACN8/B,YAAa,KACbm3I,SAAU,EACVzgK,KAAM,EACNjS,SAAS,GAEX,CAAC,EAAA4rC,sBAAsBo8B,UAAW,CAChC57D,KAAM,EAAAw/B,sBAAsBo8B,SAC5BvsE,KAAM,KACN8/B,YAAa,KACbm3I,SAAU,EACVzgK,KAAM,EACNjS,SAAS,IAIf,yBAIEjG,YACUG,EACAD,GADA,KAAAC,YAAAA,EACA,KAAAD,qBAAAA,EAJF,KAAA04K,8BAAuD,KAO/DntK,OACE,EAAAgiE,mBAAmB,EAAA57B,sBAAsB6f,OAAOhwD,KAAOV,KAAKb,YAAYmB,EAAE,cAC1E,EAAAmsE,mBAAmB,EAAA57B,sBAAsB6f,OAAOlwB,YAAcxgC,KAAKb,YAAYmB,EAAE,aAEjF,EAAAmsE,mBAAmB,EAAA57B,sBAAsBw4B,eAAe3oE,KACtDV,KAAKb,YAAYmB,EAAE,yBACrB,EAAAmsE,mBAAmB,EAAA57B,sBAAsBw4B,eAAe7oC,YACtDxgC,KAAKb,YAAYmB,EAAE,wBAErB,EAAAmsE,mBAAmB,EAAA57B,sBAAsB85B,KAAKnqC,YAAcxgC,KAAKb,YAAYmB,EAAE,WAE/E,EAAAmsE,mBAAmB,EAAA57B,sBAAsBC,iBAAiBpwC,KACxD,QAAUV,KAAKb,YAAYmB,EAAE,gBAAkB,IACjD,EAAAmsE,mBAAmB,EAAA57B,sBAAsBC,iBAAiBtQ,YACxDxgC,KAAKb,YAAYmB,EAAE,uBAErB,EAAAmsE,mBAAmB,EAAA57B,sBAAsBo8B,UAAUvsE,KAAOV,KAAKb,YAAYmB,EAAE,iBAC7E,EAAAmsE,mBAAmB,EAAA57B,sBAAsBo8B,UAAUzsC,YACjDxgC,KAAKb,YAAYmB,EAAE,gBAErB,EAAAmsE,mBAAmB,EAAA57B,sBAAsBg8B,SAASnsE,KAAOV,KAAKb,YAAYmB,EAAE,gBAC5E,EAAAmsE,mBAAmB,EAAA57B,sBAAsBg8B,SAASrsC,YAChDxgC,KAAKb,YAAYmB,EAAE,eAGvB6gG,sBAAsBh6C,GACpB,MAAMpqC,EAAmB,GACzB,OAAmC,MAA/B/c,KAAK63K,yBAKP73K,KAAK63K,uBAAuBxhK,IAAI,EAAAw6B,sBAAsBC,kBACtD9wC,KAAKd,qBAAqBigF,eAE1BpiE,EAAU1F,KAAK,EAAAo1D,mBAAmB,EAAA57B,sBAAsBC,kBAGtD9wC,KAAK63K,uBAAuBxhK,IAAI,EAAAw6B,sBAAsBw4B,gBACxDtsD,EAAU1F,KAAK,EAAAo1D,mBAAmB,EAAA57B,sBAAsBw4B,gBAGtDrpE,KAAK63K,uBAAuBxhK,IAAI,EAAAw6B,sBAAsBg8B,UACxD9vD,EAAU1F,KAAK,EAAAo1D,mBAAmB,EAAA57B,sBAAsBg8B,UAIxD7sE,KAAK63K,uBAAuBxhK,IAAI,EAAAw6B,sBAAsB85B,MACtD3qE,KAAKd,qBAAqBigF,eAE1BpiE,EAAU1F,KAAK,EAAAo1D,mBAAmB,EAAA57B,sBAAsB85B,MAIxD3qE,KAAK63K,uBAAuBxhK,IAAI,EAAAw6B,sBAAsBo8B,WACtDjtE,KAAKd,qBAAqB+/E,iBAAiB93B,IAE3CpqC,EAAU1F,KAAK,EAAAo1D,mBAAmB,EAAA57B,sBAAsBo8B,WAGtDjtE,KAAK63K,uBAAuBxhK,IAAI,EAAAw6B,sBAAsB6f,QACxD3zC,EAAU1F,KAAK,EAAAo1D,mBAAmB,EAAA57B,sBAAsB6f,SAjCjD3zC,EAuCXklF,mBAAmBR,GACjB,GAAmC,MAA/BzhG,KAAK63K,uBACP,OAAO,KAGT,GACwC,MAAtC73K,KAAK43K,+BACL53K,KAAK63K,uBAAuBxhK,IAAIrW,KAAK43K,+BAErC,OAAO53K,KAAK43K,8BAGd,IAAIp2E,EAAsC,KACtCs2E,GAAoB,EAaxB,OAZA93K,KAAK63K,uBAAuBhnK,SAAQ,CAACknK,EAAQ1mK,KAC3C,MAAM/G,EAAY,EAAAmiE,mBAA2Bp7D,GAC7C,GAAgB,MAAZ/G,GAAoBA,EAASqtK,SAAWG,EAAkB,CAC5D,GAAIzmK,IAAS,EAAAw/B,sBAAsBo8B,WAAaw0B,EAC9C,OAGFD,EAAenwF,EACfymK,EAAmBxtK,EAASqtK,aAIzBn2E,EAGTw2E,oBAAoB3mK,GAClBrR,KAAK43K,8BAAgCvmK,EAGvC6kH,wBACEl2H,KAAK43K,8BAAgC,KAGvC//C,aAAan2H,GACX1B,KAAK63K,uBAAyBn2K,EAASk2H,oBAGzCqgD,iBACEj4K,KAAK63K,uBAAyB,KAGhC/1E,eACE,OAAO9hG,KAAK63K,0B,qbCnLhB,iBACA,WACA,WAOA,gCACE74K,YACU6B,EACA1B,EACAE,GAFA,KAAAwB,cAAAA,EACA,KAAA1B,YAAAA,EACA,KAAAE,WAAAA,EASJ8gB,aACJC,EACAsqD,EACAwtG,G,yCAEAl4K,KAAKm4K,cAAc/3J,GAEnB,MAAMvgB,EACY,MAAhB6qE,EAAuB,IAAIA,EAAkB,IAAI,EAAAmE,0BAUnD,OARIzuD,EAAa/O,OAAS,EAAAo8D,iBAAiBo2B,IACzChkG,EAAQ6tE,IAAMttD,EAAagqD,OAE3BvqE,EAAQ+H,mBAAqBswK,EACzB93J,EAAagqD,aACPpqE,KAAKa,cAAcgH,aAAauY,EAAagqD,OAAQ,MAG1DvqE,KAQHyrF,WAAWlrE,G,yCAGf,GAFApgB,KAAKm4K,cAAc/3J,GAEfA,EAAa/O,OAAS,EAAAo8D,iBAAiBo2B,IAAK,CAC9C,MAAMhkG,EAAU,IAAI,EAAAu4K,iBAAiBh4J,EAAagqD,QAClD,UACQpqE,KAAKX,WAAW85I,qBAAqBt5I,GAC3C,MAAOgD,GACP,MAAM,IAAIjB,MAAM5B,KAAKb,YAAYmB,EAAE,iCAEhC,CAKL,WAJ4BN,KAAKa,cAAc+vF,wBAC7CxwE,EAAagqD,OACb,OAGA,MAAM,IAAIxoE,MAAM5B,KAAKb,YAAYmB,EAAE,0BAGvC,OAAO,KAGHsjG,a,+CACE5jG,KAAKX,WAAW65I,2BAGhBi/B,cAAc/3J,GACpB,GAA4B,OAAxBA,MAAAA,OAAY,EAAZA,EAAcgqD,SAA0C,KAAxBhqD,EAAagqD,OAC/C,MAAIhqD,EAAa/O,OAAS,EAAAo8D,iBAAiBo2B,IACnC,IAAIjiG,MAAM5B,KAAKb,YAAYmB,EAAE,6BAE7B,IAAIsB,MAAM5B,KAAKb,YAAYmB,EAAE,0B,ubC/E3C,iBAEM48J,EAAiB,CACrB7rJ,KAAM,OACNgnK,gBAAgB,EAChBC,mBAAmB,EACnB1rF,eAAgB,SAChBC,aAAc,SACd0rF,iBAAkB,cAClBC,wBAAyB,eAG3B,kCACEx5K,YACU6B,EACAvB,EACAD,GAFA,KAAAwB,cAAAA,EACA,KAAAvB,aAAAA,EACA,KAAAD,WAAAA,EAGVymF,iBAAiBn1E,GACf,MAAqB,aAAjBA,EAAQU,KACHrR,KAAKy4K,iBAAiB9nK,GACH,eAAjBA,EAAQU,KACVrR,KAAK04K,mBAAmB/nK,GACL,cAAjBA,EAAQU,KACVrR,KAAK24K,kBAAkBhoK,GAEvB3Q,KAAK44K,aAAajoK,GAIvBioK,aAAajoK,G,yCACjB,MAAMiQ,EAAI8b,OAAOC,OAAO,GAAIugI,EAAgBvsJ,GAEpB,MAApBiQ,EAAEy3J,iBACJz3J,EAAEy3J,gBAAiB,GAEM,MAAvBz3J,EAAE03J,oBACJ13J,EAAE03J,mBAAoB,GAGxB,MAAMla,QAAkBp+J,KAAKa,cAAckxJ,aAAa,EAAG,EAAAl1B,gBAAgBjsH,OAAS,GACpF,IAAIioK,EAAO,EAAAh8C,gBAAgBuhC,GAI3B,GAHIx9I,EAAEy3J,iBACJQ,EAAOA,EAAK5rJ,OAAO,GAAGN,cAAgBksJ,EAAKjhK,MAAM,IAE/CgJ,EAAE03J,kBAAmB,CACvB,MAAMvxH,QAAY/mD,KAAKa,cAAckxJ,aAAa,EAAG,MACrD8mB,GAAc74K,KAAK84K,QAAQ/xH,EAAIzhD,WAAY,GAE7C,OAAOuzK,KAGHH,mBAAmB/nK,G,yCACvB,MAAMiQ,EAAI8b,OAAOC,OAAO,GAAIugI,EAAgBvsJ,GAEtCg8E,EAAkB/rE,EAAE+rE,gBAC1B,GAAuB,MAAnBA,GAA2BA,EAAgB/7E,OAAS,EACtD,OAAOgQ,EAAE+rE,gBAEX,MAAMosF,EAAUpsF,EAAgB5oF,QAAQ,KACxC,GAAIg1K,EAAU,GAAKA,GAAWpsF,EAAgB/7E,OAAS,EACrD,OAAO+7E,EAEe,MAApB/rE,EAAEgsE,iBACJhsE,EAAEgsE,eAAiB,UAGrB,MAAMosF,EAAiBrsF,EAAgB3lF,OAAO,EAAG+xK,GAC3CE,EAActsF,EAAgB3lF,OAAO+xK,EAAU,EAAGpsF,EAAgB/7E,QAExE,IAAIsoK,EAAmB,GAMvB,MALyB,WAArBt4J,EAAEgsE,eACJssF,QAAyBl5K,KAAKm5K,aAAa,GACb,iBAArBv4J,EAAEgsE,iBACXssF,EAAmBt4J,EAAEksE,SAEhBksF,EAAiB,IAAME,EAAmB,IAAMD,KAGnDR,iBAAiB9nK,G,yCACrB,MAAMiQ,EAAI8b,OAAOC,OAAO,GAAIugI,EAAgBvsJ,GAE5C,GAAwB,MAApBiQ,EAAEw4J,gBAA+C,KAArBx4J,EAAEw4J,eAChC,OAAO,KAEa,MAAlBx4J,EAAEisE,eACJjsE,EAAEisE,aAAe,UAGnB,IAAIwsF,EAAc,GAMlB,MALuB,WAAnBz4J,EAAEisE,aACJwsF,QAAoBr5K,KAAKm5K,aAAa,GACV,iBAAnBv4J,EAAEisE,eACXwsF,EAAcz4J,EAAEksE,SAEXusF,EAAc,IAAMz4J,EAAEw4J,kBAGzBT,kBAAkBhoK,G,yCACtB,MAAMiQ,EAAI8b,OAAOC,OAAO,GAAIugI,EAAgBvsJ,GAE5C,OAA0B,MAAtBiQ,EAAE23J,iBACG,KAGkB,gBAAvB33J,EAAE23J,iBACgC,MAAhC33J,EAAE04J,4BAAuE,KAAjC14J,EAAE04J,2BACrC,KAEFt5K,KAAKu5K,yBAAyB34J,EAAE04J,2BAA4B14J,EAAEksE,SACrC,aAAvBlsE,EAAE23J,iBAEsB,MAA/B33J,EAAE44J,2BAC8B,KAAhC54J,EAAE44J,2BAC2B,MAA7B54J,EAAE43J,yBAC2B,IAA7B53J,EAAE43J,wBAEK,KAEFx4K,KAAKy5K,sBACV74J,EAAE44J,0BACF54J,EAAE43J,wBACF53J,EAAEksE,SAE4B,iBAAvBlsE,EAAE23J,iBACuB,MAA9B33J,EAAE84J,0BAAmE,KAA/B94J,EAAE84J,yBACnC,KAEF15K,KAAK25K,0BAA0B/4J,EAAE84J,yBAA0B94J,EAAEksE,SAG/D,QAGH5yD,a,yCACJ,IAAIvpB,QAAgB3Q,KAAKV,aAAaivK,+BAOtC,OALE59J,EADa,MAAXA,EACQ+rB,OAAOC,OAAO,GAAIugI,GAElBxgI,OAAOC,OAAO,GAAIugI,EAAgBvsJ,SAExC3Q,KAAKV,aAAamvK,6BAA6B99J,GAC9CA,KAGHk9E,YAAYl9E,G,+CACV3Q,KAAKV,aAAamvK,6BAA6B99J,MAGzCwoK,aAAavoK,G,yCACzB,IAAIkc,EAAM,GACV,MAAM8sJ,EAAU,uCAChB,IAAK,IAAIxhK,EAAI,EAAGA,EAAIxH,EAAQwH,IAAK,CAC/B,MAAM6lJ,QAAwBj+J,KAAKa,cAAckxJ,aAAa,EAAG6nB,EAAQhpK,OAAS,GAClFkc,GAAO8sJ,EAAQ3sJ,OAAOgxI,GAExB,OAAOnxI,KAIDgsJ,QAAQ1qF,EAAgBvF,GAC9B,OAAOuF,EAAOx9E,QAAUi4E,EACpBuF,EACA,IAAI7/E,MAAMs6E,EAAQuF,EAAOx9E,OAAS,GAAGgJ,KAAK,KAAOw0E,EAGzCmrF,yBAAyBryI,EAAgB4lD,G,yCACrD,GAAc,MAAV5lD,GAA6B,KAAXA,EACpB,KAAM,+BAER,MAAMi5G,EAA2B,CAC/B05B,SAAU,SACV38H,MAAO,WACPuP,OAAQ,OACRqhE,QAAS,IAAIsqB,QAAQ,CACnB0hC,eAAgB5yI,EAChB,eAAgB,sBAGpB,IAAIz5B,EAAM,kDACK,MAAXq/E,IACFr/E,GAAO,aAAeq/E,GAExBqzD,EAAY1uI,KAAO24B,KAAKC,UAAU,CAChCooE,MAAkB,MAAX3lB,EAAkB,YAAcA,EAAU,KAAO,IAAM,4BAEhE,MAAMjtF,EAAU,IAAI+5C,QAAQnsC,EAAK0yI,GAC3Bz+I,QAAiB1B,KAAKX,WAAW8/I,YAAYt/I,GACnD,GAAwB,MAApB6B,EAASqV,QAAsC,MAApBrV,EAASqV,OAAgB,CAEtD,aADmBrV,EAASo4C,QAChBigI,MAEd,GAAwB,MAApBr4K,EAASqV,OACX,KAAM,+BAER,IACE,MAAM+iC,QAAap4C,EAASo4C,OAC5B,GAAmB,OAAfA,MAAAA,OAAI,EAAJA,EAAMh3C,OACR,KAAM,qBAAuBg3C,EAAKh3C,MAEpC,UAGF,KAAM,yCAGM22K,sBACZO,EACAvgI,EACAwgI,G,+CAEA,GAAgB,MAAZD,GAAiC,KAAbA,EACtB,KAAM,8BAER,MAAM75B,EAA2B,CAC/B05B,SAAU,SACV38H,MAAO,WACPuP,OAAQ,OACRqhE,QAAS,IAAIsqB,QAAQ,CACnBsG,cAAe,UAAYs7B,EAC3B,eAAgB,sBAIpB75B,EAAY1uI,KAAO24B,KAAKC,UAAU,CAChCoP,OAAQA,EACRjZ,aACkB,MAAfy5I,EAAsB,YAAcA,EAAc,KAAO,IAAM,4BAEpE,MAAMp6K,EAAU,IAAI+5C,QANR,0CAMqBumG,GAC3Bz+I,QAAiB1B,KAAKX,WAAW8/I,YAAYt/I,GACnD,GAAwB,MAApB6B,EAASqV,QAAsC,MAApBrV,EAASqV,OAAgB,CACtD,MAAM+iC,QAAap4C,EAASo4C,OAC5B,OAAiB,QAAV,EAAAA,MAAAA,OAAI,EAAJA,EAAMvzC,YAAI,eAAE5D,MAErB,GAAwB,MAApBjB,EAASqV,OACX,KAAM,8BAER,KAAM,sCAGM4iK,0BAA0BK,EAAkBltF,G,yCACxD,GAAgB,MAAZktF,GAAiC,KAAbA,EACtB,KAAM,mCAER,MAAM75B,EAA2B,CAC/B05B,SAAU,SACV38H,MAAO,WACPuP,OAAQ,OACRqhE,QAAS,IAAIsqB,QAAQ,CACnBsG,cAAe,SAAWs7B,EAC1B,eAAgB,sBAIpB75B,EAAY1uI,KAAO24B,KAAKC,UAAU,CAChC9nB,SAAS,EACT23J,cAAeptF,EACftsD,aAAyB,MAAXssD,EAAkBA,EAAU,MAAQ,IAAM,4BAE1D,MAAMjtF,EAAU,IAAI+5C,QANR,mDAMqBumG,GAC3Bz+I,QAAiB1B,KAAKX,WAAW8/I,YAAYt/I,GACnD,GAAwB,MAApB6B,EAASqV,QAAsC,MAApBrV,EAASqV,OAAgB,CACtD,MAAM+iC,QAAap4C,EAASo4C,OAC5B,OAAOA,MAAAA,OAAI,EAAJA,EAAMqgI,aAEf,GAAwB,MAApBz4K,EAASqV,OACX,KAAM,mCAER,KAAM,8C,ibCrQV,iBACA,UAEA,4BAGE/X,YACU+M,EACAF,EACAI,EACApL,EACE3B,EACFmE,EACA8I,EACAP,EACA9K,EACA2C,EACAnE,EACA+E,EACA+1K,EAAqD,KACrDC,EAA0E,MAb1E,KAAAtuK,cAAAA,EACA,KAAAF,cAAAA,EACA,KAAAI,kBAAAA,EACA,KAAApL,cAAAA,EACE,KAAA3B,qBAAAA,EACF,KAAAmE,iBAAAA,EACA,KAAA8I,cAAAA,EACA,KAAAP,aAAAA,EACA,KAAA9K,cAAAA,EACA,KAAA2C,oBAAAA,EACA,KAAAnE,aAAAA,EACA,KAAA+E,YAAAA,EACA,KAAA+1K,eAAAA,EACA,KAAAC,kBAAAA,EAhBF,KAAAvgD,QAAS,EAmBjBrvH,KAAK0qJ,GACCn1J,KAAK85H,SAIT95H,KAAK85H,QAAS,EACVq7B,GACFn1J,KAAKs6K,cAITA,aACEt6K,KAAKu6K,oBACLjlG,aAAY,IAAMt1E,KAAKu6K,qBAAqB,KAGxCA,oB,yCACJ,WAAUv6K,KAAKd,qBAAqBk/E,cAIpC,IAAK,MAAMnzE,KAAUjL,KAAKV,aAAayoH,SAASkG,WAChC,MAAVhjH,UAAyBjL,KAAKw6K,WAAWvvK,YACrCjL,KAAKy6K,qBAAqBxvK,OAKhC0C,KAAK+sK,GAAgB,EAAOzvK,G,yCAEhC,SADqBjL,KAAKV,aAAa8L,mBAAmB,CAAEH,OAAQA,IACpE,CAIA,SAAUjL,KAAKyD,oBAAoBwoD,sBAAuB,CACxD,MAAMmkC,QAAepwF,KAAKoyF,eAEvBhC,EAAO,IAA8D,aAAjDpwF,KAAKV,aAAagxF,6BAAwCF,EAAO,WAEhEpwF,KAAKqyF,8BACrBryF,KAAKmE,OAAO8G,IAIR,MAAVA,GAAkBA,WAAkBjL,KAAKV,aAAaoQ,cACxD1P,KAAKmM,cAAc+D,mBAGflQ,KAAKV,aAAa4yF,qBAAoB,EAAM,CAAEjnF,OAAQA,UACtDjL,KAAKV,aAAa2yF,oBAAmB,EAAM,CAAEhnF,OAAQA,UACrDjL,KAAKV,aAAa0vJ,uBAAuB,KAAM,CAAE/jJ,OAAQA,UAEzDjL,KAAKa,cAAc+tJ,UAAS,EAAO3jJ,SACnCjL,KAAKa,cAAc0uJ,cAAa,EAAMtkJ,SACtCjL,KAAKa,cAAcwuJ,cAAa,EAAMpkJ,SACtCjL,KAAKa,cAAcsuJ,aAAY,EAAMlkJ,SAErCjL,KAAK6L,cAAc+4I,WAAW35I,SAC9BjL,KAAK+L,cAAc64I,WAAW35I,SAC9BjL,KAAKiM,kBAAkB24I,WAAW35I,GAExCjL,KAAKqD,iBAAiBqB,KAAK,SAAU,CAAEuG,OAAQA,IAEpB,MAAvBjL,KAAKo6K,uBACDp6K,KAAKo6K,eAAenvK,QAIxB9G,OAAO8G,G,yCACmB,MAA1BjL,KAAKq6K,0BACDr6K,KAAKq6K,mBAAkB,EAAOpvK,OAIlCo4D,uBAAuB9iE,EAAiBqnB,G,+CACtC5nB,KAAKV,aAAa2vK,gBAAgB1uK,GAIxC,MAAMR,QAAcC,KAAK4L,aAAaqzI,WAChC1nB,QAAqBv3H,KAAK4L,aAAa2zI,kBACvCl2I,QAAiBrJ,KAAK4L,aAAa6zI,cACnC54G,QAAqB7mC,KAAK4L,aAAa8zI,kBAEvCi7B,QAAsB36K,KAAKV,aAAaqjE,wBAC9B,MAAXpiE,GAA+B,IAAZA,GAA6B,WAAXqnB,GAAuBA,IAAW+yJ,UAEpE36K,KAAK4L,aAAaqpK,oBAGpBj1K,KAAKV,aAAa8vK,sBAAsBxnJ,SAExC5nB,KAAK4L,aAAam0I,SAAShgJ,SAC3BC,KAAK4L,aAAa+iK,gBAAgBp3C,SAClCv3H,KAAK4L,aAAampK,YAAY1rK,SAC9BrJ,KAAK4L,aAAaopK,gBAAgBnuI,SAElC7mC,KAAKa,cAAc8uJ,eAGrBv9D,e,yCAGJ,MAAO,CAAiB,aAFGpyF,KAAKV,aAAakxF,mBAEI,aADnBxwF,KAAKV,aAAawwJ,gCAI5Cz9D,qB,yCACJ,aAAaryF,KAAKV,aAAaozJ,wBAG3BhwF,gBAAgBz3D,G,yCACpB,MAAMk3D,QAAqBniE,KAAKV,aAAaojE,gBAAgB,CAAEz3D,OAAQA,IAEvE,SACQjL,KAAKc,cAAc86D,oBAAoB,EAAA55C,WAAW+gB,oBAAqB,KAAM93B,GACnF,CACA,MAAMqX,QAAetiB,KAAKc,cAAcsa,OAAO,EAAA4G,WAAW+gB,oBAAqB93B,GAE/E,IAAI1K,EAAUunC,KAAKkqH,IAAI7vF,EAAc7/C,EAAO,GAAG/b,KAAKg1F,SAWpD,OAToB,MAAhBp5B,GAAwB5hE,EAAU,KACpCA,EAAU+hB,EAAO,GAAG/b,KAAKg1F,SAIvBp5B,IAAiB5hE,UACbP,KAAKV,aAAa2vK,gBAAgB1uK,EAAS,CAAE0K,OAAQA,KAGtD1K,EAGT,OAAO4hE,KAGHlyD,MAAMhF,G,+CACJjL,KAAKV,aAAa4yF,qBAAoB,EAAO,CAAEjnF,OAAQA,UACvDjL,KAAKV,aAAaiyF,yBAAyB,KAAM,CAAEtmF,OAAQA,UAC3DjL,KAAKV,aAAaovK,gBAAgB,KAAM,CAAEzjK,OAAQA,OAG5CuvK,WAAWvvK,G,yCACvB,MAAMgR,QAAmBjc,KAAKqE,YAAY6X,cAAcjR,GACxD,GACEgR,IAAe,EAAAE,qBAAqBE,QACpCJ,IAAe,EAAAE,qBAAqBC,UAEpC,OAAO,EAGT,MAAM+lD,QAAqBniE,KAAK0iE,gBAAgBz3D,GAChD,GAAoB,MAAhBk3D,GAAwBA,EAAe,EACzC,OAAO,EAGT,MAAMwvG,QAAmB3xK,KAAKV,aAAa4tK,cAAc,CAAEjiK,OAAQA,IACnE,GAAkB,MAAd0mK,EACF,OAAO,EAGT,MAAMiJ,EAAqC,GAAfz4G,EAE5B,QADqB,IAAIpyD,MAAOM,UAAYshK,GAAc,KACpCiJ,KAGVH,qBAAqBxvK,G,yCAEf,kBADUjL,KAAKV,aAAaqjE,sBAAsB,CAAE13D,OAAQA,WAC3CjL,KAAKmE,OAAO8G,SAAgBjL,KAAK2N,MAAK,EAAM1C,S,sbC3MnF,iBAGA,WACA,WAGA,iCAIEjM,YAAYmoD,GACVnnD,KAAK+N,YAA+B,IAAfo5C,EAAIp5C,OAAyBo5C,EAAIp5C,OAAS,KAC/D/N,KAAKgO,OACDhO,KAAK+N,aAAuC,IAAtBo5C,EAAIp5C,OAAOC,OAAyBm5C,EAAIp5C,OAAOC,OAAS,KAG9E6vC,OACJjF,EACAy/D,EACAwiE,EACAtqB,G,yCAEA,MAAMuqB,EAAsB,WAAdD,EAAyB,IAAM,IACvCE,EAAc/6K,KAAKg7K,MAAMpiI,GAGzBqiI,EAA6B,CACjCv6K,KAAM,SACN23G,KAJcr4G,KAAKg7K,MAAM3iE,GAKzBk4C,WAAYA,EACZxjI,KAAM,CAAErsB,KAAMV,KAAKk7K,qBAAqBL,KAGpCM,QAAen7K,KAAKgO,OAAOotK,UAC/B,MACAL,EACA,CAAEr6K,KAAM,WACR,EACA,CAAC,eAEH,aAAaV,KAAKgO,OAAOqtK,WAAWJ,EAAcE,EAAQL,MAGtDzqB,KACJirB,EACAjjE,EACA1+F,EACA4hK,EACAV,G,yCAEA,MAGMW,EAAyB,CAC7B96K,KAAM,OACN23G,KALcr4G,KAAKg7K,MAAM3iE,GAMzB1+F,KALc3Z,KAAKg7K,MAAMrhK,GAMzBoT,KAAM,CAAErsB,KAAMV,KAAKk7K,qBAAqBL,KAGpCM,QAAen7K,KAAKgO,OAAOotK,UAAU,MAAOE,EAAK,CAAE56K,KAAM,SAAiB,EAAO,CACrF,eAEF,aAAaV,KAAKgO,OAAOqtK,WAAWG,EAAmBL,EAAyB,EAAjBI,MAI3D1tB,WACJ4tB,EACA9hK,EACA4hK,EACAV,G,yCAEA,MAAMa,EAAwB,WAAdb,EAAyB,GAAK,GAC9C,GAAIU,EAAiB,IAAMG,EACzB,MAAM,IAAI95K,MAAM,gCAGlB,GADe,IAAIw4H,WAAWqhD,GACnB7qK,OAAS8qK,EAClB,MAAM,IAAI95K,MAAM,qBAElB,MAAM+5K,EAAU37K,KAAKg7K,MAAMrhK,GACrBiiK,EAAU,IAAIxhD,WAAWuhD,GAC/B,IAAIE,EAAmB,EACnBC,EAAY,IAAI1hD,WAAW,GAC/B,MAAM9Z,EAAIx4E,KAAK66G,KAAK44B,EAAiBG,GAC/BK,EAAM,IAAI3hD,WAAW9Z,EAAIo7D,GAC/B,IAAK,IAAItjK,EAAI,EAAGA,EAAIkoG,EAAGloG,IAAK,CAC1B,MAAM9X,EAAI,IAAI85H,WAAW0hD,EAAUlrK,OAASgrK,EAAQhrK,OAAS,GAO7D,GANAtQ,EAAE2W,IAAI6kK,GACNx7K,EAAE2W,IAAI2kK,EAASE,EAAUlrK,QACzBtQ,EAAE2W,IAAI,CAACmB,EAAI,GAAI9X,EAAEsQ,OAAS,GAC1BkrK,EAAY,IAAI1hD,iBAAiBp6H,KAAKsmH,KAAKhmH,EAAE+B,OAAQo5K,EAAKZ,IAC1DkB,EAAI9kK,IAAI6kK,EAAWD,GACnBA,GAAoBC,EAAUlrK,OAC1BirK,GAAoBN,EACtB,MAGJ,OAAOQ,EAAInkK,MAAM,EAAG2jK,GAAgBl5K,UAGhC0qB,KACJpS,EACAkgK,G,yCAEA,GAAkB,QAAdA,EAAqB,CACvB,MAAMmB,EAAmB,QAAdnB,EAAsBoB,EAAMD,GAAGE,IAAI77G,SAAW47G,EAAMD,GAAGG,KAAK97G,SACjE+7G,EAAap8K,KAAKq8K,aAAa1hK,GAErC,OADAqhK,EAAGM,OAAOF,EAAY,OACf,EAAAt6K,MAAMy6K,sBAAsBP,EAAGQ,SAASj2K,MAAMlE,OAGvD,MAAMo6K,EAAWz8K,KAAKg7K,MAAMrgK,GAC5B,aAAa3a,KAAKgO,OAAOwuK,OAAO,CAAE97K,KAAMV,KAAKk7K,qBAAqBL,IAAc4B,MAG5En2D,KACJ3rG,EACAvY,EACAy4K,G,yCAEA,MAAM6B,EAAmB,CACvBh8K,KAAM,OACNqsB,KAAM,CAAErsB,KAAMV,KAAKk7K,qBAAqBL,KAGpCM,QAAen7K,KAAKgO,OAAOotK,UAAU,MAAOh5K,EAAKs6K,GAAkB,EAAO,CAAC,SACjF,aAAa18K,KAAKgO,OAAO+oK,KAAK2F,EAAkBvB,EAAQxgK,MAMpDk4D,QAAQ76C,EAAgBikB,G,yCAC5B,MAAM0rF,QAAe3nI,KAAK+vJ,YAAY,IAChC2sB,EAAmB,CACvBh8K,KAAM,OACNqsB,KAAM,CAAErsB,KAAM,YAEVy6K,QAAen7K,KAAKgO,OAAOotK,UAAU,MAAOzzC,EAAQ+0C,GAAkB,EAAO,CAAC,SAC9EC,QAAa38K,KAAKgO,OAAO+oK,KAAK2F,EAAkBvB,EAAQnjJ,GACxD4kJ,QAAa58K,KAAKgO,OAAO+oK,KAAK2F,EAAkBvB,EAAQl/H,GAE9D,GAAI0gI,EAAK9hD,aAAe+hD,EAAK/hD,WAC3B,OAAO,EAGT,MAAMgiD,EAAO,IAAIziD,WAAWuiD,GACtBG,EAAO,IAAI1iD,WAAWwiD,GAC5B,IAAK,IAAIxkK,EAAI,EAAGA,EAAI0kK,EAAKlsK,OAAQwH,IAC/B,GAAIykK,EAAKzkK,KAAO0kK,EAAK1kK,GACnB,OAAO,EAIX,OAAO,KAGT+6I,SAASx4I,EAAevY,EAAay4K,GACnC,MAAMv0D,EAAO21D,EAAM31D,KAAKjmD,SACxBimD,EAAKrzG,MAAM4nK,EAAWz4K,GACtBkkH,EAAKg2D,OAAO3hK,GACZ,MAAM6/G,EAAQlU,EAAKk2D,SAASO,WAC5B,OAAOptK,QAAQ2wB,QAAQk6F,GAGnB44B,YAAYp7H,EAAWikB,G,yCAC3B,MAAM+gI,QAAah9K,KAAK+vJ,YAAY,IAC9Bv1B,EAAQ,IAAIyiD,YAAYD,GACxB36K,EAAS45K,EAAMiB,KAAKC,eAC1B,IAAK,IAAI/kK,EAAI,EAAGA,EAAIoiH,EAAM5pH,OAAQwH,IAChC/V,EAAO+6K,SAAS5iD,EAAMpiH,IAExB,MAAMuvH,EAAStlI,EAAO06K,WAEhBz2D,EAAO21D,EAAM31D,KAAKjmD,SACxBimD,EAAKrzG,MAAM,SAAU00H,GACrBrhB,EAAKg2D,OAAOtkJ,GACZ,MAAM2kJ,EAAOr2D,EAAKk2D,SAASO,WAE3Bz2D,EAAKrzG,MAAM,KAAM,MACjBqzG,EAAKg2D,OAAOrgI,GAIZ,OADe0gI,IAFFr2D,EAAKk2D,SAASO,cAMvBjsB,WAAWvqJ,EAAmBu9H,EAAiB1hI,G,yCACnD,MAAM+4K,QAAen7K,KAAKgO,OAAOotK,UAAU,MAAOh5K,EAAK,CAAE1B,KAAM,YAAoB,EAAO,CACxF,YAEF,aAAaV,KAAKgO,OAAO6jB,QAAQ,CAAEnxB,KAAM,UAAWojI,GAAIA,GAAMq3C,EAAQ50K,MAGxE0sJ,yBACE1sJ,EACAu9H,EACAC,EACA3hI,GAEA,MAAMqE,EAAI,IAAI,EAAA42K,kBA8Bd,OA7BgB,MAAZj7K,EAAIk7K,OACN72K,EAAEzE,OAASI,EAAIk7K,KAAKC,iBACpB92K,EAAEkhI,OAASvlI,EAAIk7K,KAAKE,kBAGN,MAAZ/2K,EAAEzE,SACJyE,EAAEzE,OAASi6K,EAAMiB,KAAKO,SAASr7K,EAAIylI,YAErCphI,EAAEF,KAAO01K,EAAMiB,KAAKO,SAASl3K,GAC7BE,EAAEq9H,GAAKm4C,EAAMiB,KAAKO,SAAS35C,GAC3Br9H,EAAEosJ,QAAUpsJ,EAAEq9H,GAAKr9H,EAAEF,KACL,MAAZE,EAAEkhI,QAAmC,MAAjBvlI,EAAI0lI,YAC1BrhI,EAAEkhI,OAASs0C,EAAMiB,KAAKO,SAASr7K,EAAI0lI,YAE1B,MAAP/D,IACFt9H,EAAEs9H,IAAMk4C,EAAMiB,KAAKO,SAAS15C,IAId,MAAZ3hI,EAAIk7K,OACNl7K,EAAIk7K,KAAO,IAEoB,MAA7Bl7K,EAAIk7K,KAAKC,mBACXn7K,EAAIk7K,KAAKC,iBAAmB92K,EAAEzE,QAEhB,MAAZyE,EAAEkhI,QAA+C,MAA7BvlI,EAAIk7K,KAAKE,mBAC/Bp7K,EAAIk7K,KAAKE,iBAAmB/2K,EAAEkhI,QAGzBlhI,EAGT4sJ,eAAeqqB,GACb,MAAMC,EAAa1B,EAAMiB,KAAKC,aAAaO,EAAWn3K,MAChDirJ,EAAWyqB,EAAM/yJ,OAAO00J,eAAe,UAAWF,EAAW17K,QACnEwvJ,EAASv+I,MAAM,CAAE6wH,GAAI45C,EAAW55C,KAChC0tB,EAAS8qB,OAAOqB,GAChBnsB,EAASqsB,SACT,MAAMlsE,EAAM6/C,EAASn2B,OAAO/1H,WAC5B,OAAOqK,QAAQ2wB,QAAQqxE,GAGnB2hD,WAAW/sJ,EAAmBu9H,EAAiB1hI,G,yCACnD,MAAM+4K,QAAen7K,KAAKgO,OAAOotK,UAAU,MAAOh5K,EAAK,CAAE1B,KAAM,YAAoB,EAAO,CACxF,YAEF,aAAaV,KAAKgO,OAAOqwC,QAAQ,CAAE39C,KAAM,UAAWojI,GAAIA,GAAMq3C,EAAQ50K,MAGlEpE,WACJoE,EACA1E,EACAg5K,G,yCAIA,MAAMiD,EAAY,CAChBp9K,KAAM,WACNqsB,KAAM,CAAErsB,KAAMV,KAAKk7K,qBAAqBL,KAEpCM,QAAen7K,KAAKgO,OAAOotK,UAAU,OAAQv5K,EAAWi8K,GAAW,EAAO,CAAC,YACjF,aAAa99K,KAAKgO,OAAO6jB,QAAQisJ,EAAW3C,EAAQ50K,MAGhDy0B,WACJz0B,EACAyvB,EACA6kJ,G,yCAIA,MAAMiD,EAAY,CAChBp9K,KAAM,WACNqsB,KAAM,CAAErsB,KAAMV,KAAKk7K,qBAAqBL,KAEpCM,QAAen7K,KAAKgO,OAAOotK,UAAU,QAASplJ,EAAY8nJ,GAAW,EAAO,CAAC,YACnF,aAAa99K,KAAKgO,OAAOqwC,QAAQy/H,EAAW3C,EAAQ50K,MAGhD+mJ,oBAAoBt3H,G,yCACxB,MAAM8nJ,EAAY,CAChBp9K,KAAM,WAENqsB,KAAM,CAAErsB,KAAMV,KAAKk7K,qBAAqB,UAEpC6C,QAAsB/9K,KAAKgO,OAAOotK,UAAU,QAASplJ,EAAY8nJ,GAAW,EAAM,CACtF,YAEIE,QAAsBh+K,KAAKgO,OAAOiwK,UAAU,MAAOF,GACnDG,EAAqB,CACzBC,IAAK,MACLt7K,EAAGm7K,EAAcn7K,EACjBy9G,EAAG09D,EAAc19D,EACjBgxC,IAAK,WACL8sB,KAAK,GAEDC,QAAqBr+K,KAAKgO,OAAOotK,UAAU,MAAO8C,EAAoBJ,GAAW,EAAM,CAC3F,YAEF,aAAa99K,KAAKgO,OAAOiwK,UAAU,OAAQI,MAGvCpuB,mBAAmBr/I,G,yCACvB,MAAMktK,EAAY,CAChBp9K,KAAM,WACN49K,cAAe1tK,EACf2tK,eAAgB,IAAInkD,WAAW,CAAC,EAAM,EAAM,IAE5CrtG,KAAM,CAAErsB,KAAMV,KAAKk7K,qBAAqB,UAEpClrB,QAAiBhwJ,KAAKgO,OAAOwwK,YAAYV,GAAW,EAAM,CAC9D,UACA,YAIF,MAAO,OAFiB99K,KAAKgO,OAAOiwK,UAAU,OAAQjuB,EAAQnuJ,iBACrC7B,KAAKgO,OAAOiwK,UAAU,QAASjuB,EAAQh6H,gBAIlE+5H,YAAYn/I,GACV,MAAM+pH,EAAM,IAAIP,WAAWxpH,GAE3B,OADA5Q,KAAK+N,OAAO0wK,gBAAgB9jD,GACrBhrH,QAAQ2wB,QAAQq6F,EAAIt4H,QAGrB24K,MAAMrgK,GACZ,IAAIwiC,EAMJ,OAJEA,EADmB,iBAAVxiC,EACH,EAAA7Y,MAAM05H,gBAAgB7gH,GAAOtY,OAE7BsY,EAEDwiC,EAGDk/H,aAAa1hK,GACnB,IAAI6/G,EAMJ,OAJEA,EADmB,iBAAV7/G,EACDshK,EAAMiB,KAAKwB,WAAW/jK,GAEtB,EAAA7Y,MAAM68K,uBAAuBhkK,GAEhC6/G,EAGD0gD,qBAAqBL,GAC3B,GAAkB,QAAdA,EACF,MAAM,IAAIj5K,MAAM,sCAElB,MAAqB,SAAdi5K,EAAuB,QAAwB,WAAdA,EAAyB,UAAY,a,sGCjWjF,e,WAIM+D,EAAuC,CAC3CC,QAAS,CAAC,qBACVC,UAAW,CAAC,oBACZ5iH,QAAS,CAAC,qBACV6iH,OAAQ,CAAC,oBACTjrJ,QAAS,CAAC,qBACVna,KAAM,CAAC,mBAGHqlK,EAA4C,CAChDH,QAAS,CAAC,2BACVC,UAAW,CAAC,6BACZ5iH,QAAS,CAAC,2BACV6iH,OAAQ,CAAC,0BACTjrJ,QAAS,CAAC,2BACVna,KAAM,CAAC,yBAGT,MAGaslK,EA6BXjgL,YAAY2pD,G,MAJH,KAAAu2H,UAAwB,UAEzB,KAAAC,iBAAkB,EAGxBn/K,KAAKm/K,gBAAiD,SAAd,QAAjB,EAAAx2H,MAAAA,OAAE,EAAFA,EAAI0E,qBAAa,eAAE+xH,UA7B5C,gBACE,MAAO,CACL,kBACA,UACA,YACA,eACA,kBACA,iBACA,oBACA,aACA,iBACA,gBACA,wBACA,aACA,wBACA,wBACA,gBACA,yBACA,6BAECr4K,OAAO63K,EAAO5+K,KAAKk/K,YACnBn4K,OAAO/G,KAAKm/K,gBAAkBH,EAAYh/K,KAAKk/K,WAAa,KAzBnE,mB,iCAGaD,GAAc,oC,iCAAdA,EAAc,2H,gKCzB3B,iB,WAKA,MAKa99J,GALb,gB,iCAKaA,I,gCAAAA,I,oCAJF,CAAC,EAAAJ,kB,6ZCNZ,cACA,e,uGCDA,iB,8CCME,qB,+BAA+B,gC,qBAK7B,qB,MDPEs+J,EAA2C,CAC/Cp6K,QAAS,WACT0U,KAAM,kBACNma,QAAS,2BACTirJ,OAAQ,aAGV,MAIaO,EAJb,cAKuB,KAAAC,WAA0B,OAEtC,KAAAr2F,cAAe,EAEd,KAAA//B,QAAU,IAAI,EAAA9uC,aAExB1W,W,MACW,QAAT,EAAA3D,KAAKs6C,YAAI,QAATt6C,KAAKs6C,KAAS+kI,EAAYr/K,KAAKu/K,aAGjC,kBACE,OAAQv/K,KAAKu/K,YACX,IAAK,SACH,MAAO,mBACT,IAAK,OACH,MAAO,iBACT,IAAK,UACH,MAAO,oBACT,IAAK,UACH,MAAO,sBAxBf,oB,iCAIaD,I,iCAAAA,EAAe,mJ,MAAA,igB,oBCf5B,4BAME,+CACA,gDACE,uCACF,oCACA,kDAAsE,wCAAS,EAAAn2H,QAAA,UAC7E,mDACF,qCACF,mCACA,mB,MAZE,sCACA,mDAA4C,0CAGK,2CAKV,6C,qJCXzC,iB,WAKA,MAKaq2H,GALb,iB,iCAKaA,I,gCAAAA,I,oCAJF,CAAC,EAAAz+J,kB,6ZCNZ,cACA,e,wHCGM0+J,EAA8C,CAClDZ,QAAS,CACP,wBACA,oBACA,oBACA,0BACA,8BACA,0BACA,+BAEFC,UAAW,CACT,oBACA,uBACA,iBACA,4BACA,gCACA,0BACA,4BACA,gCACA,2BAEFC,OAAQ,CACN,oBACA,uBACA,kBACA,yBACA,6BACA,0BACA,yBACA,6BACA,4BAIJ,MAGaW,EAHb,cA6BE,KAAAC,WAA0B,YAG1B,KAAAC,OAAQ,EA5BR,gB,MACE,MAAO,CACL,mBACA,YACA,UACA,aACA,gBACA,YACA,kBACA,iBACA,wBACA,+BACA,mCACA,yBACA,wBACA,gBACA,yBACA,4BACA,iBAEC74K,OAAO/G,KAAK4/K,MAAQ,CAAC,YAAa,YAAc,CAAC,oBACjD74K,OAAoC,QAA7B,EAAA04K,EAAaz/K,KAAK2/K,mBAAW,QAAI,KAzB/C,oB,iCAGaD,I,iCAAAA,EAAe,sG,iLCzC5B,iB,WAKA,MAKat+J,GALb,iB,iCAKaA,I,gCAAAA,I,oCAJF,CAAC,EAAAL,kB,6ZCNZ,cACA,e,wGCCA,e,yDCOI,qB,gCAAG,4C,yBALL,2BAKE,iDACA,YACF,kB,+BALE,sCAG2B,2CAC3B,8D,MDJEs+J,EAA4C,CAChDnjH,QAAS,YACTviD,KAAM,kBACNma,QAAS,2BACTirJ,OAAQ,aAGJc,EAAqD,CACzD/rJ,QAAS,UACTirJ,OAAQ,SAGV,MAIa91F,EAMXjqF,YAAoBG,GAAA,KAAAA,YAAAA,EALX,KAAAkS,KAAqB,OAGrB,KAAA63E,cAAe,EAIxBvlF,W,MACW,QAAT,EAAA3D,KAAKs6C,YAAI,QAATt6C,KAAKs6C,KAAS+kI,EAAYr/K,KAAKqR,OACb,MAAdrR,KAAKiO,OAA2C,MAA1B4xK,EAAY7/K,KAAKqR,QACzCrR,KAAKiO,MAAQjO,KAAKb,YAAYmB,EAAEu/K,EAAY7/K,KAAKqR,QAIrD,mBACE,OAAQrR,KAAKqR,MACX,IAAK,SACH,MAAO,yBACT,IAAK,OACH,MAAO,uBACT,IAAK,UACH,MAAO,0BACT,IAAK,UACH,MAAO,2BAIb,kBACE,OAAQrR,KAAKqR,MACX,IAAK,SACH,MAAO,kBACT,IAAK,OACH,MAAO,gBACT,IAAK,UACH,MAAO,mBACT,IAAK,UACH,MAAO,qBAzCf,qB,iCAIa43E,GAAgB,qC,iCAAhBA,EAAgB,0H,MAAA,ue,oBCtB7B,4BAIE,gDAQA,qCACF,kCACA,kB,MAZE,uCAKG,8C,qJCPL,iB,WAKA,MAKa5nE,GALb,kB,iCAKaA,I,gCAAAA,I,oCAJF,CAAC,EAAAN,kB,6ZCNZ,aACA,e,uGCAA,iB,oCAIc,6BACV,0CAA8B,Y,mBAChC,2B,+BADgC,wGAHlC,MAUa++J,EAIX,iBACE,OAAO9/K,KAAK+/K,cAAc//K,KAAKggL,WAGjC,kBACE,OAAOhgL,KAAKigL,WAAW36K,WAGjBy6K,cAAcviF,GACpB,OAAO9gE,OAAO6G,OAAOi6D,EAAK32B,UAAU9uC,QAAO,CAACmoJ,EAAazhF,IACnDA,aAAmB,EAAA9F,UACdunF,EAAMlgL,KAAK+/K,cAActhF,GAGZ,MAAlBA,EAAQ0Q,OACH+wE,EAGFA,EAAMxjJ,OAAOuH,KAAKw6D,EAAQ0Q,QAAQv+F,QACxC,IAjCP,oB,iCAUakvK,I,iCAAAA,EAAe,mOARd,wD,MAAe,qD,2HCH7B,e,sBAGA,IAAIK,EAAS,EAEb,MAQaC,EAKXphL,YAAoBG,GAAA,KAAAA,YAAAA,EAJL,KAAAgB,GAAK,aAAaggL,IAMjC,mB,QACE,OAAQngL,KAAK8C,MAAM,IACjB,IAAK,WACH,OAAO9C,KAAKb,YAAYmB,EAAE,iBAC5B,IAAK,QACH,OAAON,KAAKb,YAAYmB,EAAE,cAC5B,QAEE,OAAiB,QAAb,EAAAN,KAAK8C,MAAM,UAAE,eAAEuK,SACG,QAAb,EAAArN,KAAK8C,MAAM,UAAE,eAAEuK,QAGjBrN,KAAK8C,QA3BpB,sB,iCAQas9K,GAAiB,qC,iCAAjBA,EAAiB,iJ,+HANjB,qBAA8B,a,MAAA,6D,gICT3C,eASA,WAEA,UACA,WACA,WACA,S,iCCZE,6BAAgE,Y,mBAAyB,kB,MAAzB,6E,sBAGhE,4BACE,yCACF,qC,sBAEA,4BACE,yCACF,qC,qBAGA,8C,wBACA,6B,+BAAW,qC,yFDCb,MAOaC,EASXC,wBACEtgL,KAAKmzE,MAAMotG,UAAYvgL,KAAKwgL,eAAe5vK,OAAS,EACpD5Q,KAAKmzE,MAAMstG,UAAYzgL,KAAK0gL,eAAe9vK,OAAS,EAEpD5Q,KAAKwgL,eAAe3vK,SAAS66E,IAC3BA,EAAO3mF,MAAQ2mF,GAAU1rF,KAAKwgL,eAAez7K,SAG/C/E,KAAK0gL,eAAe7vK,SAAS8vK,IAC3BA,EAAOznB,KAAOynB,GAAU3gL,KAAK0gL,eAAexnB,QAG1Cl5J,KAAK8C,MACP9C,KAAKmzE,MAAMytG,gBAAkB5gL,KAAK8C,MAAM3C,GAC/BH,KAAKi2F,KACdj2F,KAAKmzE,MAAMytG,gBAAkB5gL,KAAKi2F,KAAK91F,GAEvCH,KAAKmzE,MAAMytG,qBAAkBhyK,GAjCnC,0B,iCAOayxK,I,iCAAAA,EAAqB,8D,GAAA,M,mBAClB,EAAAQ,kBAAiB,G,mBACjB,EAAAC,iBAAgB,G,mBAIb,EAAAC,mBAAkB,G,mBAClB,EAAAC,mBAAkB,I,4RAHxB,EAAAZ,kBAAiB,G,ggBC3B9B,8BACE,qCACA,kDACF,kCACA,6CACE,iDAGA,yCACA,mDAGF,mCACA,kDACE,0DACA,yDACF,4CACA,mB,MAjB8D,gCAErD,qDAGD,4DAIA,4DAIM,yDACmB,+CACG,iD,qICfpC,iBAMA,GAHA,SAGA,UAEA,WACA,UACA,W,iCASA,MAGat5E,EACX9nG,YAAoBG,GAAA,KAAAA,YAAAA,EAEpB8Y,UAAU9X,EAAYgkD,EAAauoB,EAAas+B,GAC9C,OAAOhrG,KAAKb,YAAYmB,EAAEH,EAAIgkD,EAAIuoB,EAAIs+B,IAP1C,a,iCAGalE,GAAQ,wC,yCAARA,EAAQ,UAQrB,MAuBam6E,GAvBb,oB,iCAuBaA,I,gCAAAA,I,oCAtBF,CAAC,EAAAlgK,aAAc,EAAAmgK,gB,sBAatB,EAAApB,gBAAe,UAtBNh5E,I,sBAuBT,EAAAu5E,sBAAqB,kCAFrB,EAAAD,mBAAiB,CArBRt5E,K,yHCnBb,IAAIq5E,EAAS,EAEb,MAMaW,EANb,cAOiB,KAAA3gL,GAAK,YAAYggL,KAPlC,qB,iCAMaW,I,iCAAAA,EAAgB,8H,6bCX7B,cACA,e,2ICCa,EAAAK,cAAgB,CAC3B,WACA,UACA,YACA,uBACA,YACA,kBACA,0BACA,gBACA,cAGF,MAGaJ,EAHb,cAYW,KAAAh8K,OAAQ,EARjB,gBACE,OAAO,EAAAo8K,cAAcp6K,OAAO,CAC1B,gBACA,oBACC/G,KAAK+E,MAA8B,GAAtB,sBACbuS,QAAQmD,GAAW,IAALA,KATrB,uB,iCAGasmK,I,iCAAAA,EAAkB,2E,mLCf/B,iB,WAEA,MAGaC,EAHb,cAYW,KAAA9nB,MAAO,EARhB,gBACE,OAAO,EAAAioB,cAAcp6K,OAAO,CAC1B,oBACA,gBACC/G,KAAKk5J,KAA6B,GAAtB,sBACZ5hJ,QAAQmD,GAAW,IAALA,KATrB,uB,iCAGaumK,I,iCAAAA,EAAkB,2E,seCP/B,cACA,cACA,cACA,cACA,cACA,e,yGCJA,iB,sBAGA,IAAIb,EAAS,EAEb,MAGaU,EAsDX7hL,YAAwCoiL,GAAA,KAAAA,UAAAA,EA7BzB,KAAAjhL,GAAK,aAAaggL,IAkBxB,KAAAI,WAAY,EACZ,KAAAE,WAAY,EA3CrB,gBACE,MAAO,CACL,WACA,YACA,UACA,YACA,uBACA,YACA,kBACA,aACA,eACA,4BACA,wBACA,8BACA,kBACA,4BACA,gBACA,+BACAzgL,KAAKugL,UAAY,oBAAsB,GACvCvgL,KAAKygL,UAAY,oBAAsB,GACvCzgL,KAAKqhL,SAAW,uBAAyB,2BACzC/pK,QAAQuD,GAAW,IAALA,IAOlB,kBACE,QAAO7a,KAAKqhL,eAAkBzyK,EAGhC,e,YAGE,OAAmF,QAA5E,EAAc,QAAd,EAAA5O,KAAKshL,iBAAS,QAA2B,QAAvB,EAAc,QAAd,EAAAthL,KAAKohL,iBAAS,eAAE3iF,eAAO,eAAE8iF,aAAa,EAAAx7G,WAAWC,iBAAS,SAErF,aAAarrD,GACX3a,KAAKshL,UAAqB,MAAT3mK,IAA2B,IAAVA,EAOpC,e,QACE,MAAkC,aAAb,QAAd,EAAA3a,KAAKohL,iBAAS,eAAErqK,UAAsC,QAAd,EAAA/W,KAAKohL,iBAAS,eAAEI,SAGjE,YACE,MAAMp/K,EAAMs6B,OAAOuH,KAAKjkC,KAAKohL,UAAUjyE,QAAQ,GAC/C,MAAO,CAAC/sG,EAAKpC,KAAKohL,UAAUjyE,OAAO/sG,KAvDvC,sB,iCAGay+K,GAAiB,sC,iCAAjBA,EAAiB,oI,sWCT9B,iB,WAKA,MAKaK,GALb,gB,iCAKaA,I,gCAAAA,I,oCAJF,CAAC,EAAAngK,kB,6ZCNZ,cACA,cACA,cACA,cACA,e,6HCFA,MAIa0gK,GAJb,yB,iCAIaA,I,iCAAAA,EAAoB,iMCNjC,uBAIA,mB,4HCHA,e,WAEA,MAGaC,EAwBX1iL,YAAoBinG,GAAA,KAAAA,WAAAA,EAvBE,KAAAv0F,UAAY,CAChC,WACA,UACA,UACA,gBACA,mBACA,oBACA,iBACA,mBACA,eACA,4BACA,4BACA,gBACA,wBACA,gBACA,yBACA,4BACA,oBACA,4BAEwB,KAAAiwK,KAAO,WACR,KAAAC,SAAW,KAIpCxnJ,QACEp6B,KAAKimG,WAAW54C,cAAcjzB,SA9BlC,sB,iCAGasnJ,GAAiB,oC,iCAAjBA,EAAiB,8E,mNCN9B,eACA,WAWA,GAVA,SAUA,U,GAEA,S,qBAEA,MAGaG,EAqCX7iL,YACUinG,EACA2H,EACAk0E,GAFA,KAAA77E,WAAAA,EACA,KAAA2H,iBAAAA,EACA,KAAAk0E,QAAAA,EAvCyB,KAAAC,QAAS,EACT,KAAAC,SAAW,OACpB,KAAAL,KAAO,SAKzB,KAAAM,kBAAmC,CACzCC,WAAY,iBACZC,aAAa,EACbC,cAAe,mCACfC,eAAgBriL,KAAK8hL,QAAQQ,iBAAiBC,aAC9CC,iBAAkBxiL,KAAK8hL,QACpB9iG,WACAyjG,oBAAoBziL,KAAKimG,YACzBy8E,cAAc,CACb,CACEC,QAAS,QACTC,QAAS,SACTC,SAAU,QACVC,SAAU,OAEZ,CACEH,QAAS,MACTC,QAAS,SACTC,SAAU,MACVC,SAAU,SAGbC,oBAAmB,GACnBC,wBAAuB,GACvBC,UAAS,IAWSC,aACrBljL,KAAK+hL,OAAS/hL,KAAKmjL,cAAgBnjL,KAAKojL,WAG1C7zK,cACEvP,KAAKqjL,aAGCD,WACN,GAAiB,MAAbpjL,KAAKsjL,KACP,MAAM,IAAI1hL,MAAM,gCAGlB5B,KAAK+hL,QAAS,EACd/hL,KAAKujL,WAAavjL,KAAK8hL,QAAQzhH,OAAOrgE,KAAKiiL,mBAE3C,MAAMuB,EAAiB,IAAI,EAAAC,eAAezjL,KAAKsjL,KAAKt+E,YAAahlG,KAAK4tG,kBACtE5tG,KAAKujL,WAAWG,OAAOF,GAEvBxjL,KAAK2jL,gBAAkB3jL,KAAK4jL,kBAAkB5+K,WAAWoJ,IACpC,SAAfA,MAAAA,OAAK,EAALA,EAAOhM,MAETpC,KAAKimG,WAAW54C,cAAcjzB,QAEhCp6B,KAAKmjL,iBAEPnjL,KAAK6jL,iBAAmB7jL,KAAKujL,WAC1BO,gBACA9+K,WAAWoJ,GAAyBpO,KAAKsjL,KAAKS,WAAWC,UAAU51K,KAGhE+0K,cACiB,MAAnBnjL,KAAKujL,YAAuBvjL,KAAK+hL,SAIrC/hL,KAAK+hL,QAAS,EACd/hL,KAAKqjL,cAGCO,kBACN,MAAMK,EAAcjkL,KAAKujL,WAAWU,cAC9BC,EAASlkL,KAAKujL,WACjBO,gBACAh/K,KAAK,EAAAwS,QAAQlJ,GAAuC,WAAdA,EAAMhM,KAAkC,QAAdgM,EAAMhM,OACnEosG,EAAWxuG,KAAKujL,WAAWY,gBAC3BC,EAAapkL,KAAKsjL,KAAKp6H,OAE7B,OAAO+6H,EAAYn/K,KAAK,EAAAu/K,UAAUH,EAAQ11E,EAAU41E,IAG9Cf,a,UACc,QAApB,EAAArjL,KAAK2jL,uBAAe,SAAEn0K,cACP,QAAf,EAAAxP,KAAKujL,kBAAU,SAAEe,UACI,QAArB,EAAAtkL,KAAK6jL,wBAAgB,SAAEr0K,eApG3B,4B,iCAGaqyK,GAAuB,2G,iCAAvBA,EAAuB,mF,wCAAvB,kB,4OCnBb,iBACA,WAWA,W,gECXE,+CACE,6EAAS34H,OAAA,UAIT,uCACF,oCACF,kBDMA,MAKaq7H,EALb,cAOY,KAAAr7H,OAAS,IAAI,EAAA7uC,aAKvBuH,qBACE5hB,KAAK+jL,WAAa,IAAI,EAAAS,gBAAgBxkL,KAAKykL,WAAWC,YAb1D,kB,iCAKaH,I,iCAAAA,EAAa,wD,GAAA,K,mBAGP,EAAA7C,kBAAmB,G,gHAFzB,EAAAiD,YAAW,G,0ZCpBxB,oCASA,mB,qHCTA,iBACA,W,WAQA,MAKapjK,GALb,e,iCAKaA,I,gCAAAA,I,oCAJF,CAAC,EAAAR,aAAc,EAAA6jK,mB,+FCT1B,SAAgB,eAAiB,OAAO,0BAA4B,UAAU,gBAAkB,UAAU,2BAA6B,Y,6ECAnIC,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBn2K,IAAjBo2K,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CACjD5kL,GAAI4kL,EACJlyK,QAAQ,EACRoyK,QAAS,IAUV,OANAE,EAAoBJ,GAAU5pD,KAAK+pD,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG3EI,EAAOryK,QAAS,EAGTqyK,EAAOD,QAIfH,EAAoBxtI,EAAI6tI,E76B5BpBvmL,EAAW,GACfkmL,EAAoBM,EAAI,CAACriL,EAAQsiL,EAAUvmF,EAAI64E,KAC9C,IAAG0N,EAAH,CAMA,IAAIC,EAAeC,EAAAA,EACnB,IAASntK,EAAI,EAAGA,EAAIxZ,EAASgS,OAAQwH,IAAK,CAGzC,IAFA,IAAKitK,EAAUvmF,EAAI64E,GAAY/4K,EAASwZ,GACpCotK,GAAY,EACP3lB,EAAI,EAAGA,EAAIwlB,EAASz0K,OAAQivJ,MACpB,EAAX8X,GAAsB2N,GAAgB3N,IAAaj7I,OAAOuH,KAAK6gJ,EAAoBM,GAAG1qK,OAAOtY,GAAS0iL,EAAoBM,EAAEhjL,GAAKijL,EAASxlB,MAC9IwlB,EAASrsK,OAAO6mJ,IAAK,IAErB2lB,GAAY,EACT7N,EAAW2N,IAAcA,EAAe3N,IAG7C,GAAG6N,EAAW,CACb5mL,EAASoa,OAAOZ,IAAK,GACrB,IAAIjE,EAAI2qF,SACElwF,IAANuF,IAAiBpR,EAASoR,IAGhC,OAAOpR,EAvBN40K,EAAWA,GAAY,EACvB,IAAI,IAAIv/J,EAAIxZ,EAASgS,OAAQwH,EAAI,GAAKxZ,EAASwZ,EAAI,GAAG,GAAKu/J,EAAUv/J,IAAKxZ,EAASwZ,GAAKxZ,EAASwZ,EAAI,GACrGxZ,EAASwZ,GAAK,CAACitK,EAAUvmF,EAAI64E,I86BJ/BmN,EAAoBxkE,EAAK4kE,IACxB,IAAIO,EAASP,GAAUA,EAAOQ,WAC7B,IAAOR,EAAiB,QACxB,IAAM,EAEP,OADAJ,EAAoBxyJ,EAAEmzJ,EAAQ,CAAEztJ,EAAGytJ,IAC5BA,GCLRX,EAAoBxyJ,EAAI,CAAC2yJ,EAASU,KACjC,IAAI,IAAIvjL,KAAOujL,EACXb,EAAoBlkK,EAAE+kK,EAAYvjL,KAAS0iL,EAAoBlkK,EAAEqkK,EAAS7iL,IAC5Es6B,OAAOkpJ,eAAeX,EAAS7iL,EAAK,CAAEyjL,YAAY,EAAMrvK,IAAKmvK,EAAWvjL,MCJ3E0iL,EAAoBnzJ,EAAI,WACvB,GAA0B,iBAAfm0J,WAAyB,OAAOA,WAC3C,IACC,OAAO9lL,MAAQ,IAAI+lL,SAAS,cAAb,GACd,MAAOljL,GACR,GAAsB,iBAAXqG,OAAqB,OAAOA,QALjB,GCAxB47K,EAAoBlkK,EAAI,CAACw0C,EAAK0jD,IAAUp8E,OAAOo4F,UAAU38F,eAAegjG,KAAK/lE,EAAK0jD,GCClFgsE,EAAoB3wK,EAAK8wK,IACH,oBAAXe,QAA0BA,OAAOC,aAC1CvpJ,OAAOkpJ,eAAeX,EAASe,OAAOC,YAAa,CAAEtrK,MAAO,WAE7D+hB,OAAOkpJ,eAAeX,EAAS,aAAc,CAAEtqK,OAAO,KCLvDmqK,EAAoBoB,IAAOhB,IAC1BA,EAAOiB,MAAQ,GACVjB,EAAOpnJ,WAAUonJ,EAAOpnJ,SAAW,IACjConJ,G,MCER,IAAIkB,EAAkB,CACrB,IAAK,GAaNtB,EAAoBM,EAAEvlB,EAAKwmB,GAA0C,IAA7BD,EAAgBC,GAGxD,IAAIC,EAAuB,CAACC,EAA4BhgL,KACvD,IAGIw+K,EAAUsB,GAHThB,EAAUmB,EAAaC,GAAWlgL,EAGhB6R,EAAI,EAC3B,GAAGitK,EAAS5yK,MAAMtS,GAAgC,IAAxBimL,EAAgBjmL,KAAa,CACtD,IAAI4kL,KAAYyB,EACZ1B,EAAoBlkK,EAAE4lK,EAAazB,KACrCD,EAAoBxtI,EAAEytI,GAAYyB,EAAYzB,IAGhD,GAAG0B,EAAS,IAAI1jL,EAAS0jL,EAAQ3B,GAGlC,IADGyB,GAA4BA,EAA2BhgL,GACrD6R,EAAIitK,EAASz0K,OAAQwH,IACzBiuK,EAAUhB,EAASjtK,GAChB0sK,EAAoBlkK,EAAEwlK,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOvB,EAAoBM,EAAEriL,IAG1B2jL,EAAqB5tK,KAAuC,iCAAIA,KAAuC,kCAAK,GAChH4tK,EAAmB71K,QAAQy1K,EAAqBnhJ,KAAK,KAAM,IAC3DuhJ,EAAmBrvK,KAAOivK,EAAqBnhJ,KAAK,KAAMuhJ,EAAmBrvK,KAAK8tB,KAAKuhJ,K,GC7CvF,IAAIC,EAAsB7B,EAAoBM,OAAEx2K,EAAW,CAAC,MAAM,IAAOk2K,EAAoB,SAC7F6B,EAAsB7B,EAAoBM,EAAEuB,I","sources":["webpack://@bitwarden/web-vault/webpack/runtime/chunk loaded","webpack://@bitwarden/web-vault/./src/abstractions/state.service.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-emergency.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/accept-organization.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/hint.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/lock.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/login.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/login.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-delete.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/recover-two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/register.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/register.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/remove-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/set-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/sso.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor-options.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/two-factor.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/update-temp-password.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/verify-email-token.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-email-token.component.html","webpack://@bitwarden/web-vault/./src/app/accounts/verify-recover-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/accounts/verify-recover-delete.component.html","webpack://@bitwarden/web-vault/./src/app/app.component.ts","webpack://@bitwarden/web-vault/./src/app/app.component.html","webpack://@bitwarden/web-vault/./src/app/app.module.ts","webpack://@bitwarden/web-vault/./src/app/common/base.accept.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.events.component.ts","webpack://@bitwarden/web-vault/./src/app/common/base.people.component.ts","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.ts","webpack://@bitwarden/web-vault/./src/app/components/nested-checkbox.component.html","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.ts","webpack://@bitwarden/web-vault/./src/app/components/organization-switcher.component.html","webpack://@bitwarden/web-vault/./src/app/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/./src/app/components/password-reprompt.component.html","webpack://@bitwarden/web-vault/./src/app/components/password-strength.component.ts","webpack://@bitwarden/web-vault/./src/app/components/password-strength.component.html","webpack://@bitwarden/web-vault/./src/app/components/premium-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/guards/home.guard.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/footer.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/frontend-layout.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/navbar.component.html","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/layouts/user-layout.component.html","webpack://@bitwarden/web-vault/./src/app/main.ts","webpack://@bitwarden/web-vault/./src/app/modules/loose-components.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/organizations/manage/entity-users.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/organizations/manage/entity-users.component.html","webpack://@bitwarden/web-vault/./src/app/modules/organizations/manage/organization-manage.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/organizations/users/enroll-master-password-reset.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/organizations/users/enroll-master-password-reset.component.html","webpack://@bitwarden/web-vault/./src/app/modules/organizations/users/organization-user.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/pipes/get-organization-name.pipe.ts","webpack://@bitwarden/web-vault/./src/app/modules/pipes/pipes.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/shared.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/collection-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/collection-filter.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/folder-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/folder-filter.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/link-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/link-sso.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/organization-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/organization-filter.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/organization-options.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/organization-options.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/status-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/status-filter.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/type-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/components/type-filter.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/organization-vault-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/vault-filter.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/vault-filter.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/vault-filter.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault-filter/vault-filter.service.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/individual-vault/individual-vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/individual-vault/individual-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/individual-vault/individual-vault.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/individual-vault/individual-vault.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/organization-badge/organization-badge.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/organization-badge/organization-name-badge.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/organization-badge/organization-name-badge.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/organization-vault/organization-vault-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/organization-vault/organization-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/organization-vault/organization-vault.component.html","webpack://@bitwarden/web-vault/./src/app/modules/vault/modules/organization-vault/organization-vault.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/vault.module.ts","webpack://@bitwarden/web-vault/./src/app/modules/vault/vault.service.ts","webpack://@bitwarden/web-vault/./src/app/organizations/guards/permissions.guard.ts","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/layouts/organization-layout.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-remove.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-status.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/bulk/bulk-status.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collection-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/collections.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/entity-events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/events.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/events.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/group-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/manage.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/people.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policies.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policies.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policy-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/policy-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/manage/user-groups.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/organization-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/base-policy.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/disable-send.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/master-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/password-generator.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/personal-ownership.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/require-sso.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/reset-password.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/send-options.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/single-org.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/policies/two-factor-authentication.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/services/navigation-permissions.service.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/adjust-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/adjust-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/billing-sync-api-key.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/billing-sync-api-key.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/change-plan.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/change-plan.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/delete-organization.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/download-license.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/download-license.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/image-subscription-hidden.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/image-subscription-hidden.component.svg","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-billing.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-billing.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/organization-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/accept-family-sponsorship.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/accept-family-sponsorship.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/sponsorships/families-for-enterprise-setup.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/export.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/export.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/exposed-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/exposed-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/import.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/import.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/inactive-two-factor-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/inactive-two-factor-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reused-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/tools.component.ts","webpack://@bitwarden/web-vault/./src/app/organizations/tools/tools.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/unsecured-websites-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/unsecured-websites-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/tools/weak-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/weak-passwords-report.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/ciphers.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/ciphers.component.html","webpack://@bitwarden/web-vault/./src/app/organizations/vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.html","webpack://@bitwarden/web-vault/./src/app/oss-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/oss.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/breach-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/breach-report.component.html","webpack://@bitwarden/web-vault/./src/app/reports/cipher-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/exposed-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/inactive-two-factor-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-card.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-card.component.html","webpack://@bitwarden/web-vault/./src/app/reports/report-list.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/report-list.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reports-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/reports.component.html","webpack://@bitwarden/web-vault/./src/app/reports/reused-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/unsecured-websites-report.component.ts","webpack://@bitwarden/web-vault/./src/app/reports/weak-passwords-report.component.ts","webpack://@bitwarden/web-vault/./src/app/send/access.component.ts","webpack://@bitwarden/web-vault/./src/app/send/access.component.html","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/send/add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/./src/app/send/efflux-dates.component.html","webpack://@bitwarden/web-vault/./src/app/send/send.component.ts","webpack://@bitwarden/web-vault/./src/app/send/send.component.html","webpack://@bitwarden/web-vault/./src/app/services/event.service.ts","webpack://@bitwarden/web-vault/./src/app/services/init.service.ts","webpack://@bitwarden/web-vault/./src/app/services/modal.service.ts","webpack://@bitwarden/web-vault/./src/app/services/policy-list.service.ts","webpack://@bitwarden/web-vault/./src/app/services/router.service.ts","webpack://@bitwarden/web-vault/./src/app/services/services.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/add-credit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/adjust-storage.component.html","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/api-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/billing-sync-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/billing-sync-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-kdf.component.html","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/change-password.component.html","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/create-organization.component.html","webpack://@bitwarden/web-vault/./src/app/settings/deauthorize-sessions.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/deauthorize-sessions.component.html","webpack://@bitwarden/web-vault/./src/app/settings/delete-account.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/delete-account.component.html","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/domain-rules.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-confirm.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-takeover.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access-view.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/emergency-access.component.html","webpack://@bitwarden/web-vault/./src/app/settings/emergency-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/organization-plans.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/payment-method.component.html","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/payment.component.html","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/preferences.component.html","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/premium.component.html","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/profile.component.html","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/purge-vault.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security-keys.component.html","webpack://@bitwarden/web-vault/./src/app/settings/security-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/security.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/security.component.html","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/settings.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsored-families.component.html","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/sponsoring-org-row.component.html","webpack://@bitwarden/web-vault/./src/app/settings/subscription-routing.module.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/tax-info.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-authenticator.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-base.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-duo.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-email.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-recovery.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-setup.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-verify.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-webauthn.component.html","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/two-factor-yubikey.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-key.component.html","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/update-license.component.html","webpack://@bitwarden/web-vault/./src/app/settings/user-billing-history.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-billing-history.component.html","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/user-subscription.component.html","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/vault-timeout-input.component.html","webpack://@bitwarden/web-vault/./src/app/settings/verify-email.component.ts","webpack://@bitwarden/web-vault/./src/app/settings/verify-email.component.html","webpack://@bitwarden/web-vault/./src/app/tools/export.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/generator.component.html","webpack://@bitwarden/web-vault/./src/app/tools/import.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/password-generator-history.component.html","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.ts","webpack://@bitwarden/web-vault/./src/app/tools/tools.component.html","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/add-edit-custom-fields.component.html","webpack://@bitwarden/web-vault/./src/app/vault/add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/attachments.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-actions.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-delete.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-delete.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-move.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-move.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-restore.component.html","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/bulk-share.component.html","webpack://@bitwarden/web-vault/./src/app/vault/ciphers.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/collections.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/folder-add-edit.component.html","webpack://@bitwarden/web-vault/./src/app/vault/share.component.ts","webpack://@bitwarden/web-vault/./src/app/vault/share.component.html","webpack://@bitwarden/web-vault/./src/app/wildcard-routing.module.ts","webpack://@bitwarden/web-vault/./src/models/account.ts","webpack://@bitwarden/web-vault/./src/models/globalState.ts","webpack://@bitwarden/web-vault/./src/services/broadcasterMessaging.service.ts","webpack://@bitwarden/web-vault/./src/services/htmlStorage.service.ts","webpack://@bitwarden/web-vault/./src/services/i18n.service.ts","webpack://@bitwarden/web-vault/./src/services/memoryStorage.service.ts","webpack://@bitwarden/web-vault/./src/services/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/./src/services/state.service.ts","webpack://@bitwarden/web-vault/./src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/./src/services/webPlatformUtils.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/add-edit-custom-fields.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/attachments.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/avatar.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/callout.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/captchaProtected.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/change-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/ciphers.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/collections.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/export-scope-callout.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/export-scope-callout.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/export.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/folder-add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/generator.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/hint.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/icon.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/icon.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/components/lock.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/login.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/dynamic-modal.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/modal-injector.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/modal/modal.ref.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/password-generator-history.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/password-reprompt.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/register.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/remove-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/add-edit.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/efflux-dates.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/send/send.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/set-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/settings/vault-timeout-input.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/share.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/sso.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/toastr.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/two-factor-options.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/two-factor.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/update-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/update-temp-password.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/user-verification.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/components/user-verification.component.html","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/a11y-title.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/api-action.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/autofocus.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/blur-click.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/fallback-src.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/input-verbatim.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/not-premium.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/select-copy.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-click.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/stop-prop.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/directives/true-false-value.directive.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/auth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/lock.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/guards/unauth.guard.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/jslib.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/components/collection-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/components/folder-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/components/organization-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/components/status-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/components/type-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/models/dynamic-tree-node.model.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/models/vault-filter.model.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/vault-filter.component.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/modules/vault-filter/vault-filter.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/color-password.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/credit-card-number.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/ellipsis.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/i18n.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/search.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/pipes/user-name.pipe.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/jslib-services.module.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/modal.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/services/validation.service.ts","webpack://@bitwarden/web-vault/../../libs/angular/src/validators/notAllowedValueAsync.validator.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/cryptoFunction.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/event.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/export.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/folder.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/import.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/log.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/messaging.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/organization.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/passwordReprompt.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/platformUtils.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/policy.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/storage.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/sync.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/userVerification.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/abstractions/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationStatus.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/authenticationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/cipherRepromptType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/cipherType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/clientType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/deviceType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/emergencyAccessType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/encryptionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/eventType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fieldType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/fileUploadType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/hashPurpose.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/htmlStorageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/importOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/kdfType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/keySuffixOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/linkedIdType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/logLevelType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/notificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationApiKeyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationConnectionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/organizationUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/paymentMethodType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/permissions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/planSponsorshipType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/planType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/policyType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/productType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserStatusType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/providerUserType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/secureNoteType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/sendType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/ssoEnums.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/stateVersion.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/storageLocation.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/themeType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/transactionType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/twoFactorProviderType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/uriMatchType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/enums/verificationType.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/accountFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/globalStateFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/factories/stateFactory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/ascendoCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/avastCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/avastJsonImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/aviraCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/baseImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/bitwardenCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/bitwardenJsonImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/bitwardenPasswordProtectedImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/blackBerryCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/blurCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/buttercupCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/chromeCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/clipperzHtmlImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/codebookCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/dashlaneImporters/dashlaneCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/dashlaneImporters/dashlaneJsonImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/encryptrCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/enpassCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/enpassJsonImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/firefoxCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/fsecureFskImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/gnomeJsonImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/importError.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/kasperskyTxtImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/keepass2XmlImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/keepassxCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/keeperImporters/keeperCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/lastpassCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/logMeOnceCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/meldiumCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/msecureCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/mykiCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/nordpassCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/onepasswordImporters/cipherImportContext.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/onepasswordImporters/onepassword1PuxImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/onepasswordImporters/onepasswordCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/onepasswordImporters/types/onepassword1PuxImporterTypes.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/padlockCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passkeepCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passmanJsonImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passpackCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passwordAgentCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passwordBossJsonImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passwordDragonXmlImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passwordSafeXmlImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/passwordWalletTxtImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/rememBearCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/roboformCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/safariCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/safeInCloudXmlImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/saferpassCsvImport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/secureSafeCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/splashIdCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/stickyPasswordXmlImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/truekeyCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/upmCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/yotiCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/importers/zohoVaultCsvImporter.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/captcha_iframe.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/iframe_component.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/linkedFieldOption.decorator.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/apiLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/logIn.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/passwordLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/logInStrategies/ssoLogin.strategy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/sequentialize.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/serviceUtils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/throttle.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/tldjs.noop.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/utils.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/webauthn_iframe.ts","webpack://@bitwarden/web-vault/../../libs/common/src/misc/wordlist.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/billingSyncConfigApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/cardApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/fieldApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/identityApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/loginApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/loginUriApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/permissionsApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/secureNoteApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/sendFileApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/sendTextApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/api/ssoConfigApi.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/attachmentData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/cardData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/cipherData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/collectionData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/eventData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/fieldData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/folderData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/identityData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/loginData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/loginUriData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/organizationData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/passwordHistoryData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/policyData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/providerData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/secureNoteData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/sendData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/sendFileData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/data/sendTextData.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/account.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/attachment.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/authResult.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/card.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/cipher.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/collection.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/decryptParameters.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/domainBase.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encArrayBuffer.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encString.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/encryptedObject.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/environmentUrls.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/field.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/folder.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/generatedPasswordHistory.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/globalState.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/identity.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/importResult.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/logInCredentials.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/login.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/loginUri.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/masterPasswordPolicyOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/organization.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/password.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/passwordGeneratorPolicyOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/policy.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/provider.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/resetPasswordPolicyOptions.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/secureNote.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/send.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sendAccess.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sendFile.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sendText.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/sortedCiphersCache.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/state.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/symmetricCryptoKey.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/treeNode.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/domain/windowState.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cardExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipherExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/cipherWithIdsExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collectionExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/collectionWithIdExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/eventExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/fieldExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folderExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/folderWithIdExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/identityExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/loginExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/loginUriExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/export/secureNoteExport.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/setKeyConnectorKeyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/account/verifyOTPRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/attachmentRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/billingSyncConfigRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/bitPayInvoiceRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkDeleteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkMoveRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkRestoreRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherBulkShareRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherCollectionsRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherCreateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherShareRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/cipherWithIdRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/collectionRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/deleteRecoverRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/deviceRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/deviceVerificationRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emailRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emailTokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessAcceptRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessConfirmRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessInviteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessPasswordRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/emergencyAccessUpdateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/eventRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/folderRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/folderWithIdRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/groupRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/apiTokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/passwordTokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/ssoTokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/tokenRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/identityToken/tokenRequestTwoFactor.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/importCiphersRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/importOrganizationCiphersRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/kdfRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keyConnectorUserKeyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/keysRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/kvpRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organization/organizationSponsorshipRedeemRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationApiKeyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationConnectionRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationCreateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationKeysRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationSubscriptionUpdateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationTaxInfoUpdateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUpdateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUpgradeRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserAcceptRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserBulkConfirmRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserBulkRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserConfirmRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserInviteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserResetPasswordEnrollmentRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserResetPasswordRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserUpdateGroupsRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/organizationUserUpdateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/passwordHintRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/passwordRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/paymentRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/policyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/preloginRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/provider/providerOrganizationCreateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/referenceEventRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/registerRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/secretVerificationRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/selectionReadOnlyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/sendAccessRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/sendRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/sendWithIdRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/setPasswordRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/storageRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/taxInfoUpdateRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/twoFactorEmailRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/twoFactorProviderRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/twoFactorRecoveryRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateDomainsRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateKeyRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateProfileRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTempPasswordRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorAuthenticatorRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorDuoRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorEmailRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorWebAuthnDeleteRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorWebAuthnRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/updateTwoFactorYubioOtpRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verifyBankRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verifyDeleteRecoverRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/request/verifyEmailRequest.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/apiKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachmentResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/attachmentUploadDataResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/baseResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billingHistoryResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billingPaymentResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/billingResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/breachAccountResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/cipherResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/collectionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/deviceVerificationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/domainsResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/emergencyAccessResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/errorResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/eventResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/folderResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/globalDomainResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/groupResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identityCaptchaResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identityTokenResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/identityTwoFactorResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/keyConnectorUserKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/keysResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/listResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/notificationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organization/organizationSsoResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationApiKeyInformationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationAutoEnrollStatusResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationConnectionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationKeysResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationSponsorshipSyncStatusResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationSubscriptionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationUserBulkPublicKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationUserBulkResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/organizationUserResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/passwordHistoryResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/paymentResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/planResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/policyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/preloginResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileOrganizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileProviderOrganizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileProviderResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/profileResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerOrganizationResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerUserBulkPublicKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerUserBulkResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/provider/providerUserResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/selectionReadOnlyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendAccessResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendFileDownloadDataResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendFileUploadDataResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/sendResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/ssoPreValidateResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/subscriptionResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/syncResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/taxInfoResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/taxRateResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorAuthenticatorResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorDuoResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorEmailResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorProviderResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorRescoverResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorWebAuthnResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/twoFactorYubiKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/response/userKeyResponse.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/attachmentView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/cardView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/cipherView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/collectionView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/eventView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/fieldView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/folderView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/identityView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/itemView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/loginUriView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/loginView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/passwordHistoryView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/secureNoteView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sendAccessView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sendFileView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sendTextView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/models/view/sendView.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/api.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/appId.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/audit.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/auth.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/azureFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/bitwardenFileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/broadcaster.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/cipher.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/collection.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/consoleLog.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/container.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/crypto.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/environment.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/event.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/export.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/fileUpload.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/folder.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/i18n.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/import.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/keyConnector.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/notifications.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/organization.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/passwordGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/policy.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/provider.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/search.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/send.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/settings.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/state.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/stateMigration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/sync.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/token.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/totp.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/twoFactor.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/userVerification.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/usernameGeneration.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/vaultTimeout.service.ts","webpack://@bitwarden/web-vault/../../libs/common/src/services/webCryptoFunction.service.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/badge.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/badge/index.ts","webpack://@bitwarden/web-vault/../../libs/components/src/banner/banner.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/banner/banner.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/banner/banner.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/banner/index.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/button.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/button/index.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/callout/callout.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/callout/index.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error-summary.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/error.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/form-field.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/hint.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/index.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/prefix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/form-field/suffix.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/index.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/input/input.module.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/index.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-divider.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-item.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu-trigger-for.directive.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.ts","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.component.html","webpack://@bitwarden/web-vault/../../libs/components/src/menu/menu.module.ts","webpack://@bitwarden/web-vault/./src/scss/export.module.scss","webpack://@bitwarden/web-vault/webpack/bootstrap","webpack://@bitwarden/web-vault/webpack/runtime/compat get default export","webpack://@bitwarden/web-vault/webpack/runtime/define property getters","webpack://@bitwarden/web-vault/webpack/runtime/global","webpack://@bitwarden/web-vault/webpack/runtime/hasOwnProperty shorthand","webpack://@bitwarden/web-vault/webpack/runtime/make namespace object","webpack://@bitwarden/web-vault/webpack/runtime/node module decorator","webpack://@bitwarden/web-vault/webpack/runtime/jsonp chunk loading","webpack://@bitwarden/web-vault/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import { StateService as BaseStateService } from \"jslib-common/abstractions/state.service\";\nimport { StorageOptions } from \"jslib-common/models/domain/storageOptions\";\n\nimport { Account } from \"src/models/account\";\n\nexport abstract class StateService extends BaseStateService {\n getRememberEmail: (options?: StorageOptions) => Promise;\n setRememberEmail: (value: boolean, options?: StorageOptions) => Promise;\n}\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { EmergencyAccessAcceptRequest } from \"jslib-common/models/request/emergencyAccessAcceptRequest\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-emergency\",\n templateUrl: \"accept-emergency.component.html\",\n})\nexport class AcceptEmergencyComponent extends BaseAcceptComponent {\n name: string;\n\n protected requiredParameters: string[] = [\"id\", \"name\", \"email\", \"token\"];\n protected failedShortMessage = \"emergencyInviteAcceptFailedShort\";\n protected failedMessage = \"emergencyInviteAcceptFailed\";\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n const request = new EmergencyAccessAcceptRequest();\n request.token = qParams.token;\n this.actionPromise = this.apiService.postEmergencyAccessAccept(qParams.id, request);\n await this.actionPromise;\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"emergencyInviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: Params): Promise {\n this.name = qParams.name;\n if (this.name != null) {\n // Fix URL encoding of space issue with Angular\n this.name = this.name.replace(/\\+/g, \" \");\n }\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

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

{{ \"emergencyAccess\" | i18n }}

\n
\n
\n

\n {{ name }}\n

\n

{{ \"acceptEmergencyAccess\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { OrganizationUserAcceptRequest } from \"jslib-common/models/request/organizationUserAcceptRequest\";\n\nimport { BaseAcceptComponent } from \"../common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-organization\",\n templateUrl: \"accept-organization.component.html\",\n})\nexport class AcceptOrganizationComponent extends BaseAcceptComponent {\n orgName: string;\n\n protected requiredParameters: string[] = [\"organizationId\", \"organizationUserId\", \"token\"];\n\n constructor(\n router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n route: ActivatedRoute,\n private apiService: ApiService,\n stateService: StateService,\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private logService: LogService\n ) {\n super(router, platformUtilsService, i18nService, route, stateService);\n }\n\n async authedHandler(qParams: Params): Promise {\n this.actionPromise = this.prepareAcceptRequest(qParams).then(async (request) => {\n await this.apiService.postOrganizationUserAccept(\n qParams.organizationId,\n qParams.organizationUserId,\n request\n );\n });\n\n await this.actionPromise;\n this.platformUtilService.showToast(\n \"success\",\n this.i18nService.t(\"inviteAccepted\"),\n this.i18nService.t(\"inviteAcceptedDesc\"),\n { timeout: 10000 }\n );\n\n await this.stateService.setOrganizationInvitation(null);\n this.router.navigate([\"/vault\"]);\n }\n\n async unauthedHandler(qParams: Params): Promise {\n this.orgName = qParams.organizationName;\n if (this.orgName != null) {\n // Fix URL encoding of space issue with Angular\n this.orgName = this.orgName.replace(/\\+/g, \" \");\n }\n await this.stateService.setOrganizationInvitation(qParams);\n }\n\n private async prepareAcceptRequest(qParams: Params): Promise {\n const request = new OrganizationUserAcceptRequest();\n request.token = qParams.token;\n\n if (await this.performResetPasswordAutoEnroll(qParams)) {\n const response = await this.apiService.getOrganizationKeys(qParams.organizationId);\n\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Add reset password key to accept request\n request.resetPasswordKey = encryptedKey.encryptedString;\n }\n return request;\n }\n\n private async performResetPasswordAutoEnroll(qParams: any): Promise {\n let policyList: Policy[] = null;\n try {\n const policies = await this.apiService.getPoliciesByToken(\n qParams.organizationId,\n qParams.token,\n qParams.email,\n qParams.organizationUserId\n );\n policyList = this.policyService.mapPoliciesFromToken(policies);\n } catch (e) {\n this.logService.error(e);\n }\n\n if (policyList != null) {\n const result = this.policyService.getResetPasswordPolicyOptions(\n policyList,\n qParams.organizationId\n );\n // Return true if policy enabled and auto-enroll enabled\n return result[1] && result[0].autoEnrollEnabled;\n }\n\n return false;\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

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

{{ \"joinOrganization\" | i18n }}

\n
\n
\n

\n {{ orgName }}\n {{ email }}\n

\n

{{ \"joinOrganizationDesc\" | i18n }}

\n
\n
\n \n {{ \"logIn\" | i18n }}\n \n \n {{ \"createAccount\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { HintComponent as BaseHintComponent } from \"jslib-angular/components/hint.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-hint\",\n templateUrl: \"hint.component.html\",\n})\nexport class HintComponent extends BaseHintComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n apiService: ApiService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(router, i18nService, apiService, platformUtilsService, logService);\n }\n}\n","
\n
\n
\n

{{ \"passwordHint\" | i18n }}

\n
\n
\n
\n \n \n {{ \"enterEmailToGetHint\" | i18n }}\n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, NgZone } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { LockComponent as BaseLockComponent } from \"jslib-angular/components/lock.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\n\nimport { RouterService } from \"../services/router.service\";\n\n@Component({\n selector: \"app-lock\",\n templateUrl: \"lock.component.html\",\n})\nexport class LockComponent extends BaseLockComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n cryptoService: CryptoService,\n vaultTimeoutService: VaultTimeoutService,\n environmentService: EnvironmentService,\n private routerService: RouterService,\n stateService: StateService,\n apiService: ApiService,\n logService: LogService,\n keyConnectorService: KeyConnectorService,\n ngZone: NgZone\n ) {\n super(\n router,\n i18nService,\n platformUtilsService,\n messagingService,\n cryptoService,\n vaultTimeoutService,\n environmentService,\n stateService,\n apiService,\n logService,\n keyConnectorService,\n ngZone\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.onSuccessfulSubmit = async () => {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl && previousUrl !== \"/\" && previousUrl.indexOf(\"lock\") === -1) {\n this.successRoute = previousUrl;\n }\n this.router.navigateByUrl(this.successRoute);\n };\n }\n}\n","
\n
\n
\n

\n \n

\n

{{ \"yourVaultIsLocked\" | i18n }}

\n
\n
\n
\n \n
\n \n \n \n \n
\n \n {{ \"loggedInAsEmailOn\" | i18n: email:webVaultHostname }}\n \n
\n
\n
\n \n {{ \"unlock\" | i18n }} \n \n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, NgZone } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { LoginComponent as BaseLoginComponent } from \"jslib-angular/components/login.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { PolicyData } from \"jslib-common/models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nimport { StateService } from \"../../abstractions/state.service\";\nimport { RouterService } from \"../services/router.service\";\n\n@Component({\n selector: \"app-login\",\n templateUrl: \"login.component.html\",\n})\nexport class LoginComponent extends BaseLoginComponent {\n showResetPasswordAutoEnrollWarning = false;\n enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions;\n policies: ListResponse;\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService,\n private policyService: PolicyService,\n logService: LogService,\n ngZone: NgZone,\n protected stateService: StateService,\n private messagingService: MessagingService,\n private routerService: RouterService\n ) {\n super(\n authService,\n router,\n platformUtilsService,\n i18nService,\n stateService,\n environmentService,\n passwordGenerationService,\n cryptoFunctionService,\n logService,\n ngZone\n );\n this.onSuccessfulLogin = async () => {\n this.messagingService.send(\"setFullWidth\");\n };\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.routerService.setPreviousUrl(\"/settings/premium\");\n } else if (qParams.org != null) {\n const route = this.router.createUrlTree([\"create-organization\"], {\n queryParams: { plan: qParams.org },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { token: qParams.sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n await super.ngOnInit();\n this.rememberEmail = await this.stateService.getRememberEmail();\n });\n\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n let policyList: Policy[] = null;\n try {\n this.policies = await this.apiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n policyList = this.policyService.mapPoliciesFromToken(this.policies);\n } catch (e) {\n this.logService.error(e);\n }\n\n if (policyList != null) {\n const resetPasswordPolicy = this.policyService.getResetPasswordPolicyOptions(\n policyList,\n invite.organizationId\n );\n // Set to true if policy enabled and auto-enroll enabled\n this.showResetPasswordAutoEnrollWarning =\n resetPasswordPolicy[1] && resetPasswordPolicy[0].autoEnrollEnabled;\n\n this.enforcedPasswordPolicyOptions =\n await this.policyService.getMasterPasswordPolicyOptions(policyList);\n }\n }\n }\n\n async goAfterLogIn() {\n // Check master password against policy\n if (this.enforcedPasswordPolicyOptions != null) {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n const masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n\n // If invalid, save policies and require update\n if (\n !this.policyService.evaluateMasterPassword(\n masterPasswordScore,\n this.masterPassword,\n this.enforcedPasswordPolicyOptions\n )\n ) {\n const policiesData: { [id: string]: PolicyData } = {};\n this.policies.data.map((p) => (policiesData[p.id] = new PolicyData(p)));\n await this.policyService.replace(policiesData);\n this.router.navigate([\"update-password\"]);\n return;\n }\n }\n\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n\n async submit() {\n await this.stateService.setRememberEmail(this.rememberEmail);\n if (!this.rememberEmail) {\n await this.stateService.setRememberedEmail(null);\n }\n await super.submit();\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n return userInput;\n }\n}\n","
\n
\n
\n \"Bitwarden\"\n

{{ \"loginOrCreateNewAccount\" | i18n }}

\n
\n
\n \n {{ \"resetPasswordAutoEnrollInviteWarning\" | i18n }}\n \n
\n \n \n
\n
\n \n
\n \n \n \n \n
\n \n {{ \"getMasterPasswordHint\" | i18n }}\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n \n {{ \"logIn\" | i18n }} \n \n \n \n \n {{ \"createAccount\" | i18n }}\n \n
\n \n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { DeleteRecoverRequest } from \"jslib-common/models/request/deleteRecoverRequest\";\n\n@Component({\n selector: \"app-recover-delete\",\n templateUrl: \"recover-delete.component.html\",\n})\nexport class RecoverDeleteComponent {\n email: string;\n formPromise: Promise;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new DeleteRecoverRequest();\n request.email = this.email.trim().toLowerCase();\n this.formPromise = this.apiService.postAccountRecoverDelete(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deleteRecoverEmailSent\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"deleteAccount\" | i18n }}

\n
\n
\n

{{ \"deleteRecoverDesc\" | i18n }}

\n
\n \n \n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TwoFactorRecoveryRequest } from \"jslib-common/models/request/twoFactorRecoveryRequest\";\n\n@Component({\n selector: \"app-recover-two-factor\",\n templateUrl: \"recover-two-factor.component.html\",\n})\nexport class RecoverTwoFactorComponent {\n email: string;\n masterPassword: string;\n recoveryCode: string;\n formPromise: Promise;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private cryptoService: CryptoService,\n private authService: AuthService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new TwoFactorRecoveryRequest();\n request.recoveryCode = this.recoveryCode.replace(/\\s/g, \"\").toLowerCase();\n request.email = this.email.trim().toLowerCase();\n const key = await this.authService.makePreloginKey(this.masterPassword, request.email);\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n this.formPromise = this.apiService.postTwoFactorRecover(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"twoStepRecoverDisabled\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"recoverAccountTwoStep\" | i18n }}

\n
\n
\n

\n {{ \"recoverAccountTwoStepDesc\" | i18n }}\n {{ \"learnMore\" | i18n }}\n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { RegisterComponent as BaseRegisterComponent } from \"jslib-angular/components/register.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PolicyData } from \"jslib-common/models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { ReferenceEventRequest } from \"jslib-common/models/request/referenceEventRequest\";\n\nimport { RouterService } from \"../services/router.service\";\n\n@Component({\n selector: \"app-register\",\n templateUrl: \"register.component.html\",\n})\nexport class RegisterComponent extends BaseRegisterComponent {\n showCreateOrgMessage = false;\n layout = \"\";\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n private policies: Policy[];\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n cryptoService: CryptoService,\n apiService: ApiService,\n private route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n environmentService: EnvironmentService,\n logService: LogService,\n private routerService: RouterService\n ) {\n super(\n authService,\n router,\n i18nService,\n cryptoService,\n apiService,\n stateService,\n platformUtilsService,\n passwordGenerationService,\n environmentService,\n logService\n );\n }\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n this.referenceData = new ReferenceEventRequest();\n if (qParams.email != null && qParams.email.indexOf(\"@\") > -1) {\n this.email = qParams.email;\n }\n if (qParams.premium != null) {\n this.routerService.setPreviousUrl(\"/settings/premium\");\n } else if (qParams.org != null) {\n this.showCreateOrgMessage = true;\n this.referenceData.flow = qParams.org;\n const route = this.router.createUrlTree([\"create-organization\"], {\n queryParams: { plan: qParams.org },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n if (qParams.layout != null) {\n this.layout = this.referenceData.layout = qParams.layout;\n }\n if (qParams.reference != null) {\n this.referenceData.id = qParams.reference;\n } else {\n this.referenceData.id = (\"; \" + document.cookie)\n .split(\"; reference=\")\n .pop()\n .split(\";\")\n .shift();\n }\n // Are they coming from an email for sponsoring a families organization\n if (qParams.sponsorshipToken != null) {\n // After logging in redirect them to setup the families sponsorship\n const route = this.router.createUrlTree([\"setup/families-for-enterprise\"], {\n queryParams: { plan: qParams.sponsorshipToken },\n });\n this.routerService.setPreviousUrl(route.toString());\n }\n if (this.referenceData.id === \"\") {\n this.referenceData.id = null;\n }\n });\n const invite = await this.stateService.getOrganizationInvitation();\n if (invite != null) {\n try {\n const policies = await this.apiService.getPoliciesByToken(\n invite.organizationId,\n invite.token,\n invite.email,\n invite.organizationUserId\n );\n if (policies.data != null) {\n const policiesData = policies.data.map((p) => new PolicyData(p));\n this.policies = policiesData.map((p) => new Policy(p));\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (this.policies != null) {\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(\n this.policies\n );\n }\n\n await super.ngOnInit();\n }\n\n async submit() {\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.masterPasswordScore,\n this.masterPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return;\n }\n\n await super.submit();\n }\n}\n","
\n \n \n
\n
\n
\n
\n
\n
\n \n\n
\n
\n
\n
\n \n \n

The Bitwarden Password Manager

\n

\n Trusted by millions of individuals, teams, and organizations worldwide for secure\n password storage and sharing.\n

\n

Store logins, secure notes, and more

\n

Collaborate and share securely

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

\n Millions of individuals, teams, and organizations worldwide trust Bitwarden for secure\n password storage and sharing.\n

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

\n Start Your Teams
Enterprise Free Trial Now\n

\n

\n Millions of individuals, teams, and organizations worldwide trust Bitwarden for secure\n password storage and sharing.\n

\n

Collaborate and share securely

\n

Deploy and manage quickly and easily

\n

Access anywhere on any device

\n

Create your account to get started

\n
\n\n \n
\n

Start Your Premium Account Now

\n

\n Millions of individuals, teams, and organizations worldwide trust Bitwarden for secure\n password storage and sharing.\n

\n

Store logins, secure notes, and more

\n

Secure your account with advanced two-step login

\n

Access anywhere on any device

\n

Create your account to get started

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

{{ \"createAccount\" | i18n }}

\n
\n
\n \n {{ \"createOrganizationCreatePersonalAccount\" | i18n }}\n \n
\n \n \n {{ \"emailAddressDesc\" | i18n }}\n
\n
\n \n \n {{ \"yourNameDesc\" | i18n }}\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n {{ \"masterPassDesc\" | i18n }}\n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n {{ \"submit\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \"No more excuses; start using Bitwarden today. The identity you save could be your\n own. The money definitely will be.\"\n
\n
\n
\n\n \n
\n
\n \n \n \n
\n
\n “Bitwarden boasts the backing of some of the world's best security experts and an\n attractive, easy-to-use interface”\n
\n
\n
\n \n \n \n \n \n \n \n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { RemovePasswordComponent as BaseRemovePasswordComponent } from \"jslib-angular/components/remove-password.component\";\n\n@Component({\n selector: \"app-remove-password\",\n templateUrl: \"remove-password.component.html\",\n})\nexport class RemovePasswordComponent extends BaseRemovePasswordComponent {}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

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

{{ \"removeMasterPassword\" | i18n }}

\n
\n
\n
\n

{{ \"convertOrganizationEncryptionDesc\" | i18n: organization.name }}

\n\n \n \n {{ \"removeMasterPassword\" | i18n }}\n \n \n \n {{ \"leaveOrganization\" | i18n }}\n \n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SetPasswordComponent as BaseSetPasswordComponent } from \"jslib-angular/components/set-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\n\n@Component({\n selector: \"app-set-password\",\n templateUrl: \"set-password.component.html\",\n})\nexport class SetPasswordComponent extends BaseSetPasswordComponent {\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n router: Router,\n syncService: SyncService,\n route: ActivatedRoute,\n stateService: StateService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n router,\n apiService,\n syncService,\n route,\n stateService\n );\n }\n}\n","
\n
\n
\n

{{ \"setMasterPassword\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n {{ \"ssoCompleteRegistration\" | i18n }}\n \n {{ \"resetPasswordAutoEnrollInviteWarning\" | i18n }}\n \n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n {{ \"masterPassDesc\" | i18n }}\n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"submit\" | i18n }}\n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SsoComponent as BaseSsoComponent } from \"jslib-angular/components/sso.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-sso\",\n templateUrl: \"sso.component.html\",\n})\nexport class SsoComponent extends BaseSsoComponent {\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n cryptoFunctionService: CryptoFunctionService,\n environmentService: EnvironmentService,\n passwordGenerationService: PasswordGenerationService,\n logService: LogService\n ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngOnInit() {\n super.ngOnInit();\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n } else {\n const storedIdentifier = await this.stateService.getSsoOrgIdentifier();\n if (storedIdentifier != null) {\n this.identifier = storedIdentifier;\n }\n }\n });\n }\n\n async submit() {\n await this.stateService.setSsoOrganizationIdentifier(this.identifier);\n if (this.clientId === \"browser\") {\n document.cookie = `ssoHandOffMessage=${this.i18nService.t(\"ssoHandOff\")};SameSite=strict`;\n }\n super.submit();\n }\n}\n","\n
\n
\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"ssoLogInWithOrgIdentifier\" | i18n }}

\n
\n \n \n
\n
\n
\n \n {{ \"logIn\" | i18n }} \n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent } from \"jslib-angular/components/two-factor-options.component\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\n\n@Component({\n selector: \"app-two-factor-options\",\n templateUrl: \"two-factor-options.component.html\",\n})\nexport class TwoFactorOptionsComponent extends BaseTwoFactorOptionsComponent {\n constructor(\n twoFactorService: TwoFactorService,\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService\n ) {\n super(twoFactorService, router, i18nService, platformUtilsService, window);\n }\n}\n","
\n
\n
\n
\n

{{ \"twoStepOptions\" | i18n }}

\n \n ×\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n

{{ p.name }}

\n {{ p.description }}\n
\n
\n \n {{ \"select\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n \"rc\n
\n
\n

{{ \"recoveryCodeTitle\" | i18n }}

\n {{ \"recoveryCodeDesc\" | i18n }}\n
\n
\n \n {{ \"select\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from \"jslib-angular/components/two-factor.component\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AppIdService } from \"jslib-common/abstractions/appId.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\nimport { RouterService } from \"../services/router.service\";\n\nimport { TwoFactorOptionsComponent } from \"./two-factor-options.component\";\n\n@Component({\n selector: \"app-two-factor\",\n templateUrl: \"two-factor.component.html\",\n})\nexport class TwoFactorComponent extends BaseTwoFactorComponent {\n @ViewChild(\"twoFactorOptions\", { read: ViewContainerRef, static: true })\n twoFactorOptionsModal: ViewContainerRef;\n\n constructor(\n authService: AuthService,\n router: Router,\n i18nService: I18nService,\n apiService: ApiService,\n platformUtilsService: PlatformUtilsService,\n stateService: StateService,\n environmentService: EnvironmentService,\n private modalService: ModalService,\n route: ActivatedRoute,\n logService: LogService,\n twoFactorService: TwoFactorService,\n appIdService: AppIdService,\n private routerService: RouterService\n ) {\n super(\n authService,\n router,\n i18nService,\n apiService,\n platformUtilsService,\n window,\n environmentService,\n stateService,\n route,\n logService,\n twoFactorService,\n appIdService\n );\n this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n }\n\n async anotherMethod() {\n const [modal] = await this.modalService.openViewRef(\n TwoFactorOptionsComponent,\n this.twoFactorOptionsModal,\n (comp) => {\n comp.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n modal.close();\n this.selectedProviderType = provider;\n await this.init();\n });\n comp.onRecoverSelected.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async goAfterLogIn() {\n const previousUrl = this.routerService.getPreviousUrl();\n if (previousUrl) {\n this.router.navigateByUrl(previousUrl);\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n}\n","\n
\n \n

{{ title }}

\n
\n
\n \n

\n {{ \"enterVerificationCodeApp\" | i18n }}\n

\n

\n {{ \"enterVerificationCodeEmail\" | i18n: twoFactorEmail }}\n

\n
\n \n \n \n \n {{ \"sendVerificationCodeEmailAgain\" | i18n }}\n \n \n
\n \n \n

{{ \"insertYubiKey\" | i18n }}

\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

{{ \"noTwoStepProviders\" | i18n }}

\n

{{ \"noTwoStepProviders2\" | i18n }}

\n
\n
\n
\n \n
\n
\n \n \n {{ \"continue\" | i18n }}\n \n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n \n
\n
\n
\n \n\n\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { UpdatePasswordComponent as BaseUpdatePasswordComponent } from \"jslib-angular/components/update-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\n\n@Component({\n selector: \"app-update-password\",\n templateUrl: \"update-password.component.html\",\n})\nexport class UpdatePasswordComponent extends BaseUpdatePasswordComponent {\n constructor(\n router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n apiService: ApiService,\n logService: LogService,\n stateService: StateService,\n userVerificationService: UserVerificationService\n ) {\n super(\n router,\n i18nService,\n platformUtilsService,\n passwordGenerationService,\n policyService,\n cryptoService,\n messagingService,\n apiService,\n stateService,\n userVerificationService,\n logService\n );\n }\n}\n","
\n
\n
\n

{{ \"updateMasterPassword\" | i18n }}

\n
\n
\n {{ \"masterPasswordInvalidWarning\" | i18n }} \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 \n \n
\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from \"jslib-angular/components/update-temp-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\n\n@Component({\n selector: \"app-update-temp-password\",\n templateUrl: \"update-temp-password.component.html\",\n})\nexport class UpdateTempPasswordComponent extends BaseUpdateTempPasswordComponent {\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n apiService: ApiService,\n logService: LogService,\n stateService: StateService,\n syncService: SyncService\n ) {\n super(\n i18nService,\n platformUtilsService,\n passwordGenerationService,\n policyService,\n cryptoService,\n messagingService,\n apiService,\n stateService,\n syncService,\n logService\n );\n }\n}\n","
\n
\n
\n

{{ \"updateMasterPassword\" | i18n }}

\n
\n
\n {{ \"updateMasterPasswordWarning\" | i18n }} \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
\n \n \n {{ \"masterPassHintDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"submit\" | i18n }}\n \n \n {{ \"logOut\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VerifyEmailRequest } from \"jslib-common/models/request/verifyEmailRequest\";\n\n@Component({\n selector: \"app-verify-email-token\",\n templateUrl: \"verify-email-token.component.html\",\n})\nexport class VerifyEmailTokenComponent implements OnInit {\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.userId != null && qParams.token != null) {\n try {\n await this.apiService.postAccountVerifyEmailToken(\n new VerifyEmailRequest(qParams.userId, qParams.token)\n );\n if (await this.stateService.getIsAuthenticated()) {\n await this.apiService.refreshIdentityToken();\n }\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailVerified\"));\n this.router.navigate([\"/\"]);\n return;\n } catch (e) {\n this.logService.error(e);\n }\n }\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"emailVerifiedFailed\"));\n this.router.navigate([\"/\"]);\n });\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { VerifyDeleteRecoverRequest } from \"jslib-common/models/request/verifyDeleteRecoverRequest\";\n\n@Component({\n selector: \"app-verify-recover-delete\",\n templateUrl: \"verify-recover-delete.component.html\",\n})\nexport class VerifyRecoverDeleteComponent implements OnInit {\n email: string;\n formPromise: Promise;\n\n private userId: string;\n private token: string;\n\n constructor(\n private router: Router,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private logService: LogService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.userId != null && qParams.token != null && qParams.email != null) {\n this.userId = qParams.userId;\n this.token = qParams.token;\n this.email = qParams.email;\n } else {\n this.router.navigate([\"/\"]);\n }\n });\n }\n\n async submit() {\n try {\n const request = new VerifyDeleteRecoverRequest(this.userId, this.token);\n this.formPromise = this.apiService.postAccountRecoverDeleteToken(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"accountDeleted\"),\n this.i18nService.t(\"accountDeletedDesc\")\n );\n this.router.navigate([\"/\"]);\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n

{{ \"deleteAccount\" | i18n }}

\n
\n
\n {{ \"deleteAccountWarning\" | i18n }}\n

\n {{ email }}\n

\n

{{ \"deleteRecoverConfirmDesc\" | i18n }}

\n
\n
\n \n {{ \"deleteAccount\" | i18n }}\n \n \n \n {{ \"cancel\" | i18n }}\n \n
\n
\n
\n
\n
\n
\n","import { Component, Inject, NgZone, OnDestroy, OnInit, SecurityContext } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport * as jq from \"jquery\";\nimport { IndividualConfig, ToastrService } from \"ngx-toastr\";\nimport Swal from \"sweetalert2\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { NotificationsService } from \"jslib-common/abstractions/notifications.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { SettingsService } from \"jslib-common/abstractions/settings.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\n\nimport { DisableSendPolicy } from \"./organizations/policies/disable-send.component\";\nimport { MasterPasswordPolicy } from \"./organizations/policies/master-password.component\";\nimport { PasswordGeneratorPolicy } from \"./organizations/policies/password-generator.component\";\nimport { PersonalOwnershipPolicy } from \"./organizations/policies/personal-ownership.component\";\nimport { RequireSsoPolicy } from \"./organizations/policies/require-sso.component\";\nimport { ResetPasswordPolicy } from \"./organizations/policies/reset-password.component\";\nimport { SendOptionsPolicy } from \"./organizations/policies/send-options.component\";\nimport { SingleOrgPolicy } from \"./organizations/policies/single-org.component\";\nimport { TwoFactorAuthenticationPolicy } from \"./organizations/policies/two-factor-authentication.component\";\nimport { PolicyListService } from \"./services/policy-list.service\";\nimport { RouterService } from \"./services/router.service\";\nimport { DOCUMENT } from \"@angular/common\";\n\nconst BroadcasterSubscriptionId = \"AppComponent\";\nconst IdleTimeout = 60000 * 10; // 10 minutes\n\n@Component({\n selector: \"app-root\",\n templateUrl: \"app.component.html\",\n})\nexport class AppComponent implements OnDestroy, OnInit {\n private lastActivity: number = null;\n private idleTimer: number = null;\n private isIdle = false;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private broadcasterService: BroadcasterService,\n private tokenService: TokenService,\n private folderService: FolderService,\n private settingsService: SettingsService,\n private syncService: SyncService,\n private passwordGenerationService: PasswordGenerationService,\n private cipherService: CipherService,\n private authService: AuthService,\n private router: Router,\n private toastrService: ToastrService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone,\n private vaultTimeoutService: VaultTimeoutService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private sanitizer: DomSanitizer,\n private searchService: SearchService,\n private notificationsService: NotificationsService,\n private routerService: RouterService,\n private stateService: StateService,\n private eventService: EventService,\n private policyService: PolicyService,\n protected policyListService: PolicyListService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n ngOnInit() {\n this.document.documentElement.lang = this.i18nService.locale;\n\n this.ngZone.runOutsideAngular(() => {\n window.onmousemove = () => this.recordActivity();\n window.onmousedown = () => this.recordActivity();\n window.ontouchstart = () => this.recordActivity();\n window.onclick = () => this.recordActivity();\n window.onscroll = () => this.recordActivity();\n window.onkeypress = () => this.recordActivity();\n });\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"loggedIn\":\n this.notificationsService.updateConnection(false);\n break;\n case \"loggedOut\":\n this.routerService.setPreviousUrl(null);\n this.notificationsService.updateConnection(false);\n break;\n case \"unlocked\":\n this.notificationsService.updateConnection(false);\n break;\n case \"authBlocked\":\n this.routerService.setPreviousUrl(message.url);\n this.router.navigate([\"/\"]);\n break;\n case \"logout\":\n this.logOut(!!message.expired);\n break;\n case \"lockVault\":\n await this.vaultTimeoutService.lock();\n break;\n case \"locked\":\n this.notificationsService.updateConnection(false);\n this.router.navigate([\"lock\"]);\n break;\n case \"lockedUrl\":\n this.routerService.setPreviousUrl(message.url);\n break;\n case \"syncStarted\":\n break;\n case \"syncCompleted\":\n break;\n case \"upgradeOrganization\": {\n const upgradeConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"upgradeOrganizationDesc\"),\n this.i18nService.t(\"upgradeOrganization\"),\n this.i18nService.t(\"upgradeOrganization\"),\n this.i18nService.t(\"cancel\")\n );\n if (upgradeConfirmed) {\n this.router.navigate([\n \"organizations\",\n message.organizationId,\n \"settings\",\n \"billing\",\n ]);\n }\n break;\n }\n case \"premiumRequired\": {\n const premiumConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"premiumRequiredDesc\"),\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (premiumConfirmed) {\n this.router.navigate([\"settings/premium\"]);\n }\n break;\n }\n case \"emailVerificationRequired\": {\n const emailVerificationConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"emailVerificationRequiredDesc\"),\n this.i18nService.t(\"emailVerificationRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (emailVerificationConfirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/create-bitwarden-account/\"\n );\n }\n break;\n }\n case \"showToast\":\n if (typeof message.text === \"string\" && typeof crypto.subtle === 'undefined') {\n message.title=\"This browser requires HTTPS to use the web vault\";\n message.text=\"Check the Vaultwarden wiki for details on how to enable it\";\n }\n this.showToast(message);\n break;\n case \"setFullWidth\":\n this.setFullWidth();\n break;\n case \"convertAccountToKeyConnector\":\n this.router.navigate([\"/remove-password\"]);\n break;\n default:\n break;\n }\n });\n });\n\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n const modals = Array.from(document.querySelectorAll(\".modal\"));\n for (const modal of modals) {\n (jq(modal) as any).modal(\"hide\");\n }\n\n if (document.querySelector(\".swal-modal\") != null) {\n Swal.close(undefined);\n }\n }\n });\n\n this.policyListService.addPolicies([\n new TwoFactorAuthenticationPolicy(),\n new MasterPasswordPolicy(),\n new PasswordGeneratorPolicy(),\n new SingleOrgPolicy(),\n new RequireSsoPolicy(),\n new PersonalOwnershipPolicy(),\n new DisableSendPolicy(),\n new SendOptionsPolicy(),\n new ResetPasswordPolicy(),\n ]);\n\n this.setFullWidth();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n private async logOut(expired: boolean) {\n await this.eventService.uploadEvents();\n const userId = await this.stateService.getUserId();\n await Promise.all([\n this.eventService.clearEvents(),\n this.syncService.setLastSync(new Date(0)),\n this.cryptoService.clearKeys(),\n this.settingsService.clear(userId),\n this.cipherService.clear(userId),\n this.folderService.clear(userId),\n this.collectionService.clear(userId),\n this.policyService.clear(userId),\n this.passwordGenerationService.clear(),\n this.keyConnectorService.clear(),\n ]);\n\n this.searchService.clearIndex();\n this.authService.logOut(async () => {\n if (expired) {\n this.platformUtilsService.showToast(\n \"warning\",\n this.i18nService.t(\"loggedOut\"),\n this.i18nService.t(\"loginExpired\")\n );\n }\n\n await this.stateService.clean({ userId: userId });\n Swal.close();\n this.router.navigate([\"/\"]);\n });\n }\n\n private async recordActivity() {\n const now = new Date().getTime();\n if (this.lastActivity != null && now - this.lastActivity < 250) {\n return;\n }\n\n this.lastActivity = now;\n this.stateService.setLastActive(now);\n // Idle states\n if (this.isIdle) {\n this.isIdle = false;\n this.idleStateChanged();\n }\n if (this.idleTimer != null) {\n window.clearTimeout(this.idleTimer);\n this.idleTimer = null;\n }\n this.idleTimer = window.setTimeout(() => {\n if (!this.isIdle) {\n this.isIdle = true;\n this.idleStateChanged();\n }\n }, IdleTimeout);\n }\n\n private showToast(msg: any) {\n let message = \"\";\n\n const options: Partial = {};\n\n if (typeof msg.text === \"string\") {\n message = msg.text;\n } else if (msg.text.length === 1) {\n message = msg.text[0];\n } else {\n msg.text.forEach(\n (t: string) =>\n (message += \"

\" + this.sanitizer.sanitize(SecurityContext.HTML, t) + \"

\")\n );\n options.enableHtml = true;\n }\n if (msg.options != null) {\n if (msg.options.trustedHtml === true) {\n options.enableHtml = true;\n }\n if (msg.options.timeout != null && msg.options.timeout > 0) {\n options.timeOut = msg.options.timeout;\n }\n }\n\n this.toastrService.show(message, msg.title, options, \"toast-\" + msg.type);\n }\n\n private idleStateChanged() {\n if (this.isIdle) {\n this.notificationsService.disconnectFromInactivity();\n } else {\n this.notificationsService.reconnectFromActivity();\n }\n }\n\n private async setFullWidth() {\n const enableFullWidth = await this.stateService.getEnableFullWidth();\n if (enableFullWidth) {\n document.body.classList.add(\"full-width\");\n } else {\n document.body.classList.remove(\"full-width\");\n }\n }\n}\n","\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\n\nimport { AppComponent } from \"./app.component\";\nimport { OssRoutingModule } from \"./oss-routing.module\";\nimport { OssModule } from \"./oss.module\";\nimport { ServicesModule } from \"./services/services.module\";\nimport { WildcardRoutingModule } from \"./wildcard-routing.module\";\n\n@NgModule({\n imports: [\n OssModule,\n BrowserAnimationsModule,\n FormsModule,\n ServicesModule,\n InfiniteScrollModule,\n DragDropModule,\n OssRoutingModule,\n WildcardRoutingModule, // Needs to be last to catch all non-existing routes\n ],\n declarations: [AppComponent],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Directive()\nexport abstract class BaseAcceptComponent implements OnInit {\n loading = true;\n authed = false;\n email: string;\n actionPromise: Promise;\n\n protected requiredParameters: string[] = [];\n protected failedShortMessage = \"inviteAcceptFailedShort\";\n protected failedMessage = \"inviteAcceptFailed\";\n\n constructor(\n protected router: Router,\n protected platformUtilService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService\n ) {}\n\n abstract authedHandler(qParams: Params): Promise;\n abstract unauthedHandler(qParams: Params): Promise;\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n let error = this.requiredParameters.some((e) => qParams?.[e] == null || qParams[e] === \"\");\n let errorMessage: string = null;\n if (!error) {\n this.authed = await this.stateService.getIsAuthenticated();\n\n if (this.authed) {\n try {\n await this.authedHandler(qParams);\n } catch (e) {\n error = true;\n errorMessage = e.message;\n }\n } else {\n this.email = qParams.email;\n await this.unauthedHandler(qParams);\n }\n }\n\n if (error) {\n const message =\n errorMessage != null\n ? this.i18nService.t(this.failedShortMessage, errorMessage)\n : this.i18nService.t(this.failedMessage);\n this.platformUtilService.showToast(\"error\", null, message, { timeout: 10000 });\n this.router.navigate([\"/\"]);\n }\n\n this.loading = false;\n });\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { EventView } from \"jslib-common/models/view/eventView\";\n\nimport { EventService } from \"src/app/services/event.service\";\n\n@Directive()\nexport abstract class BaseEventsComponent {\n loading = true;\n loaded = false;\n events: EventView[];\n start: string;\n end: string;\n dirtyDates = true;\n continuationToken: string;\n refreshPromise: Promise;\n exportPromise: Promise;\n morePromise: Promise;\n\n abstract readonly exportFileName: string;\n\n constructor(\n protected eventService: EventService,\n protected i18nService: I18nService,\n protected exportService: ExportService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService\n ) {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n }\n\n async exportEvents() {\n if (this.appApiPromiseUnfulfilled() || this.dirtyDates) {\n return;\n }\n\n this.loading = true;\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n try {\n this.exportPromise = this.export(dates[0], dates[1]);\n\n await this.exportPromise;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n this.exportPromise = null;\n this.loading = false;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.appApiPromiseUnfulfilled()) {\n return;\n }\n\n const dates = this.parseDates();\n if (dates == null) {\n return;\n }\n\n this.loading = true;\n let events: EventView[] = [];\n try {\n const promise = this.loadAndParseEvents(\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n const result = await promise;\n this.continuationToken = result.continuationToken;\n events = result.events;\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.dirtyDates = false;\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n\n protected abstract requestEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ): Promise>;\n protected abstract getUserName(r: EventResponse, userId: string): { name: string; email: string };\n\n protected async loadAndParseEvents(\n startDate: string,\n endDate: string,\n continuationToken: string\n ) {\n const response = await this.requestEvents(startDate, endDate, continuationToken);\n\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user = this.getUserName(r, userId);\n const userName = user != null ? user.name : this.i18nService.t(\"unknown\");\n\n return new EventView({\n message: eventInfo.message,\n humanReadableMessage: eventInfo.humanReadableMessage,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: r.installationId != null ? `Installation: ${r.installationId}` : userName,\n userEmail: user != null ? user.email : \"\",\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n installationId: r.installationId,\n });\n })\n );\n return { continuationToken: response.continuationToken, events: events };\n }\n\n protected parseDates() {\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return null;\n }\n return dates;\n }\n\n protected appApiPromiseUnfulfilled() {\n return this.refreshPromise != null || this.morePromise != null || this.exportPromise != null;\n }\n\n private async export(start: string, end: string) {\n let continuationToken = this.continuationToken;\n let events = [].concat(this.events);\n\n while (continuationToken != null) {\n const result = await this.loadAndParseEvents(start, end, continuationToken);\n continuationToken = result.continuationToken;\n events = events.concat(result.events);\n }\n\n const data = await this.exportService.getEventExport(events);\n const fileName = this.exportService.getFileName(this.exportFileName, \"csv\");\n this.platformUtilsService.saveFile(window, data, { type: \"text/plain\" }, fileName);\n }\n}\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SearchPipe } from \"jslib-angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ValidationService } from \"jslib-angular/services/validation.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { ProviderUserStatusType } from \"jslib-common/enums/providerUserStatusType\";\nimport { ProviderUserType } from \"jslib-common/enums/providerUserType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { OrganizationUserUserDetailsResponse } from \"jslib-common/models/response/organizationUserResponse\";\nimport { ProviderUserUserDetailsResponse } from \"jslib-common/models/response/provider/providerUserResponse\";\n\nimport { UserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\n\ntype StatusType = OrganizationUserStatusType | ProviderUserStatusType;\n\nconst MaxCheckedCount = 500;\n\n@Directive()\nexport abstract class BasePeopleComponent<\n UserType extends ProviderUserUserDetailsResponse | OrganizationUserUserDetailsResponse\n> {\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n\n get allCount() {\n return this.allUsers != null ? this.allUsers.length : 0;\n }\n\n get invitedCount() {\n return this.statusMap.has(this.userStatusType.Invited)\n ? this.statusMap.get(this.userStatusType.Invited).length\n : 0;\n }\n\n get acceptedCount() {\n return this.statusMap.has(this.userStatusType.Accepted)\n ? this.statusMap.get(this.userStatusType.Accepted).length\n : 0;\n }\n\n get confirmedCount() {\n return this.statusMap.has(this.userStatusType.Confirmed)\n ? this.statusMap.get(this.userStatusType.Confirmed).length\n : 0;\n }\n\n get showConfirmUsers(): boolean {\n return (\n this.allUsers != null &&\n this.statusMap != null &&\n this.allUsers.length > 1 &&\n this.confirmedCount > 0 &&\n this.confirmedCount < 3 &&\n this.acceptedCount > 0\n );\n }\n\n get showBulkConfirmUsers(): boolean {\n return this.acceptedCount > 0;\n }\n\n abstract userType: typeof OrganizationUserType | typeof ProviderUserType;\n abstract userStatusType: typeof OrganizationUserStatusType | typeof ProviderUserStatusType;\n\n loading = true;\n statusMap = new Map();\n status: StatusType;\n users: UserType[] = [];\n pagedUsers: UserType[] = [];\n searchText: string;\n actionPromise: Promise;\n\n protected allUsers: UserType[] = [];\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedUsersCount = 0;\n\n constructor(\n protected apiService: ApiService,\n private searchService: SearchService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected cryptoService: CryptoService,\n protected validationService: ValidationService,\n protected modalService: ModalService,\n private logService: LogService,\n private searchPipe: SearchPipe,\n protected userNamePipe: UserNamePipe,\n protected stateService: StateService\n ) {}\n\n abstract edit(user: UserType): void;\n abstract getUsers(): Promise>;\n abstract deleteUser(id: string): Promise;\n abstract reinviteUser(id: string): Promise;\n abstract confirmUser(user: UserType, publicKey: Uint8Array): Promise;\n\n async load() {\n const response = await this.getUsers();\n this.statusMap.clear();\n for (const status of Utils.iterateEnum(this.userStatusType)) {\n this.statusMap.set(status, []);\n }\n\n this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];\n this.allUsers.sort(Utils.getSortFunction(this.i18nService, \"email\"));\n this.allUsers.forEach((u) => {\n if (!this.statusMap.has(u.status)) {\n this.statusMap.set(u.status, [u]);\n } else {\n this.statusMap.get(u.status).push(u);\n }\n });\n this.filter(this.status);\n this.loading = false;\n }\n\n filter(status: StatusType) {\n this.status = status;\n if (this.status != null) {\n this.users = this.statusMap.get(this.status);\n } else {\n this.users = this.allUsers;\n }\n // Reset checkbox selecton\n this.selectAll(false);\n this.resetPaging();\n }\n\n loadMore() {\n if (!this.users || this.users.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedUsers.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) {\n pagedSize = this.pagedUsersCount;\n }\n if (this.users.length > pagedLength) {\n this.pagedUsers = this.pagedUsers.concat(\n this.users.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedUsersCount = this.pagedUsers.length;\n this.didScroll = this.pagedUsers.length > this.pageSize;\n }\n\n checkUser(user: OrganizationUserUserDetailsResponse, select?: boolean) {\n (user as any).checked = select == null ? !(user as any).checked : select;\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n\n const filteredUsers = this.searchPipe.transform(\n this.users,\n this.searchText,\n \"name\",\n \"email\",\n \"id\"\n );\n\n const selectCount =\n select && filteredUsers.length > MaxCheckedCount ? MaxCheckedCount : filteredUsers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkUser(filteredUsers[i], select);\n }\n }\n\n async resetPaging() {\n this.pagedUsers = [];\n this.loadMore();\n }\n\n invite() {\n this.edit(null);\n }\n\n async remove(user: UserType) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.deleteWarningMessage(user),\n this.userNamePipe.transform(user),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n this.actionPromise = this.deleteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.userNamePipe.transform(user))\n );\n this.removeUser(user);\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async reinvite(user: UserType) {\n if (this.actionPromise != null) {\n return;\n }\n\n this.actionPromise = this.reinviteUser(user.id);\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenReinvited\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async confirm(user: UserType) {\n function updateUser(self: BasePeopleComponent) {\n user.status = self.userStatusType.Confirmed;\n const mapIndex = self.statusMap.get(self.userStatusType.Accepted).indexOf(user);\n if (mapIndex > -1) {\n self.statusMap.get(self.userStatusType.Accepted).splice(mapIndex, 1);\n self.statusMap.get(self.userStatusType.Confirmed).push(user);\n }\n }\n\n const confirmUser = async (publicKey: Uint8Array) => {\n try {\n this.actionPromise = this.confirmUser(user, publicKey);\n await this.actionPromise;\n updateUser(this);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(user))\n );\n } catch (e) {\n this.validationService.showError(e);\n throw e;\n } finally {\n this.actionPromise = null;\n }\n };\n\n if (this.actionPromise != null) {\n return;\n }\n\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const autoConfirm = await this.stateService.getAutoConfirmFingerPrints();\n if (autoConfirm == null || !autoConfirm) {\n const [modal] = await this.modalService.openViewRef(\n UserConfirmComponent,\n this.confirmModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.userId = user != null ? user.userId : null;\n comp.publicKey = publicKey;\n comp.onConfirmedUser.subscribe(async () => {\n try {\n comp.formPromise = confirmUser(publicKey);\n await comp.formPromise;\n modal.close();\n } catch (e) {\n this.logService.error(e);\n }\n });\n }\n );\n return;\n }\n\n try {\n const fingerprint = await this.cryptoService.getFingerprint(user.userId, publicKey.buffer);\n this.logService.info(`User's fingerprint: ${fingerprint.join(\"-\")}`);\n } catch (e) {\n this.logService.error(e);\n }\n await confirmUser(publicKey);\n } catch (e) {\n this.logService.error(`Handled exception: ${e}`);\n }\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.users && this.users.length > this.pageSize;\n }\n\n protected deleteWarningMessage(user: UserType): string {\n return this.i18nService.t(\"removeUserConfirmation\");\n }\n\n protected getCheckedUsers() {\n return this.users.filter((u) => (u as any).checked);\n }\n\n protected removeUser(user: UserType) {\n let index = this.users.indexOf(user);\n if (index > -1) {\n this.users.splice(index, 1);\n this.resetPaging();\n }\n if (this.statusMap.has(user.status)) {\n index = this.statusMap.get(user.status).indexOf(user);\n if (index > -1) {\n this.statusMap.get(user.status).splice(index, 1);\n }\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"app-nested-checkbox\",\n templateUrl: \"nested-checkbox.component.html\",\n})\nexport class NestedCheckboxComponent {\n @Input() parentId: string;\n @Input() checkboxes: { id: string; get: () => boolean; set: (v: boolean) => void }[];\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n get parentIndeterminate() {\n return !this.parentChecked && this.checkboxes.some((c) => c.get());\n }\n\n get parentChecked() {\n return this.checkboxes.every((c) => c.get());\n }\n\n set parentChecked(value: boolean) {\n this.checkboxes.forEach((c) => {\n c.set(value);\n });\n }\n\n pascalize(s: string) {\n return Utils.camelToPascalCase(s);\n }\n}\n","
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nimport { NavigationPermissionsService } from \"../organizations/services/navigation-permissions.service\";\n\n@Component({\n selector: \"app-organization-switcher\",\n templateUrl: \"organization-switcher.component.html\",\n})\nexport class OrganizationSwitcherComponent implements OnInit {\n constructor(private organizationService: OrganizationService, private i18nService: I18nService) {}\n\n @Input() activeOrganization: Organization = null;\n organizations: Organization[] = [];\n\n loaded = false;\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n const orgs = await this.organizationService.getAll();\n this.organizations = orgs\n .filter((org) => NavigationPermissionsService.canAccessAdmin(org))\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n this.loaded = true;\n }\n}\n","
\n \n \n
\n
\n {{ activeOrganization.name }}\n {{ \"organization\" | i18n }}\n
\n
\n \n
\n
\n \n
\n \n
\n \n {{ \"organizationIsDisabled\" | i18n }}\n
\n
\n \n
\n \n {{ \"accessingUsingProvider\" | i18n: activeOrganization.providerName }}\n
\n
\n \n\n \n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { PasswordRepromptComponent as BasePasswordRepromptComponent } from \"jslib-angular/components/password-reprompt.component\";\n\n@Component({\n templateUrl: \"password-reprompt.component.html\",\n})\nexport class PasswordRepromptComponent extends BasePasswordRepromptComponent {}\n","
\n
\n
\n
\n

\n {{ \"passwordConfirmation\" | i18n }}\n

\n \n
\n
\n {{ \"passwordConfirmationDesc\" | i18n }}\n\n
\n \n
\n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Component({\n selector: \"app-password-strength\",\n templateUrl: \"password-strength.component.html\",\n})\nexport class PasswordStrengthComponent implements OnChanges {\n @Input() score?: number;\n @Input() showText = false;\n\n scoreWidth = 0;\n color = \"bg-danger\";\n text: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnChanges(): void {\n this.scoreWidth = this.score == null ? 0 : (this.score + 1) * 20;\n switch (this.score) {\n case 4:\n this.color = \"bg-success\";\n this.text = this.i18nService.t(\"strong\");\n break;\n case 3:\n this.color = \"bg-primary\";\n this.text = this.i18nService.t(\"good\");\n break;\n case 2:\n this.color = \"bg-warning\";\n this.text = this.i18nService.t(\"weak\");\n break;\n default:\n this.color = \"bg-danger\";\n this.text = this.score != null ? this.i18nService.t(\"weak\") : null;\n break;\n }\n }\n}\n","
\n \n \n {{ text }}\n \n
\n\n","import { Component } from \"@angular/core\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\n\n@Component({\n selector: \"app-premium-badge\",\n template: `\n \n `,\n})\nexport class PremiumBadgeComponent {\n constructor(private messagingService: MessagingService) {}\n\n premiumRequired() {\n this.messagingService.send(\"premiumRequired\");\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"jslib-common/enums/authenticationStatus\";\n\n@Injectable()\nexport class HomeGuard implements CanActivate {\n constructor(private router: Router, private authService: AuthService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return this.router.createUrlTree([\"/login\"], { queryParams: route.queryParams });\n }\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"/lock\"], { queryParams: route.queryParams });\n }\n return this.router.createUrlTree([\"/vault\"], { queryParams: route.queryParams });\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-footer\",\n templateUrl: \"footer.component.html\",\n})\nexport class FooterComponent implements OnInit {\n version: string;\n year = \"2015\";\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n }\n}\n","
\n
\n
© {{ year }} Bitwarden Inc. (Powered by Vaultwarden)
\n
\n
\n {{ \"versionNumber\" | i18n: version }}\n
\n
\n
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-frontend-layout\",\n templateUrl: \"frontend-layout.component.html\",\n})\nexport class FrontendLayoutComponent implements OnInit, OnDestroy {\n version: string;\n year = \"2015\";\n\n constructor(private platformUtilsService: PlatformUtilsService) {}\n\n async ngOnInit() {\n this.year = new Date().getFullYear().toString();\n this.version = await this.platformUtilsService.getApplicationVersion();\n document.body.classList.add(\"layout_frontend\");\n }\n\n ngOnDestroy() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n
\n © {{ year }} Bitwarden Inc. (Powered by Vaultwarden)
\n {{ \"versionNumber\" | i18n: version }}\n
\n","import { Component, NgZone, OnInit } from \"@angular/core\";\n\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { Provider } from \"jslib-common/models/domain/provider\";\n\nimport { NavigationPermissionsService as OrgNavigationPermissionsService } from \"../organizations/services/navigation-permissions.service\";\n\n@Component({\n selector: \"app-navbar\",\n templateUrl: \"navbar.component.html\",\n})\nexport class NavbarComponent implements OnInit {\n selfHosted = false;\n name: string;\n email: string;\n providers: Provider[] = [];\n organizations: Organization[] = [];\n\n constructor(\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private providerService: ProviderService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private i18nService: I18nService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone\n ) {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.name = await this.tokenService.getName();\n this.email = await this.tokenService.getEmail();\n if (this.name == null || this.name.trim() === \"\") {\n this.name = this.email;\n }\n\n // Ensure providers and organizations are loaded\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n this.providers = await this.providerService.getAll();\n\n this.organizations = await this.buildOrganizations();\n\n this.broadcasterService.subscribe(this.constructor.name, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"organizationCreated\":\n if (this.organizations.length < 1) {\n this.organizations = await this.buildOrganizations();\n }\n break;\n }\n });\n });\n }\n\n async buildOrganizations() {\n const allOrgs = await this.organizationService.getAll();\n return allOrgs\n .filter((org) => OrgNavigationPermissionsService.canAccessAdmin(org))\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n lock() {\n this.messagingService.send(\"lockVault\");\n }\n\n logOut() {\n this.messagingService.send(\"logout\");\n }\n}\n","
\n","import { Component, OnInit } from \"@angular/core\";\n\n@Component({\n selector: \"app-user-layout\",\n templateUrl: \"user-layout.component.html\",\n})\nexport class UserLayoutComponent implements OnInit {\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n }\n}\n","\n\n\n","import { enableProdMode } from \"@angular/core\";\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\n\nimport \"bootstrap\";\nimport \"jquery\";\nimport \"popper.js\";\n\nrequire(\"../scss/styles.scss\");\nrequire(\"../scss/tailwind.css\");\n\nimport { AppModule } from \"./app.module\";\n\nif (process.env.NODE_ENV === \"production\") {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\n","import { NgModule } from \"@angular/core\";\n\nimport { UserVerificationComponent } from \"jslib-angular/components/user-verification.component\";\n\nimport { AcceptEmergencyComponent } from \"../accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"../accounts/accept-organization.component\";\nimport { HintComponent } from \"../accounts/hint.component\";\nimport { LockComponent } from \"../accounts/lock.component\";\nimport { LoginComponent } from \"../accounts/login.component\";\nimport { RecoverDeleteComponent } from \"../accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"../accounts/recover-two-factor.component\";\nimport { RegisterComponent } from \"../accounts/register.component\";\nimport { RemovePasswordComponent } from \"../accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"../accounts/set-password.component\";\nimport { SsoComponent } from \"../accounts/sso.component\";\nimport { TwoFactorOptionsComponent } from \"../accounts/two-factor-options.component\";\nimport { TwoFactorComponent } from \"../accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"../accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"../accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"../accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"../accounts/verify-recover-delete.component\";\nimport { NestedCheckboxComponent } from \"../components/nested-checkbox.component\";\nimport { OrganizationSwitcherComponent } from \"../components/organization-switcher.component\";\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\nimport { PasswordStrengthComponent } from \"../components/password-strength.component\";\nimport { PremiumBadgeComponent } from \"../components/premium-badge.component\";\nimport { FooterComponent } from \"../layouts/footer.component\";\nimport { FrontendLayoutComponent } from \"../layouts/frontend-layout.component\";\nimport { NavbarComponent } from \"../layouts/navbar.component\";\nimport { UserLayoutComponent } from \"../layouts/user-layout.component\";\nimport { OrganizationLayoutComponent } from \"../organizations/layouts/organization-layout.component\";\nimport { BulkConfirmComponent as OrgBulkConfirmComponent } from \"../organizations/manage/bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent as OrgBulkRemoveComponent } from \"../organizations/manage/bulk/bulk-remove.component\";\nimport { BulkStatusComponent as OrgBulkStatusComponent } from \"../organizations/manage/bulk/bulk-status.component\";\nimport { CollectionAddEditComponent as OrgCollectionAddEditComponent } from \"../organizations/manage/collection-add-edit.component\";\nimport { CollectionsComponent as OrgManageCollectionsComponent } from \"../organizations/manage/collections.component\";\nimport { EntityEventsComponent as OrgEntityEventsComponent } from \"../organizations/manage/entity-events.component\";\nimport { EventsComponent as OrgEventsComponent } from \"../organizations/manage/events.component\";\nimport { GroupAddEditComponent as OrgGroupAddEditComponent } from \"../organizations/manage/group-add-edit.component\";\nimport { GroupsComponent as OrgGroupsComponent } from \"../organizations/manage/groups.component\";\nimport { ManageComponent as OrgManageComponent } from \"../organizations/manage/manage.component\";\nimport { PeopleComponent as OrgPeopleComponent } from \"../organizations/manage/people.component\";\nimport { PoliciesComponent as OrgPoliciesComponent } from \"../organizations/manage/policies.component\";\nimport { PolicyEditComponent as OrgPolicyEditComponent } from \"../organizations/manage/policy-edit.component\";\nimport { ResetPasswordComponent as OrgResetPasswordComponent } from \"../organizations/manage/reset-password.component\";\nimport { UserAddEditComponent as OrgUserAddEditComponent } from \"../organizations/manage/user-add-edit.component\";\nimport { UserConfirmComponent as OrgUserConfirmComponent } from \"../organizations/manage/user-confirm.component\";\nimport { UserGroupsComponent as OrgUserGroupsComponent } from \"../organizations/manage/user-groups.component\";\nimport { DisableSendPolicyComponent } from \"../organizations/policies/disable-send.component\";\nimport { MasterPasswordPolicyComponent } from \"../organizations/policies/master-password.component\";\nimport { PasswordGeneratorPolicyComponent } from \"../organizations/policies/password-generator.component\";\nimport { PersonalOwnershipPolicyComponent } from \"../organizations/policies/personal-ownership.component\";\nimport { RequireSsoPolicyComponent } from \"../organizations/policies/require-sso.component\";\nimport { ResetPasswordPolicyComponent } from \"../organizations/policies/reset-password.component\";\nimport { SendOptionsPolicyComponent } from \"../organizations/policies/send-options.component\";\nimport { SingleOrgPolicyComponent } from \"../organizations/policies/single-org.component\";\nimport { TwoFactorAuthenticationPolicyComponent } from \"../organizations/policies/two-factor-authentication.component\";\nimport { AccountComponent as OrgAccountComponent } from \"../organizations/settings/account.component\";\nimport { AdjustSubscription } from \"../organizations/settings/adjust-subscription.component\";\nimport { BillingSyncApiKeyComponent } from \"../organizations/settings/billing-sync-api-key.component\";\nimport { ChangePlanComponent } from \"../organizations/settings/change-plan.component\";\nimport { DeleteOrganizationComponent } from \"../organizations/settings/delete-organization.component\";\nimport { DownloadLicenseComponent } from \"../organizations/settings/download-license.component\";\nimport { ImageSubscriptionHiddenComponent as OrgSubscriptionHiddenComponent } from \"../organizations/settings/image-subscription-hidden.component\";\nimport { OrganizationBillingComponent } from \"../organizations/settings/organization-billing.component\";\nimport { OrganizationSubscriptionComponent } from \"../organizations/settings/organization-subscription.component\";\nimport { SettingsComponent as OrgSettingComponent } from \"../organizations/settings/settings.component\";\nimport { TwoFactorSetupComponent as OrgTwoFactorSetupComponent } from \"../organizations/settings/two-factor-setup.component\";\nimport { AcceptFamilySponsorshipComponent } from \"../organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"../organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { ExportComponent as OrgExportComponent } from \"../organizations/tools/export.component\";\nimport { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from \"../organizations/tools/exposed-passwords-report.component\";\nimport { ImportComponent as OrgImportComponent } from \"../organizations/tools/import.component\";\nimport { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from \"../organizations/tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from \"../organizations/tools/reused-passwords-report.component\";\nimport { ToolsComponent as OrgToolsComponent } from \"../organizations/tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from \"../organizations/tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from \"../organizations/tools/weak-passwords-report.component\";\nimport { AddEditComponent as OrgAddEditComponent } from \"../organizations/vault/add-edit.component\";\nimport { AttachmentsComponent as OrgAttachmentsComponent } from \"../organizations/vault/attachments.component\";\nimport { CiphersComponent as OrgCiphersComponent } from \"../organizations/vault/ciphers.component\";\nimport { CollectionsComponent as OrgCollectionsComponent } from \"../organizations/vault/collections.component\";\nimport { ProvidersComponent } from \"../providers/providers.component\";\nimport { BreachReportComponent } from \"../reports/breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"../reports/exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"../reports/inactive-two-factor-report.component\";\nimport { ReportCardComponent } from \"../reports/report-card.component\";\nimport { ReportListComponent } from \"../reports/report-list.component\";\nimport { ReportsComponent } from \"../reports/reports.component\";\nimport { ReusedPasswordsReportComponent } from \"../reports/reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"../reports/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"../reports/weak-passwords-report.component\";\nimport { AccessComponent } from \"../send/access.component\";\nimport { AddEditComponent as SendAddEditComponent } from \"../send/add-edit.component\";\nimport { EffluxDatesComponent as SendEffluxDatesComponent } from \"../send/efflux-dates.component\";\nimport { SendComponent } from \"../send/send.component\";\nimport { AccountComponent } from \"../settings/account.component\";\nimport { AddCreditComponent } from \"../settings/add-credit.component\";\nimport { AdjustPaymentComponent } from \"../settings/adjust-payment.component\";\nimport { AdjustStorageComponent } from \"../settings/adjust-storage.component\";\nimport { ApiKeyComponent } from \"../settings/api-key.component\";\nimport { BillingSyncKeyComponent } from \"../settings/billing-sync-key.component\";\nimport { ChangeEmailComponent } from \"../settings/change-email.component\";\nimport { ChangeKdfComponent } from \"../settings/change-kdf.component\";\nimport { ChangePasswordComponent } from \"../settings/change-password.component\";\nimport { CreateOrganizationComponent } from \"../settings/create-organization.component\";\nimport { DeauthorizeSessionsComponent } from \"../settings/deauthorize-sessions.component\";\nimport { DeleteAccountComponent } from \"../settings/delete-account.component\";\nimport { DomainRulesComponent } from \"../settings/domain-rules.component\";\nimport { EmergencyAccessAddEditComponent } from \"../settings/emergency-access-add-edit.component\";\nimport { EmergencyAccessAttachmentsComponent } from \"../settings/emergency-access-attachments.component\";\nimport { EmergencyAccessConfirmComponent } from \"../settings/emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"../settings/emergency-access-takeover.component\";\nimport { EmergencyAccessViewComponent } from \"../settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"../settings/emergency-access.component\";\nimport { EmergencyAddEditComponent } from \"../settings/emergency-add-edit.component\";\nimport { OrganizationPlansComponent } from \"../settings/organization-plans.component\";\nimport { PaymentMethodComponent } from \"../settings/payment-method.component\";\nimport { PaymentComponent } from \"../settings/payment.component\";\nimport { PreferencesComponent } from \"../settings/preferences.component\";\nimport { PremiumComponent } from \"../settings/premium.component\";\nimport { ProfileComponent } from \"../settings/profile.component\";\nimport { PurgeVaultComponent } from \"../settings/purge-vault.component\";\nimport { SecurityKeysComponent } from \"../settings/security-keys.component\";\nimport { SecurityComponent } from \"../settings/security.component\";\nimport { SettingsComponent } from \"../settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"../settings/sponsored-families.component\";\nimport { SponsoringOrgRowComponent } from \"../settings/sponsoring-org-row.component\";\nimport { SubscriptionComponent } from \"../settings/subscription.component\";\nimport { TaxInfoComponent } from \"../settings/tax-info.component\";\nimport { TwoFactorAuthenticatorComponent } from \"../settings/two-factor-authenticator.component\";\nimport { TwoFactorDuoComponent } from \"../settings/two-factor-duo.component\";\nimport { TwoFactorEmailComponent } from \"../settings/two-factor-email.component\";\nimport { TwoFactorRecoveryComponent } from \"../settings/two-factor-recovery.component\";\nimport { TwoFactorSetupComponent } from \"../settings/two-factor-setup.component\";\nimport { TwoFactorVerifyComponent } from \"../settings/two-factor-verify.component\";\nimport { TwoFactorWebAuthnComponent } from \"../settings/two-factor-webauthn.component\";\nimport { TwoFactorYubiKeyComponent } from \"../settings/two-factor-yubikey.component\";\nimport { UpdateKeyComponent } from \"../settings/update-key.component\";\nimport { UpdateLicenseComponent } from \"../settings/update-license.component\";\nimport { UserBillingHistoryComponent } from \"../settings/user-billing-history.component\";\nimport { UserSubscriptionComponent } from \"../settings/user-subscription.component\";\nimport { VaultTimeoutInputComponent } from \"../settings/vault-timeout-input.component\";\nimport { VerifyEmailComponent } from \"../settings/verify-email.component\";\nimport { ExportComponent } from \"../tools/export.component\";\nimport { GeneratorComponent } from \"../tools/generator.component\";\nimport { ImportComponent } from \"../tools/import.component\";\nimport { PasswordGeneratorHistoryComponent } from \"../tools/password-generator-history.component\";\nimport { ToolsComponent } from \"../tools/tools.component\";\nimport { AddEditCustomFieldsComponent } from \"../vault/add-edit-custom-fields.component\";\nimport { AddEditComponent } from \"../vault/add-edit.component\";\nimport { AttachmentsComponent } from \"../vault/attachments.component\";\nimport { BulkActionsComponent } from \"../vault/bulk-actions.component\";\nimport { BulkDeleteComponent } from \"../vault/bulk-delete.component\";\nimport { BulkMoveComponent } from \"../vault/bulk-move.component\";\nimport { BulkRestoreComponent } from \"../vault/bulk-restore.component\";\nimport { BulkShareComponent } from \"../vault/bulk-share.component\";\nimport { CiphersComponent } from \"../vault/ciphers.component\";\nimport { CollectionsComponent } from \"../vault/collections.component\";\nimport { FolderAddEditComponent } from \"../vault/folder-add-edit.component\";\nimport { ShareComponent } from \"../vault/share.component\";\n\nimport { PipesModule } from \"./pipes/pipes.module\";\nimport { SharedModule } from \"./shared.module\";\nimport { VaultFilterModule } from \"./vault-filter/vault-filter.module\";\nimport { OrganizationBadgeModule } from \"./vault/modules/organization-badge/organization-badge.module\";\n\n// Please do not add to this list of declarations - we should refactor these into modules when doing so makes sense until there are none left.\n// If you are building new functionality, please create or extend a feature module instead.\n@NgModule({\n imports: [SharedModule, VaultFilterModule, OrganizationBadgeModule, PipesModule],\n declarations: [\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptFamilySponsorshipComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n AdjustSubscription,\n ApiKeyComponent,\n AttachmentsComponent,\n BillingSyncApiKeyComponent,\n BillingSyncKeyComponent,\n BreachReportComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n ChangePlanComponent,\n CiphersComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n DisableSendPolicyComponent,\n DomainRulesComponent,\n DownloadLicenseComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n ExportComponent,\n ExposedPasswordsReportComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n ImportComponent,\n InactiveTwoFactorReportComponent,\n LockComponent,\n LoginComponent,\n MasterPasswordPolicyComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAccountComponent,\n OrgAddEditComponent,\n OrganizationBillingComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrganizationSubscriptionComponent,\n OrgAttachmentsComponent,\n OrgBulkConfirmComponent,\n OrgBulkRemoveComponent,\n OrgBulkStatusComponent,\n OrgCiphersComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExportComponent,\n OrgExposedPasswordsReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupsComponent,\n OrgImportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgPoliciesComponent,\n OrgPolicyEditComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgSettingComponent,\n OrgToolsComponent,\n OrgTwoFactorSetupComponent,\n OrgSubscriptionHiddenComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordGeneratorPolicyComponent,\n PasswordRepromptComponent,\n PasswordStrengthComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PersonalOwnershipPolicyComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n ReportCardComponent,\n ReportListComponent,\n ReportsComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n ReusedPasswordsReportComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SendOptionsPolicyComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SingleOrgPolicyComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticationPolicyComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UnsecuredWebsitesReportComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n UserBillingHistoryComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n WeakPasswordsReportComponent,\n ],\n exports: [\n PremiumBadgeComponent,\n AcceptEmergencyComponent,\n AcceptOrganizationComponent,\n AccessComponent,\n AccountComponent,\n AddCreditComponent,\n AddEditComponent,\n AddEditCustomFieldsComponent,\n AddEditCustomFieldsComponent,\n AdjustPaymentComponent,\n AdjustStorageComponent,\n AdjustSubscription,\n ApiKeyComponent,\n AttachmentsComponent,\n BreachReportComponent,\n BulkActionsComponent,\n BulkDeleteComponent,\n BulkMoveComponent,\n BulkRestoreComponent,\n BulkShareComponent,\n ChangeEmailComponent,\n ChangeKdfComponent,\n ChangePasswordComponent,\n ChangePlanComponent,\n CiphersComponent,\n CollectionsComponent,\n CreateOrganizationComponent,\n DeauthorizeSessionsComponent,\n DeleteAccountComponent,\n DeleteOrganizationComponent,\n DisableSendPolicyComponent,\n DomainRulesComponent,\n DownloadLicenseComponent,\n EmergencyAccessAddEditComponent,\n EmergencyAccessAttachmentsComponent,\n EmergencyAccessComponent,\n EmergencyAccessConfirmComponent,\n EmergencyAccessTakeoverComponent,\n EmergencyAccessViewComponent,\n EmergencyAddEditComponent,\n ExportComponent,\n ExposedPasswordsReportComponent,\n FamiliesForEnterpriseSetupComponent,\n FolderAddEditComponent,\n FooterComponent,\n FrontendLayoutComponent,\n HintComponent,\n ImportComponent,\n InactiveTwoFactorReportComponent,\n LockComponent,\n LoginComponent,\n MasterPasswordPolicyComponent,\n NavbarComponent,\n NestedCheckboxComponent,\n OrganizationSwitcherComponent,\n OrgAccountComponent,\n OrgAddEditComponent,\n OrganizationBillingComponent,\n OrganizationLayoutComponent,\n OrganizationPlansComponent,\n OrganizationSubscriptionComponent,\n OrgAttachmentsComponent,\n OrgBulkConfirmComponent,\n OrgBulkRemoveComponent,\n OrgBulkStatusComponent,\n OrgCiphersComponent,\n OrgCollectionAddEditComponent,\n OrgCollectionsComponent,\n OrgEntityEventsComponent,\n OrgEventsComponent,\n OrgExportComponent,\n OrgExposedPasswordsReportComponent,\n OrgGroupAddEditComponent,\n OrgGroupsComponent,\n OrgImportComponent,\n OrgInactiveTwoFactorReportComponent,\n OrgManageCollectionsComponent,\n OrgManageComponent,\n OrgPeopleComponent,\n OrgPoliciesComponent,\n OrgPolicyEditComponent,\n OrgResetPasswordComponent,\n OrgReusedPasswordsReportComponent,\n OrgSettingComponent,\n OrgToolsComponent,\n OrgTwoFactorSetupComponent,\n OrgUnsecuredWebsitesReportComponent,\n OrgUserAddEditComponent,\n OrgUserConfirmComponent,\n OrgUserGroupsComponent,\n OrgWeakPasswordsReportComponent,\n GeneratorComponent,\n PasswordGeneratorHistoryComponent,\n PasswordGeneratorPolicyComponent,\n PasswordRepromptComponent,\n PasswordStrengthComponent,\n PaymentComponent,\n PaymentMethodComponent,\n PersonalOwnershipPolicyComponent,\n PreferencesComponent,\n PremiumBadgeComponent,\n PremiumComponent,\n ProfileComponent,\n ProvidersComponent,\n PurgeVaultComponent,\n RecoverDeleteComponent,\n RecoverTwoFactorComponent,\n RegisterComponent,\n RemovePasswordComponent,\n ReportCardComponent,\n ReportListComponent,\n ReportsComponent,\n RequireSsoPolicyComponent,\n ResetPasswordPolicyComponent,\n ReusedPasswordsReportComponent,\n SecurityComponent,\n SecurityKeysComponent,\n SendAddEditComponent,\n SendComponent,\n SendEffluxDatesComponent,\n SendOptionsPolicyComponent,\n SetPasswordComponent,\n SettingsComponent,\n ShareComponent,\n SingleOrgPolicyComponent,\n SponsoredFamiliesComponent,\n SponsoringOrgRowComponent,\n SsoComponent,\n SubscriptionComponent,\n TaxInfoComponent,\n ToolsComponent,\n TwoFactorAuthenticationPolicyComponent,\n TwoFactorAuthenticatorComponent,\n TwoFactorComponent,\n TwoFactorDuoComponent,\n TwoFactorEmailComponent,\n TwoFactorOptionsComponent,\n TwoFactorRecoveryComponent,\n TwoFactorSetupComponent,\n TwoFactorVerifyComponent,\n TwoFactorWebAuthnComponent,\n TwoFactorYubiKeyComponent,\n UnsecuredWebsitesReportComponent,\n UpdateKeyComponent,\n UpdateLicenseComponent,\n UpdatePasswordComponent,\n UpdateTempPasswordComponent,\n UserBillingHistoryComponent,\n UserLayoutComponent,\n UserSubscriptionComponent,\n UserVerificationComponent,\n VaultTimeoutInputComponent,\n VerifyEmailComponent,\n VerifyEmailTokenComponent,\n VerifyRecoverDeleteComponent,\n WeakPasswordsReportComponent,\n ],\n})\nexport class LooseComponentsModule {}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { SearchPipe } from \"jslib-angular/pipes/search.pipe\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { OrganizationUserUserDetailsResponse } from \"jslib-common/models/response/organizationUserResponse\";\n\n@Component({\n selector: \"app-entity-users\",\n templateUrl: \"entity-users.component.html\",\n providers: [SearchPipe],\n})\nexport class EntityUsersComponent implements OnInit {\n @Input() entity: \"group\" | \"collection\";\n @Input() entityId: string;\n @Input() entityName: string;\n @Input() organizationId: string;\n @Output() onEditedUsers = new EventEmitter();\n\n organizationUserType = OrganizationUserType;\n organizationUserStatusType = OrganizationUserStatusType;\n\n showSelected = false;\n loading = true;\n formPromise: Promise;\n selectedCount = 0;\n searchText: string;\n\n private allUsers: OrganizationUserUserDetailsResponse[] = [];\n\n constructor(\n private search: SearchPipe,\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.loadUsers();\n this.loading = false;\n }\n\n get users() {\n if (this.showSelected) {\n return this.allUsers.filter((u) => (u as any).checked);\n } else {\n return this.allUsers;\n }\n }\n\n get searchedUsers() {\n return this.search.transform(this.users, this.searchText, \"name\", \"email\", \"id\");\n }\n\n get scrollViewportStyle() {\n return `min-height: 120px; height: ${120 + this.searchedUsers.length * 46}px`;\n }\n\n async loadUsers() {\n const users = await this.apiService.getOrganizationUsers(this.organizationId);\n this.allUsers = users.data.map((r) => r).sort(Utils.getSortFunction(this.i18nService, \"email\"));\n if (this.entity === \"group\") {\n const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => u.id === s);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n }\n });\n }\n } else if (this.entity === \"collection\") {\n const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);\n if (response != null && users.data.length > 0) {\n response.forEach((s) => {\n const user = users.data.filter((u) => !u.accessAll && u.id === s.id);\n if (user != null && user.length > 0) {\n (user[0] as any).checked = true;\n (user[0] as any).readOnly = s.readOnly;\n (user[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n }\n\n this.allUsers.forEach((u) => {\n if (this.entity === \"collection\" && u.accessAll) {\n (u as any).checked = true;\n }\n if ((u as any).checked) {\n this.selectedCount++;\n }\n });\n }\n\n check(u: OrganizationUserUserDetailsResponse) {\n if (this.entity === \"collection\" && u.accessAll) {\n return;\n }\n (u as any).checked = !(u as any).checked;\n this.selectedChanged(u);\n }\n\n selectedChanged(u: OrganizationUserUserDetailsResponse) {\n if ((u as any).checked) {\n this.selectedCount++;\n } else {\n if (this.entity === \"collection\") {\n (u as any).readOnly = false;\n (u as any).hidePasswords = false;\n }\n this.selectedCount--;\n }\n }\n\n filterSelected(showSelected: boolean) {\n this.showSelected = showSelected;\n }\n\n async submit() {\n try {\n if (this.entity === \"group\") {\n const selections = this.users.filter((u) => (u as any).checked).map((u) => u.id);\n this.formPromise = this.apiService.putGroupUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n } else {\n const selections = this.users\n .filter((u) => (u as any).checked && !u.accessAll)\n .map(\n (u) =>\n new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords)\n );\n this.formPromise = this.apiService.putCollectionUsers(\n this.organizationId,\n this.entityId,\n selections\n );\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"updatedUsers\"));\n this.onEditedUsers.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ \"userAccess\" | i18n }}\n {{ entityName }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n
\n
\n
\n \n \n
\n
\n \n {{ \"all\" | i18n }}\n \n \n {{ \"selected\" | i18n }}\n {{\n selectedCount\n }}\n \n
\n
\n \n
\n {{ \"noUsersInList\" | i18n }}\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
  {{ \"name\" | i18n }} {{ \"userType\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n \n {{ \"readOnly\" | i18n }}\n
\n \n \n \n \n \n {{ u.email }}\n {{ \"invited\" | i18n }}\n {{ \"accepted\" | i18n }}\n {{ u.name }}\n \n \n \n {{ \"userAccessAllItems\" | i18n }}\n \n \n {{ \"owner\" | i18n }}\n {{ \"admin\" | i18n }}\n {{\n \"manager\" | i18n\n }}\n {{ \"user\" | i18n }}\n {{ \"custom\" | i18n }}\n \n \n \n \n
\n
\n \n
\n \n \n
\n \n
\n
\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../shared.module\";\n\nimport { EntityUsersComponent } from \"./entity-users.component\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule],\n declarations: [EntityUsersComponent],\n exports: [EntityUsersComponent],\n})\nexport class OrganizationManageModule {}\n","import { Component } from \"@angular/core\";\n\nimport { ModalRef } from \"jslib-angular/components/modal/modal.ref\";\nimport { ModalConfig } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-enroll-master-password-reset\",\n templateUrl: \"enroll-master-password-reset.component.html\",\n})\nexport class EnrollMasterPasswordReset {\n organization: Organization;\n\n verification: Verification;\n formPromise: Promise;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private cryptoService: CryptoService,\n private syncService: SyncService,\n private logService: LogService,\n private modalRef: ModalRef,\n config: ModalConfig\n ) {\n this.organization = config.data.organization;\n }\n\n async submit() {\n let toastStringRef = \"withdrawPasswordResetSuccess\";\n\n this.formPromise = this.userVerificationService\n .buildRequest(this.verification, OrganizationUserResetPasswordEnrollmentRequest)\n .then(async (request) => {\n // Set variables\n let keyString: string = null;\n\n // Retrieve Public Key\n const orgKeys = await this.apiService.getOrganizationKeys(this.organization.id);\n if (orgKeys == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n\n const publicKey = Utils.fromB64ToArray(orgKeys.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const encKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n keyString = encryptedKey.encryptedString;\n toastStringRef = \"enrollPasswordResetSuccess\";\n\n // Create request and execute enrollment\n request.resetPasswordKey = keyString;\n await this.apiService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n\n await this.syncService.fullSync(true);\n });\n try {\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(toastStringRef));\n this.modalRef.close();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","\n
\n \n
\n

\n {{ \"enrollPasswordReset\" | i18n }}\n

\n \n ×\n \n
\n
\n \n {{ \"resetPasswordEnrollmentWarning\" | i18n }}\n \n \n
\n
\n \n \n \n {{ \"cancel\" | i18n }}\n \n \n
\n \n
\n\n","import { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule } from \"../../loose-components.module\";\nimport { SharedModule } from \"../../shared.module\";\n\nimport { EnrollMasterPasswordReset } from \"./enroll-master-password-reset.component\";\n\n@NgModule({\n imports: [SharedModule, ScrollingModule, LooseComponentsModule],\n declarations: [EnrollMasterPasswordReset],\n exports: [EnrollMasterPasswordReset],\n})\nexport class OrganizationUserModule {}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Pipe({\n name: \"orgNameFromId\",\n pure: true,\n})\nexport class GetOrgNameFromIdPipe implements PipeTransform {\n transform(value: string, organizations: Organization[]) {\n const orgName = organizations.find((o) => o.id === value)?.name;\n return orgName;\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { GetOrgNameFromIdPipe } from \"./get-organization-name.pipe\";\n\n@NgModule({\n imports: [],\n declarations: [GetOrgNameFromIdPipe],\n exports: [GetOrgNameFromIdPipe],\n})\nexport class PipesModule {}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { DatePipe, registerLocaleData, CommonModule } from \"@angular/common\";\nimport localeAf from \"@angular/common/locales/af\";\nimport localeAz from \"@angular/common/locales/az\";\nimport localeBe from \"@angular/common/locales/be\";\nimport localeBg from \"@angular/common/locales/bg\";\nimport localeBn from \"@angular/common/locales/bn\";\nimport localeBs from \"@angular/common/locales/bs\";\nimport localeCa from \"@angular/common/locales/ca\";\nimport localeCs from \"@angular/common/locales/cs\";\nimport localeDa from \"@angular/common/locales/da\";\nimport localeDe from \"@angular/common/locales/de\";\nimport localeEl from \"@angular/common/locales/el\";\nimport localeEnGb from \"@angular/common/locales/en-GB\";\nimport localeEnIn from \"@angular/common/locales/en-IN\";\nimport localeEo from \"@angular/common/locales/eo\";\nimport localeEs from \"@angular/common/locales/es\";\nimport localeEt from \"@angular/common/locales/et\";\nimport localeFi from \"@angular/common/locales/fi\";\nimport localeFil from \"@angular/common/locales/fil\";\nimport localeFr from \"@angular/common/locales/fr\";\nimport localeHe from \"@angular/common/locales/he\";\nimport localeHi from \"@angular/common/locales/hi\";\nimport localeHr from \"@angular/common/locales/hr\";\nimport localeHu from \"@angular/common/locales/hu\";\nimport localeId from \"@angular/common/locales/id\";\nimport localeIt from \"@angular/common/locales/it\";\nimport localeJa from \"@angular/common/locales/ja\";\nimport localeKa from \"@angular/common/locales/ka\";\nimport localeKm from \"@angular/common/locales/km\";\nimport localeKn from \"@angular/common/locales/kn\";\nimport localeKo from \"@angular/common/locales/ko\";\nimport localeLv from \"@angular/common/locales/lv\";\nimport localeMl from \"@angular/common/locales/ml\";\nimport localeNb from \"@angular/common/locales/nb\";\nimport localeNl from \"@angular/common/locales/nl\";\nimport localeNn from \"@angular/common/locales/nn\";\nimport localePl from \"@angular/common/locales/pl\";\nimport localePtBr from \"@angular/common/locales/pt\";\nimport localePtPt from \"@angular/common/locales/pt-PT\";\nimport localeRo from \"@angular/common/locales/ro\";\nimport localeRu from \"@angular/common/locales/ru\";\nimport localeSi from \"@angular/common/locales/si\";\nimport localeSk from \"@angular/common/locales/sk\";\nimport localeSl from \"@angular/common/locales/sl\";\nimport localeSr from \"@angular/common/locales/sr\";\nimport localeSv from \"@angular/common/locales/sv\";\nimport localeTr from \"@angular/common/locales/tr\";\nimport localeUk from \"@angular/common/locales/uk\";\nimport localeVi from \"@angular/common/locales/vi\";\nimport localeZhCn from \"@angular/common/locales/zh-Hans\";\nimport localeZhTw from \"@angular/common/locales/zh-Hant\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { RouterModule } from \"@angular/router\";\nimport { BadgeModule, ButtonModule, CalloutModule, MenuModule } from \"@bitwarden/components\";\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { ToastrModule } from \"ngx-toastr\";\n\nimport { JslibModule } from \"jslib-angular/jslib.module\";\n\nregisterLocaleData(localeAf, \"af\");\nregisterLocaleData(localeAz, \"az\");\nregisterLocaleData(localeBe, \"be\");\nregisterLocaleData(localeBg, \"bg\");\nregisterLocaleData(localeBn, \"bn\");\nregisterLocaleData(localeBs, \"bs\");\nregisterLocaleData(localeCa, \"ca\");\nregisterLocaleData(localeCs, \"cs\");\nregisterLocaleData(localeDa, \"da\");\nregisterLocaleData(localeDe, \"de\");\nregisterLocaleData(localeEl, \"el\");\nregisterLocaleData(localeEnGb, \"en-GB\");\nregisterLocaleData(localeEnIn, \"en-IN\");\nregisterLocaleData(localeEo, \"eo\");\nregisterLocaleData(localeEs, \"es\");\nregisterLocaleData(localeEt, \"et\");\nregisterLocaleData(localeFi, \"fi\");\nregisterLocaleData(localeFil, \"fil\");\nregisterLocaleData(localeFr, \"fr\");\nregisterLocaleData(localeHe, \"he\");\nregisterLocaleData(localeHi, \"hi\");\nregisterLocaleData(localeHr, \"hr\");\nregisterLocaleData(localeHu, \"hu\");\nregisterLocaleData(localeId, \"id\");\nregisterLocaleData(localeIt, \"it\");\nregisterLocaleData(localeJa, \"ja\");\nregisterLocaleData(localeKa, \"ka\");\nregisterLocaleData(localeKm, \"km\");\nregisterLocaleData(localeKn, \"kn\");\nregisterLocaleData(localeKo, \"ko\");\nregisterLocaleData(localeLv, \"lv\");\nregisterLocaleData(localeMl, \"ml\");\nregisterLocaleData(localeNb, \"nb\");\nregisterLocaleData(localeNl, \"nl\");\nregisterLocaleData(localeNn, \"nn\");\nregisterLocaleData(localePl, \"pl\");\nregisterLocaleData(localePtBr, \"pt-BR\");\nregisterLocaleData(localePtPt, \"pt-PT\");\nregisterLocaleData(localeRo, \"ro\");\nregisterLocaleData(localeRu, \"ru\");\nregisterLocaleData(localeSi, \"si\");\nregisterLocaleData(localeSk, \"sk\");\nregisterLocaleData(localeSl, \"sl\");\nregisterLocaleData(localeSr, \"sr\");\nregisterLocaleData(localeSv, \"sv\");\nregisterLocaleData(localeTr, \"tr\");\nregisterLocaleData(localeUk, \"uk\");\nregisterLocaleData(localeVi, \"vi\");\nregisterLocaleData(localeZhCn, \"zh-CN\");\nregisterLocaleData(localeZhTw, \"zh-TW\");\n\n@NgModule({\n imports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n InfiniteScrollModule,\n JslibModule,\n ReactiveFormsModule,\n RouterModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n ToastrModule,\n BadgeModule,\n ButtonModule,\n MenuModule,\n ],\n exports: [\n CommonModule,\n DragDropModule,\n FormsModule,\n InfiniteScrollModule,\n JslibModule,\n ReactiveFormsModule,\n RouterModule,\n BadgeModule,\n ButtonModule,\n CalloutModule,\n ToastrModule,\n BadgeModule,\n ButtonModule,\n MenuModule,\n ],\n providers: [DatePipe],\n bootstrap: [],\n})\nexport class SharedModule {}\n","import { Component } from \"@angular/core\";\n\nimport { CollectionFilterComponent as BaseCollectionFilterComponent } from \"jslib-angular/modules/vault-filter/components/collection-filter.component\";\n\n@Component({\n selector: \"app-collection-filter\",\n templateUrl: \"collection-filter.component.html\",\n})\nexport class CollectionFilterComponent extends BaseCollectionFilterComponent {}\n","\n
\n \n \n \n

 {{ collectionsGrouping.name | i18n }}

\n
\n
    \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n \n\n","import { Component } from \"@angular/core\";\n\nimport { FolderFilterComponent as BaseFolderFilterComponent } from \"jslib-angular/modules/vault-filter/components/folder-filter.component\";\n\n@Component({\n selector: \"app-folder-filter\",\n templateUrl: \"folder-filter.component.html\",\n})\nexport class FolderFilterComponent extends BaseFolderFilterComponent {}\n","\n
\n \n \n \n

 {{ \"folders\" | i18n }}

\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","import { AfterContentInit, Component, Input } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { SsoComponent } from \"jslib-angular/components/sso.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-link-sso\",\n templateUrl: \"link-sso.component.html\",\n})\nexport class LinkSsoComponent extends SsoComponent implements AfterContentInit {\n @Input() organization: Organization;\n returnUri = \"/settings/organizations\";\n\n constructor(\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n apiService: ApiService,\n authService: AuthService,\n router: Router,\n route: ActivatedRoute,\n cryptoFunctionService: CryptoFunctionService,\n passwordGenerationService: PasswordGenerationService,\n stateService: StateService,\n environmentService: EnvironmentService,\n logService: LogService\n ) {\n super(\n authService,\n router,\n i18nService,\n route,\n stateService,\n platformUtilsService,\n apiService,\n cryptoFunctionService,\n environmentService,\n passwordGenerationService,\n logService\n );\n\n this.returnUri = \"/settings/organizations\";\n this.redirectUri = window.location.origin + \"/sso-connector.html\";\n this.clientId = \"web\";\n }\n\n async ngAfterContentInit() {\n this.identifier = this.organization.identifier;\n }\n}\n","\n \n {{ \"linkSso\" | i18n }}\n\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationFilterComponent as BaseOrganizationFilterComponent } from \"jslib-angular/modules/vault-filter/components/organization-filter.component\";\n\n@Component({\n selector: \"app-organization-filter\",\n templateUrl: \"organization-filter.component.html\",\n})\nexport class OrganizationFilterComponent extends BaseOrganizationFilterComponent {\n displayText = \"allVaults\";\n}\n","\n \n \n \n \n \n
\n \n \n \n \n  {{ organizationGrouping.name | i18n }}\n \n
\n \n \n \n
\n \n
\n
\n \n
\n \n \n \n \n  {{ organizationGrouping.name | i18n }}\n \n
\n \n
\n \n
\n\n","import { Component, Input } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\n\nimport { EnrollMasterPasswordReset } from \"../../organizations/users/enroll-master-password-reset.component\";\n\n@Component({\n selector: \"app-organization-options\",\n templateUrl: \"organization-options.component.html\",\n})\nexport class OrganizationOptionsComponent {\n actionPromise: Promise;\n policies: Policy[];\n loaded = false;\n\n @Input() organization: Organization;\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService,\n private syncService: SyncService,\n private policyService: PolicyService,\n private modalService: ModalService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.policies = await this.policyService.getAll(PolicyType.ResetPassword);\n this.loaded = true;\n }\n\n allowEnrollmentChanges(org: Organization): boolean {\n if (org.usePolicies && org.useResetPassword && org.hasPublicAndPrivateKeys) {\n const policy = this.policies.find((p) => p.organizationId === org.id);\n if (policy != null && policy.enabled) {\n return org.resetPasswordEnrolled && policy.data.autoEnrollEnabled ? false : true;\n }\n }\n\n return false;\n }\n\n showEnrolledStatus(org: Organization): boolean {\n return (\n org.useResetPassword &&\n org.resetPasswordEnrolled &&\n this.policies.some((p) => p.organizationId === org.id && p.enabled)\n );\n }\n\n async unlinkSso(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"unlinkSsoConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, \"Unlinked SSO\");\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async leave(org: Organization) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n org.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.apiService.postLeaveOrganization(org.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async toggleResetPasswordEnrollment(org: Organization) {\n if (!this.organization.resetPasswordEnrolled) {\n this.modalService.open(EnrollMasterPasswordReset, {\n allowMultipleModals: true,\n data: {\n organization: org,\n },\n });\n } else {\n // Remove reset password\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = \"ignored\";\n request.resetPasswordKey = null;\n this.actionPromise = this.apiService.putOrganizationUserResetPasswordEnrollment(\n this.organization.id,\n this.organization.userId,\n request\n );\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"withdrawPasswordResetSuccess\")\n );\n this.syncService.fullSync(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n}\n","\n \n {{ \"loading\" | i18n }}\n\n\n \n \n {{ \"enrollPasswordReset\" | i18n }}\n \n \n \n {{ \"withdrawPasswordReset\" | i18n }}\n \n \n \n \n {{ \"unlinkSso\" | i18n }}\n \n \n \n \n \n \n\n","import { Component } from \"@angular/core\";\n\nimport { StatusFilterComponent as BaseStatusFilterComponent } from \"jslib-angular/modules/vault-filter/components/status-filter.component\";\n\n@Component({\n selector: \"app-status-filter\",\n templateUrl: \"status-filter.component.html\",\n})\nexport class StatusFilterComponent extends BaseStatusFilterComponent {}\n","\n
    \n
  • \n \n \n \n
  • \n \n \n \n \n \n \n \n \n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { TypeFilterComponent as BaseTypeFilterComponent } from \"jslib-angular/modules/vault-filter/components/type-filter.component\";\n\n@Component({\n selector: \"app-type-filter\",\n templateUrl: \"type-filter.component.html\",\n})\nexport class TypeFilterComponent extends BaseTypeFilterComponent {}\n","
\n \n \n \n

 {{ \"types\" | i18n }}

\n
\n
    \n \n \n \n \n \n
  • \n \n \n \n
  • \n \n \n \n \n \n \n \n \n \n \n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nimport { VaultFilterComponent } from \"./vault-filter.component\";\n\n@Component({\n selector: \"app-organization-vault-filter\",\n templateUrl: \"vault-filter.component.html\",\n})\nexport class OrganizationVaultFilterComponent extends VaultFilterComponent {\n hideOrganizations = true;\n hideFavorites = true;\n hideFolders = true;\n\n organization: Organization;\n\n async initCollections() {\n if (this.organization.canEditAnyCollection) {\n return await this.vaultFilterService.buildAdminCollections(this.organization.id);\n }\n return await this.vaultFilterService.buildCollections(this.organization.id);\n }\n\n async reloadCollectionsAndFolders() {\n this.collections = await this.initCollections();\n }\n}\n","
\n
\n \n
\n
\n
\n {{ \"filters\" | i18n }}\n \n \n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { VaultFilterComponent as BaseVaultFilterComponent } from \"jslib-angular/modules/vault-filter/vault-filter.component\";\n\nimport { VaultFilterService } from \"./vault-filter.service\";\n\n@Component({\n selector: \"app-vault-filter\",\n templateUrl: \"vault-filter.component.html\",\n})\nexport class VaultFilterComponent extends BaseVaultFilterComponent {\n @Output() onSearchTextChanged = new EventEmitter();\n\n searchPlaceholder: string;\n searchText = \"\";\n\n constructor(protected vaultFilterService: VaultFilterService) {\n // This empty constructor is required to provide the web vaultFilterService subclass to super()\n // TODO: refactor this to use proper dependency injection\n super(vaultFilterService);\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n this.vaultFilterService.collapsedFilterNodes$.subscribe((nodes) => {\n this.collapsedFilterNodes = nodes;\n });\n }\n\n searchTextChanged() {\n this.onSearchTextChanged.emit(this.searchText);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../shared.module\";\n\nimport { CollectionFilterComponent } from \"./components/collection-filter.component\";\nimport { FolderFilterComponent } from \"./components/folder-filter.component\";\nimport { LinkSsoComponent } from \"./components/link-sso.component\";\nimport { OrganizationFilterComponent } from \"./components/organization-filter.component\";\nimport { OrganizationOptionsComponent } from \"./components/organization-options.component\";\nimport { StatusFilterComponent } from \"./components/status-filter.component\";\nimport { TypeFilterComponent } from \"./components/type-filter.component\";\nimport { OrganizationVaultFilterComponent } from \"./organization-vault-filter.component\";\nimport { VaultFilterComponent } from \"./vault-filter.component\";\nimport { VaultFilterService } from \"./vault-filter.service\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [\n VaultFilterComponent,\n CollectionFilterComponent,\n FolderFilterComponent,\n OrganizationFilterComponent,\n OrganizationOptionsComponent,\n StatusFilterComponent,\n TypeFilterComponent,\n OrganizationVaultFilterComponent,\n LinkSsoComponent,\n ],\n exports: [VaultFilterComponent, OrganizationVaultFilterComponent],\n providers: [VaultFilterService],\n})\nexport class VaultFilterModule {}\n","import { BehaviorSubject, Observable } from \"rxjs\";\n\nimport { Injectable } from \"@angular/core\";\n\nimport { DynamicTreeNode } from \"jslib-angular/modules/vault-filter/models/dynamic-tree-node.model\";\nimport { VaultFilterService as BaseVaultFilterService } from \"jslib-angular/modules/vault-filter/vault-filter.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { CollectionDetailsResponse } from \"jslib-common/models/response/collectionResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Injectable()\nexport class VaultFilterService extends BaseVaultFilterService {\n private _collapsedFilterNodes = new BehaviorSubject>(null);\n collapsedFilterNodes$: Observable> = this._collapsedFilterNodes.asObservable();\n\n constructor(\n stateService: StateService,\n organizationService: OrganizationService,\n folderService: FolderService,\n cipherService: CipherService,\n collectionService: CollectionService,\n policyService: PolicyService,\n protected apiService: ApiService\n ) {\n super(\n stateService,\n organizationService,\n folderService,\n cipherService,\n collectionService,\n policyService\n );\n }\n\n async buildCollapsedFilterNodes(): Promise> {\n const nodes = await super.buildCollapsedFilterNodes();\n this._collapsedFilterNodes.next(nodes);\n return nodes;\n }\n\n async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise {\n await super.storeCollapsedFilterNodes(collapsedFilterNodes);\n this._collapsedFilterNodes.next(collapsedFilterNodes);\n }\n\n async ensureVaultFiltersAreExpanded() {\n const collapsedFilterNodes = await super.buildCollapsedFilterNodes();\n if (!collapsedFilterNodes.has(\"vaults\")) {\n return;\n }\n collapsedFilterNodes.delete(\"vaults\");\n await this.storeCollapsedFilterNodes(collapsedFilterNodes);\n }\n\n async buildAdminCollections(organizationId: string) {\n let result: CollectionView[] = [];\n const collectionResponse = await this.apiService.getCollections(organizationId);\n if (collectionResponse?.data != null && collectionResponse.data.length) {\n const collectionDomains = collectionResponse.data.map(\n (r: CollectionDetailsResponse) => new Collection(new CollectionData(r))\n );\n result = await this.collectionService.decryptMany(collectionDomains);\n }\n\n const nestedCollections = await this.collectionService.getAllNested(result);\n return new DynamicTreeNode({\n fullList: result,\n nestedList: nestedCollections,\n });\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { IndividualVaultComponent } from \"./individual-vault.component\";\nconst routes: Routes = [\n {\n path: \"\",\n component: IndividualVaultComponent,\n data: { titleId: \"vaults\" },\n },\n];\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class IndividualVaultRoutingModule {}\n","import {\n ChangeDetectorRef,\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { VaultFilter } from \"jslib-angular/modules/vault-filter/models/vault-filter.model\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { UpdateKeyComponent } from \"../../../../settings/update-key.component\";\nimport { AddEditComponent } from \"../../../../vault/add-edit.component\";\nimport { AttachmentsComponent } from \"../../../../vault/attachments.component\";\nimport { CiphersComponent } from \"../../../../vault/ciphers.component\";\nimport { CollectionsComponent } from \"../../../../vault/collections.component\";\nimport { FolderAddEditComponent } from \"../../../../vault/folder-add-edit.component\";\nimport { ShareComponent } from \"../../../../vault/share.component\";\nimport { VaultFilterComponent } from \"../../../vault-filter/vault-filter.component\";\nimport { VaultFilterService } from \"../../../vault-filter/vault-filter.service\";\nimport { VaultService } from \"../../vault.service\";\n\nconst BroadcasterSubscriptionId = \"VaultComponent\";\n\n@Component({\n selector: \"app-vault\",\n templateUrl: \"individual-vault.component.html\",\n})\nexport class IndividualVaultComponent implements OnInit, OnDestroy {\n @ViewChild(\"vaultFilter\", { static: true }) filterComponent: VaultFilterComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"folderAddEdit\", { read: ViewContainerRef, static: true })\n folderAddEditModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"share\", { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"updateKeyTemplate\", { read: ViewContainerRef, static: true })\n updateKeyModalRef: ViewContainerRef;\n\n favorites = false;\n folderId: string = null;\n collectionId: string = null;\n organizationId: string = null;\n myVaultOnly = false;\n showVerifyEmail = false;\n showBrowserOutdated = false;\n showUpdateKey = false;\n showPremiumCallout = false;\n deleted = false;\n trashCleanupWarning: string = null;\n activeFilter: VaultFilter = new VaultFilter();\n\n constructor(\n private syncService: SyncService,\n private route: ActivatedRoute,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private i18nService: I18nService,\n private modalService: ModalService,\n private tokenService: TokenService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private platformUtilsService: PlatformUtilsService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private stateService: StateService,\n private organizationService: OrganizationService,\n private vaultService: VaultService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService,\n private vaultFilterService: VaultFilterService\n ) {}\n\n async ngOnInit() {\n this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n this.showBrowserOutdated = window.navigator.userAgent.indexOf(\"MSIE\") !== -1;\n this.trashCleanupWarning = this.i18nService.t(\"trashCleanupWarningSelfHosted\");\n\n this.route.queryParams.pipe(first()).subscribe(async (params) => {\n await this.syncService.fullSync(false);\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.showPremiumCallout =\n !this.showVerifyEmail && !canAccessPremium && !this.platformUtilsService.isSelfHost();\n\n this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n this.filterComponent.reloadOrganizations();\n this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n\n const cipherId = getCipherIdFromParams(params);\n\n if (cipherId) {\n const cipherView = new CipherView();\n cipherView.id = cipherId;\n if (params.action === \"clone\") {\n await this.cloneCipher(cipherView);\n } else if (params.action === \"edit\") {\n await this.editCipher(cipherView);\n }\n }\n await this.ciphersComponent.reload();\n\n this.route.queryParams.subscribe(async (params) => {\n const cipherId = getCipherIdFromParams(params);\n if (cipherId) {\n if ((await this.cipherService.get(cipherId)) != null) {\n this.editCipherId(cipherId);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unknownCipher\")\n );\n this.router.navigate([], {\n queryParams: { itemId: null, cipherId: null },\n queryParamsHandling: \"merge\",\n });\n }\n }\n });\n\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await Promise.all([\n this.filterComponent.reloadCollectionsAndFolders(this.activeFilter),\n this.filterComponent.reloadOrganizations(),\n this.ciphersComponent.load(this.ciphersComponent.filter),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n });\n }\n\n get isShowingCards() {\n return (\n this.showBrowserOutdated ||\n this.showPremiumCallout ||\n this.showUpdateKey ||\n this.showVerifyEmail\n );\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async applyVaultFilter(vaultFilter: VaultFilter) {\n this.ciphersComponent.showAddNew = vaultFilter.status !== \"trash\";\n this.activeFilter = vaultFilter;\n await this.ciphersComponent.reload(this.buildFilter(), vaultFilter.status === \"trash\");\n this.filterComponent.searchPlaceholder = this.vaultService.calculateSearchBarLocalizationString(\n this.activeFilter\n );\n this.go();\n }\n\n async applyOrganizationFilter(orgId: string) {\n if (orgId == null) {\n this.activeFilter.resetOrganization();\n this.activeFilter.myVaultOnly = true;\n } else {\n this.activeFilter.selectedOrganizationId = orgId;\n }\n await this.vaultFilterService.ensureVaultFiltersAreExpanded();\n await this.applyVaultFilter(this.activeFilter);\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n private buildFilter(): (cipher: CipherView) => boolean {\n return (cipher) => {\n let cipherPassesFilter = true;\n if (this.activeFilter.status === \"favorites\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.favorite;\n }\n if (this.activeFilter.status === \"trash\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.isDeleted;\n }\n if (this.activeFilter.cipherType != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.type === this.activeFilter.cipherType;\n }\n if (\n this.activeFilter.selectedFolder &&\n this.activeFilter.selectedFolderId != \"none\" &&\n cipherPassesFilter\n ) {\n cipherPassesFilter = cipher.folderId === this.activeFilter.selectedFolderId;\n }\n if (this.activeFilter.selectedCollectionId != null && cipherPassesFilter) {\n cipherPassesFilter =\n cipher.collectionIds != null &&\n cipher.collectionIds.indexOf(this.activeFilter.selectedCollectionId) > -1;\n }\n if (this.activeFilter.selectedOrganizationId != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === this.activeFilter.selectedOrganizationId;\n }\n if (this.activeFilter.myVaultOnly && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === null;\n }\n return cipherPassesFilter;\n };\n }\n\n async editCipherAttachments(cipher: CipherView) {\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n if (cipher.organizationId == null && !canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n } else if (cipher.organizationId != null) {\n const org = await this.organizationService.get(cipher.organizationId);\n if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: cipher.organizationId,\n });\n return;\n }\n }\n\n let madeAttachmentChanges = false;\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n comp.onReuploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async shareCipher(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n ShareComponent,\n this.shareModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n comp.onSharedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n comp.cipherId = cipher.id;\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async addFolder() {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = null;\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n }\n );\n }\n\n async editFolder(folderId: string) {\n const [modal] = await this.modalService.openViewRef(\n FolderAddEditComponent,\n this.folderAddEditModalRef,\n (comp) => {\n comp.folderId = folderId;\n comp.onSavedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n comp.onDeletedFolder.subscribe(async () => {\n modal.close();\n await this.filterComponent.reloadCollectionsAndFolders(this.activeFilter);\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.type = this.activeFilter.cipherType;\n component.folderId = this.folderId === \"none\" ? null : this.folderId;\n if (this.activeFilter.selectedCollectionId != null) {\n const collection = this.filterComponent.collections.fullList.filter(\n (c) => c.id === this.activeFilter.selectedCollectionId\n );\n if (collection.length > 0) {\n component.organizationId = collection[0].organizationId;\n component.collectionIds = [this.activeFilter.selectedCollectionId];\n }\n }\n if (this.activeFilter.selectedFolderId && this.activeFilter.selectedFolder) {\n component.folderId = this.activeFilter.selectedFolderId;\n }\n if (this.activeFilter.selectedOrganizationId) {\n component.organizationId = this.activeFilter.selectedOrganizationId;\n }\n }\n\n async editCipher(cipher: CipherView) {\n return this.editCipherId(cipher?.id);\n }\n\n async editCipherId(id: string) {\n const cipher = await this.cipherService.get(id);\n if (cipher != null && cipher.reprompt != 0) {\n if (!(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = id;\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n\n modal.onClosedPromise().then(() => {\n this.go({ cipherId: null, itemId: null });\n });\n\n return childComponent;\n }\n\n async cloneCipher(cipher: CipherView) {\n const component = await this.editCipher(cipher);\n component.cloneMode = true;\n }\n\n async updateKey() {\n await this.modalService.openViewRef(UpdateKeyComponent, this.updateKeyModalRef);\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n favorites: this.favorites ? true : null,\n type: this.activeFilter.cipherType,\n folderId: this.folderId,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n}\n\n/**\n * Allows backwards compatibility with\n * old links that used the original `cipherId` param\n */\nconst getCipherIdFromParams = (params: Params): string => {\n return params[\"itemId\"] || params[\"cipherId\"];\n};\n","
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n

\n {{ \"vaultItems\" | i18n }}\n \n \n \n {{ \"loading\" | i18n }}\n \n \n

\n
\n \n \n \n {{ \"addItem\" | i18n }}\n \n
\n
\n \n {{ trashCleanupWarning }}\n \n \n \n
\n
\n
\n
\n \n {{ \"updateKeyTitle\" | i18n }}\n
\n
\n

{{ \"updateEncryptionKeyShortDesc\" | i18n }}

\n \n
\n
\n \n
\n
\n \n {{ \"updateBrowser\" | i18n }}\n
\n
\n

{{ \"updateBrowserDesc\" | i18n }}

\n \n {{ \"updateBrowser\" | i18n }}\n \n
\n
\n
\n
\n {{ \"goPremium\" | i18n }}\n
\n
\n

{{ \"premiumUpgradeUnlockFeatures\" | i18n }}

\n \n {{ \"goPremium\" | i18n }}\n \n
\n
\n
\n
\n
\n\n\n\n\n\n\n","import { NgModule } from \"@angular/core\";\n\nimport { VaultModule } from \"../../vault.module\";\n\nimport { IndividualVaultRoutingModule } from \"./individual-vault-routing.module\";\nimport { IndividualVaultComponent } from \"./individual-vault.component\";\n\n@NgModule({\n imports: [VaultModule, IndividualVaultRoutingModule],\n declarations: [IndividualVaultComponent],\n exports: [IndividualVaultComponent],\n})\nexport class IndividualVaultModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { SharedModule } from \"../../../shared.module\";\n\nimport { OrganizationNameBadgeComponent } from \"./organization-name-badge.component\";\n\n@NgModule({\n imports: [SharedModule],\n declarations: [OrganizationNameBadgeComponent],\n exports: [OrganizationNameBadgeComponent],\n})\nexport class OrganizationBadgeModule {}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Component({\n selector: \"app-org-badge\",\n templateUrl: \"organization-name-badge.component.html\",\n})\nexport class OrganizationNameBadgeComponent implements OnInit {\n @Input() organizationName: string;\n @Input() profileName: string;\n\n @Output() onOrganizationClicked = new EventEmitter();\n\n color: string;\n textColor: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit(): void {\n if (this.organizationName == null || this.organizationName === \"\") {\n this.organizationName = this.i18nService.t(\"me\");\n this.color = this.stringToColor(this.profileName.toUpperCase());\n }\n if (this.color == null) {\n this.color = this.stringToColor(this.organizationName.toUpperCase());\n }\n this.textColor = this.pickTextColorBasedOnBgColor();\n }\n\n // This value currently isn't stored anywhere, only calculated in the app-avatar component\n // Once we are allowing org colors to be changed and saved, change this out\n private stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let color = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n color += (\"00\" + value.toString(16)).substr(-2);\n }\n return color;\n }\n\n // There are a few ways to calculate text color for contrast, this one seems to fit accessibility guidelines best.\n // https://stackoverflow.com/a/3943023/6869691\n private pickTextColorBasedOnBgColor() {\n const color = this.color.charAt(0) === \"#\" ? this.color.substring(1, 7) : this.color;\n const r = parseInt(color.substring(0, 2), 16); // hexToR\n const g = parseInt(color.substring(2, 4), 16); // hexToG\n const b = parseInt(color.substring(4, 6), 16); // hexToB\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? \"black !important\" : \"white !important\";\n }\n\n emitOnOrganizationClicked() {\n this.onOrganizationClicked.emit();\n }\n}\n","\n {{ organizationName | ellipsis: 13 }}\n\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { OrganizationVaultComponent } from \"./organization-vault.component\";\nconst routes: Routes = [\n {\n path: \"\",\n component: OrganizationVaultComponent,\n data: { titleId: \"vaults\" },\n },\n];\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationVaultRoutingModule {}\n","import {\n ChangeDetectorRef,\n Component,\n NgZone,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { ActivatedRoute, Params, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { VaultFilter } from \"jslib-angular/modules/vault-filter/models/vault-filter.model\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { EntityEventsComponent } from \"../../../../organizations/manage/entity-events.component\";\nimport { AddEditComponent } from \"../../../../organizations/vault/add-edit.component\";\nimport { AttachmentsComponent } from \"../../../../organizations/vault/attachments.component\";\nimport { CiphersComponent } from \"../../../../organizations/vault/ciphers.component\";\nimport { CollectionsComponent } from \"../../../../organizations/vault/collections.component\";\nimport { OrganizationVaultFilterComponent } from \"../../../vault-filter/organization-vault-filter.component\";\nimport { VaultService } from \"../../vault.service\";\n\nconst BroadcasterSubscriptionId = \"OrgVaultComponent\";\n\n@Component({\n selector: \"app-org-vault\",\n templateUrl: \"organization-vault.component.html\",\n})\nexport class OrganizationVaultComponent implements OnInit, OnDestroy {\n @ViewChild(\"vaultFilter\", { static: true })\n vaultFilterComponent: OrganizationVaultFilterComponent;\n @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"collections\", { read: ViewContainerRef, static: true })\n collectionsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n\n organization: Organization;\n collectionId: string = null;\n type: CipherType = null;\n deleted = false;\n trashCleanupWarning: string = null;\n activeFilter: VaultFilter = new VaultFilter();\n\n // This is a hack to avoid redundant api calls that fetch OrganizationVaultFilterComponent collections\n // When it makes sense to do so we should leverage some other communication method for change events that isn't directly tied to the query param for organizationId\n // i.e. exposing the VaultFiltersService to the OrganizationSwitcherComponent to make relevant updates from a change event instead of just depending on the router\n firstLoaded = true;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private syncService: SyncService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private messagingService: MessagingService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService,\n private vaultService: VaultService,\n private cipherService: CipherService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n ngOnInit() {\n this.trashCleanupWarning = this.i18nService.t(\"trashCleanupWarningSelfHosted\");\n this.route.parent.params.subscribe(async (params: any) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.vaultFilterComponent.organization = this.organization;\n this.ciphersComponent.organization = this.organization;\n\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.ciphersComponent.searchText = this.vaultFilterComponent.searchText = qParams.search;\n if (!this.organization.canViewAllCollections) {\n await this.syncService.fullSync(false);\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await Promise.all([\n this.vaultFilterComponent.reloadCollectionsAndFolders(),\n this.ciphersComponent.refresh(),\n ]);\n this.changeDetectorRef.detectChanges();\n }\n break;\n }\n });\n });\n }\n\n if (this.firstLoaded) {\n await this.vaultFilterComponent.reloadCollectionsAndFolders();\n }\n this.firstLoaded = true;\n\n await this.ciphersComponent.reload();\n\n if (qParams.viewEvents != null) {\n const cipher = this.ciphersComponent.ciphers.filter((c) => c.id === qParams.viewEvents);\n if (cipher.length > 0) {\n this.viewEvents(cipher[0]);\n }\n }\n\n this.route.queryParams.subscribe(async (params) => {\n const cipherId = getCipherIdFromParams(params);\n if (cipherId) {\n if (\n // Handle users with implicit collection access since they use the admin endpoint\n this.organization.canEditAnyCollection ||\n (await this.cipherService.get(cipherId)) != null\n ) {\n this.editCipherId(cipherId);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unknownCipher\")\n );\n this.router.navigate([], {\n queryParams: { cipherId: null, itemId: null },\n queryParamsHandling: \"merge\",\n });\n }\n }\n });\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async applyVaultFilter(vaultFilter: VaultFilter) {\n this.ciphersComponent.showAddNew = vaultFilter.status !== \"trash\";\n this.activeFilter = vaultFilter;\n await this.ciphersComponent.reload(this.buildFilter(), vaultFilter.status === \"trash\");\n this.vaultFilterComponent.searchPlaceholder =\n this.vaultService.calculateSearchBarLocalizationString(this.activeFilter);\n this.go();\n }\n\n private buildFilter(): (cipher: CipherView) => boolean {\n return (cipher) => {\n let cipherPassesFilter = true;\n if (this.activeFilter.status === \"favorites\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.favorite;\n }\n if (this.activeFilter.status === \"trash\" && cipherPassesFilter) {\n cipherPassesFilter = cipher.isDeleted;\n }\n if (this.activeFilter.cipherType != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.type === this.activeFilter.cipherType;\n }\n if (\n this.activeFilter.selectedFolder != null &&\n this.activeFilter.selectedFolderId != \"none\" &&\n cipherPassesFilter\n ) {\n cipherPassesFilter = cipher.folderId === this.activeFilter.selectedFolderId;\n }\n if (this.activeFilter.selectedCollectionId != null && cipherPassesFilter) {\n cipherPassesFilter =\n cipher.collectionIds != null &&\n cipher.collectionIds.indexOf(this.activeFilter.selectedCollectionId) > -1;\n }\n if (this.activeFilter.selectedOrganizationId != null && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === this.activeFilter.selectedOrganizationId;\n }\n if (this.activeFilter.myVaultOnly && cipherPassesFilter) {\n cipherPassesFilter = cipher.organizationId === null;\n }\n return cipherPassesFilter;\n };\n }\n\n filterSearchText(searchText: string) {\n this.ciphersComponent.searchText = searchText;\n this.ciphersComponent.search(200);\n }\n\n async editCipherAttachments(cipher: CipherView) {\n if (this.organization.maxStorageGb == null || this.organization.maxStorageGb === 0) {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: cipher.organizationId });\n return;\n }\n\n let madeAttachmentChanges = false;\n\n const [modal] = await this.modalService.openViewRef(\n AttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n comp.onUploadedAttachment.subscribe(() => (madeAttachmentChanges = true));\n comp.onDeletedAttachment.subscribe(() => (madeAttachmentChanges = true));\n }\n );\n\n modal.onClosed.subscribe(async () => {\n if (madeAttachmentChanges) {\n await this.ciphersComponent.refresh();\n }\n madeAttachmentChanges = false;\n });\n }\n\n async editCipherCollections(cipher: CipherView) {\n const [modal] = await this.modalService.openViewRef(\n CollectionsComponent,\n this.collectionsModalRef,\n (comp) => {\n if (this.organization.canEditAnyCollection) {\n comp.collectionIds = cipher.collectionIds;\n comp.collections = this.vaultFilterComponent.collections.fullList.filter(\n (c) => !c.readOnly\n );\n }\n comp.organization = this.organization;\n comp.cipherId = cipher.id;\n comp.onSavedCollections.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async addCipher() {\n const component = await this.editCipher(null);\n component.organizationId = this.organization.id;\n component.type = this.type;\n if (this.organization.canEditAnyCollection) {\n component.collections = this.vaultFilterComponent.collections.fullList.filter(\n (c) => !c.readOnly\n );\n }\n if (this.collectionId != null) {\n component.collectionIds = [this.collectionId];\n }\n }\n\n async editCipher(cipher: CipherView) {\n return this.editCipherId(cipher?.id);\n }\n\n async editCipherId(cipherId: string) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher != null && cipher.reprompt != 0) {\n if (!(await this.passwordRepromptService.showPasswordPrompt())) {\n this.go({ cipherId: null, itemId: null });\n return;\n }\n }\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.organization = this.organization;\n comp.cipherId = cipherId;\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n\n modal.onClosedPromise().then(() => {\n this.go({ cipherId: null, itemId: null });\n });\n\n return childComponent;\n }\n\n async cloneCipher(cipher: CipherView) {\n const component = await this.editCipher(cipher);\n component.cloneMode = true;\n component.organizationId = this.organization.id;\n if (this.organization.canEditAnyCollection) {\n component.collections = this.vaultFilterComponent.collections.fullList.filter(\n (c) => !c.readOnly\n );\n }\n // Regardless of Admin state, the collection Ids need to passed manually as they are not assigned value\n // in the add-edit componenet\n component.collectionIds = cipher.collectionIds;\n }\n\n async viewEvents(cipher: CipherView) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = cipher.name;\n comp.organizationId = this.organization.id;\n comp.entityId = cipher.id;\n comp.showUser = true;\n comp.entity = \"cipher\";\n });\n }\n\n private clearFilters() {\n this.collectionId = null;\n this.type = null;\n this.deleted = false;\n }\n\n private go(queryParams: any = null) {\n if (queryParams == null) {\n queryParams = {\n type: this.type,\n collectionId: this.collectionId,\n deleted: this.deleted ? true : null,\n };\n }\n\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: queryParams,\n queryParamsHandling: \"merge\",\n replaceUrl: true,\n });\n }\n}\n\n/**\n * Allows backwards compatibility with\n * old links that used the original `cipherId` param\n */\nconst getCipherIdFromParams = (params: Params): string => {\n return params[\"itemId\"] || params[\"cipherId\"];\n};\n","
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n

\n {{ \"vaultItems\" | i18n }}\n \n \n \n {{ \"loading\" | i18n }}\n \n \n

\n
\n \n \n \n {{ \"addItem\" | i18n }}\n \n
\n
\n \n {{ trashCleanupWarning }}\n \n \n \n
\n
\n
\n\n\n\n\n","import { NgModule } from \"@angular/core\";\n\nimport { VaultModule } from \"../../vault.module\";\n\nimport { OrganizationVaultRoutingModule } from \"./organization-vault-routing.module\";\nimport { OrganizationVaultComponent } from \"./organization-vault.component\";\n\n@NgModule({\n imports: [VaultModule, OrganizationVaultRoutingModule],\n declarations: [OrganizationVaultComponent],\n exports: [OrganizationVaultComponent],\n})\nexport class OrganizationVaultModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule } from \"../loose-components.module\";\nimport { SharedModule } from \"../shared.module\";\nimport { VaultFilterModule } from \"../vault-filter/vault-filter.module\";\n\nimport { VaultService } from \"./vault.service\";\n\n@NgModule({\n imports: [SharedModule, VaultFilterModule, LooseComponentsModule],\n exports: [SharedModule, VaultFilterModule, LooseComponentsModule],\n providers: [\n {\n provide: VaultService,\n useClass: VaultService,\n },\n ],\n})\nexport class VaultModule {}\n","import { VaultFilter } from \"jslib-angular/modules/vault-filter/models/vault-filter.model\";\n\nexport class VaultService {\n calculateSearchBarLocalizationString(vaultFilter: VaultFilter): string {\n if (vaultFilter.status === \"favorites\") {\n return \"searchFavorites\";\n }\n if (vaultFilter.status === \"trash\") {\n return \"searchTrash\";\n }\n if (vaultFilter.cipherType != null) {\n return \"searchType\";\n }\n if (vaultFilter.selectedFolderId != null && vaultFilter.selectedFolderId != \"none\") {\n return \"searchFolder\";\n }\n if (vaultFilter.selectedCollectionId != null) {\n return \"searchCollection\";\n }\n if (vaultFilter.selectedOrganizationId != null) {\n return \"searchOrganization\";\n }\n if (vaultFilter.myVaultOnly) {\n return \"searchMyVault\";\n }\n\n return \"searchVault\";\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { Permissions } from \"jslib-common/enums/permissions\";\n\n@Injectable()\nexport class PermissionsGuard implements CanActivate {\n constructor(\n private router: Router,\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private syncService: SyncService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n // TODO: We need to fix this issue once and for all.\n if ((await this.syncService.getLastSync()) == null) {\n await this.syncService.fullSync(false);\n }\n\n const org = await this.organizationService.get(route.params.organizationId);\n if (org == null) {\n return this.router.createUrlTree([\"/\"]);\n }\n\n if (!org.isOwner && !org.enabled) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"organizationIsDisabled\")\n );\n return this.router.createUrlTree([\"/\"]);\n }\n\n const permissions = route.data == null ? [] : (route.data.permissions as Permissions[]);\n if (permissions != null && !org.hasAnyPermission(permissions)) {\n // Handle linkable ciphers for organizations the user only has view access to\n // https://bitwarden.atlassian.net/browse/EC-203\n const cipherId =\n state.root.queryParamMap.get(\"itemId\") || state.root.queryParamMap.get(\"cipherId\");\n if (cipherId) {\n return this.router.createUrlTree([\"/vault\"], {\n queryParams: {\n itemId: cipherId,\n },\n });\n }\n\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"accessDenied\"));\n return this.router.createUrlTree([\"/\"]);\n }\n\n return true;\n }\n}\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nimport { NavigationPermissionsService } from \"../services/navigation-permissions.service\";\n\nconst BroadcasterSubscriptionId = \"OrganizationLayoutComponent\";\n\n@Component({\n selector: \"app-organization-layout\",\n templateUrl: \"organization-layout.component.html\",\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n organization: Organization;\n businessTokenPromise: Promise;\n private organizationId: string;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone\n ) {}\n\n ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n this.route.params.subscribe(async (params: any) => {\n this.organizationId = params.organizationId;\n await this.load();\n });\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"updatedOrgLicense\":\n await this.load();\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n }\n\n get showManageTab(): boolean {\n return NavigationPermissionsService.canAccessManage(this.organization);\n }\n\n get showToolsTab(): boolean {\n return NavigationPermissionsService.canAccessTools(this.organization);\n }\n\n get showSettingsTab(): boolean {\n return NavigationPermissionsService.canAccessSettings(this.organization);\n }\n\n get toolsRoute(): string {\n return this.organization.canAccessImportExport\n ? \"tools/import\"\n : \"tools/exposed-passwords-report\";\n }\n\n get manageRoute(): string {\n let route: string;\n switch (true) {\n case this.organization.canManageUsers:\n route = \"manage/people\";\n break;\n case this.organization.canViewAssignedCollections || this.organization.canViewAllCollections:\n route = \"manage/collections\";\n break;\n case this.organization.canManageGroups:\n route = \"manage/groups\";\n break;\n case this.organization.canManagePolicies:\n route = \"manage/policies\";\n break;\n case this.organization.canManageSso:\n route = \"manage/sso\";\n break;\n case this.organization.canAccessEventLogs:\n route = \"manage/events\";\n break;\n }\n return route;\n }\n}\n","\n\n\n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { OrganizationUserBulkConfirmRequest } from \"jslib-common/models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"jslib-common/models/request/organizationUserBulkRequest\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-confirm\",\n templateUrl: \"bulk-confirm.component.html\",\n})\nexport class BulkConfirmComponent implements OnInit {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n excludedUsers: BulkUserDetails[];\n filteredUsers: BulkUserDetails[];\n publicKeys: Map = new Map();\n fingerprints: Map = new Map();\n statuses: Map = new Map();\n\n loading = true;\n done = false;\n error: string;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n this.excludedUsers = this.users.filter((u) => !this.isAccepted(u));\n this.filteredUsers = this.users.filter((u) => this.isAccepted(u));\n\n if (this.filteredUsers.length <= 0) {\n this.done = true;\n }\n\n const response = await this.getPublicKeys();\n\n for (const entry of response.data) {\n const publicKey = Utils.fromB64ToArray(entry.key);\n const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.publicKeys.set(entry.id, publicKey);\n this.fingerprints.set(entry.id, fingerprint.join(\"-\"));\n }\n }\n\n this.loading = false;\n }\n\n async submit() {\n this.loading = true;\n try {\n const key = await this.getCryptoKey();\n const userIdsWithKeys: any[] = [];\n for (const user of this.filteredUsers) {\n const publicKey = this.publicKeys.get(user.id);\n if (publicKey == null) {\n continue;\n }\n const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer);\n userIdsWithKeys.push({\n id: user.id,\n key: encryptedKey.encryptedString,\n });\n }\n const response = await this.postConfirmRequest(userIdsWithKeys);\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkConfirmMessage\");\n this.statuses.set(entry.id, error);\n });\n\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n this.loading = false;\n }\n\n protected isAccepted(user: BulkUserDetails) {\n return user.status === OrganizationUserStatusType.Accepted;\n }\n\n protected async getPublicKeys() {\n const request = new OrganizationUserBulkRequest(this.filteredUsers.map((user) => user.id));\n return await this.apiService.postOrganizationUsersPublicKey(this.organizationId, request);\n }\n\n protected getCryptoKey() {\n return this.cryptoService.getOrgKey(this.organizationId);\n }\n\n protected async postConfirmRequest(userIdsWithKeys: any[]) {\n const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n return await this.apiService.postOrganizationUserBulkConfirm(this.organizationId, request);\n }\n}\n","\n","import { Component, Input } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationUserBulkRequest } from \"jslib-common/models/request/organizationUserBulkRequest\";\n\nimport { BulkUserDetails } from \"./bulk-status.component\";\n\n@Component({\n selector: \"app-bulk-remove\",\n templateUrl: \"bulk-remove.component.html\",\n})\nexport class BulkRemoveComponent {\n @Input() organizationId: string;\n @Input() users: BulkUserDetails[];\n\n statuses: Map = new Map();\n\n loading = false;\n done = false;\n error: string;\n\n constructor(protected apiService: ApiService, protected i18nService: I18nService) {}\n\n async submit() {\n this.loading = true;\n try {\n const response = await this.deleteUsers();\n\n response.data.forEach((entry) => {\n const error = entry.error !== \"\" ? entry.error : this.i18nService.t(\"bulkRemovedMessage\");\n this.statuses.set(entry.id, error);\n });\n this.done = true;\n } catch (e) {\n this.error = e.message;\n }\n\n this.loading = false;\n }\n\n protected async deleteUsers() {\n const request = new OrganizationUserBulkRequest(this.users.map((user) => user.id));\n return await this.apiService.deleteManyOrganizationUsers(this.organizationId, request);\n }\n}\n","
\n
\n
\n
\n

\n {{ \"removeUsers\" | i18n }}\n

\n \n ×\n \n
\n
\n \n {{ \"noSelectedUsersApplicable\" | i18n }}\n \n \n {{ error }}\n \n \n 0 && !error\">\n {{ \"removeUsersWarning\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}
\n \n \n \n {{ user.email }}\n {{ user.name }}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n \n {{ user.email }}\n {{ user.name }}\n \n {{ statuses.get(user.id) }}\n \n {{ \"bulkFilteredMessage\" | i18n }}\n
\n
\n
\n
\n 0\"\n [disabled]=\"loading\"\n (click)=\"submit()\"\n >\n \n {{ \"removeUsers\" | i18n }}\n \n \n
\n
\n
\n
\n","
\n
\n
\n
\n

\n {{ \"bulkConfirmStatus\" | i18n }}\n

\n \n ×\n \n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"user\" | i18n }}{{ \"status\" | i18n }}
\n \n \n {{ item.user.email }}\n {{ item.user.name }}\n \n {{ item.message }}\n \n {{ item.message }}\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { ProviderUserStatusType } from \"jslib-common/enums/providerUserStatusType\";\n\nexport interface BulkUserDetails {\n id: string;\n name: string;\n email: string;\n status: OrganizationUserStatusType | ProviderUserStatusType;\n}\n\ntype BulkStatusEntry = {\n user: BulkUserDetails;\n error: boolean;\n message: string;\n};\n\n@Component({\n selector: \"app-bulk-status\",\n templateUrl: \"bulk-status.component.html\",\n})\nexport class BulkStatusComponent {\n users: BulkStatusEntry[];\n loading = false;\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { CollectionRequest } from \"jslib-common/models/request/collectionRequest\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { GroupResponse } from \"jslib-common/models/response/groupResponse\";\n\n@Component({\n selector: \"app-collection-add-edit\",\n templateUrl: \"collection-add-edit.component.html\",\n})\nexport class CollectionAddEditComponent implements OnInit {\n @Input() collectionId: string;\n @Input() organizationId: string;\n @Input() canSave: boolean;\n @Input() canDelete: boolean;\n @Output() onSavedCollection = new EventEmitter();\n @Output() onDeletedCollection = new EventEmitter();\n\n loading = true;\n editMode = false;\n accessGroups = false;\n title: string;\n name: string;\n externalId: string;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n private orgKey: SymmetricCryptoKey;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n const organization = await this.organizationService.get(this.organizationId);\n this.accessGroups = organization.useGroups;\n this.editMode = this.loading = this.collectionId != null;\n if (this.accessGroups) {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n this.groups = groupsResponse.data\n .map((r) => r)\n .sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editCollection\");\n try {\n const collection = await this.apiService.getCollectionDetails(\n this.organizationId,\n this.collectionId\n );\n this.name = await this.cryptoService.decryptToUtf8(\n new EncString(collection.name),\n this.orgKey\n );\n this.externalId = collection.externalId;\n if (collection.groups != null && this.groups.length > 0) {\n collection.groups.forEach((s) => {\n const group = this.groups.filter((g) => !g.accessAll && g.id === s.id);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n (group[0] as any).readOnly = s.readOnly;\n (group[0] as any).hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"addCollection\");\n }\n\n this.groups.forEach((g) => {\n if (g.accessAll) {\n (g as any).checked = true;\n }\n });\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n if (g.accessAll) {\n return;\n }\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n (g as any).hidePasswords = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach((g) => this.check(g, select));\n }\n\n async submit() {\n if (this.orgKey == null) {\n throw new Error(\"No encryption key for this organization.\");\n }\n\n const request = new CollectionRequest();\n request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;\n request.externalId = this.externalId;\n request.groups = this.groups\n .filter((g) => (g as any).checked && !g.accessAll)\n .map(\n (g) => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords)\n );\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putCollection(\n this.organizationId,\n this.collectionId,\n request\n );\n } else {\n this.formPromise = this.apiService.postCollection(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedCollectionId\" : \"createdCollectionId\", this.name)\n );\n this.onSavedCollection.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteCollectionConfirmation\"),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteCollection(this.organizationId, this.collectionId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", this.name)\n );\n this.onDeletedCollection.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n \n \n
\n
\n \n \n {{ \"externalIdDesc\" | i18n }}\n
\n \n

\n {{ \"groupAccess\" | i18n }}\n
\n \n \n
\n

\n
\n {{ \"noGroupsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 {{ \"name\" | i18n }}{{ \"hidePasswords\" | i18n }}{{ \"readOnly\" | i18n }}
\n \n \n {{ g.name }}\n \n \n {{ \"groupAccessAllItems\" | i18n }}\n \n \n \n \n \n
\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport {\n CollectionDetailsResponse,\n CollectionResponse,\n} from \"jslib-common/models/response/collectionResponse\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\nimport { EntityUsersComponent } from \"../../modules/organizations/manage/entity-users.component\";\n\nimport { CollectionAddEditComponent } from \"./collection-add-edit.component\";\n\n@Component({\n selector: \"app-org-manage-collections\",\n templateUrl: \"collections.component.html\",\n})\nexport class CollectionsComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"usersTemplate\", { read: ViewContainerRef, static: true })\n usersModalRef: ViewContainerRef;\n\n loading = true;\n organization: Organization;\n canCreate = false;\n organizationId: string;\n collections: CollectionView[];\n assignedCollections: CollectionView[];\n pagedCollections: CollectionView[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedCollectionsCount = 0;\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private collectionService: CollectionService,\n private modalService: ModalService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private searchService: SearchService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n });\n });\n }\n\n async load() {\n this.organization = await this.organizationService.get(this.organizationId);\n this.canCreate = this.organization.canCreateNewCollections;\n\n const decryptCollections = async (r: ListResponse) => {\n const collections = r.data\n .filter((c) => c.organizationId === this.organizationId)\n .map((d) => new Collection(new CollectionData(d as CollectionDetailsResponse)));\n return await this.collectionService.decryptMany(collections);\n };\n\n if (this.organization.canViewAssignedCollections) {\n const response = await this.apiService.getUserCollections();\n this.assignedCollections = await decryptCollections(response);\n }\n\n if (this.organization.canViewAllCollections) {\n const response = await this.apiService.getCollections(this.organizationId);\n this.collections = await decryptCollections(response);\n } else {\n this.collections = this.assignedCollections;\n }\n\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.collections || this.collections.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCollections.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedCollectionsCount > this.pageSize) {\n pagedSize = this.pagedCollectionsCount;\n }\n if (this.collections.length > pagedLength) {\n this.pagedCollections = this.pagedCollections.concat(\n this.collections.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedCollectionsCount = this.pagedCollections.length;\n this.didScroll = this.pagedCollections.length > this.pageSize;\n }\n\n async edit(collection: CollectionView) {\n const canCreate = collection == null && this.canCreate;\n const canEdit = collection != null && this.canEdit(collection);\n const canDelete = collection != null && this.canDelete(collection);\n\n if (!(canCreate || canEdit || canDelete)) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingPermissions\"));\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n CollectionAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.collectionId = collection != null ? collection.id : null;\n comp.canSave = canCreate || canEdit;\n comp.canDelete = canDelete;\n comp.onSavedCollection.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeletedCollection.subscribe(() => {\n modal.close();\n this.removeCollection(collection);\n });\n }\n );\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(collection: CollectionView) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteCollectionConfirmation\"),\n collection.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteCollection(this.organizationId, collection.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedCollectionId\", collection.name)\n );\n this.removeCollection(collection);\n } catch (e) {\n this.logService.error(e);\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingPermissions\"));\n }\n }\n\n async users(collection: CollectionView) {\n const [modal] = await this.modalService.openViewRef(\n EntityUsersComponent,\n this.usersModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.entity = \"collection\";\n comp.entityId = collection.id;\n comp.entityName = collection.name;\n\n comp.onEditedUsers.subscribe(() => {\n this.load();\n modal.close();\n });\n }\n );\n }\n\n async resetPaging() {\n this.pagedCollections = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.collections && this.collections.length > this.pageSize;\n }\n\n canEdit(collection: CollectionView) {\n if (this.organization.canEditAnyCollection) {\n return true;\n }\n\n if (\n this.organization.canEditAssignedCollections &&\n this.assignedCollections.some((c) => c.id === collection.id)\n ) {\n return true;\n }\n return false;\n }\n\n canDelete(collection: CollectionView) {\n if (this.organization.canDeleteAnyCollection) {\n return true;\n }\n\n if (\n this.organization.canDeleteAssignedCollections &&\n this.assignedCollections.some((c) => c.id === collection.id)\n ) {\n return true;\n }\n return false;\n }\n\n private removeCollection(collection: CollectionView) {\n const index = this.collections.indexOf(collection);\n if (index > -1) {\n this.collections.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","
\n

{{ \"collections\" | i18n }}

\n
\n
\n \n \n
\n \n \n {{ \"newCollection\" | i18n }}\n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noCollectionsInList\" | i18n }}

\n \n \n \n \n
{{ c.name }}\n \n \n
\n \n \n \n
\n \n \n {{ \"users\" | i18n }}\n \n \n \n {{ \"delete\" | i18n }}\n \n
\n
\n \n \n \n \n\n\n\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\n\nimport { EventService } from \"../../services/event.service\";\n\n@Component({\n selector: \"app-entity-events\",\n templateUrl: \"entity-events.component.html\",\n})\nexport class EntityEventsComponent implements OnInit {\n @Input() name: string;\n @Input() entity: \"user\" | \"cipher\";\n @Input() entityId: string;\n @Input() organizationId: string;\n @Input() providerId: string;\n @Input() showUser = false;\n\n loading = true;\n loaded = false;\n events: any[];\n start: string;\n end: string;\n continuationToken: string;\n refreshPromise: Promise;\n morePromise: Promise;\n\n private orgUsersUserIdMap = new Map();\n private orgUsersIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private eventService: EventService,\n private platformUtilsService: PlatformUtilsService,\n private userNamePipe: UserNamePipe,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const defaultDates = this.eventService.getDefaultDateFilters();\n this.start = defaultDates[0];\n this.end = defaultDates[1];\n await this.load();\n }\n\n async load() {\n if (this.showUser) {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n }\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n async loadEvents(clearExisting: boolean) {\n if (this.refreshPromise != null || this.morePromise != null) {\n return;\n }\n\n let dates: string[] = null;\n try {\n dates = this.eventService.formatDateFilters(this.start, this.end);\n } catch (e) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidDateRange\")\n );\n return;\n }\n\n this.loading = true;\n let response: ListResponse;\n try {\n let promise: Promise;\n if (this.entity === \"user\" && this.providerId) {\n promise = this.apiService.getEventsProviderUser(\n this.providerId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else if (this.entity === \"user\") {\n promise = this.apiService.getEventsOrganizationUser(\n this.organizationId,\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n } else {\n promise = this.apiService.getEventsCipher(\n this.entityId,\n dates[0],\n dates[1],\n clearExisting ? null : this.continuationToken\n );\n }\n if (clearExisting) {\n this.refreshPromise = promise;\n } else {\n this.morePromise = promise;\n }\n response = await promise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.continuationToken = response.continuationToken;\n const events = await Promise.all(\n response.data.map(async (r) => {\n const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n const eventInfo = await this.eventService.getEventInfo(r);\n const user =\n this.showUser && userId != null && this.orgUsersUserIdMap.has(userId)\n ? this.orgUsersUserIdMap.get(userId)\n : null;\n return {\n message: eventInfo.message,\n appIcon: eventInfo.appIcon,\n appName: eventInfo.appName,\n userId: userId,\n userName: user != null ? user.name : this.showUser ? this.i18nService.t(\"unknown\") : null,\n userEmail: user != null ? user.email : this.showUser ? \"\" : null,\n date: r.date,\n ip: r.ipAddress,\n type: r.type,\n };\n })\n );\n\n if (!clearExisting && this.events != null && this.events.length > 0) {\n this.events = this.events.concat(events);\n } else {\n this.events = events;\n }\n\n this.loading = false;\n this.morePromise = null;\n this.refreshPromise = null;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"eventLogs\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n
\n \n \n -\n \n \n
\n \n \n {{ \"refresh\" | i18n }}\n \n
\n
\n
\n {{ \"noEventsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n
\n \n
\n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ProviderService } from \"jslib-common/abstractions/provider.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\n\nimport { BaseEventsComponent } from \"../../common/base.events.component\";\nimport { EventService } from \"../../services/event.service\";\n\n@Component({\n selector: \"app-org-events\",\n templateUrl: \"events.component.html\",\n})\nexport class EventsComponent extends BaseEventsComponent implements OnInit {\n exportFileName = \"org-events\";\n organizationId: string;\n organization: Organization;\n\n private orgUsersUserIdMap = new Map();\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n eventService: EventService,\n i18nService: I18nService,\n exportService: ExportService,\n platformUtilsService: PlatformUtilsService,\n private router: Router,\n logService: LogService,\n private userNamePipe: UserNamePipe,\n private organizationService: OrganizationService,\n private providerService: ProviderService\n ) {\n super(eventService, i18nService, exportService, platformUtilsService, logService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.organization = await this.organizationService.get(this.organizationId);\n if (this.organization == null || !this.organization.useEvents) {\n this.router.navigate([\"/organizations\", this.organizationId]);\n return;\n }\n\n await this.load();\n });\n }\n\n async load() {\n const response = await this.apiService.getOrganizationUsers(this.organizationId);\n response.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n });\n\n if (this.organization.providerId != null) {\n try {\n const provider = await this.providerService.get(this.organization.providerId);\n if (\n provider != null &&\n (await this.providerService.get(this.organization.providerId)).canManageUsers\n ) {\n const providerUsersResponse = await this.apiService.getProviderUsers(\n this.organization.providerId\n );\n providerUsersResponse.data.forEach((u) => {\n const name = this.userNamePipe.transform(u);\n this.orgUsersUserIdMap.set(u.userId, {\n name: `${name} (${this.organization.providerName})`,\n email: u.email,\n });\n });\n }\n } catch (e) {\n this.logService.warning(e);\n }\n }\n\n await this.loadEvents(true);\n this.loaded = true;\n }\n\n protected requestEvents(startDate: string, endDate: string, continuationToken: string) {\n return this.apiService.getEventsOrganization(\n this.organizationId,\n startDate,\n endDate,\n continuationToken\n );\n }\n\n protected getUserName(r: EventResponse, userId: string) {\n if (userId == null) {\n return null;\n }\n\n if (this.orgUsersUserIdMap.has(userId)) {\n return this.orgUsersUserIdMap.get(userId);\n }\n\n if (r.providerId != null && r.providerId === this.organization.providerId) {\n return {\n name: this.organization.providerName,\n };\n }\n\n return null;\n }\n}\n","
\n

{{ \"eventLogs\" | i18n }}

\n
\n
\n \n \n -\n \n \n
\n
\n \n \n {{ \"refresh\" | i18n }}\n \n \n
\n \n \n {{ \"export\" | i18n }}\n \n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noEventsInList\" | i18n }}

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"timestamp\" | i18n }}\n {{ \"device\" | i18n }}\n {{ \"user\" | i18n }}{{ \"event\" | i18n }}
{{ e.date | date: \"medium\" }}\n \n {{ e.appName }}, {{ e.ip }}\n \n {{ e.userName }}\n
\n \n \n {{ \"loadMore\" | i18n }}\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { GroupRequest } from \"jslib-common/models/request/groupRequest\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { CollectionDetailsResponse } from \"jslib-common/models/response/collectionResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-group-add-edit\",\n templateUrl: \"group-add-edit.component.html\",\n})\nexport class GroupAddEditComponent implements OnInit {\n @Input() groupId: string;\n @Input() organizationId: string;\n @Output() onSavedGroup = new EventEmitter();\n @Output() onDeletedGroup = new EventEmitter();\n\n loading = true;\n editMode = false;\n title: string;\n name: string;\n externalId: string;\n access: \"all\" | \"selected\" = \"selected\";\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.groupId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editGroup\");\n try {\n const group = await this.apiService.getGroupDetails(this.organizationId, this.groupId);\n this.access = group.accessAll ? \"all\" : \"selected\";\n this.name = group.name;\n this.externalId = group.externalId;\n if (group.collections != null && this.collections != null) {\n group.collections.forEach((s) => {\n const collection = this.collections.filter((c) => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"addGroup\");\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n\n async submit() {\n const request = new GroupRequest();\n request.name = this.name;\n request.externalId = this.externalId;\n request.accessAll = this.access === \"all\";\n if (!request.accessAll) {\n request.collections = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n this.formPromise = this.apiService.putGroup(this.organizationId, this.groupId, request);\n } else {\n this.formPromise = this.apiService.postGroup(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedGroupId\" : \"createdGroupId\", this.name)\n );\n this.onSavedGroup.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteGroup(this.organizationId, this.groupId);\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", this.name)\n );\n this.onDeletedGroup.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n
\n \n \n
\n
\n \n \n {{ \"externalIdDesc\" | i18n }}\n
\n

\n
\n {{ \"accessControl\" | i18n }}\n \n \n \n
\n
\n \n \n
\n

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n  \n {{ \"name\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n {{ \"readOnly\" | i18n }}\n \n \n \n \n \n \n \n \n {{ c.name }}\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","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { GroupResponse } from \"jslib-common/models/response/groupResponse\";\n\nimport { EntityUsersComponent } from \"../../modules/organizations/manage/entity-users.component\";\n\nimport { GroupAddEditComponent } from \"./group-add-edit.component\";\n\n@Component({\n selector: \"app-org-groups\",\n templateUrl: \"groups.component.html\",\n})\nexport class GroupsComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"usersTemplate\", { read: ViewContainerRef, static: true })\n usersModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n groups: GroupResponse[];\n pagedGroups: GroupResponse[];\n searchText: string;\n\n protected didScroll = false;\n protected pageSize = 100;\n\n private pagedGroupsCount = 0;\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private i18nService: I18nService,\n private modalService: ModalService,\n private platformUtilsService: PlatformUtilsService,\n private router: Router,\n private searchService: SearchService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n const organization = await this.organizationService.get(this.organizationId);\n if (organization == null || !organization.useGroups) {\n this.router.navigate([\"/organizations\", this.organizationId]);\n return;\n }\n await this.load();\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getGroups(this.organizationId);\n const groups = response.data != null && response.data.length > 0 ? response.data : [];\n groups.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.groups = groups;\n this.resetPaging();\n this.loading = false;\n }\n\n loadMore() {\n if (!this.groups || this.groups.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedGroups.length;\n let pagedSize = this.pageSize;\n if (pagedLength === 0 && this.pagedGroupsCount > this.pageSize) {\n pagedSize = this.pagedGroupsCount;\n }\n if (this.groups.length > pagedLength) {\n this.pagedGroups = this.pagedGroups.concat(\n this.groups.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedGroupsCount = this.pagedGroups.length;\n this.didScroll = this.pagedGroups.length > this.pageSize;\n }\n\n async edit(group: GroupResponse) {\n const [modal] = await this.modalService.openViewRef(\n GroupAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.groupId = group != null ? group.id : null;\n comp.onSavedGroup.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeletedGroup.subscribe(() => {\n modal.close();\n this.removeGroup(group);\n });\n }\n );\n }\n\n add() {\n this.edit(null);\n }\n\n async delete(group: GroupResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteGroupConfirmation\"),\n group.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteGroup(this.organizationId, group.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"deletedGroupId\", group.name)\n );\n this.removeGroup(group);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async users(group: GroupResponse) {\n const [modal] = await this.modalService.openViewRef(\n EntityUsersComponent,\n this.usersModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.entity = \"group\";\n comp.entityId = group.id;\n comp.entityName = group.name;\n\n comp.onEditedUsers.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async resetPaging() {\n this.pagedGroups = [];\n this.loadMore();\n }\n\n isSearching() {\n return this.searchService.isSearchable(this.searchText);\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.groups && this.groups.length > this.pageSize;\n }\n\n private removeGroup(group: GroupResponse) {\n const index = this.groups.indexOf(group);\n if (index > -1) {\n this.groups.splice(index, 1);\n this.resetPaging();\n }\n }\n}\n","
\n

{{ \"groups\" | i18n }}

\n
\n
\n \n \n
\n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noGroupsInList\" | i18n }}

\n \n \n \n \n {{ g.name }}\n \n \n \n \n \n \n \n\n\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-manage\",\n templateUrl: \"manage.component.html\",\n})\nexport class ManageComponent implements OnInit {\n organization: Organization;\n accessPolicies = false;\n accessGroups = false;\n accessEvents = false;\n accessSso = false;\n\n constructor(private route: ActivatedRoute, private organizationService: OrganizationService) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.accessPolicies = this.organization.usePolicies;\n this.accessSso = this.organization.useSso;\n this.accessEvents = this.organization.useEvents;\n this.accessGroups = this.organization.useGroups;\n });\n }\n}\n","
\n
\n
\n
\n
{{ \"manage\" | i18n }}
\n
\n \n {{ \"people\" | i18n }}\n \n \n {{ \"collections\" | i18n }}\n \n \n {{ \"groups\" | i18n }}\n \n \n {{ \"policies\" | i18n }}\n \n \n {{ \"singleSignOn\" | i18n }}\n \n \n {{ \"eventLogs\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { SearchPipe } from \"jslib-angular/pipes/search.pipe\";\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ValidationService } from \"jslib-angular/services/validation.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { OrganizationKeysRequest } from \"jslib-common/models/request/organizationKeysRequest\";\nimport { OrganizationUserBulkRequest } from \"jslib-common/models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"jslib-common/models/request/organizationUserConfirmRequest\";\nimport { ListResponse } from \"jslib-common/models/response/listResponse\";\nimport { OrganizationUserBulkResponse } from \"jslib-common/models/response/organizationUserBulkResponse\";\nimport { OrganizationUserUserDetailsResponse } from \"jslib-common/models/response/organizationUserResponse\";\n\nimport { BasePeopleComponent } from \"../../common/base.people.component\";\n\nimport { BulkConfirmComponent } from \"./bulk/bulk-confirm.component\";\nimport { BulkRemoveComponent } from \"./bulk/bulk-remove.component\";\nimport { BulkStatusComponent } from \"./bulk/bulk-status.component\";\nimport { EntityEventsComponent } from \"./entity-events.component\";\nimport { ResetPasswordComponent } from \"./reset-password.component\";\nimport { UserAddEditComponent } from \"./user-add-edit.component\";\nimport { UserGroupsComponent } from \"./user-groups.component\";\n\n@Component({\n selector: \"app-org-people\",\n templateUrl: \"people.component.html\",\n})\nexport class PeopleComponent\n extends BasePeopleComponent\n implements OnInit\n{\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"groupsTemplate\", { read: ViewContainerRef, static: true })\n groupsModalRef: ViewContainerRef;\n @ViewChild(\"eventsTemplate\", { read: ViewContainerRef, static: true })\n eventsModalRef: ViewContainerRef;\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n @ViewChild(\"resetPasswordTemplate\", { read: ViewContainerRef, static: true })\n resetPasswordModalRef: ViewContainerRef;\n @ViewChild(\"bulkStatusTemplate\", { read: ViewContainerRef, static: true })\n bulkStatusModalRef: ViewContainerRef;\n @ViewChild(\"bulkConfirmTemplate\", { read: ViewContainerRef, static: true })\n bulkConfirmModalRef: ViewContainerRef;\n @ViewChild(\"bulkRemoveTemplate\", { read: ViewContainerRef, static: true })\n bulkRemoveModalRef: ViewContainerRef;\n\n userType = OrganizationUserType;\n userStatusType = OrganizationUserStatusType;\n\n organizationId: string;\n status: OrganizationUserStatusType = null;\n accessEvents = false;\n accessGroups = false;\n canResetPassword = false; // User permission (admin/custom)\n orgUseResetPassword = false; // Org plan ability\n orgHasKeys = false; // Org public/private keys\n orgResetPasswordPolicyEnabled = false;\n callingUserType: OrganizationUserType = null;\n\n constructor(\n apiService: ApiService,\n private route: ActivatedRoute,\n i18nService: I18nService,\n modalService: ModalService,\n platformUtilsService: PlatformUtilsService,\n cryptoService: CryptoService,\n private router: Router,\n searchService: SearchService,\n validationService: ValidationService,\n private policyService: PolicyService,\n logService: LogService,\n searchPipe: SearchPipe,\n userNamePipe: UserNamePipe,\n private syncService: SyncService,\n stateService: StateService,\n private organizationService: OrganizationService\n ) {\n super(\n apiService,\n searchService,\n i18nService,\n platformUtilsService,\n cryptoService,\n validationService,\n modalService,\n logService,\n searchPipe,\n userNamePipe,\n stateService\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n const organization = await this.organizationService.get(this.organizationId);\n if (!organization.canManageUsers) {\n this.router.navigate([\"../collections\"], { relativeTo: this.route });\n return;\n }\n this.accessEvents = organization.useEvents;\n this.accessGroups = organization.useGroups;\n this.canResetPassword = organization.canManageUsersPassword;\n this.orgUseResetPassword = organization.useResetPassword;\n this.callingUserType = organization.type;\n this.orgHasKeys = organization.hasPublicAndPrivateKeys;\n\n // Backfill pub/priv key if necessary\n if (this.canResetPassword && !this.orgHasKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n const response = await this.apiService.postOrganizationKeys(this.organizationId, request);\n if (response != null) {\n this.orgHasKeys = response.publicKey != null && response.privateKey != null;\n await this.syncService.fullSync(true); // Replace oganizations with new data\n } else {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n }\n\n await this.load();\n\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n this.searchText = qParams.search;\n if (qParams.viewEvents != null) {\n const user = this.users.filter((u) => u.id === qParams.viewEvents);\n if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {\n this.events(user[0]);\n }\n }\n });\n });\n }\n\n async load() {\n const resetPasswordPolicy = await this.policyService.getPolicyForOrganization(\n PolicyType.ResetPassword,\n this.organizationId\n );\n this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled;\n super.load();\n }\n\n getUsers(): Promise> {\n return this.apiService.getOrganizationUsers(this.organizationId);\n }\n\n deleteUser(id: string): Promise {\n return this.apiService.deleteOrganizationUser(this.organizationId, id);\n }\n\n reinviteUser(id: string): Promise {\n return this.apiService.postOrganizationUserReinvite(this.organizationId, id);\n }\n\n async confirmUser(\n user: OrganizationUserUserDetailsResponse,\n publicKey: Uint8Array\n ): Promise {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n const request = new OrganizationUserConfirmRequest();\n request.key = key.encryptedString;\n await this.apiService.postOrganizationUserConfirm(this.organizationId, user.id, request);\n }\n\n allowResetPassword(orgUser: OrganizationUserUserDetailsResponse): boolean {\n // Hierarchy check\n let callingUserHasPermission = false;\n\n switch (this.callingUserType) {\n case OrganizationUserType.Owner:\n callingUserHasPermission = true;\n break;\n case OrganizationUserType.Admin:\n callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner;\n break;\n case OrganizationUserType.Custom:\n callingUserHasPermission =\n orgUser.type !== OrganizationUserType.Owner &&\n orgUser.type !== OrganizationUserType.Admin;\n break;\n }\n\n // Final\n return (\n this.canResetPassword &&\n callingUserHasPermission &&\n this.orgUseResetPassword &&\n this.orgHasKeys &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled &&\n orgUser.status === OrganizationUserStatusType.Confirmed\n );\n }\n\n showEnrolledStatus(orgUser: OrganizationUserUserDetailsResponse): boolean {\n return (\n this.orgUseResetPassword &&\n orgUser.resetPasswordEnrolled &&\n this.orgResetPasswordPolicyEnabled\n );\n }\n\n async edit(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.organizationUserId = user != null ? user.id : null;\n comp.usesKeyConnector = user?.usesKeyConnector;\n comp.onSavedUser.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeletedUser.subscribe(() => {\n modal.close();\n this.removeUser(user);\n });\n }\n );\n }\n\n async groups(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n UserGroupsComponent,\n this.groupsModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.organizationUserId = user != null ? user.id : null;\n comp.onSavedUser.subscribe(() => {\n modal.close();\n });\n }\n );\n }\n\n async bulkRemove() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRemoveComponent,\n this.bulkRemoveModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async bulkReinvite() {\n if (this.actionPromise != null) {\n return;\n }\n\n const users = this.getCheckedUsers();\n const filteredUsers = users.filter((u) => u.status === OrganizationUserStatusType.Invited);\n\n if (filteredUsers.length <= 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"noSelectedUsersApplicable\")\n );\n return;\n }\n\n try {\n const request = new OrganizationUserBulkRequest(filteredUsers.map((user) => user.id));\n const response = this.apiService.postManyOrganizationUserReinvite(\n this.organizationId,\n request\n );\n this.showBulkStatus(\n users,\n filteredUsers,\n response,\n this.i18nService.t(\"bulkReinviteMessage\")\n );\n } catch (e) {\n this.validationService.showError(e);\n }\n this.actionPromise = null;\n }\n\n async bulkConfirm() {\n if (this.actionPromise != null) {\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkConfirmComponent,\n this.bulkConfirmModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.users = this.getCheckedUsers();\n }\n );\n\n await modal.onClosedPromise();\n await this.load();\n }\n\n async events(user: OrganizationUserUserDetailsResponse) {\n await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.organizationId = this.organizationId;\n comp.entityId = user.id;\n comp.showUser = false;\n comp.entity = \"user\";\n });\n }\n\n async resetPassword(user: OrganizationUserUserDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n ResetPasswordComponent,\n this.resetPasswordModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(user);\n comp.email = user != null ? user.email : null;\n comp.organizationId = this.organizationId;\n comp.id = user != null ? user.id : null;\n\n comp.onPasswordReset.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n\n protected deleteWarningMessage(user: OrganizationUserUserDetailsResponse): string {\n if (user.usesKeyConnector) {\n return this.i18nService.t(\"removeUserConfirmationKeyConnector\");\n }\n\n return super.deleteWarningMessage(user);\n }\n\n private async showBulkStatus(\n users: OrganizationUserUserDetailsResponse[],\n filteredUsers: OrganizationUserUserDetailsResponse[],\n request: Promise>,\n successfullMessage: string\n ) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n BulkStatusComponent,\n this.bulkStatusModalRef,\n (comp) => {\n comp.loading = true;\n }\n );\n\n // Workaround to handle closing the modal shortly after it has been opened\n let close = false;\n modal.onShown.subscribe(() => {\n if (close) {\n modal.close();\n }\n });\n\n try {\n const response = await request;\n\n if (modal) {\n const keyedErrors: any = response.data\n .filter((r) => r.error !== \"\")\n .reduce((a, x) => ({ ...a, [x.id]: x.error }), {});\n const keyedFilteredUsers: any = filteredUsers.reduce((a, x) => ({ ...a, [x.id]: x }), {});\n\n childComponent.users = users.map((user) => {\n let message = keyedErrors[user.id] ?? successfullMessage;\n // eslint-disable-next-line\n if (!keyedFilteredUsers.hasOwnProperty(user.id)) {\n message = this.i18nService.t(\"bulkFilteredMessage\");\n }\n\n return {\n user: user,\n error: keyedErrors.hasOwnProperty(user.id), // eslint-disable-line\n message: message,\n };\n });\n childComponent.loading = false;\n }\n } catch {\n close = true;\n modal.close();\n }\n }\n}\n","
\n

{{ \"people\" | i18n }}

\n
\n
\n \n {{ \"all\" | i18n }}\n {{ allCount }}\n \n \n {{ \"invited\" | i18n }}\n {{ invitedCount }}\n \n \n {{ \"accepted\" | i18n }}\n {{\n acceptedCount\n }}\n \n
\n
\n \n \n
\n
\n \n \n \n
\n \n \n \n {{ \"confirmSelected\" | i18n }}\n \n \n
\n \n \n
\n
\n \n
\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"noUsersInList\" | i18n }}

\n \n \n {{ \"usersNeedConfirmed\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n \n \n {{ u.email }}\n {{\n \"invited\" | i18n\n }}\n {{\n \"accepted\" | i18n\n }}\n {{ u.name }}\n \n \n \n \n {{ \"userUsingTwoStep\" | i18n }}\n \n \n \n {{ \"enrolledPasswordReset\" | i18n }}\n \n \n \n {{ \"owner\" | i18n }}\n {{ \"admin\" | i18n }}\n {{ \"manager\" | i18n }}\n {{ \"user\" | i18n }}\n {{ \"custom\" | i18n }}\n \n \n
\n \n \n \n
\n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | i18n }}\n \n \n \n {{ \"groups\" | i18n }}\n \n \n \n {{ \"eventLogs\" | i18n }}\n \n \n \n {{ \"resetPassword\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n \n \n \n \n
\n\n\n\n\n\n\n\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nimport { PolicyListService } from \"../../services/policy-list.service\";\nimport { BasePolicy } from \"../policies/base-policy.component\";\n\nimport { PolicyEditComponent } from \"./policy-edit.component\";\n\n@Component({\n selector: \"app-org-policies\",\n templateUrl: \"policies.component.html\",\n})\nexport class PoliciesComponent implements OnInit {\n @ViewChild(\"editTemplate\", { read: ViewContainerRef, static: true })\n editModalRef: ViewContainerRef;\n\n loading = true;\n organizationId: string;\n policies: BasePolicy[];\n organization: Organization;\n\n private orgPolicies: PolicyResponse[];\n private policiesEnabledMap: Map = new Map();\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private modalService: ModalService,\n private organizationService: OrganizationService,\n private policyListService: PolicyListService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.organization = await this.organizationService.get(this.organizationId);\n if (this.organization == null || !this.organization.usePolicies) {\n this.router.navigate([\"/organizations\", this.organizationId]);\n return;\n }\n\n this.policies = this.policyListService.getPolicies();\n\n await this.load();\n\n // Handle policies component launch from Event message\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.policyId != null) {\n const policyIdFromEvents: string = qParams.policyId;\n for (const orgPolicy of this.orgPolicies) {\n if (orgPolicy.id === policyIdFromEvents) {\n for (let i = 0; i < this.policies.length; i++) {\n if (this.policies[i].type === orgPolicy.type) {\n this.edit(this.policies[i]);\n break;\n }\n }\n break;\n }\n }\n }\n });\n });\n }\n\n async load() {\n const response = await this.apiService.getPolicies(this.organizationId);\n this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];\n this.orgPolicies.forEach((op) => {\n this.policiesEnabledMap.set(op.type, op.enabled);\n });\n\n this.loading = false;\n }\n\n async edit(policy: BasePolicy) {\n const [modal] = await this.modalService.openViewRef(\n PolicyEditComponent,\n this.editModalRef,\n (comp) => {\n comp.policy = policy;\n comp.organizationId = this.organizationId;\n comp.policiesEnabledMap = this.policiesEnabledMap;\n comp.onSavedPolicy.subscribe(() => {\n modal.close();\n this.load();\n });\n }\n );\n }\n}\n","
\n

{{ \"policies\" | i18n }}

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n \n \n \n \n \n
\n {{ p.name | i18n }}\n {{\n \"enabled\" | i18n\n }}\n {{ p.description | i18n }}\n
\n\n","import {\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nimport { BasePolicy, BasePolicyComponent } from \"../policies/base-policy.component\";\n\n@Component({\n selector: \"app-policy-edit\",\n templateUrl: \"policy-edit.component.html\",\n})\nexport class PolicyEditComponent {\n @Input() policy: BasePolicy;\n @Input() organizationId: string;\n @Input() policiesEnabledMap: Map = new Map();\n @Output() onSavedPolicy = new EventEmitter();\n\n @ViewChild(\"policyForm\", { read: ViewContainerRef, static: true })\n policyFormRef: ViewContainerRef;\n\n policyType = PolicyType;\n loading = true;\n enabled = false;\n formPromise: Promise;\n defaultTypes: any[];\n policyComponent: BasePolicyComponent;\n\n private policyResponse: PolicyResponse;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private componentFactoryResolver: ComponentFactoryResolver,\n private cdr: ChangeDetectorRef,\n private logService: LogService\n ) {}\n\n async ngAfterViewInit() {\n await this.load();\n this.loading = false;\n\n const factory = this.componentFactoryResolver.resolveComponentFactory(this.policy.component);\n this.policyComponent = this.policyFormRef.createComponent(factory)\n .instance as BasePolicyComponent;\n this.policyComponent.policy = this.policy;\n this.policyComponent.policyResponse = this.policyResponse;\n\n this.cdr.detectChanges();\n }\n\n async load() {\n try {\n this.policyResponse = await this.apiService.getPolicy(this.organizationId, this.policy.type);\n } catch (e) {\n if (e.statusCode === 404) {\n this.policyResponse = new PolicyResponse({ Enabled: false });\n } else {\n throw e;\n }\n }\n }\n\n async submit() {\n let request: PolicyRequest;\n try {\n request = await this.policyComponent.buildRequest(this.policiesEnabledMap);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, e.message);\n return;\n }\n\n try {\n this.formPromise = this.apiService.putPolicy(this.organizationId, this.policy.type, request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"editedPolicyId\", this.i18nService.t(this.policy.name))\n );\n this.onSavedPolicy.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ \"editPolicy\" | i18n }} - {{ policy.name | i18n }}\n

\n \n ×\n \n
\n\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ policy.description | i18n }}

\n \n
\n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { OrganizationUserResetPasswordRequest } from \"jslib-common/models/request/organizationUserResetPasswordRequest\";\n\n@Component({\n selector: \"app-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordComponent implements OnInit {\n @Input() name: string;\n @Input() email: string;\n @Input() id: string;\n @Input() organizationId: string;\n @Output() onPasswordReset = new EventEmitter();\n\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n newPassword: string = null;\n showPassword = false;\n masterPasswordScore: number;\n formPromise: Promise;\n private newPasswordStrengthTimeout: any;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private passwordGenerationService: PasswordGenerationService,\n private policyService: PolicyService,\n private cryptoService: CryptoService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n // Get Enforced Policy Options\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n get loggedOutWarningName() {\n return this.name != null ? this.name : this.i18nService.t(\"thisUser\");\n }\n\n async generatePassword() {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.newPassword = await this.passwordGenerationService.generatePassword(options);\n this.updatePasswordStrength();\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"newPassword\").focus();\n }\n\n copy(value: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"password\"))\n );\n }\n\n async submit() {\n // Validation\n if (this.newPassword == null || this.newPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n\n if (this.newPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassLength\")\n );\n return false;\n }\n\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n this.masterPasswordScore,\n this.newPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return;\n }\n\n if (this.masterPasswordScore < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return false;\n }\n }\n\n // Get user Information (kdf type, kdf iterations, resetPasswordKey, private key) and change password\n try {\n this.formPromise = this.apiService\n .getOrganizationUserResetPasswordDetails(this.organizationId, this.id)\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordDetailsError\"));\n }\n\n const kdfType = response.kdf;\n const kdfIterations = response.kdfIterations;\n const resetPasswordKey = response.resetPasswordKey;\n const encryptedPrivateKey = response.encryptedPrivateKey;\n\n // Decrypt Organization's encrypted Private Key with org key\n const orgSymKey = await this.cryptoService.getOrgKey(this.organizationId);\n const decPrivateKey = await this.cryptoService.decryptToBytes(\n new EncString(encryptedPrivateKey),\n orgSymKey\n );\n\n // Decrypt User's Reset Password Key to get EncKey\n const decValue = await this.cryptoService.rsaDecrypt(resetPasswordKey, decPrivateKey);\n const userEncKey = new SymmetricCryptoKey(decValue);\n\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.newPassword,\n this.email.trim().toLowerCase(),\n kdfType,\n kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.newPassword, newKey);\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n // Create request\n const request = new OrganizationUserResetPasswordRequest();\n request.key = newEncKey[1].encryptedString;\n request.newMasterPasswordHash = newPasswordHash;\n\n // Change user's password\n return this.apiService.putOrganizationUserResetPassword(\n this.organizationId,\n this.id,\n request\n );\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"resetPasswordSuccess\")\n );\n this.onPasswordReset.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n updatePasswordStrength() {\n if (this.newPasswordStrengthTimeout != null) {\n clearTimeout(this.newPasswordStrengthTimeout);\n }\n this.newPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.newPassword,\n this.getPasswordStrengthUserInput()\n );\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n if (this.name != null && this.name !== \"\") {\n userInput = userInput.concat(this.name.trim().toLowerCase().split(\" \"));\n }\n return userInput;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"resetPassword\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n {{ \"resetPasswordLoggedOutWarning\" | i18n: loggedOutWarningName }}\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
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationUserType } from \"jslib-common/enums/organizationUserType\";\nimport { PermissionsApi } from \"jslib-common/models/api/permissionsApi\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { Collection } from \"jslib-common/models/domain/collection\";\nimport { OrganizationUserInviteRequest } from \"jslib-common/models/request/organizationUserInviteRequest\";\nimport { OrganizationUserUpdateRequest } from \"jslib-common/models/request/organizationUserUpdateRequest\";\nimport { SelectionReadOnlyRequest } from \"jslib-common/models/request/selectionReadOnlyRequest\";\nimport { CollectionDetailsResponse } from \"jslib-common/models/response/collectionResponse\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-user-add-edit\",\n templateUrl: \"user-add-edit.component.html\",\n})\nexport class UserAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Input() usesKeyConnector = false;\n @Output() onSavedUser = new EventEmitter();\n @Output() onDeletedUser = new EventEmitter();\n\n loading = true;\n editMode = false;\n title: string;\n emails: string;\n type: OrganizationUserType = OrganizationUserType.User;\n permissions = new PermissionsApi();\n showCustom = false;\n access: \"all\" | \"selected\" = \"selected\";\n collections: CollectionView[] = [];\n formPromise: Promise;\n deletePromise: Promise;\n organizationUserType = OrganizationUserType;\n\n manageAllCollectionsCheckboxes = [\n {\n id: \"createNewCollections\",\n get: () => this.permissions.createNewCollections,\n set: (v: boolean) => (this.permissions.createNewCollections = v),\n },\n {\n id: \"editAnyCollection\",\n get: () => this.permissions.editAnyCollection,\n set: (v: boolean) => (this.permissions.editAnyCollection = v),\n },\n {\n id: \"deleteAnyCollection\",\n get: () => this.permissions.deleteAnyCollection,\n set: (v: boolean) => (this.permissions.deleteAnyCollection = v),\n },\n ];\n\n manageAssignedCollectionsCheckboxes = [\n {\n id: \"editAssignedCollections\",\n get: () => this.permissions.editAssignedCollections,\n set: (v: boolean) => (this.permissions.editAssignedCollections = v),\n },\n {\n id: \"deleteAssignedCollections\",\n get: () => this.permissions.deleteAssignedCollections,\n set: (v: boolean) => (this.permissions.deleteAssignedCollections = v),\n },\n ];\n\n get customUserTypeSelected(): boolean {\n return this.type === OrganizationUserType.Custom;\n }\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.organizationUserId != null;\n await this.loadCollections();\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editUser\");\n try {\n const user = await this.apiService.getOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n this.access = user.accessAll ? \"all\" : \"selected\";\n this.type = user.type;\n if (user.type === OrganizationUserType.Custom) {\n this.permissions = user.permissions;\n }\n if (user.collections != null && this.collections != null) {\n user.collections.forEach((s) => {\n const collection = this.collections.filter((c) => c.id === s.id);\n if (collection != null && collection.length > 0) {\n (collection[0] as any).checked = true;\n collection[0].readOnly = s.readOnly;\n collection[0].hidePasswords = s.hidePasswords;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteUser\");\n }\n\n this.loading = false;\n }\n\n async loadCollections() {\n const response = await this.apiService.getCollections(this.organizationId);\n const collections = response.data.map(\n (r) => new Collection(new CollectionData(r as CollectionDetailsResponse))\n );\n this.collections = await this.collectionService.decryptMany(collections);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n if (!(c as any).checked) {\n c.readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n\n setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {\n Object.assign(p, clearPermissions ? new PermissionsApi() : this.permissions);\n return p;\n }\n\n handleDependentPermissions() {\n // Manage Password Reset must have Manage Users enabled\n if (this.permissions.manageResetPassword && !this.permissions.manageUsers) {\n this.permissions.manageUsers = true;\n (document.getElementById(\"manageUsers\") as HTMLInputElement).checked = true;\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"resetPasswordManageUsers\")\n );\n }\n }\n\n async submit() {\n let collections: SelectionReadOnlyRequest[] = null;\n if (this.access !== \"all\") {\n collections = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n }\n\n try {\n if (this.editMode) {\n const request = new OrganizationUserUpdateRequest();\n request.accessAll = this.access === \"all\";\n request.type = this.type;\n request.collections = collections;\n request.permissions = this.setRequestPermissions(\n request.permissions ?? new PermissionsApi(),\n request.type !== OrganizationUserType.Custom\n );\n this.formPromise = this.apiService.putOrganizationUser(\n this.organizationId,\n this.organizationUserId,\n request\n );\n } else {\n const request = new OrganizationUserInviteRequest();\n request.emails = this.emails.trim().split(/\\s*,\\s*/);\n request.accessAll = this.access === \"all\";\n request.type = this.type;\n request.permissions = this.setRequestPermissions(\n request.permissions ?? new PermissionsApi(),\n request.type !== OrganizationUserType.Custom\n );\n request.collections = collections;\n this.formPromise = this.apiService.postOrganizationUserInvite(this.organizationId, request);\n }\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n if (!this.editMode) {\n return;\n }\n\n const message = this.usesKeyConnector\n ? \"removeUserConfirmationKeyConnector\"\n : \"removeUserConfirmation\";\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(message),\n this.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.apiService.deleteOrganizationUser(\n this.organizationId,\n this.organizationUserId\n );\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.name)\n );\n this.onDeletedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ title }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n

{{ \"inviteUserDesc\" | i18n }}

\n
\n \n \n {{ \"inviteMultipleEmailDesc\" | i18n: \"20\" }}\n
\n
\n

\n {{ \"userType\" | i18n }}\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 {{ \"permissions\" | i18n }}\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
\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 \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n

\n
\n {{ \"accessControl\" | i18n }}\n \n \n \n
\n
\n \n \n
\n

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n  \n {{ \"name\" | i18n }}\n {{ \"hidePasswords\" | i18n }}\n {{ \"readOnly\" | i18n }}\n \n \n \n \n \n \n \n \n {{ c.name }}\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","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-user-confirm\",\n templateUrl: \"user-confirm.component.html\",\n})\nexport class UserConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() publicKey: Uint8Array;\n @Output() onConfirmedUser = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n formPromise: Promise;\n\n constructor(\n private cryptoService: CryptoService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n try {\n if (this.publicKey != null) {\n const fingerprint = await this.cryptoService.getFingerprint(\n this.userId,\n this.publicKey.buffer\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n this.onConfirmedUser.emit();\n }\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { OrganizationUserUpdateGroupsRequest } from \"jslib-common/models/request/organizationUserUpdateGroupsRequest\";\nimport { GroupResponse } from \"jslib-common/models/response/groupResponse\";\n\n@Component({\n selector: \"app-user-groups\",\n templateUrl: \"user-groups.component.html\",\n})\nexport class UserGroupsComponent implements OnInit {\n @Input() name: string;\n @Input() organizationUserId: string;\n @Input() organizationId: string;\n @Output() onSavedUser = new EventEmitter();\n\n loading = true;\n groups: GroupResponse[] = [];\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const groupsResponse = await this.apiService.getGroups(this.organizationId);\n const groups = groupsResponse.data.map((r) => r);\n groups.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n this.groups = groups;\n\n try {\n const userGroups = await this.apiService.getOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId\n );\n if (userGroups != null && this.groups != null) {\n userGroups.forEach((ug) => {\n const group = this.groups.filter((g) => g.id === ug);\n if (group != null && group.length > 0) {\n (group[0] as any).checked = true;\n }\n });\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.loading = false;\n }\n\n check(g: GroupResponse, select?: boolean) {\n (g as any).checked = select == null ? !(g as any).checked : select;\n if (!(g as any).checked) {\n (g as any).readOnly = false;\n }\n }\n\n selectAll(select: boolean) {\n this.groups.forEach((g) => this.check(g, select));\n }\n\n async submit() {\n const request = new OrganizationUserUpdateGroupsRequest();\n request.groupIds = this.groups.filter((g) => (g as any).checked).map((g) => g.id);\n\n try {\n this.formPromise = this.apiService.putOrganizationUserGroups(\n this.organizationId,\n this.organizationUserId,\n request\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"editedGroupsForUser\", this.name)\n );\n this.onSavedUser.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ \"groupAccess\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"groupAccessUserDesc\" | i18n }}

\n
\n {{ \"noGroupsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ g.name }}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"jslib-angular/guards/auth.guard\";\nimport { Permissions } from \"jslib-common/enums/permissions\";\n\nimport { PermissionsGuard } from \"./guards/permissions.guard\";\nimport { OrganizationLayoutComponent } from \"./layouts/organization-layout.component\";\nimport { CollectionsComponent } from \"./manage/collections.component\";\nimport { EventsComponent } from \"./manage/events.component\";\nimport { GroupsComponent } from \"./manage/groups.component\";\nimport { ManageComponent } from \"./manage/manage.component\";\nimport { PeopleComponent } from \"./manage/people.component\";\nimport { PoliciesComponent } from \"./manage/policies.component\";\nimport { NavigationPermissionsService } from \"./services/navigation-permissions.service\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { OrganizationBillingComponent } from \"./settings/organization-billing.component\";\nimport { OrganizationSubscriptionComponent } from \"./settings/organization-subscription.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { TwoFactorSetupComponent } from \"./settings/two-factor-setup.component\";\nimport { ExportComponent } from \"./tools/export.component\";\nimport { ExposedPasswordsReportComponent } from \"./tools/exposed-passwords-report.component\";\nimport { ImportComponent } from \"./tools/import.component\";\nimport { InactiveTwoFactorReportComponent } from \"./tools/inactive-two-factor-report.component\";\nimport { ReusedPasswordsReportComponent } from \"./tools/reused-passwords-report.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./tools/unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./tools/weak-passwords-report.component\";\n\nconst routes: Routes = [\n {\n path: \":organizationId\",\n component: OrganizationLayoutComponent,\n canActivate: [AuthGuard, PermissionsGuard],\n data: {\n permissions: NavigationPermissionsService.getPermissions(\"admin\"),\n },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"vault\" },\n {\n path: \"vault\",\n loadChildren: async () =>\n (await import(\"../modules/vault/modules/organization-vault/organization-vault.module\"))\n .OrganizationVaultModule,\n },\n {\n path: \"tools\",\n component: ToolsComponent,\n canActivate: [PermissionsGuard],\n data: { permissions: NavigationPermissionsService.getPermissions(\"tools\") },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"import\",\n },\n {\n path: \"import\",\n component: ImportComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"importData\",\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: \"export\",\n component: ExportComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"exportVault\",\n permissions: [Permissions.AccessImportExport],\n },\n },\n {\n path: \"exposed-passwords-report\",\n component: ExposedPasswordsReportComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"exposedPasswordsReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"inactive-two-factor-report\",\n component: InactiveTwoFactorReportComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"inactive2faReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"reused-passwords-report\",\n component: ReusedPasswordsReportComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"reusedPasswordsReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"unsecured-websites-report\",\n component: UnsecuredWebsitesReportComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"unsecuredWebsitesReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n {\n path: \"weak-passwords-report\",\n component: WeakPasswordsReportComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"weakPasswordsReport\",\n permissions: [Permissions.AccessReports],\n },\n },\n ],\n },\n {\n path: \"manage\",\n component: ManageComponent,\n canActivate: [PermissionsGuard],\n data: {\n permissions: NavigationPermissionsService.getPermissions(\"manage\"),\n },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n redirectTo: \"people\",\n },\n {\n path: \"collections\",\n component: CollectionsComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"collections\",\n permissions: [\n Permissions.CreateNewCollections,\n Permissions.EditAnyCollection,\n Permissions.DeleteAnyCollection,\n Permissions.EditAssignedCollections,\n Permissions.DeleteAssignedCollections,\n ],\n },\n },\n {\n path: \"events\",\n component: EventsComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"eventLogs\",\n permissions: [Permissions.AccessEventLogs],\n },\n },\n {\n path: \"groups\",\n component: GroupsComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"groups\",\n permissions: [Permissions.ManageGroups],\n },\n },\n {\n path: \"people\",\n component: PeopleComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"people\",\n permissions: [Permissions.ManageUsers, Permissions.ManageUsersPassword],\n },\n },\n {\n path: \"policies\",\n component: PoliciesComponent,\n canActivate: [PermissionsGuard],\n data: {\n titleId: \"policies\",\n permissions: [Permissions.ManagePolicies],\n },\n },\n ],\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n canActivate: [PermissionsGuard],\n data: { permissions: NavigationPermissionsService.getPermissions(\"settings\") },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myOrganization\" } },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"billing\",\n component: OrganizationBillingComponent,\n canActivate: [PermissionsGuard],\n data: { titleId: \"billing\", permissions: [Permissions.ManageBilling] },\n },\n {\n path: \"subscription\",\n component: OrganizationSubscriptionComponent,\n data: { titleId: \"subscription\" },\n },\n ],\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class OrganizationsRoutingModule {}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\nexport abstract class BasePolicy {\n abstract name: string;\n abstract description: string;\n abstract type: PolicyType;\n abstract component: any;\n\n display(organization: Organization) {\n return true;\n }\n}\n\n@Directive()\nexport abstract class BasePolicyComponent implements OnInit {\n @Input() policyResponse: PolicyResponse;\n @Input() policy: BasePolicy;\n\n enabled = new FormControl(false);\n data: FormGroup = null;\n\n ngOnInit(): void {\n this.enabled.setValue(this.policyResponse.enabled);\n\n if (this.policyResponse.data != null) {\n this.loadData();\n }\n }\n\n loadData() {\n this.data.patchValue(this.policyResponse.data ?? {});\n }\n\n buildRequestData() {\n if (this.data != null) {\n return this.data.value;\n }\n\n return null;\n }\n\n buildRequest(policiesEnabledMap: Map) {\n const request = new PolicyRequest();\n request.enabled = this.enabled.value;\n request.type = this.policy.type;\n request.data = this.buildRequestData();\n\n return Promise.resolve(request);\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class DisableSendPolicy extends BasePolicy {\n name = \"disableSend\";\n description = \"disableSendPolicyDesc\";\n type = PolicyType.DisableSend;\n component = DisableSendPolicyComponent;\n}\n\n@Component({\n selector: \"policy-disable-send\",\n templateUrl: \"disable-send.component.html\",\n})\nexport class DisableSendPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"disableSendExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class MasterPasswordPolicy extends BasePolicy {\n name = \"masterPass\";\n description = \"masterPassPolicyDesc\";\n type = PolicyType.MasterPassword;\n component = MasterPasswordPolicyComponent;\n}\n\n@Component({\n selector: \"policy-master-password\",\n templateUrl: \"master-password.component.html\",\n})\nexport class MasterPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n minComplexity: [null],\n minLength: [null],\n requireUpper: [null],\n requireLower: [null],\n requireNumbers: [null],\n requireSpecial: [null],\n });\n\n passwordScores: { name: string; value: number }[];\n showKeyConnectorInfo = false;\n\n constructor(\n private formBuilder: FormBuilder,\n i18nService: I18nService,\n private organizationService: OrganizationService\n ) {\n super();\n\n this.passwordScores = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"weak\") + \" (0)\", value: 0 },\n { name: i18nService.t(\"weak\") + \" (1)\", value: 1 },\n { name: i18nService.t(\"weak\") + \" (2)\", value: 2 },\n { name: i18nService.t(\"good\") + \" (3)\", value: 3 },\n { name: i18nService.t(\"strong\") + \" (4)\", value: 4 },\n ];\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","\n {{ \"keyConnectorPolicyRestriction\" | i18n }}\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 \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class PasswordGeneratorPolicy extends BasePolicy {\n name = \"passwordGenerator\";\n description = \"passwordGeneratorPolicyDesc\";\n type = PolicyType.PasswordGenerator;\n component = PasswordGeneratorPolicyComponent;\n}\n\n@Component({\n selector: \"policy-password-generator\",\n templateUrl: \"password-generator.component.html\",\n})\nexport class PasswordGeneratorPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n defaultType: [null],\n minLength: [null],\n useUpper: [null],\n useLower: [null],\n useNumbers: [null],\n useSpecial: [null],\n minNumbers: [null],\n minSpecial: [null],\n minNumberWords: [null],\n capitalize: [null],\n includeNumber: [null],\n });\n\n defaultTypes: { name: string; value: string }[];\n\n constructor(private formBuilder: FormBuilder, i18nService: I18nService) {\n super();\n\n this.defaultTypes = [\n { name: i18nService.t(\"userPreference\"), value: null },\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"passphrase\"), value: \"passphrase\" },\n ];\n }\n}\n","
\n
\n
\n \n \n
\n
\n\n
\n
\n \n \n \n \n
\n
\n

{{ \"password\" | i18n }}

\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
\n
\n \n \n
\n

{{ \"passphrase\" | i18n }}

\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class PersonalOwnershipPolicy extends BasePolicy {\n name = \"personalOwnership\";\n description = \"personalOwnershipPolicyDesc\";\n type = PolicyType.PersonalOwnership;\n component = PersonalOwnershipPolicyComponent;\n}\n\n@Component({\n selector: \"policy-personal-ownership\",\n templateUrl: \"personal-ownership.component.html\",\n})\nexport class PersonalOwnershipPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"personalOwnershipExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class RequireSsoPolicy extends BasePolicy {\n name = \"requireSso\";\n description = \"requireSsoPolicyDesc\";\n type = PolicyType.RequireSso;\n component = RequireSsoPolicyComponent;\n\n display(organization: Organization) {\n return organization.useSso;\n }\n}\n\n@Component({\n selector: \"policy-require-sso\",\n templateUrl: \"require-sso.component.html\",\n})\nexport class RequireSsoPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;\n if (this.enabled.value && !singleOrgEnabled) {\n throw new Error(this.i18nService.t(\"requireSsoPolicyReqError\"));\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"requireSsoPolicyReq\" | i18n }}\n\n\n {{ \"requireSsoExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class ResetPasswordPolicy extends BasePolicy {\n name = \"resetPasswordPolicy\";\n description = \"resetPasswordPolicyDescription\";\n type = PolicyType.ResetPassword;\n component = ResetPasswordPolicyComponent;\n\n display(organization: Organization) {\n return organization.useResetPassword;\n }\n}\n\n@Component({\n selector: \"policy-reset-password\",\n templateUrl: \"reset-password.component.html\",\n})\nexport class ResetPasswordPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n autoEnrollEnabled: false,\n });\n\n defaultTypes: { name: string; value: string }[];\n showKeyConnectorInfo = false;\n\n constructor(private formBuilder: FormBuilder, private organizationService: OrganizationService) {\n super();\n }\n\n async ngOnInit() {\n super.ngOnInit();\n const organization = await this.organizationService.get(this.policyResponse.organizationId);\n this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n }\n}\n","\n {{ \"keyConnectorPolicyRestriction\" | i18n }}\n\n\n\n {{ \"resetPasswordPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n

{{ \"resetPasswordPolicyAutoEnroll\" | i18n }}

\n

{{ \"resetPasswordPolicyAutoEnrollDescription\" | i18n }}

\n \n {{ \"resetPasswordPolicyAutoEnrollWarning\" | i18n }}\n \n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class SendOptionsPolicy extends BasePolicy {\n name = \"sendOptions\";\n description = \"sendOptionsPolicyDesc\";\n type = PolicyType.SendOptions;\n component = SendOptionsPolicyComponent;\n}\n\n@Component({\n selector: \"policy-send-options\",\n templateUrl: \"send-options.component.html\",\n})\nexport class SendOptionsPolicyComponent extends BasePolicyComponent {\n data = this.formBuilder.group({\n disableHideEmail: false,\n });\n\n constructor(private formBuilder: FormBuilder) {\n super();\n }\n}\n","\n {{ \"sendOptionsExemption\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n\n
\n

{{ \"options\" | i18n }}

\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { PolicyRequest } from \"jslib-common/models/request/policyRequest\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class SingleOrgPolicy extends BasePolicy {\n name = \"singleOrg\";\n description = \"singleOrgDesc\";\n type = PolicyType.SingleOrg;\n component = SingleOrgPolicyComponent;\n}\n\n@Component({\n selector: \"policy-single-org\",\n templateUrl: \"single-org.component.html\",\n})\nexport class SingleOrgPolicyComponent extends BasePolicyComponent {\n constructor(private i18nService: I18nService) {\n super();\n }\n\n buildRequest(policiesEnabledMap: Map): Promise {\n if (!this.enabled.value) {\n if (policiesEnabledMap.get(PolicyType.RequireSso) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"requireSso\"))\n );\n }\n\n if (policiesEnabledMap.get(PolicyType.MaximumVaultTimeout) ?? false) {\n throw new Error(\n this.i18nService.t(\"disableRequiredError\", this.i18nService.t(\"maximumVaultTimeoutLabel\"))\n );\n }\n }\n\n return super.buildRequest(policiesEnabledMap);\n }\n}\n","\n {{ \"singleOrgPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\nimport { BasePolicy, BasePolicyComponent } from \"./base-policy.component\";\n\nexport class TwoFactorAuthenticationPolicy extends BasePolicy {\n name = \"twoStepLogin\";\n description = \"twoStepLoginPolicyDesc\";\n type = PolicyType.TwoFactorAuthentication;\n component = TwoFactorAuthenticationPolicyComponent;\n}\n\n@Component({\n selector: \"policy-two-factor-authentication\",\n templateUrl: \"two-factor-authentication.component.html\",\n})\nexport class TwoFactorAuthenticationPolicyComponent extends BasePolicyComponent {}\n","\n {{ \"twoStepLoginPolicyWarning\" | i18n }}\n\n\n
\n
\n \n \n
\n
\n","import { Permissions } from \"jslib-common/enums/permissions\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nconst permissions = {\n manage: [\n Permissions.CreateNewCollections,\n Permissions.EditAnyCollection,\n Permissions.DeleteAnyCollection,\n Permissions.EditAssignedCollections,\n Permissions.DeleteAssignedCollections,\n Permissions.AccessEventLogs,\n Permissions.ManageGroups,\n Permissions.ManageUsers,\n Permissions.ManagePolicies,\n Permissions.ManageSso,\n ],\n tools: [Permissions.AccessImportExport, Permissions.AccessReports],\n settings: [Permissions.ManageOrganization],\n};\n\nexport class NavigationPermissionsService {\n static getPermissions(route: keyof typeof permissions | \"admin\") {\n if (route === \"admin\") {\n return Object.values(permissions).reduce((previous, current) => previous.concat(current), []);\n }\n\n return permissions[route];\n }\n\n static canAccessAdmin(organization: Organization): boolean {\n return (\n this.canAccessTools(organization) ||\n this.canAccessSettings(organization) ||\n this.canAccessManage(organization)\n );\n }\n\n static canAccessTools(organization: Organization): boolean {\n return organization.hasAnyPermission(NavigationPermissionsService.getPermissions(\"tools\"));\n }\n\n static canAccessSettings(organization: Organization): boolean {\n return organization.hasAnyPermission(NavigationPermissionsService.getPermissions(\"settings\"));\n }\n\n static canAccessManage(organization: Organization): boolean {\n return organization.hasAnyPermission(NavigationPermissionsService.getPermissions(\"manage\"));\n }\n}\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { OrganizationKeysRequest } from \"jslib-common/models/request/organizationKeysRequest\";\nimport { OrganizationUpdateRequest } from \"jslib-common/models/request/organizationUpdateRequest\";\nimport { OrganizationResponse } from \"jslib-common/models/response/organizationResponse\";\n\nimport { ApiKeyComponent } from \"../../settings/api-key.component\";\nimport { PurgeVaultComponent } from \"../../settings/purge-vault.component\";\nimport { TaxInfoComponent } from \"../../settings/tax-info.component\";\n\nimport { DeleteOrganizationComponent } from \"./delete-organization.component\";\n\n@Component({\n selector: \"app-org-account\",\n templateUrl: \"account.component.html\",\n})\nexport class AccountComponent {\n @ViewChild(\"deleteOrganizationTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n @ViewChild(\"purgeOrganizationTemplate\", { read: ViewContainerRef, static: true })\n purgeModalRef: ViewContainerRef;\n @ViewChild(\"apiKeyTemplate\", { read: ViewContainerRef, static: true })\n apiKeyModalRef: ViewContainerRef;\n @ViewChild(\"rotateApiKeyTemplate\", { read: ViewContainerRef, static: true })\n rotateApiKeyModalRef: ViewContainerRef;\n @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n selfHosted = false;\n canManageBilling = true;\n loading = true;\n canUseApi = false;\n org: OrganizationResponse;\n formPromise: Promise;\n taxFormPromise: Promise;\n\n private organizationId: string;\n\n constructor(\n private modalService: ModalService,\n private apiService: ApiService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private router: Router,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.selfHosted = this.platformUtilsService.isSelfHost();\n\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.canManageBilling = (\n await this.organizationService.get(this.organizationId)\n ).canManageBilling;\n try {\n this.org = await this.apiService.getOrganization(this.organizationId);\n this.canUseApi = this.org.useApi;\n } catch (e) {\n this.logService.error(e);\n }\n });\n this.loading = false;\n }\n\n async submit() {\n try {\n const request = new OrganizationUpdateRequest();\n request.name = this.org.name;\n request.businessName = this.org.businessName;\n request.billingEmail = this.org.billingEmail;\n request.identifier = this.org.identifier;\n\n // Backfill pub/priv key if necessary\n if (!this.org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n this.formPromise = this.apiService.putOrganization(this.organizationId, request).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpdated\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async submitTaxInfo() {\n this.taxFormPromise = this.taxInfo.submitTaxInfo();\n await this.taxFormPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"taxInfoUpdated\"));\n }\n\n async deleteOrganization() {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.onSuccess.subscribe(() => {\n this.router.navigate([\"/\"]);\n });\n }\n );\n }\n\n async purgeVault() {\n await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef, (comp) => {\n comp.organizationId = this.organizationId;\n });\n }\n\n async viewApiKey() {\n await this.modalService.openViewRef(ApiKeyComponent, this.apiKeyModalRef, (comp) => {\n comp.keyType = \"organization\";\n comp.entityId = this.organizationId;\n comp.postKey = this.apiService.postOrganizationApiKey.bind(this.apiService);\n comp.scope = \"api.organization\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"apiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyDesc\";\n });\n }\n\n async rotateApiKey() {\n await this.modalService.openViewRef(ApiKeyComponent, this.rotateApiKeyModalRef, (comp) => {\n comp.keyType = \"organization\";\n comp.isRotation = true;\n comp.entityId = this.organizationId;\n comp.postKey = this.apiService.postOrganizationRotateApiKey.bind(this.apiService);\n comp.scope = \"api.organization\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"apiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyRotateDesc\";\n });\n }\n}\n","
\n

{{ \"myOrganization\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\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\n
\n

{{ \"apiKey\" | i18n }}

\n
\n

\n {{ \"apiKeyDesc\" | i18n }}\n \n {{ \"learnMore\" | i18n }}\n \n

\n \n \n\n
\n

{{ \"taxInformation\" | i18n }}

\n
\n

{{ \"taxInformationDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n\n \n \n\n
\n

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

\n \n \n
\n
\n\n\n\n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationSubscriptionUpdateRequest } from \"jslib-common/models/request/organizationSubscriptionUpdateRequest\";\n\n@Component({\n selector: \"app-adjust-subscription\",\n templateUrl: \"adjust-subscription.component.html\",\n})\nexport class AdjustSubscription {\n @Input() organizationId: string;\n @Input() maxAutoscaleSeats: number;\n @Input() currentSeatCount: number;\n @Input() seatPrice = 0;\n @Input() interval = \"year\";\n @Output() onAdjusted = new EventEmitter();\n\n formPromise: Promise;\n limitSubscription: boolean;\n newSeatCount: number;\n newMaxSeats: number;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n ngOnInit() {\n this.limitSubscription = this.maxAutoscaleSeats != null;\n this.newSeatCount = this.currentSeatCount;\n this.newMaxSeats = this.maxAutoscaleSeats;\n }\n\n async submit() {\n try {\n const seatAdjustment = this.newSeatCount - this.currentSeatCount;\n const request = new OrganizationSubscriptionUpdateRequest(seatAdjustment, this.newMaxSeats);\n this.formPromise = this.apiService.postOrganizationUpdateSubscription(\n this.organizationId,\n request\n );\n\n await this.formPromise;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"subscriptionUpdated\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n this.onAdjusted.emit();\n }\n\n limitSubscriptionChanged() {\n if (!this.limitSubscription) {\n this.newMaxSeats = null;\n }\n }\n\n get adjustedSeatTotal(): number {\n return this.newSeatCount * this.seatPrice;\n }\n\n get maxSeatTotal(): number {\n return this.newMaxSeats * this.seatPrice;\n }\n}\n","
\n
\n
\n
\n \n \n \n {{ \"total\" | i18n }}: {{ newSeatCount || 0 }} ×\n {{ seatPrice | currency: \"$\" }} = {{ adjustedSeatTotal | currency: \"$\" }} /\n {{ interval | i18n }}\n \n
\n
\n
\n
\n
\n \n \n
\n {{ \"limitSubscriptionDesc\" | i18n }}\n
\n
\n
\n
\n \n \n \n {{ \"maxSeatCost\" | i18n }}: {{ newMaxSeats || 0 }} ×\n {{ seatPrice | currency: \"$\" }} = {{ maxSeatTotal | currency: \"$\" }} /\n {{ interval | i18n }}\n \n
\n
\n \n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { OrganizationApiKeyType } from \"jslib-common/enums/organizationApiKeyType\";\nimport { OrganizationApiKeyRequest } from \"jslib-common/models/request/organizationApiKeyRequest\";\nimport { ApiKeyResponse } from \"jslib-common/models/response/apiKeyResponse\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-billing-sync-api-key\",\n templateUrl: \"billing-sync-api-key.component.html\",\n})\nexport class BillingSyncApiKeyComponent {\n organizationId: string;\n hasBillingToken: boolean;\n\n showRotateScreen: boolean;\n masterPassword: Verification;\n formPromise: Promise;\n clientSecret?: string;\n keyRevisionDate?: Date;\n lastSyncDate?: Date = null;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n copy() {\n this.platformUtilsService.copyToClipboard(this.clientSecret);\n }\n\n async submit() {\n if (this.showRotateScreen) {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword, OrganizationApiKeyRequest)\n .then((request) => {\n request.type = OrganizationApiKeyType.BillingSync;\n return this.apiService.postOrganizationRotateApiKey(this.organizationId, request);\n });\n const response = await this.formPromise;\n await this.load(response);\n this.showRotateScreen = false;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"billingSyncApiKeyRotated\")\n );\n } else {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword, OrganizationApiKeyRequest)\n .then((request) => {\n request.type = OrganizationApiKeyType.BillingSync;\n return this.apiService.postOrganizationApiKey(this.organizationId, request);\n });\n const response = await this.formPromise;\n await this.load(response);\n }\n }\n\n async load(response: ApiKeyResponse) {\n this.clientSecret = response.apiKey;\n this.keyRevisionDate = response.revisionDate;\n this.hasBillingToken = true;\n const syncStatus = await this.apiService.getSponsorshipSyncStatus(this.organizationId);\n this.lastSyncDate = syncStatus.lastSyncDate;\n }\n\n cancelRotate() {\n this.showRotateScreen = false;\n }\n\n rotateToken() {\n this.showRotateScreen = true;\n }\n\n private dayDiff(date1: Date, date2: Date): number {\n const diffTime = Math.abs(date2.getTime() - date1.getTime());\n return Math.round(diffTime / (1000 * 60 * 60 * 24));\n }\n\n get submitButtonText(): string {\n if (this.showRotateScreen) {\n return this.i18nService.t(\"rotateToken\");\n }\n\n return this.i18nService.t(this.hasBillingToken ? \"continue\" : \"generateToken\");\n }\n\n get showLastSyncText(): boolean {\n // If the keyRevisionDate is later than the lastSyncDate we need to show\n // a warning that they need to put the billing sync key in their self hosted install\n return this.lastSyncDate && this.lastSyncDate > this.keyRevisionDate;\n }\n\n get showAwaitingSyncText(): boolean {\n return this.lastSyncDate && this.lastSyncDate <= this.keyRevisionDate;\n }\n\n get daysBetween(): number {\n return this.dayDiff(this.keyRevisionDate, new Date());\n }\n}\n","
\n
\n \n
\n

\n {{ (hasBillingToken ? \"viewBillingSyncToken\" : \"generateBillingSyncToken\") | i18n }}\n

\n \n ×\n \n
\n
\n \n \n \n

{{ \"rotateBillingSyncTokenTitle\" | i18n }}

\n \n {{ \"rotateBillingSyncTokenWarning\" | i18n }}\n \n
\n\n
\n

{{ \"copyPasteBillingSync\" | i18n }}

\n \n
\n \n
\n \n \n \n
\n
\n
\n {{ \"lastSync\" | i18n }}:\n {{ lastSyncDate | date: \"medium\" }}\n
\n
\n \n {{\n (daysBetween === 1 ? \"awaitingSyncSingular\" : \"awaitingSyncPlural\")\n | i18n: daysBetween\n }}\n
\n
\n
\n
\n \n \n \n {{ submitButtonText }}\n \n \n \n {{ \"close\" | i18n }}\n \n \n {{ \"cancel\" | i18n }}\n \n \n {{ \"rotateToken\" | i18n }}\n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\n\n@Component({\n selector: \"app-change-plan\",\n templateUrl: \"change-plan.component.html\",\n})\nexport class ChangePlanComponent {\n @Input() organizationId: string;\n @Output() onChanged = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n defaultUpgradePlan: PlanType = PlanType.FamiliesAnnually;\n defaultUpgradeProduct: ProductType = ProductType.Families;\n\n constructor(private logService: LogService) {}\n\n async submit() {\n try {\n this.onChanged.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{ \"changeBillingPlan\" | i18n }}

\n

{{ \"changeBillingPlanUpgrade\" | i18n }}

\n \n \n
\n
\n","import { Component, EventEmitter, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { Verification } from \"jslib-common/types/verification\";\n\nclass CountBasedLocalizationKey {\n singular: string;\n plural: string;\n\n getKey(count: number) {\n return count == 1 ? this.singular : this.plural;\n }\n\n constructor(singular: string, plural: string) {\n this.singular = singular;\n this.plural = plural;\n }\n}\n\nclass OrganizationContentSummaryItem {\n count: number;\n get localizationKey(): string {\n return this.localizationKeyOptions.getKey(this.count);\n }\n private localizationKeyOptions: CountBasedLocalizationKey;\n constructor(count: number, localizationKeyOptions: CountBasedLocalizationKey) {\n this.count = count;\n this.localizationKeyOptions = localizationKeyOptions;\n }\n}\n\nclass OrganizationContentSummary {\n totalItemCount = 0;\n itemCountByType: OrganizationContentSummaryItem[] = [];\n}\n\n@Component({\n selector: \"app-delete-organization\",\n templateUrl: \"delete-organization.component.html\",\n})\nexport class DeleteOrganizationComponent implements OnInit {\n organizationId: string;\n loaded: boolean;\n deleteOrganizationRequestType: \"InvalidFamiliesForEnterprise\" | \"RegularDelete\" = \"RegularDelete\";\n organizationName: string;\n organizationContentSummary: OrganizationContentSummary = new OrganizationContentSummary();\n @Output() onSuccess: EventEmitter = new EventEmitter();\n\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private logService: LogService,\n private cipherService: CipherService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit(): Promise {\n await this.load();\n }\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.deleteOrganization(this.organizationId, request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationDeleted\"),\n this.i18nService.t(\"organizationDeletedDesc\")\n );\n this.onSuccess.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async load() {\n this.organizationName = (await this.organizationService.get(this.organizationId)).name;\n this.organizationContentSummary = await this.buildOrganizationContentSummary();\n this.loaded = true;\n }\n\n private async buildOrganizationContentSummary(): Promise {\n const organizationContentSummary = new OrganizationContentSummary();\n const organizationItems = (\n await this.cipherService.getAllFromApiForOrganization(this.organizationId)\n ).filter((item) => item.deletedDate == null);\n\n if (organizationItems.length < 1) {\n return organizationContentSummary;\n }\n\n organizationContentSummary.totalItemCount = organizationItems.length;\n for (const cipherType of Utils.iterateEnum(CipherType)) {\n const count = this.getOrganizationItemCountByType(organizationItems, cipherType);\n if (count > 0) {\n organizationContentSummary.itemCountByType.push(\n new OrganizationContentSummaryItem(\n count,\n this.getOrganizationItemLocalizationKeysByType(CipherType[cipherType])\n )\n );\n }\n }\n\n return organizationContentSummary;\n }\n\n private getOrganizationItemCountByType(items: CipherView[], type: CipherType) {\n return items.filter((item) => item.type == type).length;\n }\n\n private getOrganizationItemLocalizationKeysByType(type: string): CountBasedLocalizationKey {\n return new CountBasedLocalizationKey(`type${type}`, `type${type}Plural`);\n }\n}\n","
\n
\n \n
\n

{{ \"deleteOrganization\" | i18n }}

\n \n ×\n \n
\n
\n {{\n \"deletingOrganizationIsPermanentWarning\" | i18n: organizationName\n }}\n

\n \n {{ \"orgCreatedSponsorshipInvalid\" | i18n }}\n \n \n 0\">\n {{ \"deletingOrganizationContentWarning\" | i18n: organizationName }}\n

    \n
  • \n {{ type.count }} {{ type.localizationKey | i18n }}\n
  • \n
\n {{ \"deletingOrganizationActiveUserAccountsWarning\" | i18n }}\n \n \n

\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-download-license\",\n templateUrl: \"download-license.component.html\",\n})\nexport class DownloadLicenseComponent {\n @Input() organizationId: string;\n @Output() onDownloaded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n installationId: string;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n if (this.installationId == null || this.installationId === \"\") {\n return;\n }\n\n try {\n this.formPromise = this.apiService.getOrganizationLicense(\n this.organizationId,\n this.installationId\n );\n const license = await this.formPromise;\n const licenseString = JSON.stringify(license, null, 2);\n this.platformUtilsService.saveFile(\n window,\n licenseString,\n null,\n \"bitwarden_organization_license.json\"\n );\n this.onDownloaded.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n

{{ \"downloadLicense\" | i18n }}

\n
\n
\n
\n \n \n \n \n
\n \n
\n
\n \n \n
\n
\n","import { Component } from \"@angular/core\";\n\n// Component is used so that the SVG can embed CSS color variables\n@Component({\n selector: \"app-image-org-subscription-hidden\",\n templateUrl: \"image-subscription-hidden.component.svg\",\n})\nexport class ImageSubscriptionHiddenComponent {}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { TransactionType } from \"jslib-common/enums/transactionType\";\nimport { VerifyBankRequest } from \"jslib-common/models/request/verifyBankRequest\";\nimport { BillingResponse } from \"jslib-common/models/response/billingResponse\";\n\n@Component({\n selector: \"app-org-billing\",\n templateUrl: \"./organization-billing.component.html\",\n})\nexport class OrganizationBillingComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingResponse;\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n organizationId: string;\n verifyAmount1: number;\n verifyAmount2: number;\n\n verifyBankPromise: Promise;\n\n // TODO - Make sure to properly split out the billing/invoice and payment method/account during org admin refresh\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n if (this.organizationId != null) {\n this.billing = await this.apiService.getOrganizationBilling(this.organizationId);\n }\n this.loading = false;\n }\n\n async verifyBank() {\n if (this.loading) {\n return;\n }\n\n try {\n const request = new VerifyBankRequest();\n request.amount1 = this.verifyAmount1;\n request.amount2 = this.verifyAmount2;\n this.verifyBankPromise = this.apiService.postOrganizationVerifyBank(\n this.organizationId,\n request\n );\n await this.verifyBankPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verifiedBankAccount\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"addCredit\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAddCredit = true;\n }\n\n closeAddCredit(load: boolean) {\n this.showAddCredit = false;\n if (load) {\n this.load();\n }\n }\n\n changePayment() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"changePaymentMethod\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get paymentSourceInApp() {\n return (\n this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp)\n );\n }\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n}\n","
\n

\n {{ \"billing\" | i18n }}\n

\n \n \n {{ \"refresh\" | i18n }}\n \n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ (isCreditBalance ? \"accountCredit\" : \"accountBalance\") | i18n }}

\n

\n {{ creditOrBalance | currency: \"$\" }}\n

\n

{{ \"creditAppliedDesc\" | i18n }}

\n \n {{ \"addCredit\" | i18n }}\n \n \n \n

{{ \"paymentMethod\" | i18n }}

\n

{{ \"noPaymentMethod\" | i18n }}

\n \n \n

{{ \"verifyBankAccountDesc\" | i18n }} {{ \"verifyBankAccountFailureWarning\" | i18n }}

\n \n \n
\n
\n
$0.
\n
\n \n
\n \n
\n
\n
$0.
\n
\n \n
\n \n \n {{ \"verifyBankAccount\" | i18n }}\n \n \n \n

\n \n {{ \"inAppPurchase\" | i18n }}\n {{ paymentSource.description }}\n

\n
\n \n {{ (paymentSource ? \"changePaymentMethod\" : \"addPaymentMethod\") | i18n }}\n \n \n \n

{{ \"invoices\" | i18n }}

\n

{{ \"noInvoices\" | i18n }}

\n \n \n \n \n \n \n \n \n \n
{{ i.date | date: \"mediumDate\" }}\n \n \n \n {{ \"invoiceNumber\" | i18n: i.number }}\n {{ i.amount | currency: \"$\" }}\n \n \n {{ \"paid\" | i18n }}\n \n \n \n {{ \"unpaid\" | i18n }}\n \n
\n

{{ \"transactions\" | i18n }}

\n

{{ \"noTransactions\" | i18n }}

\n \n \n \n \n \n \n \n {{ t.amount | currency: \"$\" }}\n \n \n \n
{{ t.createdDate | date: \"mediumDate\" }}\n \n {{ \"chargeNoun\" | i18n }}\n \n {{ \"refundNoun\" | i18n }}\n \n \n {{ t.details }}\n
\n * {{ \"chargesStatement\" | i18n: \"BITWARDEN\" }}\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalRef } from \"jslib-angular/components/modal/modal.ref\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationApiKeyType } from \"jslib-common/enums/organizationApiKeyType\";\nimport { OrganizationConnectionType } from \"jslib-common/enums/organizationConnectionType\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { BillingSyncConfigApi } from \"jslib-common/models/api/billingSyncConfigApi\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { OrganizationConnectionResponse } from \"jslib-common/models/response/organizationConnectionResponse\";\nimport { OrganizationSubscriptionResponse } from \"jslib-common/models/response/organizationSubscriptionResponse\";\n\nimport { BillingSyncKeyComponent } from \"src/app/settings/billing-sync-key.component\";\n\nimport { BillingSyncApiKeyComponent } from \"./billing-sync-api-key.component\";\n\n@Component({\n selector: \"app-org-subscription\",\n templateUrl: \"organization-subscription.component.html\",\n})\nexport class OrganizationSubscriptionComponent implements OnInit {\n @ViewChild(\"setupBillingSyncTemplate\", { read: ViewContainerRef, static: true })\n setupBillingSyncModalRef: ViewContainerRef;\n\n loading = false;\n firstLoaded = false;\n organizationId: string;\n adjustSeatsAdd = true;\n showAdjustSeats = false;\n showAdjustSeatAutoscale = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n showBillingSyncKey = false;\n showDownloadLicense = false;\n showChangePlan = false;\n sub: OrganizationSubscriptionResponse;\n selfHosted = false;\n hasBillingSyncToken: boolean;\n\n userOrg: Organization;\n existingBillingSyncConnection: OrganizationConnectionResponse;\n\n removeSponsorshipPromise: Promise;\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n @ViewChild(\"rotateBillingSyncKeyTemplate\", { read: ViewContainerRef, static: true })\n billingSyncKeyViewContainerRef: ViewContainerRef;\n billingSyncKeyRef: [ModalRef, BillingSyncKeyComponent];\n\n constructor(\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private logService: LogService,\n private modalService: ModalService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await this.load();\n this.firstLoaded = true;\n });\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n this.loading = true;\n this.userOrg = await this.organizationService.get(this.organizationId);\n if (this.userOrg.canManageBilling) {\n this.sub = await this.apiService.getOrganizationSubscription(this.organizationId);\n }\n const apiKeyResponse = await this.apiService.getOrganizationApiKeyInformation(\n this.organizationId\n );\n this.hasBillingSyncToken = apiKeyResponse.data.some(\n (i) => i.keyType === OrganizationApiKeyType.BillingSync\n );\n\n if (this.selfHosted) {\n this.showBillingSyncKey = await this.apiService.getCloudCommunicationsEnabled();\n }\n\n if (this.showBillingSyncKey) {\n this.existingBillingSyncConnection = await this.apiService.getOrganizationConnection(\n this.organizationId,\n OrganizationConnectionType.CloudBillingSync,\n BillingSyncConfigApi\n );\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"reinstateConfirmation\"),\n this.i18nService.t(\"reinstateSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\")\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postOrganizationReinstate(this.organizationId);\n await this.reinstatePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reinstated\"));\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"cancelConfirmation\"),\n this.i18nService.t(\"cancelSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postOrganizationCancel(this.organizationId);\n await this.cancelPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"canceledSubscription\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async changePlan() {\n this.showChangePlan = !this.showChangePlan;\n }\n\n closeChangePlan(changed: boolean) {\n this.showChangePlan = false;\n }\n\n downloadLicense() {\n this.showDownloadLicense = !this.showDownloadLicense;\n }\n\n async manageBillingSync() {\n const [ref] = await this.modalService.openViewRef(\n BillingSyncApiKeyComponent,\n this.setupBillingSyncModalRef,\n (comp) => {\n comp.organizationId = this.organizationId;\n comp.hasBillingToken = this.hasBillingSyncToken;\n }\n );\n ref.onClosed.subscribe(async () => {\n await this.load();\n });\n }\n\n closeDownloadLicense() {\n this.showDownloadLicense = false;\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(updated: boolean) {\n this.showUpdateLicense = false;\n if (updated) {\n this.load();\n this.messagingService.send(\"updatedOrgLicense\");\n }\n }\n\n subscriptionAdjusted() {\n this.load();\n }\n\n adjustStorage(add: boolean) {\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n async removeSponsorship() {\n const isConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeSponsorshipConfirmation\"),\n this.i18nService.t(\"removeSponsorship\"),\n this.i18nService.t(\"remove\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!isConfirmed) {\n return;\n }\n\n try {\n this.removeSponsorshipPromise = this.apiService.deleteRemoveSponsorship(this.organizationId);\n await this.removeSponsorshipPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removeSponsorshipSuccess\")\n );\n await this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async manageBillingSyncSelfHosted() {\n this.billingSyncKeyRef = await this.modalService.openViewRef(\n BillingSyncKeyComponent,\n this.billingSyncKeyViewContainerRef,\n (comp) => {\n comp.entityId = this.organizationId;\n comp.existingConnectionId = this.existingBillingSyncConnection?.id;\n comp.billingSyncKey = this.existingBillingSyncConnection?.config?.billingSyncKey;\n comp.setParentConnection = (\n connection: OrganizationConnectionResponse\n ) => {\n this.existingBillingSyncConnection = connection;\n this.billingSyncKeyRef[0].close();\n };\n }\n );\n }\n\n get isExpired() {\n return (\n this.sub != null && this.sub.expiration != null && new Date(this.sub.expiration) < new Date()\n );\n }\n\n get subscriptionMarkedForCancel() {\n return (\n this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate\n );\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb\n ? +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2)\n : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get billingInterval() {\n const monthly = !this.sub.plan.isAnnual;\n return monthly ? \"month\" : \"year\";\n }\n\n get storageGbPrice() {\n return this.sub.plan.additionalStoragePricePerGb;\n }\n\n get seatPrice() {\n return this.sub.plan.seatPrice;\n }\n\n get seats() {\n return this.sub.seats;\n }\n\n get maxAutoscaleSeats() {\n return this.sub.maxAutoscaleSeats;\n }\n\n get canAdjustSeats() {\n return this.sub.plan.hasAdditionalSeatsOption;\n }\n\n get isSponsoredSubscription(): boolean {\n return this.sub.subscription?.items.some((i) => i.sponsoredSubscriptionItem);\n }\n\n get canDownloadLicense() {\n return (\n (this.sub.planType !== PlanType.Free && this.subscription == null) ||\n (this.subscription != null && !this.subscription.cancelled)\n );\n }\n\n get canManageBillingSync() {\n return (\n !this.selfHosted &&\n (this.sub.planType === PlanType.EnterpriseAnnually ||\n this.sub.planType === PlanType.EnterpriseMonthly ||\n this.sub.planType === PlanType.EnterpriseAnnually2019 ||\n this.sub.planType === PlanType.EnterpriseMonthly2019)\n );\n }\n\n get subscriptionDesc() {\n if (this.sub.planType === PlanType.Free) {\n return this.i18nService.t(\"subscriptionFreePlan\", this.sub.seats.toString());\n } else if (\n this.sub.planType === PlanType.FamiliesAnnually ||\n this.sub.planType === PlanType.FamiliesAnnually2019\n ) {\n if (this.isSponsoredSubscription) {\n return this.i18nService.t(\"subscriptionSponsoredFamiliesPlan\", this.sub.seats.toString());\n } else {\n return this.i18nService.t(\"subscriptionFamiliesPlan\", this.sub.seats.toString());\n }\n } else if (this.sub.maxAutoscaleSeats === this.sub.seats && this.sub.seats != null) {\n return this.i18nService.t(\"subscriptionMaxReached\", this.sub.seats.toString());\n } else if (this.sub.maxAutoscaleSeats == null) {\n return this.i18nService.t(\"subscriptionUserSeatsUnlimitedAutoscale\");\n } else {\n return this.i18nService.t(\n \"subscriptionUserSeatsLimitedAutoscale\",\n this.sub.maxAutoscaleSeats.toString()\n );\n }\n }\n\n get showChangePlanButton() {\n return this.subscription == null && this.sub.planType === PlanType.Free && !this.showChangePlan;\n }\n\n get billingSyncSetUp() {\n return this.existingBillingSyncConnection?.id != null;\n }\n}\n","
\n

\n {{ \"subscription\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n\n
\n \n

{{ \"billingManagedByProvider\" | i18n: this.userOrg.providerName }}

\n

{{ \"billingContactProviderForAssistance\" | i18n }}

\n
\n
\n\n\n \n {{ \"subscriptionCanceled\" | i18n }}\n \n

{{ \"subscriptionPendingCanceled\" | i18n }}

\n \n \n {{ \"reinstateSubscription\" | i18n }}\n \n \n \n
\n
\n
\n
{{ \"billingPlan\" | i18n }}
\n
{{ sub.plan.name }}
\n \n
{{ \"status\" | i18n }}
\n
\n {{\n isSponsoredSubscription ? \"sponsored\" : subscription.status || \"-\"\n }}\n {{\n \"pendingCancellation\" | i18n\n }}\n
\n
{{ \"nextCharge\" | i18n }}
\n
\n {{\n nextInvoice\n ? (nextInvoice.date | date: \"mediumDate\") +\n \", \" +\n (nextInvoice.amount | currency: \"$\")\n : \"-\"\n }}\n
\n
\n
\n
\n
\n {{ \"details\" | i18n }}\n \n \n \n \n \n \n \n
\n {{ i.name }} {{ i.quantity > 1 ? \"×\" + i.quantity : \"\" }} @\n {{ i.amount | currency: \"$\" }}\n {{ i.quantity * i.amount | currency: \"$\" }} /{{ i.interval | i18n }}
\n
\n \n
\n
\n
{{ \"provider\" | i18n }}
\n
{{ \"yourProviderIs\" | i18n: userOrg.providerName }}
\n
\n
\n
\n
\n \n \n {{ \"changeBillingPlan\" | i18n }}\n \n \n \n

{{ \"manageSubscription\" | i18n }}

\n

{{ subscriptionDesc }}

\n \n
\n \n \n
\n
\n \n \n {{ \"removeSponsorship\" | i18n }}\n \n

{{ \"storage\" | i18n }}

\n

{{ \"subscriptionStorage\" | i18n: sub.maxStorageGb || 0:sub.storageName || \"0 MB\" }}

\n
\n \n {{ storagePercentage / 100 | percent }}\n
\n \n \n
\n
\n \n \n {{ \"removeStorage\" | i18n }}\n \n
\n \n
\n
\n \n

{{ \"selfHostingTitle\" | i18n }}

\n

\n {{ \"selfHostingEnterpriseOrganizationSectionCopy\" | i18n }}\n

\n
\n \n {{ \"downloadLicense\" | i18n }}\n \n \n {{ (hasBillingSyncToken ? \"manageBillingSync\" : \"setUpBillingSync\") | i18n }}\n \n
\n
\n \n
\n

{{ \"additionalOptions\" | i18n }}

\n

\n {{ \"additionalOptionsDesc\" | i18n }}\n

\n
\n \n \n {{ \"cancelSubscription\" | i18n }}\n \n
\n
\n \n
\n
{{ \"billingPlan\" | i18n }}
\n
{{ sub.plan.name }}
\n
{{ \"expiration\" | i18n }}
\n
\n {{ sub.expiration | date: \"mediumDate\" }}\n \n \n {{ \"licenseIsExpired\" | i18n }}\n \n
\n
{{ \"neverExpires\" | i18n }}
\n
\n
\n \n \n {{ \"manageSubscription\" | i18n }}\n \n
\n
\n
\n \n ×\n \n

{{ \"updateLicense\" | i18n }}

\n \n
\n
\n
\n

\n {{ \"billingSync\" | i18n }}\n

\n

\n {{ \"billingSyncDesc\" | i18n }}\n

\n \n {{ \"manageBillingSync\" | i18n }}\n \n \n {{ \"lastSync\" | i18n }}:\n \n {{ userOrg.familySponsorshipLastSyncDate | date: \"medium\" }}\n \n \n {{ \"never\" | i18n | lowercase }}\n \n \n
\n
\n\n\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-org-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent {\n access2fa = false;\n showBilling: boolean;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n const organization = await this.organizationService.get(params.organizationId);\n this.showBilling = !this.platformUtilsService.isSelfHost() && organization.canManageBilling;\n this.access2fa = organization.use2fa;\n });\n }\n}\n","
\n
\n
\n
\n
{{ \"settings\" | i18n }}
\n
\n \n {{ \"myOrganization\" | i18n }}\n \n \n {{ \"subscription\" | i18n }}\n \n \n {{ \"billing\" | i18n }}\n \n \n {{ \"twoStepLogin\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\nimport { TwoFactorDuoComponent } from \"../../settings/two-factor-duo.component\";\nimport { TwoFactorSetupComponent as BaseTwoFactorSetupComponent } from \"../../settings/two-factor-setup.component\";\n\n@Component({\n selector: \"app-two-factor-setup\",\n templateUrl: \"../../settings/two-factor-setup.component.html\",\n})\nexport class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {\n constructor(\n apiService: ApiService,\n modalService: ModalService,\n messagingService: MessagingService,\n policyService: PolicyService,\n private route: ActivatedRoute,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n logService: LogService\n ) {\n super(\n apiService,\n modalService,\n messagingService,\n policyService,\n stateService,\n platformUtilsService,\n i18nService,\n logService\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n await super.ngOnInit();\n });\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.OrganizationDuo: {\n const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.type = TwoFactorProviderType.OrganizationDuo;\n duoComp.organizationId = this.organizationId;\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.OrganizationDuo);\n });\n break;\n }\n default:\n break;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorOrganizationProviders(this.organizationId);\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type !== TwoFactorProviderType.OrganizationDuo;\n }\n}\n","
\n

{{ \"twoStepLogin\" | i18n }}

\n
\n

{{ \"twoStepLoginDesc\" | i18n }}

\n

{{ \"twoStepLoginOrganizationDesc\" | i18n }}

\n\n

{{ \"twoStepLoginRecoveryWarning\" | i18n }}

\n \n
\n

\n {{ \"providers\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n\n {{ \"twoStepLoginPolicyUserWarning\" | i18n }}\n\n
    \n
  • \n
    \n \n
    \n
    \n

    \n {{ p.name }}\n \n \n {{ \"enabled\" | i18n }}\n \n \n

    \n {{ p.description }}\n
    \n
    \n \n {{ \"manage\" | i18n }}\n \n
    \n
  • \n
\n
\n
\n
\n

\n {{ \"deviceVerification\" | i18n }}\n

\n
\n
\n \n \n
\n {{ \"deviceVerificationDesc\" | i18n }}\n
\n \n \n {{ \"save\" | i18n }}\n \n
\n
\n
\n\n\n\n\n\n\n\n","import { Component } from \"@angular/core\";\nimport { Params } from \"@angular/router\";\n\nimport { BaseAcceptComponent } from \"src/app/common/base.accept.component\";\n\n@Component({\n selector: \"app-accept-family-sponsorship\",\n templateUrl: \"accept-family-sponsorship.component.html\",\n})\nexport class AcceptFamilySponsorshipComponent extends BaseAcceptComponent {\n failedShortMessage = \"inviteAcceptFailedShort\";\n failedMessage = \"inviteAcceptFailed\";\n\n requiredParameters = [\"email\", \"token\"];\n\n async authedHandler(qParams: Params) {\n this.router.navigate([\"/setup/families-for-enterprise\"], { queryParams: qParams });\n }\n\n async unauthedHandler(qParams: Params) {\n if (!qParams.register) {\n this.router.navigate([\"/login\"], { queryParams: { email: qParams.email } });\n } else {\n this.router.navigate([\"/register\"], { queryParams: { email: qParams.email } });\n }\n }\n}\n","
\n
\n \"Bitwarden\"\n

\n \n {{ \"loading\" | i18n }}\n

\n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ValidationService } from \"jslib-angular/services/validation.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PlanSponsorshipType } from \"jslib-common/enums/planSponsorshipType\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { OrganizationSponsorshipRedeemRequest } from \"jslib-common/models/request/organization/organizationSponsorshipRedeemRequest\";\n\nimport { DeleteOrganizationComponent } from \"src/app/organizations/settings/delete-organization.component\";\nimport { OrganizationPlansComponent } from \"src/app/settings/organization-plans.component\";\n\n@Component({\n selector: \"families-for-enterprise-setup\",\n templateUrl: \"families-for-enterprise-setup.component.html\",\n})\nexport class FamiliesForEnterpriseSetupComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: false })\n set organizationPlansComponent(value: OrganizationPlansComponent) {\n if (!value) {\n return;\n }\n\n value.plan = PlanType.FamiliesAnnually;\n value.product = ProductType.Families;\n value.acceptingSponsorship = true;\n value.onSuccess.subscribe(this.onOrganizationCreateSuccess.bind(this));\n }\n\n @ViewChild(\"deleteOrganizationTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n\n loading = true;\n badToken = false;\n formPromise: Promise;\n\n token: string;\n existingFamilyOrganizations: Organization[];\n\n showNewOrganization = false;\n _organizationPlansComponent: OrganizationPlansComponent;\n _selectedFamilyOrganizationId = \"\";\n\n constructor(\n private router: Router,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private route: ActivatedRoute,\n private apiService: ApiService,\n private syncService: SyncService,\n private validationService: ValidationService,\n private organizationService: OrganizationService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n document.body.classList.remove(\"layout_frontend\");\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const error = qParams.token == null;\n if (error) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"sponsoredFamiliesAcceptFailed\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"/\"]);\n return;\n }\n\n this.token = qParams.token;\n\n await this.syncService.fullSync(true);\n this.badToken = !(await this.apiService.postPreValidateSponsorshipToken(this.token));\n this.loading = false;\n\n this.existingFamilyOrganizations = (await this.organizationService.getAll()).filter(\n (o) => o.planProductType === ProductType.Families\n );\n\n if (this.existingFamilyOrganizations.length === 0) {\n this.selectedFamilyOrganizationId = \"createNew\";\n }\n });\n }\n\n async submit() {\n this.formPromise = this.doSubmit(this._selectedFamilyOrganizationId);\n await this.formPromise;\n this.formPromise = null;\n }\n\n get selectedFamilyOrganizationId() {\n return this._selectedFamilyOrganizationId;\n }\n\n set selectedFamilyOrganizationId(value: string) {\n this._selectedFamilyOrganizationId = value;\n this.showNewOrganization = value === \"createNew\";\n }\n\n private async doSubmit(organizationId: string) {\n try {\n const request = new OrganizationSponsorshipRedeemRequest();\n request.planSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise;\n request.sponsoredOrganizationId = organizationId;\n\n await this.apiService.postRedeemSponsorship(this.token, request);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"sponsoredFamiliesOfferRedeemed\")\n );\n await this.syncService.fullSync(true);\n\n this.router.navigate([\"/\"]);\n } catch (e) {\n if (this.showNewOrganization) {\n await this.modalService.openViewRef(\n DeleteOrganizationComponent,\n this.deleteModalRef,\n (comp) => {\n comp.organizationId = organizationId;\n comp.deleteOrganizationRequestType = \"InvalidFamiliesForEnterprise\";\n comp.onSuccess.subscribe(() => {\n this.router.navigate([\"/\"]);\n });\n }\n );\n }\n this.validationService.showError(this.i18nService.t(\"sponsorshipTokenHasExpired\"));\n }\n }\n\n private async onOrganizationCreateSuccess(value: any) {\n // Use newly created organization id\n await this.doSubmit(value.organizationId);\n }\n}\n","
\n
\n

{{ \"sponsoredFamiliesOffer\" | i18n }}

\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n {{ \"badToken\" | i18n }}\n
\n \n

\n {{ \"acceptBitwardenFamiliesHelp\" | i18n }}\n

\n
\n \n \n \n \n \n \n
\n
\n \n
\n
\n \n
\n \n
\n\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\n\nimport { ExportComponent as BaseExportComponent } from \"../../tools/export.component\";\n\n@Component({\n selector: \"app-org-export\",\n templateUrl: \"../../tools/export.component.html\",\n})\nexport class ExportComponent extends BaseExportComponent {\n constructor(\n cryptoService: CryptoService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n exportService: ExportService,\n eventService: EventService,\n private route: ActivatedRoute,\n policyService: PolicyService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n formBuilder: FormBuilder\n ) {\n super(\n cryptoService,\n i18nService,\n platformUtilsService,\n exportService,\n eventService,\n policyService,\n logService,\n userVerificationService,\n formBuilder\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n });\n await super.ngOnInit();\n }\n\n async checkExportDisabled() {\n return;\n }\n\n getExportData() {\n return this.exportService.getOrganizationExport(this.organizationId, this.format);\n }\n\n getFileName() {\n return super.getFileName(\"org\");\n }\n\n async collectEvent(): Promise {\n // TODO\n // await this.eventService.collect(EventType.Organization_ClientExportedVault);\n }\n}\n","\n
\n

{{ \"exportVault\" | i18n }}

\n
\n\n \n {{ \"personalVaultExportPolicyInEffect\" | i18n }}\n \n \n\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n {{ \"exportVault\" | i18n }}\n \n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent } from \"../../reports/exposed-passwords-report.component\";\n\n@Component({\n selector: \"app-org-exposed-passwords-report\",\n templateUrl: \"../../reports/exposed-passwords-report.component.html\",\n})\nexport class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private organizationService: OrganizationService,\n private route: ActivatedRoute,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n auditService,\n modalService,\n messagingService,\n stateService,\n passwordRepromptService\n );\n }\n\n ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await this.checkAccess();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n

{{ \"exposedPasswordsReport\" | i18n }}

\n
\n

{{ \"exposedPasswordsReportDesc\" | i18n }}

\n\n \n {{ \"checkExposedPasswords\" | i18n }}\n\n
\n \n {{ \"noExposedPasswords\" | i18n }}\n \n \n \n {{ \"exposedPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"exposedXTimes\" | i18n: (exposedPasswordMap.get(c.id) | number) }}\n \n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { ImportService } from \"jslib-common/abstractions/import.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\n\nimport { ImportComponent as BaseImportComponent } from \"../../tools/import.component\";\n\n@Component({\n selector: \"app-org-import\",\n templateUrl: \"../../tools/import.component.html\",\n})\nexport class ImportComponent extends BaseImportComponent {\n organizationName: string;\n\n constructor(\n i18nService: I18nService,\n importService: ImportService,\n router: Router,\n private route: ActivatedRoute,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private organizationService: OrganizationService,\n logService: LogService\n ) {\n super(i18nService, importService, router, platformUtilsService, policyService, logService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n this.successNavigate = [\"organizations\", this.organizationId, \"vault\"];\n await super.ngOnInit();\n this.importBlockedByPolicy = false;\n });\n const organization = await this.organizationService.get(this.organizationId);\n this.organizationName = organization.name;\n }\n\n async submit() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"importWarning\", this.organizationName),\n this.i18nService.t(\"warning\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n super.submit();\n }\n}\n","
\n

{{ \"importData\" | i18n }}

\n
\n\n {{ \"personalOwnershipPolicyInEffectImports\" | i18n }}\n\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/export-your-data/\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-lastpass/\n \n \n Using the KeePassX desktop application, navigate to \"Database\" → \"Export to CSV file\" and\n save the CSV file.\n \n \n In the Avira web vault, go to \"Settings\" → \"My Data\" → \"Export data\" and save the\n CSV file.\n \n \n In the Blur web vault, click your username at the top and go to \"Settings\" → \"Export\n Data\", then click \"Export CSV\" for your \"Accounts\".\n \n \n Using the SaveInCloud desktop application, navigate to \"File\" → \"Export\" → \"As XML\"\n and save the XML file.\n \n \n Using the Padlock desktop application, click the hamburger icon in the top left corner and\n navigate to \"Settings\" → \"Export\" button and save the file \"As CSV\".\n \n \n Using the KeePass 2 desktop application, navigate to \"File\" → \"Export\" and select the\n \"KeePass XML (2.x)\" option.\n \n \n Using the Universal Password Manager desktop application, navigate to \"Database\" →\n \"Export\" and save the CSV file.\n \n \n Using the SaferPass browser extension, click the hamburger icon in the top left corner and\n navigate to \"Settings\". Click the \"Export accounts\" button to save the CSV file.\n \n \n Using the Meldium web vault, navigate to \"Settings\". Locate the \"Export data\" function and\n click \"Show me my data\" to save the CSV file.\n \n \n Log into the Keeper web vault (keepersecurity.com/vault). Click on your \"account email\" (top\n right) and select \"Settings\". Go to \"Export\" and find the \"Export to .csv File\" option. Click\n \"Export\" to save the CSV file.\n \n \n Log into the Keeper web vault (keepersecurity.com/vault). Click on your \"account email\" (top\n right) and select \"Settings\". Go to \"Export\" and find the \"Export to .json File\" option. Click\n \"Export\" to save the JSON file.\n \n \n \n The process is exactly the same as importing from Google Chrome.\n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-chrome/\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-firefox/.\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-safari/.\n \n \n See detailed instructions on our help site at\n \n https://bitwarden.com/help/import-from-1password/.\n \n \n Using the Password Dragon desktop application, navigate to \"File\" → \"Export\" → \"To\n XML\". In the dialog that pops up select \"All Rows\" and check all fields. Click the \"Export\"\n button and save the XML file.\n \n \n Using the Enpass desktop application, navigate to \"File\" → \"Export\" → \"As CSV\".\n Select \"OK\" to the warning alert and save the CSV file. Note that the importer only supports\n files exported while Enpass is set to the English language, so adjust your settings\n accordingly.\n \n \n Using the Enpass 6 desktop application, click the menu button and navigate to \"File\" →\n \"Export\". Select the \".json\" file format option and save the JSON file.\n \n \n Using the Password Safe desktop application, navigate to \"File\" → \"Export To\" → \"XML\n format...\" and save the XML file.\n \n \n Log in to Dashlane, click on \"My Account\" → \"Settings\" → \"Export file\" and select\n \"Export as a CSV file\". This will download a zip archive containing various CSV files. Unzip\n the archive and import each CSV file individually.\n \n \n Dashlane no longer supports the JSON format. Only use this if you have an existing JSON for\n import. Use the CSV importer when creating new exports.\n \n \n Using the mSecure desktop application, navigate to \"File\" → \"Export\" → \"CSV File...\"\n and save the CSV file.\n \n \n Using the Sticky Password desktop application, navigate to \"Menu\" (top right) → \"Export\"\n → \"Export all\". Select the unencrypted format XML option and save the XML file.\n \n \n Using the True Key desktop application, click the gear icon (top right) and then navigate to\n \"App Settings\". Click the \"Export\" button, enter your password and save the CSV file.\n \n \n Log into the Clipperz web application (clipperz.is/app). Click the hamburger menu icon in the\n top right to expand the navigation bar. Navigate to \"Data\" → \"Export\". Click the\n \"download HTML+JSON\" button to save the HTML file.\n \n \n Using the RoboForm Editor desktop application, navigate to \"RoboForm\" (top left) →\n \"Options\" → \"Account & Data\" and click the \"Export\" button. Select all of your data,\n change the \"Format\" to \"CSV file\" and then click the \"Export\" button to save the CSV file.\n Note: RoboForm only allows you to export Logins. Other items will not be exported.\n \n \n Log into the Passbolt web vault and navigate to the \"Passwords\" listing. Select all of the\n passwords you would like to export and click the \"Export\" button at the top of the listing.\n Choose the \"csv (lastpass)\" export format and click the \"Export\" button.\n \n \n Using the Ascendo DataVault desktop application, navigate to \"Tools\" → \"Export\". In the\n dialog that pops up, select the \"All Items (DVX, CSV)\" option. Click the \"Ok\" button to save\n the CSV file.\n \n \n Using the Password Boss desktop application, navigate to \"File\" → \"Export data\" →\n \"Password Boss JSON - not encrypted\" and save the JSON file.\n \n \n Log into the Zoho web vault (vault.zoho.com). Navigate to \"Tools\" → \"Export Secrets\".\n Select \"All Secrets\" and click the \"Zoho Vault Format CSV\" button. Highlight and copy the data\n from the textarea. Open a text editor like Notepad and paste the data. Save the data from the\n text editor as\n zoho_export.csv.\n \n \n Using the SplashID Safe desktop application, click on the SplashID blue lock logo in the top\n right corner. Navigate to \"Export\" → \"Export as CSV\" and save the CSV file.\n \n \n Using the PassKeep mobile app, navigate to \"Backup/Restore\". Locate the \"CSV Backup/Restore\"\n section and click \"Backup to CSV\" to save the CSV file.\n \n \n Make sure you have python-keyring and python-gnomekeyring installed. Save the\n GNOME Keyring Import/Export\n python script to your desktop as pw_helper.py. Open terminal and run\n chmod +rx Desktop/pw_helper.py and then\n python Desktop/pw_helper.py export Desktop/my_passwords.json. Then upload the\n resulting my_passwords.json file here to Bitwarden.\n \n \n Using the Password Agent desktop application navigate to \"File\" → \"Export\", select the\n \"Fields to export\" button and check all of the fields, change the \"Output format\" to \"CSV\",\n and then click the \"Start\" button to save the CSV file.\n \n \n Log into the Passpack website vault and navigate to \"Settings\" → \"Export\", then click the\n \"Download\" button to save the CSV file.\n \n \n Open your Passman vault and click on \"Settings\" in the bottom left corner. In the \"Settings\"\n window switch to the \"Export credentials\" tab and choose \"JSON\" as the export type. Enter your\n vault's passphrase and click the \"Export\" button to save the JSON file.\n \n \n Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export\n data\". Select the \"Export\" button for the \"Export to CSV file\" option to save the CSV file.\n \n \n Open the Avast Passwords desktop application and navigate to \"Settings\" → \"Import/export\n data\". Select the \"Export\" button for the \"Export to JSON file\" option to save the JSON file.\n \n \n Open the F-Secure KEY desktop application and navigate to \"Settings\" → \"Export\n Passwords\". Select the \"Export\" button, enter your master password, and save the FSK file.\n \n \n Open the Kaspersky Password Manager desktop application and navigate to \"Settings\" →\n \"Import/Export\". Locate the \"Export to text file\" section and select the \"Export\" button to\n save the TXT file.\n \n \n Open the RememBear desktop application and navigate to \"Settings\" → \"Account\" →\n \"Export\". Enter your master password and select the \"Export Anyway\" button to save the CSV\n file.\n \n \n Open the PasswordWallet desktop application and navigate to \"File\" → \"Export\" →\n \"Visible entries to text file\". Enter your password and select the \"Ok\" button to save the TXT\n file.\n \n \n Open the Myki desktop browser extension and navigate to \"Advanced\" → \"Export Accounts\"\n and then scan the QR code with your mobile device. Various CSV files will then be saved to\n your computer's downloads folder.\n \n \n Export your SecureSafe password safe to a CSV file with a comma delimiter.\n \n \n Open the LogMeOnce browser extension, then navigate to \"Open Menu\" → \"Export To\" and\n select \"CSV File\" to save the CSV file.\n \n \n Open the BlackBerry Password Keeper application, then navigate to \"Settings\" →\n \"Import/Export\". Select \"Export Passwords\" and follow the instructions on screen to save the\n unencrypted CSV file.\n \n \n Open the Buttercup desktop application and unlock your vault. Right click on your vault's icon\n and select \"Export\" to save the CSV file.\n \n \n Open the Codebook desktop application and log in. Navigate to \"File\" → \"Export all\", then\n click \"Yes\" on the dialog and save the CSV file.\n \n \n Open the newest version of the Encryptr desktop application and allow all of your data to\n sync. Once syncing of your data is complete, the download icon in the top right corner will\n turn pink. Click the download icon and save the CSV file.\n \n \n From the Yoti browser extension, click on \"Settings\", then \"Export Saved Logins\" and save the\n CSV file.\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n \n {{ \"importData\" | i18n }}\n \n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent } from \"../../reports/inactive-two-factor-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"../../reports/inactive-two-factor-report.component.html\",\n})\nexport class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent {\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n super(\n cipherService,\n modalService,\n messagingService,\n stateService,\n logService,\n passwordRepromptService\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","
\n

\n {{ \"inactive2faReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"inactive2faReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noInactive2fa\" | i18n }}\n \n \n \n {{ \"inactive2faFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"instructions\" | i18n }}\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } from \"../../reports/reused-passwords-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"../../reports/reused-passwords-report.component.html\",\n})\nexport class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(cipherService, modalService, messagingService, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n

\n {{ \"reusedPasswordsReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"reusedPasswordsReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noReusedPasswords\" | i18n }}\n \n \n \n {{ \"reusedPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ \"reusedXTimes\" | i18n: passwordUseMap.get(c.login.password) }}\n \n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-org-tools\",\n templateUrl: \"tools.component.html\",\n})\nexport class ToolsComponent {\n organization: Organization;\n accessReports = false;\n loading = true;\n\n constructor(\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n private messagingService: MessagingService\n ) {}\n\n ngOnInit() {\n this.route.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n this.accessReports = this.organization.useTotp;\n this.loading = false;\n });\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: this.organization.id });\n }\n}\n","
\n \n \n {{ \"loading\" | i18n }}\n \n \n
\n
\n \n
\n
\n {{ \"reports\" | i18n }}\n
\n \n {{ \"upgrade\" | i18n }}\n \n
\n
\n
\n \n {{ \"exposedPasswordsReport\" | i18n }}\n \n \n {{ \"reusedPasswordsReport\" | i18n }}\n \n \n {{ \"weakPasswordsReport\" | i18n }}\n \n \n {{ \"unsecuredWebsitesReport\" | i18n }}\n \n \n {{ \"inactive2faReport\" | i18n }}\n \n
\n
\n
\n
\n \n
\n
\n \n
\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent } from \"../../reports/unsecured-websites-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"../../reports/unsecured-websites-report.component.html\",\n})\nexport class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent {\n constructor(\n cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(cipherService, modalService, messagingService, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n}\n","
\n

\n {{ \"unsecuredWebsitesReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"unsecuredWebsitesReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noUnsecuredWebsites\" | i18n }}\n \n \n \n {{ \"unsecuredWebsitesFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n
\n
\n\n","import { Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from \"../../reports/weak-passwords-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"../../reports/weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent {\n manageableCiphers: Cipher[];\n\n constructor(\n cipherService: CipherService,\n passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private route: ActivatedRoute,\n private organizationService: OrganizationService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n passwordGenerationService,\n modalService,\n messagingService,\n stateService,\n passwordRepromptService\n );\n }\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organization = await this.organizationService.get(params.organizationId);\n this.manageableCiphers = await this.cipherService.getAll();\n await super.ngOnInit();\n });\n }\n\n getAllCiphers(): Promise {\n return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n }\n\n canManageCipher(c: CipherView): boolean {\n return this.manageableCiphers.some((x) => x.id === c.id);\n }\n}\n","
\n

\n {{ \"weakPasswordsReport\" | i18n }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n
\n

{{ \"weakPasswordsReportDesc\" | i18n }}

\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n {{ \"noWeakPasswords\" | i18n }}\n \n \n \n {{ \"weakPasswordsFoundDesc\" | i18n: (ciphers.length | number) }}\n \n \n \n \n \n \n \n \n \n
\n \n \n \n {{\n c.name\n }}\n \n \n {{ c.name }}\n \n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n {{ passwordStrengthMap.get(c.id)[0] | i18n }}\n \n
\n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherCreateRequest } from \"jslib-common/models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"jslib-common/models/request/cipherRequest\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../../vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../../vault/add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n organization: Organization;\n originalCipher: Cipher = null;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n private apiService: ApiService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n protected allowOwnershipAssignment() {\n if (\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n ) {\n if (this.organization != null) {\n return this.cloneMode && this.organization.canEditAnyCollection;\n } else {\n return !this.editMode || this.cloneMode;\n }\n }\n return false;\n }\n\n protected loadCollections() {\n if (!this.organization.canEditAnyCollection) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n const data = new CipherData(response);\n this.originalCipher = new Cipher(data);\n return new Cipher(data);\n }\n\n protected encryptCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.encryptCipher();\n }\n return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n }\n\n protected async saveCipher(cipher: Cipher) {\n if (!this.organization.canEditAnyCollection || cipher.organizationId == null) {\n return super.saveCipher(cipher);\n }\n if (this.editMode && !this.cloneMode) {\n const request = new CipherRequest(cipher);\n return this.apiService.putCipherAdmin(this.cipherId, request);\n } else {\n const request = new CipherCreateRequest(cipher);\n return this.apiService.postCipherAdmin(request);\n }\n }\n\n protected async deleteCipher() {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher();\n }\n return this.cipher.isDeleted\n ? this.apiService.deleteCipherAdmin(this.cipherId)\n : this.apiService.putDeleteCipherAdmin(this.cipherId);\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n {{ \"personalOwnershipPolicyInEffect\" | i18n }}\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 \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 \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n \n {{ \"upgrade\" | i18n }}\n \n
\n
\n \n {{ totpSec }}\n \n \n \n \n \n \n \n {{\n totpCodeFormatted\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 \n \n
\n
\n \n \n \n \n \n \n
\n
\n
\n \n \n {{ \"newUri\" | i18n }}\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 \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
\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
\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
\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 \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n \n

{{ \"ownership\" | i18n }}

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

{{ \"collections\" | i18n }}

\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n
\n \n \n
\n
\n
\n \n
\n
\n {{ \"dateUpdated\" | i18n }}:\n {{ cipher.revisionDate | date: \"medium\" }}\n
\n
\n {{ \"datePasswordUpdated\" | i18n }}:\n {{ cipher.passwordRevisionDisplayDate | date: \"medium\" }}\n
\n
\n {{ \"passwordHistory\" | i18n }}:\n \n {{ cipher.passwordHistory.length }}\n \n
\n
\n
\n {{ ph.lastUsedDate | date: \"short\" }} -\n {{ ph.password }}\n
\n
\n
\n
\n \n

{{ \"options\" | i18n }}

\n
\n \n \n \n \n \n
\n
\n
\n
\n \n \n {{ (cipher?.isDeleted ? \"restore\" : \"save\") | i18n }}\n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n
\n\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"../../vault/attachments.component\";\n\n@Component({\n selector: \"app-org-vault-attachments\",\n templateUrl: \"../../vault/attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n organization: Organization;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n stateService,\n platformUtilsService,\n apiService,\n logService\n );\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.organization.canEditAnyCollection && this.showFixOldAttachments(attachment)) {\n await super.reuploadCipherAttachment(attachment, true);\n }\n }\n\n protected async loadCipher() {\n if (!this.organization.canEditAnyCollection) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(\n this.cipherDomain,\n file,\n this.organization.canEditAnyCollection\n );\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipherAttachment(attachmentId);\n }\n return this.apiService.deleteCipherAttachmentAdmin(this.cipherId, attachmentId);\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.organization.canEditAnyCollection;\n }\n}\n","
\n
\n \n
\n

\n {{ \"attachments\" | i18n }}\n {{ cipher.name }}\n

\n \n ×\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n \n \n
\n {{ a.fileName }}\n
\n \n \n {{ \"attachmentFixDesc\" | i18n }}\n \n {{ \"fix\" | i18n }}\n \n
\n
\n {{ a.sizeName }}\n
\n \n \n \n \n
\n
\n

{{ \"newAttachment\" | i18n }}

\n \n \n {{ \"maxFileSize\" | i18n }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"../../vault/ciphers.component\";\n\n@Component({\n selector: \"app-org-vault-ciphers\",\n templateUrl: \"../../vault/ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n @Output() onEventsClicked = new EventEmitter();\n\n organization: Organization;\n accessEvents = false;\n\n protected allCiphers: CipherView[] = [];\n\n constructor(\n searchService: SearchService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n cipherService: CipherService,\n eventService: EventService,\n totpService: TotpService,\n passwordRepromptService: PasswordRepromptService,\n logService: LogService,\n stateService: StateService,\n organizationService: OrganizationService,\n tokenService: TokenService,\n private apiService: ApiService\n ) {\n super(\n searchService,\n i18nService,\n platformUtilsService,\n cipherService,\n eventService,\n totpService,\n stateService,\n passwordRepromptService,\n logService,\n organizationService,\n tokenService\n );\n }\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\n if (this.organization.canEditAnyCollection) {\n this.accessEvents = this.organization.useEvents;\n this.allCiphers = await this.cipherService.getAllFromApiForOrganization(this.organization.id);\n } else {\n this.allCiphers = (await this.cipherService.getAllDecrypted()).filter(\n (c) => c.organizationId === this.organization.id\n );\n }\n await this.searchService.indexCiphers(this.organization.id, this.allCiphers);\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n if (this.organization.canViewAllCollections) {\n await super.applyFilter(filter);\n } else {\n const f = (c: CipherView) =>\n c.organizationId === this.organization.id && (filter == null || filter(c));\n await super.applyFilter(f);\n }\n }\n\n async search(timeout: number = null) {\n await super.search(timeout, this.allCiphers);\n }\n events(c: CipherView) {\n this.onEventsClicked.emit(c);\n }\n\n protected deleteCipher(id: string) {\n if (!this.organization.canEditAnyCollection) {\n return super.deleteCipher(id, this.deleted);\n }\n return this.deleted\n ? this.apiService.deleteCipherAdmin(id)\n : this.apiService.putDeleteCipherAdmin(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return this.organization.canEditAnyCollection && c.hasOldAttachments;\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n {{ c.name }}\n \n \n {{ \"attachments\" | i18n }}\n \n \n {{ \"attachmentsNeedFix\" | i18n }}\n \n \n
\n {{ c.subTitle }}\n \n 0 && !organization\" class=\"tw-w-28\">\n \n \n \n \n \n \n \n \n \n \n \n \n {{ \"copyPassword\" | i18n }}\n \n \n \n {{ \"copyVerificationCode\" | i18n }}\n \n \n \n \n \n \n {{ \"clone\" | i18n }}\n \n \n \n {{ \"moveToOrganization\" | i18n }}\n \n \n \n \n \n \n \n \n \n \n
\n \n \n {{ \"loading\" | i18n }}\n \n \n

{{ \"noItemsInList\" | i18n }}

\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherCollectionsRequest } from \"jslib-common/models/request/cipherCollectionsRequest\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"../../vault/collections.component\";\n\n@Component({\n selector: \"app-org-vault-collections\",\n templateUrl: \"../../vault/collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent {\n organization: Organization;\n\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n private apiService: ApiService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n this.allowSelectNone = true;\n }\n\n protected async loadCipher() {\n if (!this.organization.canViewAllCollections) {\n return await super.loadCipher();\n }\n const response = await this.apiService.getCipherAdmin(this.cipherId);\n return new Cipher(new CipherData(response));\n }\n\n protected loadCipherCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCipherCollections();\n }\n return this.collectionIds;\n }\n\n protected loadCollections() {\n if (!this.organization.canViewAllCollections) {\n return super.loadCollections();\n }\n return Promise.resolve(this.collections);\n }\n\n protected saveCollections() {\n if (this.organization.canEditAnyCollection) {\n const request = new CipherCollectionsRequest(this.cipherDomain.collectionIds);\n return this.apiService.putCipherCollectionsAdmin(this.cipherId, request);\n } else {\n return super.saveCollections();\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ \"collections\" | i18n }}\n {{ cipher.name }}\n

\n \n ×\n \n
\n
\n

{{ \"collectionsDesc\" | i18n }}

\n
\n

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"jslib-angular/guards/auth.guard\";\nimport { LockGuard } from \"jslib-angular/guards/lock.guard\";\nimport { UnauthGuard } from \"jslib-angular/guards/unauth.guard\";\n\nimport { AcceptEmergencyComponent } from \"./accounts/accept-emergency.component\";\nimport { AcceptOrganizationComponent } from \"./accounts/accept-organization.component\";\nimport { HintComponent } from \"./accounts/hint.component\";\nimport { LockComponent } from \"./accounts/lock.component\";\nimport { LoginComponent } from \"./accounts/login.component\";\nimport { RecoverDeleteComponent } from \"./accounts/recover-delete.component\";\nimport { RecoverTwoFactorComponent } from \"./accounts/recover-two-factor.component\";\nimport { RegisterComponent } from \"./accounts/register.component\";\nimport { RemovePasswordComponent } from \"./accounts/remove-password.component\";\nimport { SetPasswordComponent } from \"./accounts/set-password.component\";\nimport { SsoComponent } from \"./accounts/sso.component\";\nimport { TwoFactorComponent } from \"./accounts/two-factor.component\";\nimport { UpdatePasswordComponent } from \"./accounts/update-password.component\";\nimport { UpdateTempPasswordComponent } from \"./accounts/update-temp-password.component\";\nimport { VerifyEmailTokenComponent } from \"./accounts/verify-email-token.component\";\nimport { VerifyRecoverDeleteComponent } from \"./accounts/verify-recover-delete.component\";\nimport { HomeGuard } from \"./guards/home.guard\";\nimport { FrontendLayoutComponent } from \"./layouts/frontend-layout.component\";\nimport { UserLayoutComponent } from \"./layouts/user-layout.component\";\nimport { AcceptFamilySponsorshipComponent } from \"./organizations/sponsorships/accept-family-sponsorship.component\";\nimport { FamiliesForEnterpriseSetupComponent } from \"./organizations/sponsorships/families-for-enterprise-setup.component\";\nimport { AccessComponent } from \"./send/access.component\";\nimport { SendComponent } from \"./send/send.component\";\nimport { AccountComponent } from \"./settings/account.component\";\nimport { CreateOrganizationComponent } from \"./settings/create-organization.component\";\nimport { DomainRulesComponent } from \"./settings/domain-rules.component\";\nimport { EmergencyAccessViewComponent } from \"./settings/emergency-access-view.component\";\nimport { EmergencyAccessComponent } from \"./settings/emergency-access.component\";\nimport { PreferencesComponent } from \"./settings/preferences.component\";\nimport { SettingsComponent } from \"./settings/settings.component\";\nimport { SponsoredFamiliesComponent } from \"./settings/sponsored-families.component\";\nimport { ExportComponent } from \"./tools/export.component\";\nimport { GeneratorComponent } from \"./tools/generator.component\";\nimport { ImportComponent } from \"./tools/import.component\";\nimport { ToolsComponent } from \"./tools/tools.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: FrontendLayoutComponent,\n data: { doNotSaveUrl: true },\n children: [\n {\n path: \"\",\n pathMatch: \"full\",\n children: [], // Children lets us have an empty component.\n canActivate: [HomeGuard], // Redirects either to vault, login or lock page.\n },\n { path: \"login\", component: LoginComponent, canActivate: [UnauthGuard] },\n { path: \"2fa\", component: TwoFactorComponent, canActivate: [UnauthGuard] },\n {\n path: \"register\",\n component: RegisterComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"createAccount\" },\n },\n {\n path: \"sso\",\n component: SsoComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"enterpriseSingleSignOn\" },\n },\n {\n path: \"set-password\",\n component: SetPasswordComponent,\n data: { titleId: \"setMasterPassword\" },\n },\n {\n path: \"hint\",\n component: HintComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"passwordHint\" },\n },\n {\n path: \"lock\",\n component: LockComponent,\n canActivate: [LockGuard],\n },\n { path: \"verify-email\", component: VerifyEmailTokenComponent },\n {\n path: \"accept-organization\",\n component: AcceptOrganizationComponent,\n data: { titleId: \"joinOrganization\", doNotSaveUrl: false },\n },\n {\n path: \"accept-emergency\",\n component: AcceptEmergencyComponent,\n data: { titleId: \"acceptEmergency\", doNotSaveUrl: false },\n },\n {\n path: \"accept-families-for-enterprise\",\n component: AcceptFamilySponsorshipComponent,\n data: { titleId: \"acceptFamilySponsorship\", doNotSaveUrl: false },\n },\n { path: \"recover\", pathMatch: \"full\", redirectTo: \"recover-2fa\" },\n {\n path: \"recover-2fa\",\n component: RecoverTwoFactorComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"recoverAccountTwoStep\" },\n },\n {\n path: \"recover-delete\",\n component: RecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"verify-recover-delete\",\n component: VerifyRecoverDeleteComponent,\n canActivate: [UnauthGuard],\n data: { titleId: \"deleteAccount\" },\n },\n {\n path: \"send/:sendId/:key\",\n component: AccessComponent,\n data: { title: \"Bitwarden Send\" },\n },\n {\n path: \"update-temp-password\",\n component: UpdateTempPasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updateTempPassword\" },\n },\n {\n path: \"update-password\",\n component: UpdatePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"updatePassword\" },\n },\n {\n path: \"remove-password\",\n component: RemovePasswordComponent,\n canActivate: [AuthGuard],\n data: { titleId: \"removeMasterPassword\" },\n },\n ],\n },\n {\n path: \"\",\n component: UserLayoutComponent,\n canActivate: [AuthGuard],\n children: [\n {\n path: \"vault\",\n loadChildren: async () =>\n (await import(\"./modules/vault/modules/individual-vault/individual-vault.module\"))\n .IndividualVaultModule,\n },\n { path: \"sends\", component: SendComponent, data: { title: \"Send\" } },\n {\n path: \"create-organization\",\n component: CreateOrganizationComponent,\n data: { titleId: \"newOrganization\" },\n },\n {\n path: \"settings\",\n component: SettingsComponent,\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"account\" },\n { path: \"account\", component: AccountComponent, data: { titleId: \"myAccount\" } },\n {\n path: \"preferences\",\n component: PreferencesComponent,\n data: { titleId: \"preferences\" },\n },\n {\n path: \"security\",\n loadChildren: async () =>\n (await import(\"./settings/security-routing.module\")).SecurityRoutingModule,\n },\n {\n path: \"domain-rules\",\n component: DomainRulesComponent,\n data: { titleId: \"domainRules\" },\n },\n {\n path: \"subscription\",\n loadChildren: async () =>\n (await import(\"./settings/subscription-routing.module\")).SubscriptionRoutingModule,\n },\n {\n path: \"emergency-access\",\n children: [\n {\n path: \"\",\n component: EmergencyAccessComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n {\n path: \":id\",\n component: EmergencyAccessViewComponent,\n data: { titleId: \"emergencyAccess\" },\n },\n ],\n },\n {\n path: \"sponsored-families\",\n component: SponsoredFamiliesComponent,\n data: { titleId: \"sponsoredFamilies\" },\n },\n ],\n },\n {\n path: \"tools\",\n component: ToolsComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"generator\" },\n { path: \"import\", component: ImportComponent, data: { titleId: \"importData\" } },\n { path: \"export\", component: ExportComponent, data: { titleId: \"exportVault\" } },\n {\n path: \"generator\",\n component: GeneratorComponent,\n data: { titleId: \"generator\" },\n },\n ],\n },\n {\n path: \"reports\",\n loadChildren: async () =>\n (await import(\"./reports/reports-routing.module\")).ReportsRoutingModule,\n },\n { path: \"setup/families-for-enterprise\", component: FamiliesForEnterpriseSetupComponent },\n ],\n },\n {\n path: \"organizations\",\n loadChildren: () =>\n import(\"./organizations/organization-routing.module\").then(\n (m) => m.OrganizationsRoutingModule\n ),\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes, {\n useHash: true,\n paramsInheritanceStrategy: \"always\",\n // enableTracing: true,\n }),\n ],\n exports: [RouterModule],\n})\nexport class OssRoutingModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { LooseComponentsModule } from \"./modules/loose-components.module\";\nimport { OrganizationManageModule } from \"./modules/organizations/manage/organization-manage.module\";\nimport { OrganizationUserModule } from \"./modules/organizations/users/organization-user.module\";\nimport { PipesModule } from \"./modules/pipes/pipes.module\";\nimport { SharedModule } from \"./modules/shared.module\";\nimport { VaultFilterModule } from \"./modules/vault-filter/vault-filter.module\";\nimport { OrganizationBadgeModule } from \"./modules/vault/modules/organization-badge/organization-badge.module\";\n\n@NgModule({\n imports: [\n SharedModule,\n LooseComponentsModule,\n VaultFilterModule,\n OrganizationBadgeModule,\n PipesModule,\n OrganizationManageModule,\n OrganizationUserModule,\n ],\n exports: [LooseComponentsModule, VaultFilterModule, OrganizationBadgeModule, PipesModule],\n bootstrap: [],\n})\nexport class OssModule {}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { BreachAccountResponse } from \"jslib-common/models/response/breachAccountResponse\";\n\n@Component({\n selector: \"app-breach-report\",\n templateUrl: \"breach-report.component.html\",\n})\nexport class BreachReportComponent implements OnInit {\n error = false;\n username: string;\n checkedUsername: string;\n breachedAccounts: BreachAccountResponse[] = [];\n formPromise: Promise;\n\n constructor(private auditService: AuditService, private stateService: StateService) {}\n\n async ngOnInit() {\n this.username = await this.stateService.getEmail();\n }\n\n async submit() {\n this.error = false;\n this.username = this.username.toLowerCase();\n try {\n this.formPromise = this.auditService.breachedAccounts(this.username);\n this.breachedAccounts = await this.formPromise;\n } catch {\n this.error = true;\n }\n this.checkedUsername = this.username;\n }\n}\n","
\n

{{ \"dataBreachReport\" | i18n }}

\n
\n

{{ \"breachDesc\" | i18n }}

\n
\n
\n
\n \n \n {{ \"breachCheckUsernameEmail\" | i18n }}\n
\n
\n \n
\n
\n

{{ \"reportError\" | i18n }}...

\n \n \n {{ \"breachUsernameNotFound\" | i18n: checkedUsername }}\n \n \n {{ \"breachUsernameFound\" | i18n: checkedUsername:breachedAccounts.length }}\n \n
    \n
  • \n
    \n
    \n \"\"\n
    \n
    \n

    {{ a.title }}

    \n

    \n

    {{ \"compromisedData\" | i18n }}:

    \n
      \n
    • {{ d }}
    • \n
    \n
    \n
    \n
    \n
    {{ \"website\" | i18n }}
    \n
    {{ a.domain }}
    \n
    {{ \"affectedUsers\" | i18n }}
    \n
    {{ a.pwnCount | number }}
    \n
    {{ \"breachOccurred\" | i18n }}
    \n
    {{ a.breachDate | date: \"mediumDate\" }}
    \n
    {{ \"breachReported\" | i18n }}
    \n
    {{ a.addedDate | date: \"mediumDate\" }}
    \n
    \n
    \n
    \n
  • \n
\n
\n
\n","import { Directive, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { AddEditComponent as OrgAddEditComponent } from \"../organizations/vault/add-edit.component\";\nimport { AddEditComponent } from \"../vault/add-edit.component\";\n\n@Directive()\nexport class CipherReportComponent {\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n\n loading = false;\n hasLoaded = false;\n ciphers: CipherView[] = [];\n organization: Organization;\n\n constructor(\n private modalService: ModalService,\n protected messagingService: MessagingService,\n public requiresPaid: boolean,\n private stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService\n ) {}\n\n async load() {\n this.loading = true;\n await this.setCiphers();\n this.loading = false;\n this.hasLoaded = true;\n }\n\n async selectCipher(cipher: CipherView) {\n if (!(await this.repromptCipher(cipher))) {\n return;\n }\n\n const type = this.organization != null ? OrgAddEditComponent : AddEditComponent;\n\n const [modal, childComponent] = await this.modalService.openViewRef(\n type,\n this.cipherAddEditModalRef,\n (comp: OrgAddEditComponent | AddEditComponent) => {\n if (this.organization != null) {\n (comp as OrgAddEditComponent).organization = this.organization;\n comp.organizationId = this.organization.id;\n }\n\n comp.cipherId = cipher == null ? null : cipher.id;\n comp.onSavedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n comp.onDeletedCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n comp.onRestoredCipher.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n\n protected async checkAccess(): Promise {\n if (this.organization != null) {\n // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n // since all paid plans include useTotp\n if (this.requiresPaid && !this.organization.useTotp) {\n this.messagingService.send(\"upgradeOrganization\", { organizationId: this.organization.id });\n return false;\n }\n } else {\n const accessPremium = await this.stateService.getCanAccessPremium();\n if (this.requiresPaid && !accessPremium) {\n this.messagingService.send(\"premiumRequired\");\n this.loading = false;\n return false;\n }\n }\n return true;\n }\n\n protected async setCiphers() {\n this.ciphers = [];\n }\n\n protected async repromptCipher(c: CipherView) {\n return (\n c.reprompt === CipherRepromptType.None ||\n (await this.passwordRepromptService.showPasswordPrompt())\n );\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-exposed-passwords-report\",\n templateUrl: \"exposed-passwords-report.component.html\",\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n exposedPasswordMap = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected auditService: AuditService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n ngOnInit() {\n this.checkAccess();\n }\n\n async load() {\n if (await this.checkAccess()) {\n super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const exposedPasswordCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const promise = this.auditService.passwordLeaked(c.login.password).then((exposedCount) => {\n if (exposedCount > 0) {\n exposedPasswordCiphers.push(c);\n this.exposedPasswordMap.set(c.id, exposedCount);\n }\n });\n promises.push(promise);\n });\n await Promise.all(promises);\n this.ciphers = exposedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-inactive-two-factor-report\",\n templateUrl: \"inactive-two-factor-report.component.html\",\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n services = new Map();\n cipherDocs = new Map();\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n private logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n try {\n await this.load2fa();\n } catch (e) {\n this.logService.error(e);\n }\n\n if (this.services.size > 0) {\n const allCiphers = await this.getAllCiphers();\n const inactive2faCiphers: CipherView[] = [];\n const promises: Promise[] = [];\n const docs = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n (c.login.totp != null && c.login.totp !== \"\") ||\n !c.login.hasUris ||\n c.isDeleted\n ) {\n return;\n }\n for (let i = 0; i < c.login.uris.length; i++) {\n const u = c.login.uris[i];\n if (u.uri != null && u.uri !== \"\") {\n const uri = u.uri.replace(\"www.\", \"\");\n const domain = Utils.getDomain(uri);\n if (domain != null && this.services.has(domain)) {\n if (this.services.get(domain) != null) {\n docs.set(c.id, this.services.get(domain));\n }\n inactive2faCiphers.push(c);\n }\n }\n }\n });\n await Promise.all(promises);\n this.ciphers = inactive2faCiphers;\n this.cipherDocs = docs;\n }\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n private async load2fa() {\n if (this.services.size > 0) {\n return;\n }\n const response = await fetch(new Request(\"https://2fa.directory/api/v3/totp.json\"));\n if (response.status !== 200) {\n throw new Error();\n }\n const responseJson = await response.json();\n for (const service of responseJson) {\n const serviceData = service[1];\n if (serviceData.domain == null) {\n continue;\n }\n if (serviceData.documentation == null) {\n continue;\n }\n if (serviceData[\"additional-domains\"] != null) {\n for (const additionalDomain of serviceData[\"additional-domains\"]) {\n this.services.set(additionalDomain, serviceData.documentation);\n }\n }\n this.services.set(serviceData.domain, serviceData.documentation);\n }\n }\n}\n","import { Component, Input, OnInit } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\nexport enum ReportTypes {\n \"exposedPasswords\" = \"exposedPasswords\",\n \"reusedPasswords\" = \"reusedPasswords\",\n \"weakPasswords\" = \"weakPasswords\",\n \"unsecuredWebsites\" = \"unsecuredWebsites\",\n \"inactive2fa\" = \"inactive2fa\",\n \"dataBreach\" = \"dataBreach\",\n}\n\ntype ReportEntry = {\n title: string;\n description: string;\n route: string;\n icon: string;\n requiresPremium: boolean;\n};\n\nconst reports: Record = {\n exposedPasswords: {\n title: \"exposedPasswordsReport\",\n description: \"exposedPasswordsReportDesc\",\n route: \"exposed-passwords-report\",\n icon: `\n \n \n \n \n \n \n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n reusedPasswords: {\n title: \"reusedPasswordsReport\",\n description: \"reusedPasswordsReportDesc\",\n route: \"reused-passwords-report\",\n icon: `\n \n \n \n \n \n `,\n requiresPremium: true,\n },\n weakPasswords: {\n title: \"weakPasswordsReport\",\n description: \"weakPasswordsReportDesc\",\n route: \"weak-passwords-report\",\n icon: `\n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n unsecuredWebsites: {\n title: \"unsecuredWebsitesReport\",\n description: \"unsecuredWebsitesReportDesc\",\n route: \"unsecured-websites-report\",\n icon: `\n \n \n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n inactive2fa: {\n title: \"inactive2faReport\",\n description: \"inactive2faReportDesc\",\n route: \"inactive-two-factor-report\",\n icon: `\n \n \n \n \n \n \n `,\n requiresPremium: true,\n },\n dataBreach: {\n title: \"dataBreachReport\",\n description: \"breachDesc\",\n route: \"breach-report\",\n icon: `\n \n \n \n \n \n \n \n \n \n \n `,\n requiresPremium: false,\n },\n};\n\n@Component({\n selector: \"app-report-card\",\n templateUrl: \"report-card.component.html\",\n})\nexport class ReportCardComponent implements OnInit {\n @Input() type: ReportTypes;\n\n report: ReportEntry;\n\n hasPremium: boolean;\n\n constructor(\n private stateService: StateService,\n private messagingService: MessagingService,\n private sanitizer: DomSanitizer\n ) {}\n\n async ngOnInit() {\n this.report = reports[this.type];\n\n this.hasPremium = await this.stateService.getCanAccessPremium();\n }\n\n get premium() {\n return this.report.requiresPremium && !this.hasPremium;\n }\n\n get route() {\n if (this.premium) {\n return null;\n }\n\n return this.report.route;\n }\n\n get icon() {\n return this.sanitizer.bypassSecurityTrustHtml(this.report.icon);\n }\n\n click() {\n if (this.premium) {\n this.messagingService.send(\"premiumRequired\");\n }\n }\n}\n","\n
\n \n
\n
\n
\n

{{ report.title | i18n }}

\n

{{ report.description | i18n }}

\n
\n {{ \"premium\" | i18n }}\n \n\n","import { Component } from \"@angular/core\";\n\nimport { ReportTypes } from \"./report-card.component\";\n\n@Component({\n selector: \"app-report-list\",\n templateUrl: \"report-list.component.html\",\n})\nexport class ReportListComponent {\n reports = [\n ReportTypes.exposedPasswords,\n ReportTypes.reusedPasswords,\n ReportTypes.weakPasswords,\n ReportTypes.unsecuredWebsites,\n ReportTypes.inactive2fa,\n ReportTypes.dataBreach,\n ];\n}\n","
\n

{{ \"reports\" | i18n }}

\n
\n\n

{{ \"reportsDesc\" | i18n }}

\n\n
\n
\n \n
\n
\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { AuthGuard } from \"jslib-angular/guards/auth.guard\";\n\nimport { BreachReportComponent } from \"./breach-report.component\";\nimport { ExposedPasswordsReportComponent } from \"./exposed-passwords-report.component\";\nimport { InactiveTwoFactorReportComponent } from \"./inactive-two-factor-report.component\";\nimport { ReportListComponent } from \"./report-list.component\";\nimport { ReportsComponent } from \"./reports.component\";\nimport { ReusedPasswordsReportComponent } from \"./reused-passwords-report.component\";\nimport { UnsecuredWebsitesReportComponent } from \"./unsecured-websites-report.component\";\nimport { WeakPasswordsReportComponent } from \"./weak-passwords-report.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: ReportsComponent,\n canActivate: [AuthGuard],\n children: [\n { path: \"\", pathMatch: \"full\", component: ReportListComponent, data: { homepage: true } },\n {\n path: \"breach-report\",\n component: BreachReportComponent,\n data: { titleId: \"dataBreachReport\" },\n },\n {\n path: \"reused-passwords-report\",\n component: ReusedPasswordsReportComponent,\n data: { titleId: \"reusedPasswordsReport\" },\n },\n {\n path: \"unsecured-websites-report\",\n component: UnsecuredWebsitesReportComponent,\n data: { titleId: \"unsecuredWebsitesReport\" },\n },\n {\n path: \"weak-passwords-report\",\n component: WeakPasswordsReportComponent,\n data: { titleId: \"weakPasswordsReport\" },\n },\n {\n path: \"exposed-passwords-report\",\n component: ExposedPasswordsReportComponent,\n data: { titleId: \"exposedPasswordsReport\" },\n },\n {\n path: \"inactive-two-factor-report\",\n component: InactiveTwoFactorReportComponent,\n data: { titleId: \"inactive2faReport\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class ReportsRoutingModule {}\n","import { Component, OnDestroy } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { filter } from \"rxjs/operators\";\n\n@Component({\n selector: \"app-reports\",\n templateUrl: \"reports.component.html\",\n})\nexport class ReportsComponent implements OnDestroy {\n homepage = true;\n subscription: Subscription;\n\n constructor(router: Router) {\n this.subscription = router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((event) => {\n this.homepage = (event as NavigationEnd).url == \"/reports\";\n });\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n}\n","\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-reused-passwords-report\",\n templateUrl: \"reused-passwords-report.component.html\",\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordUseMap: Map;\n\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const ciphersWithPasswords: CipherView[] = [];\n this.passwordUseMap = new Map();\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n ciphersWithPasswords.push(c);\n if (this.passwordUseMap.has(c.login.password)) {\n this.passwordUseMap.set(c.login.password, this.passwordUseMap.get(c.login.password) + 1);\n } else {\n this.passwordUseMap.set(c.login.password, 1);\n }\n });\n const reusedPasswordCiphers = ciphersWithPasswords.filter(\n (c) =>\n this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1\n );\n this.ciphers = reusedPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from an organization view\n return true;\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-unsecured-websites-report\",\n templateUrl: \"unsecured-websites-report.component.html\",\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n constructor(\n protected cipherService: CipherService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const unsecuredCiphers = allCiphers.filter((c) => {\n if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {\n return false;\n }\n return c.login.uris.some((u) => u.uri != null && u.uri.indexOf(\"http://\") === 0);\n });\n this.ciphers = unsecuredCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { CipherReportComponent } from \"./cipher-report.component\";\n\n@Component({\n selector: \"app-weak-passwords-report\",\n templateUrl: \"weak-passwords-report.component.html\",\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n passwordStrengthMap = new Map();\n\n private passwordStrengthCache = new Map();\n\n constructor(\n protected cipherService: CipherService,\n protected passwordGenerationService: PasswordGenerationService,\n modalService: ModalService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(modalService, messagingService, true, stateService, passwordRepromptService);\n }\n\n async ngOnInit() {\n if (await this.checkAccess()) {\n await super.load();\n }\n }\n\n async setCiphers() {\n const allCiphers = await this.getAllCiphers();\n const weakPasswordCiphers: CipherView[] = [];\n const isUserNameNotEmpty = (c: CipherView): boolean => {\n return c.login.username != null && c.login.username.trim() !== \"\";\n };\n const getCacheKey = (c: CipherView): string => {\n return c.login.password + \"_____\" + (isUserNameNotEmpty(c) ? c.login.username : \"\");\n };\n\n allCiphers.forEach((c) => {\n if (\n c.type !== CipherType.Login ||\n c.login.password == null ||\n c.login.password === \"\" ||\n c.isDeleted\n ) {\n return;\n }\n const hasUserName = isUserNameNotEmpty(c);\n const cacheKey = getCacheKey(c);\n if (!this.passwordStrengthCache.has(cacheKey)) {\n let userInput: string[] = [];\n if (hasUserName) {\n const atPosition = c.login.username.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput\n .concat(\n c.login.username\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n )\n .filter((i) => i.length >= 3);\n } else {\n userInput = c.login.username\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n .filter((i) => i.length >= 3);\n }\n }\n const result = this.passwordGenerationService.passwordStrength(\n c.login.password,\n userInput.length > 0 ? userInput : null\n );\n this.passwordStrengthCache.set(cacheKey, result.score);\n }\n const score = this.passwordStrengthCache.get(cacheKey);\n if (score != null && score <= 2) {\n this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n weakPasswordCiphers.push(c);\n }\n });\n weakPasswordCiphers.sort((a, b) => {\n return (\n this.passwordStrengthCache.get(getCacheKey(a)) -\n this.passwordStrengthCache.get(getCacheKey(b))\n );\n });\n this.ciphers = weakPasswordCiphers;\n }\n\n protected getAllCiphers(): Promise {\n return this.cipherService.getAllDecrypted();\n }\n\n protected canManageCipher(c: CipherView): boolean {\n // this will only ever be false from the org view;\n return true;\n }\n\n private scoreKey(score: number): [string, string] {\n switch (score) {\n case 4:\n return [\"strong\", \"success\"];\n case 3:\n return [\"good\", \"primary\"];\n case 2:\n return [\"weak\", \"warning\"];\n default:\n return [\"veryWeak\", \"danger\"];\n }\n }\n}\n","import { Component, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SEND_KDF_ITERATIONS } from \"jslib-common/enums/kdfType\";\nimport { SendType } from \"jslib-common/enums/sendType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { SendAccess } from \"jslib-common/models/domain/sendAccess\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { SendAccessRequest } from \"jslib-common/models/request/sendAccessRequest\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\nimport { SendAccessResponse } from \"jslib-common/models/response/sendAccessResponse\";\nimport { SendAccessView } from \"jslib-common/models/view/sendAccessView\";\n\n@Component({\n selector: \"app-send-access\",\n templateUrl: \"access.component.html\",\n})\nexport class AccessComponent implements OnInit {\n send: SendAccessView;\n sendType = SendType;\n downloading = false;\n loading = true;\n passwordRequired = false;\n formPromise: Promise;\n password: string;\n showText = false;\n unavailable = false;\n error = false;\n hideEmail = false;\n\n private id: string;\n private key: string;\n private decKey: SymmetricCryptoKey;\n private accessRequest: SendAccessRequest;\n\n constructor(\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private route: ActivatedRoute,\n private cryptoService: CryptoService\n ) {}\n\n get sendText() {\n if (this.send == null || this.send.text == null) {\n return null;\n }\n return this.showText ? this.send.text.text : this.send.text.maskedText;\n }\n\n get expirationDate() {\n if (this.send == null || this.send.expirationDate == null) {\n return null;\n }\n return this.send.expirationDate;\n }\n\n get creatorIdentifier() {\n if (this.send == null || this.send.creatorIdentifier == null) {\n return null;\n }\n return this.send.creatorIdentifier;\n }\n\n ngOnInit() {\n this.route.params.subscribe(async (params) => {\n this.id = params.sendId;\n this.key = params.key;\n if (this.key == null || this.id == null) {\n return;\n }\n await this.load();\n });\n }\n\n async download() {\n if (this.send == null || this.decKey == null) {\n return;\n }\n\n if (this.downloading) {\n return;\n }\n\n const downloadData = await this.apiService.getSendFileDownloadData(\n this.send,\n this.accessRequest\n );\n\n if (Utils.isNullOrWhitespace(downloadData.url)) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"missingSendFile\"));\n return;\n }\n\n this.downloading = true;\n const response = await fetch(new Request(downloadData.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n this.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, this.decKey);\n this.platformUtilsService.saveFile(window, decBuf, null, this.send.file.fileName);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n this.downloading = false;\n }\n\n copyText() {\n this.platformUtilsService.copyToClipboard(this.send.text.text);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"sendTypeText\"))\n );\n }\n\n toggleText() {\n this.showText = !this.showText;\n }\n\n async load() {\n this.unavailable = false;\n this.error = false;\n this.hideEmail = false;\n const keyArray = Utils.fromUrlB64ToArray(this.key);\n this.accessRequest = new SendAccessRequest();\n if (this.password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n this.password,\n keyArray,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n this.accessRequest.password = Utils.fromBufferToB64(passwordHash);\n }\n try {\n let sendResponse: SendAccessResponse = null;\n if (this.loading) {\n sendResponse = await this.apiService.postSendAccess(this.id, this.accessRequest);\n } else {\n this.formPromise = this.apiService.postSendAccess(this.id, this.accessRequest);\n sendResponse = await this.formPromise;\n }\n this.passwordRequired = false;\n const sendAccess = new SendAccess(sendResponse);\n this.decKey = await this.cryptoService.makeSendKey(keyArray);\n this.send = await sendAccess.decrypt(this.decKey);\n this.showText = this.send.text != null ? !this.send.text.hidden : true;\n } catch (e) {\n if (e instanceof ErrorResponse) {\n if (e.statusCode === 401) {\n this.passwordRequired = true;\n } else if (e.statusCode === 404) {\n this.unavailable = true;\n } else {\n this.error = true;\n }\n }\n }\n this.loading = false;\n this.hideEmail =\n this.creatorIdentifier == null &&\n !this.passwordRequired &&\n !this.loading &&\n !this.unavailable;\n }\n}\n","
\n
\n
\n

Bitwarden Send

\n
\n
\n

{{ \"sendCreatorIdentifier\" | i18n: creatorIdentifier }}

\n
\n
\n \n {{ \"viewSendHiddenEmailWarning\" | i18n }}\n {{\n \"learnMore\" | i18n\n }}.\n \n
\n
\n
\n
\n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n

{{ \"sendProtectedPassword\" | i18n }}

\n

{{ \"sendProtectedPasswordDontKnow\" | i18n }}

\n
\n \n \n
\n
\n \n \n {{ \"continue\" | i18n }}\n \n \n \n
\n
\n
\n {{ \"sendAccessUnavailable\" | i18n }}\n
\n
\n {{ \"unexpectedError\" | i18n }}\n
\n
\n

\n {{ send.name }}\n

\n
\n \n \n {{\n \"sendHiddenByDefault\" | i18n\n }}\n
\n \n
\n \n \n {{ \"toggleVisibility\" | i18n }}\n \n \n
\n \n \n

{{ send.file.fileName }}

\n \n \n {{ \"downloadFile\" | i18n }} ({{ send.file.sizeName }})\n \n \n \n \n
\n

\n Expires: {{ expirationDate | date: \"medium\" }}\n

\n
\n
\n
\n
\n

\n {{ \"sendAccessTaglineProductDesc\" | i18n }}
\n

\n
\n
\n\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"jslib-angular/components/send/add-edit.component\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-send-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n datePipe: DatePipe,\n sendService: SendService,\n stateService: StateService,\n messagingService: MessagingService,\n policyService: PolicyService,\n logService: LogService\n ) {\n super(\n i18nService,\n platformUtilsService,\n environmentService,\n datePipe,\n sendService,\n messagingService,\n policyService,\n logService,\n stateService\n );\n }\n\n async copyLinkToClipboard(link: string): Promise {\n // Copy function on web depends on the modal being open or not. Since this event occurs during a transition\n // of the modal closing we need to add a small delay to make sure state of the DOM is consistent.\n return new Promise((resolve) => {\n window.setTimeout(() => resolve(super.copyLinkToClipboard(link)), 500);\n });\n }\n}\n","
\n\n","import { DatePipe } from \"@angular/common\";\nimport { Component } from \"@angular/core\";\nimport { ControlContainer, NgForm } from \"@angular/forms\";\n\nimport { EffluxDatesComponent as BaseEffluxDatesComponent } from \"jslib-angular/components/send/efflux-dates.component\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-send-efflux-dates\",\n templateUrl: \"efflux-dates.component.html\",\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n})\nexport class EffluxDatesComponent extends BaseEffluxDatesComponent {\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {\n super(i18nService, platformUtilsService, datePipe);\n }\n}\n","
\n
\n \n \n \n \n
\n \n \n
\n
\n \n
\n \n \n \n {{ o.twelveHour }}\n \n \n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n
\n
{{ \"deletionDateDesc\" | i18n }}
\n
\n
\n
\n \n \n {{ \"clear\" | i18n }}\n \n
\n \n \n
\n \n \n
\n \n
\n \n \n \n {{ o.twelveHour }}\n \n \n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n
\n \n
\n
{{ \"expirationDateDesc\" | i18n }}
\n
\n
\n","import { Component, NgZone, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { SendComponent as BaseSendComponent } from \"jslib-angular/components/send/send.component\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { SendView } from \"jslib-common/models/view/sendView\";\n\nimport { AddEditComponent } from \"./add-edit.component\";\n\nconst BroadcasterSubscriptionId = \"SendComponent\";\n\n@Component({\n selector: \"app-send\",\n templateUrl: \"send.component.html\",\n})\nexport class SendComponent extends BaseSendComponent {\n @ViewChild(\"sendAddEdit\", { read: ViewContainerRef, static: true })\n sendAddEditModalRef: ViewContainerRef;\n\n constructor(\n sendService: SendService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n environmentService: EnvironmentService,\n ngZone: NgZone,\n searchService: SearchService,\n policyService: PolicyService,\n private modalService: ModalService,\n private broadcasterService: BroadcasterService,\n logService: LogService\n ) {\n super(\n sendService,\n i18nService,\n platformUtilsService,\n environmentService,\n ngZone,\n searchService,\n policyService,\n logService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n\n // Broadcaster subscription - load if sync completes in the background\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"syncCompleted\":\n if (message.successfully) {\n await this.load();\n }\n break;\n }\n });\n });\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async addSend() {\n if (this.disableSend) {\n return;\n }\n\n const component = await this.editSend(null);\n component.type = this.type;\n }\n\n async editSend(send: SendView) {\n const [modal, childComponent] = await this.modalService.openViewRef(\n AddEditComponent,\n this.sendAddEditModalRef,\n (comp) => {\n comp.sendId = send == null ? null : send.id;\n comp.onSavedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n comp.onDeletedSend.subscribe(async () => {\n modal.close();\n await this.load();\n });\n }\n );\n\n return childComponent;\n }\n}\n","
\n \n {{ \"sendDisabledWarning\" | i18n }}\n \n
\n
\n
\n
\n {{ \"filters\" | i18n }}\n
\n
\n \n
\n
    \n
  • \n \n \n \n
  • \n
\n
\n
\n
\n

{{ \"types\" | i18n }}

\n
\n
    \n
  • \n \n \n {{ \"sendTypeText\" | i18n }}\n \n \n
  • \n
  • \n \n \n {{ \"sendTypeFile\" | i18n }}\n \n \n
  • \n
\n
\n
\n
\n
\n
\n
\n

\n {{ \"send\" | i18n }}\n \n \n \n {{ \"loading\" | i18n }}\n \n \n

\n
\n \n {{ \"createSend\" | i18n }}\n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n {{ s.name }}\n \n \n {{ \"disabled\" | i18n }}\n \n \n \n {{ \"password\" | i18n }}\n \n \n \n {{ \"maxAccessCountReached\" | i18n }}\n \n \n \n {{ \"expired\" | i18n }}\n \n \n \n {{ \"pendingDeletion\" | i18n }}\n \n
\n {{ s.deletionDate | date: \"medium\" }}\n
\n \n \n \n \n \n \n \n \n
\n
\n \n \n {{ \"loading\" | i18n }}\n \n \n

{{ \"noSendsInList\" | i18n }}

\n \n
\n
\n
\n
\n
\n\n","import { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { DeviceType } from \"jslib-common/enums/deviceType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { EventResponse } from \"jslib-common/models/response/eventResponse\";\n\n@Injectable()\nexport class EventService {\n constructor(private i18nService: I18nService, private policyService: PolicyService) {}\n\n getDefaultDateFilters() {\n const d = new Date();\n const end = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59);\n d.setDate(d.getDate() - 30);\n const start = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0);\n return [this.toDateTimeLocalString(start), this.toDateTimeLocalString(end)];\n }\n\n formatDateFilters(filterStart: string, filterEnd: string) {\n const start: Date = new Date(filterStart);\n const end: Date = new Date(filterEnd + \":59.999\");\n if (isNaN(start.getTime()) || isNaN(end.getTime()) || end < start) {\n throw new Error(\"Invalid date range.\");\n }\n return [start.toISOString(), end.toISOString()];\n }\n\n async getEventInfo(ev: EventResponse, options = new EventOptions()): Promise {\n const appInfo = this.getAppInfo(ev.deviceType);\n const { message, humanReadableMessage } = await this.getEventMessage(ev, options);\n return {\n message: message,\n humanReadableMessage: humanReadableMessage,\n appIcon: appInfo[0],\n appName: appInfo[1],\n };\n }\n\n private async getEventMessage(ev: EventResponse, options: EventOptions) {\n let msg = \"\";\n let humanReadableMsg = \"\";\n switch (ev.type) {\n // User\n case EventType.User_LoggedIn:\n msg = humanReadableMsg = this.i18nService.t(\"loggedIn\");\n break;\n case EventType.User_ChangedPassword:\n msg = humanReadableMsg = this.i18nService.t(\"changedPassword\");\n break;\n case EventType.User_Updated2fa:\n msg = humanReadableMsg = this.i18nService.t(\"enabledUpdated2fa\");\n break;\n case EventType.User_Disabled2fa:\n msg = humanReadableMsg = this.i18nService.t(\"disabled2fa\");\n break;\n case EventType.User_Recovered2fa:\n msg = humanReadableMsg = this.i18nService.t(\"recovered2fa\");\n break;\n case EventType.User_FailedLogIn:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin\");\n break;\n case EventType.User_FailedLogIn2fa:\n msg = humanReadableMsg = this.i18nService.t(\"failedLogin2fa\");\n break;\n case EventType.User_ClientExportedVault:\n msg = humanReadableMsg = this.i18nService.t(\"exportedVault\");\n break;\n case EventType.User_UpdatedTempPassword:\n msg = humanReadableMsg = this.i18nService.t(\"updatedMasterPassword\");\n break;\n case EventType.User_MigratedKeyToKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"migratedKeyConnector\");\n break;\n // Cipher\n case EventType.Cipher_Created:\n msg = this.i18nService.t(\"createdItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"createdItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Updated:\n msg = this.i18nService.t(\"editedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"editedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Deleted:\n msg = this.i18nService.t(\"permanentlyDeletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"permanentlyDeletedItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_SoftDeleted:\n msg = this.i18nService.t(\"deletedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"deletedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_Restored:\n msg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"restoredItemId\", this.formatCipherId(ev, options));\n break;\n case EventType.Cipher_AttachmentCreated:\n msg = this.i18nService.t(\"createdAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"createdAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_AttachmentDeleted:\n msg = this.i18nService.t(\"deletedAttachmentForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"deletedAttachmentForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_Shared:\n msg = this.i18nService.t(\"movedItemIdToOrg\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"movedItemIdToOrg\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientViewed:\n msg = this.i18nService.t(\"viewedItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledPasswordVisible:\n msg = this.i18nService.t(\"viewedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"viewedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientToggledHiddenFieldVisible:\n msg = this.i18nService.t(\"viewedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientToggledCardCodeVisible:\n msg = this.i18nService.t(\"viewedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"viewedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedHiddenField:\n msg = this.i18nService.t(\"copiedHiddenFieldItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedHiddenFieldItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientCopiedPassword:\n msg = this.i18nService.t(\"copiedPasswordItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"copiedPasswordItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_ClientCopiedCardCode:\n msg = this.i18nService.t(\"copiedSecurityCodeItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"copiedSecurityCodeItemId\",\n this.getShortId(ev.cipherId)\n );\n break;\n case EventType.Cipher_ClientAutofilled:\n msg = this.i18nService.t(\"autofilledItemId\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\"autofilledItemId\", this.getShortId(ev.cipherId));\n break;\n case EventType.Cipher_UpdatedCollections:\n msg = this.i18nService.t(\"editedCollectionsForItem\", this.formatCipherId(ev, options));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionsForItem\",\n this.getShortId(ev.cipherId)\n );\n break;\n // Collection\n case EventType.Collection_Created:\n msg = this.i18nService.t(\"createdCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Updated:\n msg = this.i18nService.t(\"editedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n case EventType.Collection_Deleted:\n msg = this.i18nService.t(\"deletedCollectionId\", this.formatCollectionId(ev));\n humanReadableMsg = this.i18nService.t(\n \"deletedCollectionId\",\n this.getShortId(ev.collectionId)\n );\n break;\n // Group\n case EventType.Group_Created:\n msg = this.i18nService.t(\"createdGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"createdGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Updated:\n msg = this.i18nService.t(\"editedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"editedGroupId\", this.getShortId(ev.groupId));\n break;\n case EventType.Group_Deleted:\n msg = this.i18nService.t(\"deletedGroupId\", this.formatGroupId(ev));\n humanReadableMsg = this.i18nService.t(\"deletedGroupId\", this.getShortId(ev.groupId));\n break;\n // Org user\n case EventType.OrganizationUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"invitedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedUserId\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UpdatedGroups:\n msg = this.i18nService.t(\"editedGroupsForUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"editedGroupsForUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_UnlinkedSso:\n msg = this.i18nService.t(\"unlinkedSsoUser\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"unlinkedSsoUser\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Enroll:\n msg = this.i18nService.t(\"eventEnrollPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventEnrollPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetPassword_Withdraw:\n msg = this.i18nService.t(\"eventWithdrawPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventWithdrawPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_AdminResetPassword:\n msg = this.i18nService.t(\"eventAdminPasswordReset\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventAdminPasswordReset\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_ResetSsoLink:\n msg = this.i18nService.t(\"eventResetSsoLink\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"eventResetSsoLink\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n case EventType.OrganizationUser_FirstSsoLogin:\n msg = this.i18nService.t(\"firstSsoLogin\", this.formatOrgUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"firstSsoLogin\",\n this.getShortId(ev.organizationUserId)\n );\n break;\n // Org\n case EventType.Organization_Updated:\n msg = humanReadableMsg = this.i18nService.t(\"editedOrgSettings\");\n break;\n case EventType.Organization_PurgedVault:\n msg = humanReadableMsg = this.i18nService.t(\"purgedOrganizationVault\");\n break;\n /*\n case EventType.Organization_ClientExportedVault:\n msg = this.i18nService.t('exportedOrganizationVault');\n break;\n */\n case EventType.Organization_VaultAccessed:\n msg = humanReadableMsg = this.i18nService.t(\"vaultAccessedByProvider\");\n break;\n case EventType.Organization_EnabledSso:\n msg = humanReadableMsg = this.i18nService.t(\"enabledSso\");\n break;\n case EventType.Organization_DisabledSso:\n msg = humanReadableMsg = this.i18nService.t(\"disabledSso\");\n break;\n case EventType.Organization_EnabledKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"enabledKeyConnector\");\n break;\n case EventType.Organization_DisabledKeyConnector:\n msg = humanReadableMsg = this.i18nService.t(\"disabledKeyConnector\");\n break;\n case EventType.Organization_SponsorshipsSynced:\n msg = humanReadableMsg = this.i18nService.t(\"sponsorshipsSynced\");\n break;\n // Policies\n case EventType.Policy_Updated: {\n msg = this.i18nService.t(\"modifiedPolicyId\", this.formatPolicyId(ev));\n\n const policies = await this.policyService.getAll();\n const policy = policies.filter((p) => p.id === ev.policyId)[0];\n let p1 = this.getShortId(ev.policyId);\n if (policy != null) {\n p1 = PolicyType[policy.type];\n }\n\n humanReadableMsg = this.i18nService.t(\"modifiedPolicyId\", p1);\n break;\n }\n // Provider users:\n case EventType.ProviderUser_Invited:\n msg = this.i18nService.t(\"invitedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"invitedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Confirmed:\n msg = this.i18nService.t(\"confirmedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\n \"confirmedUserId\",\n this.getShortId(ev.providerUserId)\n );\n break;\n case EventType.ProviderUser_Updated:\n msg = this.i18nService.t(\"editedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"editedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderUser_Removed:\n msg = this.i18nService.t(\"removedUserId\", this.formatProviderUserId(ev));\n humanReadableMsg = this.i18nService.t(\"removedUserId\", this.getShortId(ev.providerUserId));\n break;\n case EventType.ProviderOrganization_Created:\n msg = this.i18nService.t(\"createdOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"createdOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Added:\n msg = this.i18nService.t(\"addedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"addedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_Removed:\n msg = this.i18nService.t(\"removedOrganizationId\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"removedOrganizationId\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n case EventType.ProviderOrganization_VaultAccessed:\n msg = this.i18nService.t(\"accessedClientVault\", this.formatProviderOrganizationId(ev));\n humanReadableMsg = this.i18nService.t(\n \"accessedClientVault\",\n this.getShortId(ev.providerOrganizationId)\n );\n break;\n default:\n break;\n }\n return {\n message: msg === \"\" ? null : msg,\n humanReadableMessage: humanReadableMsg === \"\" ? null : humanReadableMsg,\n };\n }\n\n private getAppInfo(deviceType: DeviceType): [string, string] {\n switch (deviceType) {\n case DeviceType.Android:\n return [\"bwi-android\", this.i18nService.t(\"mobile\") + \" - Android\"];\n case DeviceType.iOS:\n return [\"bwi-apple\", this.i18nService.t(\"mobile\") + \" - iOS\"];\n case DeviceType.UWP:\n return [\"bwi-windows\", this.i18nService.t(\"mobile\") + \" - Windows\"];\n case DeviceType.ChromeExtension:\n return [\"bwi-chrome\", this.i18nService.t(\"extension\") + \" - Chrome\"];\n case DeviceType.FirefoxExtension:\n return [\"bwi-firefox\", this.i18nService.t(\"extension\") + \" - Firefox\"];\n case DeviceType.OperaExtension:\n return [\"bwi-opera\", this.i18nService.t(\"extension\") + \" - Opera\"];\n case DeviceType.EdgeExtension:\n return [\"bwi-edge\", this.i18nService.t(\"extension\") + \" - Edge\"];\n case DeviceType.VivaldiExtension:\n return [\"bwi-puzzle\", this.i18nService.t(\"extension\") + \" - Vivaldi\"];\n case DeviceType.SafariExtension:\n return [\"bwi-safari\", this.i18nService.t(\"extension\") + \" - Safari\"];\n case DeviceType.WindowsDesktop:\n return [\"bwi-windows\", this.i18nService.t(\"desktop\") + \" - Windows\"];\n case DeviceType.MacOsDesktop:\n return [\"bwi-apple\", this.i18nService.t(\"desktop\") + \" - macOS\"];\n case DeviceType.LinuxDesktop:\n return [\"bwi-linux\", this.i18nService.t(\"desktop\") + \" - Linux\"];\n case DeviceType.ChromeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Chrome\"];\n case DeviceType.FirefoxBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Firefox\"];\n case DeviceType.OperaBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Opera\"];\n case DeviceType.SafariBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Safari\"];\n case DeviceType.VivaldiBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Vivaldi\"];\n case DeviceType.EdgeBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - Edge\"];\n case DeviceType.IEBrowser:\n return [\"bwi-globe\", this.i18nService.t(\"webVault\") + \" - IE\"];\n case DeviceType.UnknownBrowser:\n return [\n \"bwi-globe\",\n this.i18nService.t(\"webVault\") + \" - \" + this.i18nService.t(\"unknown\"),\n ];\n default:\n return [\"bwi-globe\", this.i18nService.t(\"unknown\")];\n }\n }\n\n private formatCipherId(ev: EventResponse, options: EventOptions) {\n const shortId = this.getShortId(ev.cipherId);\n if (ev.organizationId == null || !options.cipherInfo) {\n return \"\" + shortId + \"\";\n }\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/vault?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.cipherId\n );\n return a.outerHTML;\n }\n\n private formatGroupId(ev: EventResponse) {\n const shortId = this.getShortId(ev.groupId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/groups?search=\" + shortId\n );\n return a.outerHTML;\n }\n\n private formatCollectionId(ev: EventResponse) {\n const shortId = this.getShortId(ev.collectionId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/collections?search=\" + shortId\n );\n return a.outerHTML;\n }\n\n private formatOrgUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.organizationUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" +\n ev.organizationId +\n \"/manage/people?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.organizationUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderUserId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerUserId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/providers/\" +\n ev.providerId +\n \"/manage/people?search=\" +\n shortId +\n \"&viewEvents=\" +\n ev.providerUserId\n );\n return a.outerHTML;\n }\n\n private formatProviderOrganizationId(ev: EventResponse) {\n const shortId = this.getShortId(ev.providerOrganizationId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\"href\", \"#/providers/\" + ev.providerId + \"/clients?search=\" + shortId);\n return a.outerHTML;\n }\n\n private formatPolicyId(ev: EventResponse) {\n const shortId = this.getShortId(ev.policyId);\n const a = this.makeAnchor(shortId);\n a.setAttribute(\n \"href\",\n \"#/organizations/\" + ev.organizationId + \"/manage/policies?policyId=\" + ev.policyId\n );\n return a.outerHTML;\n }\n\n private makeAnchor(shortId: string) {\n const a = document.createElement(\"a\");\n a.title = this.i18nService.t(\"view\");\n a.innerHTML = \"\" + shortId + \"\";\n return a;\n }\n\n private getShortId(id: string) {\n return id?.substring(0, 8);\n }\n\n private toDateTimeLocalString(date: Date) {\n return (\n date.getFullYear() +\n \"-\" +\n this.pad(date.getMonth() + 1) +\n \"-\" +\n this.pad(date.getDate()) +\n \"T\" +\n this.pad(date.getHours()) +\n \":\" +\n this.pad(date.getMinutes())\n );\n }\n\n private pad(num: number) {\n const norm = Math.floor(Math.abs(num));\n return (norm < 10 ? \"0\" : \"\") + norm;\n }\n}\n\nexport class EventInfo {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n}\n\nexport class EventOptions {\n cipherInfo = true;\n}\n","import { Inject, Injectable } from \"@angular/core\";\n\nimport { WINDOW } from \"jslib-angular/services/jslib-services.module\";\nimport { CryptoService as CryptoServiceAbstraction } from \"jslib-common/abstractions/crypto.service\";\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"jslib-common/abstractions/environment.service\";\nimport { EventService as EventLoggingServiceAbstraction } from \"jslib-common/abstractions/event.service\";\nimport { I18nService as I18nServiceAbstraction } from \"jslib-common/abstractions/i18n.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"jslib-common/abstractions/notifications.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService as StateServiceAbstraction } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"jslib-common/abstractions/twoFactor.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\nimport { ContainerService } from \"jslib-common/services/container.service\";\nimport { EventService as EventLoggingService } from \"jslib-common/services/event.service\";\nimport { VaultTimeoutService as VaultTimeoutService } from \"jslib-common/services/vaultTimeout.service\";\n\nimport { I18nService as I18nService } from \"../../services/i18n.service\";\n\n@Injectable()\nexport class InitService {\n constructor(\n @Inject(WINDOW) private win: Window,\n private environmentService: EnvironmentServiceAbstraction,\n private notificationsService: NotificationsServiceAbstraction,\n private vaultTimeoutService: VaultTimeoutServiceAbstraction,\n private i18nService: I18nServiceAbstraction,\n private eventLoggingService: EventLoggingServiceAbstraction,\n private twoFactorService: TwoFactorServiceAbstraction,\n private stateService: StateServiceAbstraction,\n private platformUtilsService: PlatformUtilsServiceAbstraction,\n private cryptoService: CryptoServiceAbstraction\n ) {}\n\n init() {\n function getBaseUrl() {\n // If the base URL is `https://vaultwarden.example.com/base/path/`,\n // `window.location.href` should have one of the following forms:\n //\n // - `https://vaultwarden.example.com/base/path/`\n // - `https://vaultwarden.example.com/base/path/#/some/route[?queryParam=...]`\n //\n // We want to get to just `https://vaultwarden.example.com/base/path`.\n let baseUrl = window.location.href;\n baseUrl = baseUrl.replace(/#.*/, ''); // Strip off `#` and everything after.\n baseUrl = baseUrl.replace(/\\/+$/, ''); // Trim any trailing `/` chars.\n return baseUrl;\n }\n return async () => {\n await this.stateService.init();\n\n const urls = {base: getBaseUrl()};\n this.environmentService.setUrls(urls);\n\n setTimeout(() => this.notificationsService.init(), 3000);\n\n (this.vaultTimeoutService as VaultTimeoutService).init(true);\n const locale = await this.stateService.getLocale();\n await (this.i18nService as I18nService).init(locale);\n (this.eventLoggingService as EventLoggingService).init(true);\n this.twoFactorService.init();\n const htmlEl = this.win.document.documentElement;\n htmlEl.classList.add(\"locale_\" + this.i18nService.translationLocale);\n\n // Initial theme is set in index.html which must be updated if there are any changes to theming logic\n this.platformUtilsService.onDefaultSystemThemeChange(async (sysTheme) => {\n const bwTheme = await this.stateService.getTheme();\n if (bwTheme === ThemeType.System) {\n htmlEl.classList.remove(\"theme_\" + ThemeType.Light, \"theme_\" + ThemeType.Dark);\n htmlEl.classList.add(\"theme_\" + sysTheme);\n }\n });\n\n const containerService = new ContainerService(this.cryptoService);\n containerService.attachToWindow(this.win);\n };\n }\n}\n","import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from \"@angular/core\";\nimport * as jq from \"jquery\";\nimport { first } from \"rxjs/operators\";\n\nimport { ModalRef } from \"jslib-angular/components/modal/modal.ref\";\nimport { ModalService as BaseModalService } from \"jslib-angular/services/modal.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Injectable()\nexport class ModalService extends BaseModalService {\n el: any = null;\n modalOpen = false;\n\n constructor(\n componentFactoryResolver: ComponentFactoryResolver,\n applicationRef: ApplicationRef,\n injector: Injector,\n private messagingService: MessagingService\n ) {\n super(componentFactoryResolver, applicationRef, injector);\n }\n\n protected setupHandlers(modalRef: ModalRef) {\n modalRef.onCreated.pipe(first()).subscribe(() => {\n const modals = Array.from(document.querySelectorAll(\".modal\"));\n if (modals.length > 0) {\n this.el = jq(modals[0]);\n this.el.modal(\"show\");\n\n this.el.on(\"show.bs.modal\", () => {\n modalRef.show();\n this.messagingService.send(\"modalShow\");\n });\n this.el.on(\"shown.bs.modal\", () => {\n modalRef.shown();\n this.messagingService.send(\"modalShown\");\n if (!Utils.isMobileBrowser) {\n this.el.find(\"*[appAutoFocus]\").focus();\n }\n });\n this.el.on(\"hide.bs.modal\", () => {\n this.messagingService.send(\"modalClose\");\n });\n this.el.on(\"hidden.bs.modal\", () => {\n modalRef.closed();\n this.messagingService.send(\"modalClosed\");\n });\n }\n });\n\n modalRef.onClose.pipe(first()).subscribe(() => {\n if (this.el != null) {\n this.el.modal(\"hide\");\n }\n });\n }\n}\n","import { BasePolicy } from \"../organizations/policies/base-policy.component\";\n\nexport class PolicyListService {\n private policies: BasePolicy[] = [];\n\n addPolicies(policies: BasePolicy[]) {\n this.policies.push(...policies);\n }\n\n getPolicies(): BasePolicy[] {\n return this.policies;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Title } from \"@angular/platform-browser\";\nimport { ActivatedRoute, NavigationEnd, Router } from \"@angular/router\";\nimport { filter } from \"rxjs\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Injectable()\nexport class RouterService {\n private previousUrl: string = undefined;\n private currentUrl: string = undefined;\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private titleService: Title,\n i18nService: I18nService\n ) {\n this.currentUrl = this.router.url;\n\n router.events\n .pipe(filter((e) => e instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.currentUrl = event.url;\n\n let title = i18nService.t(\"pageTitle\", \"Bitwarden\");\n let child = this.activatedRoute.firstChild;\n while (child.firstChild) {\n child = child.firstChild;\n }\n\n const titleId: string = child?.snapshot?.data?.titleId;\n const rawTitle: string = child?.snapshot?.data?.title;\n const updateUrl = !child?.snapshot?.data?.doNotSaveUrl ?? true;\n\n if (titleId != null || rawTitle != null) {\n const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n if (newTitle != null && newTitle !== \"\") {\n title = newTitle + \" | \" + title;\n }\n }\n this.titleService.setTitle(title);\n if (updateUrl) {\n this.setPreviousUrl(this.currentUrl);\n }\n });\n }\n\n getPreviousUrl() {\n return this.previousUrl;\n }\n\n setPreviousUrl(url: string) {\n this.previousUrl = url;\n }\n}\n","import { APP_INITIALIZER, NgModule } from \"@angular/core\";\nimport { ToastrModule } from \"ngx-toastr\";\n\nimport {\n JslibServicesModule,\n SECURE_STORAGE,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n LOCALES_DIRECTORY,\n SYSTEM_LANGUAGE,\n} from \"jslib-angular/services/jslib-services.module\";\nimport { ModalService as ModalServiceAbstraction } from \"jslib-angular/services/modal.service\";\nimport { ApiService as ApiServiceAbstraction } from \"jslib-common/abstractions/api.service\";\nimport { CipherService as CipherServiceAbstraction } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"jslib-common/abstractions/collection.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"jslib-common/abstractions/crypto.service\";\nimport { FolderService as FolderServiceAbstraction } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService as I18nServiceAbstraction } from \"jslib-common/abstractions/i18n.service\";\nimport { ImportService as ImportServiceAbstraction } from \"jslib-common/abstractions/import.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService as BaseStateServiceAbstraction } from \"jslib-common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"jslib-common/abstractions/stateMigration.service\";\nimport { StorageService as StorageServiceAbstraction } from \"jslib-common/abstractions/storage.service\";\nimport { StateFactory } from \"jslib-common/factories/stateFactory\";\nimport { ImportService } from \"jslib-common/services/import.service\";\n\nimport { StateService as StateServiceAbstraction } from \"../../abstractions/state.service\";\nimport { Account } from \"../../models/account\";\nimport { GlobalState } from \"../../models/globalState\";\nimport { BroadcasterMessagingService } from \"../../services/broadcasterMessaging.service\";\nimport { HtmlStorageService } from \"../../services/htmlStorage.service\";\nimport { I18nService } from \"../../services/i18n.service\";\nimport { MemoryStorageService } from \"../../services/memoryStorage.service\";\nimport { PasswordRepromptService } from \"../../services/passwordReprompt.service\";\nimport { StateService } from \"../../services/state.service\";\nimport { StateMigrationService } from \"../../services/stateMigration.service\";\nimport { WebPlatformUtilsService } from \"../../services/webPlatformUtils.service\";\nimport { HomeGuard } from \"../guards/home.guard\";\nimport { PermissionsGuard as OrgPermissionsGuard } from \"../organizations/guards/permissions.guard\";\nimport { NavigationPermissionsService as OrgPermissionsService } from \"../organizations/services/navigation-permissions.service\";\n\nimport { EventService } from \"./event.service\";\nimport { InitService } from \"./init.service\";\nimport { ModalService } from \"./modal.service\";\nimport { PolicyListService } from \"./policy-list.service\";\nimport { RouterService } from \"./router.service\";\n\n@NgModule({\n imports: [ToastrModule, JslibServicesModule],\n declarations: [],\n providers: [\n OrgPermissionsService,\n OrgPermissionsGuard,\n InitService,\n RouterService,\n EventService,\n PolicyListService,\n {\n provide: APP_INITIALIZER,\n useFactory: (initService: InitService) => initService.init(),\n deps: [InitService],\n multi: true,\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: false,\n },\n {\n provide: I18nServiceAbstraction,\n useClass: I18nService,\n deps: [SYSTEM_LANGUAGE, LOCALES_DIRECTORY],\n },\n { provide: StorageServiceAbstraction, useClass: HtmlStorageService },\n {\n provide: SECURE_STORAGE,\n // TODO: platformUtilsService.isDev has a helper for this, but using that service here results in a circular dependency.\n // We have a tech debt item in the backlog to break up platformUtilsService, but in the meantime simply checking the environement here is less cumbersome.\n useClass: process.env.NODE_ENV === \"development\" ? HtmlStorageService : MemoryStorageService,\n },\n {\n provide: PlatformUtilsServiceAbstraction,\n useClass: WebPlatformUtilsService,\n },\n { provide: MessagingServiceAbstraction, useClass: BroadcasterMessagingService },\n { provide: ModalServiceAbstraction, useClass: ModalService },\n {\n provide: ImportServiceAbstraction,\n useClass: ImportService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n ApiServiceAbstraction,\n I18nServiceAbstraction,\n CollectionServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n CryptoServiceAbstraction,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [StorageServiceAbstraction, SECURE_STORAGE, STATE_FACTORY],\n },\n {\n provide: StateServiceAbstraction,\n useClass: StateService,\n deps: [\n StorageServiceAbstraction,\n SECURE_STORAGE,\n LogService,\n StateMigrationServiceAbstraction,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n ],\n },\n {\n provide: BaseStateServiceAbstraction,\n useExisting: StateServiceAbstraction,\n },\n {\n provide: PasswordRepromptServiceAbstraction,\n useClass: PasswordRepromptService,\n },\n HomeGuard,\n ],\n})\nexport class ServicesModule {}\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\nimport { DeauthorizeSessionsComponent } from \"./deauthorize-sessions.component\";\nimport { DeleteAccountComponent } from \"./delete-account.component\";\nimport { PurgeVaultComponent } from \"./purge-vault.component\";\n\n@Component({\n selector: \"app-account\",\n templateUrl: \"account.component.html\",\n})\nexport class AccountComponent {\n @ViewChild(\"deauthorizeSessionsTemplate\", { read: ViewContainerRef, static: true })\n deauthModalRef: ViewContainerRef;\n @ViewChild(\"purgeVaultTemplate\", { read: ViewContainerRef, static: true })\n purgeModalRef: ViewContainerRef;\n @ViewChild(\"deleteAccountTemplate\", { read: ViewContainerRef, static: true })\n deleteModalRef: ViewContainerRef;\n\n showChangeEmail = true;\n\n constructor(\n private modalService: ModalService,\n private apiService: ApiService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.showChangeEmail = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n\n async deauthorizeSessions() {\n await this.modalService.openViewRef(DeauthorizeSessionsComponent, this.deauthModalRef);\n }\n\n async purgeVault() {\n await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef);\n }\n\n async deleteAccount() {\n await this.modalService.openViewRef(DeleteAccountComponent, this.deleteModalRef);\n }\n}\n","
\n

{{ \"myAccount\" | i18n }}

\n
\n\n\n
\n

{{ \"changeEmail\" | i18n }}

\n
\n \n
\n
\n

{{ \"dangerZone\" | i18n }}

\n
\n
\n
\n

{{ \"dangerZoneDesc\" | i18n }}

\n \n \n \n
\n
\n\n\n\n\n\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { PayPalConfig } from \"jslib-common/abstractions/environment.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { BitPayInvoiceRequest } from \"jslib-common/models/request/bitPayInvoiceRequest\";\n\n@Component({\n selector: \"app-add-credit\",\n templateUrl: \"add-credit.component.html\",\n})\nexport class AddCreditComponent implements OnInit {\n @Input() creditAmount: string;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.PayPal;\n @Input() organizationId: string;\n @Output() onAdded = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(\"ppButtonForm\", { read: ElementRef, static: true }) ppButtonFormRef: ElementRef;\n\n paymentMethodType = PaymentMethodType;\n ppButtonFormAction: string;\n ppButtonBusinessId: string;\n ppButtonCustomField: string;\n ppLoading = false;\n subject: string;\n returnUrl: string;\n formPromise: Promise;\n\n private userId: string;\n private name: string;\n private email: string;\n\n constructor(\n private stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {\n const payPalConfig = process.env.PAYPAL_CONFIG as PayPalConfig;\n this.ppButtonFormAction = payPalConfig.buttonAction;\n this.ppButtonBusinessId = payPalConfig.businessId;\n }\n\n async ngOnInit() {\n if (this.organizationId != null) {\n if (this.creditAmount == null) {\n this.creditAmount = \"20.00\";\n }\n this.ppButtonCustomField = \"organization_id:\" + this.organizationId;\n const org = await this.organizationService.get(this.organizationId);\n if (org != null) {\n this.subject = org.name;\n this.name = org.name;\n }\n } else {\n if (this.creditAmount == null) {\n this.creditAmount = \"10.00\";\n }\n this.userId = await this.stateService.getUserId();\n this.subject = await this.stateService.getEmail();\n this.email = this.subject;\n this.ppButtonCustomField = \"user_id:\" + this.userId;\n }\n this.ppButtonCustomField += \",account_credit:1\";\n this.returnUrl = window.location.href;\n }\n\n async submit() {\n if (this.creditAmount == null || this.creditAmount === \"\") {\n return;\n }\n\n if (this.method === PaymentMethodType.PayPal) {\n this.ppButtonFormRef.nativeElement.submit();\n this.ppLoading = true;\n return;\n }\n if (this.method === PaymentMethodType.BitPay) {\n try {\n const req = new BitPayInvoiceRequest();\n req.email = this.email;\n req.name = this.name;\n req.credit = true;\n req.amount = this.creditAmountNumber;\n req.organizationId = this.organizationId;\n req.userId = this.userId;\n req.returnUrl = this.returnUrl;\n this.formPromise = this.apiService.postBitPayInvoice(req);\n const bitPayUrl: string = await this.formPromise;\n this.platformUtilsService.launchUri(bitPayUrl);\n } catch (e) {\n this.logService.error(e);\n }\n return;\n }\n try {\n this.onAdded.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n formatAmount() {\n try {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n const floatAmount = Math.abs(parseFloat(this.creditAmount));\n if (floatAmount > 0) {\n this.creditAmount = parseFloat((Math.round(floatAmount * 100) / 100).toString())\n .toFixed(2)\n .toString();\n return;\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.creditAmount = \"\";\n }\n\n get creditAmountNumber(): number {\n if (this.creditAmount != null && this.creditAmount !== \"\") {\n try {\n return parseFloat(this.creditAmount);\n } catch (e) {\n this.logService.error(e);\n }\n }\n return null;\n }\n}\n","
\n
\n \n

{{ \"addCredit\" | i18n }}

\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
$USD
\n \n
\n
\n
\n {{ \"creditDelayed\" | i18n }}\n
\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { PaymentRequest } from \"jslib-common/models/request/paymentRequest\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-adjust-payment\",\n templateUrl: \"adjust-payment.component.html\",\n})\nexport class AdjustPaymentComponent {\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n @Input() currentType?: PaymentMethodType;\n @Input() organizationId: string;\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n paymentMethodType = PaymentMethodType;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new PaymentRequest();\n this.formPromise = this.paymentComponent.createPaymentToken().then((result) => {\n request.paymentToken = result[0];\n request.paymentMethodType = result[1];\n request.postalCode = this.taxInfoComponent.taxInfo.postalCode;\n request.country = this.taxInfoComponent.taxInfo.country;\n if (this.organizationId == null) {\n return this.apiService.postAccountPayment(request);\n } else {\n request.taxId = this.taxInfoComponent.taxInfo.taxId;\n request.state = this.taxInfoComponent.taxInfo.state;\n request.line1 = this.taxInfoComponent.taxInfo.line1;\n request.line2 = this.taxInfoComponent.taxInfo.line2;\n request.city = this.taxInfoComponent.taxInfo.city;\n request.state = this.taxInfoComponent.taxInfo.state;\n return this.apiService.postOrganizationPayment(this.organizationId, request);\n }\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedPaymentMethod\")\n );\n this.onAdjusted.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n changeCountry() {\n if (this.taxInfoComponent.taxInfo.country === \"US\") {\n this.paymentComponent.hideBank = !this.organizationId;\n } else {\n this.paymentComponent.hideBank = true;\n if (this.paymentComponent.method === PaymentMethodType.BankAccount) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n }\n}\n","
\n
\n \n

\n {{ (currentType != null ? \"changePaymentMethod\" : \"addPaymentMethod\") | i18n }}\n

\n \n \n \n \n
\n
\n","import { Component, EventEmitter, Input, Output, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StorageRequest } from \"jslib-common/models/request/storageRequest\";\nimport { PaymentResponse } from \"jslib-common/models/response/paymentResponse\";\n\nimport { PaymentComponent } from \"./payment.component\";\n\n@Component({\n selector: \"app-adjust-storage\",\n templateUrl: \"adjust-storage.component.html\",\n})\nexport class AdjustStorageComponent {\n @Input() storageGbPrice = 0;\n @Input() add = true;\n @Input() organizationId: string;\n @Input() interval = \"year\";\n @Output() onAdjusted = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n storageAdjustment = 0;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n const request = new StorageRequest();\n request.storageGbAdjustment = this.storageAdjustment;\n if (!this.add) {\n request.storageGbAdjustment *= -1;\n }\n\n let paymentFailed = false;\n const action = async () => {\n let response: Promise;\n if (this.organizationId == null) {\n response = this.formPromise = this.apiService.postAccountStorage(request);\n } else {\n response = this.formPromise = this.apiService.postOrganizationStorage(\n this.organizationId,\n request\n );\n }\n const result = await response;\n if (result != null && result.paymentIntentClientSecret != null) {\n try {\n await this.paymentComponent.handleStripeCardPayment(\n result.paymentIntentClientSecret,\n null\n );\n } catch {\n paymentFailed = true;\n }\n }\n };\n this.formPromise = action();\n await this.formPromise;\n this.onAdjusted.emit(this.storageAdjustment);\n if (paymentFailed) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"couldNotChargeCardPayInvoice\"),\n { timeout: 10000 }\n );\n this.router.navigate([\"../billing\"], { relativeTo: this.activatedRoute });\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"adjustedStorage\", request.storageGbAdjustment.toString())\n );\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n get adjustedStorageTotal(): number {\n return this.storageGbPrice * this.storageAdjustment;\n }\n}\n","
\n
\n \n

{{ (add ? \"addStorage\" : \"removeStorage\") | i18n }}

\n
\n
\n \n \n
\n
\n
\n {{ \"total\" | i18n }}: {{ storageAdjustment || 0 }} GB ×\n {{ storageGbPrice | currency: \"$\" }} = {{ adjustedStorageTotal | currency: \"$\" }} /{{\n interval | i18n\n }}\n
\n \n \n \n {{ (add ? \"storageAddNote\" : \"storageRemoveNote\") | i18n }}\n \n
\n
\n\n","import { Component } from \"@angular/core\";\n\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { ApiKeyResponse } from \"jslib-common/models/response/apiKeyResponse\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-api-key\",\n templateUrl: \"api-key.component.html\",\n})\nexport class ApiKeyComponent {\n keyType: string;\n isRotation: boolean;\n postKey: (entityId: string, request: SecretVerificationRequest) => Promise;\n entityId: string;\n scope: string;\n grantType: string;\n apiKeyTitle: string;\n apiKeyWarning: string;\n apiKeyDescription: string;\n\n masterPassword: Verification;\n formPromise: Promise;\n clientId: string;\n clientSecret: string;\n\n constructor(\n private userVerificationService: UserVerificationService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.postKey(this.entityId, request));\n const response = await this.formPromise;\n this.clientSecret = response.apiKey;\n this.clientId = `${this.keyType}.${this.entityId}`;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ apiKeyTitle | i18n }}

\n \n ×\n \n
\n
\n

{{ apiKeyDescription | i18n }}

\n \n \n\n {{ apiKeyWarning | i18n }}\n \n

\n client_id:
\n {{ clientId }}\n

\n

\n client_secret:
\n {{ clientSecret }}\n

\n

\n scope:
\n {{ scope }}\n

\n

\n grant_type:
\n {{ grantType }}\n

\n \n
\n
\n \n \n {{ (isRotation ? \"rotateApiKey\" : \"viewApiKey\") | i18n }}\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationConnectionType } from \"jslib-common/enums/organizationConnectionType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { BillingSyncConfigApi } from \"jslib-common/models/api/billingSyncConfigApi\";\nimport { BillingSyncConfigRequest } from \"jslib-common/models/request/billingSyncConfigRequest\";\nimport { OrganizationConnectionRequest } from \"jslib-common/models/request/organizationConnectionRequest\";\nimport { OrganizationConnectionResponse } from \"jslib-common/models/response/organizationConnectionResponse\";\n\n@Component({\n selector: \"app-billing-sync-key\",\n templateUrl: \"billing-sync-key.component.html\",\n})\nexport class BillingSyncKeyComponent {\n entityId: string;\n existingConnectionId: string;\n billingSyncKey: string;\n setParentConnection: (connection: OrganizationConnectionResponse) => void;\n\n formPromise: Promise> | Promise;\n\n constructor(private apiService: ApiService, private logService: LogService) {}\n\n async submit() {\n try {\n const request = new OrganizationConnectionRequest(\n this.entityId,\n OrganizationConnectionType.CloudBillingSync,\n true,\n new BillingSyncConfigRequest(this.billingSyncKey)\n );\n if (this.existingConnectionId == null) {\n this.formPromise = this.apiService.createOrganizationConnection(\n request,\n BillingSyncConfigApi\n );\n } else {\n this.formPromise = this.apiService.updateOrganizationConnection(\n request,\n BillingSyncConfigApi,\n this.existingConnectionId\n );\n }\n const response = (await this\n .formPromise) as OrganizationConnectionResponse;\n this.existingConnectionId = response?.id;\n this.billingSyncKey = response?.config?.billingSyncKey;\n this.setParentConnection(response);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async deleteConnection() {\n this.formPromise = this.apiService.deleteOrganizationConnection(this.existingConnectionId);\n await this.formPromise;\n this.setParentConnection(null);\n }\n}\n","
\n
\n \n
\n

{{ \"manageBillingSync\" | i18n }}

\n \n ×\n \n
\n
\n

{{ \"billingSyncKeyDesc\" | i18n }}

\n
\n
\n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { EmailRequest } from \"jslib-common/models/request/emailRequest\";\nimport { EmailTokenRequest } from \"jslib-common/models/request/emailTokenRequest\";\n\n@Component({\n selector: \"app-change-email\",\n templateUrl: \"change-email.component.html\",\n})\nexport class ChangeEmailComponent implements OnInit {\n masterPassword: string;\n newEmail: string;\n token: string;\n tokenSent = false;\n showTwoFactorEmailWarning = false;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n const twoFactorProviders = await this.apiService.getTwoFactorProviders();\n this.showTwoFactorEmailWarning = twoFactorProviders.data.some(\n (p) => p.type === TwoFactorProviderType.Email && p.enabled\n );\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n this.newEmail = this.newEmail.trim().toLowerCase();\n if (!this.tokenSent) {\n const request = new EmailTokenRequest();\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n try {\n this.formPromise = this.apiService.postEmailToken(request);\n await this.formPromise;\n this.tokenSent = true;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const request = new EmailRequest();\n request.token = this.token;\n request.newEmail = this.newEmail;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.newEmail,\n kdf,\n kdfIterations\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postEmail(request);\n await this.formPromise;\n this.reset();\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"emailChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n }\n\n reset() {\n this.token = this.newEmail = this.masterPassword = null;\n this.tokenSent = false;\n }\n}\n","
\n \n {{ \"changeEmailTwoFactorWarning\" | i18n }}\n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n

{{ \"changeEmailDesc\" | i18n: newEmail }}

\n {{ \"loggedOutWarning\" | i18n }}\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { DEFAULT_KDF_ITERATIONS, KdfType } from \"jslib-common/enums/kdfType\";\nimport { KdfRequest } from \"jslib-common/models/request/kdfRequest\";\n\n@Component({\n selector: \"app-change-kdf\",\n templateUrl: \"change-kdf.component.html\",\n})\nexport class ChangeKdfComponent implements OnInit {\n masterPassword: string;\n kdfIterations: number;\n kdf = KdfType.PBKDF2_SHA256;\n kdfOptions: any[] = [];\n formPromise: Promise;\n recommendedKdfIterations = DEFAULT_KDF_ITERATIONS;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.kdfOptions = [{ name: \"PBKDF2 SHA-256\", value: KdfType.PBKDF2_SHA256 }];\n }\n\n async ngOnInit() {\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n const request = new KdfRequest();\n request.kdf = this.kdf;\n request.kdfIterations = this.kdfIterations;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n const email = await this.stateService.getEmail();\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n email,\n this.kdf,\n this.kdfIterations\n );\n request.newMasterPasswordHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n newKey\n );\n const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n request.key = newEncKey[1].encryptedString;\n try {\n this.formPromise = this.apiService.postAccountKdf(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"encKeySettingsChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n

{{ \"encKeySettings\" | i18n }}

\n
\n{{ \"loggedOutWarning\" | i18n }}\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
\n
\n
\n
\n

{{ \"kdfIterationsDesc\" | i18n: (recommendedKdfIterations | number) }}

\n {{ \"warning\" | i18n }}: {{ \"kdfIterationsWarning\" | i18n: (50000 | number) }}\n
\n
\n
\n
\n \n\n","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"jslib-angular/components/change-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { EmergencyAccessStatusType } from \"jslib-common/enums/emergencyAccessStatusType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { CipherWithIdRequest } from \"jslib-common/models/request/cipherWithIdRequest\";\nimport { EmergencyAccessUpdateRequest } from \"jslib-common/models/request/emergencyAccessUpdateRequest\";\nimport { FolderWithIdRequest } from \"jslib-common/models/request/folderWithIdRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { PasswordRequest } from \"jslib-common/models/request/passwordRequest\";\nimport { SendWithIdRequest } from \"jslib-common/models/request/sendWithIdRequest\";\nimport { UpdateKeyRequest } from \"jslib-common/models/request/updateKeyRequest\";\n\n@Component({\n selector: \"app-change-password\",\n templateUrl: \"change-password.component.html\",\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n rotateEncKey = false;\n currentMasterPassword: string;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private syncService: SyncService,\n private apiService: ApiService,\n private sendService: SendService,\n private organizationService: OrganizationService,\n private keyConnectorService: KeyConnectorService,\n private router: Router\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n this.router.navigate([\"/settings/security/two-factor\"]);\n }\n await super.ngOnInit();\n }\n\n async rotateEncKeyClicked() {\n if (this.rotateEncKey) {\n const ciphers = await this.cipherService.getAllDecrypted();\n let hasOldAttachments = false;\n if (ciphers != null) {\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId == null && ciphers[i].hasOldAttachments) {\n hasOldAttachments = true;\n break;\n }\n }\n }\n\n if (hasOldAttachments) {\n const learnMore = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"oldAttachmentsNeedFixDesc\"),\n null,\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"close\"),\n \"warning\"\n );\n if (learnMore) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/attachments/#add-storage-space\"\n );\n }\n this.rotateEncKey = false;\n return;\n }\n\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"updateEncryptionKeyWarning\") +\n \" \" +\n this.i18nService.t(\"updateEncryptionKeyExportWarning\") +\n \" \" +\n this.i18nService.t(\"rotateEncKeyConfirmation\"),\n this.i18nService.t(\"rotateEncKeyTitle\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n this.rotateEncKey = false;\n }\n }\n }\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (!hasEncKey) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"updateKey\"));\n return;\n }\n\n await super.submit();\n }\n\n async setupSubmitActions() {\n if (this.currentMasterPassword == null || this.currentMasterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n\n if (this.rotateEncKey) {\n await this.syncService.fullSync(true);\n }\n\n return super.setupSubmitActions();\n }\n\n async performSubmitActions(\n newMasterPasswordHash: string,\n newKey: SymmetricCryptoKey,\n newEncKey: [SymmetricCryptoKey, EncString]\n ) {\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.newMasterPasswordHash = newMasterPasswordHash;\n request.key = newEncKey[1].encryptedString;\n\n try {\n if (this.rotateEncKey) {\n this.formPromise = this.apiService.postPassword(request).then(() => {\n return this.updateKey(newKey, request.newMasterPasswordHash);\n });\n } else {\n this.formPromise = this.apiService.postPassword(request);\n }\n\n await this.formPromise;\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n private async updateKey(key: SymmetricCryptoKey, masterPasswordHash: string) {\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = masterPasswordHash;\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n const sends = await this.sendService.getAll();\n await Promise.all(\n sends.map(async (send) => {\n const cryptoKey = await this.cryptoService.decryptToBytes(send.key, null);\n send.key = (await this.cryptoService.encrypt(cryptoKey, encKey[0])) ?? send.key;\n request.sends.push(new SendWithIdRequest(send));\n })\n );\n\n await this.apiService.postAccountKey(request);\n\n await this.updateEmergencyAccesses(encKey[0]);\n\n await this.updateAllResetPasswordKeys(encKey[0], masterPasswordHash);\n }\n\n private async updateEmergencyAccesses(encKey: SymmetricCryptoKey) {\n const emergencyAccess = await this.apiService.getEmergencyAccessTrusted();\n const allowedStatuses = [\n EmergencyAccessStatusType.Confirmed,\n EmergencyAccessStatusType.RecoveryInitiated,\n EmergencyAccessStatusType.RecoveryApproved,\n ];\n\n const filteredAccesses = emergencyAccess.data.filter((d) => allowedStatuses.includes(d.status));\n\n for (const details of filteredAccesses) {\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n const updateRequest = new EmergencyAccessUpdateRequest();\n updateRequest.type = details.type;\n updateRequest.waitTimeDays = details.waitTimeDays;\n updateRequest.keyEncrypted = encryptedKey.encryptedString;\n\n await this.apiService.putEmergencyAccess(details.id, updateRequest);\n }\n }\n\n private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey, masterPasswordHash: string) {\n const orgs = await this.organizationService.getAll();\n\n for (const org of orgs) {\n // If not already enrolled, skip\n if (!org.resetPasswordEnrolled) {\n continue;\n }\n\n // Retrieve public key\n const response = await this.apiService.getOrganizationKeys(org.id);\n const publicKey = Utils.fromB64ToArray(response?.publicKey);\n\n // Re-enroll - encrpyt user's encKey.key with organization public key\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n // Create/Execute request\n const request = new OrganizationUserResetPasswordEnrollmentRequest();\n request.masterPasswordHash = masterPasswordHash;\n request.resetPasswordKey = encryptedKey.encryptedString;\n\n await this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n }\n }\n}\n","
\n

{{ \"changeMasterPassword\" | i18n }}

\n
\n\n{{ \"loggedOutWarning\" | i18n }}\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
\n
\n \n \n \n \n \n
\n
\n \n
\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\n\nimport { OrganizationPlansComponent } from \"./organization-plans.component\";\n\n@Component({\n selector: \"app-create-organization\",\n templateUrl: \"create-organization.component.html\",\n})\nexport class CreateOrganizationComponent implements OnInit {\n @ViewChild(OrganizationPlansComponent, { static: true })\n orgPlansComponent: OrganizationPlansComponent;\n\n constructor(private route: ActivatedRoute) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.plan === \"families\") {\n this.orgPlansComponent.plan = PlanType.FamiliesAnnually;\n this.orgPlansComponent.product = ProductType.Families;\n } else if (qParams.plan === \"teams\") {\n this.orgPlansComponent.plan = PlanType.TeamsAnnually;\n this.orgPlansComponent.product = ProductType.Teams;\n } else if (qParams.plan === \"enterprise\") {\n this.orgPlansComponent.plan = PlanType.EnterpriseAnnually;\n this.orgPlansComponent.product = ProductType.Enterprise;\n }\n });\n }\n}\n","
\n
\n
\n
\n

{{ \"newOrganization\" | i18n }}

\n
\n

{{ \"newOrganizationDesc\" | i18n }}

\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-deauthorize-sessions\",\n templateUrl: \"deauthorize-sessions.component.html\",\n})\nexport class DeauthorizeSessionsComponent {\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.postSecurityStamp(request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"sessionsDeauthorized\"),\n this.i18nService.t(\"logBackIn\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"deauthorizeSessions\" | i18n }}

\n \n ×\n \n
\n
\n

{{ \"deauthorizeSessionsDesc\" | i18n }}

\n {{ \"deauthorizeSessionsWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-delete-account\",\n templateUrl: \"delete-account.component.html\",\n})\nexport class DeleteAccountComponent {\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private messagingService: MessagingService,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.deleteAccount(request));\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"accountDeleted\"),\n this.i18nService.t(\"accountDeletedDesc\")\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"deleteAccount\" | i18n }}

\n \n ×\n \n
\n
\n

{{ \"deleteAccountDesc\" | i18n }}

\n {{ \"deleteAccountWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UpdateDomainsRequest } from \"jslib-common/models/request/updateDomainsRequest\";\n\n@Component({\n selector: \"app-domain-rules\",\n templateUrl: \"domain-rules.component.html\",\n})\nexport class DomainRulesComponent implements OnInit {\n loading = true;\n custom: string[] = [];\n global: any[] = [];\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n const response = await this.apiService.getSettingsDomains();\n this.loading = false;\n if (response.equivalentDomains != null) {\n this.custom = response.equivalentDomains.map((d) => d.join(\", \"));\n }\n if (response.globalEquivalentDomains != null) {\n this.global = response.globalEquivalentDomains.map((d) => {\n return {\n domains: d.domains.join(\", \"),\n excluded: d.excluded,\n key: d.type,\n };\n });\n }\n }\n\n toggleExcluded(globalDomain: any) {\n globalDomain.excluded = !globalDomain.excluded;\n }\n\n customize(globalDomain: any) {\n globalDomain.excluded = true;\n this.custom.push(globalDomain.domains);\n }\n\n remove(index: number) {\n this.custom.splice(index, 1);\n }\n\n add() {\n this.custom.push(\"\");\n }\n\n async submit() {\n const request = new UpdateDomainsRequest();\n request.excludedGlobalEquivalentDomains = this.global\n .filter((d) => d.excluded)\n .map((d) => d.key);\n if (request.excludedGlobalEquivalentDomains.length === 0) {\n request.excludedGlobalEquivalentDomains = null;\n }\n request.equivalentDomains = this.custom\n .filter((d) => d != null && d.trim() !== \"\")\n .map((d) => d.split(\",\").map((d2) => d2.trim()));\n if (request.equivalentDomains.length === 0) {\n request.equivalentDomains = null;\n }\n\n try {\n this.formPromise = this.apiService.putSettingsDomains(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"domainsUpdated\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n indexTrackBy(index: number, obj: any): any {\n return index;\n }\n}\n","
\n

{{ \"domainRules\" | i18n }}

\n
\n

{{ \"domainRulesDesc\" | i18n }}

\n
\n

{{ \"customEqDomains\" | i18n }}

\n

\n \n {{ \"loading\" | i18n }}\n

\n \n
\n
\n \n \n
\n \n \n \n
\n \n {{ \"newCustomDomainDesc\" | i18n }}\n
\n \n

{{ \"globalEqDomains\" | i18n }}

\n

\n \n {{ \"loading\" | i18n }}\n

\n 0\">\n \n \n \n \n \n \n
{{ d.domains }}\n
\n \n \n \n
\n \n \n {{ \"exclude\" | i18n }}\n \n \n \n {{ \"include\" | i18n }}\n \n \n \n {{ \"customize\" | i18n }}\n \n
\n
\n
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { EmergencyAccessType } from \"jslib-common/enums/emergencyAccessType\";\nimport { EmergencyAccessInviteRequest } from \"jslib-common/models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessUpdateRequest } from \"jslib-common/models/request/emergencyAccessUpdateRequest\";\n\n@Component({\n selector: \"emergency-access-add-edit\",\n templateUrl: \"emergency-access-add-edit.component.html\",\n})\nexport class EmergencyAccessAddEditComponent implements OnInit {\n @Input() name: string;\n @Input() emergencyAccessId: string;\n @Output() onSaved = new EventEmitter();\n @Output() onDeleted = new EventEmitter();\n\n loading = true;\n readOnly = false;\n editMode = false;\n title: string;\n email: string;\n type: EmergencyAccessType = EmergencyAccessType.View;\n\n formPromise: Promise;\n\n emergencyAccessType = EmergencyAccessType;\n waitTimes: { name: string; value: number }[];\n waitTime: number;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.editMode = this.loading = this.emergencyAccessId != null;\n\n this.waitTimes = [\n { name: this.i18nService.t(\"oneDay\"), value: 1 },\n { name: this.i18nService.t(\"days\", \"2\"), value: 2 },\n { name: this.i18nService.t(\"days\", \"7\"), value: 7 },\n { name: this.i18nService.t(\"days\", \"14\"), value: 14 },\n { name: this.i18nService.t(\"days\", \"30\"), value: 30 },\n { name: this.i18nService.t(\"days\", \"90\"), value: 90 },\n ];\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editEmergencyContact\");\n try {\n const emergencyAccess = await this.apiService.getEmergencyAccess(this.emergencyAccessId);\n this.type = emergencyAccess.type;\n this.waitTime = emergencyAccess.waitTimeDays;\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n this.title = this.i18nService.t(\"inviteEmergencyContact\");\n this.waitTime = this.waitTimes[2].value;\n }\n\n this.loading = false;\n }\n\n async submit() {\n try {\n if (this.editMode) {\n const request = new EmergencyAccessUpdateRequest();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.putEmergencyAccess(this.emergencyAccessId, request);\n } else {\n const request = new EmergencyAccessInviteRequest();\n request.email = this.email.trim();\n request.type = this.type;\n request.waitTimeDays = this.waitTime;\n\n this.formPromise = this.apiService.postEmergencyAccessInvite(request);\n }\n\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedUserId\" : \"invitedUsers\", this.name)\n );\n this.onSaved.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async delete() {\n this.onDeleted.emit();\n }\n}\n","
\n
\n \n
\n

\n \n {{ title }}\n {{ name }}\n

\n \n ×\n \n
\n
\n \n {{ \"loading\" | i18n }}\n
\n
\n \n

{{ \"inviteEmergencyContactDesc\" | i18n }}

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

\n {{ \"userAccess\" | i18n }}\n \n \n \n

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n {{ \"waitTimeDesc\" | i18n }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"jslib-angular/components/attachments.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\n\n@Component({\n selector: \"emergency-access-attachments\",\n templateUrl: \"../vault/attachments.component.html\",\n})\nexport class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = true;\n canAccessAttachments = true;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService\n );\n }\n\n protected async init() {\n // Do nothing since cipher is already decoded\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return false;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"emergency-access-confirm\",\n templateUrl: \"emergency-access-confirm.component.html\",\n})\nexport class EmergencyAccessConfirmComponent implements OnInit {\n @Input() name: string;\n @Input() userId: string;\n @Input() emergencyAccessId: string;\n @Input() formPromise: Promise;\n @Output() onConfirmed = new EventEmitter();\n\n dontAskAgain = false;\n loading = true;\n fingerprint: string;\n\n constructor(\n private apiService: ApiService,\n private cryptoService: CryptoService,\n private stateService: StateService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n try {\n const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n if (publicKeyResponse != null) {\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n const fingerprint = await this.cryptoService.getFingerprint(this.userId, publicKey.buffer);\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.loading = false;\n }\n\n async submit() {\n if (this.loading) {\n return;\n }\n\n if (this.dontAskAgain) {\n await this.stateService.setAutoConfirmFingerprints(true);\n }\n\n try {\n this.onConfirmed.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n \n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ChangePasswordComponent } from \"jslib-angular/components/change-password.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { KdfType } from \"jslib-common/enums/kdfType\";\nimport { PolicyData } from \"jslib-common/models/data/policyData\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { EmergencyAccessPasswordRequest } from \"jslib-common/models/request/emergencyAccessPasswordRequest\";\nimport { PolicyResponse } from \"jslib-common/models/response/policyResponse\";\n\n@Component({\n selector: \"emergency-access-takeover\",\n templateUrl: \"emergency-access-takeover.component.html\",\n})\nexport class EmergencyAccessTakeoverComponent extends ChangePasswordComponent implements OnInit {\n @Output() onDone = new EventEmitter();\n @Input() emergencyAccessId: string;\n @Input() name: string;\n @Input() email: string;\n @Input() kdf: KdfType;\n @Input() kdfIterations: number;\n\n formPromise: Promise;\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n stateService: StateService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n private apiService: ApiService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n const response = await this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId);\n if (response.data != null && response.data.length > 0) {\n const policies = response.data.map(\n (policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse))\n );\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(\n policies\n );\n }\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n const takeoverResponse = await this.apiService.postEmergencyAccessTakeover(\n this.emergencyAccessId\n );\n\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(takeoverResponse.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n if (oldEncKey == null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"unexpectedError\")\n );\n return;\n }\n\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n takeoverResponse.kdf,\n takeoverResponse.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n const request = new EmergencyAccessPasswordRequest();\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n try {\n this.onDone.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

\n {{ \"takeover\" | i18n }}\n {{ name }}\n

\n \n ×\n \n
\n
\n {{ \"loggedOutWarning\" | i18n }}\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","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { EmergencyAccessViewResponse } from \"jslib-common/models/response/emergencyAccessResponse\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nimport { EmergencyAccessAttachmentsComponent } from \"./emergency-access-attachments.component\";\nimport { EmergencyAddEditComponent } from \"./emergency-add-edit.component\";\n\n@Component({\n selector: \"emergency-access-view\",\n templateUrl: \"emergency-access-view.component.html\",\n})\nexport class EmergencyAccessViewComponent implements OnInit {\n @ViewChild(\"cipherAddEdit\", { read: ViewContainerRef, static: true })\n cipherAddEditModalRef: ViewContainerRef;\n @ViewChild(\"attachments\", { read: ViewContainerRef, static: true })\n attachmentsModalRef: ViewContainerRef;\n\n id: string;\n ciphers: CipherView[] = [];\n loaded = false;\n\n constructor(\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private modalService: ModalService,\n private router: Router,\n private route: ActivatedRoute,\n private apiService: ApiService\n ) {}\n\n ngOnInit() {\n this.route.params.subscribe((qParams) => {\n if (qParams.id == null) {\n return this.router.navigate([\"settings/emergency-access\"]);\n }\n\n this.id = qParams.id;\n\n this.load();\n });\n }\n\n async selectCipher(cipher: CipherView) {\n // eslint-disable-next-line\n const [_, childComponent] = await this.modalService.openViewRef(\n EmergencyAddEditComponent,\n this.cipherAddEditModalRef,\n (comp) => {\n comp.cipherId = cipher == null ? null : cipher.id;\n comp.cipher = cipher;\n }\n );\n\n return childComponent;\n }\n\n async load() {\n const response = await this.apiService.postEmergencyAccessView(this.id);\n this.ciphers = await this.getAllCiphers(response);\n this.loaded = true;\n }\n\n async viewAttachments(cipher: CipherView) {\n await this.modalService.openViewRef(\n EmergencyAccessAttachmentsComponent,\n this.attachmentsModalRef,\n (comp) => {\n comp.cipher = cipher;\n comp.emergencyAccessId = this.id;\n }\n );\n }\n\n protected async getAllCiphers(response: EmergencyAccessViewResponse): Promise {\n const ciphers = response.ciphers;\n\n const decCiphers: CipherView[] = [];\n const oldKeyBuffer = await this.cryptoService.rsaDecrypt(response.keyEncrypted);\n const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n const promises: any[] = [];\n ciphers.forEach((cipherResponse) => {\n const cipherData = new CipherData(cipherResponse);\n const cipher = new Cipher(cipherData);\n promises.push(cipher.decrypt(oldEncKey).then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.cipherService.getLocaleSortingFunction());\n\n return decCiphers;\n }\n}\n","
\n

{{ \"vault\" | i18n }}

\n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n {{\n c.name\n }}\n \n \n {{ \"shared\" | i18n }}\n \n \n \n {{ \"attachments\" | i18n }}\n \n
\n {{ c.subTitle }}\n
\n \n
\n
\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { UserNamePipe } from \"jslib-angular/pipes/user-name.pipe\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { EmergencyAccessStatusType } from \"jslib-common/enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"jslib-common/enums/emergencyAccessType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EmergencyAccessConfirmRequest } from \"jslib-common/models/request/emergencyAccessConfirmRequest\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n} from \"jslib-common/models/response/emergencyAccessResponse\";\n\nimport { EmergencyAccessAddEditComponent } from \"./emergency-access-add-edit.component\";\nimport { EmergencyAccessConfirmComponent } from \"./emergency-access-confirm.component\";\nimport { EmergencyAccessTakeoverComponent } from \"./emergency-access-takeover.component\";\n\n@Component({\n selector: \"emergency-access\",\n templateUrl: \"emergency-access.component.html\",\n})\nexport class EmergencyAccessComponent implements OnInit {\n @ViewChild(\"addEdit\", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n @ViewChild(\"takeoverTemplate\", { read: ViewContainerRef, static: true })\n takeoverModalRef: ViewContainerRef;\n @ViewChild(\"confirmTemplate\", { read: ViewContainerRef, static: true })\n confirmModalRef: ViewContainerRef;\n\n loaded = false;\n canAccessPremium: boolean;\n trustedContacts: EmergencyAccessGranteeDetailsResponse[];\n grantedContacts: EmergencyAccessGrantorDetailsResponse[];\n emergencyAccessType = EmergencyAccessType;\n emergencyAccessStatusType = EmergencyAccessStatusType;\n actionPromise: Promise;\n isOrganizationOwner: boolean;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private userNamePipe: UserNamePipe,\n private logService: LogService,\n private stateService: StateService,\n private organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n const orgs = await this.organizationService.getAll();\n this.isOrganizationOwner = orgs.some((o) => o.isOwner);\n this.load();\n }\n\n async load() {\n this.trustedContacts = (await this.apiService.getEmergencyAccessTrusted()).data;\n this.grantedContacts = (await this.apiService.getEmergencyAccessGranted()).data;\n this.loaded = true;\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n async edit(details: EmergencyAccessGranteeDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessAddEditComponent,\n this.addEditModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(details);\n comp.emergencyAccessId = details?.id;\n comp.readOnly = !this.canAccessPremium;\n comp.onSaved.subscribe(() => {\n modal.close();\n this.load();\n });\n comp.onDeleted.subscribe(() => {\n modal.close();\n this.remove(details);\n });\n }\n );\n }\n\n invite() {\n this.edit(null);\n }\n\n async reinvite(contact: EmergencyAccessGranteeDetailsResponse) {\n if (this.actionPromise != null) {\n return;\n }\n this.actionPromise = this.apiService.postEmergencyAccessReinvite(contact.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenReinvited\", contact.email)\n );\n this.actionPromise = null;\n }\n\n async confirm(contact: EmergencyAccessGranteeDetailsResponse) {\n function updateUser() {\n contact.status = EmergencyAccessStatusType.Confirmed;\n }\n\n if (this.actionPromise != null) {\n return;\n }\n\n const autoConfirm = await this.stateService.getAutoConfirmFingerPrints();\n if (autoConfirm == null || !autoConfirm) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessConfirmComponent,\n this.confirmModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(contact);\n comp.emergencyAccessId = contact.id;\n comp.userId = contact?.granteeId;\n comp.onConfirmed.subscribe(async () => {\n modal.close();\n\n comp.formPromise = this.doConfirmation(contact);\n await comp.formPromise;\n\n updateUser();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(contact))\n );\n });\n }\n );\n return;\n }\n\n this.actionPromise = this.doConfirmation(contact);\n await this.actionPromise;\n updateUser();\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"hasBeenConfirmed\", this.userNamePipe.transform(contact))\n );\n this.actionPromise = null;\n }\n\n async remove(\n details: EmergencyAccessGranteeDetailsResponse | EmergencyAccessGrantorDetailsResponse\n ) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeUserConfirmation\"),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n await this.apiService.deleteEmergencyAccess(details.id);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedUserId\", this.userNamePipe.transform(details))\n );\n\n if (details instanceof EmergencyAccessGranteeDetailsResponse) {\n this.removeGrantee(details);\n } else {\n this.removeGrantor(details);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async requestAccess(details: EmergencyAccessGrantorDetailsResponse) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"requestAccessConfirmation\", details.waitTimeDays.toString()),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"requestAccess\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessInitiate(details.id);\n\n details.status = EmergencyAccessStatusType.RecoveryInitiated;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"requestSent\", this.userNamePipe.transform(details))\n );\n }\n\n async approve(details: EmergencyAccessGranteeDetailsResponse) {\n const type = this.i18nService.t(\n details.type === EmergencyAccessType.View ? \"view\" : \"takeover\"\n );\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"approveAccessConfirmation\", this.userNamePipe.transform(details), type),\n this.userNamePipe.transform(details),\n this.i18nService.t(\"approve\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n\n if (!confirmed) {\n return false;\n }\n\n await this.apiService.postEmergencyAccessApprove(details.id);\n details.status = EmergencyAccessStatusType.RecoveryApproved;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyApproved\", this.userNamePipe.transform(details))\n );\n }\n\n async reject(details: EmergencyAccessGranteeDetailsResponse) {\n await this.apiService.postEmergencyAccessReject(details.id);\n details.status = EmergencyAccessStatusType.Confirmed;\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"emergencyRejected\", this.userNamePipe.transform(details))\n );\n }\n\n async takeover(details: EmergencyAccessGrantorDetailsResponse) {\n const [modal] = await this.modalService.openViewRef(\n EmergencyAccessTakeoverComponent,\n this.takeoverModalRef,\n (comp) => {\n comp.name = this.userNamePipe.transform(details);\n comp.email = details.email;\n comp.emergencyAccessId = details != null ? details.id : null;\n\n comp.onDone.subscribe(() => {\n modal.close();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"passwordResetFor\", this.userNamePipe.transform(details))\n );\n });\n }\n );\n }\n\n private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) {\n const index = this.trustedContacts.indexOf(details);\n if (index > -1) {\n this.trustedContacts.splice(index, 1);\n }\n }\n\n private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) {\n const index = this.grantedContacts.indexOf(details);\n if (index > -1) {\n this.grantedContacts.splice(index, 1);\n }\n }\n\n // Encrypt the master password hash using the grantees public key, and send it to bitwarden for escrow.\n private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n const encKey = await this.cryptoService.getEncKey();\n const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n try {\n this.logService.debug(\n \"User's fingerprint: \" +\n (await this.cryptoService.getFingerprint(details.granteeId, publicKey.buffer)).join(\"-\")\n );\n } catch {\n // Ignore errors since it's just a debug message\n }\n\n const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n const request = new EmergencyAccessConfirmRequest();\n request.key = encryptedKey.encryptedString;\n await this.apiService.postEmergencyAccessConfirm(details.id, request);\n }\n}\n","
\n

{{ \"emergencyAccess\" | i18n }}

\n
\n

\n {{ \"emergencyAccessDesc\" | i18n }}\n \n {{ \"learnMore\" | i18n }}.\n \n

\n\n

\n {{ \"warning\" | i18n }}: {{ \"emergencyAccessOwnerWarning\" | i18n }}\n

\n\n
\n

\n {{ \"trustedEmergencyContacts\" | i18n }}\n \n

\n
\n \n \n {{ \"addEmergencyContact\" | i18n }}\n \n
\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n \n {{ c.email }}\n {{ \"invited\" | i18n }}\n {{\n \"accepted\" | i18n\n }}\n {{ \"emergencyAccessRecoveryInitiated\" | i18n }}\n {{ \"emergencyAccessRecoveryApproved\" | i18n }}\n\n {{\n \"view\" | i18n\n }}\n {{\n \"takeover\" | i18n\n }}\n\n {{ c.name }}\n \n \n \n \n \n \n \n {{ \"resendInvitation\" | i18n }}\n \n \n \n {{ \"confirm\" | i18n }}\n \n \n \n {{ \"approve\" | i18n }}\n \n \n \n {{ \"reject\" | i18n }}\n \n \n \n
\n\n\n

{{ \"noTrustedContacts\" | i18n }}

\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n
\n

{{ \"designatedEmergencyContacts\" | i18n }}

\n
\n\n\n \n \n \n \n \n \n \n
\n \n \n \n {{ c.email }}\n {{ \"invited\" | i18n }}\n {{\n \"accepted\" | i18n\n }}\n {{ \"emergencyAccessRecoveryInitiated\" | i18n }}\n {{ \"emergencyAccessRecoveryApproved\" | i18n }}\n\n {{\n \"view\" | i18n\n }}\n {{\n \"takeover\" | i18n\n }}\n\n {{ c.name }}\n \n \n \n \n \n \n \n {{ \"requestAccess\" | i18n }}\n \n \n \n {{ \"takeover\" | i18n }}\n \n \n \n {{ \"view\" | i18n }}\n \n \n \n
\n\n\n

{{ \"noGrantedAccess\" | i18n }}

\n \n \n {{ \"loading\" | i18n }}\n \n
\n\n\n\n\n","import { Component } from \"@angular/core\";\n\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"../vault/add-edit.component\";\n\n@Component({\n selector: \"app-org-vault-add-edit\",\n templateUrl: \"../vault/add-edit.component.html\",\n})\nexport class EmergencyAddEditComponent extends BaseAddEditComponent {\n originalCipher: Cipher = null;\n viewOnly = true;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n totpService: TotpService,\n passwordGenerationService: PasswordGenerationService,\n messagingService: MessagingService,\n eventService: EventService,\n policyService: PolicyService,\n passwordRepromptService: PasswordRepromptService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n totpService,\n passwordGenerationService,\n messagingService,\n eventService,\n policyService,\n organizationService,\n logService,\n passwordRepromptService\n );\n }\n\n async load() {\n this.title = this.i18nService.t(\"viewItem\");\n }\n\n protected async loadCipher() {\n return Promise.resolve(this.originalCipher);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { PlanType } from \"jslib-common/enums/planType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { ProductType } from \"jslib-common/enums/productType\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { OrganizationCreateRequest } from \"jslib-common/models/request/organizationCreateRequest\";\nimport { OrganizationKeysRequest } from \"jslib-common/models/request/organizationKeysRequest\";\nimport { OrganizationUpgradeRequest } from \"jslib-common/models/request/organizationUpgradeRequest\";\nimport { ProviderOrganizationCreateRequest } from \"jslib-common/models/request/provider/providerOrganizationCreateRequest\";\nimport { PlanResponse } from \"jslib-common/models/response/planResponse\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-organization-plans\",\n templateUrl: \"organization-plans.component.html\",\n})\nexport class OrganizationPlansComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxComponent: TaxInfoComponent;\n\n @Input() organizationId: string;\n @Input() showFree = true;\n @Input() showCancel = false;\n @Input() acceptingSponsorship = false;\n @Input() product: ProductType = ProductType.Free;\n @Input() plan: PlanType = PlanType.Free;\n @Input() providerId: string;\n @Output() onSuccess = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n loading = true;\n selfHosted = false;\n ownedBusiness = false;\n premiumAccessAddon = false;\n additionalStorage = 0;\n additionalSeats = 0;\n name: string;\n billingEmail: string;\n clientOwnerEmail: string;\n businessName: string;\n productTypes = ProductType;\n formPromise: Promise;\n singleOrgPolicyBlock = false;\n discount = 0;\n\n plans: PlanResponse[];\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private router: Router,\n private syncService: SyncService,\n private policyService: PolicyService,\n private organizationService: OrganizationService,\n private logService: LogService,\n private messagingService: MessagingService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n if (!this.selfHosted) {\n const plans = await this.apiService.getPlans();\n this.plans = plans.data;\n if (this.product === ProductType.Enterprise || this.product === ProductType.Teams) {\n this.ownedBusiness = true;\n }\n }\n\n if (this.providerId) {\n this.ownedBusiness = true;\n this.changedOwnedBusiness();\n }\n\n this.loading = false;\n }\n\n get createOrganization() {\n return this.organizationId == null;\n }\n\n get selectedPlan() {\n return this.plans.find((plan) => plan.type === this.plan);\n }\n\n get selectedPlanInterval() {\n return this.selectedPlan.isAnnual ? \"year\" : \"month\";\n }\n\n get selectableProducts() {\n let validPlans = this.plans.filter((plan) => plan.type !== PlanType.Custom);\n\n if (this.ownedBusiness) {\n validPlans = validPlans.filter((plan) => plan.canBeUsedByBusiness);\n }\n\n if (!this.showFree) {\n validPlans = validPlans.filter((plan) => plan.product !== ProductType.Free);\n }\n\n validPlans = validPlans.filter(\n (plan) =>\n !plan.legacyYear &&\n !plan.disabled &&\n (plan.isAnnual || plan.product === this.productTypes.Free)\n );\n\n if (this.acceptingSponsorship) {\n const familyPlan = this.plans.find((plan) => plan.type === PlanType.FamiliesAnnually);\n this.discount = familyPlan.basePrice;\n validPlans = [familyPlan];\n }\n\n return validPlans;\n }\n\n get selectablePlans() {\n return this.plans.filter(\n (plan) => !plan.legacyYear && !plan.disabled && plan.product === this.product\n );\n }\n\n additionalStoragePriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.additionalStoragePricePerGb;\n }\n return selectedPlan.additionalStoragePricePerGb / 12;\n }\n\n seatPriceMonthly(selectedPlan: PlanResponse) {\n if (!selectedPlan.isAnnual) {\n return selectedPlan.seatPrice;\n }\n return selectedPlan.seatPrice / 12;\n }\n\n additionalStorageTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalStorageOption) {\n return 0;\n }\n\n return plan.additionalStoragePricePerGb * Math.abs(this.additionalStorage || 0);\n }\n\n seatTotal(plan: PlanResponse): number {\n if (!plan.hasAdditionalSeatsOption) {\n return 0;\n }\n\n return plan.seatPrice * Math.abs(this.additionalSeats || 0);\n }\n\n get subtotal() {\n let subTotal = this.selectedPlan.basePrice;\n if (this.selectedPlan.hasAdditionalSeatsOption && this.additionalSeats) {\n subTotal += this.seatTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasAdditionalStorageOption && this.additionalStorage) {\n subTotal += this.additionalStorageTotal(this.selectedPlan);\n }\n if (this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon) {\n subTotal += this.selectedPlan.premiumAccessOptionPrice;\n }\n return subTotal - this.discount;\n }\n\n get freeTrial() {\n return this.selectedPlan.trialPeriodDays != null;\n }\n\n get taxCharges() {\n return this.taxComponent != null && this.taxComponent.taxRate != null\n ? (this.taxComponent.taxRate / 100) * this.subtotal\n : 0;\n }\n\n get total() {\n return this.subtotal + this.taxCharges || 0;\n }\n\n get paymentDesc() {\n if (this.acceptingSponsorship) {\n return this.i18nService.t(\"paymentSponsored\");\n } else if (this.freeTrial && this.createOrganization) {\n return this.i18nService.t(\"paymentChargedWithTrial\");\n } else {\n return this.i18nService.t(\"paymentCharged\", this.i18nService.t(this.selectedPlanInterval));\n }\n }\n\n changedProduct() {\n this.plan = this.selectablePlans[0].type;\n if (!this.selectedPlan.hasPremiumAccessOption) {\n this.premiumAccessAddon = false;\n }\n if (!this.selectedPlan.hasAdditionalStorageOption) {\n this.additionalStorage = 0;\n }\n if (!this.selectedPlan.hasAdditionalSeatsOption) {\n this.additionalSeats = 0;\n } else if (\n !this.additionalSeats &&\n !this.selectedPlan.baseSeats &&\n this.selectedPlan.hasAdditionalSeatsOption\n ) {\n this.additionalSeats = 1;\n }\n }\n\n changedOwnedBusiness() {\n if (!this.ownedBusiness || this.selectedPlan.canBeUsedByBusiness) {\n return;\n }\n this.product = ProductType.Teams;\n this.plan = PlanType.TeamsAnnually;\n }\n\n changedCountry() {\n this.paymentComponent.hideBank = this.taxComponent.taxInfo.country !== \"US\";\n // Bank Account payments are only available for US customers\n if (\n this.paymentComponent.hideBank &&\n this.paymentComponent.method === PaymentMethodType.BankAccount\n ) {\n this.paymentComponent.method = PaymentMethodType.Card;\n this.paymentComponent.changeMethod();\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n\n async submit() {\n this.singleOrgPolicyBlock = await this.userHasBlockingSingleOrgPolicy();\n\n if (this.singleOrgPolicyBlock) {\n return;\n }\n\n try {\n const doSubmit = async (): Promise => {\n let orgId: string = null;\n if (this.createOrganization) {\n const shareKey = await this.cryptoService.makeShareKey();\n const key = shareKey[0].encryptedString;\n const collection = await this.cryptoService.encrypt(\n this.i18nService.t(\"defaultCollection\"),\n shareKey[1]\n );\n const collectionCt = collection.encryptedString;\n const orgKeys = await this.cryptoService.makeKeyPair(shareKey[1]);\n\n if (this.selfHosted) {\n orgId = await this.createSelfHosted(key, collectionCt, orgKeys);\n } else {\n orgId = await this.createCloudHosted(key, collectionCt, orgKeys, shareKey[1]);\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"organizationCreated\"),\n this.i18nService.t(\"organizationReadyToGo\")\n );\n } else {\n orgId = await this.updateOrganization(orgId);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"organizationUpgraded\")\n );\n }\n\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n if (!this.acceptingSponsorship) {\n this.router.navigate([\"/organizations/\" + orgId]);\n }\n\n return orgId;\n };\n\n this.formPromise = doSubmit();\n const organizationId = await this.formPromise;\n this.onSuccess.emit({ organizationId: organizationId });\n this.messagingService.send(\"organizationCreated\", organizationId);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async userHasBlockingSingleOrgPolicy() {\n return this.policyService.policyAppliesToUser(PolicyType.SingleOrg);\n }\n\n private async updateOrganization(orgId: string) {\n const request = new OrganizationUpgradeRequest();\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n\n // Retrieve org info to backfill pub/priv key if necessary\n const org = await this.organizationService.get(this.organizationId);\n if (!org.hasPublicAndPrivateKeys) {\n const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n }\n\n const result = await this.apiService.postOrganizationUpgrade(this.organizationId, request);\n if (!result.success && result.paymentIntentClientSecret != null) {\n await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n }\n return this.organizationId;\n }\n\n private async createCloudHosted(\n key: string,\n collectionCt: string,\n orgKeys: [string, EncString],\n orgKey: SymmetricCryptoKey\n ) {\n const request = new OrganizationCreateRequest();\n request.key = key;\n request.collectionName = collectionCt;\n request.name = this.name;\n request.billingEmail = this.billingEmail;\n request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n\n if (this.selectedPlan.type === PlanType.Free) {\n request.planType = PlanType.Free;\n } else {\n const tokenResult = await this.paymentComponent.createPaymentToken();\n\n request.paymentToken = tokenResult[0];\n request.paymentMethodType = tokenResult[1];\n request.businessName = this.ownedBusiness ? this.businessName : null;\n request.additionalSeats = this.additionalSeats;\n request.additionalStorageGb = this.additionalStorage;\n request.premiumAccessAddon =\n this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon;\n request.planType = this.selectedPlan.type;\n request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n request.billingAddressCountry = this.taxComponent.taxInfo.country;\n if (this.taxComponent.taxInfo.includeTaxId) {\n request.taxIdNumber = this.taxComponent.taxInfo.taxId;\n request.billingAddressLine1 = this.taxComponent.taxInfo.line1;\n request.billingAddressLine2 = this.taxComponent.taxInfo.line2;\n request.billingAddressCity = this.taxComponent.taxInfo.city;\n request.billingAddressState = this.taxComponent.taxInfo.state;\n }\n }\n\n if (this.providerId) {\n const providerRequest = new ProviderOrganizationCreateRequest(this.clientOwnerEmail, request);\n const providerKey = await this.cryptoService.getProviderKey(this.providerId);\n providerRequest.organizationCreateRequest.key = (\n await this.cryptoService.encrypt(orgKey.key, providerKey)\n ).encryptedString;\n const orgId = (\n await this.apiService.postProviderCreateOrganization(this.providerId, providerRequest)\n ).organizationId;\n\n return orgId;\n } else {\n return (await this.apiService.postOrganization(request)).id;\n }\n }\n\n private async createSelfHosted(key: string, collectionCt: string, orgKeys: [string, EncString]) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n throw new Error(this.i18nService.t(\"selectFile\"));\n }\n\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n fd.append(\"key\", key);\n fd.append(\"collectionName\", collectionCt);\n const response = await this.apiService.postOrganizationLicense(fd);\n const orgId = response.id;\n\n // Org Keys live outside of the OrganizationLicense - add the keys to the org here\n const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n await this.apiService.postOrganizationKeys(orgId, request);\n\n return orgId;\n }\n}\n","\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"uploadLicenseFileOrg\" | i18n }}

\n
\n
\n \n \n {{\n \"licenseFileDesc\" | i18n: \"bitwarden_organization_license.json\"\n }}\n
\n \n
\n
\n\n

{{ \"generalInformation\" | i18n }}

\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n {{ \"clientOwnerDesc\" | i18n: \"20\" }}\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n

{{ \"chooseYourPlan\" | i18n }}

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

{{ \"users\" | i18n }}

\n
\n
\n \n \n {{ \"userSeatsHowManyDesc\" | i18n }}\n
\n
\n
\n

{{ \"addons\" | i18n }}

\n
\n
\n \n \n {{\n \"userSeatsAdditionalDesc\"\n | i18n: selectedPlan.baseSeats:(seatPriceMonthly(selectedPlan) | currency: \"$\")\n }}\n
\n
\n
\n
\n \n \n {{\n \"additionalStorageIntervalDesc\"\n | i18n\n : \"1 GB\"\n : (additionalStoragePriceMonthly(selectedPlan) | currency: \"$\")\n : (\"month\" | i18n)\n }}\n
\n
\n
\n
\n
\n \n \n
\n {{\n \"premiumAccessDesc\" | i18n: (3.33 | currency: \"$\"):(\"month\" | i18n)\n }}\n
\n
\n

{{ \"summary\" | i18n }}

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

\n {{ (createOrganization ? \"paymentInformation\" : \"billingInformation\") | i18n }}\n

\n \n {{ paymentDesc }}\n \n \n \n
\n
\n {{ \"planPrice\" | i18n }}: {{ subtotal | currency: \"USD $\" }}\n
\n \n {{ \"estimatedTax\" | i18n }}: {{ taxCharges | currency: \"USD $\" }}\n \n
\n
\n

\n {{ \"total\" | i18n }}: {{ total | currency: \"USD $\" }}/{{\n selectedPlanInterval | i18n\n }}\n

\n
\n \n \n \n
\n
\n {{ \"singleOrgBlockCreateMessage\" | i18n }}\n
\n
\n \n \n
\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { BillingPaymentResponse } from \"jslib-common/models/response/billingPaymentResponse\";\n\n@Component({\n selector: \"app-payment-method\",\n templateUrl: \"payment-method.component.html\",\n})\nexport class PaymentMethodComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n showAdjustPayment = false;\n showAddCredit = false;\n billing: BillingPaymentResponse;\n paymentMethodType = PaymentMethodType;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\n }\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n this.billing = await this.apiService.getUserBillingPayment();\n this.loading = false;\n }\n\n addCredit() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"addCredit\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAddCredit = true;\n }\n\n closeAddCredit(load: boolean) {\n this.showAddCredit = false;\n if (load) {\n this.load();\n }\n }\n\n changePayment() {\n if (this.paymentSourceInApp) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(\"changePaymentMethod\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.showAdjustPayment = true;\n }\n\n closePayment(load: boolean) {\n this.showAdjustPayment = false;\n if (load) {\n this.load();\n }\n }\n\n get isCreditBalance() {\n return this.billing == null || this.billing.balance <= 0;\n }\n\n get creditOrBalance() {\n return Math.abs(this.billing != null ? this.billing.balance : 0);\n }\n\n get paymentSource() {\n return this.billing != null ? this.billing.paymentSource : null;\n }\n\n get paymentSourceInApp() {\n return (\n this.paymentSource != null &&\n (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n this.paymentSource.type === PaymentMethodType.GoogleInApp)\n );\n }\n}\n","
\n

\n {{ \"paymentMethod\" | i18n }}\n

\n \n \n {{ \"refresh\" | i18n }}\n \n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ (isCreditBalance ? \"accountCredit\" : \"accountBalance\") | i18n }}

\n

\n {{ creditOrBalance | currency: \"$\" }}\n

\n

{{ \"creditAppliedDesc\" | i18n }}

\n \n \n \n

{{ \"paymentMethod\" | i18n }}

\n

{{ \"noPaymentMethod\" | i18n }}

\n \n

\n \n {{ \"inAppPurchase\" | i18n }}\n {{ paymentSource.description }}\n

\n
\n \n \n \n
\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\n\nimport ThemeVariables from \"src/scss/export.module.scss\";\n\nconst lightInputColor = ThemeVariables.lightInputColor;\nconst lightInputPlaceholderColor = ThemeVariables.lightInputPlaceholderColor;\nconst darkInputColor = ThemeVariables.darkInputColor;\nconst darkInputPlaceholderColor = ThemeVariables.darkInputPlaceholderColor;\n\n@Component({\n selector: \"app-payment\",\n templateUrl: \"payment.component.html\",\n})\nexport class PaymentComponent implements OnInit {\n @Input() showMethods = true;\n @Input() showOptions = true;\n @Input() method = PaymentMethodType.Card;\n @Input() hideBank = false;\n @Input() hidePaypal = false;\n @Input() hideCredit = false;\n\n bank: any = {\n routing_number: null,\n account_number: null,\n account_holder_name: null,\n account_holder_type: \"\",\n currency: \"USD\",\n country: \"US\",\n };\n\n paymentMethodType = PaymentMethodType;\n\n private btScript: HTMLScriptElement;\n private btInstance: any = null;\n private stripeScript: HTMLScriptElement;\n private stripe: any = null;\n private stripeElements: any = null;\n private stripeCardNumberElement: any = null;\n private stripeCardExpiryElement: any = null;\n private stripeCardCvcElement: any = null;\n private StripeElementStyle: any;\n private StripeElementClasses: any;\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private apiService: ApiService,\n private logService: LogService\n ) {\n this.stripeScript = window.document.createElement(\"script\");\n this.stripeScript.src = \"https://js.stripe.com/v3/\";\n this.stripeScript.async = true;\n this.stripeScript.onload = () => {\n this.stripe = (window as any).Stripe(process.env.STRIPE_KEY);\n this.stripeElements = this.stripe.elements();\n this.setStripeElement();\n };\n this.btScript = window.document.createElement(\"script\");\n this.btScript.src = `scripts/dropin.js?cache=${process.env.CACHE_TAG}`;\n this.btScript.async = true;\n this.StripeElementStyle = {\n base: {\n color: null,\n fontFamily:\n '\"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif, ' +\n '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n fontSize: \"14px\",\n fontSmoothing: \"antialiased\",\n \"::placeholder\": {\n color: null,\n },\n },\n invalid: {\n color: null,\n },\n };\n this.StripeElementClasses = {\n focus: \"is-focused\",\n empty: \"is-empty\",\n invalid: \"is-invalid\",\n };\n }\n\n async ngOnInit() {\n if (!this.showOptions) {\n this.hidePaypal = this.method !== PaymentMethodType.PayPal;\n this.hideBank = this.method !== PaymentMethodType.BankAccount;\n this.hideCredit = this.method !== PaymentMethodType.Credit;\n }\n await this.setTheme();\n window.document.head.appendChild(this.stripeScript);\n if (!this.hidePaypal) {\n window.document.head.appendChild(this.btScript);\n }\n }\n\n ngOnDestroy() {\n window.document.head.removeChild(this.stripeScript);\n window.setTimeout(() => {\n Array.from(window.document.querySelectorAll(\"iframe\")).forEach((el) => {\n if (el.src != null && el.src.indexOf(\"stripe\") > -1) {\n try {\n window.document.body.removeChild(el);\n } catch (e) {\n this.logService.error(e);\n }\n }\n });\n }, 500);\n if (!this.hidePaypal) {\n window.document.head.removeChild(this.btScript);\n window.setTimeout(() => {\n Array.from(window.document.head.querySelectorAll(\"script\")).forEach((el) => {\n if (el.src != null && el.src.indexOf(\"paypal\") > -1) {\n try {\n window.document.head.removeChild(el);\n } catch (e) {\n this.logService.error(e);\n }\n }\n });\n const btStylesheet = window.document.head.querySelector(\"#braintree-dropin-stylesheet\");\n if (btStylesheet != null) {\n try {\n window.document.head.removeChild(btStylesheet);\n } catch (e) {\n this.logService.error(e);\n }\n }\n }, 500);\n }\n }\n\n changeMethod() {\n this.btInstance = null;\n\n if (this.method === PaymentMethodType.PayPal) {\n window.setTimeout(() => {\n (window as any).braintree.dropin.create(\n {\n authorization: process.env.BRAINTREE_KEY,\n container: \"#bt-dropin-container\",\n paymentOptionPriority: [\"paypal\"],\n paypal: {\n flow: \"vault\",\n buttonStyle: {\n label: \"pay\",\n size: \"medium\",\n shape: \"pill\",\n color: \"blue\",\n tagline: \"false\",\n },\n },\n },\n (createErr: any, instance: any) => {\n if (createErr != null) {\n // eslint-disable-next-line\n console.error(createErr);\n return;\n }\n this.btInstance = instance;\n }\n );\n }, 250);\n } else {\n this.setStripeElement();\n }\n }\n\n createPaymentToken(): Promise<[string, PaymentMethodType]> {\n return new Promise((resolve, reject) => {\n if (this.method === PaymentMethodType.Credit) {\n resolve([null, this.method]);\n } else if (this.method === PaymentMethodType.PayPal) {\n this.btInstance\n .requestPaymentMethod()\n .then((payload: any) => {\n resolve([payload.nonce, this.method]);\n })\n .catch((err: any) => {\n reject(err.message);\n });\n } else if (\n this.method === PaymentMethodType.Card ||\n this.method === PaymentMethodType.BankAccount\n ) {\n if (this.method === PaymentMethodType.Card) {\n this.apiService\n .postSetupPayment()\n .then((clientSecret) =>\n this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement)\n )\n .then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.setupIntent && result.setupIntent.status === \"succeeded\") {\n resolve([result.setupIntent.payment_method, this.method]);\n } else {\n reject();\n }\n });\n } else {\n this.stripe.createToken(\"bank_account\", this.bank).then((result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.token && result.token.id != null) {\n resolve([result.token.id, this.method]);\n } else {\n reject();\n }\n });\n }\n }\n });\n }\n\n handleStripeCardPayment(clientSecret: string, successCallback: () => Promise): Promise {\n return new Promise((resolve, reject) => {\n if (this.showMethods && this.stripeCardNumberElement == null) {\n reject();\n return;\n }\n const handleCardPayment = () =>\n this.showMethods\n ? this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement)\n : this.stripe.handleCardSetup(clientSecret);\n return handleCardPayment().then(async (result: any) => {\n if (result.error) {\n reject(result.error.message);\n } else if (result.paymentIntent && result.paymentIntent.status === \"succeeded\") {\n if (successCallback != null) {\n await successCallback();\n }\n resolve();\n } else {\n reject();\n }\n });\n });\n }\n\n private setStripeElement() {\n window.setTimeout(() => {\n if (this.showMethods && this.method === PaymentMethodType.Card) {\n if (this.stripeCardNumberElement == null) {\n this.stripeCardNumberElement = this.stripeElements.create(\"cardNumber\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n placeholder: \"\",\n });\n }\n if (this.stripeCardExpiryElement == null) {\n this.stripeCardExpiryElement = this.stripeElements.create(\"cardExpiry\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n });\n }\n if (this.stripeCardCvcElement == null) {\n this.stripeCardCvcElement = this.stripeElements.create(\"cardCvc\", {\n style: this.StripeElementStyle,\n classes: this.StripeElementClasses,\n placeholder: \"\",\n });\n }\n this.stripeCardNumberElement.mount(\"#stripe-card-number-element\");\n this.stripeCardExpiryElement.mount(\"#stripe-card-expiry-element\");\n this.stripeCardCvcElement.mount(\"#stripe-card-cvc-element\");\n }\n }, 50);\n }\n\n private async setTheme() {\n const theme = await this.platformUtilsService.getEffectiveTheme();\n if (theme === ThemeType.Dark) {\n this.StripeElementStyle.base.color = darkInputColor;\n this.StripeElementStyle.base[\"::placeholder\"].color = darkInputPlaceholderColor;\n this.StripeElementStyle.invalid.color = darkInputColor;\n } else {\n this.StripeElementStyle.base.color = lightInputColor;\n this.StripeElementStyle.base[\"::placeholder\"].color = lightInputPlaceholderColor;\n this.StripeElementStyle.invalid.color = lightInputColor;\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 \n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n\n \n {{ \"verifyBankAccountInitialDesc\" | i18n }} {{ \"verifyBankAccountFailureWarning\" | i18n }}\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 {{ \"paypalClickSubmit\" | i18n }}\n
\n
\n\n \n {{ \"makeSureEnoughCredit\" | i18n }}\n \n\n","import { Component, OnInit } from \"@angular/core\";\nimport { FormControl } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"app-preferences\",\n templateUrl: \"preferences.component.html\",\n})\nexport class PreferencesComponent implements OnInit {\n vaultTimeoutAction = \"lock\";\n disableIcons: boolean;\n enableGravatars: boolean;\n enableFullWidth: boolean;\n theme: ThemeType;\n locale: string;\n vaultTimeouts: { name: string; value: number }[];\n localeOptions: any[];\n themeOptions: any[];\n\n vaultTimeout: FormControl = new FormControl(null);\n\n private startingLocale: string;\n private startingTheme: ThemeType;\n\n constructor(\n private stateService: StateService,\n private i18nService: I18nService,\n private vaultTimeoutService: VaultTimeoutService,\n private platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService\n ) {\n this.vaultTimeouts = [\n { name: i18nService.t(\"oneMinute\"), value: 1 },\n { name: i18nService.t(\"fiveMinutes\"), value: 5 },\n { name: i18nService.t(\"fifteenMinutes\"), value: 15 },\n { name: i18nService.t(\"thirtyMinutes\"), value: 30 },\n { name: i18nService.t(\"oneHour\"), value: 60 },\n { name: i18nService.t(\"fourHours\"), value: 240 },\n { name: i18nService.t(\"onRefresh\"), value: -1 },\n ];\n if (this.platformUtilsService.isDev()) {\n this.vaultTimeouts.push({ name: i18nService.t(\"never\"), value: null });\n }\n\n const localeOptions: any[] = [];\n i18nService.supportedTranslationLocales.forEach((locale) => {\n let name = locale;\n if (i18nService.localeNames.has(locale)) {\n name += \" - \" + i18nService.localeNames.get(locale);\n }\n localeOptions.push({ name: name, value: locale });\n });\n localeOptions.sort(Utils.getSortFunction(i18nService, \"name\"));\n localeOptions.splice(0, 0, { name: i18nService.t(\"default\"), value: null });\n this.localeOptions = localeOptions;\n this.themeOptions = [\n { name: i18nService.t(\"themeLight\"), value: ThemeType.Light },\n { name: i18nService.t(\"themeDark\"), value: ThemeType.Dark },\n { name: i18nService.t(\"themeSystem\"), value: ThemeType.System },\n ];\n }\n\n async ngOnInit() {\n this.vaultTimeout.setValue(await this.vaultTimeoutService.getVaultTimeout());\n this.vaultTimeoutAction = await this.stateService.getVaultTimeoutAction();\n this.disableIcons = await this.stateService.getDisableFavicon();\n this.enableGravatars = await this.stateService.getEnableGravitars();\n this.enableFullWidth = await this.stateService.getEnableFullWidth();\n\n this.locale = (await this.stateService.getLocale()) ?? null;\n this.startingLocale = this.locale;\n\n this.theme = await this.stateService.getTheme();\n this.startingTheme = this.theme;\n }\n\n async submit() {\n if (!this.vaultTimeout.valid) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"vaultTimeoutRangeError\")\n );\n return;\n }\n\n await this.vaultTimeoutService.setVaultTimeoutOptions(\n this.vaultTimeout.value,\n this.vaultTimeoutAction\n );\n await this.stateService.setDisableFavicon(this.disableIcons);\n await this.stateService.setEnableGravitars(this.enableGravatars);\n await this.stateService.setEnableFullWidth(this.enableFullWidth);\n this.messagingService.send(\"setFullWidth\");\n if (this.theme !== this.startingTheme) {\n await this.stateService.setTheme(this.theme);\n this.startingTheme = this.theme;\n const effectiveTheme = await this.platformUtilsService.getEffectiveTheme();\n const htmlEl = window.document.documentElement;\n htmlEl.classList.remove(\"theme_\" + ThemeType.Light, \"theme_\" + ThemeType.Dark);\n htmlEl.classList.add(\"theme_\" + effectiveTheme);\n }\n await this.stateService.setLocale(this.locale);\n if (this.locale !== this.startingLocale) {\n window.location.reload();\n } else {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"preferencesUpdated\")\n );\n }\n }\n\n async vaultTimeoutActionChanged(newValue: string) {\n if (newValue === \"logOut\") {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"vaultTimeoutLogOutConfirmation\"),\n this.i18nService.t(\"vaultTimeoutLogOutConfirmationTitle\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (!confirmed) {\n this.vaultTimeoutAction = \"lock\";\n return;\n }\n }\n this.vaultTimeoutAction = newValue;\n }\n}\n","
\n

{{ \"preferences\" | i18n }}

\n
\n

{{ \"preferencesDesc\" | i18n }}

\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 \n {{ \"languageDesc\" | i18n }}\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n {{ \"disableIconsDesc\" | i18n }}\n
\n
\n
\n \n \n \n \n \n
\n {{ \"enableGravatarsDesc\" | i18n }}\n
\n
\n
\n \n \n
\n {{ \"enableFullWidthDesc\" | i18n }}\n
\n
\n
\n
\n \n \n {{ \"themeDesc\" | i18n }}\n
\n
\n
\n \n
\n","import { Component, OnInit, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\n\nimport { PaymentComponent } from \"./payment.component\";\nimport { TaxInfoComponent } from \"./tax-info.component\";\n\n@Component({\n selector: \"app-premium\",\n templateUrl: \"premium.component.html\",\n})\nexport class PremiumComponent implements OnInit {\n @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n @ViewChild(TaxInfoComponent) taxInfoComponent: TaxInfoComponent;\n\n canAccessPremium = false;\n selfHosted = false;\n premiumPrice = 10;\n storageGbPrice = 4;\n additionalStorage = 0;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private tokenService: TokenService,\n private router: Router,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private logService: LogService,\n private stateService: StateService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n const premiumPersonally = await this.stateService.getHasPremiumPersonally();\n if (premiumPersonally) {\n this.router.navigate([\"/settings/subscription/user-subscription\"]);\n return;\n }\n }\n\n async submit() {\n let files: FileList = null;\n if (this.selfHosted) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n }\n\n try {\n if (this.selfHosted) {\n if (!this.tokenService.getEmailVerified()) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verifyEmailFirst\")\n );\n return;\n }\n\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n this.formPromise = this.apiService.postAccountLicense(fd).then(() => {\n return this.finalizePremium();\n });\n } else {\n this.formPromise = this.paymentComponent\n .createPaymentToken()\n .then((result) => {\n const fd = new FormData();\n fd.append(\"paymentMethodType\", result[1].toString());\n if (result[0] != null) {\n fd.append(\"paymentToken\", result[0]);\n }\n fd.append(\"additionalStorageGb\", (this.additionalStorage || 0).toString());\n fd.append(\"country\", this.taxInfoComponent.taxInfo.country);\n fd.append(\"postalCode\", this.taxInfoComponent.taxInfo.postalCode);\n return this.apiService.postPremium(fd);\n })\n .then((paymentResponse) => {\n if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {\n return this.paymentComponent.handleStripeCardPayment(\n paymentResponse.paymentIntentClientSecret,\n () => this.finalizePremium()\n );\n } else {\n return this.finalizePremium();\n }\n });\n }\n await this.formPromise;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async finalizePremium() {\n await this.apiService.refreshIdentityToken();\n await this.syncService.fullSync(true);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"premiumUpdated\"));\n this.messagingService.send(\"purchasedPremium\");\n this.router.navigate([\"/settings/subscription/user-subscription\"]);\n }\n\n get additionalStorageTotal(): number {\n return this.storageGbPrice * Math.abs(this.additionalStorage || 0);\n }\n\n get subtotal(): number {\n return this.premiumPrice + this.additionalStorageTotal;\n }\n\n get taxCharges(): number {\n return this.taxInfoComponent != null && this.taxInfoComponent.taxRate != null\n ? (this.taxInfoComponent.taxRate / 100) * this.subtotal\n : 0;\n }\n\n get total(): number {\n return this.subtotal + this.taxCharges || 0;\n }\n}\n","
\n

{{ \"subscription\" | i18n }}

\n
\n
\n

{{ \"goPremium\" | i18n }}

\n
\n\n {{ \"alreadyPremiumFromOrg\" | i18n }}\n\n\n

{{ \"premiumUpgradeUnlockFeatures\" | i18n }}

\n
    \n
  • \n \n {{ \"premiumSignUpStorage\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpTwoStep\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpEmergency\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpReports\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpTotp\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpSupport\" | i18n }}\n
  • \n
  • \n \n {{ \"premiumSignUpFuture\" | i18n }}\n
  • \n
\n

\n {{ \"premiumPrice\" | i18n: (premiumPrice | currency: \"$\") }}\n

\n \n {{ \"purchasePremium\" | i18n }}\n \n
\n\n

{{ \"uploadLicenseFilePremium\" | i18n }}

\n
\n
\n \n \n {{\n \"licenseFileDesc\" | i18n: \"bitwarden_premium_license.json\"\n }}\n
\n \n \n {{ \"submit\" | i18n }}\n \n \n
\n
\n

{{ \"addons\" | i18n }}

\n
\n
\n \n \n {{\n \"additionalStorageIntervalDesc\"\n | i18n: \"1 GB\":(storageGbPrice | currency: \"$\"):(\"year\" | i18n)\n }}\n
\n
\n

{{ \"summary\" | i18n }}

\n {{ \"premiumMembership\" | i18n }}: {{ premiumPrice | currency: \"$\" }}
\n {{ \"additionalStorageGb\" | i18n }}: {{ additionalStorage || 0 }} GB ×\n {{ storageGbPrice | currency: \"$\" }} =\n {{ additionalStorageTotal | currency: \"$\" }}\n
\n

{{ \"paymentInformation\" | i18n }}

\n \n \n
\n
\n {{ \"planPrice\" | i18n }}: {{ subtotal | currency: \"USD $\" }}\n
\n \n {{ \"estimatedTax\" | i18n }}: {{ taxCharges | currency: \"USD $\" }}\n \n
\n
\n

\n {{ \"total\" | i18n }}: {{ total | currency: \"USD $\" }}/{{ \"year\" | i18n }}\n

\n
\n {{ \"paymentChargedAnnually\" | i18n }}\n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UpdateProfileRequest } from \"jslib-common/models/request/updateProfileRequest\";\nimport { ProfileResponse } from \"jslib-common/models/response/profileResponse\";\n\n@Component({\n selector: \"app-profile\",\n templateUrl: \"profile.component.html\",\n})\nexport class ProfileComponent implements OnInit {\n loading = true;\n profile: ProfileResponse;\n fingerprint: string;\n hidePasswordHint = false;\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.profile = await this.apiService.getProfile();\n this.loading = false;\n const fingerprint = await this.cryptoService.getFingerprint(\n await this.stateService.getUserId()\n );\n if (fingerprint != null) {\n this.fingerprint = fingerprint.join(\"-\");\n }\n this.hidePasswordHint = await this.keyConnectorService.getUsesKeyConnector();\n }\n\n async submit() {\n try {\n const request = new UpdateProfileRequest(this.profile.name, this.profile.masterPasswordHint);\n this.formPromise = this.apiService.putProfile(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"accountUpdated\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n \n {{ \"loading\" | i18n }}\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 {{ \"yourAccountsFingerprint\" | i18n }}:\n \n
\n {{ fingerprint }}\n

\n
\n
\n \n\n","import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n@Component({\n selector: \"app-purge-vault\",\n templateUrl: \"purge-vault.component.html\",\n})\nexport class PurgeVaultComponent {\n @Input() organizationId?: string = null;\n\n masterPassword: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private userVerificationService: UserVerificationService,\n private router: Router,\n private logService: LogService\n ) {}\n\n async submit() {\n try {\n this.formPromise = this.userVerificationService\n .buildRequest(this.masterPassword)\n .then((request) => this.apiService.postPurgeCiphers(request, this.organizationId));\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"vaultPurged\"));\n if (this.organizationId != null) {\n this.router.navigate([\"organizations\", this.organizationId, \"vault\"]);\n } else {\n this.router.navigate([\"vault\"]);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","
\n
\n \n
\n

{{ \"purgeVault\" | i18n }}

\n \n ×\n \n
\n
\n

{{ (organizationId ? \"purgeOrgVaultDesc\" : \"purgeVaultDesc\") | i18n }}

\n {{ \"purgeVaultWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, OnInit, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\nimport { ApiKeyComponent } from \"./api-key.component\";\n\n@Component({\n selector: \"app-security-keys\",\n templateUrl: \"security-keys.component.html\",\n})\nexport class SecurityKeysComponent implements OnInit {\n @ViewChild(\"viewUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n viewUserApiKeyModalRef: ViewContainerRef;\n @ViewChild(\"rotateUserApiKeyTemplate\", { read: ViewContainerRef, static: true })\n rotateUserApiKeyModalRef: ViewContainerRef;\n\n showChangeKdf = true;\n\n constructor(\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private modalService: ModalService,\n private apiService: ApiService\n ) {}\n\n async ngOnInit() {\n this.showChangeKdf = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n\n async viewUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.viewUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"userApiKeyDesc\";\n });\n }\n\n async rotateUserApiKey() {\n const entityId = await this.stateService.getUserId();\n await this.modalService.openViewRef(ApiKeyComponent, this.rotateUserApiKeyModalRef, (comp) => {\n comp.keyType = \"user\";\n comp.isRotation = true;\n comp.entityId = entityId;\n comp.postKey = this.apiService.postUserRotateApiKey.bind(this.apiService);\n comp.scope = \"api\";\n comp.grantType = \"client_credentials\";\n comp.apiKeyTitle = \"apiKey\";\n comp.apiKeyWarning = \"userApiKeyWarning\";\n comp.apiKeyDescription = \"apiKeyRotateDesc\";\n });\n }\n}\n","\n\n

{{ \"apiKey\" | i18n }}

\n\n

\n {{ \"userApiKeyDesc\" | i18n }}\n

\n\n\n\n\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { ChangePasswordComponent } from \"./change-password.component\";\nimport { SecurityKeysComponent } from \"./security-keys.component\";\nimport { SecurityComponent } from \"./security.component\";\nimport { TwoFactorSetupComponent } from \"./two-factor-setup.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SecurityComponent,\n data: { titleId: \"security\" },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"change-password\" },\n {\n path: \"change-password\",\n component: ChangePasswordComponent,\n data: { titleId: \"masterPassword\" },\n },\n {\n path: \"two-factor\",\n component: TwoFactorSetupComponent,\n data: { titleId: \"twoStepLogin\" },\n },\n {\n path: \"security-keys\",\n component: SecurityKeysComponent,\n data: { titleId: \"keys\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class SecurityRoutingModule {}\n","import { Component } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\n\n@Component({\n selector: \"app-security\",\n templateUrl: \"security.component.html\",\n})\nexport class SecurityComponent {\n showChangePassword = true;\n\n constructor(private keyConnectorService: KeyConnectorService) {}\n\n async ngOnInit() {\n this.showChangePassword = !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","\n\n","import { Component, NgZone, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\n\nimport { StateService } from \"../../abstractions/state.service\";\n\nconst BroadcasterSubscriptionId = \"SettingsComponent\";\n\n@Component({\n selector: \"app-settings\",\n templateUrl: \"settings.component.html\",\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n premium: boolean;\n selfHosted: boolean;\n hasFamilySponsorshipAvailable: boolean;\n hideSubscription: boolean;\n\n constructor(\n private tokenService: TokenService,\n private broadcasterService: BroadcasterService,\n private ngZone: NgZone,\n private platformUtilsService: PlatformUtilsService,\n private organizationService: OrganizationService,\n private stateService: StateService,\n private apiService: ApiService\n ) {}\n\n async ngOnInit() {\n this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n this.ngZone.run(async () => {\n switch (message.command) {\n case \"purchasedPremium\":\n await this.load();\n break;\n default:\n }\n });\n });\n\n this.selfHosted = await this.platformUtilsService.isSelfHost();\n await this.load();\n }\n\n ngOnDestroy() {\n this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n }\n\n async load() {\n this.premium = await this.stateService.getHasPremiumPersonally();\n this.hasFamilySponsorshipAvailable = await this.organizationService.canManageSponsorships();\n const hasPremiumFromOrg = await this.stateService.getHasPremiumFromOrganization();\n let billing = null;\n this.hideSubscription = true;\n }\n}\n","
\n
\n
\n
\n
{{ \"accountSettings\" | i18n }}
\n \n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\n\nimport { notAllowedValueAsync } from \"jslib-angular/validators/notAllowedValueAsync.validator\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { PlanSponsorshipType } from \"jslib-common/enums/planSponsorshipType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"app-sponsored-families\",\n templateUrl: \"sponsored-families.component.html\",\n})\nexport class SponsoredFamiliesComponent implements OnInit {\n loading = false;\n\n availableSponsorshipOrgs: Organization[] = [];\n activeSponsorshipOrgs: Organization[] = [];\n\n // Conditional display properties\n formPromise: Promise;\n\n sponsorshipForm: FormGroup;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private syncService: SyncService,\n private organizationService: OrganizationService,\n private formBuilder: FormBuilder,\n private stateService: StateService\n ) {\n this.sponsorshipForm = this.formBuilder.group({\n selectedSponsorshipOrgId: [\n \"\",\n {\n validators: [Validators.required],\n },\n ],\n sponsorshipEmail: [\n \"\",\n {\n validators: [Validators.email],\n asyncValidators: [\n notAllowedValueAsync(async () => await this.stateService.getEmail(), true),\n ],\n updateOn: \"blur\",\n },\n ],\n });\n }\n\n async ngOnInit() {\n await this.load();\n }\n\n async submit() {\n this.formPromise = this.apiService.postCreateSponsorship(\n this.sponsorshipForm.value.selectedSponsorshipOrgId,\n {\n sponsoredEmail: this.sponsorshipForm.value.sponsorshipEmail,\n planSponsorshipType: PlanSponsorshipType.FamiliesForEnterprise,\n friendlyName: this.sponsorshipForm.value.sponsorshipEmail,\n }\n );\n\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"sponsorshipCreated\"));\n this.formPromise = null;\n this.resetForm();\n await this.load(true);\n }\n\n async load(forceReload = false) {\n if (this.loading) {\n return;\n }\n\n this.loading = true;\n if (forceReload) {\n await this.syncService.fullSync(true);\n }\n\n const allOrgs = await this.organizationService.getAll();\n this.availableSponsorshipOrgs = allOrgs.filter((org) => org.familySponsorshipAvailable);\n\n this.activeSponsorshipOrgs = allOrgs.filter(\n (org) => org.familySponsorshipFriendlyName !== null\n );\n\n if (this.availableSponsorshipOrgs.length === 1) {\n this.sponsorshipForm.patchValue({\n selectedSponsorshipOrgId: this.availableSponsorshipOrgs[0].id,\n });\n }\n this.loading = false;\n }\n\n get sponsorshipEmailControl() {\n return this.sponsorshipForm.controls[\"sponsorshipEmail\"];\n }\n\n private async resetForm() {\n this.sponsorshipForm.reset();\n }\n\n get anyActiveSponsorships(): boolean {\n return this.activeSponsorshipOrgs.length > 0;\n }\n\n get anyOrgsAvailable(): boolean {\n return this.availableSponsorshipOrgs.length > 0;\n }\n\n get isSelfHosted(): boolean {\n return this.platformUtilsService.isSelfHost();\n }\n}\n","
\n

{{ \"sponsoredFamilies\" | i18n }}

\n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

\n {{ \"sponsoredFamiliesEligible\" | i18n }}\n

\n
\n {{ \"sponsoredFamiliesInclude\" | i18n }}:\n
    \n
  • {{ \"sponsoredFamiliesPremiumAccess\" | i18n }}
  • \n
  • {{ \"sponsoredFamiliesSharedCollections\" | i18n }}
  • \n
\n
\n \n
\n \n \n \n \n \n
\n
\n \n \n \n \n {{ \"cannotSponsorSelf\" | i18n }}\n \n \n \n {{ \"invalidEmail\" | i18n }}\n \n
\n
\n \n
\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ \"recipient\" | i18n }}{{ \"sponsoringOrg\" | i18n }}{{ \"status\" | i18n }}
\n
\n {{ \"sponsoredFamiliesLeaveCopy\" | i18n }}\n
\n\n","import { formatDate } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Component({\n selector: \"[sponsoring-org-row]\",\n templateUrl: \"sponsoring-org-row.component.html\",\n})\nexport class SponsoringOrgRowComponent implements OnInit {\n @Input() sponsoringOrg: Organization = null;\n @Input() isSelfHosted = false;\n\n @Output() sponsorshipRemoved = new EventEmitter();\n\n statusMessage = \"loading\";\n statusClass: \"text-success\" | \"text-danger\" = \"text-success\";\n\n revokeSponsorshipPromise: Promise;\n resendEmailPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private logService: LogService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n ngOnInit(): void {\n this.setStatus(\n this.isSelfHosted,\n this.sponsoringOrg.familySponsorshipToDelete,\n this.sponsoringOrg.familySponsorshipValidUntil,\n this.sponsoringOrg.familySponsorshipLastSyncDate\n );\n }\n\n async revokeSponsorship() {\n try {\n this.revokeSponsorshipPromise = this.doRevokeSponsorship();\n await this.revokeSponsorshipPromise;\n } catch (e) {\n this.logService.error(e);\n }\n\n this.revokeSponsorshipPromise = null;\n }\n\n async resendEmail() {\n this.resendEmailPromise = this.apiService.postResendSponsorshipOffer(this.sponsoringOrg.id);\n await this.resendEmailPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"emailSent\"));\n this.resendEmailPromise = null;\n }\n\n get isSentAwaitingSync() {\n return this.isSelfHosted && !this.sponsoringOrg.familySponsorshipLastSyncDate;\n }\n\n private async doRevokeSponsorship() {\n const isConfirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"revokeSponsorshipConfirmation\"),\n `${this.i18nService.t(\"remove\")} ${this.sponsoringOrg.familySponsorshipFriendlyName}?`,\n this.i18nService.t(\"remove\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n\n if (!isConfirmed) {\n return;\n }\n\n await this.apiService.deleteRevokeSponsorship(this.sponsoringOrg.id);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reclaimedFreePlan\"));\n this.sponsorshipRemoved.emit();\n }\n\n private setStatus(\n selfHosted: boolean,\n toDelete?: boolean,\n validUntil?: Date,\n lastSyncDate?: Date\n ) {\n /*\n * Possible Statuses:\n * Requested (self-hosted only)\n * Sent\n * Active\n * RequestRevoke\n * RevokeWhenExpired\n */\n\n if (toDelete && validUntil) {\n // They want to delete but there is a valid until date which means there is an active sponsorship\n this.statusMessage = this.i18nService.t(\n \"revokeWhenExpired\",\n formatDate(validUntil, \"MM/dd/yyyy\", this.i18nService.locale)\n );\n this.statusClass = \"text-danger\";\n } else if (toDelete) {\n // They want to delete and we don't have a valid until date so we can\n // this should only happen on a self-hosted install\n this.statusMessage = this.i18nService.t(\"requestRemoved\");\n this.statusClass = \"text-danger\";\n } else if (validUntil) {\n // They don't want to delete and they have a valid until date\n // that means they are actively sponsoring someone\n this.statusMessage = this.i18nService.t(\"active\");\n this.statusClass = \"text-success\";\n } else if (selfHosted && lastSyncDate) {\n // We are on a self-hosted install and it has been synced but we have not gotten\n // a valid until date so we can't know if they are actively sponsoring someone\n this.statusMessage = this.i18nService.t(\"sent\");\n this.statusClass = \"text-success\";\n } else if (!selfHosted) {\n // We are in cloud and all other status checks have been false therefore we have\n // sent the request but it hasn't been accepted yet\n this.statusMessage = this.i18nService.t(\"sent\");\n this.statusClass = \"text-success\";\n } else {\n // We are on a self-hosted install and we have not synced yet\n this.statusMessage = this.i18nService.t(\"requested\");\n this.statusClass = \"text-success\";\n }\n }\n}\n","\n {{ sponsoringOrg.familySponsorshipFriendlyName }}\n\n{{ sponsoringOrg.name }}\n\n {{ statusMessage }}\n\n\n
\n \n \n \n
\n \n \n {{ \"resendEmail\" | i18n }}\n \n \n \n {{ \"remove\" | i18n }}\n \n
\n
\n\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nimport { PaymentMethodComponent } from \"./payment-method.component\";\nimport { PremiumComponent } from \"./premium.component\";\nimport { SubscriptionComponent } from \"./subscription.component\";\nimport { UserBillingHistoryComponent } from \"./user-billing-history.component\";\nimport { UserSubscriptionComponent } from \"./user-subscription.component\";\n\nconst routes: Routes = [\n {\n path: \"\",\n component: SubscriptionComponent,\n data: { titleId: \"subscription\" },\n children: [\n { path: \"\", pathMatch: \"full\", redirectTo: \"premium\" },\n {\n path: \"user-subscription\",\n component: UserSubscriptionComponent,\n data: { titleId: \"premiumMembership\" },\n },\n {\n path: \"premium\",\n component: PremiumComponent,\n data: { titleId: \"goPremium\" },\n },\n {\n path: \"payment-method\",\n component: PaymentMethodComponent,\n data: { titleId: \"paymentMethod\" },\n },\n {\n path: \"billing-history\",\n component: UserBillingHistoryComponent,\n data: { titleId: \"billingHistory\" },\n },\n ],\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class SubscriptionRoutingModule {}\n","import { Component } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-subscription\",\n templateUrl: \"subscription.component.html\",\n})\nexport class SubscriptionComponent {\n hasPremium: boolean;\n selfHosted: boolean;\n\n constructor(\n private stateService: StateService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n async ngOnInit() {\n this.hasPremium = await this.stateService.getHasPremiumPersonally();\n this.selfHosted = this.platformUtilsService.isSelfHost();\n }\n\n get subscriptionRoute(): string {\n return this.hasPremium ? \"user-subscription\" : \"premium\";\n }\n}\n","\n\n","import { Component, EventEmitter, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationTaxInfoUpdateRequest } from \"jslib-common/models/request/organizationTaxInfoUpdateRequest\";\nimport { TaxInfoUpdateRequest } from \"jslib-common/models/request/taxInfoUpdateRequest\";\nimport { TaxRateResponse } from \"jslib-common/models/response/taxRateResponse\";\n\n@Component({\n selector: \"app-tax-info\",\n templateUrl: \"tax-info.component.html\",\n})\nexport class TaxInfoComponent {\n @Output() onCountryChanged = new EventEmitter();\n\n loading = true;\n organizationId: string;\n taxInfo: any = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n taxRates: TaxRateResponse[];\n\n private pristine: any = {\n taxId: null,\n line1: null,\n line2: null,\n city: null,\n state: null,\n postalCode: null,\n country: \"US\",\n includeTaxId: false,\n };\n\n constructor(\n private apiService: ApiService,\n private route: ActivatedRoute,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.route.parent.parent.params.subscribe(async (params) => {\n this.organizationId = params.organizationId;\n if (this.organizationId) {\n try {\n const taxInfo = await this.apiService.getOrganizationTaxInfo(this.organizationId);\n if (taxInfo) {\n this.taxInfo.taxId = taxInfo.taxId;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.line1 = taxInfo.line1;\n this.taxInfo.line2 = taxInfo.line2;\n this.taxInfo.city = taxInfo.city;\n this.taxInfo.state = taxInfo.state;\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n this.taxInfo.includeTaxId =\n this.taxInfo.country !== \"US\" &&\n (!!taxInfo.taxId ||\n !!taxInfo.line1 ||\n !!taxInfo.line2 ||\n !!taxInfo.city ||\n !!taxInfo.state);\n }\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n try {\n const taxInfo = await this.apiService.getTaxInfo();\n if (taxInfo) {\n this.taxInfo.postalCode = taxInfo.postalCode;\n this.taxInfo.country = taxInfo.country || \"US\";\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n this.pristine = Object.assign({}, this.taxInfo);\n // If not the default (US) then trigger onCountryChanged\n if (this.taxInfo.country !== \"US\") {\n this.onCountryChanged.emit();\n }\n });\n\n try {\n const taxRates = await this.apiService.getTaxRates();\n if (taxRates) {\n this.taxRates = taxRates.data;\n }\n } catch (e) {\n this.logService.error(e);\n } finally {\n this.loading = false;\n }\n }\n\n get taxRate() {\n if (this.taxRates != null) {\n const localTaxRate = this.taxRates.find(\n (x) => x.country === this.taxInfo.country && x.postalCode === this.taxInfo.postalCode\n );\n return localTaxRate?.rate ?? null;\n }\n }\n\n getTaxInfoRequest(): TaxInfoUpdateRequest {\n if (this.organizationId) {\n const request = new OrganizationTaxInfoUpdateRequest();\n request.taxId = this.taxInfo.taxId;\n request.state = this.taxInfo.state;\n request.line1 = this.taxInfo.line1;\n request.line2 = this.taxInfo.line2;\n request.city = this.taxInfo.city;\n request.state = this.taxInfo.state;\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n } else {\n const request = new TaxInfoUpdateRequest();\n request.postalCode = this.taxInfo.postalCode;\n request.country = this.taxInfo.country;\n return request;\n }\n }\n\n submitTaxInfo(): Promise {\n if (!this.hasChanged()) {\n return new Promise((resolve) => {\n resolve();\n });\n }\n const request = this.getTaxInfoRequest();\n return this.organizationId\n ? this.apiService.putOrganizationTaxInfo(\n this.organizationId,\n request as OrganizationTaxInfoUpdateRequest\n )\n : this.apiService.putTaxInfo(request);\n }\n\n changeCountry() {\n if (this.taxInfo.country === \"US\") {\n this.taxInfo.includeTaxId = false;\n this.taxInfo.taxId = null;\n this.taxInfo.line1 = null;\n this.taxInfo.line2 = null;\n this.taxInfo.city = null;\n this.taxInfo.state = null;\n }\n this.onCountryChanged.emit();\n }\n\n private hasChanged(): boolean {\n for (const key in this.taxInfo) {\n // eslint-disable-next-line\n if (this.pristine.hasOwnProperty(key) && this.pristine[key] !== this.taxInfo[key]) {\n return true;\n }\n }\n return false;\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 \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 \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 \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 \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 \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 \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 \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 \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 \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
\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
\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"jslib-common/models/request/updateTwoFactorAuthenticatorRequest\";\nimport { TwoFactorAuthenticatorResponse } from \"jslib-common/models/response/twoFactorAuthenticatorResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-authenticator\",\n templateUrl: \"two-factor-authenticator.component.html\",\n})\nexport class TwoFactorAuthenticatorComponent\n extends TwoFactorBaseComponent\n implements OnInit, OnDestroy\n{\n type = TwoFactorProviderType.Authenticator;\n key: string;\n token: string;\n formPromise: Promise;\n\n private qrScript: HTMLScriptElement;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n userVerificationService: UserVerificationService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n private stateService: StateService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n this.qrScript = window.document.createElement(\"script\");\n this.qrScript.src = \"scripts/qrious.min.js\";\n this.qrScript.async = true;\n }\n\n ngOnInit() {\n window.document.body.appendChild(this.qrScript);\n }\n\n ngOnDestroy() {\n window.document.body.removeChild(this.qrScript);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorAuthenticatorRequest);\n request.token = this.token;\n request.key = this.key;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorAuthenticator(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorAuthenticatorResponse) {\n this.token = null;\n this.enabled = response.enabled;\n this.key = response.key;\n const email = await this.stateService.getEmail();\n window.setTimeout(() => {\n new (window as any).QRious({\n element: document.getElementById(\"qr\"),\n value:\n \"otpauth://totp/Bitwarden:\" +\n encodeURIComponent(email) +\n \"?secret=\" +\n encodeURIComponent(this.key) +\n \"&issuer=Bitwarden\",\n size: 160,\n });\n }, 100);\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"authenticatorAppTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n \"Authenticator\n

{{ \"twoStepAuthenticatorDesc\" | i18n }}

\n

\n 1. {{ \"twoStepAuthenticatorDownloadApp\" | i18n }}\n

\n
\n \n \n

{{ \"twoStepLoginProviderEnabled\" | i18n }}

\n {{ \"twoStepAuthenticatorReaddDesc\" | i18n }}\n
\n \"Authenticator\n

{{ \"twoStepAuthenticatorNeedApp\" | i18n }}

\n
\n
    \n
  • \n {{ \"iosDevices\" | i18n }}:\n Authy\n
  • \n
  • \n {{ \"androidDevices\" | i18n }}:\n Authy\n
  • \n
  • \n {{ \"windowsDevices\" | i18n }}:\n Microsoft Authenticator\n
  • \n
\n

{{ \"twoStepAuthenticatorAppsRecommended\" | i18n }}

\n

\n 2. {{ \"twoStepAuthenticatorScanCode\" | i18n }}\n

\n
\n

\n
\n {{ key }}\n

\n \n \n \n \n
\n
\n \n \n
\n \n
\n
\n
\n","import { Directive, EventEmitter, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { TwoFactorProviderRequest } from \"jslib-common/models/request/twoFactorProviderRequest\";\n\n@Directive()\nexport abstract class TwoFactorBaseComponent {\n @Output() onUpdated = new EventEmitter();\n\n type: TwoFactorProviderType;\n organizationId: string;\n twoFactorProviderType = TwoFactorProviderType;\n enabled = false;\n authed = false;\n\n protected hashedSecret: string;\n protected verificationType: VerificationType;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected logService: LogService,\n protected userVerificationService: UserVerificationService\n ) {}\n\n protected auth(authResponse: any) {\n this.hashedSecret = authResponse.secret;\n this.verificationType = authResponse.verificationType;\n this.authed = true;\n }\n\n protected async enable(enableFunction: () => Promise) {\n try {\n await enableFunction();\n this.onUpdated.emit(true);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async disable(promise: Promise) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"twoStepDisableDesc\"),\n this.i18nService.t(\"disable\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n const request = await this.buildRequestModel(TwoFactorProviderRequest);\n request.type = this.type;\n if (this.organizationId != null) {\n promise = this.apiService.putTwoFactorOrganizationDisable(this.organizationId, request);\n } else {\n promise = this.apiService.putTwoFactorDisable(request);\n }\n await promise;\n this.enabled = false;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"twoStepDisabled\"));\n this.onUpdated.emit(false);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async buildRequestModel(\n requestClass: new () => T\n ) {\n return this.userVerificationService.buildRequest(\n {\n secret: this.hashedSecret,\n type: this.verificationType,\n },\n requestClass,\n true\n );\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorDuoRequest } from \"jslib-common/models/request/updateTwoFactorDuoRequest\";\nimport { TwoFactorDuoResponse } from \"jslib-common/models/response/twoFactorDuoResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-duo\",\n templateUrl: \"two-factor-duo.component.html\",\n})\nexport class TwoFactorDuoComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Duo;\n ikey: string;\n skey: string;\n host: string;\n formPromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorDuoRequest);\n request.integrationKey = this.ikey;\n request.secretKey = this.skey;\n request.host = this.host;\n\n return super.enable(async () => {\n if (this.organizationId != null) {\n this.formPromise = this.apiService.putTwoFactorOrganizationDuo(\n this.organizationId,\n request\n );\n } else {\n this.formPromise = this.apiService.putTwoFactorDuo(request);\n }\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private processResponse(response: TwoFactorDuoResponse) {\n this.ikey = response.integrationKey;\n this.skey = response.secretKey;\n this.host = response.host;\n this.enabled = response.enabled;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n Duo\n

\n \n ×\n \n
\n \n \n \n
\n \n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n \"Duo\n {{ \"twoFactorDuoIntegrationKey\" | i18n }}: {{ ikey }}\n
\n {{ \"twoFactorDuoSecretKey\" | i18n }}: {{ skey }}\n
\n {{ \"twoFactorDuoApiHostname\" | i18n }}: {{ host }}\n
\n \n \"Duo\n

{{ \"twoFactorDuoDesc\" | i18n }}

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { TwoFactorEmailRequest } from \"jslib-common/models/request/twoFactorEmailRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"jslib-common/models/request/updateTwoFactorEmailRequest\";\nimport { TwoFactorEmailResponse } from \"jslib-common/models/response/twoFactorEmailResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-email\",\n templateUrl: \"two-factor-email.component.html\",\n})\nexport class TwoFactorEmailComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Email;\n email: string;\n token: string;\n sentEmail: string;\n formPromise: Promise;\n emailPromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n private stateService: StateService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n return this.processResponse(authResponse.response);\n }\n\n submit() {\n if (this.enabled) {\n return super.disable(this.formPromise);\n } else {\n return this.enable();\n }\n }\n\n async sendEmail() {\n try {\n const request = await this.buildRequestModel(TwoFactorEmailRequest);\n request.email = this.email;\n this.emailPromise = this.apiService.postTwoFactorEmailSetup(request);\n await this.emailPromise;\n this.sentEmail = this.email;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected async enable() {\n const request = await this.buildRequestModel(UpdateTwoFactorEmailRequest);\n request.email = this.email;\n request.token = this.token;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorEmail(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n private async processResponse(response: TwoFactorEmailResponse) {\n this.token = null;\n this.email = response.email;\n this.enabled = response.enabled;\n if (!this.enabled && (this.email == null || this.email === \"\")) {\n this.email = await this.stateService.getEmail();\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"emailTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n {{ \"email\" | i18n }}: {{ email }}\n \n \n

\n {{ \"twoFactorEmailDesc\" | i18n }}\n \"Email\n

\n
\n \n \n
\n
\n \n \n {{ \"sendEmail\" | i18n }}\n \n \n {{ \"verificationCodeEmailSent\" | i18n: sentEmail }}\n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { TwoFactorRecoverResponse } from \"jslib-common/models/response/twoFactorRescoverResponse\";\n\n@Component({\n selector: \"app-two-factor-recovery\",\n templateUrl: \"two-factor-recovery.component.html\",\n})\nexport class TwoFactorRecoveryComponent {\n type = -1;\n code: string;\n authed: boolean;\n twoFactorProviderType = TwoFactorProviderType;\n\n constructor(private i18nService: I18nService) {}\n\n auth(authResponse: any) {\n this.authed = true;\n this.processResponse(authResponse.response);\n }\n\n print() {\n const w = window.open();\n w.document.write(\n '
' +\n \"

\" +\n this.i18nService.t(\"twoFactorRecoveryYourCode\") +\n \":

\" +\n \"\" +\n this.code +\n \"
\" +\n '

' +\n new Date() +\n \"

\"\n );\n w.onafterprint = () => w.close();\n w.print();\n }\n\n private formatString(s: string) {\n if (s == null) {\n return null;\n }\n return s\n .replace(/(.{4})/g, \"$1 \")\n .trim()\n .toUpperCase();\n }\n\n private processResponse(response: TwoFactorRecoverResponse) {\n this.code = this.formatString(response.code);\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"recoveryCodeTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n

{{ \"twoFactorRecoveryYourCode\" | i18n }}:

\n {{ code }}\n
\n \n {{ \"twoFactorRecoveryNoCode\" | i18n }}\n \n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, Type, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalRef } from \"jslib-angular/components/modal/modal.ref\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { DeviceVerificationRequest } from \"jslib-common/models/request/deviceVerificationRequest\";\nimport { TwoFactorProviders } from \"jslib-common/services/twoFactor.service\";\n\nimport { TwoFactorAuthenticatorComponent } from \"./two-factor-authenticator.component\";\nimport { TwoFactorDuoComponent } from \"./two-factor-duo.component\";\nimport { TwoFactorEmailComponent } from \"./two-factor-email.component\";\nimport { TwoFactorRecoveryComponent } from \"./two-factor-recovery.component\";\nimport { TwoFactorWebAuthnComponent } from \"./two-factor-webauthn.component\";\nimport { TwoFactorYubiKeyComponent } from \"./two-factor-yubikey.component\";\n\n@Component({\n selector: \"app-two-factor-setup\",\n templateUrl: \"two-factor-setup.component.html\",\n})\nexport class TwoFactorSetupComponent implements OnInit {\n @ViewChild(\"recoveryTemplate\", { read: ViewContainerRef, static: true })\n recoveryModalRef: ViewContainerRef;\n @ViewChild(\"authenticatorTemplate\", { read: ViewContainerRef, static: true })\n authenticatorModalRef: ViewContainerRef;\n @ViewChild(\"yubikeyTemplate\", { read: ViewContainerRef, static: true })\n yubikeyModalRef: ViewContainerRef;\n @ViewChild(\"duoTemplate\", { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef;\n @ViewChild(\"emailTemplate\", { read: ViewContainerRef, static: true })\n emailModalRef: ViewContainerRef;\n @ViewChild(\"webAuthnTemplate\", { read: ViewContainerRef, static: true })\n webAuthnModalRef: ViewContainerRef;\n\n organizationId: string;\n providers: any[] = [];\n canAccessPremium: boolean;\n showPolicyWarning = false;\n loading = true;\n enableDeviceVerification: boolean;\n isDeviceVerificationSectionEnabled: boolean;\n modal: ModalRef;\n formPromise: Promise;\n\n constructor(\n protected apiService: ApiService,\n protected modalService: ModalService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private stateService: StateService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n try {\n const deviceVerificationSettings = await this.apiService.getDeviceVerificationSettings();\n this.isDeviceVerificationSectionEnabled =\n deviceVerificationSettings.isDeviceVerificationSectionEnabled;\n this.enableDeviceVerification = deviceVerificationSettings.unknownDeviceVerificationEnabled;\n } catch (e) {\n this.logService.error(e);\n }\n\n for (const key in TwoFactorProviders) {\n // eslint-disable-next-line\n if (!TwoFactorProviders.hasOwnProperty(key)) {\n continue;\n }\n\n const p = (TwoFactorProviders as any)[key];\n if (this.filterProvider(p.type)) {\n continue;\n }\n\n this.providers.push({\n type: p.type,\n name: p.name,\n description: p.description,\n enabled: false,\n premium: p.premium,\n sort: p.sort,\n });\n }\n\n this.providers.sort((a: any, b: any) => a.sort - b.sort);\n await this.load();\n }\n\n async load() {\n this.loading = true;\n const providerList = await this.getTwoFactorProviders();\n providerList.data.forEach((p) => {\n this.providers.forEach((p2) => {\n if (p.type === p2.type) {\n p2.enabled = p.enabled;\n }\n });\n });\n this.evaluatePolicies();\n this.loading = false;\n }\n\n async manage(type: TwoFactorProviderType) {\n switch (type) {\n case TwoFactorProviderType.Authenticator: {\n const authComp = await this.openModal(\n this.authenticatorModalRef,\n TwoFactorAuthenticatorComponent\n );\n authComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Authenticator);\n });\n break;\n }\n case TwoFactorProviderType.Yubikey: {\n const yubiComp = await this.openModal(this.yubikeyModalRef, TwoFactorYubiKeyComponent);\n yubiComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Yubikey);\n });\n break;\n }\n case TwoFactorProviderType.Duo: {\n const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n duoComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Duo);\n });\n break;\n }\n case TwoFactorProviderType.Email: {\n const emailComp = await this.openModal(this.emailModalRef, TwoFactorEmailComponent);\n emailComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.Email);\n });\n break;\n }\n case TwoFactorProviderType.WebAuthn: {\n const webAuthnComp = await this.openModal(\n this.webAuthnModalRef,\n TwoFactorWebAuthnComponent\n );\n webAuthnComp.onUpdated.subscribe((enabled: boolean) => {\n this.updateStatus(enabled, TwoFactorProviderType.WebAuthn);\n });\n break;\n }\n default:\n break;\n }\n }\n\n recoveryCode() {\n this.openModal(this.recoveryModalRef, TwoFactorRecoveryComponent);\n }\n\n async premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n protected getTwoFactorProviders() {\n return this.apiService.getTwoFactorProviders();\n }\n\n protected filterProvider(type: TwoFactorProviderType) {\n return type === TwoFactorProviderType.OrganizationDuo;\n }\n\n protected async openModal(ref: ViewContainerRef, type: Type): Promise {\n const [modal, childComponent] = await this.modalService.openViewRef(type, ref);\n this.modal = modal;\n\n return childComponent;\n }\n\n protected updateStatus(enabled: boolean, type: TwoFactorProviderType) {\n if (!enabled && this.modal != null) {\n this.modal.close();\n }\n this.providers.forEach((p) => {\n if (p.type === type) {\n p.enabled = enabled;\n }\n });\n this.evaluatePolicies();\n }\n\n private async evaluatePolicies() {\n if (this.organizationId == null && this.providers.filter((p) => p.enabled).length === 1) {\n this.showPolicyWarning = await this.policyService.policyAppliesToUser(\n PolicyType.TwoFactorAuthentication\n );\n } else {\n this.showPolicyWarning = false;\n }\n }\n\n async submit() {\n try {\n if (this.enableDeviceVerification) {\n const email = await this.stateService.getEmail();\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n \"areYouSureYouWantToEnableDeviceVerificationTheVerificationCodeEmailsWillArriveAtX\",\n email\n ),\n this.i18nService.t(\"deviceVerification\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n }\n\n this.formPromise = this.apiService.putDeviceVerificationSettings(\n new DeviceVerificationRequest(this.enableDeviceVerification)\n );\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedDeviceVerification\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { TwoFactorAuthenticatorResponse } from \"jslib-common/models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"jslib-common/models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"jslib-common/models/response/twoFactorEmailResponse\";\nimport { TwoFactorRecoverResponse } from \"jslib-common/models/response/twoFactorRescoverResponse\";\nimport { TwoFactorWebAuthnResponse } from \"jslib-common/models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"jslib-common/models/response/twoFactorYubiKeyResponse\";\nimport { Verification } from \"jslib-common/types/verification\";\n\ntype TwoFactorResponse =\n | TwoFactorRecoverResponse\n | TwoFactorDuoResponse\n | TwoFactorEmailResponse\n | TwoFactorWebAuthnResponse\n | TwoFactorAuthenticatorResponse\n | TwoFactorYubiKeyResponse;\n\n@Component({\n selector: \"app-two-factor-verify\",\n templateUrl: \"two-factor-verify.component.html\",\n})\nexport class TwoFactorVerifyComponent {\n @Input() type: TwoFactorProviderType;\n @Input() organizationId: string;\n @Output() onAuthed = new EventEmitter();\n\n secret: Verification;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private logService: LogService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async submit() {\n let hashedSecret: string;\n\n try {\n this.formPromise = this.userVerificationService.buildRequest(this.secret).then((request) => {\n hashedSecret =\n this.secret.type === VerificationType.MasterPassword\n ? request.masterPasswordHash\n : request.otp;\n return this.apiCall(request);\n });\n\n const response = await this.formPromise;\n this.onAuthed.emit({\n response: response,\n secret: hashedSecret,\n verificationType: this.secret.type,\n });\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private apiCall(request: SecretVerificationRequest): Promise {\n switch (this.type) {\n case -1 as TwoFactorProviderType:\n return this.apiService.getTwoFactorRecover(request);\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n if (this.organizationId != null) {\n return this.apiService.getTwoFactorOrganizationDuo(this.organizationId, request);\n } else {\n return this.apiService.getTwoFactorDuo(request);\n }\n case TwoFactorProviderType.Email:\n return this.apiService.getTwoFactorEmail(request);\n case TwoFactorProviderType.WebAuthn:\n return this.apiService.getTwoFactorWebAuthn(request);\n case TwoFactorProviderType.Authenticator:\n return this.apiService.getTwoFactorAuthenticator(request);\n case TwoFactorProviderType.Yubikey:\n return this.apiService.getTwoFactorYubiKey(request);\n }\n }\n}\n","
\n
\n

{{ \"twoStepLoginAuthDesc\" | i18n }}

\n \n \n
\n
\n \n \n
\n
\n","import { Component, NgZone } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"jslib-common/models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"jslib-common/models/request/updateTwoFactorWebAuthnRequest\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"jslib-common/models/response/twoFactorWebAuthnResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-webauthn\",\n templateUrl: \"two-factor-webauthn.component.html\",\n})\nexport class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.WebAuthn;\n name: string;\n keys: any[];\n keyIdAvailable: number = null;\n keysConfiguredCount = 0;\n webAuthnError: boolean;\n webAuthnListening: boolean;\n webAuthnResponse: PublicKeyCredential;\n challengePromise: Promise;\n formPromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n private ngZone: NgZone,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n async submit() {\n if (this.webAuthnResponse == null || this.keyIdAvailable == null) {\n // Should never happen.\n return Promise.reject();\n }\n const request = await this.buildRequestModel(UpdateTwoFactorWebAuthnRequest);\n request.deviceResponse = this.webAuthnResponse;\n request.id = this.keyIdAvailable;\n request.name = this.name;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorWebAuthn(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n });\n }\n\n disable() {\n return super.disable(this.formPromise);\n }\n\n async remove(key: any) {\n if (this.keysConfiguredCount <= 1 || key.removePromise != null) {\n return;\n }\n const name = key.name != null ? key.name : this.i18nService.t(\"webAuthnkeyX\", key.id);\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removeU2fConfirmation\"),\n name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n const request = await this.buildRequestModel(UpdateTwoFactorWebAuthnDeleteRequest);\n request.id = key.id;\n try {\n key.removePromise = this.apiService.deleteTwoFactorWebAuthn(request);\n const response = await key.removePromise;\n key.removePromise = null;\n await this.processResponse(response);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async readKey() {\n if (this.keyIdAvailable == null) {\n return;\n }\n const request = await this.buildRequestModel(SecretVerificationRequest);\n try {\n this.challengePromise = this.apiService.getTwoFactorWebAuthnChallenge(request);\n const challenge = await this.challengePromise;\n this.readDevice(challenge);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private readDevice(webAuthnChallenge: ChallengeResponse) {\n // eslint-disable-next-line\n console.log(\"listening for key...\");\n this.resetWebAuthn(true);\n\n navigator.credentials\n .create({\n publicKey: webAuthnChallenge,\n })\n .then((data: PublicKeyCredential) => {\n this.ngZone.run(() => {\n this.webAuthnListening = false;\n this.webAuthnResponse = data;\n });\n })\n .catch((err) => {\n // eslint-disable-next-line\n console.error(err);\n this.resetWebAuthn(false);\n // TODO: Should we display the actual error?\n this.webAuthnError = true;\n });\n }\n\n private resetWebAuthn(listening = false) {\n this.webAuthnResponse = null;\n this.webAuthnError = false;\n this.webAuthnListening = listening;\n }\n\n private processResponse(response: TwoFactorWebAuthnResponse) {\n this.resetWebAuthn();\n this.keys = [];\n this.keyIdAvailable = null;\n this.name = null;\n this.keysConfiguredCount = 0;\n for (let i = 1; i <= 5; i++) {\n if (response.keys != null) {\n const key = response.keys.filter((k) => k.id === i);\n if (key.length > 0) {\n this.keysConfiguredCount++;\n this.keys.push({\n id: i,\n name: key[0].name,\n configured: true,\n migrated: key[0].migrated,\n removePromise: null,\n });\n continue;\n }\n }\n this.keys.push({ id: i, name: null, configured: false, removePromise: null });\n if (this.keyIdAvailable == null) {\n this.keyIdAvailable = i;\n }\n }\n this.enabled = response.enabled;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n {{ \"webAuthnTitle\" | i18n }}\n

\n \n ×\n \n
\n \n \n \n
\n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n \n

{{ \"twoFactorWebAuthnWarning\" | i18n }}

\n
    \n
  • {{ \"twoFactorWebAuthnSupportWeb\" | i18n }}
  • \n
\n
\n \"FIDO2\n
    \n \n \n {{ \"webAuthnkeyX\" | i18n: i + 1 }}\n {{ k.name }}\n \n \n {{ \"webAuthnMigrated\" | i18n }}\n \n \n 1 && k.configured\">\n \n -\n {{ \"remove\" | i18n }}\n \n \n
\n
\n

{{ \"twoFactorWebAuthnAdd\" | i18n }}:

\n
    \n
  1. {{ \"twoFactorU2fGiveName\" | i18n }}
  2. \n
  3. {{ \"twoFactorU2fPlugInReadKey\" | i18n }}
  4. \n
  5. {{ \"twoFactorU2fTouchButton\" | i18n }}
  6. \n
  7. {{ \"twoFactorU2fSaveForm\" | i18n }}
  8. \n
\n
\n
\n \n \n
\n
\n \n {{ \"readKey\" | i18n }}\n \n \n \n \n \n \n \n {{ \"twoFactorU2fWaiting\" | i18n }}...\n \n \n \n {{ \"twoFactorU2fClickSave\" | i18n }}\n \n \n \n {{ \"twoFactorU2fProblemReadingTryAgain\" | i18n }}\n \n \n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n \n {{ \"disableAllKeys\" | i18n }}\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"jslib-common/models/request/updateTwoFactorYubioOtpRequest\";\nimport { TwoFactorYubiKeyResponse } from \"jslib-common/models/response/twoFactorYubiKeyResponse\";\n\nimport { TwoFactorBaseComponent } from \"./two-factor-base.component\";\n\n@Component({\n selector: \"app-two-factor-yubikey\",\n templateUrl: \"two-factor-yubikey.component.html\",\n})\nexport class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent {\n type = TwoFactorProviderType.Yubikey;\n keys: any[];\n nfc = false;\n\n formPromise: Promise;\n disablePromise: Promise;\n\n constructor(\n apiService: ApiService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService,\n userVerificationService: UserVerificationService\n ) {\n super(apiService, i18nService, platformUtilsService, logService, userVerificationService);\n }\n\n auth(authResponse: any) {\n super.auth(authResponse);\n this.processResponse(authResponse.response);\n }\n\n async submit() {\n const request = await this.buildRequestModel(UpdateTwoFactorYubioOtpRequest);\n request.key1 = this.keys != null && this.keys.length > 0 ? this.keys[0].key : null;\n request.key2 = this.keys != null && this.keys.length > 1 ? this.keys[1].key : null;\n request.key3 = this.keys != null && this.keys.length > 2 ? this.keys[2].key : null;\n request.key4 = this.keys != null && this.keys.length > 3 ? this.keys[3].key : null;\n request.key5 = this.keys != null && this.keys.length > 4 ? this.keys[4].key : null;\n request.nfc = this.nfc;\n\n return super.enable(async () => {\n this.formPromise = this.apiService.putTwoFactorYubiKey(request);\n const response = await this.formPromise;\n await this.processResponse(response);\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"yubikeysUpdated\"));\n });\n }\n\n disable() {\n return super.disable(this.disablePromise);\n }\n\n remove(key: any) {\n key.existingKey = null;\n key.key = null;\n }\n\n private processResponse(response: TwoFactorYubiKeyResponse) {\n this.enabled = response.enabled;\n this.keys = [\n { key: response.key1, existingKey: this.padRight(response.key1) },\n { key: response.key2, existingKey: this.padRight(response.key2) },\n { key: response.key3, existingKey: this.padRight(response.key3) },\n { key: response.key4, existingKey: this.padRight(response.key4) },\n { key: response.key5, existingKey: this.padRight(response.key5) },\n ];\n this.nfc = response.nfc || !response.enabled;\n }\n\n private padRight(str: string, character = \"•\", size = 44) {\n if (str == null || character == null || str.length >= size) {\n return str;\n }\n const max = (size - str.length) / character.length;\n for (let i = 0; i < max; i++) {\n str += character;\n }\n return str;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"twoStepLogin\" | i18n }}\n YubiKey\n

\n \n ×\n \n
\n \n \n \n
\n \n {{ \"twoStepLoginProviderEnabled\" | i18n }}\n \n \n

{{ \"twoFactorYubikeyWarning\" | i18n }}

\n
    \n
  • {{ \"twoFactorYubikeySupportUsb\" | i18n }}
  • \n
  • {{ \"twoFactorYubikeySupportMobile\" | i18n }}
  • \n
\n
\n \"YubiKey\n

{{ \"twoFactorYubikeyAdd\" | i18n }}:

\n
    \n
  1. {{ \"twoFactorYubikeyPlugIn\" | i18n }}
  2. \n
  3. {{ \"twoFactorYubikeySelectKey\" | i18n }}
  4. \n
  5. {{ \"twoFactorYubikeyTouchButton\" | i18n }}
  6. \n
  7. {{ \"twoFactorYubikeySaveForm\" | i18n }}
  8. \n
\n
\n
\n
\n \n \n
\n {{ k.existingKey }}\n \n \n \n
\n
\n
\n {{ \"nfcSupport\" | i18n }}\n
\n \n \n
\n {{ \"twoFactorYubikeySupportsNfcDesc\" | i18n }}\n
\n
\n \n \n \n {{ \"disableAllKeys\" | i18n }}\n \n \n
\n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { CipherWithIdRequest } from \"jslib-common/models/request/cipherWithIdRequest\";\nimport { FolderWithIdRequest } from \"jslib-common/models/request/folderWithIdRequest\";\nimport { UpdateKeyRequest } from \"jslib-common/models/request/updateKeyRequest\";\n\n@Component({\n selector: \"app-update-key\",\n templateUrl: \"update-key.component.html\",\n})\nexport class UpdateKeyComponent {\n masterPassword: string;\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService,\n private messagingService: MessagingService,\n private syncService: SyncService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async submit() {\n const hasEncKey = await this.cryptoService.hasEncKey();\n if (hasEncKey) {\n return;\n }\n\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n\n try {\n this.formPromise = this.makeRequest().then((request) => {\n return this.apiService.postAccountKey(request);\n });\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"keyUpdated\"),\n this.i18nService.t(\"logBackInOthersToo\"),\n { timeout: 15000 }\n );\n this.messagingService.send(\"logout\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n private async makeRequest(): Promise {\n const key = await this.cryptoService.getKey();\n const encKey = await this.cryptoService.makeEncKey(key);\n const privateKey = await this.cryptoService.getPrivateKey();\n let encPrivateKey: EncString = null;\n if (privateKey != null) {\n encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n }\n const request = new UpdateKeyRequest();\n request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n request.key = encKey[1].encryptedString;\n request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n\n await this.syncService.fullSync(true);\n\n const folders = await this.folderService.getAllDecrypted();\n for (let i = 0; i < folders.length; i++) {\n if (folders[i].id == null) {\n continue;\n }\n const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n request.folders.push(new FolderWithIdRequest(folder));\n }\n\n const ciphers = await this.cipherService.getAllDecrypted();\n for (let i = 0; i < ciphers.length; i++) {\n if (ciphers[i].organizationId != null) {\n continue;\n }\n const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n request.ciphers.push(new CipherWithIdRequest(cipher));\n }\n\n return request;\n }\n}\n","
\n
\n \n
\n

{{ \"updateEncryptionKey\" | i18n }}

\n \n ×\n \n
\n
\n

\n {{ \"updateEncryptionKeyShortDesc\" | i18n }} {{ \"updateEncryptionKeyDesc\" | i18n }}\n {{ \"learnMore\" | i18n }}\n

\n {{ \"updateEncryptionKeyWarning\" | i18n }}\n \n \n
\n
\n \n \n
\n \n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-update-license\",\n templateUrl: \"update-license.component.html\",\n})\nexport class UpdateLicenseComponent {\n @Input() organizationId: string;\n @Output() onUpdated = new EventEmitter();\n @Output() onCanceled = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n try {\n const fd = new FormData();\n fd.append(\"license\", files[0]);\n\n let updatePromise: Promise = null;\n if (this.organizationId == null) {\n updatePromise = this.apiService.postAccountLicense(fd);\n } else {\n updatePromise = this.apiService.postOrganizationLicenseUpdate(this.organizationId, fd);\n }\n\n this.formPromise = updatePromise.then(() => {\n return this.apiService.refreshIdentityToken();\n });\n\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"updatedLicense\"));\n this.onUpdated.emit();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n cancel() {\n this.onCanceled.emit();\n }\n}\n","
\n
\n \n \n {{\n \"licenseFileDesc\"\n | i18n\n : (!organizationId\n ? \"bitwarden_premium_license.json\"\n : \"bitwarden_organization_license.json\")\n }}\n
\n \n \n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PaymentMethodType } from \"jslib-common/enums/paymentMethodType\";\nimport { TransactionType } from \"jslib-common/enums/transactionType\";\nimport { BillingHistoryResponse } from \"jslib-common/models/response/billingHistoryResponse\";\n\n@Component({\n selector: \"app-user-billing\",\n templateUrl: \"user-billing-history.component.html\",\n})\nexport class UserBillingHistoryComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n billing: BillingHistoryResponse;\n paymentMethodType = PaymentMethodType;\n transactionType = TransactionType;\n\n constructor(\n protected apiService: ApiService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private router: Router\n ) {}\n\n async ngOnInit() {\n if (this.platformUtilsService.isSelfHost()) {\n this.router.navigate([\"/settings/subscription\"]);\n }\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n this.loading = true;\n this.billing = null;\n this.loading = false;\n }\n\n get invoices() {\n return this.billing != null ? this.billing.invoices : null;\n }\n\n get transactions() {\n return this.billing != null ? this.billing.transactions : null;\n }\n}\n","
\n

\n {{ \"billingHistory\" | i18n }}\n

\n \n \n {{ \"refresh\" | i18n }}\n \n
\n\n \n {{ \"loading\" | i18n }}\n\n\n

{{ \"invoices\" | i18n }}

\n

{{ \"noInvoices\" | i18n }}

\n \n \n \n \n \n \n \n \n \n
{{ i.date | date: \"mediumDate\" }}\n \n \n \n {{ \"invoiceNumber\" | i18n: i.number }}\n {{ i.amount | currency: \"$\" }}\n \n \n {{ \"paid\" | i18n }}\n \n \n \n {{ \"unpaid\" | i18n }}\n \n
\n

{{ \"transactions\" | i18n }}

\n

{{ \"noTransactions\" | i18n }}

\n \n \n \n \n \n \n \n {{ t.amount | currency: \"$\" }}\n \n \n \n
{{ t.createdDate | date: \"mediumDate\" }}\n \n {{ \"chargeNoun\" | i18n }}\n \n {{ \"refundNoun\" | i18n }}\n \n \n {{ t.details }}\n
\n * {{ \"chargesStatement\" | i18n: \"BITWARDEN\" }}\n
\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SubscriptionResponse } from \"jslib-common/models/response/subscriptionResponse\";\n\n@Component({\n selector: \"app-user-subscription\",\n templateUrl: \"user-subscription.component.html\",\n})\nexport class UserSubscriptionComponent implements OnInit {\n loading = false;\n firstLoaded = false;\n adjustStorageAdd = true;\n showAdjustStorage = false;\n showUpdateLicense = false;\n sub: SubscriptionResponse;\n selfHosted = false;\n\n cancelPromise: Promise;\n reinstatePromise: Promise;\n\n constructor(\n private stateService: StateService,\n private apiService: ApiService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private router: Router,\n private logService: LogService\n ) {\n this.selfHosted = platformUtilsService.isSelfHost();\n }\n\n async ngOnInit() {\n await this.load();\n this.firstLoaded = true;\n }\n\n async load() {\n if (this.loading) {\n return;\n }\n\n if (this.stateService.getHasPremiumPersonally()) {\n this.loading = true;\n this.sub = await this.apiService.getUserSubscription();\n } else {\n this.router.navigate([\"/settings/subscription/premium\"]);\n return;\n }\n\n this.loading = false;\n }\n\n async reinstate() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"manageSubscriptionFromStore\"),\n this.i18nService.t(\"cancelSubscription\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"reinstateConfirmation\"),\n this.i18nService.t(\"reinstateSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"cancel\")\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.reinstatePromise = this.apiService.postReinstatePremium();\n await this.reinstatePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"reinstated\"));\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async cancel() {\n if (this.loading) {\n return;\n }\n\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"manageSubscriptionFromStore\"),\n this.i18nService.t(\"cancelSubscription\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"cancelConfirmation\"),\n this.i18nService.t(\"cancelSubscription\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.cancelPromise = this.apiService.postCancelPremium();\n await this.cancelPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"canceledSubscription\")\n );\n this.load();\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n downloadLicense() {\n if (this.loading) {\n return;\n }\n\n const licenseString = JSON.stringify(this.sub.license, null, 2);\n this.platformUtilsService.saveFile(\n window,\n licenseString,\n null,\n \"bitwarden_premium_license.json\"\n );\n }\n\n updateLicense() {\n if (this.loading) {\n return;\n }\n this.showUpdateLicense = true;\n }\n\n closeUpdateLicense(load: boolean) {\n this.showUpdateLicense = false;\n if (load) {\n this.load();\n }\n }\n\n adjustStorage(add: boolean) {\n if (this.usingInAppPurchase) {\n this.platformUtilsService.showDialog(\n this.i18nService.t(\"cannotPerformInAppPurchase\"),\n this.i18nService.t(add ? \"addStorage\" : \"removeStorage\"),\n null,\n null,\n \"warning\"\n );\n return;\n }\n this.adjustStorageAdd = add;\n this.showAdjustStorage = true;\n }\n\n closeStorage(load: boolean) {\n this.showAdjustStorage = false;\n if (load) {\n this.load();\n }\n }\n\n get subscriptionMarkedForCancel() {\n return (\n this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate\n );\n }\n\n get subscription() {\n return this.sub != null ? this.sub.subscription : null;\n }\n\n get nextInvoice() {\n return this.sub != null ? this.sub.upcomingInvoice : null;\n }\n\n get storagePercentage() {\n return this.sub != null && this.sub.maxStorageGb\n ? +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2)\n : 0;\n }\n\n get storageProgressWidth() {\n return this.storagePercentage < 5 ? 5 : 0;\n }\n\n get usingInAppPurchase() {\n return this.sub != null ? this.sub.usingInAppPurchase : false;\n }\n\n get title(): string {\n return this.i18nService.t(this.selfHosted ? \"subscription\" : \"premiumMembership\");\n }\n}\n","\n

\n {{ title }}\n \n \n {{ \"loading\" | i18n }}\n \n

\n\n\n \n {{ \"loading\" | i18n }}\n\n\n \n {{ \"subscriptionCanceled\" | i18n }}\n \n

{{ \"subscriptionPendingCanceled\" | i18n }}

\n \n \n {{ \"reinstateSubscription\" | i18n }}\n \n \n
\n
{{ \"expiration\" | i18n }}
\n
{{ sub.expiration | date: \"mediumDate\" }}
\n
{{ \"neverExpires\" | i18n }}
\n
\n
\n
\n
\n
{{ \"status\" | i18n }}
\n
\n {{ (subscription && subscription.status) || \"-\" }}\n {{\n \"pendingCancellation\" | i18n\n }}\n
\n
{{ \"nextCharge\" | i18n }}
\n
\n {{\n nextInvoice\n ? (nextInvoice.date | date: \"mediumDate\") +\n \", \" +\n (nextInvoice.amount | currency: \"$\")\n : \"-\"\n }}\n
\n
\n
\n
\n {{ \"details\" | i18n }}\n \n \n \n \n \n \n \n
\n {{ i.name }} {{ i.quantity > 1 ? \"×\" + i.quantity : \"\" }} @\n {{ i.amount | currency: \"$\" }}\n {{ i.quantity * i.amount | currency: \"$\" }} /{{ i.interval | i18n }}
\n
\n
\n \n
\n \n \n {{ \"manageSubscription\" | i18n }}\n \n
\n
\n
\n \n ×\n \n

{{ \"updateLicense\" | i18n }}

\n \n \n
\n
\n
\n \n
\n \n {{ \"downloadLicense\" | i18n }}\n \n \n \n {{ \"cancelSubscription\" | i18n }}\n \n
\n

{{ \"storage\" | i18n }}

\n

{{ \"subscriptionStorage\" | i18n: sub.maxStorageGb || 0:sub.storageName || \"0 MB\" }}

\n
\n \n {{ storagePercentage / 100 | percent }}\n
\n \n \n
\n
\n \n \n {{ \"removeStorage\" | i18n }}\n \n
\n \n
\n
\n
\n
\n","import { Component } from \"@angular/core\";\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { VaultTimeoutInputComponent as VaultTimeoutInputComponentBase } from \"jslib-angular/components/settings/vault-timeout-input.component\";\n\n@Component({\n selector: \"app-vault-timeout-input\",\n templateUrl: \"vault-timeout-input.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: VaultTimeoutInputComponent,\n },\n ],\n})\nexport class VaultTimeoutInputComponent extends VaultTimeoutInputComponentBase {}\n","\n {{ \"vaultTimeoutPolicyInEffect\" | i18n: vaultTimeoutPolicyHours:vaultTimeoutPolicyMinutes }}\n\n\n
\n
\n \n \n \n \n {{ \"vaultTimeoutDesc\" | i18n }}\n
\n
\n \n
\n
\n \n {{ \"hours\" | i18n }}\n
\n
\n \n {{ \"minutes\" | i18n }}\n
\n
\n\n \n {{ \"vaultCustomTimeoutMinimum\" | i18n }}\n \n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-verify-email\",\n templateUrl: \"verify-email.component.html\",\n})\nexport class VerifyEmailComponent {\n actionPromise: Promise;\n\n constructor(\n private apiService: ApiService,\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async send() {\n if (this.actionPromise != null) {\n return;\n }\n try {\n this.actionPromise = this.apiService.postAccountVerifyEmail();\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"checkInboxForVerification\")\n );\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n}\n","
\n
\n {{ \"verifyEmail\" | i18n }}\n
\n
\n

{{ \"verifyEmailDesc\" | i18n }}

\n \n \n \n {{ \"sendEmail\" | i18n }}\n \n \n
\n
\n","import { Component } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { ExportComponent as BaseExportComponent } from \"jslib-angular/components/export.component\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\n\n@Component({\n selector: \"app-export\",\n templateUrl: \"export.component.html\",\n})\nexport class ExportComponent extends BaseExportComponent {\n organizationId: string;\n\n constructor(\n cryptoService: CryptoService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n exportService: ExportService,\n eventService: EventService,\n policyService: PolicyService,\n logService: LogService,\n userVerificationService: UserVerificationService,\n formBuilder: FormBuilder\n ) {\n super(\n cryptoService,\n i18nService,\n platformUtilsService,\n exportService,\n eventService,\n policyService,\n window,\n logService,\n userVerificationService,\n formBuilder\n );\n }\n\n protected saved() {\n super.saved();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"exportSuccess\"));\n }\n}\n","import { Component, ViewChild, ViewContainerRef } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\n\nimport { GeneratorComponent as BaseGeneratorComponent } from \"jslib-angular/components/generator.component\";\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"jslib-common/abstractions/usernameGeneration.service\";\n\nimport { PasswordGeneratorHistoryComponent } from \"./password-generator-history.component\";\n\n@Component({\n selector: \"app-generator\",\n templateUrl: \"generator.component.html\",\n})\nexport class GeneratorComponent extends BaseGeneratorComponent {\n @ViewChild(\"historyTemplate\", { read: ViewContainerRef, static: true })\n historyModalRef: ViewContainerRef;\n\n constructor(\n passwordGenerationService: PasswordGenerationService,\n usernameGenerationService: UsernameGenerationService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n logService: LogService,\n route: ActivatedRoute,\n private modalService: ModalService\n ) {\n super(\n passwordGenerationService,\n usernameGenerationService,\n platformUtilsService,\n stateService,\n i18nService,\n logService,\n route,\n window\n );\n if (platformUtilsService.isSelfHost()) {\n // Cannot use Firefox Relay on self hosted web vaults due to CORS issues with Firefox Relay API\n this.forwardOptions.splice(\n this.forwardOptions.findIndex((o) => o.value === \"firefoxrelay\"),\n 1\n );\n }\n }\n\n async history() {\n await this.modalService.openViewRef(PasswordGeneratorHistoryComponent, this.historyModalRef);\n }\n\n lengthChanged() {\n document.getElementById(\"length\").focus();\n }\n\n minNumberChanged() {\n document.getElementById(\"min-number\").focus();\n }\n\n minSpecialChanged() {\n document.getElementById(\"min-special\").focus();\n }\n}\n","
\n

{{ \"generator\" | i18n }}

\n
\n\n {{ \"passwordGeneratorPolicyInEffect\" | i18n }}\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
\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
\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
\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 \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
\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
\n \n \n {{ \"regenerateUsername\" | i18n }}\n \n \n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport * as JSZip from \"jszip\";\nimport Swal, { SweetAlertIcon } from \"sweetalert2\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { ImportService } from \"jslib-common/abstractions/import.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { ImportOption, ImportType } from \"jslib-common/enums/importOptions\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\n@Component({\n selector: \"app-import\",\n templateUrl: \"import.component.html\",\n})\nexport class ImportComponent implements OnInit {\n featuredImportOptions: ImportOption[];\n importOptions: ImportOption[];\n format: ImportType = null;\n fileContents: string;\n formPromise: Promise;\n loading = false;\n importBlockedByPolicy = false;\n\n protected organizationId: string = null;\n protected successNavigate: any[] = [\"vault\"];\n\n constructor(\n protected i18nService: I18nService,\n protected importService: ImportService,\n protected router: Router,\n protected platformUtilsService: PlatformUtilsService,\n protected policyService: PolicyService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.setImportOptions();\n\n this.importBlockedByPolicy = await this.policyService.policyAppliesToUser(\n PolicyType.PersonalOwnership\n );\n }\n\n async submit() {\n if (this.importBlockedByPolicy) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"personalOwnershipPolicyInEffectImports\")\n );\n return;\n }\n\n this.loading = true;\n\n const importer = this.importService.getImporter(this.format, this.organizationId);\n if (importer === null) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFormat\")\n );\n this.loading = false;\n return;\n }\n\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (\n (files == null || files.length === 0) &&\n (this.fileContents == null || this.fileContents === \"\")\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n this.loading = false;\n return;\n }\n\n let fileContents = this.fileContents;\n if (files != null && files.length > 0) {\n try {\n const content = await this.getFileContents(files[0]);\n if (content != null) {\n fileContents = content;\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (fileContents == null || fileContents === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n this.loading = false;\n return;\n }\n\n try {\n this.formPromise = this.importService.import(importer, fileContents, this.organizationId);\n const error = await this.formPromise;\n if (error != null) {\n this.error(error);\n this.loading = false;\n return;\n }\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"importSuccess\"));\n this.router.navigate(this.successNavigate);\n } catch (e) {\n this.logService.error(e);\n }\n\n this.loading = false;\n }\n\n getFormatInstructionTitle() {\n if (this.format == null) {\n return null;\n }\n\n const results = this.featuredImportOptions\n .concat(this.importOptions)\n .filter((o) => o.id === this.format);\n if (results.length > 0) {\n return this.i18nService.t(\"instructionsFor\", results[0].name);\n }\n return null;\n }\n\n protected setImportOptions() {\n this.featuredImportOptions = [\n {\n id: null,\n name: \"-- \" + this.i18nService.t(\"select\") + \" --\",\n },\n ...this.importService.featuredImportOptions,\n ];\n this.importOptions = [...this.importService.regularImportOptions].sort((a, b) => {\n if (a.name == null && b.name != null) {\n return -1;\n }\n if (a.name != null && b.name == null) {\n return 1;\n }\n if (a.name == null && b.name == null) {\n return 0;\n }\n\n return this.i18nService.collator\n ? this.i18nService.collator.compare(a.name, b.name)\n : a.name.localeCompare(b.name);\n });\n }\n\n private async error(error: Error) {\n await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: \"error\" as SweetAlertIcon,\n iconHtml: ``,\n input: \"textarea\",\n inputValue: error.message,\n inputAttributes: {\n readonly: \"true\",\n },\n titleText: this.i18nService.t(\"importError\"),\n text: this.i18nService.t(\"importErrorDesc\"),\n showConfirmButton: true,\n confirmButtonText: this.i18nService.t(\"ok\"),\n onOpen: (popupEl) => {\n popupEl.querySelector(\".swal2-textarea\").scrollTo(0, 0);\n },\n });\n }\n\n private getFileContents(file: File): Promise {\n if (this.format === \"1password1pux\") {\n return this.extract1PuxContent(file);\n }\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsText(file, \"utf-8\");\n reader.onload = (evt) => {\n if (this.format === \"lastpasscsv\" && file.type === \"text/html\") {\n const parser = new DOMParser();\n const doc = parser.parseFromString((evt.target as any).result, \"text/html\");\n const pre = doc.querySelector(\"pre\");\n if (pre != null) {\n resolve(pre.textContent);\n return;\n }\n reject();\n return;\n }\n\n resolve((evt.target as any).result);\n };\n reader.onerror = () => {\n reject();\n };\n });\n }\n\n private extract1PuxContent(file: File): Promise {\n return new JSZip()\n .loadAsync(file)\n .then((zip) => {\n return zip.file(\"export.data\").async(\"string\");\n })\n .then(\n function success(content) {\n return content;\n },\n function error(e) {\n return \"\";\n }\n );\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent } from \"jslib-angular/components/password-generator-history.component\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-password-generator-history\",\n templateUrl: \"password-generator-history.component.html\",\n})\nexport class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent {\n constructor(\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService\n ) {\n super(passwordGenerationService, platformUtilsService, i18nService, window);\n }\n}\n","
\n
\n
\n
\n

{{ \"passwordHistory\" | i18n }}

\n \n ×\n \n
\n
\n
    \n
  • \n
    \n
    \n {{ h.date | date: \"medium\" }}\n
\n
\n \n \n \n
\n \n \n
\n
\n {{ \"noPasswordsInList\" | i18n }}\n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\n\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-tools\",\n templateUrl: \"tools.component.html\",\n})\nexport class ToolsComponent implements OnInit {\n canAccessPremium = false;\n\n constructor(private stateService: StateService, private messagingService: MessagingService) {}\n\n async ngOnInit() {\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n}\n","
\n \n
\n","import { Component, Input } from \"@angular/core\";\n\nimport { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from \"jslib-angular/components/add-edit-custom-fields.component\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Component({\n selector: \"app-vault-add-edit-custom-fields\",\n templateUrl: \"add-edit-custom-fields.component.html\",\n})\nexport class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent {\n @Input() viewOnly: boolean;\n @Input() copy: (value: string, typeI18nKey: string, aType: string) => void;\n\n constructor(i18nService: I18nService, eventService: EventService) {\n super(i18nService, eventService);\n }\n}\n","\n

{{ \"customFields\" | i18n }}

\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 \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 \n \n \n {{ \"newCustomField\" | i18n }}\n \n
\n
\n \n \n
\n
\n
\n","import { Component } from \"@angular/core\";\n\nimport { AddEditComponent as BaseAddEditComponent } from \"jslib-angular/components/add-edit.component\";\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { LoginUriView } from \"jslib-common/models/view/loginUriView\";\n\n@Component({\n selector: \"app-vault-add-edit\",\n templateUrl: \"add-edit.component.html\",\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n canAccessPremium: boolean;\n totpCode: string;\n totpCodeFormatted: string;\n totpDash: number;\n totpSec: number;\n totpLow: boolean;\n showRevisionDate = false;\n hasPasswordHistory = false;\n viewingPasswordHistory = false;\n viewOnly = false;\n\n protected totpInterval: number;\n\n constructor(\n cipherService: CipherService,\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n auditService: AuditService,\n stateService: StateService,\n collectionService: CollectionService,\n protected totpService: TotpService,\n protected passwordGenerationService: PasswordGenerationService,\n protected messagingService: MessagingService,\n eventService: EventService,\n protected policyService: PolicyService,\n organizationService: OrganizationService,\n logService: LogService,\n passwordRepromptService: PasswordRepromptService\n ) {\n super(\n cipherService,\n folderService,\n i18nService,\n platformUtilsService,\n auditService,\n stateService,\n collectionService,\n messagingService,\n eventService,\n policyService,\n logService,\n passwordRepromptService,\n organizationService\n );\n }\n\n async ngOnInit() {\n await super.ngOnInit();\n await this.load();\n this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n this.cleanUp();\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n if (\n this.cipher.type === CipherType.Login &&\n this.cipher.login.totp &&\n (this.cipher.organizationUseTotp || this.canAccessPremium)\n ) {\n await this.totpUpdateCode();\n const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n await this.totpTick(interval);\n\n this.totpInterval = window.setInterval(async () => {\n await this.totpTick(interval);\n }, 1000);\n }\n }\n\n toggleFavorite() {\n this.cipher.favorite = !this.cipher.favorite;\n }\n\n launch(uri: LoginUriView) {\n if (!uri.canLaunch) {\n return;\n }\n\n this.platformUtilsService.launchUri(uri.launchUri);\n }\n\n copy(value: string, typeI18nKey: string, aType: string) {\n if (value == null) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (this.editMode) {\n if (typeI18nKey === \"password\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n } else if (aType === \"H_Field\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n }\n }\n }\n\n async generatePassword(): Promise {\n const confirmed = await super.generatePassword();\n if (confirmed) {\n const options = (await this.passwordGenerationService.getOptions())[0];\n this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n }\n return confirmed;\n }\n\n premiumRequired() {\n if (!this.canAccessPremium) {\n this.messagingService.send(\"premiumRequired\");\n return;\n }\n }\n\n upgradeOrganization() {\n this.messagingService.send(\"upgradeOrganization\", {\n organizationId: this.cipher.organizationId,\n });\n }\n\n viewHistory() {\n this.viewingPasswordHistory = !this.viewingPasswordHistory;\n }\n\n protected cleanUp() {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n\n protected async totpUpdateCode() {\n if (\n this.cipher == null ||\n this.cipher.type !== CipherType.Login ||\n this.cipher.login.totp == null\n ) {\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n return;\n }\n\n this.totpCode = await this.totpService.getCode(this.cipher.login.totp);\n if (this.totpCode != null) {\n if (this.totpCode.length > 4) {\n const half = Math.floor(this.totpCode.length / 2);\n this.totpCodeFormatted =\n this.totpCode.substring(0, half) + \" \" + this.totpCode.substring(half);\n } else {\n this.totpCodeFormatted = this.totpCode;\n }\n } else {\n this.totpCodeFormatted = null;\n if (this.totpInterval) {\n window.clearInterval(this.totpInterval);\n }\n }\n }\n\n protected allowOwnershipAssignment() {\n return (\n (!this.editMode || this.cloneMode) &&\n this.ownershipOptions != null &&\n (this.ownershipOptions.length > 1 || !this.allowPersonal)\n );\n }\n\n private async totpTick(intervalSeconds: number) {\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const mod = epoch % intervalSeconds;\n\n this.totpSec = intervalSeconds - mod;\n this.totpDash = +(Math.round(((78.6 / intervalSeconds) * mod + \"e+2\") as any) + \"e-2\");\n this.totpLow = this.totpSec <= 7;\n if (mod === 0) {\n await this.totpUpdateCode();\n }\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from \"jslib-angular/components/attachments.component\";\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\n\n@Component({\n selector: \"app-vault-attachments\",\n templateUrl: \"attachments.component.html\",\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n viewOnly = false;\n\n constructor(\n cipherService: CipherService,\n i18nService: I18nService,\n cryptoService: CryptoService,\n stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n apiService: ApiService,\n logService: LogService\n ) {\n super(\n cipherService,\n i18nService,\n cryptoService,\n platformUtilsService,\n apiService,\n window,\n logService,\n stateService\n );\n }\n\n protected async reupload(attachment: AttachmentView) {\n if (this.showFixOldAttachments(attachment)) {\n await this.reuploadCipherAttachment(attachment, false);\n }\n }\n\n protected showFixOldAttachments(attachment: AttachmentView) {\n return attachment.key == null && this.cipher.organizationId == null;\n }\n}\n","import { Component, Input, ViewChild, ViewContainerRef } from \"@angular/core\";\n\nimport { ModalService } from \"jslib-angular/services/modal.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\nimport { BulkDeleteComponent } from \"./bulk-delete.component\";\nimport { BulkMoveComponent } from \"./bulk-move.component\";\nimport { BulkRestoreComponent } from \"./bulk-restore.component\";\nimport { BulkShareComponent } from \"./bulk-share.component\";\nimport { CiphersComponent } from \"./ciphers.component\";\n\n@Component({\n selector: \"app-vault-bulk-actions\",\n templateUrl: \"bulk-actions.component.html\",\n})\nexport class BulkActionsComponent {\n @Input() ciphersComponent: CiphersComponent;\n @Input() deleted: boolean;\n @Input() organization: Organization;\n\n @ViewChild(\"bulkDeleteTemplate\", { read: ViewContainerRef, static: true })\n bulkDeleteModalRef: ViewContainerRef;\n @ViewChild(\"bulkRestoreTemplate\", { read: ViewContainerRef, static: true })\n bulkRestoreModalRef: ViewContainerRef;\n @ViewChild(\"bulkMoveTemplate\", { read: ViewContainerRef, static: true })\n bulkMoveModalRef: ViewContainerRef;\n @ViewChild(\"bulkShareTemplate\", { read: ViewContainerRef, static: true })\n bulkShareModalRef: ViewContainerRef;\n\n constructor(\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private modalService: ModalService,\n private passwordRepromptService: PasswordRepromptService\n ) {}\n\n async bulkDelete() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkDeleteComponent,\n this.bulkDeleteModalRef,\n (comp) => {\n comp.permanent = this.deleted;\n comp.cipherIds = selectedIds;\n comp.organization = this.organization;\n comp.onDeleted.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkRestore() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkRestoreComponent,\n this.bulkRestoreModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n comp.onRestored.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkShare() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedCiphers = this.ciphersComponent.getSelected();\n if (selectedCiphers.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkShareComponent,\n this.bulkShareModalRef,\n (comp) => {\n comp.ciphers = selectedCiphers;\n comp.onShared.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n async bulkMove() {\n if (!(await this.promptPassword())) {\n return;\n }\n\n const selectedIds = this.ciphersComponent.getSelectedIds();\n if (selectedIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nothingSelected\")\n );\n return;\n }\n\n const [modal] = await this.modalService.openViewRef(\n BulkMoveComponent,\n this.bulkMoveModalRef,\n (comp) => {\n comp.cipherIds = selectedIds;\n comp.onMoved.subscribe(async () => {\n modal.close();\n await this.ciphersComponent.refresh();\n });\n }\n );\n }\n\n selectAll(select: boolean) {\n this.ciphersComponent.selectAll(select);\n }\n\n private async promptPassword() {\n const selectedCiphers = this.ciphersComponent.getSelected();\n const notProtected = !selectedCiphers.find(\n (cipher) => cipher.reprompt !== CipherRepromptType.None\n );\n\n return notProtected || (await this.passwordRepromptService.showPasswordPrompt());\n }\n}\n","
\n \n \n \n
\n \n \n {{ \"moveSelected\" | i18n }}\n \n \n \n {{ \"moveSelectedToOrg\" | i18n }}\n \n \n \n
\n \n \n
\n
\n\n\n\n\n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherBulkDeleteRequest } from \"jslib-common/models/request/cipherBulkDeleteRequest\";\n\n@Component({\n selector: \"app-vault-bulk-delete\",\n templateUrl: \"bulk-delete.component.html\",\n})\nexport class BulkDeleteComponent {\n @Input() cipherIds: string[] = [];\n @Input() permanent = false;\n @Input() organization: Organization;\n @Output() onDeleted = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {}\n\n async submit() {\n if (!this.organization || !this.organization.canEditAnyCollection) {\n await this.deleteCiphers();\n } else {\n await this.deleteCiphersAdmin();\n }\n\n await this.formPromise;\n\n this.onDeleted.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.permanent ? \"permanentlyDeletedItems\" : \"deletedItems\")\n );\n }\n\n private async deleteCiphers() {\n if (this.permanent) {\n this.formPromise = await this.cipherService.deleteManyWithServer(this.cipherIds);\n } else {\n this.formPromise = await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n }\n }\n\n private async deleteCiphersAdmin() {\n const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n if (this.permanent) {\n this.formPromise = await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n } else {\n this.formPromise = await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n }\n }\n}\n","
\n
\n
\n
\n

\n {{ (permanent ? \"permanentlyDeleteSelected\" : \"deleteSelected\") | i18n }}\n

\n \n ×\n \n
\n
\n {{\n (permanent ? \"permanentlyDeleteSelectedItemsDesc\" : \"deleteSelectedItemsDesc\")\n | i18n: cipherIds.length\n }}\n
\n
\n \n \n {{ (permanent ? \"permanentlyDelete\" : \"delete\") | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\n@Component({\n selector: \"app-vault-bulk-move\",\n templateUrl: \"bulk-move.component.html\",\n})\nexport class BulkMoveComponent implements OnInit {\n @Input() cipherIds: string[] = [];\n @Output() onMoved = new EventEmitter();\n\n folderId: string = null;\n folders: FolderView[] = [];\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private folderService: FolderService\n ) {}\n\n async ngOnInit() {\n this.folders = await this.folderService.getAllDecrypted();\n this.folderId = this.folders[0].id;\n }\n\n async submit() {\n this.formPromise = this.cipherService.moveManyWithServer(this.cipherIds, this.folderId);\n await this.formPromise;\n this.onMoved.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"movedItems\"));\n }\n}\n","
\n
\n
\n
\n

\n {{ \"moveSelected\" | i18n }}\n

\n \n ×\n \n
\n
\n

{{ \"moveSelectedItemsDesc\" | i18n: cipherIds.length }}

\n
\n \n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-vault-bulk-restore\",\n templateUrl: \"bulk-restore.component.html\",\n})\nexport class BulkRestoreComponent {\n @Input() cipherIds: string[] = [];\n @Output() onRestored = new EventEmitter();\n\n formPromise: Promise;\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n async submit() {\n this.formPromise = this.cipherService.restoreManyWithServer(this.cipherIds);\n await this.formPromise;\n this.onRestored.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItems\"));\n }\n}\n","
\n
\n
\n
\n

\n {{ \"restoreSelected\" | i18n }}\n

\n \n ×\n \n
\n
\n {{ \"restoreSelectedItemsDesc\" | i18n: cipherIds.length }}\n
\n
\n \n \n {{ \"restore\" | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-bulk-share\",\n templateUrl: \"bulk-share.component.html\",\n})\nexport class BulkShareComponent implements OnInit {\n @Input() ciphers: CipherView[] = [];\n @Input() organizationId: string;\n @Output() onShared = new EventEmitter();\n\n nonShareableCount = 0;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n shareableCiphers: CipherView[] = [];\n formPromise: Promise;\n\n private writeableCollections: CollectionView[] = [];\n\n constructor(\n private cipherService: CipherService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private organizationService: OrganizationService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.shareableCiphers = this.ciphers.filter(\n (c) => !c.hasOldAttachments && c.organizationId == null\n );\n this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.filter((c) => !c.readOnly);\n this.organizations = await this.organizationService.getAll();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n filterCollections() {\n this.selectAll(false);\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit() {\n const checkedCollectionIds = this.collections\n .filter((c) => (c as any).checked)\n .map((c) => c.id);\n try {\n this.formPromise = this.cipherService.shareManyWithServer(\n this.shareableCiphers,\n this.organizationId,\n checkedCollectionIds\n );\n await this.formPromise;\n this.onShared.emit();\n const orgName =\n this.organizations.find((o) => o.id === this.organizationId)?.name ??\n this.i18nService.t(\"organization\");\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemsToOrg\", orgName)\n );\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n\n get canSave() {\n if (\n this.shareableCiphers != null &&\n this.shareableCiphers.length > 0 &&\n this.collections != null\n ) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","
\n
\n
\n
\n

\n {{ \"moveSelectedToOrg\" | i18n }}\n

\n \n ×\n \n
\n
\n

{{ \"moveManyToOrgDesc\" | i18n }}

\n

\n {{\n \"moveSelectedItemsCountDesc\"\n | i18n: this.ciphers.length:shareableCiphers.length:nonShareableCount\n }}\n

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

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n
\n
\n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\n\nimport { CiphersComponent as BaseCiphersComponent } from \"jslib-angular/components/ciphers.component\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TokenService } from \"jslib-common/abstractions/token.service\";\nimport { TotpService } from \"jslib-common/abstractions/totp.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\nconst MaxCheckedCount = 500;\n\n@Component({\n selector: \"app-vault-ciphers\",\n templateUrl: \"ciphers.component.html\",\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n @Input() showAddNew = true;\n @Output() onAttachmentsClicked = new EventEmitter();\n @Output() onShareClicked = new EventEmitter();\n @Output() onCollectionsClicked = new EventEmitter();\n @Output() onCloneClicked = new EventEmitter();\n @Output() onOrganzationBadgeClicked = new EventEmitter();\n\n pagedCiphers: CipherView[] = [];\n pageSize = 200;\n cipherType = CipherType;\n actionPromise: Promise;\n userHasPremiumAccess = false;\n organizations: Organization[] = [];\n profileName: string;\n\n private didScroll = false;\n private pagedCiphersCount = 0;\n private refreshing = false;\n\n constructor(\n searchService: SearchService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected cipherService: CipherService,\n protected eventService: EventService,\n protected totpService: TotpService,\n protected stateService: StateService,\n protected passwordRepromptService: PasswordRepromptService,\n private logService: LogService,\n private organizationService: OrganizationService,\n private tokenService: TokenService\n ) {\n super(searchService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n // load() is called after the page loads and the first sync has completed.\n // Do not use ngOnInit() for anything that requires sync data.\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n await super.load(filter, deleted);\n this.profileName = await this.tokenService.getName();\n this.organizations = await this.organizationService.getAll();\n this.userHasPremiumAccess = await this.stateService.getCanAccessPremium();\n }\n\n loadMore() {\n if (this.ciphers.length <= this.pageSize) {\n return;\n }\n const pagedLength = this.pagedCiphers.length;\n let pagedSize = this.pageSize;\n if (this.refreshing && pagedLength === 0 && this.pagedCiphersCount > this.pageSize) {\n pagedSize = this.pagedCiphersCount;\n }\n if (this.ciphers.length > pagedLength) {\n this.pagedCiphers = this.pagedCiphers.concat(\n this.ciphers.slice(pagedLength, pagedLength + pagedSize)\n );\n }\n this.pagedCiphersCount = this.pagedCiphers.length;\n this.didScroll = this.pagedCiphers.length > this.pageSize;\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter, this.deleted);\n } finally {\n this.refreshing = false;\n }\n }\n\n isPaging() {\n const searching = this.isSearching();\n if (searching && this.didScroll) {\n this.resetPaging();\n }\n return !searching && this.ciphers.length > this.pageSize;\n }\n\n async resetPaging() {\n this.pagedCiphers = [];\n this.loadMore();\n }\n\n async doSearch(indexedCiphers?: CipherView[]) {\n this.ciphers = await this.searchService.searchCiphers(\n this.searchText,\n [this.filter, this.deletedFilter],\n indexedCiphers\n );\n this.resetPaging();\n }\n\n launch(uri: string) {\n this.platformUtilsService.launchUri(uri);\n }\n\n async attachments(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onAttachmentsClicked.emit(c);\n }\n\n async share(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onShareClicked.emit(c);\n }\n\n collections(c: CipherView) {\n this.onCollectionsClicked.emit(c);\n }\n\n async clone(c: CipherView) {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n this.onCloneClicked.emit(c);\n }\n\n async delete(c: CipherView): Promise {\n if (!(await this.repromptCipher(c))) {\n return;\n }\n if (this.actionPromise != null) {\n return;\n }\n const permanent = c.isDeleted;\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n permanent ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(permanent ? \"permanentlyDeleteItem\" : \"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.deleteCipher(c.id, permanent);\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(permanent ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async restore(c: CipherView): Promise {\n if (this.actionPromise != null || !c.isDeleted) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.cipherService.restoreWithServer(c.id);\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.refresh();\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {\n if (\n this.passwordRepromptService.protectedFields().includes(aType) &&\n !(await this.repromptCipher(cipher))\n ) {\n return;\n }\n\n if (value == null || (aType === \"TOTP\" && !this.displayTotpCopyButton(cipher))) {\n return;\n } else if (value === cipher.login.totp) {\n value = await this.totpService.getCode(value);\n }\n\n if (!cipher.viewPassword) {\n return;\n }\n\n this.platformUtilsService.copyToClipboard(value, { window: window });\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(typeI18nKey))\n );\n\n if (typeI18nKey === \"password\" || typeI18nKey === \"verificationCodeTotp\") {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);\n } else if (typeI18nKey === \"securityCode\") {\n this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n }\n }\n\n selectAll(select: boolean) {\n if (select) {\n this.selectAll(false);\n }\n const selectCount =\n select && this.ciphers.length > MaxCheckedCount ? MaxCheckedCount : this.ciphers.length;\n for (let i = 0; i < selectCount; i++) {\n this.checkCipher(this.ciphers[i], select);\n }\n }\n\n checkCipher(c: CipherView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n getSelected(): CipherView[] {\n if (this.ciphers == null) {\n return [];\n }\n return this.ciphers.filter((c) => !!(c as any).checked);\n }\n\n getSelectedIds(): string[] {\n return this.getSelected().map((c) => c.id);\n }\n\n displayTotpCopyButton(cipher: CipherView) {\n return (\n (cipher?.login?.hasTotp ?? false) && (cipher.organizationUseTotp || this.userHasPremiumAccess)\n );\n }\n\n async selectCipher(cipher: CipherView) {\n if (await this.repromptCipher(cipher)) {\n super.selectCipher(cipher);\n }\n }\n\n onOrganizationClicked(organizationId: string) {\n this.onOrganzationBadgeClicked.emit(organizationId);\n }\n\n protected deleteCipher(id: string, permanent: boolean) {\n return permanent\n ? this.cipherService.deleteWithServer(id)\n : this.cipherService.softDeleteWithServer(id);\n }\n\n protected showFixOldAttachments(c: CipherView) {\n return c.hasOldAttachments && c.organizationId == null;\n }\n\n protected async repromptCipher(c: CipherView) {\n return (\n c.reprompt === CipherRepromptType.None ||\n (await this.passwordRepromptService.showPasswordPrompt())\n );\n }\n}\n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { CollectionsComponent as BaseCollectionsComponent } from \"jslib-angular/components/collections.component\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-collections\",\n templateUrl: \"collections.component.html\",\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n logService: LogService\n ) {\n super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n this.collections.forEach((c) => this.check(c, select));\n }\n}\n","import { Component } from \"@angular/core\";\n\nimport { FolderAddEditComponent as BaseFolderAddEditComponent } from \"jslib-angular/components/folder-add-edit.component\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Component({\n selector: \"app-folder-add-edit\",\n templateUrl: \"folder-add-edit.component.html\",\n})\nexport class FolderAddEditComponent extends BaseFolderAddEditComponent {\n constructor(\n folderService: FolderService,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n logService: LogService\n ) {\n super(folderService, i18nService, platformUtilsService, logService);\n }\n}\n","
\n
\n \n
\n

{{ title }}

\n \n ×\n \n
\n
\n \n \n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n
\n
\n","import { Component, OnDestroy } from \"@angular/core\";\n\nimport { ShareComponent as BaseShareComponent } from \"jslib-angular/components/share.component\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Component({\n selector: \"app-vault-share\",\n templateUrl: \"share.component.html\",\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n constructor(\n collectionService: CollectionService,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n cipherService: CipherService,\n organizationService: OrganizationService,\n logService: LogService\n ) {\n super(\n collectionService,\n platformUtilsService,\n i18nService,\n cipherService,\n logService,\n organizationService\n );\n }\n\n ngOnDestroy() {\n this.selectAll(false);\n }\n\n check(c: CollectionView, select?: boolean) {\n (c as any).checked = select == null ? !(c as any).checked : select;\n }\n\n selectAll(select: boolean) {\n const collections = select ? this.collections : this.writeableCollections;\n collections.forEach((c) => this.check(c, select));\n }\n}\n","
\n
\n
\n
\n

\n {{ \"moveToOrganization\" | i18n }}\n {{ cipher.name }}\n

\n \n ×\n \n
\n
\n {{ \"noOrganizationsList\" | i18n }}\n
\n
\n

{{ \"moveToOrgDesc\" | i18n }}

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

{{ \"collections\" | i18n }}

\n
\n \n \n
\n
\n
\n {{ \"noCollectionsInList\" | i18n }}\n
\n \n \n \n \n \n \n \n
\n \n \n {{ c.name }}\n
\n
\n
\n \n \n {{ \"save\" | i18n }}\n \n \n {{ \"newOrganization\" | i18n }}\n \n \n
\n
\n
\n
\n","import { NgModule } from \"@angular/core\";\nimport { RouterModule, Routes } from \"@angular/router\";\n\nconst routes: Routes = [{ path: \"**\", redirectTo: \"\" }];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class WildcardRoutingModule {}\n","import {\n Account as BaseAccount,\n AccountSettings as BaseAccountSettings,\n} from \"jslib-common/models/domain/account\";\n\nexport class AccountSettings extends BaseAccountSettings {\n vaultTimeout: number = process.env.NODE_ENV === \"development\" ? null : 15;\n}\n\nexport class Account extends BaseAccount {\n settings?: AccountSettings = new AccountSettings();\n\n constructor(init: Partial) {\n super(init);\n Object.assign(this.settings, {\n ...new AccountSettings(),\n ...this.settings,\n });\n }\n}\n","import { ThemeType } from \"jslib-common/enums/themeType\";\nimport { GlobalState as BaseGlobalState } from \"jslib-common/models/domain/globalState\";\n\nexport class GlobalState extends BaseGlobalState {\n theme?: ThemeType = ThemeType.Light;\n rememberEmail = true;\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService } from \"jslib-common/abstractions/broadcaster.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\n\n@Injectable()\nexport class BroadcasterMessagingService implements MessagingService {\n constructor(private broadcasterService: BroadcasterService) {}\n\n send(subscriber: string, arg: any = {}) {\n const message = Object.assign({}, { command: subscriber }, arg);\n this.broadcasterService.send(message);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { StorageService } from \"jslib-common/abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"jslib-common/enums/htmlStorageLocation\";\nimport { StorageOptions } from \"jslib-common/models/domain/storageOptions\";\n\n@Injectable()\nexport class HtmlStorageService implements StorageService {\n get defaultOptions(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Session };\n }\n\n get(key: string, options: StorageOptions = this.defaultOptions): Promise {\n let json: string = null;\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n json = window.localStorage.getItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n json = window.sessionStorage.getItem(key);\n break;\n }\n\n if (json != null) {\n const obj = JSON.parse(json);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string, options: StorageOptions = this.defaultOptions): Promise {\n return (await this.get(key, options)) != null;\n }\n\n save(key: string, obj: any, options: StorageOptions = this.defaultOptions): Promise {\n if (obj == null) {\n return this.remove(key, options);\n }\n\n if (obj instanceof Set) {\n obj = Array.from(obj);\n }\n\n const json = JSON.stringify(obj);\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.setItem(key, json);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.setItem(key, json);\n break;\n }\n return Promise.resolve();\n }\n\n remove(key: string, options: StorageOptions = this.defaultOptions): Promise {\n switch (options.htmlStorageLocation) {\n case HtmlStorageLocation.Local:\n window.localStorage.removeItem(key);\n break;\n case HtmlStorageLocation.Session:\n default:\n window.sessionStorage.removeItem(key);\n break;\n }\n return Promise.resolve();\n }\n}\n","import { I18nService as BaseI18nService } from \"jslib-common/services/i18n.service\";\n\nexport class I18nService extends BaseI18nService {\n constructor(systemLanguage: string, localesDirectory: string) {\n super(systemLanguage || \"en-US\", localesDirectory, async (formattedLocale: string) => {\n const filePath =\n this.localesDirectory +\n \"/\" +\n formattedLocale +\n \"/messages.json?cache=\" +\n process.env.CACHE_TAG;\n const localesResult = await fetch(filePath);\n const locales = await localesResult.json();\n return locales;\n });\n\n // Please leave 'en' where it is, as it's our fallback language in case no translation can be found\n this.supportedTranslationLocales = [\n \"en\",\n \"af\",\n \"az\",\n \"be\",\n \"bg\",\n \"bn\",\n \"bs\",\n \"ca\",\n \"cs\",\n \"da\",\n \"de\",\n \"el\",\n \"en-GB\",\n \"en-IN\",\n \"eo\",\n \"es\",\n \"et\",\n \"fi\",\n \"fil\",\n \"fr\",\n \"he\",\n \"hi\",\n \"hr\",\n \"hu\",\n \"id\",\n \"it\",\n \"ja\",\n \"ka\",\n \"km\",\n \"kn\",\n \"ko\",\n \"lv\",\n \"ml\",\n \"nb\",\n \"nl\",\n \"nn\",\n \"pl\",\n \"pt-PT\",\n \"pt-BR\",\n \"ro\",\n \"ru\",\n \"si\",\n \"sk\",\n \"sl\",\n \"sr\",\n \"sv\",\n \"tr\",\n \"uk\",\n \"vi\",\n \"zh-CN\",\n \"zh-TW\",\n ];\n }\n}\n","import { StorageService } from \"jslib-common/abstractions/storage.service\";\n\nexport class MemoryStorageService implements StorageService {\n private store = new Map();\n\n get(key: string): Promise {\n if (this.store.has(key)) {\n const obj = this.store.get(key);\n return Promise.resolve(obj as T);\n }\n return Promise.resolve(null);\n }\n\n async has(key: string): Promise {\n return this.get(key) != null;\n }\n\n save(key: string, obj: any): Promise {\n if (obj == null) {\n return this.remove(key);\n }\n this.store.set(key, obj);\n return Promise.resolve();\n }\n\n remove(key: string): Promise {\n this.store.delete(key);\n return Promise.resolve();\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { PasswordRepromptService as BasePasswordRepromptService } from \"jslib-angular/services/passwordReprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../app/components/password-reprompt.component\";\n\n@Injectable()\nexport class PasswordRepromptService extends BasePasswordRepromptService {\n component = PasswordRepromptComponent;\n}\n","import { CipherData } from \"jslib-common/models/data/cipherData\";\nimport { CollectionData } from \"jslib-common/models/data/collectionData\";\nimport { FolderData } from \"jslib-common/models/data/folderData\";\nimport { SendData } from \"jslib-common/models/data/sendData\";\nimport { StorageOptions } from \"jslib-common/models/domain/storageOptions\";\nimport { StateService as BaseStateService } from \"jslib-common/services/state.service\";\n\nimport { StateService as StateServiceAbstraction } from \"../abstractions/state.service\";\nimport { Account } from \"../models/account\";\nimport { GlobalState } from \"../models/globalState\";\n\nexport class StateService\n extends BaseStateService\n implements StateServiceAbstraction\n{\n async addAccount(account: Account) {\n // Apply web overides to default account values\n account = new Account(account);\n await super.addAccount(account);\n }\n\n async getRememberEmail(options?: StorageOptions) {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberEmail;\n }\n\n async setRememberEmail(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedCiphers(options);\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedCiphers(value, options);\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedCollections(options);\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedCollections(value, options);\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedFolders(options);\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedFolders(value, options);\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getEncryptedSends(options);\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setEncryptedSends(value, options);\n }\n\n override async getLastSync(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.getLastSync(options);\n }\n\n override async setLastSync(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n return await super.setLastSync(value, options);\n }\n}\n","import { StateMigrationService as BaseStateMigrationService } from \"jslib-common/services/stateMigration.service\";\n\nimport { Account } from \"../models/account\";\nimport { GlobalState } from \"../models/globalState\";\n\nexport class StateMigrationService extends BaseStateMigrationService {\n protected async migrationStateFrom1To2(): Promise {\n await super.migrateStateFrom1To2();\n const globals = (await this.get(\"global\")) ?? this.stateFactory.createGlobal(null);\n globals.rememberEmail = (await this.get(\"rememberEmail\")) ?? globals.rememberEmail;\n await this.set(\"global\", globals);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport Swal, { SweetAlertIcon } from \"sweetalert2\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { ClientType } from \"jslib-common/enums/clientType\";\nimport { DeviceType } from \"jslib-common/enums/deviceType\";\nimport { ThemeType } from \"jslib-common/enums/themeType\";\n\n@Injectable()\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n private browserCache: DeviceType = null;\n private prefersColorSchemeDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n constructor(\n private i18nService: I18nService,\n private messagingService: MessagingService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n getDevice(): DeviceType {\n if (this.browserCache != null) {\n return this.browserCache;\n }\n\n if (\n navigator.userAgent.indexOf(\" Firefox/\") !== -1 ||\n navigator.userAgent.indexOf(\" Gecko/\") !== -1\n ) {\n this.browserCache = DeviceType.FirefoxBrowser;\n } else if (navigator.userAgent.indexOf(\" OPR/\") >= 0) {\n this.browserCache = DeviceType.OperaBrowser;\n } else if (navigator.userAgent.indexOf(\" Edg/\") !== -1) {\n this.browserCache = DeviceType.EdgeBrowser;\n } else if (navigator.userAgent.indexOf(\" Vivaldi/\") !== -1) {\n this.browserCache = DeviceType.VivaldiBrowser;\n } else if (\n navigator.userAgent.indexOf(\" Safari/\") !== -1 &&\n navigator.userAgent.indexOf(\"Chrome\") === -1\n ) {\n this.browserCache = DeviceType.SafariBrowser;\n } else if ((window as any).chrome && navigator.userAgent.indexOf(\" Chrome/\") !== -1) {\n this.browserCache = DeviceType.ChromeBrowser;\n } else if (navigator.userAgent.indexOf(\" Trident/\") !== -1) {\n this.browserCache = DeviceType.IEBrowser;\n } else {\n this.browserCache = DeviceType.UnknownBrowser;\n }\n\n return this.browserCache;\n }\n\n getDeviceString(): string {\n const device = DeviceType[this.getDevice()].toLowerCase();\n return device.replace(\"browser\", \"\");\n }\n\n getClientType() {\n return ClientType.Web;\n }\n\n isFirefox(): boolean {\n return this.getDevice() === DeviceType.FirefoxBrowser;\n }\n\n isChrome(): boolean {\n return this.getDevice() === DeviceType.ChromeBrowser;\n }\n\n isEdge(): boolean {\n return this.getDevice() === DeviceType.EdgeBrowser;\n }\n\n isOpera(): boolean {\n return this.getDevice() === DeviceType.OperaBrowser;\n }\n\n isVivaldi(): boolean {\n return this.getDevice() === DeviceType.VivaldiBrowser;\n }\n\n isSafari(): boolean {\n return this.getDevice() === DeviceType.SafariBrowser;\n }\n\n isMacAppStore(): boolean {\n return false;\n }\n\n isViewOpen(): Promise {\n return Promise.resolve(false);\n }\n\n launchUri(uri: string, options?: any): void {\n const a = document.createElement(\"a\");\n a.href = uri;\n if (options == null || !options.sameWindow) {\n a.target = \"_blank\";\n a.rel = \"noreferrer noopener\";\n }\n a.classList.add(\"d-none\");\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n\n saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void {\n let blob: Blob = null;\n let type: string = null;\n const fileNameLower = fileName.toLowerCase();\n let doDownload = true;\n if (fileNameLower.endsWith(\".pdf\")) {\n type = \"application/pdf\";\n doDownload = false;\n } else if (fileNameLower.endsWith(\".xlsx\")) {\n type = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n } else if (fileNameLower.endsWith(\".docx\")) {\n type = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n } else if (fileNameLower.endsWith(\".pptx\")) {\n type = \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n } else if (fileNameLower.endsWith(\".csv\")) {\n type = \"text/csv\";\n } else if (fileNameLower.endsWith(\".png\")) {\n type = \"image/png\";\n } else if (fileNameLower.endsWith(\".jpg\") || fileNameLower.endsWith(\".jpeg\")) {\n type = \"image/jpeg\";\n } else if (fileNameLower.endsWith(\".gif\")) {\n type = \"image/gif\";\n }\n if (type != null) {\n blobOptions = blobOptions || {};\n if (blobOptions.type == null) {\n blobOptions.type = type;\n }\n }\n if (blobOptions != null) {\n blob = new Blob([blobData], blobOptions);\n } else {\n blob = new Blob([blobData]);\n }\n\n const a = win.document.createElement(\"a\");\n if (doDownload) {\n a.download = fileName;\n } else if (!this.isSafari()) {\n a.target = \"_blank\";\n }\n a.href = URL.createObjectURL(blob);\n a.style.position = \"fixed\";\n win.document.body.appendChild(a);\n a.click();\n win.document.body.removeChild(a);\n }\n\n getApplicationVersion(): Promise {\n return Promise.resolve(process.env.APPLICATION_VERSION || \"-\");\n }\n\n supportsWebAuthn(win: Window): boolean {\n return typeof PublicKeyCredential !== \"undefined\";\n }\n\n supportsDuo(): boolean {\n return true;\n }\n\n showToast(\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: any\n ): void {\n this.messagingService.send(\"showToast\", {\n text: text,\n title: title,\n type: type,\n options: options,\n });\n }\n\n async showDialog(\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml = false\n ) {\n let iconClasses: string = null;\n if (type != null) {\n // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n switch (type) {\n case \"success\":\n iconClasses = \"bwi-check text-success\";\n break;\n case \"warning\":\n iconClasses = \"bwi-exclamation-triangle text-warning\";\n break;\n case \"error\":\n iconClasses = \"bwi-error text-danger\";\n break;\n case \"info\":\n iconClasses = \"bwi-info-circle text-info\";\n break;\n default:\n break;\n }\n }\n\n const bootstrapModal = document.querySelector(\"div.modal\");\n if (bootstrapModal != null) {\n bootstrapModal.removeAttribute(\"tabindex\");\n }\n\n const iconHtmlStr =\n iconClasses != null ? `` : undefined;\n const confirmed = await Swal.fire({\n heightAuto: false,\n buttonsStyling: false,\n icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n iconHtml: iconHtmlStr,\n text: bodyIsHtml ? null : body,\n html: bodyIsHtml ? body : null,\n titleText: title,\n showCancelButton: cancelText != null,\n cancelButtonText: cancelText,\n showConfirmButton: true,\n confirmButtonText: confirmText == null ? this.i18nService.t(\"ok\") : confirmText,\n });\n\n if (bootstrapModal != null) {\n bootstrapModal.setAttribute(\"tabindex\", \"-1\");\n }\n\n return confirmed.value;\n }\n\n isDev(): boolean {\n return false;\n }\n\n isSelfHost(): boolean {\n return false;\n }\n\n copyToClipboard(text: string, options?: any): void | boolean {\n let win = window;\n let doc = window.document;\n if (options && (options.window || options.win)) {\n win = options.window || options.win;\n doc = win.document;\n } else if (options && options.doc) {\n doc = options.doc;\n }\n if ((win as any).clipboardData && (win as any).clipboardData.setData) {\n // IE specific code path to prevent textarea being shown while dialog is visible.\n (win as any).clipboardData.setData(\"Text\", text);\n } else if (doc.queryCommandSupported && doc.queryCommandSupported(\"copy\")) {\n const textarea = doc.createElement(\"textarea\");\n textarea.textContent = text;\n // Prevent scrolling to bottom of page in MS Edge.\n textarea.style.position = \"fixed\";\n let copyEl = doc.body;\n // For some reason copy command won't work when modal is open if appending to body\n if (doc.body.classList.contains(\"modal-open\")) {\n copyEl = doc.body.querySelector(\".modal\");\n }\n copyEl.appendChild(textarea);\n textarea.select();\n let success = false;\n try {\n // Security exception may be thrown by some browsers.\n success = doc.execCommand(\"copy\");\n if (!success) {\n this.logService.debug(\"Copy command unsupported or disabled.\");\n }\n } catch (e) {\n // eslint-disable-next-line\n console.warn(\"Copy to clipboard failed.\", e);\n } finally {\n copyEl.removeChild(textarea);\n }\n return success;\n }\n }\n\n readFromClipboard(options?: any): Promise {\n throw new Error(\"Cannot read from clipboard on web.\");\n }\n\n supportsBiometric() {\n return Promise.resolve(false);\n }\n\n authenticateBiometric() {\n return Promise.resolve(false);\n }\n\n supportsSecureStorage() {\n return false;\n }\n\n getDefaultSystemTheme(): Promise {\n return Promise.resolve(this.prefersColorSchemeDark.matches ? ThemeType.Dark : ThemeType.Light);\n }\n\n async getEffectiveTheme(): Promise {\n const theme = await this.stateService.getTheme();\n if (theme === ThemeType.Dark) {\n return ThemeType.Dark;\n } else if (theme === ThemeType.System) {\n return this.getDefaultSystemTheme();\n } else {\n return ThemeType.Light;\n }\n }\n\n onDefaultSystemThemeChange(callback: (theme: ThemeType.Light | ThemeType.Dark) => unknown) {\n try {\n this.prefersColorSchemeDark.addEventListener(\"change\", ({ matches }) => {\n callback(matches ? ThemeType.Dark : ThemeType.Light);\n });\n } catch (e) {\n // Safari older than v14\n this.prefersColorSchemeDark.addListener((ev) => {\n callback(ev.matches ? ThemeType.Dark : ThemeType.Light);\n });\n }\n }\n}\n","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport { Directive, Input, OnChanges, SimpleChanges } from \"@angular/core\";\n\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { FieldType } from \"jslib-common/enums/fieldType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { FieldView } from \"jslib-common/models/view/fieldView\";\n\n@Directive()\nexport class AddEditCustomFieldsComponent implements OnChanges {\n @Input() cipher: CipherView;\n @Input() thisCipherType: CipherType;\n @Input() editMode: boolean;\n\n addFieldType: FieldType = FieldType.Text;\n addFieldTypeOptions: any[];\n addFieldLinkedTypeOption: any;\n linkedFieldOptions: any[] = [];\n\n cipherType = CipherType;\n fieldType = FieldType;\n eventType = EventType;\n\n constructor(private i18nService: I18nService, private eventService: EventService) {\n this.addFieldTypeOptions = [\n { name: i18nService.t(\"cfTypeText\"), value: FieldType.Text },\n { name: i18nService.t(\"cfTypeHidden\"), value: FieldType.Hidden },\n { name: i18nService.t(\"cfTypeBoolean\"), value: FieldType.Boolean },\n ];\n this.addFieldLinkedTypeOption = {\n name: this.i18nService.t(\"cfTypeLinked\"),\n value: FieldType.Linked,\n };\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.thisCipherType != null) {\n this.setLinkedFieldOptions();\n\n if (!changes.thisCipherType.firstChange) {\n this.resetCipherLinkedFields();\n }\n }\n }\n\n addField() {\n if (this.cipher.fields == null) {\n this.cipher.fields = [];\n }\n\n const f = new FieldView();\n f.type = this.addFieldType;\n f.newField = true;\n\n if (f.type === FieldType.Linked) {\n f.linkedId = this.linkedFieldOptions[0].value;\n }\n\n this.cipher.fields.push(f);\n }\n\n removeField(field: FieldView) {\n const i = this.cipher.fields.indexOf(field);\n if (i > -1) {\n this.cipher.fields.splice(i, 1);\n }\n }\n\n toggleFieldValue(field: FieldView) {\n const f = field as any;\n f.showValue = !f.showValue;\n if (this.editMode && f.showValue) {\n this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n drop(event: CdkDragDrop) {\n moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n }\n\n private setLinkedFieldOptions() {\n if (this.cipher.linkedFieldOptions == null) {\n return;\n }\n\n const options: any = [];\n this.cipher.linkedFieldOptions.forEach((linkedFieldOption, id) =>\n options.push({ name: this.i18nService.t(linkedFieldOption.i18nKey), value: id })\n );\n this.linkedFieldOptions = options.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n private resetCipherLinkedFields() {\n if (this.cipher.fields == null || this.cipher.fields.length === 0) {\n return;\n }\n\n // Delete any Linked custom fields if the item type does not support them\n if (this.cipher.linkedFieldOptions == null) {\n this.cipher.fields = this.cipher.fields.filter((f) => f.type !== FieldType.Linked);\n return;\n }\n\n this.cipher.fields\n .filter((f) => f.type === FieldType.Linked)\n .forEach((f) => (f.linkedId = this.linkedFieldOptions[0].value));\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { AuditService } from \"jslib-common/abstractions/audit.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordRepromptService } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherRepromptType } from \"jslib-common/enums/cipherRepromptType\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { SecureNoteType } from \"jslib-common/enums/secureNoteType\";\nimport { UriMatchType } from \"jslib-common/enums/uriMatchType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CardView } from \"jslib-common/models/view/cardView\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\nimport { IdentityView } from \"jslib-common/models/view/identityView\";\nimport { LoginUriView } from \"jslib-common/models/view/loginUriView\";\nimport { LoginView } from \"jslib-common/models/view/loginView\";\nimport { SecureNoteView } from \"jslib-common/models/view/secureNoteView\";\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() cloneMode = false;\n @Input() folderId: string = null;\n @Input() cipherId: string;\n @Input() type: CipherType;\n @Input() collectionIds: string[];\n @Input() organizationId: string = null;\n @Output() onSavedCipher = new EventEmitter();\n @Output() onDeletedCipher = new EventEmitter();\n @Output() onRestoredCipher = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n @Output() onEditAttachments = new EventEmitter();\n @Output() onShareCipher = new EventEmitter();\n @Output() onEditCollections = new EventEmitter();\n @Output() onGeneratePassword = new EventEmitter();\n @Output() onGenerateUsername = new EventEmitter();\n\n editMode = false;\n cipher: CipherView;\n folders: FolderView[];\n collections: CollectionView[] = [];\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n restorePromise: Promise;\n checkPasswordPromise: Promise;\n showPassword = false;\n showCardNumber = false;\n showCardCode = false;\n cipherType = CipherType;\n typeOptions: any[];\n cardBrandOptions: any[];\n cardExpMonthOptions: any[];\n identityTitleOptions: any[];\n uriMatchOptions: any[];\n ownershipOptions: any[] = [];\n autofillOnPageLoadOptions: any[];\n currentDate = new Date();\n allowPersonal = true;\n reprompt = false;\n canUseReprompt = true;\n\n protected writeableCollections: CollectionView[];\n private previousCipherId: string;\n\n constructor(\n protected cipherService: CipherService,\n protected folderService: FolderService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected auditService: AuditService,\n protected stateService: StateService,\n protected collectionService: CollectionService,\n protected messagingService: MessagingService,\n protected eventService: EventService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected passwordRepromptService: PasswordRepromptService,\n private organizationService: OrganizationService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"typeLogin\"), value: CipherType.Login },\n { name: i18nService.t(\"typeCard\"), value: CipherType.Card },\n { name: i18nService.t(\"typeIdentity\"), value: CipherType.Identity },\n { name: i18nService.t(\"typeSecureNote\"), value: CipherType.SecureNote },\n ];\n this.cardBrandOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"Visa\", value: \"Visa\" },\n { name: \"Mastercard\", value: \"Mastercard\" },\n { name: \"American Express\", value: \"Amex\" },\n { name: \"Discover\", value: \"Discover\" },\n { name: \"Diners Club\", value: \"Diners Club\" },\n { name: \"JCB\", value: \"JCB\" },\n { name: \"Maestro\", value: \"Maestro\" },\n { name: \"UnionPay\", value: \"UnionPay\" },\n { name: \"RuPay\", value: \"RuPay\" },\n { name: i18nService.t(\"other\"), value: \"Other\" },\n ];\n this.cardExpMonthOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: \"01 - \" + i18nService.t(\"january\"), value: \"1\" },\n { name: \"02 - \" + i18nService.t(\"february\"), value: \"2\" },\n { name: \"03 - \" + i18nService.t(\"march\"), value: \"3\" },\n { name: \"04 - \" + i18nService.t(\"april\"), value: \"4\" },\n { name: \"05 - \" + i18nService.t(\"may\"), value: \"5\" },\n { name: \"06 - \" + i18nService.t(\"june\"), value: \"6\" },\n { name: \"07 - \" + i18nService.t(\"july\"), value: \"7\" },\n { name: \"08 - \" + i18nService.t(\"august\"), value: \"8\" },\n { name: \"09 - \" + i18nService.t(\"september\"), value: \"9\" },\n { name: \"10 - \" + i18nService.t(\"october\"), value: \"10\" },\n { name: \"11 - \" + i18nService.t(\"november\"), value: \"11\" },\n { name: \"12 - \" + i18nService.t(\"december\"), value: \"12\" },\n ];\n this.identityTitleOptions = [\n { name: \"-- \" + i18nService.t(\"select\") + \" --\", value: null },\n { name: i18nService.t(\"mr\"), value: i18nService.t(\"mr\") },\n { name: i18nService.t(\"mrs\"), value: i18nService.t(\"mrs\") },\n { name: i18nService.t(\"ms\"), value: i18nService.t(\"ms\") },\n { name: i18nService.t(\"dr\"), value: i18nService.t(\"dr\") },\n ];\n this.uriMatchOptions = [\n { name: i18nService.t(\"defaultMatchDetection\"), value: null },\n { name: i18nService.t(\"baseDomain\"), value: UriMatchType.Domain },\n { name: i18nService.t(\"host\"), value: UriMatchType.Host },\n { name: i18nService.t(\"startsWith\"), value: UriMatchType.StartsWith },\n { name: i18nService.t(\"regEx\"), value: UriMatchType.RegularExpression },\n { name: i18nService.t(\"exact\"), value: UriMatchType.Exact },\n { name: i18nService.t(\"never\"), value: UriMatchType.Never },\n ];\n this.autofillOnPageLoadOptions = [\n { name: i18nService.t(\"autoFillOnPageLoadUseDefault\"), value: null },\n { name: i18nService.t(\"autoFillOnPageLoadYes\"), value: true },\n { name: i18nService.t(\"autoFillOnPageLoadNo\"), value: false },\n ];\n }\n\n async ngOnInit() {\n await this.init();\n }\n\n async init() {\n if (this.ownershipOptions.length) {\n this.ownershipOptions = [];\n }\n if (await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership)) {\n this.allowPersonal = false;\n } else {\n const myEmail = await this.stateService.getEmail();\n this.ownershipOptions.push({ name: myEmail, value: null });\n }\n\n const orgs = await this.organizationService.getAll();\n orgs.sort(Utils.getSortFunction(this.i18nService, \"name\")).forEach((o) => {\n if (o.enabled && o.status === OrganizationUserStatusType.Confirmed) {\n this.ownershipOptions.push({ name: o.name, value: o.id });\n }\n });\n if (!this.allowPersonal) {\n this.organizationId = this.ownershipOptions[0].value;\n }\n\n this.writeableCollections = await this.loadCollections();\n\n this.canUseReprompt = await this.passwordRepromptService.enabled();\n }\n\n async load() {\n this.editMode = this.cipherId != null;\n if (this.editMode) {\n this.editMode = true;\n if (this.cloneMode) {\n this.cloneMode = true;\n this.title = this.i18nService.t(\"addItem\");\n } else {\n this.title = this.i18nService.t(\"editItem\");\n }\n } else {\n this.title = this.i18nService.t(\"addItem\");\n }\n\n const addEditCipherInfo: any = await this.stateService.getAddEditCipherInfo();\n if (addEditCipherInfo != null) {\n this.cipher = addEditCipherInfo.cipher;\n this.collectionIds = addEditCipherInfo.collectionIds;\n }\n await this.stateService.setAddEditCipherInfo(null);\n\n if (this.cipher == null) {\n if (this.editMode) {\n const cipher = await this.loadCipher();\n this.cipher = await cipher.decrypt();\n\n // Adjust Cipher Name if Cloning\n if (this.cloneMode) {\n this.cipher.name += \" - \" + this.i18nService.t(\"clone\");\n // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n if (this.cipher.organizationId == null && !this.allowPersonal) {\n this.cipher.organizationId = this.organizationId;\n }\n }\n } else {\n this.cipher = new CipherView();\n this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n this.cipher.folderId = this.folderId;\n this.cipher.type = this.type == null ? CipherType.Login : this.type;\n this.cipher.login = new LoginView();\n this.cipher.login.uris = [new LoginUriView()];\n this.cipher.card = new CardView();\n this.cipher.identity = new IdentityView();\n this.cipher.secureNote = new SecureNoteView();\n this.cipher.secureNote.type = SecureNoteType.Generic;\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n await this.organizationChanged();\n if (\n this.collectionIds != null &&\n this.collectionIds.length > 0 &&\n this.collections.length > 0\n ) {\n this.collections.forEach((c) => {\n if (this.collectionIds.indexOf(c.id) > -1) {\n (c as any).checked = true;\n }\n });\n }\n }\n\n this.folders = await this.folderService.getAllDecrypted();\n\n if (this.editMode && this.previousCipherId !== this.cipherId) {\n this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n }\n this.previousCipherId = this.cipherId;\n this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n }\n\n async submit(): Promise {\n if (this.cipher.isDeleted) {\n return this.restore();\n }\n\n if (this.cipher.name == null || this.cipher.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n !this.allowPersonal &&\n this.cipher.organizationId == null\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"personalOwnershipSubmitError\")\n );\n return false;\n }\n\n if (\n (!this.editMode || this.cloneMode) &&\n this.cipher.type === CipherType.Login &&\n this.cipher.login.uris != null &&\n this.cipher.login.uris.length === 1 &&\n (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === \"\")\n ) {\n this.cipher.login.uris = null;\n }\n\n // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n this.cipher.collectionIds =\n this.collections == null\n ? []\n : this.collections.filter((c) => (c as any).checked).map((c) => c.id);\n }\n\n // Clear current Cipher Id to trigger \"Add\" cipher flow\n if (this.cloneMode) {\n this.cipher.id = null;\n }\n\n const cipher = await this.encryptCipher();\n try {\n this.formPromise = this.saveCipher(cipher);\n await this.formPromise;\n this.cipher.id = cipher.id;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode && !this.cloneMode ? \"editedItem\" : \"addedItem\")\n );\n this.onSavedCipher.emit(this.cipher);\n this.messagingService.send(this.editMode && !this.cloneMode ? \"editedCipher\" : \"addedCipher\");\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n addUri() {\n if (this.cipher.type !== CipherType.Login) {\n return;\n }\n\n if (this.cipher.login.uris == null) {\n this.cipher.login.uris = [];\n }\n\n this.cipher.login.uris.push(new LoginUriView());\n }\n\n removeUri(uri: LoginUriView) {\n if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n return;\n }\n\n const i = this.cipher.login.uris.indexOf(uri);\n if (i > -1) {\n this.cipher.login.uris.splice(i, 1);\n }\n }\n\n trackByFunction(index: number, item: any) {\n return index;\n }\n\n cancel() {\n this.onCancelled.emit(this.cipher);\n }\n\n attachments() {\n this.onEditAttachments.emit(this.cipher);\n }\n\n share() {\n this.onShareCipher.emit(this.cipher);\n }\n\n editCollections() {\n this.onEditCollections.emit(this.cipher);\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\n this.cipher.isDeleted ? \"permanentlyDeleteItemConfirmation\" : \"deleteItemConfirmation\"\n ),\n this.i18nService.t(\"deleteItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.deleteCipher();\n await this.deletePromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.cipher.isDeleted ? \"permanentlyDeletedItem\" : \"deletedItem\")\n );\n this.onDeletedCipher.emit(this.cipher);\n this.messagingService.send(\n this.cipher.isDeleted ? \"permanentlyDeletedCipher\" : \"deletedCipher\"\n );\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async restore(): Promise {\n if (!this.cipher.isDeleted) {\n return false;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"restoreItemConfirmation\"),\n this.i18nService.t(\"restoreItem\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.restorePromise = this.restoreCipher();\n await this.restorePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"restoredItem\"));\n this.onRestoredCipher.emit(this.cipher);\n this.messagingService.send(\"restoredCipher\");\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n async generateUsername(): Promise {\n if (this.cipher.login?.username?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwriteUsernameConfirmation\"),\n this.i18nService.t(\"overwriteUsername\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGenerateUsername.emit();\n return true;\n }\n\n async generatePassword(): Promise {\n if (this.cipher.login?.password?.length) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"overwritePasswordConfirmation\"),\n this.i18nService.t(\"overwritePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\")\n );\n if (!confirmed) {\n return false;\n }\n }\n\n this.onGeneratePassword.emit();\n return true;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"loginPassword\").focus();\n if (this.editMode && this.showPassword) {\n this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n }\n }\n\n async toggleCardNumber() {\n this.showCardNumber = !this.showCardNumber;\n if (this.showCardNumber) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId);\n }\n }\n\n toggleCardCode() {\n this.showCardCode = !this.showCardCode;\n document.getElementById(\"cardCode\").focus();\n if (this.editMode && this.showCardCode) {\n this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n }\n }\n\n toggleUriOptions(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n }\n\n loginUriMatchChanged(uri: LoginUriView) {\n const u = uri as any;\n u.showOptions = u.showOptions == null ? true : u.showOptions;\n }\n\n async organizationChanged() {\n if (this.writeableCollections != null) {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n }\n if (this.cipher.organizationId != null) {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.cipher.organizationId\n );\n const org = await this.organizationService.get(this.cipher.organizationId);\n if (org != null) {\n this.cipher.organizationUseTotp = org.useTotp;\n }\n } else {\n this.collections = [];\n }\n }\n\n async checkPassword() {\n if (this.checkPasswordPromise != null) {\n return;\n }\n\n if (\n this.cipher.login == null ||\n this.cipher.login.password == null ||\n this.cipher.login.password === \"\"\n ) {\n return;\n }\n\n this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n const matches = await this.checkPasswordPromise;\n this.checkPasswordPromise = null;\n\n if (matches > 0) {\n this.platformUtilsService.showToast(\n \"warning\",\n null,\n this.i18nService.t(\"passwordExposed\", matches.toString())\n );\n } else {\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"passwordSafe\"));\n }\n }\n\n repromptChanged() {\n this.reprompt = !this.reprompt;\n if (this.reprompt) {\n this.cipher.reprompt = CipherRepromptType.Password;\n } else {\n this.cipher.reprompt = CipherRepromptType.None;\n }\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter((c) => !c.readOnly);\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected encryptCipher() {\n return this.cipherService.encrypt(this.cipher);\n }\n\n protected saveCipher(cipher: Cipher) {\n return this.cipherService.saveWithServer(cipher);\n }\n\n protected deleteCipher() {\n return this.cipher.isDeleted\n ? this.cipherService.deleteWithServer(this.cipher.id)\n : this.cipherService.softDeleteWithServer(this.cipher.id);\n }\n\n protected restoreCipher() {\n return this.cipherService.restoreWithServer(this.cipher.id);\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\nimport { AttachmentView } from \"jslib-common/models/view/attachmentView\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n @Input() cipherId: string;\n @Output() onUploadedAttachment = new EventEmitter();\n @Output() onDeletedAttachment = new EventEmitter();\n @Output() onReuploadedAttachment = new EventEmitter();\n\n cipher: CipherView;\n cipherDomain: Cipher;\n hasUpdatedKey: boolean;\n canAccessAttachments: boolean;\n formPromise: Promise;\n deletePromises: { [id: string]: Promise } = {};\n reuploadPromises: { [id: string]: Promise } = {};\n emergencyAccessId?: string = null;\n\n constructor(\n protected cipherService: CipherService,\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected win: Window,\n protected logService: LogService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit() {\n if (!this.hasUpdatedKey) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"updateKey\")\n );\n return;\n }\n\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n\n try {\n this.formPromise = this.saveCipherAttachment(files[0]);\n this.cipherDomain = await this.formPromise;\n this.cipher = await this.cipherDomain.decrypt();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"attachmentSaved\"));\n this.onUploadedAttachment.emit();\n } catch (e) {\n this.logService.error(e);\n }\n\n // reset file input\n // ref: https://stackoverflow.com/a/20552042\n fileEl.type = \"\";\n fileEl.type = \"file\";\n fileEl.value = \"\";\n }\n\n async delete(attachment: AttachmentView) {\n if (this.deletePromises[attachment.id] != null) {\n return;\n }\n\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteAttachmentConfirmation\"),\n this.i18nService.t(\"deleteAttachment\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return;\n }\n\n try {\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedAttachment\"));\n const i = this.cipher.attachments.indexOf(attachment);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.deletePromises[attachment.id] = null;\n this.onDeletedAttachment.emit();\n }\n\n async download(attachment: AttachmentView) {\n const a = attachment as any;\n if (a.downloading) {\n return;\n }\n\n if (!this.canAccessAttachments) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"premiumRequiredDesc\")\n );\n return;\n }\n\n let url: string;\n try {\n const attachmentDownloadResponse = await this.apiService.getAttachmentData(\n this.cipher.id,\n attachment.id,\n this.emergencyAccessId\n );\n url = attachmentDownloadResponse.url;\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n url = attachment.url;\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n a.downloading = true;\n const response = await fetch(new Request(url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n const buf = await response.arrayBuffer();\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.platformUtilsService.saveFile(this.win, decBuf, null, attachment.fileName);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n }\n\n protected async init() {\n this.cipherDomain = await this.loadCipher();\n this.cipher = await this.cipherDomain.decrypt();\n\n this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n const canAccessPremium = await this.stateService.getCanAccessPremium();\n this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n if (!this.canAccessAttachments) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"premiumRequiredDesc\"),\n this.i18nService.t(\"premiumRequired\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\"https://vault.bitwarden.com/#/?premium=purchase\");\n }\n } else if (!this.hasUpdatedKey) {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"updateKey\"),\n this.i18nService.t(\"featureUnavailable\"),\n this.i18nService.t(\"learnMore\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n if (confirmed) {\n this.platformUtilsService.launchUri(\n \"https://bitwarden.com/help/account-encryption-key/#rotate-your-encryption-key\"\n );\n }\n }\n }\n\n protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n const a = attachment as any;\n if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n return;\n }\n\n try {\n this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n // 1. Download\n a.downloading = true;\n const response = await fetch(new Request(attachment.url, { cache: \"no-store\" }));\n if (response.status !== 200) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n a.downloading = false;\n return;\n }\n\n try {\n // 2. Resave\n const buf = await response.arrayBuffer();\n const key =\n attachment.key != null\n ? attachment.key\n : await this.cryptoService.getOrgKey(this.cipher.organizationId);\n const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n this.cipherDomain,\n attachment.fileName,\n decBuf,\n admin\n );\n this.cipher = await this.cipherDomain.decrypt();\n\n // 3. Delete old\n this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n await this.deletePromises[attachment.id];\n const foundAttachment = this.cipher.attachments.filter((a2) => a2.id === attachment.id);\n if (foundAttachment.length > 0) {\n const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n if (i > -1) {\n this.cipher.attachments.splice(i, 1);\n }\n }\n\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"attachmentSaved\")\n );\n this.onReuploadedAttachment.emit();\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n\n a.downloading = false;\n });\n await this.reuploadPromises[attachment.id];\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected saveCipherAttachment(file: File) {\n return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n }\n\n protected deleteCipherAttachment(attachmentId: string) {\n return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n }\n}\n","import { Component, Input, OnChanges, OnInit } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Component({\n selector: \"app-avatar\",\n template:\n '\",\n})\nexport class AvatarComponent implements OnChanges, OnInit {\n @Input() data: string;\n @Input() email: string;\n @Input() size = 45;\n @Input() charCount = 2;\n @Input() textColor = \"#ffffff\";\n @Input() fontSize = 20;\n @Input() fontWeight = 300;\n @Input() dynamic = false;\n @Input() circle = false;\n\n src: string;\n\n constructor(\n public sanitizer: DomSanitizer,\n private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService\n ) {}\n\n ngOnInit() {\n if (!this.dynamic) {\n this.generate();\n }\n }\n\n ngOnChanges() {\n if (this.dynamic) {\n this.generate();\n }\n }\n\n private async generate() {\n const enableGravatars = await this.stateService.getEnableGravitars();\n if (enableGravatars && this.email != null) {\n const hashBytes = await this.cryptoFunctionService.hash(\n this.email.toLowerCase().trim(),\n \"md5\"\n );\n const hash = Utils.fromBufferToHex(hashBytes).toLowerCase();\n this.src = \"https://www.gravatar.com/avatar/\" + hash + \"?s=\" + this.size + \"&r=pg&d=retro\";\n } else {\n let chars: string = null;\n const upperData = this.data.toUpperCase();\n\n if (this.charCount > 1) {\n chars = this.getFirstLetters(upperData, this.charCount);\n }\n if (chars == null) {\n chars = this.unicodeSafeSubstring(upperData, this.charCount);\n }\n\n // If the chars contain an emoji, only show it.\n if (chars.match(Utils.regexpEmojiPresentation)) {\n chars = chars.match(Utils.regexpEmojiPresentation)[0];\n }\n\n const charObj = this.getCharText(chars);\n const color = this.stringToColor(upperData);\n const svg = this.getSvg(this.size, color);\n svg.appendChild(charObj);\n const html = window.document.createElement(\"div\").appendChild(svg).outerHTML;\n const svgHtml = window.btoa(unescape(encodeURIComponent(html)));\n this.src = \"data:image/svg+xml;base64,\" + svgHtml;\n }\n }\n\n private stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n let color = \"#\";\n for (let i = 0; i < 3; i++) {\n const value = (hash >> (i * 8)) & 0xff;\n color += (\"00\" + value.toString(16)).substr(-2);\n }\n return color;\n }\n\n private getFirstLetters(data: string, count: number): string {\n const parts = data.split(\" \");\n if (parts.length > 1) {\n let text = \"\";\n for (let i = 0; i < count; i++) {\n text += this.unicodeSafeSubstring(parts[i], 1);\n }\n return text;\n }\n return null;\n }\n\n private getSvg(size: number, color: string): HTMLElement {\n const svgTag = window.document.createElement(\"svg\");\n svgTag.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svgTag.setAttribute(\"pointer-events\", \"none\");\n svgTag.setAttribute(\"width\", size.toString());\n svgTag.setAttribute(\"height\", size.toString());\n svgTag.style.backgroundColor = color;\n svgTag.style.width = size + \"px\";\n svgTag.style.height = size + \"px\";\n return svgTag;\n }\n\n private getCharText(character: string): HTMLElement {\n const textTag = window.document.createElement(\"text\");\n textTag.setAttribute(\"text-anchor\", \"middle\");\n textTag.setAttribute(\"y\", \"50%\");\n textTag.setAttribute(\"x\", \"50%\");\n textTag.setAttribute(\"dy\", \"0.35em\");\n textTag.setAttribute(\"pointer-events\", \"auto\");\n textTag.setAttribute(\"fill\", this.textColor);\n textTag.setAttribute(\n \"font-family\",\n '\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,' +\n 'sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\"'\n );\n textTag.textContent = character;\n textTag.style.fontWeight = this.fontWeight.toString();\n textTag.style.fontSize = this.fontSize + \"px\";\n return textTag;\n }\n\n private unicodeSafeSubstring(str: string, count: number) {\n const characters = str.match(/./gu);\n return characters != null ? characters.slice(0, count).join(\"\") : \"\";\n }\n}\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\n\n@Component({\n selector: \"app-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() clickable: boolean;\n @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;\n @Input() enforcedPolicyMessage: string;\n @Input() useAlertRole = false;\n\n calloutStyle: string;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.calloutStyle = this.type;\n\n if (this.enforcedPolicyMessage === undefined) {\n this.enforcedPolicyMessage = this.i18nService.t(\"masterPasswordPolicyInEffect\");\n }\n\n if (this.type === \"warning\" || this.type === \"danger\") {\n if (this.type === \"danger\") {\n this.calloutStyle = \"danger\";\n }\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"warning\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-exclamation-triangle\";\n }\n } else if (this.type === \"error\") {\n this.calloutStyle = \"danger\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"error\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-error\";\n }\n } else if (this.type === \"tip\") {\n this.calloutStyle = \"success\";\n if (this.title === undefined) {\n this.title = this.i18nService.t(\"tip\");\n }\n if (this.icon === undefined) {\n this.icon = \"bwi-lightbulb\";\n }\n }\n }\n\n getPasswordScoreAlertDisplay() {\n if (this.enforcedPolicyOptions == null) {\n return \"\";\n }\n\n let str: string;\n switch (this.enforcedPolicyOptions.minComplexity) {\n case 4:\n str = this.i18nService.t(\"strong\");\n break;\n case 3:\n str = this.i18nService.t(\"good\");\n break;\n default:\n str = this.i18nService.t(\"weak\");\n break;\n }\n return str + \" (\" + this.enforcedPolicyOptions.minComplexity + \")\";\n }\n}\n","\n

\n \n {{ title }}\n

\n
\n {{ enforcedPolicyMessage }}\n
    \n
  • 0\">\n {{ \"policyInEffectMinComplexity\" | i18n: getPasswordScoreAlertDisplay() }}\n
  • \n
  • 0\">\n {{ \"policyInEffectMinLength\" | i18n: enforcedPolicyOptions?.minLength.toString() }}\n
  • \n
  • \n {{ \"policyInEffectUppercase\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectLowercase\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectNumbers\" | i18n }}\n
  • \n
  • \n {{ \"policyInEffectSpecial\" | i18n: \"!@#$%^&*\" }}\n
  • \n
\n
\n \n\n","import { Directive, Input } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { CaptchaIFrame } from \"jslib-common/misc/captcha_iframe\";\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Directive()\nexport abstract class CaptchaProtectedComponent {\n @Input() captchaSiteKey: string = null;\n captchaToken: string = null;\n captcha: CaptchaIFrame;\n\n constructor(\n protected environmentService: EnvironmentService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService\n ) {}\n\n async setupCaptcha() {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n\n this.captcha = new CaptchaIFrame(\n window,\n webVaultUrl,\n this.i18nService,\n (token: string) => {\n this.captchaToken = token;\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n this.platformUtilsService.showToast(\"info\", this.i18nService.t(\"info\"), info);\n }\n );\n }\n\n showCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n protected handleCaptchaRequired(response: { captchaSiteKey: string }): boolean {\n if (Utils.isNullOrWhitespace(response.captchaSiteKey)) {\n return false;\n }\n\n this.captchaSiteKey = response.captchaSiteKey;\n this.captcha.init(response.captchaSiteKey);\n return true;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { KdfType } from \"jslib-common/enums/kdfType\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\n\n@Directive()\nexport class ChangePasswordComponent implements OnInit {\n masterPassword: string;\n masterPasswordRetype: string;\n formPromise: Promise;\n masterPasswordScore: number;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n protected email: string;\n protected kdf: KdfType;\n protected kdfIterations: number;\n\n private masterPasswordStrengthTimeout: any;\n\n constructor(\n protected i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected messagingService: MessagingService,\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected policyService: PolicyService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit() {\n this.email = await this.stateService.getEmail();\n this.enforcedPolicyOptions ??= await this.policyService.getMasterPasswordPolicyOptions();\n }\n\n async submit() {\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n const email = await this.stateService.getEmail();\n if (this.kdf == null) {\n this.kdf = await this.stateService.getKdfType();\n }\n if (this.kdfIterations == null) {\n this.kdfIterations = await this.stateService.getKdfIterations();\n }\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n let encKey: [SymmetricCryptoKey, EncString] = null;\n const existingEncKey = await this.cryptoService.getEncKey();\n if (existingEncKey == null) {\n encKey = await this.cryptoService.makeEncKey(key);\n } else {\n encKey = await this.cryptoService.remakeEncKey(key);\n }\n\n await this.performSubmitActions(masterPasswordHash, key, encKey);\n }\n\n async setupSubmitActions(): Promise {\n // Override in sub-class\n // Can be used for additional validation and/or other processes the should occur before changing passwords\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n // Override in sub-class\n }\n\n async strongPassword(): Promise {\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassLength\")\n );\n return false;\n }\n if (this.masterPassword !== this.masterPasswordRetype) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassDoesntMatch\")\n );\n return false;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n\n if (\n this.enforcedPolicyOptions != null &&\n !this.policyService.evaluateMasterPassword(\n strengthResult.score,\n this.masterPassword,\n this.enforcedPolicyOptions\n )\n ) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPasswordPolicyRequirementsNotMet\")\n );\n return false;\n }\n\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return false;\n }\n }\n\n return true;\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"logOutConfirmation\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.messagingService.send(\"logout\");\n }\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n return userInput;\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\n@Directive()\nexport class CiphersComponent {\n @Input() activeCipherId: string = null;\n @Output() onCipherClicked = new EventEmitter();\n @Output() onCipherRightClicked = new EventEmitter();\n @Output() onAddCipher = new EventEmitter();\n @Output() onAddCipherOptions = new EventEmitter();\n\n loaded = false;\n ciphers: CipherView[] = [];\n searchText: string;\n searchPlaceholder: string = null;\n filter: (cipher: CipherView) => boolean = null;\n deleted = false;\n\n protected searchPending = false;\n\n private searchTimeout: any = null;\n\n constructor(protected searchService: SearchService) {}\n\n async load(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.deleted = deleted || false;\n await this.applyFilter(filter);\n this.loaded = true;\n }\n\n async reload(filter: (cipher: CipherView) => boolean = null, deleted = false) {\n this.loaded = false;\n await this.load(filter, deleted);\n }\n\n async refresh() {\n await this.reload(this.filter, this.deleted);\n }\n\n async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null, indexedCiphers?: CipherView[]) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n await this.doSearch(indexedCiphers);\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n await this.doSearch(indexedCiphers);\n this.searchPending = false;\n }, timeout);\n }\n\n selectCipher(cipher: CipherView) {\n this.onCipherClicked.emit(cipher);\n }\n\n rightClickCipher(cipher: CipherView) {\n this.onCipherRightClicked.emit(cipher);\n }\n\n addCipher() {\n this.onAddCipher.emit();\n }\n\n addCipherOptions() {\n this.onAddCipherOptions.emit();\n }\n\n isSearching() {\n return !this.searchPending && this.searchService.isSearchable(this.searchText);\n }\n\n protected deletedFilter: (cipher: CipherView) => boolean = (c) => c.isDeleted === this.deleted;\n\n protected async doSearch(indexedCiphers?: CipherView[]) {\n this.ciphers = await this.searchService.searchCiphers(\n this.searchText,\n [this.filter, this.deletedFilter],\n indexedCiphers\n );\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { Cipher } from \"jslib-common/models/domain/cipher\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n @Input() cipherId: string;\n @Input() allowSelectNone = false;\n @Output() onSavedCollections = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collectionIds: string[];\n collections: CollectionView[] = [];\n\n protected cipherDomain: Cipher;\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n this.cipherDomain = await this.loadCipher();\n this.collectionIds = this.loadCipherCollections();\n this.cipher = await this.cipherDomain.decrypt();\n this.collections = await this.loadCollections();\n\n this.collections.forEach((c) => ((c as any).checked = false));\n if (this.collectionIds != null) {\n this.collections.forEach((c) => {\n (c as any).checked = this.collectionIds != null && this.collectionIds.indexOf(c.id) > -1;\n });\n }\n }\n\n async submit() {\n const selectedCollectionIds = this.collections\n .filter((c) => !!(c as any).checked)\n .map((c) => c.id);\n if (!this.allowSelectNone && selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n this.cipherDomain.collectionIds = selectedCollectionIds;\n try {\n this.formPromise = this.saveCollections();\n await this.formPromise;\n this.onSavedCollections.emit();\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"editedItem\"));\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected loadCipher() {\n return this.cipherService.get(this.cipherId);\n }\n\n protected loadCipherCollections() {\n return this.cipherDomain.collectionIds;\n }\n\n protected async loadCollections() {\n const allCollections = await this.collectionService.getAllDecrypted();\n return allCollections.filter(\n (c) => !c.readOnly && c.organizationId === this.cipher.organizationId\n );\n }\n\n protected saveCollections() {\n return this.cipherService.saveCollectionsWithServer(this.cipherDomain);\n }\n}\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n@Component({\n selector: \"app-export-scope-callout\",\n templateUrl: \"export-scope-callout.component.html\",\n})\nexport class ExportScopeCalloutComponent implements OnInit {\n @Input() organizationId: string = null;\n\n show = false;\n scopeConfig: {\n title: string;\n description: string;\n scopeIdentifier: string;\n };\n\n constructor(\n protected organizationService: OrganizationService,\n protected stateService: StateService\n ) {}\n\n async ngOnInit(): Promise {\n if (!(await this.organizationService.hasOrganizations())) {\n return;\n }\n this.scopeConfig =\n this.organizationId != null\n ? {\n title: \"exportingOrganizationVaultTitle\",\n description: \"exportingOrganizationVaultDescription\",\n scopeIdentifier: (await this.organizationService.get(this.organizationId)).name,\n }\n : {\n title: \"exportingPersonalVaultTitle\",\n description: \"exportingPersonalVaultDescription\",\n scopeIdentifier: await this.stateService.getEmail(),\n };\n this.show = true;\n }\n}\n","\n \n {{ scopeConfig.description | i18n: scopeConfig.scopeIdentifier }}\n \n\n","import { Directive, EventEmitter, OnInit, Output } from \"@angular/core\";\nimport { FormBuilder } from \"@angular/forms\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EventService } from \"jslib-common/abstractions/event.service\";\nimport { ExportService } from \"jslib-common/abstractions/export.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { EventType } from \"jslib-common/enums/eventType\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\n\n@Directive()\nexport class ExportComponent implements OnInit {\n @Output() onSaved = new EventEmitter();\n\n formPromise: Promise;\n disabledByPolicy = false;\n\n exportForm = this.formBuilder.group({\n format: [\"json\"],\n secret: [\"\"],\n });\n\n formatOptions = [\n { name: \".json\", value: \"json\" },\n { name: \".csv\", value: \"csv\" },\n { name: \".json (Encrypted)\", value: \"encrypted_json\" },\n ];\n\n constructor(\n protected cryptoService: CryptoService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected exportService: ExportService,\n protected eventService: EventService,\n private policyService: PolicyService,\n protected win: Window,\n private logService: LogService,\n private userVerificationService: UserVerificationService,\n private formBuilder: FormBuilder\n ) {}\n\n async ngOnInit() {\n await this.checkExportDisabled();\n }\n\n async checkExportDisabled() {\n this.disabledByPolicy = await this.policyService.policyAppliesToUser(\n PolicyType.DisablePersonalVaultExport\n );\n if (this.disabledByPolicy) {\n this.exportForm.disable();\n }\n }\n\n get encryptedFormat() {\n return this.format === \"encrypted_json\";\n }\n\n async submit() {\n if (this.disabledByPolicy) {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"personalVaultExportPolicyInEffect\")\n );\n return;\n }\n\n const acceptedWarning = await this.warningDialog();\n if (!acceptedWarning) {\n return;\n }\n\n const secret = this.exportForm.get(\"secret\").value;\n try {\n await this.userVerificationService.verifyUser(secret);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n return;\n }\n\n try {\n this.formPromise = this.getExportData();\n const data = await this.formPromise;\n this.downloadFile(data);\n this.saved();\n await this.collectEvent();\n this.exportForm.get(\"secret\").setValue(\"\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async warningDialog() {\n if (this.encryptedFormat) {\n return await this.platformUtilsService.showDialog(\n \"

\" +\n this.i18nService.t(\"encExportKeyWarningDesc\") +\n \"

\" +\n this.i18nService.t(\"encExportAccountWarningDesc\"),\n this.i18nService.t(\"confirmVaultExport\"),\n this.i18nService.t(\"exportVault\"),\n this.i18nService.t(\"cancel\"),\n \"warning\",\n true\n );\n } else {\n return await this.platformUtilsService.showDialog(\n this.i18nService.t(\"exportWarningDesc\"),\n this.i18nService.t(\"confirmVaultExport\"),\n this.i18nService.t(\"exportVault\"),\n this.i18nService.t(\"cancel\"),\n \"warning\"\n );\n }\n }\n\n protected saved() {\n this.onSaved.emit();\n }\n\n protected getExportData() {\n return this.exportService.getExport(this.format);\n }\n\n protected getFileName(prefix?: string) {\n let extension = this.format;\n if (this.format === \"encrypted_json\") {\n if (prefix == null) {\n prefix = \"encrypted\";\n } else {\n prefix = \"encrypted_\" + prefix;\n }\n extension = \"json\";\n }\n return this.exportService.getFileName(prefix, extension);\n }\n\n protected async collectEvent(): Promise {\n await this.eventService.collect(EventType.User_ClientExportedVault);\n }\n\n get format() {\n return this.exportForm.get(\"format\").value;\n }\n\n private downloadFile(csv: string): void {\n const fileName = this.getFileName();\n this.platformUtilsService.saveFile(this.win, csv, { type: \"text/plain\" }, fileName);\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n @Input() folderId: string;\n @Output() onSavedFolder = new EventEmitter();\n @Output() onDeletedFolder = new EventEmitter();\n\n editMode = false;\n folder: FolderView = new FolderView();\n title: string;\n formPromise: Promise;\n deletePromise: Promise;\n\n constructor(\n protected folderService: FolderService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n await this.init();\n }\n\n async submit(): Promise {\n if (this.folder.name == null || this.folder.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n try {\n const folder = await this.folderService.encrypt(this.folder);\n this.formPromise = this.folderService.saveWithServer(folder);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedFolder\" : \"addedFolder\")\n );\n this.onSavedFolder.emit(this.folder);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n async delete(): Promise {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteFolderConfirmation\"),\n this.i18nService.t(\"deleteFolder\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.folderService.deleteWithServer(this.folder.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedFolder\"));\n this.onDeletedFolder.emit(this.folder);\n } catch (e) {\n this.logService.error(e);\n }\n\n return true;\n }\n\n protected async init() {\n this.editMode = this.folderId != null;\n\n if (this.editMode) {\n this.editMode = true;\n this.title = this.i18nService.t(\"editFolder\");\n const folder = await this.folderService.get(this.folderId);\n this.folder = await folder.decrypt();\n } else {\n this.title = this.i18nService.t(\"addFolder\");\n }\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UsernameGenerationService } from \"jslib-common/abstractions/usernameGeneration.service\";\nimport { PasswordGeneratorPolicyOptions } from \"jslib-common/models/domain/passwordGeneratorPolicyOptions\";\n\n@Directive()\nexport class GeneratorComponent implements OnInit {\n @Input() comingFromAddEdit = false;\n @Input() type: string;\n @Output() onSelected = new EventEmitter();\n\n usernameGeneratingPromise: Promise;\n typeOptions: any[];\n passTypeOptions: any[];\n usernameTypeOptions: any[];\n subaddressOptions: any[];\n catchallOptions: any[];\n forwardOptions: any[];\n usernameOptions: any = {};\n passwordOptions: any = {};\n username = \"-\";\n password = \"-\";\n showOptions = false;\n avoidAmbiguous = false;\n enforcedPasswordPolicyOptions: PasswordGeneratorPolicyOptions;\n usernameWebsite: string = null;\n\n constructor(\n protected passwordGenerationService: PasswordGenerationService,\n protected usernameGenerationService: UsernameGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected stateService: StateService,\n protected i18nService: I18nService,\n protected logService: LogService,\n protected route: ActivatedRoute,\n private win: Window\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"username\"), value: \"username\" },\n ];\n this.passTypeOptions = [\n { name: i18nService.t(\"password\"), value: \"password\" },\n { name: i18nService.t(\"passphrase\"), value: \"passphrase\" },\n ];\n this.usernameTypeOptions = [\n {\n name: i18nService.t(\"plusAddressedEmail\"),\n value: \"subaddress\",\n desc: i18nService.t(\"plusAddressedEmailDesc\"),\n },\n {\n name: i18nService.t(\"catchallEmail\"),\n value: \"catchall\",\n desc: i18nService.t(\"catchallEmailDesc\"),\n },\n {\n name: i18nService.t(\"forwardedEmail\"),\n value: \"forwarded\",\n desc: i18nService.t(\"forwardedEmailDesc\"),\n },\n { name: i18nService.t(\"randomWord\"), value: \"word\" },\n ];\n this.subaddressOptions = [{ name: i18nService.t(\"random\"), value: \"random\" }];\n this.catchallOptions = [{ name: i18nService.t(\"random\"), value: \"random\" }];\n this.forwardOptions = [\n { name: \"SimpleLogin\", value: \"simplelogin\" },\n { name: \"AnonAddy\", value: \"anonaddy\" },\n { name: \"Firefox Relay\", value: \"firefoxrelay\" },\n // { name: \"FastMail\", value: \"fastmail\" },\n ];\n }\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n const passwordOptionsResponse = await this.passwordGenerationService.getOptions();\n this.passwordOptions = passwordOptionsResponse[0];\n this.enforcedPasswordPolicyOptions = passwordOptionsResponse[1];\n this.avoidAmbiguous = !this.passwordOptions.ambiguous;\n this.passwordOptions.type =\n this.passwordOptions.type === \"passphrase\" ? \"passphrase\" : \"password\";\n\n this.usernameOptions = await this.usernameGenerationService.getOptions();\n if (this.usernameOptions.type == null) {\n this.usernameOptions.type = \"word\";\n }\n if (\n this.usernameOptions.subaddressEmail == null ||\n this.usernameOptions.subaddressEmail === \"\"\n ) {\n this.usernameOptions.subaddressEmail = await this.stateService.getEmail();\n }\n if (this.usernameWebsite == null) {\n this.usernameOptions.subaddressType = this.usernameOptions.catchallType = \"random\";\n } else {\n this.usernameOptions.website = this.usernameWebsite;\n const websiteOption = { name: this.i18nService.t(\"websiteName\"), value: \"website-name\" };\n this.subaddressOptions.push(websiteOption);\n this.catchallOptions.push(websiteOption);\n }\n\n if (this.type !== \"username\" && this.type !== \"password\") {\n if (qParams.type === \"username\" || qParams.type === \"password\") {\n this.type = qParams.type;\n } else {\n const generatorOptions = await this.stateService.getGeneratorOptions();\n this.type = generatorOptions?.type ?? \"password\";\n }\n }\n if (this.regenerateWithoutButtonPress()) {\n await this.regenerate();\n }\n });\n }\n\n async typeChanged() {\n await this.stateService.setGeneratorOptions({ type: this.type });\n if (this.regenerateWithoutButtonPress()) {\n await this.regenerate();\n }\n }\n\n async regenerate() {\n if (this.type === \"password\") {\n await this.regeneratePassword();\n } else if (this.type === \"username\") {\n await this.regenerateUsername();\n }\n }\n\n async sliderChanged() {\n this.savePasswordOptions(false);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n async sliderInput() {\n this.normalizePasswordOptions();\n this.password = await this.passwordGenerationService.generatePassword(this.passwordOptions);\n }\n\n async savePasswordOptions(regenerate = true) {\n this.normalizePasswordOptions();\n await this.passwordGenerationService.saveOptions(this.passwordOptions);\n\n if (regenerate && this.regenerateWithoutButtonPress()) {\n await this.regeneratePassword();\n }\n }\n\n async saveUsernameOptions(regenerate = true) {\n await this.usernameGenerationService.saveOptions(this.usernameOptions);\n if (this.usernameOptions.type === \"forwarded\") {\n this.username = \"-\";\n }\n if (regenerate && this.regenerateWithoutButtonPress()) {\n await this.regenerateUsername();\n }\n }\n\n async regeneratePassword() {\n this.password = await this.passwordGenerationService.generatePassword(this.passwordOptions);\n await this.passwordGenerationService.addHistory(this.password);\n }\n\n regenerateUsername() {\n return this.generateUsername();\n }\n\n async generateUsername() {\n try {\n this.usernameGeneratingPromise = this.usernameGenerationService.generateUsername(\n this.usernameOptions\n );\n this.username = await this.usernameGeneratingPromise;\n if (this.username === \"\" || this.username === null) {\n this.username = \"-\";\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n copy() {\n const password = this.type === \"password\";\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(\n password ? this.password : this.username,\n copyOptions\n );\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(password ? \"password\" : \"username\"))\n );\n }\n\n select() {\n this.onSelected.emit(this.type === \"password\" ? this.password : this.username);\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n regenerateWithoutButtonPress() {\n return this.type !== \"username\" || this.usernameOptions.type !== \"forwarded\";\n }\n\n private normalizePasswordOptions() {\n // Application level normalize options depedent on class variables\n this.passwordOptions.ambiguous = !this.avoidAmbiguous;\n\n if (\n !this.passwordOptions.uppercase &&\n !this.passwordOptions.lowercase &&\n !this.passwordOptions.number &&\n !this.passwordOptions.special\n ) {\n this.passwordOptions.lowercase = true;\n if (this.win != null) {\n const lowercase = this.win.document.querySelector(\"#lowercase\") as HTMLInputElement;\n if (lowercase) {\n lowercase.checked = true;\n }\n }\n }\n\n this.passwordGenerationService.normalizeOptions(\n this.passwordOptions,\n this.enforcedPasswordPolicyOptions\n );\n }\n}\n","import { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PasswordHintRequest } from \"jslib-common/models/request/passwordHintRequest\";\n\nexport class HintComponent {\n email = \"\";\n formPromise: Promise;\n\n protected successRoute = \"login\";\n protected onSuccessfulSubmit: () => void;\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n private logService: LogService\n ) {}\n\n async submit() {\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n\n try {\n this.formPromise = this.apiService.postPasswordHint(new PasswordHintRequest(this.email));\n await this.formPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"masterPassSent\"));\n if (this.onSuccessfulSubmit != null) {\n this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { Component, Input, OnChanges } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\n\n/**\n * Provides a mapping from supported card brands to\n * the filenames of icon that should be present in images/cards folder of clients.\n */\nconst cardIcons: Record = {\n Visa: \"card-visa\",\n Mastercard: \"card-mastercard\",\n Amex: \"card-amex\",\n Discover: \"card-discover\",\n \"Diners Club\": \"card-diners-club\",\n JCB: \"card-jcb\",\n Maestro: \"card-maestro\",\n UnionPay: \"card-union-pay\",\n RuPay: \"card-ru-pay\",\n};\n\n@Component({\n selector: \"app-vault-icon\",\n templateUrl: \"icon.component.html\",\n})\nexport class IconComponent implements OnChanges {\n @Input() cipher: CipherView;\n icon: string;\n image: string;\n fallbackImage: string;\n imageEnabled: boolean;\n\n private iconsUrl: string;\n\n constructor(environmentService: EnvironmentService, private stateService: StateService) {\n this.iconsUrl = environmentService.getIconsUrl();\n }\n\n async ngOnChanges() {\n // Components may be re-used when using cdk-virtual-scroll. Which puts the component in a weird state,\n // to avoid this we reset all state variables.\n this.image = null;\n this.fallbackImage = null;\n this.imageEnabled = !(await this.stateService.getDisableFavicon());\n this.load();\n }\n\n protected load() {\n switch (this.cipher.type) {\n case CipherType.Login:\n this.icon = \"bwi-globe\";\n this.setLoginIcon();\n break;\n case CipherType.SecureNote:\n this.icon = \"bwi-sticky-note\";\n break;\n case CipherType.Card:\n this.icon = \"bwi-credit-card\";\n this.setCardIcon();\n break;\n case CipherType.Identity:\n this.icon = \"bwi-id-card\";\n break;\n default:\n break;\n }\n }\n\n private setLoginIcon() {\n if (this.cipher.login.uri) {\n let hostnameUri = this.cipher.login.uri;\n let isWebsite = false;\n\n if (hostnameUri.indexOf(\"androidapp://\") === 0) {\n this.icon = \"bwi-android\";\n this.image = null;\n } else if (hostnameUri.indexOf(\"iosapp://\") === 0) {\n this.icon = \"bwi-apple\";\n this.image = null;\n } else if (\n this.imageEnabled &&\n hostnameUri.indexOf(\"://\") === -1 &&\n hostnameUri.indexOf(\".\") > -1\n ) {\n hostnameUri = \"http://\" + hostnameUri;\n isWebsite = true;\n } else if (this.imageEnabled) {\n isWebsite = hostnameUri.indexOf(\"http\") === 0 && hostnameUri.indexOf(\".\") > -1;\n }\n\n if (this.imageEnabled && isWebsite) {\n try {\n this.image = this.iconsUrl + \"/\" + Utils.getHostname(hostnameUri) + \"/icon.png\";\n this.fallbackImage = \"images/bwi-globe.png\";\n } catch (e) {\n // Ignore error since the fallback icon will be shown if image is null.\n }\n }\n } else {\n this.image = null;\n }\n }\n\n private setCardIcon() {\n const brand = this.cipher.card.brand;\n if (this.imageEnabled && brand in cardIcons) {\n this.icon = \"credit-card-icon \" + cardIcons[brand];\n }\n }\n}\n","

\n \n \n
\n","import { Directive, NgZone, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { take } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { VaultTimeoutService } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { HashPurpose } from \"jslib-common/enums/hashPurpose\";\nimport { KeySuffixOptions } from \"jslib-common/enums/keySuffixOptions\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { SecretVerificationRequest } from \"jslib-common/models/request/secretVerificationRequest\";\n\n@Directive()\nexport class LockComponent implements OnInit {\n masterPassword = \"\";\n pin = \"\";\n showPassword = false;\n email: string;\n pinLock = false;\n webVaultHostname = \"\";\n formPromise: Promise;\n supportsBiometric: boolean;\n biometricLock: boolean;\n biometricText: string;\n hideInput: boolean;\n\n protected successRoute = \"vault\";\n protected onSuccessfulSubmit: () => Promise;\n\n private invalidPinAttempts = 0;\n private pinSet: [boolean, boolean];\n\n constructor(\n protected router: Router,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected cryptoService: CryptoService,\n protected vaultTimeoutService: VaultTimeoutService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected apiService: ApiService,\n protected logService: LogService,\n private keyConnectorService: KeyConnectorService,\n protected ngZone: NgZone\n ) {}\n\n async ngOnInit() {\n // Load the first and observe updates\n await this.load();\n this.stateService.activeAccount.subscribe(async () => {\n await this.load();\n });\n }\n\n async submit() {\n if (this.pinLock && (this.pin == null || this.pin === \"\")) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"pinRequired\")\n );\n return;\n }\n if (!this.pinLock && (this.masterPassword == null || this.masterPassword === \"\")) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n\n const kdf = await this.stateService.getKdfType();\n const kdfIterations = await this.stateService.getKdfIterations();\n\n if (this.pinLock) {\n let failed = true;\n try {\n if (this.pinSet[0]) {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfIterations,\n await this.stateService.getDecryptedPinProtected()\n );\n const encKey = await this.cryptoService.getEncKey(key);\n const protectedPin = await this.stateService.getProtectedPin();\n const decPin = await this.cryptoService.decryptToUtf8(\n new EncString(protectedPin),\n encKey\n );\n failed = decPin !== this.pin;\n if (!failed) {\n await this.setKeyAndContinue(key);\n }\n } else {\n const key = await this.cryptoService.makeKeyFromPin(\n this.pin,\n this.email,\n kdf,\n kdfIterations\n );\n failed = false;\n await this.setKeyAndContinue(key);\n }\n } catch {\n failed = true;\n }\n\n if (failed) {\n this.invalidPinAttempts++;\n if (this.invalidPinAttempts >= 5) {\n this.messagingService.send(\"logout\");\n return;\n }\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidPin\")\n );\n }\n } else {\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n kdf,\n kdfIterations\n );\n const storedKeyHash = await this.cryptoService.getKeyHash();\n\n let passwordValid = false;\n\n if (storedKeyHash != null) {\n passwordValid = await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, key);\n } else {\n const request = new SecretVerificationRequest();\n const serverKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n request.masterPasswordHash = serverKeyHash;\n try {\n this.formPromise = this.apiService.postAccountVerifyPassword(request);\n await this.formPromise;\n passwordValid = true;\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n if (passwordValid) {\n if (this.pinSet[0]) {\n const protectedPin = await this.stateService.getProtectedPin();\n const encKey = await this.cryptoService.getEncKey(key);\n const decPin = await this.cryptoService.decryptToUtf8(\n new EncString(protectedPin),\n encKey\n );\n const pinKey = await this.cryptoService.makePinKey(\n decPin,\n this.email,\n kdf,\n kdfIterations\n );\n await this.stateService.setDecryptedPinProtected(\n await this.cryptoService.encrypt(key.key, pinKey)\n );\n }\n await this.setKeyAndContinue(key);\n } else {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n }\n }\n }\n\n async logOut() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"logOutConfirmation\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"logOut\"),\n this.i18nService.t(\"cancel\")\n );\n if (confirmed) {\n this.messagingService.send(\"logout\");\n }\n }\n\n async unlockBiometric(): Promise {\n if (!this.biometricLock) {\n return;\n }\n\n const success = (await this.cryptoService.getKey(KeySuffixOptions.Biometric)) != null;\n\n if (success) {\n await this.doContinue();\n }\n\n return success;\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n const input = document.getElementById(this.pinLock ? \"pin\" : \"masterPassword\");\n if (this.ngZone.isStable) {\n input.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => input.focus());\n }\n }\n\n private async setKeyAndContinue(key: SymmetricCryptoKey) {\n await this.cryptoService.setKey(key);\n await this.doContinue();\n }\n\n private async doContinue() {\n await this.stateService.setBiometricLocked(false);\n await this.stateService.setEverBeenUnlocked(true);\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n this.messagingService.send(\"unlocked\");\n if (this.onSuccessfulSubmit != null) {\n await this.onSuccessfulSubmit();\n } else if (this.router != null) {\n this.router.navigate([this.successRoute]);\n }\n }\n\n private async load() {\n this.pinSet = await this.vaultTimeoutService.isPinLockSet();\n this.pinLock =\n (this.pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) ||\n this.pinSet[1];\n this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n this.biometricLock =\n (await this.vaultTimeoutService.isBiometricLockSet()) &&\n ((await this.cryptoService.hasKeyStored(KeySuffixOptions.Biometric)) ||\n !this.platformUtilsService.supportsSecureStorage());\n this.biometricText = await this.stateService.getBiometricText();\n this.email = await this.stateService.getEmail();\n const usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.hideInput = usesKeyConnector && !this.pinLock;\n\n // Users with key connector and without biometric or pin has no MP to unlock using\n if (usesKeyConnector && !(this.biometricLock || this.pinLock)) {\n await this.vaultTimeoutService.logOut();\n }\n\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n const vaultUrl =\n webVaultUrl === \"https://vault.bitwarden.com\" ? \"https://bitwarden.com\" : webVaultUrl;\n this.webVaultHostname = Utils.getHostname(vaultUrl);\n }\n}\n","import { Directive, Input, NgZone, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { take } from \"rxjs/operators\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { AuthResult } from \"jslib-common/models/domain/authResult\";\nimport { PasswordLogInCredentials } from \"jslib-common/models/domain/logInCredentials\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class LoginComponent extends CaptchaProtectedComponent implements OnInit {\n @Input() email = \"\";\n @Input() rememberEmail = true;\n\n masterPassword = \"\";\n showPassword = false;\n formPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"vault\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected alwaysRememberEmail = false;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n platformUtilsService: PlatformUtilsService,\n i18nService: I18nService,\n protected stateService: StateService,\n environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected logService: LogService,\n protected ngZone: NgZone\n ) {\n super(environmentService, i18nService, platformUtilsService);\n }\n\n async ngOnInit() {\n if (this.email == null || this.email === \"\") {\n this.email = await this.stateService.getRememberedEmail();\n if (this.email == null) {\n this.email = \"\";\n }\n }\n if (!this.alwaysRememberEmail) {\n this.rememberEmail = (await this.stateService.getRememberedEmail()) != null;\n }\n if (Utils.isBrowser && !Utils.isNode) {\n this.focusInput();\n }\n }\n\n async submit() {\n await this.setupCaptcha();\n\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n\n try {\n const credentials = new PasswordLogInCredentials(\n this.email,\n this.masterPassword,\n this.captchaToken,\n null\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n if (this.rememberEmail || this.alwaysRememberEmail) {\n await this.stateService.setRememberedEmail(this.email);\n } else {\n await this.stateService.setRememberedEmail(null);\n }\n if (this.handleCaptchaRequired(response)) {\n return;\n } else if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute]);\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n if (this.ngZone.isStable) {\n document.getElementById(\"masterPassword\").focus();\n } else {\n this.ngZone.onStable\n .pipe(take(1))\n .subscribe(() => document.getElementById(\"masterPassword\").focus());\n }\n }\n\n async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n // Generate necessary sso params\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, \"sha256\");\n const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n // Save sso params\n await this.stateService.setSsoState(state);\n await this.stateService.setSsoCodeVerifier(ssoCodeVerifier);\n\n // Build URI\n const webUrl = this.environmentService.getWebVaultUrl();\n\n // Launch browser\n this.platformUtilsService.launchUri(\n webUrl +\n \"/#/sso?clientId=\" +\n clientId +\n \"&redirectUri=\" +\n encodeURIComponent(ssoRedirectUri) +\n \"&state=\" +\n state +\n \"&codeChallenge=\" +\n codeChallenge\n );\n }\n\n protected focusInput() {\n document\n .getElementById(this.email == null || this.email === \"\" ? \"email\" : \"masterPassword\")\n .focus();\n }\n}\n","import { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from \"@angular/cdk/a11y\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n ElementRef,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef,\n} from \"@angular/core\";\n\nimport { ModalService } from \"../../services/modal.service\";\n\nimport { ModalRef } from \"./modal.ref\";\n\n@Component({\n selector: \"app-modal\",\n template: \"\",\n})\nexport class DynamicModalComponent implements AfterViewInit, OnDestroy {\n componentRef: ComponentRef;\n\n @ViewChild(\"modalContent\", { read: ViewContainerRef, static: true })\n modalContentRef: ViewContainerRef;\n\n childComponentType: Type;\n setComponentParameters: (component: any) => void;\n\n private focusTrap: ConfigurableFocusTrap;\n\n constructor(\n private modalService: ModalService,\n private cd: ChangeDetectorRef,\n private el: ElementRef,\n private focusTrapFactory: ConfigurableFocusTrapFactory,\n public modalRef: ModalRef\n ) {}\n\n ngAfterViewInit() {\n this.loadChildComponent(this.childComponentType);\n if (this.setComponentParameters != null) {\n this.setComponentParameters(this.componentRef.instance);\n }\n this.cd.detectChanges();\n\n this.modalRef.created(this.el.nativeElement);\n this.focusTrap = this.focusTrapFactory.create(\n this.el.nativeElement.querySelector(\".modal-dialog\")\n );\n if (this.el.nativeElement.querySelector(\"[appAutoFocus]\") == null) {\n this.focusTrap.focusFirstTabbableElementWhenReady();\n }\n }\n\n loadChildComponent(componentType: Type) {\n const componentFactory = this.modalService.resolveComponentFactory(componentType);\n\n this.modalContentRef.clear();\n this.componentRef = this.modalContentRef.createComponent(componentFactory);\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n this.focusTrap.destroy();\n }\n\n close() {\n this.modalRef.close();\n }\n\n getFocus() {\n const autoFocusEl = this.el.nativeElement.querySelector(\"[appAutoFocus]\") as HTMLElement;\n autoFocusEl?.focus();\n }\n}\n","import { InjectFlags, InjectionToken, Injector, Type } from \"@angular/core\";\n\nexport class ModalInjector implements Injector {\n constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap) {}\n\n get(token: Type | InjectionToken, notFoundValue?: T, flags?: InjectFlags): T;\n get(token: any, notFoundValue?: any, flags?: any) {\n return this._additionalTokens.get(token) ?? this._parentInjector.get(token, notFoundValue);\n }\n}\n","import { Observable, Subject } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nexport class ModalRef {\n onCreated: Observable; // Modal added to the DOM.\n onClose: Observable; // Initiated close.\n onClosed: Observable; // Modal was closed (Remove element from DOM)\n onShow: Observable; // Start showing modal\n onShown: Observable; // Modal is fully visible\n\n private readonly _onCreated = new Subject();\n private readonly _onClose = new Subject();\n private readonly _onClosed = new Subject();\n private readonly _onShow = new Subject();\n private readonly _onShown = new Subject();\n private lastResult: any;\n\n constructor() {\n this.onCreated = this._onCreated.asObservable();\n this.onClose = this._onClose.asObservable();\n this.onClosed = this._onClosed.asObservable();\n this.onShow = this._onShow.asObservable();\n this.onShown = this._onShow.asObservable();\n }\n\n show() {\n this._onShow.next();\n }\n\n shown() {\n this._onShown.next();\n }\n\n close(result?: any) {\n this.lastResult = result;\n this._onClose.next(result);\n }\n\n closed() {\n this._onClosed.next(this.lastResult);\n }\n\n created(el: HTMLElement) {\n this._onCreated.next(el);\n }\n\n onClosedPromise(): Promise {\n return this.onClosed.pipe(first()).toPromise();\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { GeneratedPasswordHistory } from \"jslib-common/models/domain/generatedPasswordHistory\";\n\n@Directive()\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n history: GeneratedPasswordHistory[] = [];\n\n constructor(\n protected passwordGenerationService: PasswordGenerationService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n private win: Window\n ) {}\n\n async ngOnInit() {\n this.history = await this.passwordGenerationService.getHistory();\n }\n\n clear() {\n this.history = [];\n this.passwordGenerationService.clear();\n }\n\n copy(password: string) {\n const copyOptions = this.win != null ? { window: this.win } : null;\n this.platformUtilsService.copyToClipboard(password, copyOptions);\n this.platformUtilsService.showToast(\n \"info\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"password\"))\n );\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\nimport { ModalRef } from \"./modal/modal.ref\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationComponent for any other situation where you need to verify the user's identity.\n */\n@Directive()\nexport class PasswordRepromptComponent {\n showPassword = false;\n masterPassword = \"\";\n\n constructor(\n private modalRef: ModalRef,\n private cryptoService: CryptoService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService\n ) {}\n\n togglePassword() {\n this.showPassword = !this.showPassword;\n }\n\n async submit() {\n if (!(await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, null))) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidMasterPassword\")\n );\n return;\n }\n\n this.modalRef.close(true);\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"jslib-common/enums/kdfType\";\nimport { KeysRequest } from \"jslib-common/models/request/keysRequest\";\nimport { ReferenceEventRequest } from \"jslib-common/models/request/referenceEventRequest\";\nimport { RegisterRequest } from \"jslib-common/models/request/registerRequest\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class RegisterComponent extends CaptchaProtectedComponent implements OnInit {\n name = \"\";\n email = \"\";\n masterPassword = \"\";\n confirmMasterPassword = \"\";\n hint = \"\";\n showPassword = false;\n formPromise: Promise;\n masterPasswordScore: number;\n referenceData: ReferenceEventRequest;\n showTerms = false;\n acceptPolicies = false;\n\n protected successRoute = \"login\";\n private masterPasswordStrengthTimeout: any;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n i18nService: I18nService,\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected stateService: StateService,\n platformUtilsService: PlatformUtilsService,\n protected passwordGenerationService: PasswordGenerationService,\n environmentService: EnvironmentService,\n protected logService: LogService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.showTerms = false;\n }\n\n async ngOnInit() {\n this.setupCaptcha();\n }\n\n get masterPasswordScoreWidth() {\n return this.masterPasswordScore == null ? 0 : (this.masterPasswordScore + 1) * 20;\n }\n\n get masterPasswordScoreColor() {\n switch (this.masterPasswordScore) {\n case 4:\n return \"success\";\n case 3:\n return \"primary\";\n case 2:\n return \"warning\";\n default:\n return \"danger\";\n }\n }\n\n get masterPasswordScoreText() {\n switch (this.masterPasswordScore) {\n case 4:\n return this.i18nService.t(\"strong\");\n case 3:\n return this.i18nService.t(\"good\");\n case 2:\n return this.i18nService.t(\"weak\");\n default:\n return this.masterPasswordScore != null ? this.i18nService.t(\"weak\") : null;\n }\n }\n\n async submit() {\n if (typeof crypto.subtle === 'undefined') {\n this.platformUtilsService.showToast(\n \"error\",\n \"This browser requires HTTPS to use the web vault\",\n \"Check the Vaultwarden wiki for details on how to enable it\"\n );\n return;\n }\n\n if (!this.acceptPolicies && this.showTerms) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"acceptPoliciesError\")\n );\n return;\n }\n\n if (this.email == null || this.email === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"emailRequired\")\n );\n return;\n }\n if (this.email.indexOf(\"@\") === -1) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"invalidEmail\")\n );\n return;\n }\n if (this.masterPassword == null || this.masterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return;\n }\n if (this.masterPassword.length < 8) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassLength\")\n );\n return;\n }\n if (this.masterPassword !== this.confirmMasterPassword) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassDoesntMatch\")\n );\n return;\n }\n\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n if (strengthResult != null && strengthResult.score < 3) {\n const result = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"weakMasterPasswordDesc\"),\n this.i18nService.t(\"weakMasterPassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!result) {\n return;\n }\n }\n\n if (this.hint === this.masterPassword) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"hintEqualsPassword\")\n );\n return;\n }\n\n this.name = this.name === \"\" ? null : this.name;\n this.email = this.email.trim().toLowerCase();\n const kdf = DEFAULT_KDF_TYPE;\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email,\n kdf,\n kdfIterations\n );\n const encKey = await this.cryptoService.makeEncKey(key);\n const hashedPassword = await this.cryptoService.hashPassword(this.masterPassword, key);\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new RegisterRequest(\n this.email,\n this.name,\n hashedPassword,\n this.hint,\n encKey[1].encryptedString,\n kdf,\n kdfIterations,\n this.referenceData,\n this.captchaToken\n );\n request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n const orgInvite = await this.stateService.getOrganizationInvitation();\n if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n request.token = orgInvite.token;\n request.organizationUserId = orgInvite.organizationUserId;\n }\n\n try {\n this.formPromise = this.apiService.postRegister(request);\n try {\n await this.formPromise;\n } catch (e) {\n if (this.handleCaptchaRequired(e)) {\n return;\n } else {\n throw e;\n }\n }\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"newAccountCreated\"));\n this.router.navigate([this.successRoute], { queryParams: { email: this.email } });\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n updatePasswordStrength() {\n if (this.masterPasswordStrengthTimeout != null) {\n clearTimeout(this.masterPasswordStrengthTimeout);\n }\n this.masterPasswordStrengthTimeout = setTimeout(() => {\n const strengthResult = this.passwordGenerationService.passwordStrength(\n this.masterPassword,\n this.getPasswordStrengthUserInput()\n );\n this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n }, 300);\n }\n\n private getPasswordStrengthUserInput() {\n let userInput: string[] = [];\n const atPosition = this.email.indexOf(\"@\");\n if (atPosition > -1) {\n userInput = userInput.concat(\n this.email\n .substr(0, atPosition)\n .trim()\n .toLowerCase()\n .split(/[^A-Za-z0-9]/)\n );\n }\n if (this.name != null && this.name !== \"\") {\n userInput = userInput.concat(this.name.trim().toLowerCase().split(\" \"));\n }\n return userInput;\n }\n}\n","import { Directive, OnInit } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\n\n@Directive()\nexport class RemovePasswordComponent implements OnInit {\n actionPromise: Promise;\n continuing = false;\n leaving = false;\n\n loading = true;\n organization: Organization;\n email: string;\n\n constructor(\n private router: Router,\n private stateService: StateService,\n private apiService: ApiService,\n private syncService: SyncService,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n async ngOnInit() {\n this.organization = await this.keyConnectorService.getManagingOrganization();\n this.email = await this.stateService.getEmail();\n await this.syncService.fullSync(false);\n this.loading = false;\n }\n\n async convert() {\n this.continuing = true;\n this.actionPromise = this.keyConnectorService.migrateUser();\n\n try {\n await this.actionPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"removedMasterPassword\")\n );\n await this.keyConnectorService.removeConvertAccountRequired();\n this.router.navigate([\"\"]);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n }\n }\n\n async leave() {\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"leaveOrganizationConfirmation\"),\n this.organization.name,\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.leaving = true;\n this.actionPromise = this.apiService.postLeaveOrganization(this.organization.id).then(() => {\n return this.syncService.fullSync(true);\n });\n await this.actionPromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"leftOrganization\"));\n await this.keyConnectorService.removeConvertAccountRequired();\n this.router.navigate([\"\"]);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e);\n }\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { SendType } from \"jslib-common/enums/sendType\";\nimport { EncArrayBuffer } from \"jslib-common/models/domain/encArrayBuffer\";\nimport { Send } from \"jslib-common/models/domain/send\";\nimport { SendFileView } from \"jslib-common/models/view/sendFileView\";\nimport { SendTextView } from \"jslib-common/models/view/sendTextView\";\nimport { SendView } from \"jslib-common/models/view/sendView\";\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n @Input() sendId: string;\n @Input() type: SendType;\n\n @Output() onSavedSend = new EventEmitter();\n @Output() onDeletedSend = new EventEmitter();\n @Output() onCancelled = new EventEmitter();\n\n copyLink = false;\n disableSend = false;\n disableHideEmail = false;\n send: SendView;\n deletionDate: string;\n expirationDate: string;\n hasPassword: boolean;\n password: string;\n showPassword = false;\n formPromise: Promise;\n deletePromise: Promise;\n sendType = SendType;\n typeOptions: any[];\n canAccessPremium = true;\n emailVerified = true;\n alertShown = false;\n showOptions = false;\n\n private sendLinkBaseUrl: string;\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected datePipe: DatePipe,\n protected sendService: SendService,\n protected messagingService: MessagingService,\n protected policyService: PolicyService,\n private logService: LogService,\n protected stateService: StateService\n ) {\n this.typeOptions = [\n { name: i18nService.t(\"sendTypeFile\"), value: SendType.File },\n { name: i18nService.t(\"sendTypeText\"), value: SendType.Text },\n ];\n this.sendLinkBaseUrl = this.environmentService.getSendUrl();\n }\n\n get link(): string {\n if (this.send.id != null && this.send.accessId != null) {\n return this.sendLinkBaseUrl + this.send.accessId + \"/\" + this.send.urlB64Key;\n }\n return null;\n }\n\n get isSafari() {\n return this.platformUtilsService.isSafari();\n }\n\n get isDateTimeLocalSupported(): boolean {\n return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n }\n\n async ngOnInit() {\n await this.load();\n }\n\n get editMode(): boolean {\n return this.sendId != null;\n }\n\n get title(): string {\n return this.i18nService.t(this.editMode ? \"editSend\" : \"createSend\");\n }\n\n setDates(event: { deletionDate: string; expirationDate: string }) {\n this.deletionDate = event.deletionDate;\n this.expirationDate = event.expirationDate;\n }\n\n async load() {\n this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n this.disableHideEmail = await this.policyService.policyAppliesToUser(\n PolicyType.SendOptions,\n (p) => p.data.disableHideEmail\n );\n\n this.canAccessPremium = await this.stateService.getCanAccessPremium();\n this.emailVerified = await this.stateService.getEmailVerified();\n if (!this.canAccessPremium || !this.emailVerified) {\n this.type = SendType.Text;\n }\n\n if (this.send == null) {\n if (this.editMode) {\n const send = await this.loadSend();\n this.send = await send.decrypt();\n } else {\n this.send = new SendView();\n this.send.type = this.type == null ? SendType.File : this.type;\n this.send.file = new SendFileView();\n this.send.text = new SendTextView();\n this.send.deletionDate = new Date();\n this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n }\n }\n\n this.hasPassword = this.send.password != null && this.send.password.trim() !== \"\";\n }\n\n async submit(): Promise {\n if (this.disableSend) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"sendDisabledWarning\")\n );\n return false;\n }\n\n if (this.send.name == null || this.send.name === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"nameRequired\")\n );\n return false;\n }\n\n let file: File = null;\n if (this.send.type === SendType.File && !this.editMode) {\n const fileEl = document.getElementById(\"file\") as HTMLInputElement;\n const files = fileEl.files;\n if (files == null || files.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectFile\")\n );\n return;\n }\n\n file = files[0];\n if (files[0].size > 524288000) {\n // 500 MB\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"maxFileSize\")\n );\n return;\n }\n }\n\n if (this.password != null && this.password.trim() === \"\") {\n this.password = null;\n }\n\n this.formPromise = this.encryptSend(file).then(async (encSend) => {\n const uploadPromise = this.sendService.saveWithServer(encSend);\n await uploadPromise;\n if (this.send.id == null) {\n this.send.id = encSend[0].id;\n }\n if (this.send.accessId == null) {\n this.send.accessId = encSend[0].accessId;\n }\n this.onSavedSend.emit(this.send);\n if (this.copyLink && this.link != null) {\n const copySuccess = await this.copyLinkToClipboard(this.link);\n if (copySuccess ?? true) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\")\n );\n } else {\n await this.platformUtilsService.showDialog(\n this.i18nService.t(this.editMode ? \"editedSend\" : \"createdSend\"),\n null,\n this.i18nService.t(\"ok\"),\n null,\n \"success\",\n null\n );\n await this.copyLinkToClipboard(this.link);\n }\n }\n });\n try {\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n async copyLinkToClipboard(link: string): Promise {\n return Promise.resolve(this.platformUtilsService.copyToClipboard(link));\n }\n\n async delete(): Promise {\n if (this.deletePromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.deletePromise = this.sendService.deleteWithServer(this.send.id);\n await this.deletePromise;\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.load();\n this.onDeletedSend.emit(this.send);\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n\n return false;\n }\n\n typeChanged() {\n if (this.send.type === SendType.File && !this.alertShown) {\n if (!this.canAccessPremium) {\n this.alertShown = true;\n this.messagingService.send(\"premiumRequired\");\n } else if (!this.emailVerified) {\n this.alertShown = true;\n this.messagingService.send(\"emailVerificationRequired\");\n }\n }\n }\n\n toggleOptions() {\n this.showOptions = !this.showOptions;\n }\n\n protected async loadSend(): Promise {\n return this.sendService.get(this.sendId);\n }\n\n protected async encryptSend(file: File): Promise<[Send, EncArrayBuffer]> {\n const sendData = await this.sendService.encrypt(this.send, file, this.password, null);\n\n // Parse dates\n try {\n sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n } catch {\n sendData[0].deletionDate = null;\n }\n try {\n sendData[0].expirationDate =\n this.expirationDate == null ? null : new Date(this.expirationDate);\n } catch {\n sendData[0].expirationDate = null;\n }\n\n return sendData;\n }\n\n protected togglePasswordVisible() {\n this.showPassword = !this.showPassword;\n document.getElementById(\"password\").focus();\n }\n}\n","import { DatePipe } from \"@angular/common\";\nimport { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\nimport { FormControl, FormGroup } from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n// Different BrowserPath = different controls.\nenum BrowserPath {\n // Native datetime-locale.\n // We are happy.\n Default = \"default\",\n\n // Native date and time inputs, but no datetime-locale.\n // We use individual date and time inputs and create a datetime programatically on submit.\n Firefox = \"firefox\",\n\n // No native date, time, or datetime-locale inputs.\n // We use a polyfill for dates and a dropdown for times.\n Safari = \"safari\",\n}\n\nenum DateField {\n DeletionDate = \"deletion\",\n ExpriationDate = \"expiration\",\n}\n\n// Value = hours\nenum DatePreset {\n OneHour = 1,\n OneDay = 24,\n TwoDays = 48,\n ThreeDays = 72,\n SevenDays = 168,\n ThirtyDays = 720,\n Custom = 0,\n Never = null,\n}\n\n// TimeOption is used for the dropdown implementation of custom times\n// twelveHour = displayed time; twentyFourHour = time used in logic\ninterface TimeOption {\n twelveHour: string;\n twentyFourHour: string;\n}\n\n@Directive()\nexport class EffluxDatesComponent implements OnInit {\n @Input() readonly initialDeletionDate: Date;\n @Input() readonly initialExpirationDate: Date;\n @Input() readonly editMode: boolean;\n @Input() readonly disabled: boolean;\n\n @Output() datesChanged = new EventEmitter<{ deletionDate: string; expirationDate: string }>();\n\n get browserPath(): BrowserPath {\n if (this.platformUtilsService.isFirefox()) {\n return BrowserPath.Firefox;\n } else if (this.platformUtilsService.isSafari()) {\n return BrowserPath.Safari;\n }\n return BrowserPath.Default;\n }\n\n datesForm = new FormGroup({\n selectedDeletionDatePreset: new FormControl(),\n selectedExpirationDatePreset: new FormControl(),\n defaultDeletionDateTime: new FormControl(),\n defaultExpirationDateTime: new FormControl(),\n fallbackDeletionDate: new FormControl(),\n fallbackDeletionTime: new FormControl(),\n fallbackExpirationDate: new FormControl(),\n fallbackExpirationTime: new FormControl(),\n });\n\n deletionDatePresets: any[] = [\n { name: this.i18nService.t(\"oneHour\"), value: DatePreset.OneHour },\n { name: this.i18nService.t(\"oneDay\"), value: DatePreset.OneDay },\n { name: this.i18nService.t(\"days\", \"2\"), value: DatePreset.TwoDays },\n { name: this.i18nService.t(\"days\", \"3\"), value: DatePreset.ThreeDays },\n { name: this.i18nService.t(\"days\", \"7\"), value: DatePreset.SevenDays },\n { name: this.i18nService.t(\"days\", \"30\"), value: DatePreset.ThirtyDays },\n { name: this.i18nService.t(\"custom\"), value: DatePreset.Custom },\n ];\n\n expirationDatePresets: any[] = [\n { name: this.i18nService.t(\"never\"), value: DatePreset.Never },\n ].concat([...this.deletionDatePresets]);\n\n get selectedDeletionDatePreset(): FormControl {\n return this.datesForm.get(\"selectedDeletionDatePreset\") as FormControl;\n }\n\n get selectedExpirationDatePreset(): FormControl {\n return this.datesForm.get(\"selectedExpirationDatePreset\") as FormControl;\n }\n\n get defaultDeletionDateTime(): FormControl {\n return this.datesForm.get(\"defaultDeletionDateTime\") as FormControl;\n }\n\n get defaultExpirationDateTime(): FormControl {\n return this.datesForm.get(\"defaultExpirationDateTime\") as FormControl;\n }\n\n get fallbackDeletionDate(): FormControl {\n return this.datesForm.get(\"fallbackDeletionDate\") as FormControl;\n }\n\n get fallbackDeletionTime(): FormControl {\n return this.datesForm.get(\"fallbackDeletionTime\") as FormControl;\n }\n\n get fallbackExpirationDate(): FormControl {\n return this.datesForm.get(\"fallbackExpirationDate\") as FormControl;\n }\n\n get fallbackExpirationTime(): FormControl {\n return this.datesForm.get(\"fallbackExpirationTime\") as FormControl;\n }\n\n // Should be able to call these at any time and compute a submitable value\n get formattedDeletionDate(): string {\n switch (this.selectedDeletionDatePreset.value as DatePreset) {\n case DatePreset.Never:\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n return this.formattedDeletionDate;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n return this.fallbackDeletionDate.value + \"T\" + this.fallbackDeletionTime.value;\n default:\n return this.defaultDeletionDateTime.value;\n }\n default: {\n const now = new Date();\n const miliseconds = now.setTime(\n now.getTime() + (this.selectedDeletionDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(miliseconds).toString();\n }\n }\n }\n\n get formattedExpirationDate(): string {\n switch (this.selectedExpirationDatePreset.value as DatePreset) {\n case DatePreset.Never:\n return null;\n case DatePreset.Custom:\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n if (\n (!this.fallbackExpirationDate.value || !this.fallbackExpirationTime.value) &&\n this.editMode\n ) {\n return null;\n }\n return this.fallbackExpirationDate.value + \"T\" + this.fallbackExpirationTime.value;\n default:\n if (!this.defaultExpirationDateTime.value) {\n return null;\n }\n return this.defaultExpirationDateTime.value;\n }\n default: {\n const now = new Date();\n const miliseconds = now.setTime(\n now.getTime() + (this.selectedExpirationDatePreset.value as number) * 60 * 60 * 1000\n );\n return new Date(miliseconds).toString();\n }\n }\n }\n //\n\n get safariDeletionTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.DeletionDate);\n }\n\n get safariExpirationTimePresetOptions() {\n return this.safariTimePresetOptions(DateField.ExpriationDate);\n }\n\n private get nextWeek(): Date {\n const nextWeek = new Date();\n nextWeek.setDate(nextWeek.getDate() + 7);\n return nextWeek;\n }\n\n constructor(\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected datePipe: DatePipe\n ) {}\n\n ngOnInit(): void {\n this.setInitialFormValues();\n this.emitDates();\n this.datesForm.valueChanges.subscribe(() => {\n this.emitDates();\n });\n }\n\n onDeletionDatePresetSelect(value: DatePreset) {\n this.selectedDeletionDatePreset.setValue(value);\n }\n\n clearExpiration() {\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackExpirationDate.setValue(null);\n this.fallbackExpirationTime.setValue(null);\n break;\n case BrowserPath.Default:\n this.defaultExpirationDateTime.setValue(null);\n break;\n }\n }\n\n protected emitDates() {\n this.datesChanged.emit({\n deletionDate: this.formattedDeletionDate,\n expirationDate: this.formattedExpirationDate,\n });\n }\n\n protected setInitialFormValues() {\n if (this.editMode) {\n this.selectedDeletionDatePreset.setValue(DatePreset.Custom);\n this.selectedExpirationDatePreset.setValue(DatePreset.Custom);\n switch (this.browserPath) {\n case BrowserPath.Safari:\n case BrowserPath.Firefox:\n this.fallbackDeletionDate.setValue(this.initialDeletionDate.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(this.initialDeletionDate.toTimeString().slice(0, 5));\n if (this.initialExpirationDate != null) {\n this.fallbackExpirationDate.setValue(\n this.initialExpirationDate.toISOString().slice(0, 10)\n );\n this.fallbackExpirationTime.setValue(\n this.initialExpirationDate.toTimeString().slice(0, 5)\n );\n }\n break;\n case BrowserPath.Default:\n if (this.initialExpirationDate) {\n this.defaultExpirationDateTime.setValue(\n this.datePipe.transform(new Date(this.initialExpirationDate), \"yyyy-MM-ddTHH:mm\")\n );\n }\n this.defaultDeletionDateTime.setValue(\n this.datePipe.transform(new Date(this.initialDeletionDate), \"yyyy-MM-ddTHH:mm\")\n );\n break;\n }\n } else {\n this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n this.selectedExpirationDatePreset.setValue(DatePreset.Never);\n\n switch (this.browserPath) {\n case BrowserPath.Safari:\n this.fallbackDeletionDate.setValue(this.nextWeek.toISOString().slice(0, 10));\n this.fallbackDeletionTime.setValue(\n this.safariTimePresetOptions(DateField.DeletionDate)[1].twentyFourHour\n );\n break;\n default:\n break;\n }\n }\n }\n\n protected safariTimePresetOptions(field: DateField): TimeOption[] {\n // init individual arrays for major sort groups\n const noon: TimeOption[] = [];\n const midnight: TimeOption[] = [];\n const ams: TimeOption[] = [];\n const pms: TimeOption[] = [];\n\n // determine minute skip (5 min, 10 min, 15 min, etc.)\n const minuteIncrementer = 15;\n\n // loop through each hour on a 12 hour system\n for (let h = 1; h <= 12; h++) {\n // loop through each minute in the hour using the skip to incriment\n for (let m = 0; m < 60; m += minuteIncrementer) {\n // init the final strings that will be added to the lists\n let hour = h.toString();\n let minutes = m.toString();\n\n // add prepending 0s to single digit hours/minutes\n if (h < 10) {\n hour = \"0\" + hour;\n }\n if (m < 10) {\n minutes = \"0\" + minutes;\n }\n\n // build time strings and push to relevant sort groups\n if (h === 12) {\n const midnightOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `00:${minutes}`,\n };\n midnight.push(midnightOption);\n\n const noonOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n noon.push(noonOption);\n } else {\n const amOption: TimeOption = {\n twelveHour: `${hour}:${minutes} AM`,\n twentyFourHour: `${hour}:${minutes}`,\n };\n ams.push(amOption);\n\n const pmOption: TimeOption = {\n twelveHour: `${hour}:${minutes} PM`,\n twentyFourHour: `${h + 12}:${minutes}`,\n };\n pms.push(pmOption);\n }\n }\n }\n\n // bring all the arrays together in the right order\n const validTimes = [...midnight, ...ams, ...noon, ...pms];\n\n // determine if an unsupported value already exists on the send & add that to the top of the option list\n // example: if the Send was created with a different client\n if (field === DateField.ExpriationDate && this.initialExpirationDate != null && this.editMode) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialExpirationDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialExpirationDate, \"HH:mm\"),\n };\n return [previousValue, { twelveHour: null, twentyFourHour: null }, ...validTimes];\n } else if (\n field === DateField.DeletionDate &&\n this.initialDeletionDate != null &&\n this.editMode\n ) {\n const previousValue: TimeOption = {\n twelveHour: this.datePipe.transform(this.initialDeletionDate, \"hh:mm a\"),\n twentyFourHour: this.datePipe.transform(this.initialDeletionDate, \"HH:mm\"),\n };\n return [previousValue, ...validTimes];\n } else {\n return [{ twelveHour: null, twentyFourHour: null }, ...validTimes];\n }\n }\n}\n","import { Directive, NgZone, OnInit } from \"@angular/core\";\n\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { SearchService } from \"jslib-common/abstractions/search.service\";\nimport { SendService } from \"jslib-common/abstractions/send.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { SendType } from \"jslib-common/enums/sendType\";\nimport { SendView } from \"jslib-common/models/view/sendView\";\n\n@Directive()\nexport class SendComponent implements OnInit {\n disableSend = false;\n sendType = SendType;\n loaded = false;\n loading = true;\n refreshing = false;\n expired = false;\n type: SendType = null;\n sends: SendView[] = [];\n filteredSends: SendView[] = [];\n searchText: string;\n selectedType: SendType;\n selectedAll: boolean;\n searchPlaceholder: string;\n filter: (cipher: SendView) => boolean;\n searchPending = false;\n hasSearched = false; // search() function called - returns true if text qualifies for search\n\n actionPromise: any;\n onSuccessfulRemovePassword: () => Promise;\n onSuccessfulDelete: () => Promise;\n onSuccessfulLoad: () => Promise;\n\n private searchTimeout: any;\n\n constructor(\n protected sendService: SendService,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected environmentService: EnvironmentService,\n protected ngZone: NgZone,\n protected searchService: SearchService,\n protected policyService: PolicyService,\n private logService: LogService\n ) {}\n\n async ngOnInit() {\n this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n }\n\n async load(filter: (send: SendView) => boolean = null) {\n this.loading = true;\n const sends = await this.sendService.getAllDecrypted();\n this.sends = sends;\n if (this.onSuccessfulLoad != null) {\n await this.onSuccessfulLoad();\n } else {\n // Default action\n this.selectAll();\n }\n this.loading = false;\n this.loaded = true;\n }\n\n async reload(filter: (send: SendView) => boolean = null) {\n this.loaded = false;\n this.sends = [];\n await this.load(filter);\n }\n\n async refresh() {\n try {\n this.refreshing = true;\n await this.reload(this.filter);\n } finally {\n this.refreshing = false;\n }\n }\n\n async applyFilter(filter: (send: SendView) => boolean = null) {\n this.filter = filter;\n await this.search(null);\n }\n\n async search(timeout: number = null) {\n this.searchPending = false;\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n if (timeout == null) {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n return;\n }\n this.searchPending = true;\n this.searchTimeout = setTimeout(async () => {\n this.hasSearched = this.searchService.isSearchable(this.searchText);\n this.filteredSends = this.sends.filter((s) => this.filter == null || this.filter(s));\n this.applyTextSearch();\n this.searchPending = false;\n }, timeout);\n }\n\n async removePassword(s: SendView): Promise {\n if (this.actionPromise != null || s.password == null) {\n return;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"removePasswordConfirmation\"),\n this.i18nService.t(\"removePassword\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.removePasswordWithServer(s.id);\n await this.actionPromise;\n if (this.onSuccessfulRemovePassword != null) {\n this.onSuccessfulRemovePassword();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"removedPassword\"));\n await this.load();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n }\n\n async delete(s: SendView): Promise {\n if (this.actionPromise != null) {\n return false;\n }\n const confirmed = await this.platformUtilsService.showDialog(\n this.i18nService.t(\"deleteSendConfirmation\"),\n this.i18nService.t(\"deleteSend\"),\n this.i18nService.t(\"yes\"),\n this.i18nService.t(\"no\"),\n \"warning\"\n );\n if (!confirmed) {\n return false;\n }\n\n try {\n this.actionPromise = this.sendService.deleteWithServer(s.id);\n await this.actionPromise;\n\n if (this.onSuccessfulDelete != null) {\n this.onSuccessfulDelete();\n } else {\n // Default actions\n this.platformUtilsService.showToast(\"success\", null, this.i18nService.t(\"deletedSend\"));\n await this.refresh();\n }\n } catch (e) {\n this.logService.error(e);\n }\n this.actionPromise = null;\n return true;\n }\n\n copy(s: SendView) {\n const sendLinkBaseUrl = this.environmentService.getSendUrl();\n const link = sendLinkBaseUrl + s.accessId + \"/\" + s.urlB64Key;\n this.platformUtilsService.copyToClipboard(link);\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"valueCopied\", this.i18nService.t(\"sendLink\"))\n );\n }\n\n searchTextChanged() {\n this.search(200);\n }\n\n selectAll() {\n this.clearSelections();\n this.selectedAll = true;\n this.applyFilter(null);\n }\n\n selectType(type: SendType) {\n this.clearSelections();\n this.selectedType = type;\n this.applyFilter((s) => s.type === type);\n }\n\n clearSelections() {\n this.selectedAll = false;\n this.selectedType = null;\n }\n\n private applyTextSearch() {\n if (this.searchText != null) {\n this.filteredSends = this.searchService.searchSends(this.filteredSends, this.searchText);\n }\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { HashPurpose } from \"jslib-common/enums/hashPurpose\";\nimport { DEFAULT_KDF_ITERATIONS, DEFAULT_KDF_TYPE } from \"jslib-common/enums/kdfType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { KeysRequest } from \"jslib-common/models/request/keysRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { SetPasswordRequest } from \"jslib-common/models/request/setPasswordRequest\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class SetPasswordComponent extends BaseChangePasswordComponent {\n syncLoading = true;\n showPassword = false;\n hint = \"\";\n identifier: string = null;\n orgId: string;\n resetPasswordAutoEnroll = false;\n\n onSuccessfulChangePassword: () => Promise;\n successRoute = \"vault\";\n\n constructor(\n i18nService: I18nService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n passwordGenerationService: PasswordGenerationService,\n platformUtilsService: PlatformUtilsService,\n policyService: PolicyService,\n protected router: Router,\n private apiService: ApiService,\n private syncService: SyncService,\n private route: ActivatedRoute,\n stateService: StateService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n this.syncLoading = false;\n\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n // Automatic Enrollment Detection\n if (this.identifier != null) {\n try {\n const response = await this.apiService.getOrganizationAutoEnrollStatus(this.identifier);\n this.orgId = response.id;\n this.resetPasswordAutoEnroll = response.resetPasswordEnabled;\n this.enforcedPolicyOptions =\n await this.policyService.getMasterPasswordPoliciesForInvitedUsers(this.orgId);\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n super.ngOnInit();\n }\n\n async setupSubmitActions() {\n this.kdf = DEFAULT_KDF_TYPE;\n this.kdfIterations = DEFAULT_KDF_ITERATIONS;\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n const request = new SetPasswordRequest(\n masterPasswordHash,\n encKey[1].encryptedString,\n this.hint,\n this.kdf,\n this.kdfIterations,\n this.identifier,\n new KeysRequest(keys[0], keys[1].encryptedString)\n );\n try {\n if (this.resetPasswordAutoEnroll) {\n this.formPromise = this.apiService\n .setPassword(request)\n .then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n return this.apiService.getOrganizationKeys(this.orgId);\n })\n .then(async (response) => {\n if (response == null) {\n throw new Error(this.i18nService.t(\"resetPasswordOrgKeysError\"));\n }\n const userId = await this.stateService.getUserId();\n const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n // RSA Encrypt user's encKey.key with organization public key\n const userEncKey = await this.cryptoService.getEncKey();\n const encryptedKey = await this.cryptoService.rsaEncrypt(\n userEncKey.key,\n publicKey.buffer\n );\n\n const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n resetRequest.masterPasswordHash = masterPasswordHash;\n resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n return this.apiService.putOrganizationUserResetPasswordEnrollment(\n this.orgId,\n userId,\n resetRequest\n );\n });\n } else {\n this.formPromise = this.apiService.setPassword(request).then(async () => {\n await this.onSetPasswordSuccess(key, encKey, keys);\n });\n }\n\n await this.formPromise;\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.router.navigate([this.successRoute]);\n }\n } catch {\n this.platformUtilsService.showToast(\"error\", null, this.i18nService.t(\"errorOccurred\"));\n }\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n private async onSetPasswordSuccess(\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString],\n keys: [string, EncString]\n ) {\n await this.stateService.setKdfType(this.kdf);\n await this.stateService.setKdfIterations(this.kdfIterations);\n await this.cryptoService.setKey(key);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n const localKeyHash = await this.cryptoService.hashPassword(\n this.masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n await this.cryptoService.setKeyHash(localKeyHash);\n }\n}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n ValidationErrors,\n Validator,\n} from \"@angular/forms\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Policy } from \"jslib-common/models/domain/policy\";\n\n@Directive()\nexport class VaultTimeoutInputComponent implements ControlValueAccessor, Validator, OnInit {\n get showCustom() {\n return this.form.get(\"vaultTimeout\").value === VaultTimeoutInputComponent.CUSTOM_VALUE;\n }\n\n get exceedsMinimumTimout(): boolean {\n return (\n !this.showCustom || this.customTimeInMinutes() > VaultTimeoutInputComponent.MIN_CUSTOM_MINUTES\n );\n }\n\n static CUSTOM_VALUE = -100;\n static MIN_CUSTOM_MINUTES = 0;\n\n form = this.formBuilder.group({\n vaultTimeout: [null],\n custom: this.formBuilder.group({\n hours: [null],\n minutes: [null],\n }),\n });\n\n @Input() vaultTimeouts: { name: string; value: number }[];\n vaultTimeoutPolicy: Policy;\n vaultTimeoutPolicyHours: number;\n vaultTimeoutPolicyMinutes: number;\n\n private onChange: (vaultTimeout: number) => void;\n private validatorChange: () => void;\n\n constructor(\n private formBuilder: FormBuilder,\n private policyService: PolicyService,\n private i18nService: I18nService\n ) {}\n\n async ngOnInit() {\n if (await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout)) {\n const vaultTimeoutPolicy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout);\n\n this.vaultTimeoutPolicy = vaultTimeoutPolicy[0];\n this.vaultTimeoutPolicyHours = Math.floor(this.vaultTimeoutPolicy.data.minutes / 60);\n this.vaultTimeoutPolicyMinutes = this.vaultTimeoutPolicy.data.minutes % 60;\n\n this.vaultTimeouts = this.vaultTimeouts.filter(\n (t) =>\n t.value <= this.vaultTimeoutPolicy.data.minutes &&\n (t.value > 0 || t.value === VaultTimeoutInputComponent.CUSTOM_VALUE) &&\n t.value != null\n );\n this.validatorChange();\n }\n\n this.form.valueChanges.subscribe(async (value) => {\n this.onChange(this.getVaultTimeout(value));\n });\n\n // Assign the previous value to the custom fields\n this.form.get(\"vaultTimeout\").valueChanges.subscribe((value) => {\n if (value !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n return;\n }\n\n const current = Math.max(this.form.value.vaultTimeout, 0);\n this.form.patchValue({\n custom: {\n hours: Math.floor(current / 60),\n minutes: current % 60,\n },\n });\n });\n }\n\n ngOnChanges() {\n this.vaultTimeouts.push({\n name: this.i18nService.t(\"custom\"),\n value: VaultTimeoutInputComponent.CUSTOM_VALUE,\n });\n }\n\n getVaultTimeout(value: any) {\n if (value.vaultTimeout !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n return value.vaultTimeout;\n }\n\n return value.custom.hours * 60 + value.custom.minutes;\n }\n\n writeValue(value: number): void {\n if (value == null) {\n return;\n }\n\n if (this.vaultTimeouts.every((p) => p.value !== value)) {\n this.form.setValue({\n vaultTimeout: VaultTimeoutInputComponent.CUSTOM_VALUE,\n custom: {\n hours: Math.floor(value / 60),\n minutes: value % 60,\n },\n });\n return;\n }\n\n this.form.patchValue({\n vaultTimeout: value,\n });\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n // Empty\n }\n\n setDisabledState?(isDisabled: boolean): void {\n // Empty\n }\n\n validate(control: AbstractControl): ValidationErrors {\n if (this.vaultTimeoutPolicy && this.vaultTimeoutPolicy?.data?.minutes < control.value) {\n return { policyError: true };\n }\n\n if (!this.exceedsMinimumTimout) {\n return { minTimeoutError: true };\n }\n\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange = fn;\n }\n\n private customTimeInMinutes() {\n return this.form.get(\"custom.hours\")?.value * 60 + this.form.get(\"custom.minutes\")?.value;\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { OrganizationUserStatusType } from \"jslib-common/enums/organizationUserStatusType\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CipherView } from \"jslib-common/models/view/cipherView\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\n@Directive()\nexport class ShareComponent implements OnInit {\n @Input() cipherId: string;\n @Input() organizationId: string;\n @Output() onSharedCipher = new EventEmitter();\n\n formPromise: Promise;\n cipher: CipherView;\n collections: CollectionView[] = [];\n organizations: Organization[] = [];\n\n protected writeableCollections: CollectionView[] = [];\n\n constructor(\n protected collectionService: CollectionService,\n protected platformUtilsService: PlatformUtilsService,\n protected i18nService: I18nService,\n protected cipherService: CipherService,\n private logService: LogService,\n protected organizationService: OrganizationService\n ) {}\n\n async ngOnInit() {\n await this.load();\n }\n\n async load() {\n const allCollections = await this.collectionService.getAllDecrypted();\n this.writeableCollections = allCollections.map((c) => c).filter((c) => !c.readOnly);\n const orgs = await this.organizationService.getAll();\n this.organizations = orgs\n .sort(Utils.getSortFunction(this.i18nService, \"name\"))\n .filter((o) => o.enabled && o.status === OrganizationUserStatusType.Confirmed);\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n this.cipher = await cipherDomain.decrypt();\n if (this.organizationId == null && this.organizations.length > 0) {\n this.organizationId = this.organizations[0].id;\n }\n this.filterCollections();\n }\n\n filterCollections() {\n this.writeableCollections.forEach((c) => ((c as any).checked = false));\n if (this.organizationId == null || this.writeableCollections.length === 0) {\n this.collections = [];\n } else {\n this.collections = this.writeableCollections.filter(\n (c) => c.organizationId === this.organizationId\n );\n }\n }\n\n async submit(): Promise {\n const selectedCollectionIds = this.collections\n .filter((c) => !!(c as any).checked)\n .map((c) => c.id);\n if (selectedCollectionIds.length === 0) {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"selectOneCollection\")\n );\n return;\n }\n\n const cipherDomain = await this.cipherService.get(this.cipherId);\n const cipherView = await cipherDomain.decrypt();\n const orgName =\n this.organizations.find((o) => o.id === this.organizationId)?.name ??\n this.i18nService.t(\"organization\");\n\n try {\n this.formPromise = this.cipherService\n .shareWithServer(cipherView, this.organizationId, selectedCollectionIds)\n .then(async () => {\n this.onSharedCipher.emit();\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"movedItemToOrg\", cipherView.name, orgName)\n );\n });\n await this.formPromise;\n return true;\n } catch (e) {\n this.logService.error(e);\n }\n return false;\n }\n\n get canSave() {\n if (this.collections != null) {\n for (let i = 0; i < this.collections.length; i++) {\n if ((this.collections[i] as any).checked) {\n return true;\n }\n }\n }\n return false;\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { CryptoFunctionService } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { Utils } from \"jslib-common/misc/utils\";\nimport { AuthResult } from \"jslib-common/models/domain/authResult\";\nimport { SsoLogInCredentials } from \"jslib-common/models/domain/logInCredentials\";\nimport { SsoPreValidateResponse } from \"jslib-common/models/response/ssoPreValidateResponse\";\n\n@Directive()\nexport class SsoComponent {\n identifier: string;\n loggingIn = false;\n\n formPromise: Promise;\n initiateSsoFormPromise: Promise;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n onSuccessfulLoginTwoFactorNavigate: () => Promise;\n onSuccessfulLoginChangePasswordNavigate: () => Promise;\n onSuccessfulLoginForceResetNavigate: () => Promise;\n\n protected twoFactorRoute = \"2fa\";\n protected successRoute = \"lock\";\n protected changePasswordRoute = \"set-password\";\n protected forcePasswordResetRoute = \"update-temp-password\";\n protected clientId: string;\n protected redirectUri: string;\n protected state: string;\n protected codeChallenge: string;\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected route: ActivatedRoute,\n protected stateService: StateService,\n protected platformUtilsService: PlatformUtilsService,\n protected apiService: ApiService,\n protected cryptoFunctionService: CryptoFunctionService,\n protected environmentService: EnvironmentService,\n protected passwordGenerationService: PasswordGenerationService,\n protected logService: LogService\n ) {}\n\n async ngOnInit() {\n this.route.queryParams.pipe(first()).subscribe(async (qParams) => {\n if (qParams.code != null && qParams.state != null) {\n const codeVerifier = await this.stateService.getSsoCodeVerifier();\n const state = await this.stateService.getSsoState();\n await this.stateService.setSsoCodeVerifier(null);\n await this.stateService.setSsoState(null);\n if (\n qParams.code != null &&\n codeVerifier != null &&\n state != null &&\n this.checkState(state, qParams.state)\n ) {\n await this.logIn(\n qParams.code,\n codeVerifier,\n this.getOrgIdentifierFromState(qParams.state)\n );\n }\n } else if (\n qParams.clientId != null &&\n qParams.redirectUri != null &&\n qParams.state != null &&\n qParams.codeChallenge != null\n ) {\n this.redirectUri = qParams.redirectUri;\n this.state = qParams.state;\n this.codeChallenge = qParams.codeChallenge;\n this.clientId = qParams.clientId;\n }\n });\n }\n\n async submit(returnUri?: string, includeUserIdentifier?: boolean) {\n if (this.identifier == null || this.identifier === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"ssoValidationFailed\"),\n this.i18nService.t(\"ssoIdentifierRequired\")\n );\n return;\n }\n\n this.initiateSsoFormPromise = this.apiService.preValidateSso(this.identifier);\n const response = await this.initiateSsoFormPromise;\n\n const authorizeUrl = await this.buildAuthorizeUrl(\n returnUri,\n includeUserIdentifier,\n response.token\n );\n this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n }\n\n protected async buildAuthorizeUrl(\n returnUri?: string,\n includeUserIdentifier?: boolean,\n token?: string\n ): Promise {\n let codeChallenge = this.codeChallenge;\n let state = this.state;\n\n const passwordOptions: any = {\n type: \"password\",\n length: 64,\n uppercase: true,\n lowercase: true,\n numbers: true,\n special: false,\n };\n\n if (codeChallenge == null) {\n const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, \"sha256\");\n codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n await this.stateService.setSsoCodeVerifier(codeVerifier);\n }\n\n if (state == null) {\n state = await this.passwordGenerationService.generatePassword(passwordOptions);\n if (returnUri) {\n state += `_returnUri='${returnUri}'`;\n }\n }\n\n // Add Organization Identifier to state\n state += `_identifier=${this.identifier}`;\n\n // Save state (regardless of new or existing)\n await this.stateService.setSsoState(state);\n\n let authorizeUrl =\n this.environmentService.getIdentityUrl() +\n \"/connect/authorize?\" +\n \"client_id=\" +\n this.clientId +\n \"&redirect_uri=\" +\n encodeURIComponent(this.redirectUri) +\n \"&\" +\n \"response_type=code&scope=api offline_access&\" +\n \"state=\" +\n state +\n \"&code_challenge=\" +\n codeChallenge +\n \"&\" +\n \"code_challenge_method=S256&response_mode=query&\" +\n \"domain_hint=\" +\n encodeURIComponent(this.identifier) +\n \"&ssoToken=\" +\n encodeURIComponent(token);\n\n if (includeUserIdentifier) {\n const userIdentifier = await this.apiService.getSsoUserIdentifier();\n authorizeUrl += `&user_identifier=${encodeURIComponent(userIdentifier)}`;\n }\n\n return authorizeUrl;\n }\n\n private async logIn(code: string, codeVerifier: string, orgIdFromState: string) {\n this.loggingIn = true;\n try {\n const credentials = new SsoLogInCredentials(\n code,\n codeVerifier,\n this.redirectUri,\n orgIdFromState\n );\n this.formPromise = this.authService.logIn(credentials);\n const response = await this.formPromise;\n if (response.requiresTwoFactor) {\n if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n this.onSuccessfulLoginTwoFactorNavigate();\n } else {\n this.router.navigate([this.twoFactorRoute], {\n queryParams: {\n identifier: orgIdFromState,\n sso: \"true\",\n },\n });\n }\n } else if (response.resetMasterPassword) {\n if (this.onSuccessfulLoginChangePasswordNavigate != null) {\n this.onSuccessfulLoginChangePasswordNavigate();\n } else {\n this.router.navigate([this.changePasswordRoute], {\n queryParams: {\n identifier: orgIdFromState,\n },\n });\n }\n } else if (response.forcePasswordReset) {\n if (this.onSuccessfulLoginForceResetNavigate != null) {\n this.onSuccessfulLoginForceResetNavigate();\n } else {\n this.router.navigate([this.forcePasswordResetRoute]);\n }\n } else {\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute]);\n }\n }\n } catch (e) {\n this.logService.error(e);\n\n // TODO: Key Connector Service should pass this error message to the logout callback instead of displaying here\n if (e.message === \"Key Connector error\") {\n this.platformUtilsService.showToast(\n \"error\",\n null,\n this.i18nService.t(\"ssoKeyConnectorError\")\n );\n }\n }\n this.loggingIn = false;\n }\n\n private getOrgIdentifierFromState(state: string): string {\n if (state === null || state === undefined) {\n return null;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n return stateSplit.length > 1 ? stateSplit[1] : null;\n }\n\n private checkState(state: string, checkState: string): boolean {\n if (state === null || state === undefined) {\n return false;\n }\n if (checkState === null || checkState === undefined) {\n return false;\n }\n\n const stateSplit = state.split(\"_identifier=\");\n const checkStateSplit = checkState.split(\"_identifier=\");\n return stateSplit[0] === checkStateSplit[0];\n }\n}\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { CommonModule } from \"@angular/common\";\nimport { Component, ModuleWithProviders, NgModule } from \"@angular/core\";\nimport {\n DefaultNoComponentGlobalConfig,\n GlobalConfig,\n Toast as BaseToast,\n ToastPackage,\n ToastrService,\n TOAST_CONFIG,\n} from \"ngx-toastr\";\n\n@Component({\n selector: \"[toast-component2]\",\n template: `\n \n ×\n \n
\n \n
\n
\n
\n {{ title }} [{{ duplicatesCount + 1 }}]\n
\n
\n \n {{ message }}\n \n \n
\n
\n
\n `,\n animations: [\n trigger(\"flyInOut\", [\n state(\"inactive\", style({ opacity: 0 })),\n state(\"active\", style({ opacity: 1 })),\n state(\"removed\", style({ opacity: 0 })),\n transition(\"inactive => active\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n transition(\"active => removed\", animate(\"{{ easeTime }}ms {{ easing }}\")),\n ]),\n ],\n preserveWhitespaces: false,\n})\nexport class BitwardenToast extends BaseToast {\n constructor(protected toastrService: ToastrService, public toastPackage: ToastPackage) {\n super(toastrService, toastPackage);\n }\n}\n\nexport const BitwardenToastGlobalConfig: GlobalConfig = {\n ...DefaultNoComponentGlobalConfig,\n toastComponent: BitwardenToast,\n};\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitwardenToast],\n exports: [BitwardenToast],\n})\nexport class BitwardenToastModule {\n static forRoot(config: Partial = {}): ModuleWithProviders {\n return {\n ngModule: BitwardenToastModule,\n providers: [\n {\n provide: TOAST_CONFIG,\n useValue: {\n default: BitwardenToastGlobalConfig,\n config: config,\n },\n },\n ],\n };\n }\n}\n","import { Directive, EventEmitter, OnInit, Output } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\n@Directive()\nexport class TwoFactorOptionsComponent implements OnInit {\n @Output() onProviderSelected = new EventEmitter();\n @Output() onRecoverSelected = new EventEmitter();\n\n providers: any[] = [];\n\n constructor(\n protected twoFactorService: TwoFactorService,\n protected router: Router,\n protected i18nService: I18nService,\n protected platformUtilsService: PlatformUtilsService,\n protected win: Window\n ) {}\n\n ngOnInit() {\n this.providers = this.twoFactorService.getSupportedProviders(this.win);\n }\n\n choose(p: any) {\n this.onProviderSelected.emit(p.type);\n }\n\n recover() {\n this.platformUtilsService.launchUri(\"https://bitwarden.com/help/lost-two-step-device/\");\n this.onRecoverSelected.emit();\n }\n}\n","import { Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport * as DuoWebSDK from \"duo_web_sdk\";\nimport { first } from \"rxjs/operators\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { AppIdService } from \"jslib-common/abstractions/appId.service\";\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { EnvironmentService } from \"jslib-common/abstractions/environment.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { TwoFactorService } from \"jslib-common/abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\nimport { WebAuthnIFrame } from \"jslib-common/misc/webauthn_iframe\";\nimport { AuthResult } from \"jslib-common/models/domain/authResult\";\nimport { TokenRequestTwoFactor } from \"jslib-common/models/request/identityToken/tokenRequestTwoFactor\";\nimport { TwoFactorEmailRequest } from \"jslib-common/models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviders } from \"jslib-common/services/twoFactor.service\";\n\nimport { CaptchaProtectedComponent } from \"./captchaProtected.component\";\n\n@Directive()\nexport class TwoFactorComponent extends CaptchaProtectedComponent implements OnInit, OnDestroy {\n token = \"\";\n remember = false;\n webAuthnReady = false;\n webAuthnNewTab = false;\n providers = TwoFactorProviders;\n providerType = TwoFactorProviderType;\n selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator;\n webAuthnSupported = false;\n webAuthn: WebAuthnIFrame = null;\n title = \"\";\n twoFactorEmail: string = null;\n formPromise: Promise;\n emailPromise: Promise;\n identifier: string = null;\n onSuccessfulLogin: () => Promise;\n onSuccessfulLoginNavigate: () => Promise;\n\n get webAuthnAllow(): string {\n return `publickey-credentials-get ${this.environmentService.getWebVaultUrl()}`;\n }\n\n protected loginRoute = \"login\";\n protected successRoute = \"vault\";\n\n constructor(\n protected authService: AuthService,\n protected router: Router,\n protected i18nService: I18nService,\n protected apiService: ApiService,\n protected platformUtilsService: PlatformUtilsService,\n protected win: Window,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected route: ActivatedRoute,\n protected logService: LogService,\n protected twoFactorService: TwoFactorService,\n protected appIdService: AppIdService\n ) {\n super(environmentService, i18nService, platformUtilsService);\n this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n }\n\n async ngOnInit() {\n if (!this.authing || this.twoFactorService.getProviders() == null) {\n this.router.navigate([this.loginRoute]);\n return;\n }\n\n this.route.queryParams.pipe(first()).subscribe((qParams) => {\n if (qParams.identifier != null) {\n this.identifier = qParams.identifier;\n }\n });\n\n if (this.needsLock) {\n this.successRoute = \"lock\";\n }\n\n if (this.win != null && this.webAuthnSupported) {\n const webVaultUrl = this.environmentService.getWebVaultUrl();\n this.webAuthn = new WebAuthnIFrame(\n this.win,\n webVaultUrl,\n this.webAuthnNewTab,\n this.platformUtilsService,\n this.i18nService,\n (token: string) => {\n this.token = token;\n this.submit();\n },\n (error: string) => {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), error);\n },\n (info: string) => {\n if (info === \"ready\") {\n this.webAuthnReady = true;\n }\n }\n );\n }\n\n this.selectedProviderType = this.twoFactorService.getDefaultProvider(this.webAuthnSupported);\n await this.init();\n }\n\n ngOnDestroy(): void {\n this.cleanupWebAuthn();\n this.webAuthn = null;\n }\n\n async init() {\n if (this.selectedProviderType == null) {\n this.title = this.i18nService.t(\"loginUnavailable\");\n return;\n }\n\n this.cleanupWebAuthn();\n this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n switch (this.selectedProviderType) {\n case TwoFactorProviderType.WebAuthn:\n if (!this.webAuthnNewTab) {\n setTimeout(() => {\n this.authWebAuthn();\n }, 500);\n }\n break;\n case TwoFactorProviderType.Duo:\n case TwoFactorProviderType.OrganizationDuo:\n setTimeout(() => {\n DuoWebSDK.init({\n iframe: undefined,\n host: providerData.Host,\n sig_request: providerData.Signature,\n submit_callback: async (f: HTMLFormElement) => {\n const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n if (sig != null) {\n this.token = sig.value;\n await this.submit();\n }\n },\n });\n }, 0);\n break;\n case TwoFactorProviderType.Email:\n this.twoFactorEmail = providerData.Email;\n if (this.twoFactorService.getProviders().size > 1) {\n await this.sendEmail(false);\n }\n break;\n default:\n break;\n }\n }\n\n async submit() {\n await this.setupCaptcha();\n\n if (this.token == null || this.token === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"verificationCodeRequired\")\n );\n return;\n }\n\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n } else {\n return;\n }\n } else if (\n this.selectedProviderType === TwoFactorProviderType.Email ||\n this.selectedProviderType === TwoFactorProviderType.Authenticator\n ) {\n this.token = this.token.replace(\" \", \"\").trim();\n }\n\n try {\n await this.doSubmit();\n } catch {\n if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n this.webAuthn.start();\n }\n }\n }\n\n async doSubmit() {\n this.formPromise = this.authService.logInTwoFactor(\n new TokenRequestTwoFactor(this.selectedProviderType, this.token, this.remember),\n this.captchaToken\n );\n const response: AuthResult = await this.formPromise;\n const disableFavicon = await this.stateService.getDisableFavicon();\n await this.stateService.setDisableFavicon(!!disableFavicon);\n if (this.handleCaptchaRequired(response)) {\n return;\n }\n if (this.onSuccessfulLogin != null) {\n this.onSuccessfulLogin();\n }\n if (response.resetMasterPassword) {\n this.successRoute = \"set-password\";\n }\n if (response.forcePasswordReset) {\n this.successRoute = \"update-temp-password\";\n }\n if (this.onSuccessfulLoginNavigate != null) {\n this.onSuccessfulLoginNavigate();\n } else {\n this.router.navigate([this.successRoute], {\n queryParams: {\n identifier: this.identifier,\n },\n });\n }\n }\n\n async sendEmail(doToast: boolean) {\n if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n return;\n }\n\n if (this.emailPromise != null) {\n return;\n }\n\n try {\n const request = new TwoFactorEmailRequest();\n request.email = this.authService.email;\n request.masterPasswordHash = this.authService.masterPasswordHash;\n request.deviceIdentifier = await this.appIdService.getAppId();\n this.emailPromise = this.apiService.postTwoFactorEmail(request);\n await this.emailPromise;\n if (doToast) {\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"verificationCodeEmailSent\", this.twoFactorEmail)\n );\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n this.emailPromise = null;\n }\n\n authWebAuthn() {\n const providerData = this.twoFactorService.getProviders().get(this.selectedProviderType);\n\n if (!this.webAuthnSupported || this.webAuthn == null) {\n return;\n }\n\n this.webAuthn.init(providerData);\n }\n\n private cleanupWebAuthn() {\n if (this.webAuthn != null) {\n this.webAuthn.stop();\n this.webAuthn.cleanup();\n }\n }\n\n get authing(): boolean {\n return (\n this.authService.authingWithPassword() ||\n this.authService.authingWithSso() ||\n this.authService.authingWithApiKey()\n );\n }\n\n get needsLock(): boolean {\n return this.authService.authingWithSso() || this.authService.authingWithApiKey();\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { PasswordRequest } from \"jslib-common/models/request/passwordRequest\";\nimport { Verification } from \"jslib-common/types/verification\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class UpdatePasswordComponent extends BaseChangePasswordComponent {\n hint: string;\n key: string;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n showPassword = false;\n currentMasterPassword: string;\n\n onSuccessfulChangePassword: () => Promise;\n\n constructor(\n protected router: Router,\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n private apiService: ApiService,\n stateService: StateService,\n private userVerificationService: UserVerificationService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n async cancel() {\n await this.stateService.setOrganizationInvitation(null);\n this.router.navigate([\"/vault\"]);\n }\n\n async setupSubmitActions(): Promise {\n if (this.currentMasterPassword == null || this.currentMasterPassword === \"\") {\n this.platformUtilsService.showToast(\n \"error\",\n this.i18nService.t(\"errorOccurred\"),\n this.i18nService.t(\"masterPassRequired\")\n );\n return false;\n }\n\n const secret: Verification = {\n type: VerificationType.MasterPassword,\n secret: this.currentMasterPassword,\n };\n try {\n await this.userVerificationService.verifyUser(secret);\n } catch (e) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), e.message);\n return false;\n }\n\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n return true;\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create Request\n const request = new PasswordRequest();\n request.masterPasswordHash = await this.cryptoService.hashPassword(\n this.currentMasterPassword,\n null\n );\n request.newMasterPasswordHash = masterPasswordHash;\n request.key = encKey[1].encryptedString;\n\n // Update user's password\n this.apiService.postPassword(request);\n\n this.platformUtilsService.showToast(\n \"success\",\n this.i18nService.t(\"masterPasswordChanged\"),\n this.i18nService.t(\"logBackIn\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { Directive } from \"@angular/core\";\n\nimport { ApiService } from \"jslib-common/abstractions/api.service\";\nimport { CryptoService } from \"jslib-common/abstractions/crypto.service\";\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { PasswordGenerationService } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { SyncService } from \"jslib-common/abstractions/sync.service\";\nimport { EncString } from \"jslib-common/models/domain/encString\";\nimport { MasterPasswordPolicyOptions } from \"jslib-common/models/domain/masterPasswordPolicyOptions\";\nimport { SymmetricCryptoKey } from \"jslib-common/models/domain/symmetricCryptoKey\";\nimport { UpdateTempPasswordRequest } from \"jslib-common/models/request/updateTempPasswordRequest\";\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from \"./change-password.component\";\n\n@Directive()\nexport class UpdateTempPasswordComponent extends BaseChangePasswordComponent {\n hint: string;\n key: string;\n enforcedPolicyOptions: MasterPasswordPolicyOptions;\n showPassword = false;\n\n onSuccessfulChangePassword: () => Promise;\n\n constructor(\n i18nService: I18nService,\n platformUtilsService: PlatformUtilsService,\n passwordGenerationService: PasswordGenerationService,\n policyService: PolicyService,\n cryptoService: CryptoService,\n messagingService: MessagingService,\n private apiService: ApiService,\n stateService: StateService,\n private syncService: SyncService,\n private logService: LogService\n ) {\n super(\n i18nService,\n cryptoService,\n messagingService,\n passwordGenerationService,\n platformUtilsService,\n policyService,\n stateService\n );\n }\n\n async ngOnInit() {\n await this.syncService.fullSync(true);\n super.ngOnInit();\n }\n\n togglePassword(confirmField: boolean) {\n this.showPassword = !this.showPassword;\n document.getElementById(confirmField ? \"masterPasswordRetype\" : \"masterPassword\").focus();\n }\n\n async setupSubmitActions(): Promise {\n this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n this.email = await this.stateService.getEmail();\n this.kdf = await this.stateService.getKdfType();\n this.kdfIterations = await this.stateService.getKdfIterations();\n return true;\n }\n\n async submit() {\n // Validation\n if (!(await this.strongPassword())) {\n return;\n }\n\n if (!(await this.setupSubmitActions())) {\n return;\n }\n\n try {\n // Create new key and hash new password\n const newKey = await this.cryptoService.makeKey(\n this.masterPassword,\n this.email.trim().toLowerCase(),\n this.kdf,\n this.kdfIterations\n );\n const newPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n\n // Grab user's current enc key\n const userEncKey = await this.cryptoService.getEncKey();\n\n // Create new encKey for the User\n const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n await this.performSubmitActions(newPasswordHash, newKey, newEncKey);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async performSubmitActions(\n masterPasswordHash: string,\n key: SymmetricCryptoKey,\n encKey: [SymmetricCryptoKey, EncString]\n ) {\n try {\n // Create request\n const request = new UpdateTempPasswordRequest();\n request.key = encKey[1].encryptedString;\n request.newMasterPasswordHash = masterPasswordHash;\n request.masterPasswordHint = this.hint;\n\n // Update user's password\n this.formPromise = this.apiService.putUpdateTempPassword(request);\n await this.formPromise;\n this.platformUtilsService.showToast(\n \"success\",\n null,\n this.i18nService.t(\"updatedMasterPassword\")\n );\n\n if (this.onSuccessfulChangePassword != null) {\n this.onSuccessfulChangePassword();\n } else {\n this.messagingService.send(\"logout\");\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { animate, style, transition, trigger } from \"@angular/animations\";\nimport { Component, OnInit } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { UserVerificationService } from \"jslib-common/abstractions/userVerification.service\";\nimport { VerificationType } from \"jslib-common/enums/verificationType\";\nimport { Verification } from \"jslib-common/types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Collects the user's master password, or if they are using Key Connector, prompts for an OTP via email.\n * This is exposed to the parent component via the ControlValueAccessor interface (e.g. bind it to a FormControl).\n * Use UserVerificationService to verify the user's input.\n */\n@Component({\n selector: \"app-user-verification\",\n templateUrl: \"user-verification.component.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: UserVerificationComponent,\n },\n ],\n animations: [\n trigger(\"sent\", [\n transition(\":enter\", [style({ opacity: 0 }), animate(\"100ms\", style({ opacity: 1 }))]),\n ]),\n ],\n})\nexport class UserVerificationComponent implements ControlValueAccessor, OnInit {\n usesKeyConnector = false;\n disableRequestOTP = false;\n sentCode = false;\n\n secret = new FormControl(\"\");\n\n private onChange: (value: Verification) => void;\n\n constructor(\n private keyConnectorService: KeyConnectorService,\n private userVerificationService: UserVerificationService\n ) {}\n\n async ngOnInit() {\n this.usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n this.processChanges(this.secret.value);\n\n this.secret.valueChanges.subscribe((secret: string) => this.processChanges(secret));\n }\n\n async requestOTP() {\n if (this.usesKeyConnector) {\n this.disableRequestOTP = true;\n try {\n await this.userVerificationService.requestOTP();\n this.sentCode = true;\n } finally {\n this.disableRequestOTP = false;\n }\n }\n }\n\n writeValue(obj: any): void {\n this.secret.setValue(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n // Not implemented\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disableRequestOTP = isDisabled;\n if (isDisabled) {\n this.secret.disable();\n } else {\n this.secret.enable();\n }\n }\n\n private processChanges(secret: string) {\n if (this.onChange == null) {\n return;\n }\n\n this.onChange({\n type: this.usesKeyConnector ? VerificationType.OTP : VerificationType.MasterPassword,\n secret: secret,\n });\n }\n}\n","\n \n \n {{ \"confirmIdentity\" | i18n }}\n\n\n
\n \n \n {{ \"sendCode\" | i18n }}\n \n \n \n {{ \"codeSent\" | i18n }}\n \n
\n\n
\n \n \n {{ \"confirmIdentity\" | i18n }}\n
\n
\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appA11yTitle]\",\n})\nexport class A11yTitleDirective {\n @Input() set appA11yTitle(title: string) {\n this.title = title;\n }\n\n private title: string;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (!this.el.nativeElement.hasAttribute(\"title\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"title\", this.title);\n }\n if (!this.el.nativeElement.hasAttribute(\"aria-label\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"aria-label\", this.title);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from \"@angular/core\";\n\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\n\nimport { ValidationService } from \"../services/validation.service\";\n\n/**\n * Provides error handling, in particular for any error returned by the server in an api call.\n * Attach it to a
element and provide the name of the class property that will hold the api call promise.\n * e.g. \n * Any errors/rejections that occur will be intercepted and displayed as error toasts.\n */\n@Directive({\n selector: \"[appApiAction]\",\n})\nexport class ApiActionDirective implements OnChanges {\n @Input() appApiAction: Promise;\n\n constructor(\n private el: ElementRef,\n private validationService: ValidationService,\n private logService: LogService\n ) {}\n\n ngOnChanges(changes: any) {\n if (this.appApiAction == null || this.appApiAction.then == null) {\n return;\n }\n\n this.el.nativeElement.loading = true;\n\n this.appApiAction.then(\n (response: any) => {\n this.el.nativeElement.loading = false;\n },\n (e: any) => {\n this.el.nativeElement.loading = false;\n\n if ((e as ErrorResponse).captchaRequired) {\n this.logService.error(\"Captcha required error response: \" + e.getSingleMessage());\n return;\n }\n this.logService?.error(`Received API exception: ${e}`);\n this.validationService.showError(e);\n }\n );\n }\n}\n","import { Directive, ElementRef, Input, NgZone } from \"@angular/core\";\nimport { take } from \"rxjs/operators\";\n\nimport { Utils } from \"jslib-common/misc/utils\";\n\n@Directive({\n selector: \"[appAutofocus]\",\n})\nexport class AutofocusDirective {\n @Input() set appAutofocus(condition: boolean | string) {\n this.autofocus = condition === \"\" || condition === true;\n }\n\n private autofocus: boolean;\n\n constructor(private el: ElementRef, private ngZone: NgZone) {}\n\n ngOnInit() {\n if (!Utils.isMobileBrowser && this.autofocus) {\n if (this.ngZone.isStable) {\n this.el.nativeElement.focus();\n } else {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.el.nativeElement.focus());\n }\n }\n }\n}\n","import { Directive, ElementRef, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appBlurClick]\",\n})\nexport class BlurClickDirective {\n constructor(private el: ElementRef) {}\n\n @HostListener(\"click\") onClick() {\n this.el.nativeElement.blur();\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from \"@angular/core\";\n\n@Directive({\n selector: \"[appFallbackSrc]\",\n})\nexport class FallbackSrcDirective {\n @Input(\"appFallbackSrc\") appFallbackSrc: string;\n\n constructor(private el: ElementRef) {}\n\n @HostListener(\"error\") onError() {\n this.el.nativeElement.src = this.appFallbackSrc;\n }\n}\n","import { Directive, ElementRef, Input, Renderer2 } from \"@angular/core\";\n\n@Directive({\n selector: \"[appInputVerbatim]\",\n})\nexport class InputVerbatimDirective {\n @Input() set appInputVerbatim(condition: boolean | string) {\n this.disableComplete = condition === \"\" || condition === true;\n }\n\n private disableComplete: boolean;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit() {\n if (this.disableComplete && !this.el.nativeElement.hasAttribute(\"autocomplete\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocomplete\", \"off\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocapitalize\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocapitalize\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"autocorrect\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"autocorrect\", \"none\");\n }\n if (!this.el.nativeElement.hasAttribute(\"spellcheck\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"spellcheck\", \"false\");\n }\n if (!this.el.nativeElement.hasAttribute(\"inputmode\")) {\n this.renderer.setAttribute(this.el.nativeElement, \"inputmode\", \"verbatim\");\n }\n }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\nimport { StateService } from \"jslib-common/abstractions/state.service\";\n\n/**\n * Hides the element if the user has premium.\n */\n@Directive({\n selector: \"[appNotPremium]\",\n})\nexport class NotPremiumDirective implements OnInit {\n constructor(\n private templateRef: TemplateRef,\n private viewContainer: ViewContainerRef,\n private stateService: StateService\n ) {}\n\n async ngOnInit(): Promise {\n const premium = await this.stateService.getCanAccessPremium();\n\n if (premium) {\n this.viewContainer.clear();\n } else {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n }\n}\n","import { Directive, ElementRef, HostListener } from \"@angular/core\";\n\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\n\n@Directive({\n selector: \"[appSelectCopy]\",\n})\nexport class SelectCopyDirective {\n constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) {}\n\n @HostListener(\"copy\") onCopy() {\n if (window == null) {\n return;\n }\n let copyText = \"\";\n const selection = window.getSelection();\n for (let i = 0; i < selection.rangeCount; i++) {\n const range = selection.getRangeAt(i);\n const text = range.toString();\n\n // The selection should only contain one line of text. In some cases however, the\n // selection contains newlines and space characters from the indentation of following\n // sibling nodes. To avoid copying passwords containing trailing newlines and spaces\n // that aren't part of the password, the selection has to be trimmed.\n let stringEndPos = text.length;\n const newLinePos = text.search(/(?:\\r\\n|\\r|\\n)/);\n if (newLinePos > -1) {\n const otherPart = text.substr(newLinePos).trim();\n if (otherPart === \"\") {\n stringEndPos = newLinePos;\n }\n }\n copyText += text.substring(0, stringEndPos);\n }\n this.platformUtilsService.copyToClipboard(copyText, { window: window });\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopClick]\",\n})\nexport class StopClickDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.preventDefault();\n }\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({\n selector: \"[appStopProp]\",\n})\nexport class StopPropDirective {\n @HostListener(\"click\", [\"$event\"]) onClick($event: MouseEvent) {\n $event.stopPropagation();\n }\n}\n","import { Directive, ElementRef, forwardRef, HostListener, Input, Renderer2 } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n selector: \"input[type=checkbox][appTrueFalseValue]\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TrueFalseValueDirective),\n multi: true,\n },\n ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n @Input() trueValue = true;\n @Input() falseValue = false;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n @HostListener(\"change\", [\"$event\"])\n onHostChange(ev: any) {\n this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n }\n\n writeValue(obj: any): void {\n if (obj === this.trueValue) {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", true);\n } else {\n this.renderer.setProperty(this.elementRef.nativeElement, \"checked\", false);\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n /* nothing */\n }\n\n setDisabledState?(isDisabled: boolean): void {\n /* nothing */\n }\n\n private propagateChange = (_: any) => {\n /* nothing */\n };\n}\n","import { Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from \"@angular/router\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { MessagingService } from \"jslib-common/abstractions/messaging.service\";\nimport { AuthenticationStatus } from \"jslib-common/enums/authenticationStatus\";\n\n@Injectable()\nexport class AuthGuard implements CanActivate {\n constructor(\n private authService: AuthService,\n private router: Router,\n private messagingService: MessagingService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n this.messagingService.send(\"authBlocked\", { url: routerState.url });\n return false;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n if (routerState != null) {\n this.messagingService.send(\"lockedUrl\", { url: routerState.url });\n }\n return this.router.createUrlTree([\"lock\"], { queryParams: { promptBiometric: true } });\n }\n\n if (\n !routerState.url.includes(\"remove-password\") &&\n (await this.keyConnectorService.getConvertAccountRequired())\n ) {\n return this.router.createUrlTree([\"/remove-password\"]);\n }\n\n return true;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"jslib-common/enums/authenticationStatus\";\n\n@Injectable()\nexport class LockGuard implements CanActivate {\n protected homepage = \"vault\";\n protected loginpage = \"login\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.Locked) {\n return true;\n }\n\n const redirectUrl =\n authStatus === AuthenticationStatus.LoggedOut ? this.loginpage : this.homepage;\n\n return this.router.createUrlTree([redirectUrl]);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { CanActivate, Router } from \"@angular/router\";\n\nimport { AuthService } from \"jslib-common/abstractions/auth.service\";\nimport { AuthenticationStatus } from \"jslib-common/enums/authenticationStatus\";\n\n@Injectable()\nexport class UnauthGuard implements CanActivate {\n protected homepage = \"vault\";\n constructor(private authService: AuthService, private router: Router) {}\n\n async canActivate() {\n const authStatus = await this.authService.getAuthStatus();\n\n if (authStatus === AuthenticationStatus.LoggedOut) {\n return true;\n }\n\n if (authStatus === AuthenticationStatus.Locked) {\n return this.router.createUrlTree([\"lock\"]);\n }\n\n return this.router.createUrlTree([this.homepage]);\n }\n}\n","import { CommonModule, DatePipe } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\n\nimport { AvatarComponent } from \"./components/avatar.component\";\nimport { CalloutComponent } from \"./components/callout.component\";\nimport { ExportScopeCalloutComponent } from \"./components/export-scope-callout.component\";\nimport { IconComponent } from \"./components/icon.component\";\nimport { BitwardenToastModule } from \"./components/toastr.component\";\nimport { A11yInvalidDirective } from \"./directives/a11y-invalid.directive\";\nimport { A11yTitleDirective } from \"./directives/a11y-title.directive\";\nimport { ApiActionDirective } from \"./directives/api-action.directive\";\nimport { AutofocusDirective } from \"./directives/autofocus.directive\";\nimport { BlurClickDirective } from \"./directives/blur-click.directive\";\nimport { BoxRowDirective } from \"./directives/box-row.directive\";\nimport { FallbackSrcDirective } from \"./directives/fallback-src.directive\";\nimport { InputStripSpacesDirective } from \"./directives/input-strip-spaces.directive\";\nimport { InputVerbatimDirective } from \"./directives/input-verbatim.directive\";\nimport { NotPremiumDirective } from \"./directives/not-premium.directive\";\nimport { SelectCopyDirective } from \"./directives/select-copy.directive\";\nimport { StopClickDirective } from \"./directives/stop-click.directive\";\nimport { StopPropDirective } from \"./directives/stop-prop.directive\";\nimport { TrueFalseValueDirective } from \"./directives/true-false-value.directive\";\nimport { ColorPasswordCountPipe } from \"./pipes/color-password-count.pipe\";\nimport { ColorPasswordPipe } from \"./pipes/color-password.pipe\";\nimport { CreditCardNumberPipe } from \"./pipes/credit-card-number.pipe\";\nimport { EllipsisPipe } from \"./pipes/ellipsis.pipe\";\nimport { I18nPipe } from \"./pipes/i18n.pipe\";\nimport { SearchCiphersPipe } from \"./pipes/search-ciphers.pipe\";\nimport { SearchPipe } from \"./pipes/search.pipe\";\nimport { UserNamePipe } from \"./pipes/user-name.pipe\";\n\n@NgModule({\n imports: [\n BitwardenToastModule.forRoot({\n maxOpened: 5,\n autoDismiss: true,\n closeButton: true,\n }),\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n declarations: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n AvatarComponent,\n BlurClickDirective,\n BoxRowDirective,\n CalloutComponent,\n ColorPasswordCountPipe,\n ColorPasswordPipe,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n UserNamePipe,\n ],\n exports: [\n A11yInvalidDirective,\n A11yTitleDirective,\n ApiActionDirective,\n AutofocusDirective,\n AvatarComponent,\n BitwardenToastModule,\n BlurClickDirective,\n BoxRowDirective,\n CalloutComponent,\n ColorPasswordCountPipe,\n ColorPasswordPipe,\n CreditCardNumberPipe,\n EllipsisPipe,\n ExportScopeCalloutComponent,\n FallbackSrcDirective,\n I18nPipe,\n IconComponent,\n InputStripSpacesDirective,\n InputVerbatimDirective,\n NotPremiumDirective,\n SearchCiphersPipe,\n SearchPipe,\n SelectCopyDirective,\n StopClickDirective,\n StopPropDirective,\n TrueFalseValueDirective,\n UserNamePipe,\n ],\n providers: [CreditCardNumberPipe, DatePipe, I18nPipe, SearchPipe, UserNamePipe],\n})\nexport class JslibModule {}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ITreeNodeObject } from \"jslib-common/models/domain/treeNode\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class CollectionFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() collectionNodes: DynamicTreeNode;\n @Input() activeFilter: VaultFilter;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n\n readonly collectionsGrouping: TopLevelTreeNode = {\n id: \"collections\",\n name: \"collections\",\n };\n\n get collections() {\n return this.collectionNodes?.fullList;\n }\n\n get nestedCollections() {\n return this.collectionNodes?.nestedList;\n }\n\n get show() {\n return !this.hide && this.collections != null && this.collections.length > 0;\n }\n\n isCollapsed(node: ITreeNodeObject) {\n return this.collapsedFilterNodes.has(node.id);\n }\n\n applyFilter(collection: CollectionView) {\n this.activeFilter.resetFilter();\n this.activeFilter.selectedCollectionId = collection.id;\n this.onFilterChange.emit(this.activeFilter);\n }\n\n async toggleCollapse(node: ITreeNodeObject) {\n this.onNodeCollapseStateChange.emit(node);\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { ITreeNodeObject } from \"jslib-common/models/domain/treeNode\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\nimport { DynamicTreeNode } from \"../models/dynamic-tree-node.model\";\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class FolderFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() folderNodes: DynamicTreeNode;\n @Input() activeFilter: VaultFilter;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n\n get folders() {\n return this.folderNodes?.fullList;\n }\n\n get nestedFolders() {\n return this.folderNodes?.nestedList;\n }\n\n readonly foldersGrouping: TopLevelTreeNode = {\n id: \"folders\",\n name: \"folders\",\n };\n\n applyFilter(folder: FolderView) {\n this.activeFilter.resetFilter();\n this.activeFilter.selectedFolder = true;\n this.activeFilter.selectedFolderId = folder.id;\n this.onFilterChange.emit(this.activeFilter);\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n isCollapsed(node: ITreeNodeObject) {\n return this.collapsedFilterNodes.has(node.id);\n }\n\n async toggleCollapse(node: ITreeNodeObject) {\n this.onNodeCollapseStateChange.emit(node);\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { ITreeNodeObject } from \"jslib-common/models/domain/treeNode\";\n\nimport { DisplayMode } from \"../models/display-mode\";\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class OrganizationFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() organizations: Organization[];\n @Input() activeFilter: VaultFilter;\n @Input() activePersonalOwnershipPolicy: boolean;\n @Input() activeSingleOrganizationPolicy: boolean;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n\n get displayMode(): DisplayMode {\n let displayMode: DisplayMode = \"organizationMember\";\n if (this.organizations == null || this.organizations.length < 1) {\n displayMode = \"noOrganizations\";\n } else if (this.activePersonalOwnershipPolicy && !this.activeSingleOrganizationPolicy) {\n displayMode = \"personalOwnershipPolicy\";\n } else if (!this.activePersonalOwnershipPolicy && this.activeSingleOrganizationPolicy) {\n displayMode = \"singleOrganizationPolicy\";\n } else if (this.activePersonalOwnershipPolicy && this.activeSingleOrganizationPolicy) {\n displayMode = \"singleOrganizationAndPersonalOwnershipPolicies\";\n }\n\n return displayMode;\n }\n\n get hasActiveFilter() {\n return this.activeFilter.myVaultOnly || this.activeFilter.selectedOrganizationId != null;\n }\n\n readonly organizationGrouping: TopLevelTreeNode = {\n id: \"vaults\",\n name: \"allVaults\",\n };\n\n async applyOrganizationFilter(organization: Organization) {\n this.activeFilter.selectedOrganizationId = organization.id;\n this.activeFilter.myVaultOnly = false;\n this.activeFilter.refreshCollectionsAndFolders = true;\n this.applyFilter(this.activeFilter);\n }\n\n async applyMyVaultFilter() {\n this.activeFilter.selectedOrganizationId = null;\n this.activeFilter.myVaultOnly = true;\n this.activeFilter.refreshCollectionsAndFolders = true;\n this.applyFilter(this.activeFilter);\n }\n\n clearFilter() {\n this.activeFilter.myVaultOnly = false;\n this.activeFilter.selectedOrganizationId = null;\n this.applyFilter(new VaultFilter(this.activeFilter));\n }\n\n private applyFilter(filter: VaultFilter) {\n this.onFilterChange.emit(filter);\n }\n\n async toggleCollapse() {\n this.onNodeCollapseStateChange.emit(this.organizationGrouping);\n }\n\n get isCollapsed() {\n return this.collapsedFilterNodes.has(this.organizationGrouping.id);\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherStatus } from \"../models/cipher-status.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class StatusFilterComponent {\n @Input() hideFavorites = false;\n @Input() hideTrash = false;\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n @Input() activeFilter: VaultFilter;\n\n get show() {\n return !(this.hideFavorites && this.hideTrash);\n }\n\n applyFilter(cipherStatus: CipherStatus) {\n this.activeFilter.resetFilter();\n this.activeFilter.status = cipherStatus;\n this.onFilterChange.emit(this.activeFilter);\n }\n}\n","import { Directive, EventEmitter, Input, Output } from \"@angular/core\";\n\nimport { CipherType } from \"jslib-common/enums/cipherType\";\nimport { ITreeNodeObject } from \"jslib-common/models/domain/treeNode\";\n\nimport { TopLevelTreeNode } from \"../models/top-level-tree-node.model\";\nimport { VaultFilter } from \"../models/vault-filter.model\";\n\n@Directive()\nexport class TypeFilterComponent {\n @Input() hide = false;\n @Input() collapsedFilterNodes: Set;\n @Input() selectedCipherType: CipherType = null;\n @Input() activeFilter: VaultFilter;\n\n @Output() onNodeCollapseStateChange: EventEmitter =\n new EventEmitter();\n @Output() onFilterChange: EventEmitter = new EventEmitter();\n\n readonly typesNode: TopLevelTreeNode = {\n id: \"types\",\n name: \"types\",\n };\n\n cipherTypeEnum = CipherType; // used in the template\n\n get isCollapsed() {\n return this.collapsedFilterNodes.has(this.typesNode.id);\n }\n\n applyFilter(cipherType: CipherType) {\n this.activeFilter.resetFilter();\n this.activeFilter.cipherType = cipherType;\n this.onFilterChange.emit(this.activeFilter);\n }\n\n async toggleCollapse() {\n this.onNodeCollapseStateChange.emit(this.typesNode);\n }\n}\n","import { TreeNode } from \"jslib-common/models/domain/treeNode\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\nexport class DynamicTreeNode {\n fullList: T[];\n nestedList: TreeNode[];\n\n hasId(id: string): boolean {\n return this.fullList != null && this.fullList.filter((i: T) => i.id === id).length > 0;\n }\n\n constructor(init?: Partial>) {\n Object.assign(this, init);\n }\n}\n","import { CipherType } from \"jslib-common/enums/cipherType\";\n\nimport { CipherStatus } from \"./cipher-status.model\";\n\nexport class VaultFilter {\n cipherType?: CipherType;\n selectedCollectionId?: string;\n status?: CipherStatus;\n selectedFolder = false; // This is needed because of how the \"No Folder\" folder works. It has a null id.\n selectedFolderId?: string;\n selectedOrganizationId?: string;\n myVaultOnly = false;\n refreshCollectionsAndFolders = false;\n\n constructor(init?: Partial) {\n Object.assign(this, init);\n }\n\n resetFilter() {\n this.cipherType = null;\n this.status = null;\n this.selectedCollectionId = null;\n this.selectedFolder = false;\n this.selectedFolderId = null;\n }\n\n resetOrganization() {\n this.myVaultOnly = false;\n this.selectedOrganizationId = null;\n this.resetFilter();\n }\n}\n","import { Directive, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\n\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { ITreeNodeObject } from \"jslib-common/models/domain/treeNode\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\nimport { DynamicTreeNode } from \"./models/dynamic-tree-node.model\";\nimport { VaultFilter } from \"./models/vault-filter.model\";\nimport { VaultFilterService } from \"./vault-filter.service\";\n\n@Directive()\nexport class VaultFilterComponent implements OnInit {\n @Input() activeFilter: VaultFilter = new VaultFilter();\n @Input() hideFolders = false;\n @Input() hideCollections = false;\n @Input() hideFavorites = false;\n @Input() hideTrash = false;\n @Input() hideOrganizations = false;\n\n @Output() onFilterChange = new EventEmitter();\n @Output() onAddFolder = new EventEmitter();\n @Output() onEditFolder = new EventEmitter();\n\n isLoaded = false;\n collapsedFilterNodes: Set;\n organizations: Organization[];\n activePersonalOwnershipPolicy: boolean;\n activeSingleOrganizationPolicy: boolean;\n collections: DynamicTreeNode;\n folders: DynamicTreeNode;\n\n constructor(protected vaultFilterService: VaultFilterService) {}\n\n get displayCollections() {\n return this.collections?.fullList != null && this.collections.fullList.length > 0;\n }\n\n async ngOnInit(): Promise {\n this.collapsedFilterNodes = await this.vaultFilterService.buildCollapsedFilterNodes();\n this.organizations = await this.vaultFilterService.buildOrganizations();\n if (this.organizations != null && this.organizations.length > 0) {\n this.activePersonalOwnershipPolicy =\n await this.vaultFilterService.checkForPersonalOwnershipPolicy();\n this.activeSingleOrganizationPolicy =\n await this.vaultFilterService.checkForSingleOrganizationPolicy();\n }\n this.folders = await this.vaultFilterService.buildFolders();\n this.collections = await this.initCollections();\n this.isLoaded = true;\n }\n\n // overwritten in web for organization vaults\n async initCollections() {\n return await this.vaultFilterService.buildCollections();\n }\n\n async toggleFilterNodeCollapseState(node: ITreeNodeObject) {\n if (this.collapsedFilterNodes.has(node.id)) {\n this.collapsedFilterNodes.delete(node.id);\n } else {\n this.collapsedFilterNodes.add(node.id);\n }\n await this.vaultFilterService.storeCollapsedFilterNodes(this.collapsedFilterNodes);\n }\n\n async applyFilter(filter: VaultFilter) {\n if (filter.refreshCollectionsAndFolders) {\n await this.reloadCollectionsAndFolders(filter);\n filter = this.pruneInvalidatedFilterSelections(filter);\n }\n this.onFilterChange.emit(filter);\n }\n\n async reloadCollectionsAndFolders(filter: VaultFilter) {\n this.folders = await this.vaultFilterService.buildFolders(filter.selectedOrganizationId);\n this.collections = filter.myVaultOnly\n ? null\n : await this.vaultFilterService.buildCollections(filter.selectedOrganizationId);\n }\n\n async reloadOrganizations() {\n this.organizations = await this.vaultFilterService.buildOrganizations();\n this.activePersonalOwnershipPolicy =\n await this.vaultFilterService.checkForPersonalOwnershipPolicy();\n this.activeSingleOrganizationPolicy =\n await this.vaultFilterService.checkForSingleOrganizationPolicy();\n }\n\n addFolder() {\n this.onAddFolder.emit();\n }\n\n editFolder(folder: FolderView) {\n this.onEditFolder.emit(folder);\n }\n\n protected pruneInvalidatedFilterSelections(filter: VaultFilter): VaultFilter {\n filter = this.pruneInvalidFolderSelection(filter);\n filter = this.pruneInvalidCollectionSelection(filter);\n return filter;\n }\n\n protected pruneInvalidFolderSelection(filter: VaultFilter): VaultFilter {\n if (filter.selectedFolder && !this.folders?.hasId(filter.selectedFolderId)) {\n filter.selectedFolder = false;\n filter.selectedFolderId = null;\n }\n return filter;\n }\n\n protected pruneInvalidCollectionSelection(filter: VaultFilter): VaultFilter {\n if (\n filter.selectedCollectionId != null &&\n !this.collections?.hasId(filter.selectedCollectionId)\n ) {\n filter.selectedCollectionId = null;\n }\n return filter;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { CipherService } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService } from \"jslib-common/abstractions/collection.service\";\nimport { FolderService } from \"jslib-common/abstractions/folder.service\";\nimport { OrganizationService } from \"jslib-common/abstractions/organization.service\";\nimport { PolicyService } from \"jslib-common/abstractions/policy.service\";\nimport { StateService } from \"jslib-common/abstractions/state.service\";\nimport { PolicyType } from \"jslib-common/enums/policyType\";\nimport { Organization } from \"jslib-common/models/domain/organization\";\nimport { CollectionView } from \"jslib-common/models/view/collectionView\";\nimport { FolderView } from \"jslib-common/models/view/folderView\";\n\nimport { DynamicTreeNode } from \"./models/dynamic-tree-node.model\";\n\n@Injectable()\nexport class VaultFilterService {\n constructor(\n protected stateService: StateService,\n protected organizationService: OrganizationService,\n protected folderService: FolderService,\n protected cipherService: CipherService,\n protected collectionService: CollectionService,\n protected policyService: PolicyService\n ) {}\n\n async storeCollapsedFilterNodes(collapsedFilterNodes: Set): Promise {\n await this.stateService.setCollapsedGroupings(Array.from(collapsedFilterNodes));\n }\n\n async buildCollapsedFilterNodes(): Promise> {\n return new Set(await this.stateService.getCollapsedGroupings());\n }\n\n async buildOrganizations(): Promise {\n return await this.organizationService.getAll();\n }\n\n async buildFolders(organizationId?: string): Promise> {\n const storedFolders = await this.folderService.getAllDecrypted();\n let folders: FolderView[];\n if (organizationId != null) {\n const ciphers = await this.cipherService.getAllDecrypted();\n const orgCiphers = ciphers.filter((c) => c.organizationId == organizationId);\n folders = storedFolders.filter(\n (f) =>\n orgCiphers.filter((oc) => oc.folderId == f.id).length > 0 ||\n ciphers.filter((c) => c.folderId == f.id).length < 1\n );\n } else {\n folders = storedFolders;\n }\n const nestedFolders = await this.folderService.getAllNested(folders);\n return new DynamicTreeNode({\n fullList: folders,\n nestedList: nestedFolders,\n });\n }\n\n async buildCollections(organizationId?: string): Promise> {\n const storedCollections = await this.collectionService.getAllDecrypted();\n let collections: CollectionView[];\n if (organizationId != null) {\n collections = storedCollections.filter((c) => c.organizationId === organizationId);\n } else {\n collections = storedCollections;\n }\n const nestedCollections = await this.collectionService.getAllNested(collections);\n return new DynamicTreeNode({\n fullList: collections,\n nestedList: nestedCollections,\n });\n }\n\n async checkForSingleOrganizationPolicy(): Promise {\n return await this.policyService.policyAppliesToUser(PolicyType.SingleOrg);\n }\n\n async checkForPersonalOwnershipPolicy(): Promise {\n return await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { Utils } from \"jslib-common/misc/utils\";\n\n/*\n An updated pipe that sanitizes HTML, highlights numbers and special characters (in different colors each)\n and handles Unicode / Emoji characters correctly.\n*/\n@Pipe({ name: \"colorPassword\" })\nexport class ColorPasswordPipe implements PipeTransform {\n transform(password: string) {\n const template = (character: string, type: string) =>\n `${character}`;\n const colorizedPassword = this.generateTemplate(password, template);\n return colorizedPassword;\n }\n\n protected generateTemplate(\n password: string,\n templateGenerator: (chararacter: string, type: string, index?: number) => string\n ) {\n // Convert to an array to handle cases that stings have special characters, ie: emoji.\n const passwordArray = Array.from(password);\n let colorizedPassword = \"\";\n for (let i = 0; i < passwordArray.length; i++) {\n let character = passwordArray[i];\n let isSpecial = false;\n // Sanitize HTML first.\n switch (character) {\n case \"&\":\n character = \"&\";\n isSpecial = true;\n break;\n case \"<\":\n character = \"<\";\n isSpecial = true;\n break;\n case \">\":\n character = \">\";\n isSpecial = true;\n break;\n case \" \":\n character = \" \";\n isSpecial = true;\n break;\n default:\n break;\n }\n let type = \"letter\";\n if (character.match(Utils.regexpEmojiPresentation)) {\n type = \"emoji\";\n } else if (isSpecial || character.match(/[^\\w ]/)) {\n type = \"special\";\n } else if (character.match(/\\d/)) {\n type = \"number\";\n }\n colorizedPassword += templateGenerator(character, type, i);\n }\n return colorizedPassword;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface CardRuleEntry {\n cardLength: number;\n blocks: number[];\n}\n\n// See https://baymard.com/checkout-usability/credit-card-patterns for\n// all possible credit card spacing patterns. For now, we just handle\n// the below.\nconst numberFormats: Record = {\n Visa: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Mastercard: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n Maestro: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 13, blocks: [4, 4, 5] },\n { cardLength: 15, blocks: [4, 6, 5] },\n { cardLength: 19, blocks: [4, 4, 4, 4, 3] },\n ],\n Discover: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n \"Diners Club\": [{ cardLength: 14, blocks: [4, 6, 4] }],\n JCB: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n UnionPay: [\n { cardLength: 16, blocks: [4, 4, 4, 4] },\n { cardLength: 19, blocks: [6, 13] },\n ],\n Amex: [{ cardLength: 15, blocks: [4, 6, 5] }],\n Other: [{ cardLength: 16, blocks: [4, 4, 4, 4] }],\n};\n\n@Pipe({ name: \"creditCardNumber\" })\nexport class CreditCardNumberPipe implements PipeTransform {\n transform(creditCardNumber: string, brand: string): string {\n let rules = numberFormats[brand];\n\n if (rules == null) {\n rules = numberFormats[\"Other\"];\n }\n\n const cardLength = creditCardNumber.length;\n\n let matchingRule = rules.find((r) => r.cardLength == cardLength);\n if (matchingRule == null) {\n matchingRule = rules[0];\n }\n\n const blocks = matchingRule.blocks;\n\n const chunks: string[] = [];\n let total = 0;\n\n blocks.forEach((c) => {\n chunks.push(creditCardNumber.slice(total, total + c));\n total += c;\n });\n\n // Append the remaining part\n if (cardLength > total) {\n chunks.push(creditCardNumber.slice(total));\n }\n\n return chunks.join(\" \");\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"ellipsis\",\n})\nexport class EllipsisPipe implements PipeTransform {\n transform(value: string, limit = 25, completeWords = false, ellipsis = \"...\") {\n if (value.length <= limit) {\n return value;\n }\n limit -= ellipsis.length;\n if (completeWords && value.length > limit && value.indexOf(\" \") > 0) {\n limit = value.substring(0, limit).lastIndexOf(\" \");\n }\n return value.substring(0, limit) + ellipsis;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n@Pipe({\n name: \"i18n\",\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"search\",\n})\nexport class SearchPipe implements PipeTransform {\n transform(\n items: any[],\n searchText: string,\n prop1?: string,\n prop2?: string,\n prop3?: string\n ): any[] {\n if (items == null || items.length === 0) {\n return [];\n }\n\n if (searchText == null || searchText.length < 2) {\n return items;\n }\n\n searchText = searchText.trim().toLowerCase();\n return items.filter((i) => {\n if (\n prop1 != null &&\n i[prop1] != null &&\n i[prop1].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop2 != null &&\n i[prop2] != null &&\n i[prop2].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n if (\n prop3 != null &&\n i[prop3] != null &&\n i[prop3].toString().toLowerCase().indexOf(searchText) > -1\n ) {\n return true;\n }\n return false;\n });\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\ninterface User {\n name?: string;\n email: string;\n}\n\n@Pipe({\n name: \"userName\",\n})\nexport class UserNamePipe implements PipeTransform {\n transform(user?: User): string {\n if (user == null) {\n return null;\n }\n\n return user.name == null || user.name.trim() === \"\" ? user.email : user.name;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { BroadcasterService as BaseBroadcasterService } from \"jslib-common/services/broadcaster.service\";\n\n@Injectable()\nexport class BroadcasterService extends BaseBroadcasterService {}\n","import { InjectionToken, Injector, LOCALE_ID, NgModule } from \"@angular/core\";\n\nimport { ApiService as ApiServiceAbstraction } from \"jslib-common/abstractions/api.service\";\nimport { AppIdService as AppIdServiceAbstraction } from \"jslib-common/abstractions/appId.service\";\nimport { AuditService as AuditServiceAbstraction } from \"jslib-common/abstractions/audit.service\";\nimport { AuthService as AuthServiceAbstraction } from \"jslib-common/abstractions/auth.service\";\nimport { BroadcasterService as BroadcasterServiceAbstraction } from \"jslib-common/abstractions/broadcaster.service\";\nimport { CipherService as CipherServiceAbstraction } from \"jslib-common/abstractions/cipher.service\";\nimport { CollectionService as CollectionServiceAbstraction } from \"jslib-common/abstractions/collection.service\";\nimport { CryptoService as CryptoServiceAbstraction } from \"jslib-common/abstractions/crypto.service\";\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from \"jslib-common/abstractions/cryptoFunction.service\";\nimport { EnvironmentService as EnvironmentServiceAbstraction } from \"jslib-common/abstractions/environment.service\";\nimport { EventService as EventServiceAbstraction } from \"jslib-common/abstractions/event.service\";\nimport { ExportService as ExportServiceAbstraction } from \"jslib-common/abstractions/export.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"jslib-common/abstractions/fileUpload.service\";\nimport { FolderService as FolderServiceAbstraction } from \"jslib-common/abstractions/folder.service\";\nimport { I18nService as I18nServiceAbstraction } from \"jslib-common/abstractions/i18n.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"jslib-common/abstractions/keyConnector.service\";\nimport { LogService } from \"jslib-common/abstractions/log.service\";\nimport { MessagingService as MessagingServiceAbstraction } from \"jslib-common/abstractions/messaging.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"jslib-common/abstractions/notifications.service\";\nimport { OrganizationService as OrganizationServiceAbstraction } from \"jslib-common/abstractions/organization.service\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"jslib-common/abstractions/passwordGeneration.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"jslib-common/abstractions/passwordReprompt.service\";\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from \"jslib-common/abstractions/platformUtils.service\";\nimport { PolicyService as PolicyServiceAbstraction } from \"jslib-common/abstractions/policy.service\";\nimport { ProviderService as ProviderServiceAbstraction } from \"jslib-common/abstractions/provider.service\";\nimport { SearchService as SearchServiceAbstraction } from \"jslib-common/abstractions/search.service\";\nimport { SendService as SendServiceAbstraction } from \"jslib-common/abstractions/send.service\";\nimport { SettingsService as SettingsServiceAbstraction } from \"jslib-common/abstractions/settings.service\";\nimport { StateService as StateServiceAbstraction } from \"jslib-common/abstractions/state.service\";\nimport { StateMigrationService as StateMigrationServiceAbstraction } from \"jslib-common/abstractions/stateMigration.service\";\nimport { StorageService as StorageServiceAbstraction } from \"jslib-common/abstractions/storage.service\";\nimport { SyncService as SyncServiceAbstraction } from \"jslib-common/abstractions/sync.service\";\nimport { TokenService as TokenServiceAbstraction } from \"jslib-common/abstractions/token.service\";\nimport { TotpService as TotpServiceAbstraction } from \"jslib-common/abstractions/totp.service\";\nimport { TwoFactorService as TwoFactorServiceAbstraction } from \"jslib-common/abstractions/twoFactor.service\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"jslib-common/abstractions/userVerification.service\";\nimport { UsernameGenerationService as UsernameGenerationServiceAbstraction } from \"jslib-common/abstractions/usernameGeneration.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"jslib-common/abstractions/vaultTimeout.service\";\nimport { StateFactory } from \"jslib-common/factories/stateFactory\";\nimport { Account } from \"jslib-common/models/domain/account\";\nimport { GlobalState } from \"jslib-common/models/domain/globalState\";\nimport { ApiService } from \"jslib-common/services/api.service\";\nimport { AppIdService } from \"jslib-common/services/appId.service\";\nimport { AuditService } from \"jslib-common/services/audit.service\";\nimport { AuthService } from \"jslib-common/services/auth.service\";\nimport { CipherService } from \"jslib-common/services/cipher.service\";\nimport { CollectionService } from \"jslib-common/services/collection.service\";\nimport { ConsoleLogService } from \"jslib-common/services/consoleLog.service\";\nimport { CryptoService } from \"jslib-common/services/crypto.service\";\nimport { EnvironmentService } from \"jslib-common/services/environment.service\";\nimport { EventService } from \"jslib-common/services/event.service\";\nimport { ExportService } from \"jslib-common/services/export.service\";\nimport { FileUploadService } from \"jslib-common/services/fileUpload.service\";\nimport { FolderService } from \"jslib-common/services/folder.service\";\nimport { KeyConnectorService } from \"jslib-common/services/keyConnector.service\";\nimport { NotificationsService } from \"jslib-common/services/notifications.service\";\nimport { OrganizationService } from \"jslib-common/services/organization.service\";\nimport { PasswordGenerationService } from \"jslib-common/services/passwordGeneration.service\";\nimport { PolicyService } from \"jslib-common/services/policy.service\";\nimport { ProviderService } from \"jslib-common/services/provider.service\";\nimport { SearchService } from \"jslib-common/services/search.service\";\nimport { SendService } from \"jslib-common/services/send.service\";\nimport { SettingsService } from \"jslib-common/services/settings.service\";\nimport { StateService } from \"jslib-common/services/state.service\";\nimport { StateMigrationService } from \"jslib-common/services/stateMigration.service\";\nimport { SyncService } from \"jslib-common/services/sync.service\";\nimport { TokenService } from \"jslib-common/services/token.service\";\nimport { TotpService } from \"jslib-common/services/totp.service\";\nimport { TwoFactorService } from \"jslib-common/services/twoFactor.service\";\nimport { UserVerificationService } from \"jslib-common/services/userVerification.service\";\nimport { UsernameGenerationService } from \"jslib-common/services/usernameGeneration.service\";\nimport { VaultTimeoutService } from \"jslib-common/services/vaultTimeout.service\";\nimport { WebCryptoFunctionService } from \"jslib-common/services/webCryptoFunction.service\";\n\nimport { AuthGuard } from \"../guards/auth.guard\";\nimport { LockGuard } from \"../guards/lock.guard\";\nimport { UnauthGuard } from \"../guards/unauth.guard\";\n\nimport { BroadcasterService } from \"./broadcaster.service\";\nimport { ModalService } from \"./modal.service\";\nimport { PasswordRepromptService } from \"./passwordReprompt.service\";\nimport { ValidationService } from \"./validation.service\";\n\nexport const WINDOW = new InjectionToken(\"WINDOW\");\nexport const SECURE_STORAGE = new InjectionToken(\"SECURE_STORAGE\");\nexport const STATE_FACTORY = new InjectionToken(\"STATE_FACTORY\");\nexport const STATE_SERVICE_USE_CACHE = new InjectionToken(\"STATE_SERVICE_USE_CACHE\");\nexport const LOGOUT_CALLBACK = new InjectionToken<(expired: boolean, userId?: string) => void>(\n \"LOGOUT_CALLBACK\"\n);\nexport const LOCKED_CALLBACK = new InjectionToken<() => void>(\"LOCKED_CALLBACK\");\nexport const CLIENT_TYPE = new InjectionToken(\"CLIENT_TYPE\");\nexport const LOCALES_DIRECTORY = new InjectionToken(\"LOCALES_DIRECTORY\");\nexport const SYSTEM_LANGUAGE = new InjectionToken(\"SYSTEM_LANGUAGE\");\n\n@NgModule({\n declarations: [],\n providers: [\n ValidationService,\n AuthGuard,\n UnauthGuard,\n LockGuard,\n ModalService,\n { provide: WINDOW, useValue: window },\n {\n provide: LOCALE_ID,\n useFactory: (i18nService: I18nServiceAbstraction) => i18nService.translationLocale,\n deps: [I18nServiceAbstraction],\n },\n {\n provide: LOCALES_DIRECTORY,\n useValue: \"./locales\",\n },\n {\n provide: SYSTEM_LANGUAGE,\n useFactory: (window: Window) => window.navigator.language,\n deps: [WINDOW],\n },\n {\n provide: STATE_FACTORY,\n useValue: new StateFactory(GlobalState, Account),\n },\n {\n provide: STATE_SERVICE_USE_CACHE,\n useValue: true,\n },\n {\n provide: LOGOUT_CALLBACK,\n useFactory:\n (messagingService: MessagingServiceAbstraction) => (expired: boolean, userId?: string) =>\n messagingService.send(\"logout\", { expired: expired, userId: userId }),\n deps: [MessagingServiceAbstraction],\n },\n {\n provide: LOCKED_CALLBACK,\n useValue: null,\n },\n {\n provide: AppIdServiceAbstraction,\n useClass: AppIdService,\n deps: [StorageServiceAbstraction],\n },\n {\n provide: AuditServiceAbstraction,\n useClass: AuditService,\n deps: [CryptoFunctionServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: AuthServiceAbstraction,\n useClass: AuthService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n AppIdServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n EnvironmentServiceAbstraction,\n StateServiceAbstraction,\n TwoFactorServiceAbstraction,\n I18nServiceAbstraction,\n ],\n },\n {\n provide: CipherServiceAbstraction,\n useFactory: (\n cryptoService: CryptoServiceAbstraction,\n settingsService: SettingsServiceAbstraction,\n apiService: ApiServiceAbstraction,\n fileUploadService: FileUploadServiceAbstraction,\n i18nService: I18nServiceAbstraction,\n injector: Injector,\n logService: LogService,\n stateService: StateServiceAbstraction\n ) =>\n new CipherService(\n cryptoService,\n settingsService,\n apiService,\n fileUploadService,\n i18nService,\n () => injector.get(SearchServiceAbstraction),\n logService,\n stateService\n ),\n deps: [\n CryptoServiceAbstraction,\n SettingsServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n Injector, // TODO: Get rid of this circular dependency!\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: FolderServiceAbstraction,\n useClass: FolderService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n I18nServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n { provide: LogService, useFactory: () => new ConsoleLogService(false) },\n {\n provide: CollectionServiceAbstraction,\n useClass: CollectionService,\n deps: [CryptoServiceAbstraction, I18nServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: EnvironmentServiceAbstraction,\n useClass: EnvironmentService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TotpServiceAbstraction,\n useClass: TotpService,\n deps: [CryptoFunctionServiceAbstraction, LogService, StateServiceAbstraction],\n },\n { provide: TokenServiceAbstraction, useClass: TokenService, deps: [StateServiceAbstraction] },\n {\n provide: CryptoServiceAbstraction,\n useClass: CryptoService,\n deps: [\n CryptoFunctionServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n LogService,\n StateServiceAbstraction,\n ],\n },\n {\n provide: PasswordGenerationServiceAbstraction,\n useClass: PasswordGenerationService,\n deps: [CryptoServiceAbstraction, PolicyServiceAbstraction, StateServiceAbstraction],\n },\n {\n provide: UsernameGenerationServiceAbstraction,\n useClass: UsernameGenerationService,\n deps: [CryptoServiceAbstraction, StateServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: ApiServiceAbstraction,\n useClass: ApiService,\n deps: [\n TokenServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n EnvironmentServiceAbstraction,\n AppIdServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: FileUploadServiceAbstraction,\n useClass: FileUploadService,\n deps: [LogService, ApiServiceAbstraction],\n },\n {\n provide: SyncServiceAbstraction,\n useClass: SyncService,\n deps: [\n ApiServiceAbstraction,\n SettingsServiceAbstraction,\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n CryptoServiceAbstraction,\n CollectionServiceAbstraction,\n MessagingServiceAbstraction,\n PolicyServiceAbstraction,\n SendServiceAbstraction,\n LogService,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n OrganizationServiceAbstraction,\n ProviderServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n { provide: BroadcasterServiceAbstraction, useClass: BroadcasterService },\n {\n provide: SettingsServiceAbstraction,\n useClass: SettingsService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: VaultTimeoutServiceAbstraction,\n useClass: VaultTimeoutService,\n deps: [\n CipherServiceAbstraction,\n FolderServiceAbstraction,\n CollectionServiceAbstraction,\n CryptoServiceAbstraction,\n PlatformUtilsServiceAbstraction,\n MessagingServiceAbstraction,\n SearchServiceAbstraction,\n TokenServiceAbstraction,\n PolicyServiceAbstraction,\n KeyConnectorServiceAbstraction,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n LOCKED_CALLBACK,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: StateServiceAbstraction,\n useClass: StateService,\n deps: [\n StorageServiceAbstraction,\n SECURE_STORAGE,\n LogService,\n StateMigrationServiceAbstraction,\n STATE_FACTORY,\n STATE_SERVICE_USE_CACHE,\n ],\n },\n {\n provide: StateMigrationServiceAbstraction,\n useClass: StateMigrationService,\n deps: [StorageServiceAbstraction, SECURE_STORAGE, STATE_FACTORY],\n },\n {\n provide: ExportServiceAbstraction,\n useClass: ExportService,\n deps: [\n FolderServiceAbstraction,\n CipherServiceAbstraction,\n ApiServiceAbstraction,\n CryptoServiceAbstraction,\n ],\n },\n {\n provide: SearchServiceAbstraction,\n useClass: SearchService,\n deps: [CipherServiceAbstraction, LogService, I18nServiceAbstraction],\n },\n {\n provide: NotificationsServiceAbstraction,\n useClass: NotificationsService,\n deps: [\n SyncServiceAbstraction,\n AppIdServiceAbstraction,\n ApiServiceAbstraction,\n EnvironmentServiceAbstraction,\n LOGOUT_CALLBACK,\n LogService,\n StateServiceAbstraction,\n AuthServiceAbstraction,\n ],\n },\n {\n provide: CryptoFunctionServiceAbstraction,\n useClass: WebCryptoFunctionService,\n deps: [WINDOW],\n },\n {\n provide: EventServiceAbstraction,\n useClass: EventService,\n deps: [\n ApiServiceAbstraction,\n CipherServiceAbstraction,\n StateServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n ],\n },\n {\n provide: PolicyServiceAbstraction,\n useClass: PolicyService,\n deps: [StateServiceAbstraction, OrganizationServiceAbstraction, ApiServiceAbstraction],\n },\n {\n provide: SendServiceAbstraction,\n useClass: SendService,\n deps: [\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n FileUploadServiceAbstraction,\n I18nServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n StateServiceAbstraction,\n ],\n },\n {\n provide: KeyConnectorServiceAbstraction,\n useClass: KeyConnectorService,\n deps: [\n StateServiceAbstraction,\n CryptoServiceAbstraction,\n ApiServiceAbstraction,\n TokenServiceAbstraction,\n LogService,\n OrganizationServiceAbstraction,\n CryptoFunctionServiceAbstraction,\n LOGOUT_CALLBACK,\n ],\n },\n {\n provide: UserVerificationServiceAbstraction,\n useClass: UserVerificationService,\n deps: [CryptoServiceAbstraction, I18nServiceAbstraction, ApiServiceAbstraction],\n },\n { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },\n {\n provide: OrganizationServiceAbstraction,\n useClass: OrganizationService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: ProviderServiceAbstraction,\n useClass: ProviderService,\n deps: [StateServiceAbstraction],\n },\n {\n provide: TwoFactorServiceAbstraction,\n useClass: TwoFactorService,\n deps: [I18nServiceAbstraction, PlatformUtilsServiceAbstraction],\n },\n ],\n})\nexport class JslibServicesModule {}\n","import {\n ApplicationRef,\n ComponentFactory,\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector,\n Type,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { first } from \"rxjs/operators\";\n\nimport { DynamicModalComponent } from \"../components/modal/dynamic-modal.component\";\nimport { ModalInjector } from \"../components/modal/modal-injector\";\nimport { ModalRef } from \"../components/modal/modal.ref\";\n\nexport class ModalConfig {\n data?: D;\n allowMultipleModals = false;\n}\n\n@Injectable()\nexport class ModalService {\n protected modalList: ComponentRef[] = [];\n\n // Lazy loaded modules are not available in componentFactoryResolver,\n // therefore modules needs to manually initialize their resolvers.\n private factoryResolvers: Map, ComponentFactoryResolver> = new Map();\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private applicationRef: ApplicationRef,\n private injector: Injector\n ) {\n document.addEventListener(\"keyup\", (event) => {\n if (event.key === \"Escape\" && this.modalCount > 0) {\n this.topModal.instance.close();\n }\n });\n }\n\n get modalCount() {\n return this.modalList.length;\n }\n\n private get topModal() {\n return this.modalList[this.modalCount - 1];\n }\n\n async openViewRef(\n componentType: Type,\n viewContainerRef: ViewContainerRef,\n setComponentParameters: (component: T) => void = null\n ): Promise<[ModalRef, T]> {\n const [modalRef, modalComponentRef] = this.openInternal(componentType, null, false);\n modalComponentRef.instance.setComponentParameters = setComponentParameters;\n\n viewContainerRef.insert(modalComponentRef.hostView);\n\n await modalRef.onCreated.pipe(first()).toPromise();\n\n return [modalRef, modalComponentRef.instance.componentRef.instance];\n }\n\n open(componentType: Type, config?: ModalConfig) {\n if (!(config?.allowMultipleModals ?? false) && this.modalCount > 0) {\n return;\n }\n\n // eslint-disable-next-line\n const [modalRef, _] = this.openInternal(componentType, config, true);\n\n return modalRef;\n }\n\n registerComponentFactoryResolver(\n componentType: Type,\n componentFactoryResolver: ComponentFactoryResolver\n ): void {\n this.factoryResolvers.set(componentType, componentFactoryResolver);\n }\n\n resolveComponentFactory(componentType: Type): ComponentFactory {\n if (this.factoryResolvers.has(componentType)) {\n return this.factoryResolvers.get(componentType).resolveComponentFactory(componentType);\n }\n\n return this.componentFactoryResolver.resolveComponentFactory(componentType);\n }\n\n protected openInternal(\n componentType: Type,\n config?: ModalConfig,\n attachToDom?: boolean\n ): [ModalRef, ComponentRef] {\n const [modalRef, componentRef] = this.createModalComponent(config);\n componentRef.instance.childComponentType = componentType;\n\n if (attachToDom) {\n this.applicationRef.attachView(componentRef.hostView);\n const domElem = (componentRef.hostView as EmbeddedViewRef).rootNodes[0] as HTMLElement;\n document.body.appendChild(domElem);\n }\n\n modalRef.onClosed.pipe(first()).subscribe(() => {\n if (attachToDom) {\n this.applicationRef.detachView(componentRef.hostView);\n }\n componentRef.destroy();\n\n this.modalList.pop();\n if (this.modalCount > 0) {\n this.topModal.instance.getFocus();\n }\n });\n\n this.setupHandlers(modalRef);\n\n this.modalList.push(componentRef);\n\n return [modalRef, componentRef];\n }\n\n protected setupHandlers(modalRef: ModalRef) {\n let backdrop: HTMLElement = null;\n\n // Add backdrop, setup [data-dismiss] handler.\n modalRef.onCreated.pipe(first()).subscribe((el) => {\n document.body.classList.add(\"modal-open\");\n\n const modalEl: HTMLElement = el.querySelector(\".modal\");\n const dialogEl = modalEl.querySelector(\".modal-dialog\") as HTMLElement;\n\n backdrop = document.createElement(\"div\");\n backdrop.className = \"modal-backdrop fade\";\n backdrop.style.zIndex = `${this.modalCount}040`;\n modalEl.prepend(backdrop);\n\n dialogEl.addEventListener(\"click\", (e: Event) => {\n e.stopPropagation();\n });\n dialogEl.style.zIndex = `${this.modalCount}050`;\n\n const modals = Array.from(\n el.querySelectorAll('.modal-backdrop, .modal *[data-dismiss=\"modal\"]')\n );\n for (const closeElement of modals) {\n closeElement.addEventListener(\"click\", () => {\n modalRef.close();\n });\n }\n });\n\n // onClose is used in Web to hook into bootstrap. On other projects we pipe it directly to closed.\n modalRef.onClose.pipe(first()).subscribe(() => {\n modalRef.closed();\n\n if (this.modalCount === 0) {\n document.body.classList.remove(\"modal-open\");\n }\n });\n }\n\n protected createModalComponent(\n config: ModalConfig\n ): [ModalRef, ComponentRef] {\n const modalRef = new ModalRef();\n\n const map = new WeakMap();\n map.set(ModalConfig, config);\n map.set(ModalRef, modalRef);\n\n const componentFactory =\n this.componentFactoryResolver.resolveComponentFactory(DynamicModalComponent);\n const componentRef = componentFactory.create(new ModalInjector(this.injector, map));\n\n return [modalRef, componentRef];\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { KeyConnectorService } from \"jslib-common/abstractions/keyConnector.service\";\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from \"jslib-common/abstractions/passwordReprompt.service\";\n\nimport { PasswordRepromptComponent } from \"../components/password-reprompt.component\";\n\nimport { ModalService } from \"./modal.service\";\n\n/**\n * Used to verify the user's Master Password for the \"Master Password Re-prompt\" feature only.\n * See UserVerificationService for any other situation where you need to verify the user's identity.\n */\n@Injectable()\nexport class PasswordRepromptService implements PasswordRepromptServiceAbstraction {\n protected component = PasswordRepromptComponent;\n\n constructor(\n private modalService: ModalService,\n private keyConnectorService: KeyConnectorService\n ) {}\n\n protectedFields() {\n return [\"TOTP\", \"Password\", \"H_Field\", \"Card Number\", \"Security Code\"];\n }\n\n async showPasswordPrompt() {\n if (!(await this.enabled())) {\n return true;\n }\n\n const ref = this.modalService.open(this.component, { allowMultipleModals: true });\n\n if (ref == null) {\n return false;\n }\n\n const result = await ref.onClosedPromise();\n return result === true;\n }\n\n async enabled() {\n return !(await this.keyConnectorService.getUsesKeyConnector());\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"jslib-common/abstractions/platformUtils.service\";\nimport { ErrorResponse } from \"jslib-common/models/response/errorResponse\";\n\n@Injectable()\nexport class ValidationService {\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n showError(data: any): string[] {\n const defaultErrorMessage = this.i18nService.t(\"unexpectedError\");\n let errors: string[] = [];\n\n if (data != null && typeof data === \"string\") {\n errors.push(data);\n } else if (data == null || typeof data !== \"object\") {\n errors.push(defaultErrorMessage);\n } else if (data.validationErrors != null) {\n errors = errors.concat((data as ErrorResponse).getAllMessages());\n } else {\n errors.push(data.message ? data.message : defaultErrorMessage);\n }\n\n if (errors.length === 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors[0]);\n } else if (errors.length > 1) {\n this.platformUtilsService.showToast(\"error\", this.i18nService.t(\"errorOccurred\"), errors, {\n timeout: 5000 * errors.length,\n });\n }\n\n return errors;\n }\n}\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors } from \"@angular/forms\";\n\nexport function notAllowedValueAsync(\n valueGetter: () => Promise,\n caseInsensitive = false\n): AsyncValidatorFn {\n return async (control: AbstractControl): Promise => {\n let notAllowedValue = await valueGetter();\n let controlValue = control.value;\n if (caseInsensitive) {\n notAllowedValue = notAllowedValue.toLowerCase();\n controlValue = controlValue.toLowerCase();\n }\n\n if (controlValue === notAllowedValue) {\n return {\n notAllowedValue: true,\n };\n }\n };\n}\n","import { OrganizationConnectionType } from \"jslib-common/enums/organizationConnectionType\";\nimport { DeviceVerificationRequest } from \"jslib-common/models/request/deviceVerificationRequest\";\nimport { OrganizationConnectionRequest } from \"jslib-common/models/request/organizationConnectionRequest\";\nimport { BillingHistoryResponse } from \"jslib-common/models/response/billingHistoryResponse\";\nimport { BillingPaymentResponse } from \"jslib-common/models/response/billingPaymentResponse\";\nimport { DeviceVerificationResponse } from \"jslib-common/models/response/deviceVerificationResponse\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"jslib-common/models/response/organizationConnectionResponse\";\nimport { SsoPreValidateResponse } from \"jslib-common/models/response/ssoPreValidateResponse\";\n\nimport { PolicyType } from \"../enums/policyType\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/setKeyConnectorKeyRequest\";\nimport { VerifyOTPRequest } from \"../models/request/account/verifyOTPRequest\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { BitPayInvoiceRequest } from \"../models/request/bitPayInvoiceRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipherBulkRestoreRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { DeleteRecoverRequest } from \"../models/request/deleteRecoverRequest\";\nimport { EmailRequest } from \"../models/request/emailRequest\";\nimport { EmailTokenRequest } from \"../models/request/emailTokenRequest\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergencyAccessAcceptRequest\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergencyAccessConfirmRequest\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergencyAccessPasswordRequest\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergencyAccessUpdateRequest\";\nimport { EventRequest } from \"../models/request/eventRequest\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { GroupRequest } from \"../models/request/groupRequest\";\nimport { IapCheckRequest } from \"../models/request/iapCheckRequest\";\nimport { ApiTokenRequest } from \"../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../models/request/identityToken/ssoTokenRequest\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportDirectoryRequest } from \"../models/request/importDirectoryRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KdfRequest } from \"../models/request/kdfRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organizationSponsorshipCreateRequest\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organizationSponsorshipRedeemRequest\";\nimport { OrganizationSsoRequest } from \"../models/request/organization/organizationSsoRequest\";\nimport { OrganizationApiKeyRequest } from \"../models/request/organizationApiKeyRequest\";\nimport { OrganizationCreateRequest } from \"../models/request/organizationCreateRequest\";\nimport { OrganizationImportRequest } from \"../models/request/organizationImportRequest\";\nimport { OrganizationKeysRequest } from \"../models/request/organizationKeysRequest\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../models/request/organizationSubscriptionUpdateRequest\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../models/request/organizationTaxInfoUpdateRequest\";\nimport { OrganizationUpdateRequest } from \"../models/request/organizationUpdateRequest\";\nimport { OrganizationUpgradeRequest } from \"../models/request/organizationUpgradeRequest\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organizationUserAcceptRequest\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organizationUserConfirmRequest\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organizationUserInviteRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organizationUserResetPasswordRequest\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organizationUserUpdateGroupsRequest\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organizationUserUpdateRequest\";\nimport { PasswordHintRequest } from \"../models/request/passwordHintRequest\";\nimport { PasswordRequest } from \"../models/request/passwordRequest\";\nimport { PaymentRequest } from \"../models/request/paymentRequest\";\nimport { PolicyRequest } from \"../models/request/policyRequest\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/providerAddOrganizationRequest\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/providerOrganizationCreateRequest\";\nimport { ProviderSetupRequest } from \"../models/request/provider/providerSetupRequest\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/providerUpdateRequest\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/providerUserAcceptRequest\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/providerUserBulkConfirmRequest\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/providerUserBulkRequest\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/providerUserConfirmRequest\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/providerUserInviteRequest\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/providerUserUpdateRequest\";\nimport { RegisterRequest } from \"../models/request/registerRequest\";\nimport { SeatRequest } from \"../models/request/seatRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selectionReadOnlyRequest\";\nimport { SendAccessRequest } from \"../models/request/sendAccessRequest\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { SetPasswordRequest } from \"../models/request/setPasswordRequest\";\nimport { StorageRequest } from \"../models/request/storageRequest\";\nimport { TaxInfoUpdateRequest } from \"../models/request/taxInfoUpdateRequest\";\nimport { TwoFactorEmailRequest } from \"../models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviderRequest } from \"../models/request/twoFactorProviderRequest\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/twoFactorRecoveryRequest\";\nimport { UpdateDomainsRequest } from \"../models/request/updateDomainsRequest\";\nimport { UpdateKeyRequest } from \"../models/request/updateKeyRequest\";\nimport { UpdateProfileRequest } from \"../models/request/updateProfileRequest\";\nimport { UpdateTempPasswordRequest } from \"../models/request/updateTempPasswordRequest\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/updateTwoFactorAuthenticatorRequest\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/updateTwoFactorDuoRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/updateTwoFactorEmailRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/updateTwoFactorWebAuthnRequest\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/updateTwoFactorYubioOtpRequest\";\nimport { VerifyBankRequest } from \"../models/request/verifyBankRequest\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verifyDeleteRecoverRequest\";\nimport { VerifyEmailRequest } from \"../models/request/verifyEmailRequest\";\nimport { ApiKeyResponse } from \"../models/response/apiKeyResponse\";\nimport { AttachmentResponse } from \"../models/response/attachmentResponse\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { BillingResponse } from \"../models/response/billingResponse\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collectionResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergencyAccessResponse\";\nimport { EventResponse } from \"../models/response/eventResponse\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/groupResponse\";\nimport { IdentityCaptchaResponse } from \"../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/keyConnectorUserKeyResponse\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { OrganizationSsoResponse } from \"../models/response/organization/organizationSsoResponse\";\nimport { OrganizationApiKeyInformationResponse } from \"../models/response/organizationApiKeyInformationResponse\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../models/response/organizationAutoEnrollStatusResponse\";\nimport { OrganizationKeysResponse } from \"../models/response/organizationKeysResponse\";\nimport { OrganizationResponse } from \"../models/response/organizationResponse\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organizationSponsorshipSyncStatusResponse\";\nimport { OrganizationSubscriptionResponse } from \"../models/response/organizationSubscriptionResponse\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organizationUserBulkPublicKeyResponse\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organizationUserBulkResponse\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../models/response/organizationUserResponse\";\nimport { PaymentResponse } from \"../models/response/paymentResponse\";\nimport { PlanResponse } from \"../models/response/planResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { PreloginResponse } from \"../models/response/preloginResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/providerOrganizationResponse\";\nimport { ProviderResponse } from \"../models/response/provider/providerResponse\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/providerUserBulkPublicKeyResponse\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/providerUserBulkResponse\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/providerUserResponse\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selectionReadOnlyResponse\";\nimport { SendAccessResponse } from \"../models/response/sendAccessResponse\";\nimport { SendFileDownloadDataResponse } from \"../models/response/sendFileDownloadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SubscriptionResponse } from \"../models/response/subscriptionResponse\";\nimport { SyncResponse } from \"../models/response/syncResponse\";\nimport { TaxInfoResponse } from \"../models/response/taxInfoResponse\";\nimport { TaxRateResponse } from \"../models/response/taxRateResponse\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"../models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"../models/response/twoFactorEmailResponse\";\nimport { TwoFactorProviderResponse } from \"../models/response/twoFactorProviderResponse\";\nimport { TwoFactorRecoverResponse } from \"../models/response/twoFactorRescoverResponse\";\nimport {\n ChallengeResponse,\n TwoFactorWebAuthnResponse,\n} from \"../models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/twoFactorYubiKeyResponse\";\nimport { UserKeyResponse } from \"../models/response/userKeyResponse\";\nimport { SendAccessView } from \"../models/view/sendAccessView\";\n\nexport abstract class ApiService {\n postIdentityToken: (\n request: PasswordTokenRequest | SsoTokenRequest | ApiTokenRequest\n ) => Promise;\n refreshIdentityToken: () => Promise;\n\n getProfile: () => Promise;\n getUserSubscription: () => Promise;\n getTaxInfo: () => Promise;\n putProfile: (request: UpdateProfileRequest) => Promise;\n putTaxInfo: (request: TaxInfoUpdateRequest) => Promise;\n postPrelogin: (request: PreloginRequest) => Promise;\n postEmailToken: (request: EmailTokenRequest) => Promise;\n postEmail: (request: EmailRequest) => Promise;\n postPassword: (request: PasswordRequest) => Promise;\n setPassword: (request: SetPasswordRequest) => Promise;\n postSetKeyConnectorKey: (request: SetKeyConnectorKeyRequest) => Promise;\n postSecurityStamp: (request: SecretVerificationRequest) => Promise;\n deleteAccount: (request: SecretVerificationRequest) => Promise;\n getAccountRevisionDate: () => Promise;\n postPasswordHint: (request: PasswordHintRequest) => Promise;\n postRegister: (request: RegisterRequest) => Promise;\n postPremium: (data: FormData) => Promise;\n postIapCheck: (request: IapCheckRequest) => Promise;\n postReinstatePremium: () => Promise;\n postCancelPremium: () => Promise;\n postAccountStorage: (request: StorageRequest) => Promise;\n postAccountPayment: (request: PaymentRequest) => Promise;\n postAccountLicense: (data: FormData) => Promise;\n postAccountKey: (request: UpdateKeyRequest) => Promise;\n postAccountKeys: (request: KeysRequest) => Promise;\n postAccountVerifyEmail: () => Promise;\n postAccountVerifyEmailToken: (request: VerifyEmailRequest) => Promise;\n postAccountVerifyPassword: (request: SecretVerificationRequest) => Promise;\n postAccountRecoverDelete: (request: DeleteRecoverRequest) => Promise;\n postAccountRecoverDeleteToken: (request: VerifyDeleteRecoverRequest) => Promise;\n postAccountKdf: (request: KdfRequest) => Promise;\n postUserApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n postUserRotateApiKey: (id: string, request: SecretVerificationRequest) => Promise;\n putUpdateTempPassword: (request: UpdateTempPasswordRequest) => Promise;\n postAccountRequestOTP: () => Promise;\n postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise;\n postConvertToKeyConnector: () => Promise;\n\n getUserBillingHistory: () => Promise;\n getUserBillingPayment: () => Promise;\n\n getFolder: (id: string) => Promise;\n postFolder: (request: FolderRequest) => Promise;\n putFolder: (id: string, request: FolderRequest) => Promise;\n deleteFolder: (id: string) => Promise;\n\n getSend: (id: string) => Promise;\n postSendAccess: (\n id: string,\n request: SendAccessRequest,\n apiUrl?: string\n ) => Promise;\n getSends: () => Promise>;\n postSend: (request: SendRequest) => Promise;\n postFileTypeSend: (request: SendRequest) => Promise;\n postSendFile: (sendId: string, fileId: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postSendFileLegacy: (data: FormData) => Promise;\n putSend: (id: string, request: SendRequest) => Promise;\n putSendRemovePassword: (id: string) => Promise;\n deleteSend: (id: string) => Promise;\n getSendFileDownloadData: (\n send: SendAccessView,\n request: SendAccessRequest,\n apiUrl?: string\n ) => Promise;\n renewSendFileUploadUrl: (sendId: string, fileId: string) => Promise;\n\n getCipher: (id: string) => Promise;\n getCipherAdmin: (id: string) => Promise;\n getAttachmentData: (\n cipherId: string,\n attachmentId: string,\n emergencyAccessId?: string\n ) => Promise;\n getCiphersOrganization: (organizationId: string) => Promise>;\n postCipher: (request: CipherRequest) => Promise;\n postCipherCreate: (request: CipherCreateRequest) => Promise;\n postCipherAdmin: (request: CipherCreateRequest) => Promise;\n putCipher: (id: string, request: CipherRequest) => Promise;\n putCipherAdmin: (id: string, request: CipherRequest) => Promise;\n deleteCipher: (id: string) => Promise;\n deleteCipherAdmin: (id: string) => Promise;\n deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n deleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putMoveCiphers: (request: CipherBulkMoveRequest) => Promise;\n putShareCipher: (id: string, request: CipherShareRequest) => Promise;\n putShareCiphers: (request: CipherBulkShareRequest) => Promise;\n putCipherCollections: (id: string, request: CipherCollectionsRequest) => Promise;\n putCipherCollectionsAdmin: (id: string, request: CipherCollectionsRequest) => Promise;\n postPurgeCiphers: (request: SecretVerificationRequest, organizationId?: string) => Promise;\n postImportCiphers: (request: ImportCiphersRequest) => Promise;\n postImportOrganizationCiphers: (\n organizationId: string,\n request: ImportOrganizationCiphersRequest\n ) => Promise;\n putDeleteCipher: (id: string) => Promise;\n putDeleteCipherAdmin: (id: string) => Promise;\n putDeleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise;\n putDeleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise;\n putRestoreCipher: (id: string) => Promise;\n putRestoreCipherAdmin: (id: string) => Promise;\n putRestoreManyCiphers: (\n request: CipherBulkRestoreRequest\n ) => Promise>;\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentLegacy: (id: string, data: FormData) => Promise;\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n postCipherAttachmentAdminLegacy: (id: string, data: FormData) => Promise;\n postCipherAttachment: (\n id: string,\n request: AttachmentRequest\n ) => Promise;\n deleteCipherAttachment: (id: string, attachmentId: string) => Promise;\n deleteCipherAttachmentAdmin: (id: string, attachmentId: string) => Promise;\n postShareCipherAttachment: (\n id: string,\n attachmentId: string,\n data: FormData,\n organizationId: string\n ) => Promise;\n renewAttachmentUploadUrl: (\n id: string,\n attachmentId: string\n ) => Promise;\n postAttachmentFile: (id: string, attachmentId: string, data: FormData) => Promise;\n\n getCollectionDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n getUserCollections: () => Promise>;\n getCollections: (organizationId: string) => Promise>;\n getCollectionUsers: (organizationId: string, id: string) => Promise;\n postCollection: (\n organizationId: string,\n request: CollectionRequest\n ) => Promise;\n putCollectionUsers: (\n organizationId: string,\n id: string,\n request: SelectionReadOnlyRequest[]\n ) => Promise;\n putCollection: (\n organizationId: string,\n id: string,\n request: CollectionRequest\n ) => Promise;\n deleteCollection: (organizationId: string, id: string) => Promise;\n deleteCollectionUser: (\n organizationId: string,\n id: string,\n organizationUserId: string\n ) => Promise;\n\n getGroupDetails: (organizationId: string, id: string) => Promise;\n getGroups: (organizationId: string) => Promise>;\n getGroupUsers: (organizationId: string, id: string) => Promise;\n postGroup: (organizationId: string, request: GroupRequest) => Promise;\n putGroup: (organizationId: string, id: string, request: GroupRequest) => Promise;\n putGroupUsers: (organizationId: string, id: string, request: string[]) => Promise;\n deleteGroup: (organizationId: string, id: string) => Promise;\n deleteGroupUser: (organizationId: string, id: string, organizationUserId: string) => Promise;\n\n getPolicy: (organizationId: string, type: PolicyType) => Promise;\n getPolicies: (organizationId: string) => Promise>;\n getPoliciesByToken: (\n organizationId: string,\n token: string,\n email: string,\n organizationUserId: string\n ) => Promise>;\n getPoliciesByInvitedUser: (\n organizationId: string,\n userId: string\n ) => Promise>;\n putPolicy: (\n organizationId: string,\n type: PolicyType,\n request: PolicyRequest\n ) => Promise;\n\n getOrganizationUser: (\n organizationId: string,\n id: string\n ) => Promise;\n getOrganizationUserGroups: (organizationId: string, id: string) => Promise;\n getOrganizationUsers: (\n organizationId: string\n ) => Promise>;\n getOrganizationUserResetPasswordDetails: (\n organizationId: string,\n id: string\n ) => Promise;\n postOrganizationUserInvite: (\n organizationId: string,\n request: OrganizationUserInviteRequest\n ) => Promise;\n postOrganizationUserReinvite: (organizationId: string, id: string) => Promise;\n postManyOrganizationUserReinvite: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserAccept: (\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ) => Promise;\n postOrganizationUserConfirm: (\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ) => Promise;\n postOrganizationUsersPublicKey: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n postOrganizationUserBulkConfirm: (\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ) => Promise>;\n\n putOrganizationUser: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ) => Promise;\n putOrganizationUserGroups: (\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ) => Promise;\n putOrganizationUserResetPasswordEnrollment: (\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ) => Promise;\n putOrganizationUserResetPassword: (\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ) => Promise;\n deleteOrganizationUser: (organizationId: string, id: string) => Promise;\n deleteManyOrganizationUsers: (\n organizationId: string,\n request: OrganizationUserBulkRequest\n ) => Promise>;\n\n getSync: () => Promise;\n postImportDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise;\n postPublicImportDirectory: (request: OrganizationImportRequest) => Promise;\n\n getSettingsDomains: () => Promise;\n putSettingsDomains: (request: UpdateDomainsRequest) => Promise;\n\n getTwoFactorProviders: () => Promise>;\n getTwoFactorOrganizationProviders: (\n organizationId: string\n ) => Promise>;\n getTwoFactorAuthenticator: (\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorEmail: (request: SecretVerificationRequest) => Promise;\n getTwoFactorDuo: (request: SecretVerificationRequest) => Promise;\n getTwoFactorOrganizationDuo: (\n organizationId: string,\n request: SecretVerificationRequest\n ) => Promise;\n getTwoFactorYubiKey: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthn: (request: SecretVerificationRequest) => Promise;\n getTwoFactorWebAuthnChallenge: (request: SecretVerificationRequest) => Promise;\n getTwoFactorRecover: (request: SecretVerificationRequest) => Promise;\n putTwoFactorAuthenticator: (\n request: UpdateTwoFactorAuthenticatorRequest\n ) => Promise;\n putTwoFactorEmail: (request: UpdateTwoFactorEmailRequest) => Promise;\n putTwoFactorDuo: (request: UpdateTwoFactorDuoRequest) => Promise;\n putTwoFactorOrganizationDuo: (\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ) => Promise;\n putTwoFactorYubiKey: (\n request: UpdateTwoFactorYubioOtpRequest\n ) => Promise;\n putTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnRequest\n ) => Promise;\n deleteTwoFactorWebAuthn: (\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ) => Promise;\n putTwoFactorDisable: (request: TwoFactorProviderRequest) => Promise;\n putTwoFactorOrganizationDisable: (\n organizationId: string,\n request: TwoFactorProviderRequest\n ) => Promise;\n postTwoFactorRecover: (request: TwoFactorRecoveryRequest) => Promise;\n postTwoFactorEmailSetup: (request: TwoFactorEmailRequest) => Promise;\n postTwoFactorEmail: (request: TwoFactorEmailRequest) => Promise;\n getDeviceVerificationSettings: () => Promise;\n putDeviceVerificationSettings: (\n request: DeviceVerificationRequest\n ) => Promise;\n\n getEmergencyAccessTrusted: () => Promise>;\n getEmergencyAccessGranted: () => Promise>;\n getEmergencyAccess: (id: string) => Promise;\n getEmergencyGrantorPolicies: (id: string) => Promise>;\n putEmergencyAccess: (id: string, request: EmergencyAccessUpdateRequest) => Promise;\n deleteEmergencyAccess: (id: string) => Promise;\n postEmergencyAccessInvite: (request: EmergencyAccessInviteRequest) => Promise;\n postEmergencyAccessReinvite: (id: string) => Promise;\n postEmergencyAccessAccept: (id: string, request: EmergencyAccessAcceptRequest) => Promise;\n postEmergencyAccessConfirm: (id: string, request: EmergencyAccessConfirmRequest) => Promise;\n postEmergencyAccessInitiate: (id: string) => Promise;\n postEmergencyAccessApprove: (id: string) => Promise;\n postEmergencyAccessReject: (id: string) => Promise;\n postEmergencyAccessTakeover: (id: string) => Promise;\n postEmergencyAccessPassword: (\n id: string,\n request: EmergencyAccessPasswordRequest\n ) => Promise;\n postEmergencyAccessView: (id: string) => Promise;\n\n getOrganization: (id: string) => Promise;\n getOrganizationBilling: (id: string) => Promise;\n getOrganizationSubscription: (id: string) => Promise;\n getCloudCommunicationsEnabled: () => Promise;\n abstract getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise>;\n abstract updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId: string\n ): Promise>;\n deleteOrganizationConnection: (id: string) => Promise;\n getOrganizationLicense: (id: string, installationId: string) => Promise;\n getOrganizationTaxInfo: (id: string) => Promise;\n getOrganizationAutoEnrollStatus: (\n identifier: string\n ) => Promise;\n getOrganizationSso: (id: string) => Promise;\n postOrganization: (request: OrganizationCreateRequest) => Promise;\n putOrganization: (\n id: string,\n request: OrganizationUpdateRequest\n ) => Promise;\n putOrganizationTaxInfo: (id: string, request: OrganizationTaxInfoUpdateRequest) => Promise;\n postLeaveOrganization: (id: string) => Promise;\n postOrganizationLicense: (data: FormData) => Promise;\n postOrganizationLicenseUpdate: (id: string, data: FormData) => Promise;\n postOrganizationApiKey: (\n id: string,\n request: OrganizationApiKeyRequest\n ) => Promise;\n getOrganizationApiKeyInformation: (\n id: string\n ) => Promise>;\n postOrganizationRotateApiKey: (\n id: string,\n request: OrganizationApiKeyRequest\n ) => Promise;\n postOrganizationSso: (\n id: string,\n request: OrganizationSsoRequest\n ) => Promise;\n postOrganizationUpgrade: (\n id: string,\n request: OrganizationUpgradeRequest\n ) => Promise;\n postOrganizationUpdateSubscription: (\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ) => Promise;\n postOrganizationSeat: (id: string, request: SeatRequest) => Promise;\n postOrganizationStorage: (id: string, request: StorageRequest) => Promise;\n postOrganizationPayment: (id: string, request: PaymentRequest) => Promise;\n postOrganizationVerifyBank: (id: string, request: VerifyBankRequest) => Promise;\n postOrganizationCancel: (id: string) => Promise;\n postOrganizationReinstate: (id: string) => Promise;\n deleteOrganization: (id: string, request: SecretVerificationRequest) => Promise;\n getPlans: () => Promise>;\n getTaxRates: () => Promise>;\n getOrganizationKeys: (id: string) => Promise;\n postOrganizationKeys: (\n id: string,\n request: OrganizationKeysRequest\n ) => Promise;\n\n postProviderSetup: (id: string, request: ProviderSetupRequest) => Promise;\n getProvider: (id: string) => Promise;\n putProvider: (id: string, request: ProviderUpdateRequest) => Promise;\n\n getProviderUsers: (providerId: string) => Promise>;\n getProviderUser: (providerId: string, id: string) => Promise;\n postProviderUserInvite: (providerId: string, request: ProviderUserInviteRequest) => Promise;\n postProviderUserReinvite: (providerId: string, id: string) => Promise;\n postManyProviderUserReinvite: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserAccept: (\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ) => Promise;\n postProviderUserConfirm: (\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ) => Promise;\n postProviderUsersPublicKey: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n postProviderUserBulkConfirm: (\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ) => Promise>;\n putProviderUser: (\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ) => Promise;\n deleteProviderUser: (organizationId: string, id: string) => Promise;\n deleteManyProviderUsers: (\n providerId: string,\n request: ProviderUserBulkRequest\n ) => Promise>;\n getProviderClients: (\n providerId: string\n ) => Promise>;\n postProviderAddOrganization: (\n providerId: string,\n request: ProviderAddOrganizationRequest\n ) => Promise;\n postProviderCreateOrganization: (\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ) => Promise;\n deleteProviderOrganization: (providerId: string, organizationId: string) => Promise;\n\n getEvents: (start: string, end: string, token: string) => Promise>;\n getEventsCipher: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganization: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsOrganizationUser: (\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProvider: (\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n getEventsProviderUser: (\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ) => Promise>;\n postEventsCollect: (request: EventRequest[]) => Promise;\n\n deleteSsoUser: (organizationId: string) => Promise;\n getSsoUserIdentifier: () => Promise;\n\n getUserPublicKey: (id: string) => Promise;\n\n getHibpBreach: (username: string) => Promise;\n\n postBitPayInvoice: (request: BitPayInvoiceRequest) => Promise;\n postSetupPayment: () => Promise;\n\n getActiveBearerToken: () => Promise;\n fetch: (request: Request) => Promise;\n nativeFetch: (request: Request) => Promise;\n\n preValidateSso: (identifier: string) => Promise;\n\n postCreateSponsorship: (\n sponsorshipOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ) => Promise;\n getSponsorshipSyncStatus: (\n sponsoredOrgId: string\n ) => Promise;\n deleteRevokeSponsorship: (sponsoringOrganizationId: string) => Promise;\n deleteRemoveSponsorship: (sponsoringOrgId: string) => Promise;\n postPreValidateSponsorshipToken: (sponsorshipToken: string) => Promise;\n postRedeemSponsorship: (\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ) => Promise;\n postResendSponsorshipOffer: (sponsoringOrgId: string) => Promise;\n\n getUserKeyFromKeyConnector: (keyConnectorUrl: string) => Promise;\n postUserKeyToKeyConnector: (\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ) => Promise;\n getKeyConnectorAlive: (keyConnectorUrl: string) => Promise;\n}\n","export abstract class AppIdService {\n getAppId: () => Promise;\n getAnonymousAppId: () => Promise;\n}\n","import { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\n\nexport abstract class AuditService {\n passwordLeaked: (password: string) => Promise;\n breachedAccounts: (username: string) => Promise;\n}\n","import { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthResult } from \"../models/domain/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n} from \"../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TokenRequestTwoFactor } from \"../models/request/identityToken/tokenRequestTwoFactor\";\n\nexport abstract class AuthService {\n masterPasswordHash: string;\n email: string;\n logIn: (\n credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials\n ) => Promise;\n logInTwoFactor: (\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ) => Promise;\n logOut: (callback: () => void) => void;\n makePreloginKey: (masterPassword: string, email: string) => Promise;\n authingWithApiKey: () => boolean;\n authingWithSso: () => boolean;\n authingWithPassword: () => boolean;\n getAuthStatus: (userId?: string) => Promise;\n}\n","export abstract class BroadcasterService {\n send: (message: any, id?: string) => void;\n subscribe: (id: string, messageCallback: (message: any) => any) => void;\n unsubscribe: (id: string) => void;\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Field } from \"../models/domain/field\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\n\nexport abstract class CipherService {\n clearCache: (userId?: string) => Promise;\n encrypt: (\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher?: Cipher\n ) => Promise;\n encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise;\n encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise;\n getAllDecryptedForUrl: (\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch?: UriMatchType\n ) => Promise;\n getAllFromApiForOrganization: (organizationId: string) => Promise;\n getLastUsedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getLastLaunchedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise;\n getNextCipherForUrl: (url: string) => Promise;\n updateLastUsedIndexForUrl: (url: string) => void;\n updateLastUsedDate: (id: string) => Promise;\n updateLastLaunchedDate: (id: string) => Promise;\n saveNeverDomain: (domain: string) => Promise;\n saveWithServer: (cipher: Cipher) => Promise;\n shareWithServer: (\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n shareManyWithServer: (\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ) => Promise;\n saveAttachmentWithServer: (\n cipher: Cipher,\n unencryptedFile: any,\n admin?: boolean\n ) => Promise;\n saveAttachmentRawWithServer: (\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin?: boolean\n ) => Promise;\n saveCollectionsWithServer: (cipher: Cipher) => Promise;\n upsert: (cipher: CipherData | CipherData[]) => Promise;\n replace: (ciphers: { [id: string]: CipherData }) => Promise;\n clear: (userId: string) => Promise;\n moveManyWithServer: (ids: string[], folderId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n deleteManyWithServer: (ids: string[]) => Promise;\n deleteAttachment: (id: string, attachmentId: string) => Promise;\n deleteAttachmentWithServer: (id: string, attachmentId: string) => Promise;\n sortCiphersByLastUsed: (a: any, b: any) => number;\n sortCiphersByLastUsedThenName: (a: any, b: any) => number;\n getLocaleSortingFunction: () => (a: CipherView, b: CipherView) => number;\n softDelete: (id: string | string[]) => Promise;\n softDeleteWithServer: (id: string) => Promise;\n softDeleteManyWithServer: (ids: string[]) => Promise;\n restore: (\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) => Promise;\n restoreWithServer: (id: string) => Promise;\n restoreManyWithServer: (ids: string[]) => Promise;\n}\n","import { CollectionData } from \"../models/data/collectionData\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nexport abstract class CollectionService {\n clearCache: (userId?: string) => Promise;\n encrypt: (model: CollectionView) => Promise;\n decryptMany: (collections: Collection[]) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: (collections?: CollectionView[]) => Promise[]>;\n getNested: (id: string) => Promise>;\n upsert: (collection: CollectionData | CollectionData[]) => Promise;\n replace: (collections: { [id: string]: CollectionData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n}\n","import { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { ProfileOrganizationResponse } from \"../models/response/profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"../models/response/profileProviderResponse\";\n\nexport abstract class CryptoService {\n setKey: (key: SymmetricCryptoKey) => Promise;\n setKeyHash: (keyHash: string) => Promise;\n setEncKey: (encKey: string) => Promise;\n setEncPrivateKey: (encPrivateKey: string) => Promise;\n setOrgKeys: (\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ) => Promise;\n setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise;\n getKey: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n getKeyFromStorage: (keySuffix: KeySuffixOptions, userId?: string) => Promise;\n getKeyHash: () => Promise;\n compareAndUpdateKeyHash: (masterPassword: string, key: SymmetricCryptoKey) => Promise;\n getEncKey: (key?: SymmetricCryptoKey) => Promise;\n getPublicKey: () => Promise;\n getPrivateKey: () => Promise;\n getFingerprint: (userId: string, publicKey?: ArrayBuffer) => Promise;\n getOrgKeys: () => Promise>;\n getOrgKey: (orgId: string) => Promise;\n getProviderKey: (providerId: string) => Promise;\n hasKey: () => Promise;\n hasKeyInMemory: (userId?: string) => Promise;\n hasKeyStored: (keySuffix?: KeySuffixOptions, userId?: string) => Promise;\n hasEncKey: () => Promise;\n clearKey: (clearSecretStorage?: boolean, userId?: string) => Promise;\n clearKeyHash: () => Promise;\n clearEncKey: (memoryOnly?: boolean, userId?: string) => Promise;\n clearKeyPair: (memoryOnly?: boolean, userId?: string) => Promise;\n clearOrgKeys: (memoryOnly?: boolean, userId?: string) => Promise;\n clearProviderKeys: (memoryOnly?: boolean) => Promise;\n clearPinProtectedKey: () => Promise;\n clearKeys: (userId?: string) => Promise;\n toggleKey: () => Promise;\n makeKey: (\n password: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ) => Promise;\n makeKeyFromPin: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number,\n protectedKeyCs?: EncString\n ) => Promise;\n makeShareKey: () => Promise<[EncString, SymmetricCryptoKey]>;\n makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, EncString]>;\n makePinKey: (\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ) => Promise;\n makeSendKey: (keyMaterial: ArrayBuffer) => Promise;\n hashPassword: (\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ) => Promise;\n makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n remakeEncKey: (\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ) => Promise<[SymmetricCryptoKey, EncString]>;\n encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise;\n rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise;\n rsaDecrypt: (encValue: string, privateKeyValue?: ArrayBuffer) => Promise;\n decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise;\n decryptFromBytes: (encBuf: ArrayBuffer, key: SymmetricCryptoKey) => Promise;\n randomNumber: (min: number, max: number) => Promise;\n validateKey: (key: SymmetricCryptoKey) => Promise;\n}\n","import { DecryptParameters } from \"../models/domain/decryptParameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nexport abstract class CryptoFunctionService {\n pbkdf2: (\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ) => Promise;\n hkdf: (\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hkdfExpand: (\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ) => Promise;\n hash: (\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ) => Promise;\n hmac: (\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise;\n hmacFast: (\n value: ArrayBuffer | string,\n key: ArrayBuffer | string,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ) => Promise;\n compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise;\n aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n aesDecryptFastParameters: (\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ) => DecryptParameters;\n aesDecryptFast: (parameters: DecryptParameters) => Promise;\n aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise;\n rsaEncrypt: (\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaDecrypt: (\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ) => Promise;\n rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise;\n rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n randomBytes: (length: number) => Promise;\n}\n","import { Observable } from \"rxjs\";\n\nexport type Urls = {\n base?: string;\n webVault?: string;\n api?: string;\n identity?: string;\n icons?: string;\n notifications?: string;\n events?: string;\n keyConnector?: string;\n};\n\nexport type PayPalConfig = {\n businessId?: string;\n buttonAction?: string;\n};\n\nexport abstract class EnvironmentService {\n urls: Observable;\n\n hasBaseUrl: () => boolean;\n getNotificationsUrl: () => string;\n getWebVaultUrl: () => string;\n getSendUrl: () => string;\n getIconsUrl: () => string;\n getApiUrl: () => string;\n getIdentityUrl: () => string;\n getEventsUrl: () => string;\n getKeyConnectorUrl: () => string;\n setUrlsFromStorage: () => Promise;\n setUrls: (urls: Urls) => Promise;\n getUrls: () => Urls;\n}\n","import { EventType } from \"../enums/eventType\";\n\nexport abstract class EventService {\n collect: (eventType: EventType, cipherId?: string, uploadImmediately?: boolean) => Promise;\n uploadEvents: (userId?: string) => Promise;\n clearEvents: (userId?: string) => Promise;\n}\n","import { EventView } from \"../models/view/eventView\";\n\nexport type ExportFormat = \"csv\" | \"json\" | \"encrypted_json\";\n\nexport abstract class ExportService {\n getExport: (format?: ExportFormat, organizationId?: string) => Promise;\n getPasswordProtectedExport: (password: string, organizationId?: string) => Promise;\n getOrganizationExport: (organizationId: string, format?: ExportFormat) => Promise;\n getEventExport: (events: EventView[]) => Promise;\n getFileName: (prefix?: string, extension?: string) => string;\n}\n","import { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\n\nexport abstract class FileUploadService {\n uploadSendFile: (\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n uploadCipherAttachment: (\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) => Promise;\n}\n","import { FolderData } from \"../models/data/folderData\";\nimport { Folder } from \"../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { FolderView } from \"../models/view/folderView\";\n\nexport abstract class FolderService {\n clearCache: (userId?: string) => Promise;\n encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n getAllNested: (folders?: FolderView[]) => Promise[]>;\n getNested: (id: string) => Promise>;\n saveWithServer: (folder: Folder) => Promise;\n upsert: (folder: FolderData | FolderData[]) => Promise;\n replace: (folders: { [id: string]: FolderData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n}\n","export abstract class I18nService {\n locale: string;\n supportedTranslationLocales: string[];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames: Map;\n t: (id: string, p1?: string, p2?: string, p3?: string) => string;\n translate: (id: string, p1?: string, p2?: string, p3?: string) => string;\n}\n","import { ImportOption, ImportType } from \"../enums/importOptions\";\nimport { ImportError } from \"../importers/importError\";\nimport { Importer } from \"../importers/importer\";\n\nexport abstract class ImportService {\n featuredImportOptions: readonly ImportOption[];\n regularImportOptions: readonly ImportOption[];\n getImportOptions: () => ImportOption[];\n import: (\n importer: Importer,\n fileContents: string,\n organizationId?: string\n ) => Promise;\n getImporter: (\n format: ImportType | \"bitwardenpasswordprotected\",\n organizationId: string,\n password?: string\n ) => Importer;\n}\n","import { Organization } from \"../models/domain/organization\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport abstract class KeyConnectorService {\n getAndSetKey: (url?: string) => Promise;\n getManagingOrganization: () => Promise;\n getUsesKeyConnector: () => Promise;\n migrateUser: () => Promise;\n userNeedsMigration: () => Promise;\n convertNewSsoUserToKeyConnector: (\n tokenResponse: IdentityTokenResponse,\n orgId: string\n ) => Promise;\n setUsesKeyConnector: (enabled: boolean) => Promise;\n setConvertAccountRequired: (status: boolean) => Promise;\n getConvertAccountRequired: () => Promise;\n removeConvertAccountRequired: () => Promise;\n clear: () => Promise;\n}\n","import { LogLevelType } from \"../enums/logLevelType\";\n\nexport abstract class LogService {\n debug: (message: string) => void;\n info: (message: string) => void;\n warning: (message: string) => void;\n error: (message: string) => void;\n write: (level: LogLevelType, message: string) => void;\n time: (label: string) => void;\n timeEnd: (label: string) => [number, number];\n}\n","export abstract class MessagingService {\n send: (subscriber: string, arg?: any) => void;\n}\n","export abstract class NotificationsService {\n init: () => Promise;\n updateConnection: (sync?: boolean) => Promise;\n reconnectFromActivity: () => Promise;\n disconnectFromInactivity: () => Promise;\n}\n","import { OrganizationData } from \"../models/data/organizationData\";\nimport { Organization } from \"../models/domain/organization\";\n\nexport abstract class OrganizationService {\n get: (id: string) => Promise;\n getByIdentifier: (identifier: string) => Promise;\n getAll: (userId?: string) => Promise;\n save: (orgs: { [id: string]: OrganizationData }) => Promise;\n canManageSponsorships: () => Promise;\n hasOrganizations: (userId?: string) => Promise;\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/passwordGeneratorPolicyOptions\";\n\nexport abstract class PasswordGenerationService {\n generatePassword: (options: any) => Promise;\n generatePassphrase: (options: any) => Promise;\n getOptions: () => Promise<[any, PasswordGeneratorPolicyOptions]>;\n enforcePasswordGeneratorPoliciesOnOptions: (\n options: any\n ) => Promise<[any, PasswordGeneratorPolicyOptions]>;\n getPasswordGeneratorPolicyOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n getHistory: () => Promise;\n addHistory: (password: string) => Promise;\n clear: (userId?: string) => Promise;\n passwordStrength: (password: string, userInputs?: string[]) => zxcvbn.ZXCVBNResult;\n normalizeOptions: (options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) => void;\n}\n","export abstract class PasswordRepromptService {\n protectedFields: () => string[];\n showPasswordPrompt: () => Promise;\n enabled: () => Promise;\n}\n","import { ClientType } from \"../enums/clientType\";\nimport { DeviceType } from \"../enums/deviceType\";\nimport { ThemeType } from \"../enums/themeType\";\n\ninterface ToastOptions {\n timeout?: number;\n}\n\nexport abstract class PlatformUtilsService {\n getDevice: () => DeviceType;\n getDeviceString: () => string;\n getClientType: () => ClientType;\n isFirefox: () => boolean;\n isChrome: () => boolean;\n isEdge: () => boolean;\n isOpera: () => boolean;\n isVivaldi: () => boolean;\n isSafari: () => boolean;\n isMacAppStore: () => boolean;\n isViewOpen: () => Promise;\n launchUri: (uri: string, options?: any) => void;\n saveFile: (win: Window, blobData: any, blobOptions: any, fileName: string) => void;\n getApplicationVersion: () => Promise;\n supportsWebAuthn: (win: Window) => boolean;\n supportsDuo: () => boolean;\n showToast: (\n type: \"error\" | \"success\" | \"warning\" | \"info\",\n title: string,\n text: string | string[],\n options?: ToastOptions\n ) => void;\n showDialog: (\n body: string,\n title?: string,\n confirmText?: string,\n cancelText?: string,\n type?: string,\n bodyIsHtml?: boolean\n ) => Promise;\n isDev: () => boolean;\n isSelfHost: () => boolean;\n copyToClipboard: (text: string, options?: any) => void | boolean;\n readFromClipboard: (options?: any) => Promise;\n supportsBiometric: () => Promise;\n authenticateBiometric: () => Promise;\n getDefaultSystemTheme: () => Promise;\n onDefaultSystemThemeChange: (\n callback: (theme: ThemeType.Light | ThemeType.Dark) => unknown\n ) => unknown;\n getEffectiveTheme: () => Promise;\n supportsSecureStorage: () => boolean;\n}\n","import { PolicyType } from \"../enums/policyType\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"../models/domain/masterPasswordPolicyOptions\";\nimport { Policy } from \"../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../models/domain/resetPasswordPolicyOptions\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\n\nexport abstract class PolicyService {\n clearCache: () => void;\n getAll: (type?: PolicyType, userId?: string) => Promise;\n getPolicyForOrganization: (policyType: PolicyType, organizationId: string) => Promise;\n replace: (policies: { [id: string]: PolicyData }) => Promise;\n clear: (userId?: string) => Promise;\n getMasterPasswordPoliciesForInvitedUsers: (orgId: string) => Promise;\n getMasterPasswordPolicyOptions: (policies?: Policy[]) => Promise;\n evaluateMasterPassword: (\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions?: MasterPasswordPolicyOptions\n ) => boolean;\n getResetPasswordPolicyOptions: (\n policies: Policy[],\n orgId: string\n ) => [ResetPasswordPolicyOptions, boolean];\n mapPoliciesFromToken: (policiesResponse: ListResponse) => Policy[];\n policyAppliesToUser: (\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) => Promise;\n}\n","import { ProviderData } from \"../models/data/providerData\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport abstract class ProviderService {\n get: (id: string) => Promise;\n getAll: () => Promise;\n save: (providers: { [id: string]: ProviderData }) => Promise;\n}\n","import { CipherView } from \"../models/view/cipherView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class SearchService {\n indexedEntityId?: string = null;\n clearIndex: () => void;\n isSearchable: (query: string) => boolean;\n indexCiphers: (indexedEntityGuid?: string, ciphersToIndex?: CipherView[]) => Promise;\n searchCiphers: (\n query: string,\n filter?: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[],\n ciphers?: CipherView[]\n ) => Promise;\n searchCiphersBasic: (ciphers: CipherView[], query: string, deleted?: boolean) => CipherView[];\n searchSends: (sends: SendView[], query: string) => SendView[];\n}\n","import { SendData } from \"../models/data/sendData\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { Send } from \"../models/domain/send\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class SendService {\n clearCache: () => Promise;\n encrypt: (\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ) => Promise<[Send, EncArrayBuffer]>;\n get: (id: string) => Promise;\n getAll: () => Promise;\n getAllDecrypted: () => Promise;\n saveWithServer: (sendData: [Send, EncArrayBuffer]) => Promise;\n upsert: (send: SendData | SendData[]) => Promise;\n replace: (sends: { [id: string]: SendData }) => Promise;\n clear: (userId: string) => Promise;\n delete: (id: string | string[]) => Promise;\n deleteWithServer: (id: string) => Promise;\n removePasswordWithServer: (id: string) => Promise;\n}\n","export abstract class SettingsService {\n clearCache: () => Promise;\n getEquivalentDomains: () => Promise;\n setEquivalentDomains: (equivalentDomains: string[][]) => Promise;\n clear: (userId?: string) => Promise;\n}\n","import { BehaviorSubject } from \"rxjs\";\n\nimport { KdfType } from \"../enums/kdfType\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { Account } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { Policy } from \"../models/domain/policy\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { WindowState } from \"../models/domain/windowState\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport abstract class StateService {\n accounts: BehaviorSubject<{ [userId: string]: T }>;\n activeAccount: BehaviorSubject;\n\n addAccount: (account: T) => Promise;\n setActiveUser: (userId: string) => Promise;\n clean: (options?: StorageOptions) => Promise;\n init: () => Promise;\n\n getAccessToken: (options?: StorageOptions) => Promise;\n setAccessToken: (value: string, options?: StorageOptions) => Promise;\n getAddEditCipherInfo: (options?: StorageOptions) => Promise;\n setAddEditCipherInfo: (value: any, options?: StorageOptions) => Promise;\n getAlwaysShowDock: (options?: StorageOptions) => Promise;\n setAlwaysShowDock: (value: boolean, options?: StorageOptions) => Promise;\n getApiKeyClientId: (options?: StorageOptions) => Promise;\n setApiKeyClientId: (value: string, options?: StorageOptions) => Promise;\n getApiKeyClientSecret: (options?: StorageOptions) => Promise;\n setApiKeyClientSecret: (value: string, options?: StorageOptions) => Promise;\n getAutoConfirmFingerPrints: (options?: StorageOptions) => Promise;\n setAutoConfirmFingerprints: (value: boolean, options?: StorageOptions) => Promise;\n getAutoFillOnPageLoadDefault: (options?: StorageOptions) => Promise;\n setAutoFillOnPageLoadDefault: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricAwaitingAcceptance: (options?: StorageOptions) => Promise;\n setBiometricAwaitingAcceptance: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricFingerprintValidated: (options?: StorageOptions) => Promise;\n setBiometricFingerprintValidated: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricLocked: (options?: StorageOptions) => Promise;\n setBiometricLocked: (value: boolean, options?: StorageOptions) => Promise;\n getBiometricText: (options?: StorageOptions) => Promise;\n setBiometricText: (value: string, options?: StorageOptions) => Promise;\n getBiometricUnlock: (options?: StorageOptions) => Promise;\n setBiometricUnlock: (value: boolean, options?: StorageOptions) => Promise;\n getCanAccessPremium: (options?: StorageOptions) => Promise;\n getHasPremiumPersonally: (options?: StorageOptions) => Promise;\n setHasPremiumPersonally: (value: boolean, options?: StorageOptions) => Promise;\n setHasPremiumFromOrganization: (value: boolean, options?: StorageOptions) => Promise;\n getHasPremiumFromOrganization: (options?: StorageOptions) => Promise;\n getClearClipboard: (options?: StorageOptions) => Promise;\n setClearClipboard: (value: number, options?: StorageOptions) => Promise;\n getCollapsedGroupings: (options?: StorageOptions) => Promise;\n setCollapsedGroupings: (value: string[], options?: StorageOptions) => Promise;\n getConvertAccountToKeyConnector: (options?: StorageOptions) => Promise;\n setConvertAccountToKeyConnector: (value: boolean, options?: StorageOptions) => Promise;\n getCryptoMasterKey: (options?: StorageOptions) => Promise;\n setCryptoMasterKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise;\n getCryptoMasterKeyAuto: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyAuto: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyB64: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyB64: (value: string, options?: StorageOptions) => Promise;\n getCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n hasCryptoMasterKeyBiometric: (options?: StorageOptions) => Promise;\n setCryptoMasterKeyBiometric: (value: string, options?: StorageOptions) => Promise;\n getDecodedToken: (options?: StorageOptions) => Promise;\n setDecodedToken: (value: any, options?: StorageOptions) => Promise;\n getDecryptedCiphers: (options?: StorageOptions) => Promise;\n setDecryptedCiphers: (value: CipherView[], options?: StorageOptions) => Promise;\n getDecryptedCollections: (options?: StorageOptions) => Promise;\n setDecryptedCollections: (value: CollectionView[], options?: StorageOptions) => Promise;\n getDecryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setDecryptedCryptoSymmetricKey: (\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ) => Promise;\n getDecryptedFolders: (options?: StorageOptions) => Promise;\n setDecryptedFolders: (value: FolderView[], options?: StorageOptions) => Promise;\n getDecryptedOrganizationKeys: (\n options?: StorageOptions\n ) => Promise>;\n setDecryptedOrganizationKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setDecryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getDecryptedPinProtected: (options?: StorageOptions) => Promise;\n setDecryptedPinProtected: (value: EncString, options?: StorageOptions) => Promise;\n getDecryptedPolicies: (options?: StorageOptions) => Promise;\n setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise;\n getDecryptedPrivateKey: (options?: StorageOptions) => Promise;\n setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getDecryptedProviderKeys: (options?: StorageOptions) => Promise>;\n setDecryptedProviderKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getDecryptedSends: (options?: StorageOptions) => Promise;\n setDecryptedSends: (value: SendView[], options?: StorageOptions) => Promise;\n getDefaultUriMatch: (options?: StorageOptions) => Promise;\n setDefaultUriMatch: (value: UriMatchType, options?: StorageOptions) => Promise;\n getDisableAddLoginNotification: (options?: StorageOptions) => Promise;\n setDisableAddLoginNotification: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoBiometricsPrompt: (options?: StorageOptions) => Promise;\n setDisableAutoBiometricsPrompt: (value: boolean, options?: StorageOptions) => Promise;\n getDisableAutoTotpCopy: (options?: StorageOptions) => Promise;\n setDisableAutoTotpCopy: (value: boolean, options?: StorageOptions) => Promise;\n getDisableBadgeCounter: (options?: StorageOptions) => Promise;\n setDisableBadgeCounter: (value: boolean, options?: StorageOptions) => Promise;\n getDisableChangedPasswordNotification: (options?: StorageOptions) => Promise;\n setDisableChangedPasswordNotification: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getDisableContextMenuItem: (options?: StorageOptions) => Promise;\n setDisableContextMenuItem: (value: boolean, options?: StorageOptions) => Promise;\n getDisableFavicon: (options?: StorageOptions) => Promise;\n setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise;\n getDisableGa: (options?: StorageOptions) => Promise;\n setDisableGa: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowCardsCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowCardsCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getDontShowIdentitiesCurrentTab: (options?: StorageOptions) => Promise;\n setDontShowIdentitiesCurrentTab: (value: boolean, options?: StorageOptions) => Promise;\n getEmail: (options?: StorageOptions) => Promise;\n setEmail: (value: string, options?: StorageOptions) => Promise;\n getEmailVerified: (options?: StorageOptions) => Promise;\n setEmailVerified: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAlwaysOnTop: (options?: StorageOptions) => Promise;\n setEnableAlwaysOnTop: (value: boolean, options?: StorageOptions) => Promise;\n getEnableAutoFillOnPageLoad: (options?: StorageOptions) => Promise;\n setEnableAutoFillOnPageLoad: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBiometric: (options?: StorageOptions) => Promise;\n setEnableBiometric: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegration: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise;\n getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise;\n setEnableBrowserIntegrationFingerprint: (\n value: boolean,\n options?: StorageOptions\n ) => Promise;\n getEnableCloseToTray: (options?: StorageOptions) => Promise;\n setEnableCloseToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableFullWidth: (options?: StorageOptions) => Promise;\n setEnableFullWidth: (value: boolean, options?: StorageOptions) => Promise;\n getEnableGravitars: (options?: StorageOptions) => Promise;\n setEnableGravitars: (value: boolean, options?: StorageOptions) => Promise;\n getEnableMinimizeToTray: (options?: StorageOptions) => Promise;\n setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableStartToTray: (options?: StorageOptions) => Promise;\n setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise;\n getEnableTray: (options?: StorageOptions) => Promise;\n setEnableTray: (value: boolean, options?: StorageOptions) => Promise;\n getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;\n setEncryptedCiphers: (\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;\n setEncryptedCollections: (\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise;\n setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;\n setEncryptedFolders: (\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedOrganizationKeys: (options?: StorageOptions) => Promise;\n setEncryptedOrganizationKeys: (\n value: Map,\n options?: StorageOptions\n ) => Promise;\n getEncryptedPasswordGenerationHistory: (\n options?: StorageOptions\n ) => Promise;\n setEncryptedPasswordGenerationHistory: (\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ) => Promise;\n getEncryptedPinProtected: (options?: StorageOptions) => Promise;\n setEncryptedPinProtected: (value: string, options?: StorageOptions) => Promise;\n getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;\n setEncryptedPolicies: (\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ) => Promise;\n getEncryptedPrivateKey: (options?: StorageOptions) => Promise;\n setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise;\n getEncryptedProviderKeys: (options?: StorageOptions) => Promise;\n setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise;\n getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;\n setEncryptedSends: (value: { [id: string]: SendData }, options?: StorageOptions) => Promise;\n getEntityId: (options?: StorageOptions) => Promise;\n setEntityId: (value: string, options?: StorageOptions) => Promise;\n getEntityType: (options?: StorageOptions) => Promise;\n setEntityType: (value: string, options?: StorageOptions) => Promise;\n getEnvironmentUrls: (options?: StorageOptions) => Promise;\n setEnvironmentUrls: (value: EnvironmentUrls, options?: StorageOptions) => Promise;\n getEquivalentDomains: (options?: StorageOptions) => Promise;\n setEquivalentDomains: (value: string, options?: StorageOptions) => Promise;\n getEventCollection: (options?: StorageOptions) => Promise;\n setEventCollection: (value: EventData[], options?: StorageOptions) => Promise;\n getEverBeenUnlocked: (options?: StorageOptions) => Promise;\n setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise;\n getForcePasswordReset: (options?: StorageOptions) => Promise;\n setForcePasswordReset: (value: boolean, options?: StorageOptions) => Promise;\n getInstalledVersion: (options?: StorageOptions) => Promise;\n setInstalledVersion: (value: string, options?: StorageOptions) => Promise;\n getIsAuthenticated: (options?: StorageOptions) => Promise;\n getKdfIterations: (options?: StorageOptions) => Promise;\n setKdfIterations: (value: number, options?: StorageOptions) => Promise;\n getKdfType: (options?: StorageOptions) => Promise;\n setKdfType: (value: KdfType, options?: StorageOptions) => Promise;\n getKeyHash: (options?: StorageOptions) => Promise;\n setKeyHash: (value: string, options?: StorageOptions) => Promise;\n getLastActive: (options?: StorageOptions) => Promise;\n setLastActive: (value: number, options?: StorageOptions) => Promise;\n getLastSync: (options?: StorageOptions) => Promise;\n setLastSync: (value: string, options?: StorageOptions) => Promise;\n getLegacyEtmKey: (options?: StorageOptions) => Promise;\n setLegacyEtmKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise;\n getLocalData: (options?: StorageOptions) => Promise;\n setLocalData: (value: string, options?: StorageOptions) => Promise;\n getLocale: (options?: StorageOptions) => Promise;\n setLocale: (value: string, options?: StorageOptions) => Promise;\n getMainWindowSize: (options?: StorageOptions) => Promise;\n setMainWindowSize: (value: number, options?: StorageOptions) => Promise;\n getMinimizeOnCopyToClipboard: (options?: StorageOptions) => Promise;\n setMinimizeOnCopyToClipboard: (value: boolean, options?: StorageOptions) => Promise;\n getNeverDomains: (options?: StorageOptions) => Promise<{ [id: string]: any }>;\n setNeverDomains: (value: { [id: string]: any }, options?: StorageOptions) => Promise;\n getNoAutoPromptBiometrics: (options?: StorageOptions) => Promise;\n setNoAutoPromptBiometrics: (value: boolean, options?: StorageOptions) => Promise;\n getNoAutoPromptBiometricsText: (options?: StorageOptions) => Promise;\n setNoAutoPromptBiometricsText: (value: string, options?: StorageOptions) => Promise;\n getOpenAtLogin: (options?: StorageOptions) => Promise;\n setOpenAtLogin: (value: boolean, options?: StorageOptions) => Promise;\n getOrganizationInvitation: (options?: StorageOptions) => Promise;\n setOrganizationInvitation: (value: any, options?: StorageOptions) => Promise;\n getOrganizations: (options?: StorageOptions) => Promise<{ [id: string]: OrganizationData }>;\n setOrganizations: (\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ) => Promise;\n getPasswordGenerationOptions: (options?: StorageOptions) => Promise;\n setPasswordGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getUsernameGenerationOptions: (options?: StorageOptions) => Promise;\n setUsernameGenerationOptions: (value: any, options?: StorageOptions) => Promise;\n getGeneratorOptions: (options?: StorageOptions) => Promise;\n setGeneratorOptions: (value: any, options?: StorageOptions) => Promise;\n getProtectedPin: (options?: StorageOptions) => Promise;\n setProtectedPin: (value: string, options?: StorageOptions) => Promise;\n getProviders: (options?: StorageOptions) => Promise<{ [id: string]: ProviderData }>;\n setProviders: (value: { [id: string]: ProviderData }, options?: StorageOptions) => Promise;\n getPublicKey: (options?: StorageOptions) => Promise;\n setPublicKey: (value: ArrayBuffer, options?: StorageOptions) => Promise;\n getRefreshToken: (options?: StorageOptions) => Promise;\n setRefreshToken: (value: string, options?: StorageOptions) => Promise;\n getRememberedEmail: (options?: StorageOptions) => Promise;\n setRememberedEmail: (value: string, options?: StorageOptions) => Promise;\n getSecurityStamp: (options?: StorageOptions) => Promise;\n setSecurityStamp: (value: string, options?: StorageOptions) => Promise;\n getSettings: (options?: StorageOptions) => Promise;\n setSettings: (value: string, options?: StorageOptions) => Promise;\n getSsoCodeVerifier: (options?: StorageOptions) => Promise;\n setSsoCodeVerifier: (value: string, options?: StorageOptions) => Promise;\n getSsoOrgIdentifier: (options?: StorageOptions) => Promise;\n setSsoOrganizationIdentifier: (value: string, options?: StorageOptions) => Promise;\n getSsoState: (options?: StorageOptions) => Promise;\n setSsoState: (value: string, options?: StorageOptions) => Promise;\n getTheme: (options?: StorageOptions) => Promise;\n setTheme: (value: ThemeType, options?: StorageOptions) => Promise;\n getTwoFactorToken: (options?: StorageOptions) => Promise;\n setTwoFactorToken: (value: string, options?: StorageOptions) => Promise;\n getUserId: (options?: StorageOptions) => Promise;\n getUsesKeyConnector: (options?: StorageOptions) => Promise;\n setUsesKeyConnector: (vaule: boolean, options?: StorageOptions) => Promise;\n getVaultTimeout: (options?: StorageOptions) => Promise;\n setVaultTimeout: (value: number, options?: StorageOptions) => Promise;\n getVaultTimeoutAction: (options?: StorageOptions) => Promise;\n setVaultTimeoutAction: (value: string, options?: StorageOptions) => Promise;\n getStateVersion: () => Promise;\n setStateVersion: (value: number) => Promise;\n getWindow: () => Promise;\n setWindow: (value: WindowState) => Promise;\n}\n","export abstract class StateMigrationService {\n needsMigration: () => Promise;\n migrate: () => Promise;\n}\n","import { StorageOptions } from \"../models/domain/storageOptions\";\n\nexport abstract class StorageService {\n get: (key: string, options?: StorageOptions) => Promise;\n has: (key: string, options?: StorageOptions) => Promise;\n save: (key: string, obj: any, options?: StorageOptions) => Promise;\n remove: (key: string, options?: StorageOptions) => Promise;\n}\n","import {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notificationResponse\";\n\nexport abstract class SyncService {\n syncInProgress: boolean;\n\n getLastSync: () => Promise;\n setLastSync: (date: Date, userId?: string) => Promise;\n fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise;\n syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise;\n syncDeleteFolder: (notification: SyncFolderNotification) => Promise;\n syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise;\n syncDeleteCipher: (notification: SyncFolderNotification) => Promise;\n syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise;\n syncDeleteSend: (notification: SyncSendNotification) => Promise;\n}\n","import { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport abstract class TokenService {\n setTokens: (\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ) => Promise;\n setToken: (token: string) => Promise;\n getToken: () => Promise;\n setRefreshToken: (refreshToken: string) => Promise;\n getRefreshToken: () => Promise;\n setClientId: (clientId: string) => Promise;\n getClientId: () => Promise;\n setClientSecret: (clientSecret: string) => Promise;\n getClientSecret: () => Promise;\n setTwoFactorToken: (tokenResponse: IdentityTokenResponse) => Promise;\n getTwoFactorToken: () => Promise;\n clearTwoFactorToken: () => Promise;\n clearToken: (userId?: string) => Promise;\n decodeToken: (token?: string) => any;\n getTokenExpirationDate: () => Promise;\n tokenSecondsRemaining: (offsetSeconds?: number) => Promise;\n tokenNeedsRefresh: (minutes?: number) => Promise;\n getUserId: () => Promise;\n getEmail: () => Promise;\n getEmailVerified: () => Promise;\n getName: () => Promise;\n getIssuer: () => Promise;\n getIsExternal: () => Promise;\n}\n","export abstract class TotpService {\n getCode: (key: string) => Promise;\n getTimeInterval: (key: string) => number;\n isAutoCopyEnabled: () => Promise;\n}\n","import { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\n\nexport interface TwoFactorProviderDetails {\n type: TwoFactorProviderType;\n name: string;\n description: string;\n priority: number;\n sort: number;\n premium: boolean;\n}\n\nexport abstract class TwoFactorService {\n init: () => void;\n getSupportedProviders: (win: Window) => TwoFactorProviderDetails[];\n getDefaultProvider: (webAuthnSupported: boolean) => TwoFactorProviderType;\n setSelectedProvider: (type: TwoFactorProviderType) => void;\n clearSelectedProvider: () => void;\n\n setProviders: (response: IdentityTwoFactorResponse) => void;\n clearProviders: () => void;\n getProviders: () => Map;\n}\n","import { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { Verification } from \"../types/verification\";\n\nexport abstract class UserVerificationService {\n buildRequest: (\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) => Promise;\n verifyUser: (verification: Verification) => Promise;\n requestOTP: () => Promise;\n}\n","export abstract class UsernameGenerationService {\n generateUsername: (options: any) => Promise;\n generateWord: (options: any) => Promise;\n generateSubaddress: (options: any) => Promise;\n generateCatchall: (options: any) => Promise;\n generateForwarded: (options: any) => Promise;\n getOptions: () => Promise;\n saveOptions: (options: any) => Promise;\n}\n","export abstract class VaultTimeoutService {\n checkVaultTimeout: () => Promise;\n lock: (allowSoftLock?: boolean, userId?: string) => Promise;\n logOut: (userId?: string) => Promise;\n setVaultTimeoutOptions: (vaultTimeout: number, vaultTimeoutAction: string) => Promise;\n getVaultTimeout: () => Promise;\n isPinLockSet: () => Promise<[boolean, boolean]>;\n isBiometricLockSet: () => Promise;\n clear: (userId?: string) => Promise;\n}\n","export enum AuthenticationStatus {\n LoggedOut = 0,\n Locked = 1,\n Unlocked = 2,\n}\n","export enum AuthenticationType {\n Password = 0,\n Sso = 1,\n Api = 2,\n}\n","export enum CipherRepromptType {\n None = 0,\n Password = 1,\n}\n","export enum CipherType {\n Login = 1,\n SecureNote = 2,\n Card = 3,\n Identity = 4,\n}\n","export enum ClientType {\n Web = \"web\",\n Browser = \"browser\",\n Desktop = \"desktop\",\n Mobile = \"mobile\",\n Cli = \"cli\",\n DirectoryConnector = \"connector\",\n}\n","export enum DeviceType {\n Android = 0,\n iOS = 1,\n ChromeExtension = 2,\n FirefoxExtension = 3,\n OperaExtension = 4,\n EdgeExtension = 5,\n WindowsDesktop = 6,\n MacOsDesktop = 7,\n LinuxDesktop = 8,\n ChromeBrowser = 9,\n FirefoxBrowser = 10,\n OperaBrowser = 11,\n EdgeBrowser = 12,\n IEBrowser = 13,\n UnknownBrowser = 14,\n AndroidAmazon = 15,\n UWP = 16,\n SafariBrowser = 17,\n VivaldiBrowser = 18,\n VivaldiExtension = 19,\n SafariExtension = 20,\n}\n","export enum EmergencyAccessStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n RecoveryInitiated = 3,\n RecoveryApproved = 4,\n}\n","export enum EmergencyAccessType {\n View = 0,\n Takeover = 1,\n}\n","export enum EncryptionType {\n AesCbc256_B64 = 0,\n AesCbc128_HmacSha256_B64 = 1,\n AesCbc256_HmacSha256_B64 = 2,\n Rsa2048_OaepSha256_B64 = 3,\n Rsa2048_OaepSha1_B64 = 4,\n Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","export enum EventType {\n User_LoggedIn = 1000,\n User_ChangedPassword = 1001,\n User_Updated2fa = 1002,\n User_Disabled2fa = 1003,\n User_Recovered2fa = 1004,\n User_FailedLogIn = 1005,\n User_FailedLogIn2fa = 1006,\n User_ClientExportedVault = 1007,\n User_UpdatedTempPassword = 1008,\n User_MigratedKeyToKeyConnector = 1009,\n\n Cipher_Created = 1100,\n Cipher_Updated = 1101,\n Cipher_Deleted = 1102,\n Cipher_AttachmentCreated = 1103,\n Cipher_AttachmentDeleted = 1104,\n Cipher_Shared = 1105,\n Cipher_UpdatedCollections = 1106,\n Cipher_ClientViewed = 1107,\n Cipher_ClientToggledPasswordVisible = 1108,\n Cipher_ClientToggledHiddenFieldVisible = 1109,\n Cipher_ClientToggledCardCodeVisible = 1110,\n Cipher_ClientCopiedPassword = 1111,\n Cipher_ClientCopiedHiddenField = 1112,\n Cipher_ClientCopiedCardCode = 1113,\n Cipher_ClientAutofilled = 1114,\n Cipher_SoftDeleted = 1115,\n Cipher_Restored = 1116,\n Cipher_ClientToggledCardNumberVisible = 1117,\n\n Collection_Created = 1300,\n Collection_Updated = 1301,\n Collection_Deleted = 1302,\n\n Group_Created = 1400,\n Group_Updated = 1401,\n Group_Deleted = 1402,\n\n OrganizationUser_Invited = 1500,\n OrganizationUser_Confirmed = 1501,\n OrganizationUser_Updated = 1502,\n OrganizationUser_Removed = 1503,\n OrganizationUser_UpdatedGroups = 1504,\n OrganizationUser_UnlinkedSso = 1505,\n OrganizationUser_ResetPassword_Enroll = 1506,\n OrganizationUser_ResetPassword_Withdraw = 1507,\n OrganizationUser_AdminResetPassword = 1508,\n OrganizationUser_ResetSsoLink = 1509,\n OrganizationUser_FirstSsoLogin = 1510,\n\n Organization_Updated = 1600,\n Organization_PurgedVault = 1601,\n // Organization_ClientExportedVault = 1602,\n Organization_VaultAccessed = 1603,\n Organization_EnabledSso = 1604,\n Organization_DisabledSso = 1605,\n Organization_EnabledKeyConnector = 1606,\n Organization_DisabledKeyConnector = 1607,\n Organization_SponsorshipsSynced = 1608,\n\n Policy_Updated = 1700,\n\n ProviderUser_Invited = 1800,\n ProviderUser_Confirmed = 1801,\n ProviderUser_Updated = 1802,\n ProviderUser_Removed = 1803,\n\n ProviderOrganization_Created = 1900,\n ProviderOrganization_Added = 1901,\n ProviderOrganization_Removed = 1902,\n ProviderOrganization_VaultAccessed = 1903,\n}\n","export enum FieldType {\n Text = 0,\n Hidden = 1,\n Boolean = 2,\n Linked = 3,\n}\n","export enum FileUploadType {\n Direct = 0,\n Azure = 1,\n}\n","export enum HashPurpose {\n ServerAuthorization = 1,\n LocalAuthorization = 2,\n}\n","export enum HtmlStorageLocation {\n Local = \"local\",\n Memory = \"memory\",\n Session = \"session\",\n}\n","export interface ImportOption {\n id: string;\n name: string;\n}\n\nexport const featuredImportOptions = [\n { id: \"bitwardenjson\", name: \"Bitwarden (json)\" },\n { id: \"bitwardencsv\", name: \"Bitwarden (csv)\" },\n { id: \"chromecsv\", name: \"Chrome (csv)\" },\n { id: \"dashlanecsv\", name: \"Dashlane (csv)\" },\n { id: \"firefoxcsv\", name: \"Firefox (csv)\" },\n { id: \"keepass2xml\", name: \"KeePass 2 (xml)\" },\n { id: \"lastpasscsv\", name: \"LastPass (csv)\" },\n { id: \"safaricsv\", name: \"Safari and macOS (csv)\" },\n { id: \"1password1pux\", name: \"1Password (1pux)\" },\n] as const;\n\nexport const regularImportOptions = [\n { id: \"keepassxcsv\", name: \"KeePassX (csv)\" },\n { id: \"1password1pif\", name: \"1Password (1pif)\" },\n { id: \"1passwordwincsv\", name: \"1Password 6 and 7 Windows (csv)\" },\n { id: \"1passwordmaccsv\", name: \"1Password 6 and 7 Mac (csv)\" },\n { id: \"dashlanejson\", name: \"Dashlane (json)\" },\n { id: \"roboformcsv\", name: \"RoboForm (csv)\" },\n { id: \"keepercsv\", name: \"Keeper (csv)\" },\n // Temporarily remove this option for the Feb release\n // { id: \"keeperjson\", name: \"Keeper (json)\" },\n { id: \"enpasscsv\", name: \"Enpass (csv)\" },\n { id: \"enpassjson\", name: \"Enpass (json)\" },\n { id: \"safeincloudxml\", name: \"SafeInCloud (xml)\" },\n { id: \"pwsafexml\", name: \"Password Safe (xml)\" },\n { id: \"stickypasswordxml\", name: \"Sticky Password (xml)\" },\n { id: \"msecurecsv\", name: \"mSecure (csv)\" },\n { id: \"truekeycsv\", name: \"True Key (csv)\" },\n { id: \"passwordbossjson\", name: \"Password Boss (json)\" },\n { id: \"zohovaultcsv\", name: \"Zoho Vault (csv)\" },\n { id: \"splashidcsv\", name: \"SplashID (csv)\" },\n { id: \"passworddragonxml\", name: \"Password Dragon (xml)\" },\n { id: \"padlockcsv\", name: \"Padlock (csv)\" },\n { id: \"passboltcsv\", name: \"Passbolt (csv)\" },\n { id: \"clipperzhtml\", name: \"Clipperz (html)\" },\n { id: \"aviracsv\", name: \"Avira (csv)\" },\n { id: \"saferpasscsv\", name: \"SaferPass (csv)\" },\n { id: \"upmcsv\", name: \"Universal Password Manager (csv)\" },\n { id: \"ascendocsv\", name: \"Ascendo DataVault (csv)\" },\n { id: \"meldiumcsv\", name: \"Meldium (csv)\" },\n { id: \"passkeepcsv\", name: \"PassKeep (csv)\" },\n { id: \"operacsv\", name: \"Opera (csv)\" },\n { id: \"vivaldicsv\", name: \"Vivaldi (csv)\" },\n { id: \"gnomejson\", name: \"GNOME Passwords and Keys/Seahorse (json)\" },\n { id: \"blurcsv\", name: \"Blur (csv)\" },\n { id: \"passwordagentcsv\", name: \"Password Agent (csv)\" },\n { id: \"passpackcsv\", name: \"Passpack (csv)\" },\n { id: \"passmanjson\", name: \"Passman (json)\" },\n { id: \"avastcsv\", name: \"Avast Passwords (csv)\" },\n { id: \"avastjson\", name: \"Avast Passwords (json)\" },\n { id: \"fsecurefsk\", name: \"F-Secure KEY (fsk)\" },\n { id: \"kasperskytxt\", name: \"Kaspersky Password Manager (txt)\" },\n { id: \"remembearcsv\", name: \"RememBear (csv)\" },\n { id: \"passwordwallettxt\", name: \"PasswordWallet (txt)\" },\n { id: \"mykicsv\", name: \"Myki (csv)\" },\n { id: \"securesafecsv\", name: \"SecureSafe (csv)\" },\n { id: \"logmeoncecsv\", name: \"LogMeOnce (csv)\" },\n { id: \"blackberrycsv\", name: \"BlackBerry Password Keeper (csv)\" },\n { id: \"buttercupcsv\", name: \"Buttercup (csv)\" },\n { id: \"codebookcsv\", name: \"Codebook (csv)\" },\n { id: \"encryptrcsv\", name: \"Encryptr (csv)\" },\n { id: \"yoticsv\", name: \"Yoti (csv)\" },\n { id: \"nordpasscsv\", name: \"Nordpass (csv)\" },\n] as const;\n\nexport type ImportType =\n | typeof featuredImportOptions[number][\"id\"]\n | typeof regularImportOptions[number][\"id\"];\n","export enum KdfType {\n PBKDF2_SHA256 = 0,\n}\n\nexport const DEFAULT_KDF_TYPE = KdfType.PBKDF2_SHA256;\nexport const DEFAULT_KDF_ITERATIONS = 100000;\nexport const SEND_KDF_ITERATIONS = 100000;\n","export enum KeySuffixOptions {\n Auto = \"auto\",\n Biometric = \"biometric\",\n}\n","export type LinkedIdType = LoginLinkedId | CardLinkedId | IdentityLinkedId;\n\n// LoginView\nexport enum LoginLinkedId {\n Username = 100,\n Password = 101,\n}\n\n// CardView\nexport enum CardLinkedId {\n CardholderName = 300,\n ExpMonth = 301,\n ExpYear = 302,\n Code = 303,\n Brand = 304,\n Number = 305,\n}\n\n// IdentityView\nexport enum IdentityLinkedId {\n Title = 400,\n MiddleName = 401,\n Address1 = 402,\n Address2 = 403,\n Address3 = 404,\n City = 405,\n State = 406,\n PostalCode = 407,\n Country = 408,\n Company = 409,\n Email = 410,\n Phone = 411,\n Ssn = 412,\n Username = 413,\n PassportNumber = 414,\n LicenseNumber = 415,\n FirstName = 416,\n LastName = 417,\n FullName = 418,\n}\n","export enum LogLevelType {\n Debug,\n Info,\n Warning,\n Error,\n}\n","export enum NotificationType {\n SyncCipherUpdate = 0,\n SyncCipherCreate = 1,\n SyncLoginDelete = 2,\n SyncFolderDelete = 3,\n SyncCiphers = 4,\n\n SyncVault = 5,\n SyncOrgKeys = 6,\n SyncFolderCreate = 7,\n SyncFolderUpdate = 8,\n SyncCipherDelete = 9,\n SyncSettings = 10,\n\n LogOut = 11,\n\n SyncSendCreate = 12,\n SyncSendUpdate = 13,\n SyncSendDelete = 14,\n}\n","export enum OrganizationApiKeyType {\n Default = 0,\n BillingSync = 1,\n}\n","export enum OrganizationConnectionType {\n CloudBillingSync = 1,\n}\n","export enum OrganizationUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n}\n","export enum OrganizationUserType {\n Owner = 0,\n Admin = 1,\n User = 2,\n Manager = 3,\n Custom = 4,\n}\n","export enum PaymentMethodType {\n Card = 0,\n BankAccount = 1,\n PayPal = 2,\n BitPay = 3,\n Credit = 4,\n WireTransfer = 5,\n AppleInApp = 6,\n GoogleInApp = 7,\n Check = 8,\n}\n","export enum Permissions {\n AccessEventLogs,\n AccessImportExport,\n AccessReports,\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n ManageAllCollections,\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n ManageAssignedCollections,\n ManageGroups,\n ManageOrganization,\n ManagePolicies,\n ManageProvider,\n ManageUsers,\n ManageUsersPassword,\n CreateNewCollections,\n EditAnyCollection,\n DeleteAnyCollection,\n EditAssignedCollections,\n DeleteAssignedCollections,\n ManageSso,\n ManageBilling,\n}\n","export enum PlanSponsorshipType {\n FamiliesForEnterprise = 0,\n}\n","export enum PlanType {\n Free = 0,\n FamiliesAnnually2019 = 1,\n TeamsMonthly2019 = 2,\n TeamsAnnually2019 = 3,\n EnterpriseMonthly2019 = 4,\n EnterpriseAnnually2019 = 5,\n Custom = 6,\n FamiliesAnnually = 7,\n TeamsMonthly = 8,\n TeamsAnnually = 9,\n EnterpriseMonthly = 10,\n EnterpriseAnnually = 11,\n}\n","export enum PolicyType {\n TwoFactorAuthentication = 0, // Requires users to have 2fa enabled\n MasterPassword = 1, // Sets minimum requirements for master password complexity\n PasswordGenerator = 2, // Sets minimum requirements/default type for generated passwords/passphrases\n SingleOrg = 3, // Allows users to only be apart of one organization\n RequireSso = 4, // Requires users to authenticate with SSO\n PersonalOwnership = 5, // Disables personal vault ownership for adding/cloning items\n DisableSend = 6, // Disables the ability to create and edit Bitwarden Sends\n SendOptions = 7, // Sets restrictions or defaults for Bitwarden Sends\n ResetPassword = 8, // Allows orgs to use reset password : also can enable auto-enrollment during invite flow\n MaximumVaultTimeout = 9, // Sets the maximum allowed vault timeout\n DisablePersonalVaultExport = 10, // Disable personal vault export\n}\n","export enum ProductType {\n Free = 0,\n Families = 1,\n Teams = 2,\n Enterprise = 3,\n}\n","export enum ProviderUserStatusType {\n Invited = 0,\n Accepted = 1,\n Confirmed = 2,\n}\n","export enum ProviderUserType {\n ProviderAdmin = 0,\n ServiceUser = 1,\n}\n","export enum SecureNoteType {\n Generic = 0,\n}\n","export enum SendType {\n Text = 0,\n File = 1,\n}\n","export enum SsoType {\n None = 0,\n OpenIdConnect = 1,\n Saml2 = 2,\n}\n\nexport enum OpenIdConnectRedirectBehavior {\n RedirectGet = 0,\n FormPost = 1,\n}\n\nexport enum Saml2BindingType {\n HttpRedirect = 1,\n HttpPost = 2,\n}\n\nexport enum Saml2NameIdFormat {\n NotConfigured = 0,\n Unspecified = 1,\n EmailAddress = 2,\n X509SubjectName = 3,\n WindowsDomainQualifiedName = 4,\n KerberosPrincipalName = 5,\n EntityIdentifier = 6,\n Persistent = 7,\n Transient = 8,\n}\n\nexport enum Saml2SigningBehavior {\n IfIdpWantAuthnRequestsSigned = 0,\n Always = 1,\n Never = 3,\n}\n","export enum StateVersion {\n One = 1, // Original flat key/value pair store\n Two = 2, // Move to a typed State object\n Three = 3, // Fix migration of users' premium status\n Four = 4, // Fix 'Never Lock' option by removing stale data\n Latest = Four,\n}\n","export enum StorageLocation {\n Both = \"both\",\n Disk = \"disk\",\n Memory = \"memory\",\n}\n","export enum ThemeType {\n System = \"system\",\n Light = \"light\",\n Dark = \"dark\",\n Nord = \"nord\",\n SolarizedDark = \"solarizedDark\",\n}\n","export enum TransactionType {\n Charge = 0,\n Credit = 1,\n PromotionalCredit = 2,\n ReferralCredit = 3,\n Refund = 4,\n}\n","export enum TwoFactorProviderType {\n Authenticator = 0,\n Email = 1,\n Duo = 2,\n Yubikey = 3,\n U2f = 4,\n Remember = 5,\n OrganizationDuo = 6,\n WebAuthn = 7,\n}\n","export enum UriMatchType {\n Domain = 0,\n Host = 1,\n StartsWith = 2,\n Exact = 3,\n RegularExpression = 4,\n Never = 5,\n}\n","export enum VerificationType {\n MasterPassword = 0,\n OTP = 1,\n}\n","import { Account } from \"../models/domain/account\";\n\nexport class AccountFactory {\n private accountConstructor: new (init: Partial) => T;\n\n constructor(accountConstructor: new (init: Partial) => T) {\n this.accountConstructor = accountConstructor;\n }\n\n create(args: Partial) {\n return new this.accountConstructor(args);\n }\n}\n","import { GlobalState } from \"../models/domain/globalState\";\n\nexport class GlobalStateFactory {\n private globalStateConstructor: new (init: Partial) => T;\n\n constructor(globalStateConstructor: new (init: Partial) => T) {\n this.globalStateConstructor = globalStateConstructor;\n }\n\n create(args?: Partial) {\n return new this.globalStateConstructor(args);\n }\n}\n","import { Account } from \"../models/domain/account\";\nimport { GlobalState } from \"../models/domain/globalState\";\n\nimport { AccountFactory } from \"./accountFactory\";\nimport { GlobalStateFactory } from \"./globalStateFactory\";\n\nexport class StateFactory<\n TGlobal extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n private globalStateFactory: GlobalStateFactory;\n private accountFactory: AccountFactory;\n\n constructor(\n globalStateConstructor: new (init: Partial) => TGlobal,\n accountConstructor: new (init: Partial) => TAccount\n ) {\n this.globalStateFactory = new GlobalStateFactory(globalStateConstructor);\n this.accountFactory = new AccountFactory(accountConstructor);\n }\n\n createGlobal(args: Partial): TGlobal {\n return this.globalStateFactory.create(args);\n }\n\n createAccount(args: Partial): TAccount {\n return this.accountFactory.create(args);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AscendoCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 2) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n\n if (value.length > 2 && value.length % 2 === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const val: string = value[i + 2];\n const field: string = value[i + 1];\n if (this.isNullOrWhitespace(val) || this.isNullOrWhitespace(field)) {\n continue;\n }\n\n const fieldLower = field.toLowerCase();\n if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.password = this.getValueOrDefault(val);\n } else if (\n cipher.login.username == null &&\n this.usernameFieldNames.indexOf(fieldLower) > -1\n ) {\n cipher.login.username = this.getValueOrDefault(val);\n } else if (\n (cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(fieldLower) > -1\n ) {\n cipher.login.uris = this.makeUriArray(val);\n } else {\n this.processKvp(cipher, field, val);\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AvastCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.login.uris = this.makeUriArray(value.web);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.login);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AvastJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n if (results.logins != null) {\n results.logins.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.pwd);\n cipher.login.username = this.getValueOrDefault(value.loginName);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.notes != null) {\n results.notes.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = this.getValueOrDefault(value.label);\n cipher.notes = this.getValueOrDefault(value.text);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (results.cards != null) {\n results.cards.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(value.custName);\n cipher.notes = this.getValueOrDefault(value.note);\n cipher.card.cardholderName = this.getValueOrDefault(value.holderName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (value.expirationDate != null) {\n if (value.expirationDate.month != null) {\n cipher.card.expMonth = value.expirationDate.month + \"\";\n }\n if (value.expirationDate.year != null) {\n cipher.card.expYear = value.expirationDate.year + \"\";\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class AviraCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(\n value.name,\n this.getValueOrDefault(this.nameFromUrl(value.website), \"--\")\n );\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (\n this.isNullOrWhitespace(value.username) &&\n !this.isNullOrWhitespace(value.secondary_username)\n ) {\n cipher.login.username = value.secondary_username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.notes = this.getValueOrDefault(value.secondary_username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import * as papa from \"papaparse\";\n\nimport { LogService } from \"../abstractions/log.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { Utils } from \"../misc/utils\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { LoginUriView } from \"../models/view/loginUriView\";\nimport { LoginView } from \"../models/view/loginView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\nimport { ConsoleLogService } from \"../services/consoleLog.service\";\n\nexport abstract class BaseImporter {\n organizationId: string = null;\n\n protected logService: LogService = new ConsoleLogService(false);\n\n protected newLineRegex = /(?:\\r\\n|\\r|\\n)/;\n\n protected passwordFieldNames = [\n \"password\",\n \"pass word\",\n \"passphrase\",\n \"pass phrase\",\n \"pass\",\n \"code\",\n \"code word\",\n \"codeword\",\n \"secret\",\n \"secret word\",\n \"personpwd\",\n \"key\",\n \"keyword\",\n \"key word\",\n \"keyphrase\",\n \"key phrase\",\n \"form_pw\",\n \"wppassword\",\n \"pin\",\n \"pwd\",\n \"pw\",\n \"pword\",\n \"passwd\",\n \"p\",\n \"serial\",\n \"serial#\",\n \"license key\",\n \"reg #\",\n\n // Non-English names\n \"passwort\",\n ];\n\n protected usernameFieldNames = [\n \"user\",\n \"name\",\n \"user name\",\n \"username\",\n \"login name\",\n \"email\",\n \"e-mail\",\n \"id\",\n \"userid\",\n \"user id\",\n \"login\",\n \"form_loginname\",\n \"wpname\",\n \"mail\",\n \"loginid\",\n \"login id\",\n \"log\",\n \"personlogin\",\n \"first name\",\n \"last name\",\n \"card#\",\n \"account #\",\n \"member\",\n \"member #\",\n\n // Non-English names\n \"nom\",\n \"benutzername\",\n ];\n\n protected notesFieldNames = [\n \"note\",\n \"notes\",\n \"comment\",\n \"comments\",\n \"memo\",\n \"description\",\n \"free form\",\n \"freeform\",\n \"free text\",\n \"freetext\",\n \"free\",\n\n // Non-English names\n \"kommentar\",\n ];\n\n protected uriFieldNames: string[] = [\n \"url\",\n \"hyper link\",\n \"hyperlink\",\n \"link\",\n \"host\",\n \"hostname\",\n \"host name\",\n \"server\",\n \"address\",\n \"hyper ref\",\n \"href\",\n \"web\",\n \"website\",\n \"web site\",\n \"site\",\n \"web-site\",\n \"uri\",\n\n // Non-English names\n \"ort\",\n \"adresse\",\n ];\n\n protected parseCsvOptions = {\n encoding: \"UTF-8\",\n skipEmptyLines: false,\n };\n\n protected get organization() {\n return this.organizationId != null;\n }\n\n protected parseXml(data: string): Document {\n const parser = new DOMParser();\n const doc = parser.parseFromString(data, \"application/xml\");\n return doc != null && doc.querySelector(\"parsererror\") == null ? doc : null;\n }\n\n protected parseCsv(data: string, header: boolean, options: any = {}): any[] {\n const parseOptions: papa.ParseConfig = Object.assign(\n { header: header },\n this.parseCsvOptions,\n options\n );\n data = this.splitNewLine(data).join(\"\\n\").trim();\n const result = papa.parse(data, parseOptions);\n if (result.errors != null && result.errors.length > 0) {\n result.errors.forEach((e) => {\n if (e.row != null) {\n this.logService.warning(\"Error parsing row \" + e.row + \": \" + e.message);\n }\n });\n }\n return result.data && result.data.length > 0 ? result.data : null;\n }\n\n protected parseSingleRowCsv(rowData: string) {\n if (this.isNullOrWhitespace(rowData)) {\n return null;\n }\n const parsedRow = this.parseCsv(rowData, false);\n if (parsedRow != null && parsedRow.length > 0 && parsedRow[0].length > 0) {\n return parsedRow[0];\n }\n return null;\n }\n\n protected makeUriArray(uri: string | string[]): LoginUriView[] {\n if (uri == null) {\n return null;\n }\n\n if (typeof uri === \"string\") {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(uri);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return null;\n }\n loginUri.match = null;\n return [loginUri];\n }\n\n if (uri.length > 0) {\n const returnArr: LoginUriView[] = [];\n uri.forEach((u) => {\n const loginUri = new LoginUriView();\n loginUri.uri = this.fixUri(u);\n if (this.isNullOrWhitespace(loginUri.uri)) {\n return;\n }\n loginUri.match = null;\n returnArr.push(loginUri);\n });\n return returnArr.length === 0 ? null : returnArr;\n }\n\n return null;\n }\n\n protected fixUri(uri: string) {\n if (uri == null) {\n return null;\n }\n uri = uri.trim();\n if (uri.indexOf(\"://\") === -1 && uri.indexOf(\".\") >= 0) {\n uri = \"http://\" + uri;\n }\n if (uri.length > 1000) {\n return uri.substring(0, 1000);\n }\n return uri;\n }\n\n protected nameFromUrl(url: string) {\n const hostname = Utils.getHostname(url);\n if (this.isNullOrWhitespace(hostname)) {\n return null;\n }\n return hostname.startsWith(\"www.\") ? hostname.replace(\"www.\", \"\") : hostname;\n }\n\n protected isNullOrWhitespace(str: string): boolean {\n return Utils.isNullOrWhitespace(str);\n }\n\n protected getValueOrDefault(str: string, defaultValue: string = null): string {\n if (this.isNullOrWhitespace(str)) {\n return defaultValue;\n }\n return str;\n }\n\n protected splitNewLine(str: string): string[] {\n return str.split(this.newLineRegex);\n }\n\n // ref https://stackoverflow.com/a/5911300\n protected getCardBrand(cardNum: string) {\n if (this.isNullOrWhitespace(cardNum)) {\n return null;\n }\n\n // Visa\n let re = new RegExp(\"^4\");\n if (cardNum.match(re) != null) {\n return \"Visa\";\n }\n\n // Mastercard\n // Updated for Mastercard 2017 BINs expansion\n if (\n /^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(\n cardNum\n )\n ) {\n return \"Mastercard\";\n }\n\n // AMEX\n re = new RegExp(\"^3[47]\");\n if (cardNum.match(re) != null) {\n return \"Amex\";\n }\n\n // Discover\n re = new RegExp(\n \"^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)\"\n );\n if (cardNum.match(re) != null) {\n return \"Discover\";\n }\n\n // Diners\n re = new RegExp(\"^36\");\n if (cardNum.match(re) != null) {\n return \"Diners Club\";\n }\n\n // Diners - Carte Blanche\n re = new RegExp(\"^30[0-5]\");\n if (cardNum.match(re) != null) {\n return \"Diners Club\";\n }\n\n // JCB\n re = new RegExp(\"^35(2[89]|[3-8][0-9])\");\n if (cardNum.match(re) != null) {\n return \"JCB\";\n }\n\n // Visa Electron\n re = new RegExp(\"^(4026|417500|4508|4844|491(3|7))\");\n if (cardNum.match(re) != null) {\n return \"Visa\";\n }\n\n return null;\n }\n\n protected setCardExpiration(cipher: CipherView, expiration: string): boolean {\n if (!this.isNullOrWhitespace(expiration)) {\n expiration = expiration.replace(/\\s/g, \"\");\n const parts = expiration.split(\"/\");\n if (parts.length === 2) {\n let month: string = null;\n let year: string = null;\n if (parts[0].length === 1 || parts[0].length === 2) {\n month = parts[0];\n if (month.length === 2 && month[0] === \"0\") {\n month = month.substr(1, 1);\n }\n }\n if (parts[1].length === 2 || parts[1].length === 4) {\n year = month.length === 2 ? \"20\" + parts[1] : parts[1];\n }\n if (month != null && year != null) {\n cipher.card.expMonth = month;\n cipher.card.expYear = year;\n return true;\n }\n }\n }\n return false;\n }\n\n protected moveFoldersToCollections(result: ImportResult) {\n result.folderRelationships.forEach((r) => result.collectionRelationships.push(r));\n result.collections = result.folders.map((f) => {\n const collection = new CollectionView();\n collection.name = f.name;\n return collection;\n });\n result.folderRelationships = [];\n result.folders = [];\n }\n\n protected querySelectorDirectChild(parentEl: Element, query: string) {\n const els = this.querySelectorAllDirectChild(parentEl, query);\n return els.length === 0 ? null : els[0];\n }\n\n protected querySelectorAllDirectChild(parentEl: Element, query: string) {\n return Array.from(parentEl.querySelectorAll(query)).filter((el) => el.parentNode === parentEl);\n }\n\n protected initLoginCipher() {\n const cipher = new CipherView();\n cipher.favorite = false;\n cipher.notes = \"\";\n cipher.fields = [];\n cipher.login = new LoginView();\n cipher.type = CipherType.Login;\n return cipher;\n }\n\n protected cleanupCipher(cipher: CipherView) {\n if (cipher == null) {\n return;\n }\n if (cipher.type !== CipherType.Login) {\n cipher.login = null;\n }\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = \"--\";\n }\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = null;\n } else {\n cipher.notes = cipher.notes.trim();\n }\n if (cipher.fields != null && cipher.fields.length === 0) {\n cipher.fields = null;\n }\n }\n\n protected processKvp(\n cipher: CipherView,\n key: string,\n value: string,\n type: FieldType = FieldType.Text\n ) {\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n if (this.isNullOrWhitespace(key)) {\n key = \"\";\n }\n if (value.length > 200 || value.trim().search(this.newLineRegex) > -1) {\n if (cipher.notes == null) {\n cipher.notes = \"\";\n }\n cipher.notes += key + \": \" + this.splitNewLine(value).join(\"\\n\") + \"\\n\";\n } else {\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n const field = new FieldView();\n field.type = type;\n field.name = key;\n field.value = value;\n cipher.fields.push(field);\n }\n }\n\n protected processFolder(result: ImportResult, folderName: string) {\n let folderIndex = result.folders.length;\n const hasFolder = !this.isNullOrWhitespace(folderName);\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === folderName) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n if (addFolder) {\n const f = new FolderView();\n f.name = folderName;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([result.ciphers.length, folderIndex]);\n }\n }\n\n protected convertToNoteIfNeeded(cipher: CipherView) {\n if (\n cipher.type === CipherType.Login &&\n this.isNullOrWhitespace(cipher.login.username) &&\n this.isNullOrWhitespace(cipher.login.password) &&\n (cipher.login.uris == null || cipher.login.uris.length === 0)\n ) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n }\n\n protected processFullName(cipher: CipherView, fullName: string) {\n if (this.isNullOrWhitespace(fullName)) {\n return;\n }\n\n const nameParts = fullName.split(\" \");\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length >= 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = nameParts.slice(2, nameParts.length).join(\" \");\n }\n }\n}\n","import { CipherRepromptType } from \"../enums/cipherRepromptType\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { LoginView } from \"../models/view/loginView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BitwardenCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (this.organization && !this.isNullOrWhitespace(value.collections)) {\n const collections = (value.collections as string).split(\",\");\n collections.forEach((col) => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === col) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = col;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization) {\n this.processFolder(result, value.folder);\n }\n\n const cipher = new CipherView();\n cipher.favorite =\n !this.organization && this.getValueOrDefault(value.favorite, \"0\") !== \"0\" ? true : false;\n cipher.type = CipherType.Login;\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n try {\n cipher.reprompt = parseInt(\n this.getValueOrDefault(value.reprompt, CipherRepromptType.None.toString()),\n 10\n );\n } catch (e) {\n // eslint-disable-next-line\n console.error(\"Unable to parse reprompt value\", e);\n cipher.reprompt = CipherRepromptType.None;\n }\n\n if (!this.isNullOrWhitespace(value.fields)) {\n const fields = this.splitNewLine(value.fields);\n for (let i = 0; i < fields.length; i++) {\n if (this.isNullOrWhitespace(fields[i])) {\n continue;\n }\n\n const delimPosition = fields[i].lastIndexOf(\": \");\n if (delimPosition === -1) {\n continue;\n }\n\n if (cipher.fields == null) {\n cipher.fields = [];\n }\n\n const field = new FieldView();\n field.name = fields[i].substr(0, delimPosition);\n field.value = null;\n field.type = FieldType.Text;\n if (fields[i].length > delimPosition + 2) {\n field.value = fields[i].substr(delimPosition + 2);\n }\n cipher.fields.push(field);\n }\n }\n\n const valueType = value.type != null ? value.type.toLowerCase() : null;\n switch (valueType) {\n case \"note\":\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default: {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.totp = this.getValueOrDefault(value.login_totp || value.totp);\n cipher.login.username = this.getValueOrDefault(value.login_username || value.username);\n cipher.login.password = this.getValueOrDefault(value.login_password || value.password);\n const uris = this.parseSingleRowCsv(value.login_uri || value.uri);\n cipher.login.uris = this.makeUriArray(uris);\n break;\n }\n }\n\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { EncString } from \"../models/domain/encString\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherWithIdExport } from \"../models/export/cipherWithIdsExport\";\nimport { CollectionWithIdExport } from \"../models/export/collectionWithIdExport\";\nimport { FolderWithIdExport } from \"../models/export/folderWithIdExport\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BitwardenJsonImporter extends BaseImporter implements Importer {\n private results: any;\n private result: ImportResult;\n\n constructor(protected cryptoService: CryptoService, protected i18nService: I18nService) {\n super();\n }\n\n async parse(data: string): Promise {\n this.result = new ImportResult();\n this.results = JSON.parse(data);\n if (this.results == null || this.results.items == null) {\n if (this.results?.passwordProtected) {\n this.result.success = false;\n this.result.missingPassword = true;\n this.result.errorMessage = this.i18nService.t(\"importPasswordRequired\");\n return this.result;\n }\n\n this.result.success = false;\n return this.result;\n }\n\n if (this.results.encrypted) {\n await this.parseEncrypted();\n } else {\n this.parseDecrypted();\n }\n\n return this.result;\n }\n\n private async parseEncrypted() {\n if (this.results.encKeyValidation_DO_NOT_EDIT != null) {\n const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n const encKeyValidation = new EncString(this.results.encKeyValidation_DO_NOT_EDIT);\n const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8(\n encKeyValidation,\n orgKey\n );\n if (encKeyValidationDecrypt === null) {\n this.result.success = false;\n this.result.errorMessage = this.i18nService.t(\"importEncKeyError\");\n return;\n }\n }\n\n const groupingsMap = new Map();\n\n if (this.organization && this.results.collections != null) {\n for (const c of this.results.collections as CollectionWithIdExport[]) {\n const collection = CollectionWithIdExport.toDomain(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = this.organizationId;\n const view = await collection.decrypt();\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(view);\n }\n }\n } else if (!this.organization && this.results.folders != null) {\n for (const f of this.results.folders as FolderWithIdExport[]) {\n const folder = FolderWithIdExport.toDomain(f);\n if (folder != null) {\n folder.id = null;\n const view = await folder.decrypt();\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(view);\n }\n }\n }\n\n for (const c of this.results.items as CipherWithIdExport[]) {\n const cipher = CipherWithIdExport.toDomain(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = this.organizationId;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(c.folderId),\n ]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach((cId) => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(cId),\n ]);\n }\n });\n }\n\n const view = await cipher.decrypt();\n this.cleanupCipher(view);\n this.result.ciphers.push(view);\n }\n\n this.result.success = true;\n }\n\n private parseDecrypted() {\n const groupingsMap = new Map();\n if (this.organization && this.results.collections != null) {\n this.results.collections.forEach((c: CollectionWithIdExport) => {\n const collection = CollectionWithIdExport.toView(c);\n if (collection != null) {\n collection.id = null;\n collection.organizationId = null;\n groupingsMap.set(c.id, this.result.collections.length);\n this.result.collections.push(collection);\n }\n });\n } else if (!this.organization && this.results.folders != null) {\n this.results.folders.forEach((f: FolderWithIdExport) => {\n const folder = FolderWithIdExport.toView(f);\n if (folder != null) {\n folder.id = null;\n groupingsMap.set(f.id, this.result.folders.length);\n this.result.folders.push(folder);\n }\n });\n }\n\n this.results.items.forEach((c: CipherWithIdExport) => {\n const cipher = CipherWithIdExport.toView(c);\n // reset ids incase they were set for some reason\n cipher.id = null;\n cipher.folderId = null;\n cipher.organizationId = null;\n cipher.collectionIds = null;\n\n // make sure password history is limited\n if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n }\n\n if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n this.result.folderRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(c.folderId),\n ]);\n } else if (this.organization && c.collectionIds != null) {\n c.collectionIds.forEach((cId) => {\n if (groupingsMap.has(cId)) {\n this.result.collectionRelationships.push([\n this.result.ciphers.length,\n groupingsMap.get(cId),\n ]);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { EncString } from \"../models/domain/encString\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nimport { BitwardenJsonImporter } from \"./bitwardenJsonImporter\";\nimport { Importer } from \"./importer\";\n\ninterface BitwardenPasswordProtectedFileFormat {\n encrypted: boolean;\n passwordProtected: boolean;\n salt: string;\n kdfIterations: number;\n kdfType: number;\n encKeyValidation_DO_NOT_EDIT: string;\n data: string;\n}\n\nexport class BitwardenPasswordProtectedImporter extends BitwardenJsonImporter implements Importer {\n private key: SymmetricCryptoKey;\n\n constructor(cryptoService: CryptoService, i18nService: I18nService, private password: string) {\n super(cryptoService, i18nService);\n }\n\n async parse(data: string): Promise {\n const result = new ImportResult();\n const parsedData = JSON.parse(data);\n if (this.cannotParseFile(parsedData)) {\n result.success = false;\n return result;\n }\n\n if (!(await this.checkPassword(parsedData))) {\n result.success = false;\n result.errorMessage = this.i18nService.t(\"importEncKeyError\");\n return result;\n }\n\n const encData = new EncString(parsedData.data);\n const clearTextData = await this.cryptoService.decryptToUtf8(encData, this.key);\n return await super.parse(clearTextData);\n }\n\n private async checkPassword(jdoc: BitwardenPasswordProtectedFileFormat): Promise {\n this.key = await this.cryptoService.makePinKey(\n this.password,\n jdoc.salt,\n KdfType.PBKDF2_SHA256,\n jdoc.kdfIterations\n );\n\n const encKeyValidation = new EncString(jdoc.encKeyValidation_DO_NOT_EDIT);\n\n const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8(\n encKeyValidation,\n this.key\n );\n if (encKeyValidationDecrypt === null) {\n return false;\n }\n return true;\n }\n\n private cannotParseFile(jdoc: BitwardenPasswordProtectedFileFormat): boolean {\n return (\n !jdoc ||\n !jdoc.encrypted ||\n !jdoc.passwordProtected ||\n !jdoc.salt ||\n !jdoc.kdfIterations ||\n typeof jdoc.kdfIterations !== \"number\" ||\n jdoc.kdfType == null ||\n KdfType[jdoc.kdfType] == null ||\n !jdoc.encKeyValidation_DO_NOT_EDIT ||\n !jdoc.data\n );\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BlackBerryCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.grouping === \"list\") {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.favorite = value.fav === \"1\";\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.extra);\n if (value.grouping !== \"note\") {\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class BlurCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.label === \"null\") {\n value.label = null;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(\n value.label,\n this.getValueOrDefault(this.nameFromUrl(value.domain), \"--\")\n );\n cipher.login.uris = this.makeUriArray(value.domain);\n cipher.login.password = this.getValueOrDefault(value.password);\n\n if (this.isNullOrWhitespace(value.email) && !this.isNullOrWhitespace(value.username)) {\n cipher.login.username = value.username;\n } else {\n cipher.login.username = this.getValueOrDefault(value.email);\n cipher.notes = this.getValueOrDefault(value.username);\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst OfficialProps = [\"!group_id\", \"!group_name\", \"title\", \"username\", \"password\", \"URL\", \"id\"];\n\nexport class ButtercupCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValueOrDefault(value[\"!group_name\"]));\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.title, \"--\");\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n let processingCustomFields = false;\n for (const prop in value) {\n // eslint-disable-next-line\n if (value.hasOwnProperty(prop)) {\n if (!processingCustomFields && OfficialProps.indexOf(prop) === -1) {\n processingCustomFields = true;\n }\n if (processingCustomFields) {\n this.processKvp(cipher, prop, value[prop]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class ChromeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class ClipperzHtmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const textarea = doc.querySelector(\"textarea\");\n if (textarea == null || this.isNullOrWhitespace(textarea.textContent)) {\n result.errorMessage = \"Missing textarea.\";\n result.success = false;\n return Promise.resolve(result);\n }\n\n const entries = JSON.parse(textarea.textContent);\n entries.forEach((entry: any) => {\n const cipher = this.initLoginCipher();\n if (!this.isNullOrWhitespace(entry.label)) {\n cipher.name = entry.label.split(\" \")[0];\n }\n if (entry.data != null && !this.isNullOrWhitespace(entry.data.notes)) {\n cipher.notes = entry.data.notes.split(\"\\\\n\").join(\"\\n\");\n }\n\n if (entry.currentVersion != null && entry.currentVersion.fields != null) {\n for (const property in entry.currentVersion.fields) {\n // eslint-disable-next-line\n if (!entry.currentVersion.fields.hasOwnProperty(property)) {\n continue;\n }\n\n const field = entry.currentVersion.fields[property];\n const actionType = field.actionType != null ? field.actionType.toLowerCase() : null;\n switch (actionType) {\n case \"password\":\n cipher.login.password = this.getValueOrDefault(field.value);\n break;\n case \"email\":\n case \"username\":\n case \"user\":\n case \"name\":\n cipher.login.username = this.getValueOrDefault(field.value);\n break;\n case \"url\":\n cipher.login.uris = this.makeUriArray(field.value);\n break;\n default: {\n const labelLower = field.label != null ? field.label.toLowerCase() : null;\n if (\n cipher.login.password == null &&\n this.passwordFieldNames.indexOf(labelLower) > -1\n ) {\n cipher.login.password = this.getValueOrDefault(field.value);\n } else if (\n cipher.login.username == null &&\n this.usernameFieldNames.indexOf(labelLower) > -1\n ) {\n cipher.login.username = this.getValueOrDefault(field.value);\n } else if (\n (cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(labelLower) > -1\n ) {\n cipher.login.uris = this.makeUriArray(field.value);\n } else {\n this.processKvp(cipher, field.label, field.value);\n }\n break;\n }\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class CodebookCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValueOrDefault(value.Category));\n\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite) === \"True\";\n cipher.name = this.getValueOrDefault(value.Entry, \"--\");\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.login.username = this.getValueOrDefault(value.Username, value.Email);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.totp = this.getValueOrDefault(value.TOTP);\n cipher.login.uris = this.makeUriArray(value.Website);\n\n if (!this.isNullOrWhitespace(value.Username)) {\n this.processKvp(cipher, \"Email\", value.Email);\n }\n this.processKvp(cipher, \"Phone\", value.Phone);\n this.processKvp(cipher, \"PIN\", value.PIN);\n this.processKvp(cipher, \"Account\", value.Account);\n this.processKvp(cipher, \"Date\", value.Date);\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { LoginView } from \"../../models/view/loginView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nimport {\n CredentialsRecord,\n IdRecord,\n PaymentsRecord,\n PersonalInformationRecord,\n SecureNoteRecord,\n} from \"./types/dashlaneCsvTypes\";\n\nconst _mappedCredentialsColums = new Set([\n \"title\",\n \"note\",\n \"username\",\n \"password\",\n \"url\",\n \"otpSecret\",\n \"category\",\n]);\n\nconst _mappedPersonalInfoAsIdentiyColumns = new Set([\n \"type\",\n \"title\",\n \"first_name\",\n \"middle_name\",\n \"last_name\",\n \"login\",\n \"email\",\n \"phone_number\",\n \"address\",\n \"country\",\n \"state\",\n \"city\",\n \"zip\",\n // Skip item_name as we already have set a combined name\n \"item_name\",\n]);\n\nconst _mappedSecureNoteColumns = new Set([\"title\", \"note\"]);\n\nexport class DashlaneCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n if (results[0].type != null && results[0].title != null) {\n const personalRecords = results as PersonalInformationRecord[];\n\n // If personalRecords has only one \"name\" then create an Identity-Cipher\n if (personalRecords.filter((x) => x.type === \"name\").length === 1) {\n const cipher = this.initLoginCipher();\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n results.forEach((row) => {\n this.parsePersonalInformationRecordAsIdentity(cipher, row);\n });\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n result.success = true;\n return Promise.resolve(result);\n }\n }\n\n results.forEach((row) => {\n const cipher = this.initLoginCipher();\n\n const rowKeys = Object.keys(row);\n if (rowKeys[0] === \"username\") {\n this.processFolder(result, row.category);\n this.parseCredentialsRecord(cipher, row);\n }\n\n if (rowKeys[0] === \"type\" && rowKeys[1] === \"account_name\") {\n this.parsePaymentRecord(cipher, row);\n }\n\n if (rowKeys[0] === \"type\" && rowKeys[1] === \"number\") {\n this.parseIdRecord(cipher, row);\n }\n\n if ((rowKeys[0] === \"type\") != null && rowKeys[1] === \"title\") {\n this.parsePersonalInformationRecord(cipher, row);\n }\n\n if (rowKeys[0] === \"title\" && rowKeys[1] === \"note\") {\n this.parseSecureNoteRecords(cipher, row);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n parseCredentialsRecord(cipher: CipherView, row: CredentialsRecord) {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n\n cipher.name = row.title;\n cipher.notes = row.note;\n cipher.login.username = row.username;\n cipher.login.password = row.password;\n cipher.login.totp = row.otpSecret;\n cipher.login.uris = this.makeUriArray(row.url);\n\n this.importUnmappedFields(cipher, row, _mappedCredentialsColums);\n }\n\n parsePaymentRecord(cipher: CipherView, row: PaymentsRecord) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n\n cipher.name = row.account_name;\n let mappedValues: string[] = [];\n switch (row.type) {\n case \"credit_card\":\n cipher.card.cardholderName = row.account_name;\n cipher.card.number = row.cc_number;\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = row.code;\n cipher.card.expMonth = row.expiration_month;\n cipher.card.expYear = row.expiration_year.substring(2, 4);\n\n // If you add more mapped fields please extend this\n mappedValues = [\n \"account_name\",\n \"account_holder\",\n \"cc_number\",\n \"code\",\n \"expiration_month\",\n \"expiration_year\",\n ];\n break;\n case \"bank\":\n cipher.card.cardholderName = row.account_holder;\n cipher.card.number = row.account_number;\n\n // If you add more mapped fields please extend this\n mappedValues = [\"account_name\", \"account_holder\", \"account_number\"];\n break;\n default:\n break;\n }\n\n this.importUnmappedFields(cipher, row, new Set(mappedValues));\n }\n\n parseIdRecord(cipher: CipherView, row: IdRecord) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n\n const mappedValues: string[] = [\"name\", \"number\"];\n switch (row.type) {\n case \"card\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.licenseNumber = row.number;\n break;\n case \"passport\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.passportNumber = row.number;\n break;\n case \"license\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.licenseNumber = row.number;\n cipher.identity.state = row.state;\n\n mappedValues.push(\"state\");\n break;\n case \"social_security\":\n cipher.name = `${row.name} ${row.type}`;\n this.processFullName(cipher, row.name);\n cipher.identity.ssn = row.number;\n break;\n case \"tax_number\":\n cipher.name = row.type;\n cipher.identity.licenseNumber = row.number;\n break;\n\n default:\n break;\n }\n\n // If you add more mapped fields please extend this\n this.importUnmappedFields(cipher, row, new Set(mappedValues));\n }\n\n parsePersonalInformationRecord(cipher: CipherView, row: PersonalInformationRecord) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n if (row.type === \"name\") {\n cipher.name = `${row.title} ${row.first_name} ${row.middle_name} ${row.last_name}`\n .replace(\" \", \" \")\n .trim();\n } else {\n cipher.name = row.item_name;\n }\n\n const dataRow = row as any;\n Object.keys(row).forEach((key) => {\n this.processKvp(cipher, key, dataRow[key]);\n });\n }\n\n parsePersonalInformationRecordAsIdentity(cipher: CipherView, row: PersonalInformationRecord) {\n switch (row.type) {\n case \"name\":\n this.processFullName(cipher, `${row.first_name} ${row.middle_name} ${row.last_name}`);\n cipher.identity.title = row.title;\n cipher.name = cipher.identity.fullName;\n\n cipher.identity.username = row.login;\n break;\n case \"email\":\n cipher.identity.email = row.email;\n break;\n case \"number\":\n cipher.identity.phone = row.phone_number;\n break;\n case \"address\":\n cipher.identity.address1 = row.address;\n cipher.identity.city = row.city;\n cipher.identity.postalCode = row.zip;\n cipher.identity.state = row.state;\n cipher.identity.country = row.country;\n break;\n default:\n break;\n }\n\n this.importUnmappedFields(cipher, row, _mappedPersonalInfoAsIdentiyColumns);\n }\n\n parseSecureNoteRecords(cipher: CipherView, row: SecureNoteRecord) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.name = row.title;\n cipher.notes = row.note;\n\n this.importUnmappedFields(cipher, row, _mappedSecureNoteColumns);\n }\n\n importUnmappedFields(cipher: CipherView, row: any, mappedValues: Set) {\n const unmappedFields = Object.keys(row).filter((x) => !mappedValues.has(x));\n unmappedFields.forEach((key) => {\n const item = row as any;\n this.processKvp(cipher, key, item[key]);\n });\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { SecureNoteView } from \"../../models/view/secureNoteView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nconst HandledResults = new Set([\n \"ADDRESS\",\n \"AUTHENTIFIANT\",\n \"BANKSTATEMENT\",\n \"IDCARD\",\n \"IDENTITY\",\n \"PAYMENTMEANS_CREDITCARD\",\n \"PAYMENTMEAN_PAYPAL\",\n \"EMAIL\",\n]);\n\nexport class DashlaneJsonImporter extends BaseImporter implements Importer {\n private result: ImportResult;\n\n parse(data: string): Promise {\n this.result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n if (results.ADDRESS != null) {\n this.processAddress(results.ADDRESS);\n }\n if (results.AUTHENTIFIANT != null) {\n this.processAuth(results.AUTHENTIFIANT);\n }\n if (results.BANKSTATEMENT != null) {\n this.processNote(results.BANKSTATEMENT, \"BankAccountName\");\n }\n if (results.IDCARD != null) {\n this.processNote(results.IDCARD, \"Fullname\");\n }\n if (results.PAYMENTMEANS_CREDITCARD != null) {\n this.processCard(results.PAYMENTMEANS_CREDITCARD);\n }\n if (results.IDENTITY != null) {\n this.processIdentity(results.IDENTITY);\n }\n\n for (const key in results) {\n // eslint-disable-next-line\n if (results.hasOwnProperty(key) && !HandledResults.has(key)) {\n this.processNote(results[key], null, \"Generic Note\");\n }\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processAuth(results: any[]) {\n results.forEach((credential: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(credential.title);\n\n cipher.login.username = this.getValueOrDefault(\n credential.login,\n this.getValueOrDefault(credential.secondaryLogin)\n );\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = \"Email: \" + credential.email + \"\\n\";\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.domain);\n cipher.notes += this.getValueOrDefault(credential.note, \"\");\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processIdentity(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.fullName, \"\");\n const nameParts = cipher.name.split(\" \");\n if (nameParts.length > 0) {\n cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n }\n if (nameParts.length === 2) {\n cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n } else if (nameParts.length === 3) {\n cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n cipher.identity.lastName = this.getValueOrDefault(nameParts[2]);\n }\n cipher.identity.username = this.getValueOrDefault(obj.pseudo);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processAddress(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.name = this.getValueOrDefault(obj.addressName);\n cipher.identity.address1 = this.getValueOrDefault(obj.addressFull);\n cipher.identity.city = this.getValueOrDefault(obj.city);\n cipher.identity.state = this.getValueOrDefault(obj.state);\n cipher.identity.postalCode = this.getValueOrDefault(obj.zipcode);\n cipher.identity.country = this.getValueOrDefault(obj.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processCard(results: any[]) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.name = this.getValueOrDefault(obj.bank);\n cipher.card.number = this.getValueOrDefault(obj.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.cardholderName = this.getValueOrDefault(obj.owner);\n if (!this.isNullOrWhitespace(cipher.card.brand)) {\n if (this.isNullOrWhitespace(cipher.name)) {\n cipher.name = cipher.card.brand;\n } else {\n cipher.name += \" - \" + cipher.card.brand;\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n\n private processNote(results: any[], nameProperty: string, name: string = null) {\n results.forEach((obj: any) => {\n const cipher = new CipherView();\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n if (name != null) {\n cipher.name = name;\n } else {\n cipher.name = this.getValueOrDefault(obj[nameProperty]);\n }\n for (const key in obj) {\n // eslint-disable-next-line\n if (obj.hasOwnProperty(key) && key !== nameProperty) {\n this.processKvp(cipher, key, obj[key].toString());\n }\n }\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class EncryptrCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Label, \"--\");\n cipher.notes = this.getValueOrDefault(value.Notes);\n const text = this.getValueOrDefault(value.Text);\n if (!this.isNullOrWhitespace(text)) {\n if (this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = text;\n } else {\n cipher.notes += \"\\n\\n\" + text;\n }\n }\n\n const type = value[\"Entry Type\"];\n if (type === \"Password\") {\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value[\"Site URL\"]);\n } else if (type === \"Credit Card\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value[\"Name on card\"]);\n cipher.card.number = this.getValueOrDefault(value[\"Card Number\"]);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.CVV);\n const expiry = this.getValueOrDefault(value.Expiry);\n if (!this.isNullOrWhitespace(expiry)) {\n const expParts = expiry.split(\"/\");\n if (expParts.length > 1) {\n cipher.card.expMonth = parseInt(expParts[0], null).toString();\n cipher.card.expYear = (2000 + parseInt(expParts[1], null)).toString();\n }\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class EnpassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let firstRow = true;\n results.forEach((value) => {\n if (value.length < 2 || (firstRow && (value[0] === \"Title\" || value[0] === \"title\"))) {\n firstRow = false;\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n\n if (\n value.length === 2 ||\n (!this.containsField(value, \"username\") &&\n !this.containsField(value, \"password\") &&\n !this.containsField(value, \"email\") &&\n !this.containsField(value, \"url\"))\n ) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n }\n\n if (\n this.containsField(value, \"cardholder\") &&\n this.containsField(value, \"number\") &&\n this.containsField(value, \"expiry date\")\n ) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (value.length > 2 && value.length % 2 === 0) {\n for (let i = 0; i < value.length - 2; i += 2) {\n const fieldValue: string = value[i + 2];\n if (this.isNullOrWhitespace(fieldValue)) {\n continue;\n }\n\n const fieldName: string = value[i + 1];\n const fieldNameLower = fieldName.toLowerCase();\n\n if (cipher.type === CipherType.Login) {\n if (\n fieldNameLower === \"url\" &&\n (cipher.login.uris == null || cipher.login.uris.length === 0)\n ) {\n cipher.login.uris = this.makeUriArray(fieldValue);\n continue;\n } else if (\n (fieldNameLower === \"username\" || fieldNameLower === \"email\") &&\n this.isNullOrWhitespace(cipher.login.username)\n ) {\n cipher.login.username = fieldValue;\n continue;\n } else if (\n fieldNameLower === \"password\" &&\n this.isNullOrWhitespace(cipher.login.password)\n ) {\n cipher.login.password = fieldValue;\n continue;\n } else if (fieldNameLower === \"totp\" && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = fieldValue;\n continue;\n }\n } else if (cipher.type === CipherType.Card) {\n if (\n fieldNameLower === \"cardholder\" &&\n this.isNullOrWhitespace(cipher.card.cardholderName)\n ) {\n cipher.card.cardholderName = fieldValue;\n continue;\n } else if (fieldNameLower === \"number\" && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n continue;\n } else if (fieldNameLower === \"cvc\" && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = fieldValue;\n continue;\n } else if (\n fieldNameLower === \"expiry date\" &&\n this.isNullOrWhitespace(cipher.card.expMonth) &&\n this.isNullOrWhitespace(cipher.card.expYear)\n ) {\n if (this.setCardExpiration(cipher, fieldValue)) {\n continue;\n }\n } else if (fieldNameLower === \"type\") {\n // Skip since brand was determined from number above\n continue;\n }\n }\n\n this.processKvp(cipher, fieldName, fieldValue);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private containsField(fields: any[], name: string) {\n if (fields == null || name == null) {\n return false;\n }\n return (\n fields.filter((f) => !this.isNullOrWhitespace(f) && f.toLowerCase() === name.toLowerCase())\n .length > 0\n );\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FolderView } from \"../models/view/folderView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class EnpassJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null || results.items.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n const foldersIndexMap = new Map();\n const folderTree = this.buildFolderTree(results.folders);\n this.flattenFolderTree(null, folderTree, foldersMap);\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((item: any) => {\n if (item.folders != null && item.folders.length > 0 && foldersIndexMap.has(item.folders[0])) {\n result.folderRelationships.push([\n result.ciphers.length,\n foldersIndexMap.get(item.folders[0]),\n ]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(item.title);\n cipher.favorite = item.favorite > 0;\n\n if (item.template_type != null && item.fields != null && item.fields.length > 0) {\n if (\n item.template_type.indexOf(\"login.\") === 0 ||\n item.template_type.indexOf(\"password.\") === 0\n ) {\n this.processLogin(cipher, item.fields);\n } else if (item.template_type.indexOf(\"creditcard.\") === 0) {\n this.processCard(cipher, item.fields);\n } else if (\n item.template_type.indexOf(\"identity.\") < 0 &&\n item.fields.some((f: any) => f.type === \"password\" && !this.isNullOrWhitespace(f.value))\n ) {\n this.processLogin(cipher, item.fields);\n } else {\n this.processNote(cipher, item.fields);\n }\n }\n\n cipher.notes += \"\\n\" + this.getValueOrDefault(item.note, \"\");\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private processLogin(cipher: CipherView, fields: any[]) {\n const urls: string[] = [];\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === \"section\") {\n return;\n }\n\n if (\n (field.type === \"username\" || field.type === \"email\") &&\n this.isNullOrWhitespace(cipher.login.username)\n ) {\n cipher.login.username = field.value;\n } else if (field.type === \"password\" && this.isNullOrWhitespace(cipher.login.password)) {\n cipher.login.password = field.value;\n } else if (field.type === \"totp\" && this.isNullOrWhitespace(cipher.login.totp)) {\n cipher.login.totp = field.value;\n } else if (field.type === \"url\") {\n urls.push(field.value);\n } else {\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n\n private processCard(cipher: CipherView, fields: any[]) {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n fields.forEach((field: any) => {\n if (\n this.isNullOrWhitespace(field.value) ||\n field.type === \"section\" ||\n field.type === \"ccType\"\n ) {\n return;\n }\n\n if (field.type === \"ccName\" && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n cipher.card.cardholderName = field.value;\n } else if (field.type === \"ccNumber\" && this.isNullOrWhitespace(cipher.card.number)) {\n cipher.card.number = field.value;\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n } else if (field.type === \"ccCvc\" && this.isNullOrWhitespace(cipher.card.code)) {\n cipher.card.code = field.value;\n } else if (field.type === \"ccExpiry\" && this.isNullOrWhitespace(cipher.card.expYear)) {\n if (!this.setCardExpiration(cipher, field.value)) {\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n }\n } else {\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n }\n });\n }\n\n private processNote(cipher: CipherView, fields: any[]) {\n fields.forEach((field: any) => {\n if (this.isNullOrWhitespace(field.value) || field.type === \"section\") {\n return;\n }\n this.processKvp(\n cipher,\n field.label,\n field.value,\n field.sensitive === 1 ? FieldType.Hidden : FieldType.Text\n );\n });\n }\n\n private buildFolderTree(folders: any[]): any[] {\n if (folders == null) {\n return [];\n }\n const folderTree: any[] = [];\n const map = new Map([]);\n folders.forEach((obj: any) => {\n map.set(obj.uuid, obj);\n obj.children = [];\n });\n folders.forEach((obj: any) => {\n if (obj.parent_uuid != null && obj.parent_uuid !== \"\" && map.has(obj.parent_uuid)) {\n map.get(obj.parent_uuid).children.push(obj);\n } else {\n folderTree.push(obj);\n }\n });\n return folderTree;\n }\n\n private flattenFolderTree(titlePrefix: string, tree: any[], map: Map) {\n if (tree == null) {\n return;\n }\n tree.forEach((f: any) => {\n if (f.title != null && f.title.trim() !== \"\") {\n let title = f.title.trim();\n if (titlePrefix != null && titlePrefix.trim() !== \"\") {\n title = titlePrefix + \"/\" + title;\n }\n map.set(f.uuid, title);\n if (f.children != null && f.children.length !== 0) {\n this.flattenFolderTree(title, f.children, map);\n }\n }\n });\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class FirefoxCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results\n .filter((value) => {\n return value.url !== \"chrome://FirefoxAccounts\";\n })\n .forEach((value) => {\n const cipher = this.initLoginCipher();\n const url = this.getValueOrDefault(value.url, this.getValueOrDefault(value.hostname));\n cipher.name = this.getValueOrDefault(this.nameFromUrl(url), \"--\");\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class FSecureFskImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.data == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const key in results.data) {\n // eslint-disable-next-line\n if (!results.data.hasOwnProperty(key)) {\n continue;\n }\n\n const value = results.data[key];\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.service);\n cipher.notes = this.getValueOrDefault(value.notes);\n\n if (value.style === \"website\" || value.style === \"globe\") {\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n } else if (value.style === \"creditcard\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.username);\n cipher.card.number = this.getValueOrDefault(value.creditNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.creditCvv);\n if (!this.isNullOrWhitespace(value.creditExpiry)) {\n if (!this.setCardExpiration(cipher, value.creditExpiry)) {\n this.processKvp(cipher, \"Expiration\", value.creditExpiry);\n }\n }\n if (!this.isNullOrWhitespace(value.password)) {\n this.processKvp(cipher, \"PIN\", value.password);\n }\n } else {\n continue;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class GnomeJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || Object.keys(results).length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n for (const keyRing in results) {\n if (\n !results.hasOwnProperty(keyRing) || // eslint-disable-line\n this.isNullOrWhitespace(keyRing) ||\n results[keyRing].length === 0\n ) {\n continue;\n }\n\n results[keyRing].forEach((value: any) => {\n if (\n this.isNullOrWhitespace(value.display_name) ||\n value.display_name.indexOf(\"http\") !== 0\n ) {\n return;\n }\n\n this.processFolder(result, keyRing);\n const cipher = this.initLoginCipher();\n cipher.name = value.display_name.replace(\"http://\", \"\").replace(\"https://\", \"\");\n if (cipher.name.length > 30) {\n cipher.name = cipher.name.substring(0, 30);\n }\n cipher.login.password = this.getValueOrDefault(value.secret);\n cipher.login.uris = this.makeUriArray(value.display_name);\n\n if (value.attributes != null) {\n cipher.login.username =\n value.attributes != null\n ? this.getValueOrDefault(value.attributes.username_value)\n : null;\n for (const attr in value.attributes) {\n if (\n !value.attributes.hasOwnProperty(attr) || // eslint-disable-line\n attr === \"username_value\" ||\n attr === \"xdg:schema\"\n ) {\n continue;\n }\n this.processKvp(cipher, attr, value.attributes[attr]);\n }\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n }\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","export class ImportError extends Error {\n constructor(message?: string, public passwordRequired: boolean = false) {\n super(message);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst NotesHeader = \"Notes\\n\\n\";\nconst ApplicationsHeader = \"Applications\\n\\n\";\nconst WebsitesHeader = \"Websites\\n\\n\";\nconst Delimiter = \"\\n---\\n\";\n\nexport class KasperskyTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n\n let notesData: string;\n let applicationsData: string;\n let websitesData: string;\n let workingData = this.splitNewLine(data).join(\"\\n\");\n\n if (workingData.indexOf(NotesHeader) !== -1) {\n const parts = workingData.split(NotesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n notesData = parts[1];\n }\n }\n if (workingData.indexOf(ApplicationsHeader) !== -1) {\n const parts = workingData.split(ApplicationsHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n applicationsData = parts[1];\n }\n }\n if (workingData.indexOf(WebsitesHeader) === 0) {\n const parts = workingData.split(WebsitesHeader);\n if (parts.length > 1) {\n workingData = parts[0];\n websitesData = parts[1];\n }\n }\n\n const notes = this.parseDataCategory(notesData);\n const applications = this.parseDataCategory(applicationsData);\n const websites = this.parseDataCategory(websitesData);\n\n notes.forEach((n) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(n.get(\"Name\"));\n cipher.notes = this.getValueOrDefault(n.get(\"Text\"));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n websites.concat(applications).forEach((w) => {\n const cipher = this.initLoginCipher();\n const nameKey = w.has(\"Website name\") ? \"Website name\" : \"Application\";\n cipher.name = this.getValueOrDefault(w.get(nameKey), \"\");\n if (!this.isNullOrWhitespace(w.get(\"Login name\"))) {\n if (!this.isNullOrWhitespace(cipher.name)) {\n cipher.name += \": \";\n }\n cipher.name += w.get(\"Login name\");\n }\n cipher.notes = this.getValueOrDefault(w.get(\"Comment\"));\n if (w.has(\"Website URL\")) {\n cipher.login.uris = this.makeUriArray(w.get(\"Website URL\"));\n }\n cipher.login.username = this.getValueOrDefault(w.get(\"Login\"));\n cipher.login.password = this.getValueOrDefault(w.get(\"Password\"));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseDataCategory(data: string): Map[] {\n if (this.isNullOrWhitespace(data) || data.indexOf(Delimiter) === -1) {\n return [];\n }\n const items: Map[] = [];\n data.split(Delimiter).forEach((p) => {\n if (p.indexOf(\"\\n\") === -1) {\n return;\n }\n const item = new Map();\n let itemComment: string;\n let itemCommentKey: string;\n p.split(\"\\n\").forEach((l) => {\n if (itemComment != null) {\n itemComment += \"\\n\" + l;\n return;\n }\n const colonIndex = l.indexOf(\":\");\n let key: string;\n let val: string;\n if (colonIndex === -1) {\n return;\n } else {\n key = l.substring(0, colonIndex);\n if (l.length > colonIndex + 1) {\n val = l.substring(colonIndex + 2);\n }\n }\n if (key != null) {\n item.set(key, val);\n }\n if (key === \"Comment\" || key === \"Text\") {\n itemComment = val;\n itemCommentKey = key;\n }\n });\n if (itemComment != null && itemCommentKey != null) {\n item.set(itemCommentKey, itemComment);\n }\n if (item.size === 0) {\n return;\n }\n items.push(item);\n });\n return items;\n }\n}\n","import { FieldType } from \"../enums/fieldType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { FolderView } from \"../models/view/folderView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class KeePass2XmlImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n const doc = this.parseXml(data);\n if (doc == null) {\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n const rootGroup = doc.querySelector(\"KeePassFile > Root > Group\");\n if (rootGroup == null) {\n this.result.errorMessage = \"Missing `KeePassFile > Root > Group` node.\";\n this.result.success = false;\n return Promise.resolve(this.result);\n }\n\n this.traverse(rootGroup, true, \"\");\n\n if (this.organization) {\n this.moveFoldersToCollections(this.result);\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n traverse(node: Element, isRootNode: boolean, groupPrefixName: string) {\n const folderIndex = this.result.folders.length;\n let groupName = groupPrefixName;\n\n if (!isRootNode) {\n if (groupName !== \"\") {\n groupName += \"/\";\n }\n const nameEl = this.querySelectorDirectChild(node, \"Name\");\n groupName += nameEl == null ? \"-\" : nameEl.textContent;\n const folder = new FolderView();\n folder.name = groupName;\n this.result.folders.push(folder);\n }\n\n this.querySelectorAllDirectChild(node, \"Entry\").forEach((entry) => {\n const cipherIndex = this.result.ciphers.length;\n\n const cipher = this.initLoginCipher();\n this.querySelectorAllDirectChild(entry, \"String\").forEach((entryString) => {\n const valueEl = this.querySelectorDirectChild(entryString, \"Value\");\n const value = valueEl != null ? valueEl.textContent : null;\n if (this.isNullOrWhitespace(value)) {\n return;\n }\n const keyEl = this.querySelectorDirectChild(entryString, \"Key\");\n const key = keyEl != null ? keyEl.textContent : null;\n\n if (key === \"URL\") {\n cipher.login.uris = this.makeUriArray(value);\n } else if (key === \"UserName\") {\n cipher.login.username = value;\n } else if (key === \"Password\") {\n cipher.login.password = value;\n } else if (key === \"otp\") {\n cipher.login.totp = value.replace(\"key=\", \"\");\n } else if (key === \"Title\") {\n cipher.name = value;\n } else if (key === \"Notes\") {\n cipher.notes += value + \"\\n\";\n } else {\n let type = FieldType.Text;\n const attrs = valueEl.attributes as any;\n if (\n attrs.length > 0 &&\n attrs.ProtectInMemory != null &&\n attrs.ProtectInMemory.value === \"True\"\n ) {\n type = FieldType.Hidden;\n }\n this.processKvp(cipher, key, value, type);\n }\n });\n\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n\n if (!isRootNode) {\n this.result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n this.querySelectorAllDirectChild(node, \"Group\").forEach((group) => {\n this.traverse(group, false, groupName);\n });\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class KeePassXCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (this.isNullOrWhitespace(value.Title)) {\n return;\n }\n\n value.Group =\n !this.isNullOrWhitespace(value.Group) && value.Group.startsWith(\"Root/\")\n ? value.Group.replace(\"Root/\", \"\")\n : value.Group;\n const groupName = !this.isNullOrWhitespace(value.Group) ? value.Group : null;\n this.processFolder(result, groupName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(value.Title, \"--\");\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../../models/domain/importResult\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nexport class KeeperCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 6) {\n return;\n }\n\n this.processFolder(result, value[0]);\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[5]) + \"\\n\";\n cipher.name = this.getValueOrDefault(value[1], \"--\");\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n\n if (value.length > 7) {\n // we have some custom fields.\n for (let i = 7; i < value.length; i = i + 2) {\n this.processKvp(cipher, value[i], value[i + 1]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { IdentityView } from \"../models/view/identityView\";\nimport { LoginView } from \"../models/view/loginView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class LastPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipherIndex = result.ciphers.length;\n let folderIndex = result.folders.length;\n let grouping = value.grouping;\n if (grouping != null) {\n // eslint-disable-next-line\n grouping = grouping.replace(/\\\\/g, \"/\").replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, \"\");\n }\n const hasFolder = this.getValueOrDefault(grouping, \"(none)\") !== \"(none)\";\n let addFolder = hasFolder;\n\n if (hasFolder) {\n for (let i = 0; i < result.folders.length; i++) {\n if (result.folders[i].name === grouping) {\n addFolder = false;\n folderIndex = i;\n break;\n }\n }\n }\n\n const cipher = this.buildBaseCipher(value);\n if (cipher.type === CipherType.Login) {\n cipher.notes = this.getValueOrDefault(value.extra);\n cipher.login = new LoginView();\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.totp);\n } else if (cipher.type === CipherType.SecureNote) {\n this.parseSecureNote(value, cipher);\n } else if (cipher.type === CipherType.Card) {\n cipher.card = this.parseCard(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n } else if (cipher.type === CipherType.Identity) {\n cipher.identity = this.parseIdentity(value);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (!this.isNullOrWhitespace(value.ccnum)) {\n // there is a card on this identity too\n const cardCipher = this.buildBaseCipher(value);\n cardCipher.identity = null;\n cardCipher.type = CipherType.Card;\n cardCipher.card = this.parseCard(value);\n result.ciphers.push(cardCipher);\n }\n }\n\n result.ciphers.push(cipher);\n\n if (addFolder) {\n const f = new FolderView();\n f.name = grouping;\n result.folders.push(f);\n }\n if (hasFolder) {\n result.folderRelationships.push([cipherIndex, folderIndex]);\n }\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private buildBaseCipher(value: any) {\n const cipher = new CipherView();\n // eslint-disable-next-line\n if (value.hasOwnProperty(\"profilename\") && value.hasOwnProperty(\"profilelanguage\")) {\n // form fill\n cipher.favorite = false;\n cipher.name = this.getValueOrDefault(value.profilename, \"--\");\n cipher.type = CipherType.Card;\n\n if (\n !this.isNullOrWhitespace(value.title) ||\n !this.isNullOrWhitespace(value.firstname) ||\n !this.isNullOrWhitespace(value.lastname) ||\n !this.isNullOrWhitespace(value.address1) ||\n !this.isNullOrWhitespace(value.phone) ||\n !this.isNullOrWhitespace(value.username) ||\n !this.isNullOrWhitespace(value.email)\n ) {\n cipher.type = CipherType.Identity;\n }\n } else {\n // site or secure note\n cipher.favorite = !this.organization && this.getValueOrDefault(value.fav, \"0\") === \"1\";\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.type = value.url === \"http://sn\" ? CipherType.SecureNote : CipherType.Login;\n }\n return cipher;\n }\n\n private parseCard(value: any): CardView {\n const card = new CardView();\n card.cardholderName = this.getValueOrDefault(value.ccname);\n card.number = this.getValueOrDefault(value.ccnum);\n card.code = this.getValueOrDefault(value.cccsc);\n card.brand = this.getCardBrand(value.ccnum);\n\n if (!this.isNullOrWhitespace(value.ccexp) && value.ccexp.indexOf(\"-\") > -1) {\n const ccexpParts = (value.ccexp as string).split(\"-\");\n if (ccexpParts.length > 1) {\n card.expYear = ccexpParts[0];\n card.expMonth = ccexpParts[1];\n if (card.expMonth.length === 2 && card.expMonth[0] === \"0\") {\n card.expMonth = card.expMonth[1];\n }\n }\n }\n\n return card;\n }\n\n private parseIdentity(value: any): IdentityView {\n const identity = new IdentityView();\n identity.title = this.getValueOrDefault(value.title);\n identity.firstName = this.getValueOrDefault(value.firstname);\n identity.middleName = this.getValueOrDefault(value.middlename);\n identity.lastName = this.getValueOrDefault(value.lastname);\n identity.username = this.getValueOrDefault(value.username);\n identity.company = this.getValueOrDefault(value.company);\n identity.ssn = this.getValueOrDefault(value.ssn);\n identity.address1 = this.getValueOrDefault(value.address1);\n identity.address2 = this.getValueOrDefault(value.address2);\n identity.address3 = this.getValueOrDefault(value.address3);\n identity.city = this.getValueOrDefault(value.city);\n identity.state = this.getValueOrDefault(value.state);\n identity.postalCode = this.getValueOrDefault(value.zip);\n identity.country = this.getValueOrDefault(value.country);\n identity.email = this.getValueOrDefault(value.email);\n identity.phone = this.getValueOrDefault(value.phone);\n\n if (!this.isNullOrWhitespace(identity.title)) {\n identity.title = identity.title.charAt(0).toUpperCase() + identity.title.slice(1);\n }\n\n return identity;\n }\n\n private parseSecureNote(value: any, cipher: CipherView) {\n const extraParts = this.splitNewLine(value.extra);\n let processedNote = false;\n\n if (extraParts.length) {\n const typeParts = extraParts[0].split(\":\");\n if (\n typeParts.length > 1 &&\n typeParts[0] === \"NoteType\" &&\n (typeParts[1] === \"Credit Card\" || typeParts[1] === \"Address\")\n ) {\n if (typeParts[1] === \"Credit Card\") {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n Number: \"number\",\n \"Name on Card\": \"cardholderName\",\n \"Security Code\": \"code\",\n // LP provides date in a format like 'June,2020'\n // Store in expMonth, then parse and modify\n \"Expiration Date\": \"expMonth\",\n });\n\n if (this.isNullOrWhitespace(mappedData.expMonth) || mappedData.expMonth === \",\") {\n // No expiration data\n mappedData.expMonth = undefined;\n } else {\n const [monthString, year] = mappedData.expMonth.split(\",\");\n // Parse month name into number\n if (!this.isNullOrWhitespace(monthString)) {\n const month = new Date(Date.parse(monthString.trim() + \" 1, 2012\")).getMonth() + 1;\n if (isNaN(month)) {\n mappedData.expMonth = undefined;\n } else {\n mappedData.expMonth = month.toString();\n }\n } else {\n mappedData.expMonth = undefined;\n }\n if (!this.isNullOrWhitespace(year)) {\n mappedData.expYear = year;\n }\n }\n\n cipher.type = CipherType.Card;\n cipher.card = mappedData;\n } else if (typeParts[1] === \"Address\") {\n const mappedData = this.parseSecureNoteMapping(cipher, extraParts, {\n Title: \"title\",\n \"First Name\": \"firstName\",\n \"Last Name\": \"lastName\",\n \"Middle Name\": \"middleName\",\n Company: \"company\",\n \"Address 1\": \"address1\",\n \"Address 2\": \"address2\",\n \"Address 3\": \"address3\",\n \"City / Town\": \"city\",\n State: \"state\",\n \"Zip / Postal Code\": \"postalCode\",\n Country: \"country\",\n \"Email Address\": \"email\",\n Username: \"username\",\n });\n cipher.type = CipherType.Identity;\n cipher.identity = mappedData;\n }\n processedNote = true;\n }\n }\n\n if (!processedNote) {\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.notes = this.getValueOrDefault(value.extra);\n }\n }\n\n private parseSecureNoteMapping(cipher: CipherView, extraParts: string[], map: any): T {\n const dataObj: any = {};\n\n let processingNotes = false;\n extraParts.forEach((extraPart) => {\n let key: string = null;\n let val: string = null;\n if (!processingNotes) {\n if (this.isNullOrWhitespace(extraPart)) {\n return;\n }\n const colonIndex = extraPart.indexOf(\":\");\n if (colonIndex === -1) {\n key = extraPart;\n } else {\n key = extraPart.substring(0, colonIndex);\n if (extraPart.length > colonIndex) {\n val = extraPart.substring(colonIndex + 1);\n }\n }\n if (this.isNullOrWhitespace(key) || this.isNullOrWhitespace(val) || key === \"NoteType\") {\n return;\n }\n }\n\n if (processingNotes) {\n cipher.notes += \"\\n\" + extraPart;\n } else if (key === \"Notes\") {\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes += \"\\n\" + val;\n } else {\n cipher.notes = val;\n }\n processingNotes = true;\n // eslint-disable-next-line\n } else if (map.hasOwnProperty(key)) {\n dataObj[map[key]] = val;\n } else {\n this.processKvp(cipher, key, val);\n }\n });\n\n return dataObj;\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class LogMeOnceCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 4) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[1]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class MeldiumCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.DisplayName, \"--\");\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.login.username = this.getValueOrDefault(value.UserName);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.Url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class MSecureCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 3) {\n return;\n }\n\n const folderName =\n this.getValueOrDefault(value[0], \"Unassigned\") !== \"Unassigned\" ? value[0] : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[2], \"--\");\n\n if (value[1] === \"Web Logins\" || value[1] === \"Login\") {\n cipher.login.uris = this.makeUriArray(value[4]);\n cipher.login.username = this.getValueOrDefault(value[5]);\n cipher.login.password = this.getValueOrDefault(value[6]);\n cipher.notes = !this.isNullOrWhitespace(value[3]) ? value[3].split(\"\\\\n\").join(\"\\n\") : null;\n } else if (value.length > 3) {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n for (let i = 3; i < value.length; i++) {\n if (!this.isNullOrWhitespace(value[i])) {\n cipher.notes += value[i] + \"\\n\";\n }\n }\n }\n\n if (!this.isNullOrWhitespace(value[1]) && cipher.type !== CipherType.Login) {\n cipher.name = value[1] + \": \" + cipher.name;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { IdentityView } from \"../models/view/identityView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst mappedBaseColumns = [\"nickname\", \"additionalInfo\"];\nconst _mappedUserAccountColumns = new Set(\n mappedBaseColumns.concat([\"url\", \"username\", \"password\", \"twofaSecret\"])\n);\nconst _mappedCreditCardColumns = new Set(\n mappedBaseColumns.concat([\"cardNumber\", \"cardName\", \"exp_month\", \"exp_year\", \"cvv\"])\n);\n\nconst _mappedIdentityColumns = new Set(\n mappedBaseColumns.concat([\n \"title\",\n \"firstName\",\n \"middleName\",\n \"lastName\",\n \"email\",\n \"firstAddressLine\",\n \"secondAddressLine\",\n \"city\",\n \"country\",\n \"zipCode\",\n ])\n);\n\nconst _mappedIdCardColumns = new Set(mappedBaseColumns.concat([\"idName\", \"idNumber\", \"idCountry\"]));\n\nconst _mappedTwoFaColumns = new Set(mappedBaseColumns.concat([\"authToken\"]));\n\nconst _mappedUserNoteColumns = new Set(mappedBaseColumns.concat([\"content\"]));\n\nexport class MykiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.nickname, \"--\");\n cipher.notes = this.getValueOrDefault(value.additionalInfo);\n\n if (value.url !== undefined) {\n // Accounts\n cipher.login.uris = this.makeUriArray(value.url);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.totp = this.getValueOrDefault(value.twofaSecret);\n\n this.importUnmappedFields(cipher, value, _mappedUserAccountColumns);\n } else if (value.authToken !== undefined) {\n // TwoFA\n cipher.login.totp = this.getValueOrDefault(value.authToken);\n\n this.importUnmappedFields(cipher, value, _mappedTwoFaColumns);\n } else if (value.cardNumber !== undefined) {\n // Cards\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(value.cardName);\n cipher.card.number = this.getValueOrDefault(value.cardNumber);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.expMonth = this.getValueOrDefault(value.exp_month);\n cipher.card.expYear = this.getValueOrDefault(value.exp_year);\n cipher.card.code = this.getValueOrDefault(value.cvv);\n\n this.importUnmappedFields(cipher, value, _mappedCreditCardColumns);\n } else if (value.firstName !== undefined) {\n // Identities\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n cipher.identity.title = this.getValueOrDefault(value.title);\n cipher.identity.firstName = this.getValueOrDefault(value.firstName);\n cipher.identity.middleName = this.getValueOrDefault(value.middleName);\n cipher.identity.lastName = this.getValueOrDefault(value.lastName);\n cipher.identity.phone = this.getValueOrDefault(value.number);\n cipher.identity.email = this.getValueOrDefault(value.email);\n cipher.identity.address1 = this.getValueOrDefault(value.firstAddressLine);\n cipher.identity.address2 = this.getValueOrDefault(value.secondAddressLine);\n cipher.identity.city = this.getValueOrDefault(value.city);\n cipher.identity.country = this.getValueOrDefault(value.country);\n cipher.identity.postalCode = this.getValueOrDefault(value.zipCode);\n\n this.importUnmappedFields(cipher, value, _mappedIdentityColumns);\n } else if (value.idType !== undefined) {\n // IdCards\n\n cipher.identity = new IdentityView();\n cipher.type = CipherType.Identity;\n this.processFullName(cipher, value.idName);\n cipher.identity.country = this.getValueOrDefault(value.idCountry);\n\n switch (value.idType) {\n // case \"Driver's License\":\n // case \"ID Card\":\n // case \"Outdoor License\":\n // case \"Software License\":\n // case \"Tax Number\":\n // case \"Bank Account\":\n // case \"Insurance Card\":\n // case \"Health Card\":\n // case \"Membership\":\n // case \"Database\":\n // case \"Reward Program\":\n // case \"Tour Visa\":\n case \"Passport\":\n cipher.identity.passportNumber = value.idNumber;\n break;\n case \"Social Security\":\n cipher.identity.ssn = value.idNumber;\n break;\n default:\n cipher.identity.licenseNumber = value.idNumber;\n break;\n }\n\n this.importUnmappedFields(cipher, value, _mappedIdCardColumns);\n } else if (value.content !== undefined) {\n // Notes\n cipher.secureNote = new SecureNoteView();\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n cipher.notes = this.getValueOrDefault(value.content);\n\n this.importUnmappedFields(cipher, value, _mappedUserNoteColumns);\n } else {\n return;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n importUnmappedFields(cipher: CipherView, row: any, mappedValues: Set) {\n const unmappedFields = Object.keys(row).filter((x) => !mappedValues.has(x));\n unmappedFields.forEach((key) => {\n const item = row as any;\n this.processKvp(cipher, key, item[key]);\n });\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { LoginView } from \"../models/view/loginView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\ntype nodePassCsvParsed = {\n name: string;\n url: string;\n username: string;\n password: string;\n note: string;\n cardholdername: string;\n cardnumber: string;\n cvc: string;\n expirydate: string;\n zipcode: string;\n folder: string;\n full_name: string;\n phone_number: string;\n email: string;\n address1: string;\n address2: string;\n city: string;\n country: string;\n state: string;\n};\n\nexport class NordPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results: nodePassCsvParsed[] = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((record) => {\n const recordType = this.evaluateType(record);\n if (recordType === undefined) {\n return;\n }\n\n if (!this.organization) {\n this.processFolder(result, record.folder);\n }\n\n const cipher = new CipherView();\n cipher.name = this.getValueOrDefault(record.name, \"--\");\n cipher.notes = this.getValueOrDefault(record.note);\n\n switch (recordType) {\n case CipherType.Login:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n cipher.login.username = this.getValueOrDefault(record.username);\n cipher.login.password = this.getValueOrDefault(record.password);\n cipher.login.uris = this.makeUriArray(record.url);\n break;\n case CipherType.Card:\n cipher.type = CipherType.Card;\n cipher.card.cardholderName = this.getValueOrDefault(record.cardholdername);\n cipher.card.number = this.getValueOrDefault(record.cardnumber);\n cipher.card.code = this.getValueOrDefault(record.cvc);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n this.setCardExpiration(cipher, record.expirydate);\n break;\n\n case CipherType.Identity:\n cipher.type = CipherType.Identity;\n\n this.processFullName(cipher, this.getValueOrDefault(record.full_name));\n cipher.identity.address1 = this.getValueOrDefault(record.address1);\n cipher.identity.address2 = this.getValueOrDefault(record.address2);\n cipher.identity.city = this.getValueOrDefault(record.city);\n cipher.identity.state = this.getValueOrDefault(record.state);\n cipher.identity.postalCode = this.getValueOrDefault(record.zipcode);\n cipher.identity.country = this.getValueOrDefault(record.country);\n if (cipher.identity.country != null) {\n cipher.identity.country = cipher.identity.country.toUpperCase();\n }\n cipher.identity.email = this.getValueOrDefault(record.email);\n cipher.identity.phone = this.getValueOrDefault(record.phone_number);\n break;\n case CipherType.SecureNote:\n cipher.type = CipherType.SecureNote;\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n default:\n break;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private evaluateType(record: nodePassCsvParsed): CipherType {\n if (!this.isNullOrWhitespace(record.username)) {\n return CipherType.Login;\n }\n\n if (!this.isNullOrWhitespace(record.cardnumber)) {\n return CipherType.Card;\n }\n\n if (!this.isNullOrWhitespace(record.full_name)) {\n return CipherType.Identity;\n }\n\n if (!this.isNullOrWhitespace(record.note)) {\n return CipherType.SecureNote;\n }\n\n return undefined;\n }\n}\n","import { CipherView } from \"../../models/view/cipherView\";\n\nexport class CipherImportContext {\n lowerProperty: string;\n constructor(public importRecord: any, public property: string, public cipher: CipherView) {\n this.lowerProperty = property.toLowerCase();\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { FieldType } from \"../../enums/fieldType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { PasswordHistoryView } from \"../../models/view/passwordHistoryView\";\nimport { SecureNoteView } from \"../../models/view/secureNoteView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nexport class OnePassword1PifImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n data.split(this.newLineRegex).forEach((line) => {\n if (this.isNullOrWhitespace(line) || line[0] !== \"{\") {\n return;\n }\n const item = JSON.parse(line);\n if (item.trashed === true) {\n return;\n }\n const cipher = this.initLoginCipher();\n\n if (this.isNullOrWhitespace(item.hmac)) {\n this.processStandardItem(item, cipher);\n } else {\n this.processWinOpVaultItem(item, cipher);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processWinOpVaultItem(item: any, cipher: CipherView) {\n if (item.overview != null) {\n cipher.name = this.getValueOrDefault(item.overview.title);\n if (item.overview.URLs != null) {\n const urls: string[] = [];\n item.overview.URLs.forEach((url: any) => {\n if (!this.isNullOrWhitespace(url.u)) {\n urls.push(url.u);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n\n if (item.details != null) {\n if (item.details.passwordHistory != null) {\n this.parsePasswordHistory(item.details.passwordHistory, cipher);\n }\n if (\n !this.isNullOrWhitespace(item.details.ccnum) ||\n !this.isNullOrWhitespace(item.details.cvv)\n ) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (\n !this.isNullOrWhitespace(item.details.firstname) ||\n !this.isNullOrWhitespace(item.details.address1)\n ) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(item.details.password)) {\n cipher.login.password = item.details.password;\n }\n if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n cipher.notes = item.details.notesPlain.split(this.newLineRegex).join(\"\\n\") + \"\\n\";\n }\n if (item.details.fields != null) {\n this.parseFields(item.details.fields, cipher, \"designation\", \"value\", \"name\");\n }\n if (item.details.sections != null) {\n item.details.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, \"n\", \"v\", \"t\");\n }\n });\n }\n }\n }\n\n private processStandardItem(item: any, cipher: CipherView) {\n cipher.favorite = item.openContents && item.openContents.faveIndex ? true : false;\n cipher.name = this.getValueOrDefault(item.title);\n\n if (item.typeName === \"securenotes.SecureNote\") {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else if (item.typeName === \"wallet.financial.CreditCard\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n } else if (item.typeName === \"identities.Identity\") {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n } else {\n cipher.login.uris = this.makeUriArray(item.location);\n }\n\n if (item.secureContents != null) {\n if (item.secureContents.passwordHistory != null) {\n this.parsePasswordHistory(item.secureContents.passwordHistory, cipher);\n }\n if (!this.isNullOrWhitespace(item.secureContents.notesPlain)) {\n cipher.notes = item.secureContents.notesPlain.split(this.newLineRegex).join(\"\\n\") + \"\\n\";\n }\n if (cipher.type === CipherType.Login) {\n if (!this.isNullOrWhitespace(item.secureContents.password)) {\n cipher.login.password = item.secureContents.password;\n }\n if (item.secureContents.URLs != null) {\n const urls: string[] = [];\n item.secureContents.URLs.forEach((u: any) => {\n if (!this.isNullOrWhitespace(u.url)) {\n urls.push(u.url);\n }\n });\n if (urls.length > 0) {\n cipher.login.uris = this.makeUriArray(urls);\n }\n }\n }\n if (item.secureContents.fields != null) {\n this.parseFields(item.secureContents.fields, cipher, \"designation\", \"value\", \"name\");\n }\n if (item.secureContents.sections != null) {\n item.secureContents.sections.forEach((section: any) => {\n if (section.fields != null) {\n this.parseFields(section.fields, cipher, \"n\", \"v\", \"t\");\n }\n });\n }\n }\n }\n\n private parsePasswordHistory(items: any[], cipher: CipherView) {\n const maxSize = items.length > 5 ? 5 : items.length;\n cipher.passwordHistory = items\n .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n .sort((a, b) => b.time - a.time)\n .slice(0, maxSize)\n .map((h: any) => {\n const ph = new PasswordHistoryView();\n ph.password = h.value;\n ph.lastUsedDate = new Date((\"\" + h.time).length >= 13 ? h.time : h.time * 1000);\n return ph;\n });\n }\n\n private parseFields(\n fields: any[],\n cipher: CipherView,\n designationKey: string,\n valueKey: string,\n nameKey: string\n ) {\n fields.forEach((field: any) => {\n if (field[valueKey] == null || field[valueKey].toString().trim() === \"\") {\n return;\n }\n\n // TODO: when date FieldType exists, store this as a date field type instead of formatted Text if k is 'date'\n const fieldValue =\n field.k === \"date\"\n ? new Date(field[valueKey] * 1000).toUTCString()\n : field[valueKey].toString();\n const fieldDesignation =\n field[designationKey] != null ? field[designationKey].toString() : null;\n\n if (cipher.type === CipherType.Login) {\n if (this.isNullOrWhitespace(cipher.login.username) && fieldDesignation === \"username\") {\n cipher.login.username = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.login.password) &&\n fieldDesignation === \"password\"\n ) {\n cipher.login.password = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.login.totp) &&\n fieldDesignation != null &&\n fieldDesignation.startsWith(\"TOTP_\")\n ) {\n cipher.login.totp = fieldValue;\n return;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.isNullOrWhitespace(cipher.card.number) && fieldDesignation === \"ccnum\") {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n return;\n } else if (this.isNullOrWhitespace(cipher.card.code) && fieldDesignation === \"cvv\") {\n cipher.card.code = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.card.cardholderName) &&\n fieldDesignation === \"cardholder\"\n ) {\n cipher.card.cardholderName = fieldValue;\n return;\n } else if (\n this.isNullOrWhitespace(cipher.card.expiration) &&\n fieldDesignation === \"expiry\" &&\n fieldValue.length === 6\n ) {\n cipher.card.expMonth = (fieldValue as string).substr(4, 2);\n if (cipher.card.expMonth[0] === \"0\") {\n cipher.card.expMonth = cipher.card.expMonth.substr(1, 1);\n }\n cipher.card.expYear = (fieldValue as string).substr(0, 4);\n return;\n } else if (fieldDesignation === \"type\") {\n // Skip since brand was determined from number above\n return;\n }\n } else if (cipher.type === CipherType.Identity) {\n const identity = cipher.identity;\n if (this.isNullOrWhitespace(identity.firstName) && fieldDesignation === \"firstname\") {\n identity.firstName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.lastName) && fieldDesignation === \"lastname\") {\n identity.lastName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.middleName) && fieldDesignation === \"initial\") {\n identity.middleName = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.phone) && fieldDesignation === \"defphone\") {\n identity.phone = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.company) && fieldDesignation === \"company\") {\n identity.company = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.email) && fieldDesignation === \"email\") {\n identity.email = fieldValue;\n return;\n } else if (this.isNullOrWhitespace(identity.username) && fieldDesignation === \"username\") {\n identity.username = fieldValue;\n return;\n } else if (fieldDesignation === \"address\") {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { street, city, country, zip } = field[valueKey];\n identity.address1 = this.getValueOrDefault(street);\n identity.city = this.getValueOrDefault(city);\n if (!this.isNullOrWhitespace(country)) {\n identity.country = country.toUpperCase();\n }\n identity.postalCode = this.getValueOrDefault(zip);\n return;\n }\n }\n\n const fieldName = this.isNullOrWhitespace(field[nameKey]) ? \"no_name\" : field[nameKey];\n if (\n fieldName === \"password\" &&\n cipher.passwordHistory != null &&\n cipher.passwordHistory.some((h) => h.password === fieldValue)\n ) {\n return;\n }\n\n const fieldType = field.k === \"concealed\" ? FieldType.Hidden : FieldType.Text;\n this.processKvp(cipher, fieldName, fieldValue, fieldType);\n });\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { FieldType } from \"../../enums/fieldType\";\nimport { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { LoginView } from \"../../models/view/loginView\";\nimport { PasswordHistoryView } from \"../../models/view/passwordHistoryView\";\nimport { SecureNoteView } from \"../../models/view/secureNoteView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nimport {\n CategoryEnum,\n Details,\n ExportData,\n FieldsEntity,\n Item,\n LoginFieldTypeEnum,\n Overview,\n PasswordHistoryEntity,\n SectionsEntity,\n UrlsEntity,\n Value,\n VaultsEntity,\n} from \"./types/onepassword1PuxImporterTypes\";\n\nexport class OnePassword1PuxImporter extends BaseImporter implements Importer {\n result = new ImportResult();\n\n parse(data: string): Promise {\n const exportData: ExportData = JSON.parse(data);\n\n const account = exportData.accounts[0];\n // TODO Add handling of multiple vaults\n // const personalVaults = account.vaults[0].filter((v) => v.attrs.type === VaultAttributeTypeEnum.Personal);\n account.vaults.forEach((vault: VaultsEntity) => {\n vault.items.forEach((item: Item) => {\n if (item.trashed === true) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n\n const category = item.categoryUuid as CategoryEnum;\n switch (category) {\n case CategoryEnum.Login:\n case CategoryEnum.Database:\n case CategoryEnum.Password:\n case CategoryEnum.WirelessRouter:\n case CategoryEnum.Server:\n case CategoryEnum.API_Credential:\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n break;\n case CategoryEnum.CreditCard:\n case CategoryEnum.BankAccount:\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n break;\n case CategoryEnum.SecureNote:\n case CategoryEnum.SoftwareLicense:\n case CategoryEnum.EmailAccount:\n case CategoryEnum.MedicalRecord:\n // case CategoryEnum.Document:\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n break;\n case CategoryEnum.Identity:\n case CategoryEnum.DriversLicense:\n case CategoryEnum.OutdoorLicense:\n case CategoryEnum.Membership:\n case CategoryEnum.Passport:\n case CategoryEnum.RewardsProgram:\n case CategoryEnum.SocialSecurityNumber:\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n break;\n default:\n break;\n }\n\n cipher.favorite = item.favIndex === 1 ? true : false;\n\n this.processOverview(item.overview, cipher);\n\n this.processLoginFields(item, cipher);\n\n this.processDetails(category, item.details, cipher);\n\n this.parsePasswordHistory(item.details.passwordHistory, cipher);\n\n this.processSections(category, item.details.sections, cipher);\n\n if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n cipher.notes = item.details.notesPlain.split(this.newLineRegex).join(\"\\n\") + \"\\n\";\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n this.result.ciphers.push(cipher);\n });\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(this.result);\n }\n\n this.result.success = true;\n return Promise.resolve(this.result);\n }\n\n private processOverview(overview: Overview, cipher: CipherView) {\n if (overview == null) {\n return;\n }\n\n cipher.name = this.getValueOrDefault(overview.title);\n\n if (overview.urls != null) {\n const urls: string[] = [];\n overview.urls.forEach((url: UrlsEntity) => {\n if (!this.isNullOrWhitespace(url.url)) {\n urls.push(url.url);\n }\n });\n cipher.login.uris = this.makeUriArray(urls);\n }\n\n if (overview.tags != null && overview.tags.length > 0) {\n const folderName = this.capitalize(overview.tags[0]);\n this.processFolder(this.result, folderName);\n }\n }\n\n private capitalize(inputString: string): string {\n return inputString.trim().replace(/\\w\\S*/g, (w) => w.replace(/^\\w/, (c) => c.toUpperCase()));\n }\n\n private processLoginFields(item: Item, cipher: CipherView) {\n if (item.details == null) {\n return;\n }\n\n if (item.details.loginFields == null || item.details.loginFields.length === 0) {\n return;\n }\n\n item.details.loginFields.forEach((loginField) => {\n if (loginField.designation === \"username\" && loginField.value !== \"\") {\n cipher.type = CipherType.Login;\n cipher.login.username = loginField.value;\n return;\n }\n\n if (loginField.designation === \"password\" && loginField.value !== \"\") {\n cipher.type = CipherType.Login;\n cipher.login.password = loginField.value;\n return;\n }\n\n let fieldValue = loginField.value;\n let fieldType: FieldType = FieldType.Text;\n switch (loginField.fieldType) {\n case LoginFieldTypeEnum.Password:\n fieldType = FieldType.Hidden;\n break;\n case LoginFieldTypeEnum.CheckBox:\n fieldValue = loginField.value !== \"\" ? \"true\" : \"false\";\n fieldType = FieldType.Boolean;\n break;\n default:\n break;\n }\n this.processKvp(cipher, loginField.name, fieldValue, fieldType);\n });\n }\n\n private processDetails(category: CategoryEnum, details: Details, cipher: CipherView) {\n if (category !== CategoryEnum.Password) {\n return;\n }\n\n if (details == null) {\n return;\n }\n cipher.login.password = details.password;\n }\n\n private processSections(category: CategoryEnum, sections: SectionsEntity[], cipher: CipherView) {\n if (sections == null || sections.length === 0) {\n return;\n }\n\n sections.forEach((section: SectionsEntity) => {\n if (section.fields == null) {\n return;\n }\n\n this.parseSectionFields(category, section.fields, cipher);\n });\n }\n\n private parseSectionFields(category: CategoryEnum, fields: FieldsEntity[], cipher: CipherView) {\n fields.forEach((field: FieldsEntity) => {\n const valueKey = Object.keys(field.value)[0];\n const anyField = field as any;\n\n if (\n anyField.value == null ||\n anyField.value[valueKey] == null ||\n anyField.value[valueKey] === \"\"\n ) {\n return;\n }\n\n const fieldName = this.getFieldName(field.id, field.title);\n const fieldValue = this.extractValue(field.value, valueKey);\n\n if (cipher.type === CipherType.Login) {\n if (this.fillLogin(field, fieldValue, cipher)) {\n return;\n }\n\n switch (category) {\n case CategoryEnum.Login:\n case CategoryEnum.Database:\n case CategoryEnum.EmailAccount:\n case CategoryEnum.WirelessRouter:\n break;\n\n case CategoryEnum.Server:\n if (this.isNullOrWhitespace(cipher.login.uri) && field.id === \"url\") {\n cipher.login.uris = this.makeUriArray(fieldValue);\n return;\n }\n break;\n\n case CategoryEnum.API_Credential:\n if (this.fillApiCredentials(field, fieldValue, cipher)) {\n return;\n }\n break;\n default:\n break;\n }\n } else if (cipher.type === CipherType.Card) {\n if (this.fillCreditCard(field, fieldValue, cipher)) {\n return;\n }\n\n if (category === CategoryEnum.BankAccount) {\n if (this.fillBankAccount(field, fieldValue, cipher)) {\n return;\n }\n }\n } else if (cipher.type === CipherType.Identity) {\n if (this.fillIdentity(field, fieldValue, cipher, valueKey)) {\n return;\n }\n if (valueKey === \"address\") {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { street, city, country, zip, state } = field.value.address;\n cipher.identity.address1 = this.getValueOrDefault(street);\n cipher.identity.city = this.getValueOrDefault(city);\n if (!this.isNullOrWhitespace(country)) {\n cipher.identity.country = country.toUpperCase();\n }\n cipher.identity.postalCode = this.getValueOrDefault(zip);\n cipher.identity.state = this.getValueOrDefault(state);\n return;\n }\n\n switch (category) {\n case CategoryEnum.Identity:\n break;\n case CategoryEnum.DriversLicense:\n if (this.fillDriversLicense(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.OutdoorLicense:\n if (this.fillOutdoorLicense(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.Membership:\n if (this.fillMembership(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.Passport:\n if (this.fillPassport(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.RewardsProgram:\n if (this.fillRewardsProgram(field, fieldValue, cipher)) {\n return;\n }\n break;\n case CategoryEnum.SocialSecurityNumber:\n if (this.fillSSN(field, fieldValue, cipher)) {\n return;\n }\n break;\n default:\n break;\n }\n }\n\n if (valueKey === \"email\") {\n // fieldValue is an object casted into a string, so access the plain value instead\n const { email_address, provider } = field.value.email;\n this.processKvp(cipher, fieldName, email_address, FieldType.Text);\n this.processKvp(cipher, \"provider\", provider, FieldType.Text);\n return;\n }\n\n // Do not include a password field if it's already in the history\n if (\n field.title === \"password\" &&\n cipher.passwordHistory != null &&\n cipher.passwordHistory.some((h) => h.password === fieldValue)\n ) {\n return;\n }\n\n // TODO ?? If one of the fields is marked as guarded, then activate Password-Reprompt for the entire item\n if (field.guarded && cipher.reprompt === CipherRepromptType.None) {\n cipher.reprompt = CipherRepromptType.Password;\n }\n\n const fieldType = valueKey === \"concealed\" ? FieldType.Hidden : FieldType.Text;\n this.processKvp(cipher, fieldName, fieldValue, fieldType);\n });\n }\n\n private getFieldName(id: string, title: string): string {\n if (this.isNullOrWhitespace(title)) {\n return id;\n }\n\n // Naive approach of checking if the fields id is usable\n if (id.length > 25 && RegExp(/[0-9]{2}[A-Z]{2}/, \"i\").test(id)) {\n return title;\n }\n return id;\n }\n\n private extractValue(value: Value, valueKey: string): string {\n if (valueKey === \"date\") {\n return new Date(value.date * 1000).toUTCString();\n }\n\n if (valueKey === \"monthYear\") {\n return value.monthYear.toString();\n }\n\n return (value as any)[valueKey];\n }\n\n private fillLogin(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n const fieldName = this.getFieldName(field.id, field.title);\n\n if (this.isNullOrWhitespace(cipher.login.username) && fieldName === \"username\") {\n cipher.login.username = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.login.password) && fieldName === \"password\") {\n cipher.login.password = fieldValue;\n return true;\n }\n\n if (\n this.isNullOrWhitespace(cipher.login.totp) &&\n field.id != null &&\n field.id.startsWith(\"TOTP_\")\n ) {\n cipher.login.totp = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillApiCredentials(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n const fieldName = this.getFieldName(field.id, field.title);\n\n if (this.isNullOrWhitespace(cipher.login.password) && fieldName === \"credential\") {\n cipher.login.password = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.login.uri) && fieldName === \"hostname\") {\n cipher.login.uris = this.makeUriArray(fieldValue);\n return true;\n }\n\n return false;\n }\n\n private fillCreditCard(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.card.number) && field.id === \"ccnum\") {\n cipher.card.number = fieldValue;\n cipher.card.brand = this.getCardBrand(fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.card.code) && field.id === \"cvv\") {\n cipher.card.code = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.card.cardholderName) && field.id === \"cardholder\") {\n cipher.card.cardholderName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.card.expiration) && field.id === \"expiry\") {\n const monthYear: string = fieldValue.toString().trim();\n cipher.card.expMonth = monthYear.substring(4, 6);\n if (cipher.card.expMonth[0] === \"0\") {\n cipher.card.expMonth = cipher.card.expMonth.substring(1, 2);\n }\n cipher.card.expYear = monthYear.substring(0, 4);\n return true;\n }\n\n if (field.id === \"type\") {\n // Skip since brand was determined from number above\n return true;\n }\n\n return false;\n }\n\n private fillBankAccount(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.card.cardholderName) && field.id === \"owner\") {\n cipher.card.cardholderName = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillIdentity(\n field: FieldsEntity,\n fieldValue: string,\n cipher: CipherView,\n valueKey: string\n ): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"firstname\") {\n cipher.identity.firstName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.lastName) && field.id === \"lastname\") {\n cipher.identity.lastName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.middleName) && field.id === \"initial\") {\n cipher.identity.middleName = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.phone) && field.id === \"defphone\") {\n cipher.identity.phone = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.company) && field.id === \"company\") {\n cipher.identity.company = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.email)) {\n if (valueKey === \"email\") {\n const { email_address, provider } = field.value.email;\n cipher.identity.email = this.getValueOrDefault(email_address);\n this.processKvp(cipher, \"provider\", provider, FieldType.Text);\n return true;\n }\n\n if (field.id === \"email\") {\n cipher.identity.email = fieldValue;\n return true;\n }\n }\n\n if (this.isNullOrWhitespace(cipher.identity.username) && field.id === \"username\") {\n cipher.identity.username = fieldValue;\n return true;\n }\n return false;\n }\n\n private fillDriversLicense(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"fullname\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.address1) && field.id === \"address\") {\n cipher.identity.address1 = fieldValue;\n return true;\n }\n\n // TODO ISO code\n if (this.isNullOrWhitespace(cipher.identity.country) && field.id === \"country\") {\n cipher.identity.country = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.state) && field.id === \"state\") {\n cipher.identity.state = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.licenseNumber) && field.id === \"number\") {\n cipher.identity.licenseNumber = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillOutdoorLicense(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n // TODO ISO code\n if (this.isNullOrWhitespace(cipher.identity.country) && field.id === \"country\") {\n cipher.identity.country = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.state) && field.id === \"state\") {\n cipher.identity.state = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillMembership(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"member_name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.company) && field.id === \"org_name\") {\n cipher.identity.company = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.phone) && field.id === \"phone\") {\n cipher.identity.phone = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillPassport(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"fullname\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n // TODO Iso\n if (this.isNullOrWhitespace(cipher.identity.country) && field.id === \"issuing_country\") {\n cipher.identity.country = fieldValue;\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.passportNumber) && field.id === \"number\") {\n cipher.identity.passportNumber = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillRewardsProgram(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"member_name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.company) && field.id === \"company_name\") {\n cipher.identity.company = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private fillSSN(field: FieldsEntity, fieldValue: string, cipher: CipherView): boolean {\n if (this.isNullOrWhitespace(cipher.identity.firstName) && field.id === \"name\") {\n this.processFullName(cipher, fieldValue);\n return true;\n }\n\n if (this.isNullOrWhitespace(cipher.identity.ssn) && field.id === \"number\") {\n cipher.identity.ssn = fieldValue;\n return true;\n }\n\n return false;\n }\n\n private parsePasswordHistory(historyItems: PasswordHistoryEntity[], cipher: CipherView) {\n if (historyItems == null || historyItems.length === 0) {\n return;\n }\n\n const maxSize = historyItems.length > 5 ? 5 : historyItems.length;\n cipher.passwordHistory = historyItems\n .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n .sort((a, b) => b.time - a.time)\n .slice(0, maxSize)\n .map((h: any) => {\n const ph = new PasswordHistoryView();\n ph.password = h.value;\n ph.lastUsedDate = new Date((\"\" + h.time).length >= 13 ? h.time : h.time * 1000);\n return ph;\n });\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { FieldType } from \"../../enums/fieldType\";\nimport { ImportResult } from \"../../models/domain/importResult\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { BaseImporter } from \"../baseImporter\";\nimport { Importer } from \"../importer\";\n\nimport { CipherImportContext } from \"./cipherImportContext\";\n\nexport const IgnoredProperties = [\n \"ainfo\",\n \"autosubmit\",\n \"notesplain\",\n \"ps\",\n \"scope\",\n \"tags\",\n \"title\",\n \"uuid\",\n \"notes\",\n];\n\nexport abstract class OnePasswordCsvImporter extends BaseImporter implements Importer {\n protected loginPropertyParsers = [\n this.setLoginUsername,\n this.setLoginPassword,\n this.setLoginUris,\n ];\n protected creditCardPropertyParsers = [\n this.setCreditCardNumber,\n this.setCreditCardVerification,\n this.setCreditCardCardholderName,\n this.setCreditCardExpiry,\n ];\n protected identityPropertyParsers = [\n this.setIdentityFirstName,\n this.setIdentityInitial,\n this.setIdentityLastName,\n this.setIdentityUserName,\n this.setIdentityEmail,\n this.setIdentityPhone,\n this.setIdentityCompany,\n ];\n\n abstract setCipherType(value: any, cipher: CipherView): void;\n\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true, {\n quoteChar: '\"',\n escapeChar: \"\\\\\",\n });\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (this.isNullOrWhitespace(this.getProp(value, \"title\"))) {\n return;\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.getProp(value, \"title\"), \"--\");\n\n this.setNotes(value, cipher);\n\n this.setCipherType(value, cipher);\n\n let altUsername: string = null;\n for (const property in value) {\n // eslint-disable-next-line\n if (!value.hasOwnProperty(property) || this.isNullOrWhitespace(value[property])) {\n continue;\n }\n\n const context = new CipherImportContext(value, property, cipher);\n if (cipher.type === CipherType.Login && this.setKnownLoginValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Card && this.setKnownCreditCardValue(context)) {\n continue;\n } else if (cipher.type === CipherType.Identity && this.setKnownIdentityValue(context)) {\n continue;\n }\n\n altUsername = this.setUnknownValue(context, altUsername);\n }\n\n if (\n cipher.type === CipherType.Login &&\n !this.isNullOrWhitespace(altUsername) &&\n this.isNullOrWhitespace(cipher.login.username) &&\n altUsername.indexOf(\"://\") === -1\n ) {\n cipher.login.username = altUsername;\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n protected getProp(obj: any, name: string): any {\n const lowerObj = Object.entries(obj).reduce((agg: any, entry: [string, any]) => {\n agg[entry[0].toLowerCase()] = entry[1];\n return agg;\n }, {});\n return lowerObj[name.toLowerCase()];\n }\n\n protected getPropByRegexp(obj: any, regexp: RegExp): any {\n const matchingKeys = Object.keys(obj).reduce((agg: string[], key: string) => {\n if (key.match(regexp)) {\n agg.push(key);\n }\n return agg;\n }, []);\n if (matchingKeys.length === 0) {\n return null;\n } else {\n return obj[matchingKeys[0]];\n }\n }\n\n protected getPropIncluding(obj: any, name: string): any {\n const includesMap = Object.keys(obj).reduce((agg: string[], entry: string) => {\n if (entry.toLowerCase().includes(name.toLowerCase())) {\n agg.push(entry);\n }\n return agg;\n }, []);\n if (includesMap.length === 0) {\n return null;\n } else {\n return obj[includesMap[0]];\n }\n }\n\n protected setNotes(importRecord: any, cipher: CipherView) {\n cipher.notes =\n this.getValueOrDefault(this.getProp(importRecord, \"notesPlain\"), \"\") +\n \"\\n\" +\n this.getValueOrDefault(this.getProp(importRecord, \"notes\"), \"\") +\n \"\\n\";\n cipher.notes.trim();\n }\n\n protected setKnownLoginValue(context: CipherImportContext): boolean {\n return this.loginPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownCreditCardValue(context: CipherImportContext): boolean {\n return this.creditCardPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setKnownIdentityValue(context: CipherImportContext): boolean {\n return this.identityPropertyParsers.reduce((agg: boolean, func) => {\n if (!agg) {\n agg = func.bind(this)(context);\n }\n return agg;\n }, false);\n }\n\n protected setUnknownValue(context: CipherImportContext, altUsername: string): string {\n if (\n IgnoredProperties.indexOf(context.lowerProperty) === -1 &&\n !context.lowerProperty.startsWith(\"section:\") &&\n !context.lowerProperty.startsWith(\"section \")\n ) {\n if (altUsername == null && context.lowerProperty === \"email\") {\n return context.importRecord[context.property];\n } else if (\n context.lowerProperty === \"created date\" ||\n context.lowerProperty === \"modified date\"\n ) {\n const readableDate = new Date(\n parseInt(context.importRecord[context.property], 10) * 1000\n ).toUTCString();\n this.processKvp(context.cipher, \"1Password \" + context.property, readableDate);\n return null;\n }\n if (\n context.lowerProperty.includes(\"password\") ||\n context.lowerProperty.includes(\"key\") ||\n context.lowerProperty.includes(\"secret\")\n ) {\n this.processKvp(\n context.cipher,\n context.property,\n context.importRecord[context.property],\n FieldType.Hidden\n );\n } else {\n this.processKvp(context.cipher, context.property, context.importRecord[context.property]);\n }\n }\n return null;\n }\n\n protected setIdentityFirstName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.firstName) &&\n context.lowerProperty.includes(\"first name\")\n ) {\n context.cipher.identity.firstName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityInitial(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.middleName) &&\n context.lowerProperty.includes(\"initial\")\n ) {\n context.cipher.identity.middleName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityLastName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.lastName) &&\n context.lowerProperty.includes(\"last name\")\n ) {\n context.cipher.identity.lastName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityUserName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.username) &&\n context.lowerProperty.includes(\"username\")\n ) {\n context.cipher.identity.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityCompany(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.company) &&\n context.lowerProperty.includes(\"company\")\n ) {\n context.cipher.identity.company = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityPhone(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.phone) &&\n context.lowerProperty.includes(\"default phone\")\n ) {\n context.cipher.identity.phone = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setIdentityEmail(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.identity.email) &&\n context.lowerProperty.includes(\"email\")\n ) {\n context.cipher.identity.email = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardNumber(context: CipherImportContext): boolean {\n if (\n this.isNullOrWhitespace(context.cipher.card.number) &&\n context.lowerProperty.includes(\"number\")\n ) {\n context.cipher.card.number = context.importRecord[context.property];\n context.cipher.card.brand = this.getCardBrand(context.cipher.card.number);\n return true;\n }\n return false;\n }\n\n protected setCreditCardVerification(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.code) &&\n context.lowerProperty.includes(\"verification number\")\n ) {\n context.cipher.card.code = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardCardholderName(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.cardholderName) &&\n context.lowerProperty.includes(\"cardholder name\")\n ) {\n context.cipher.card.cardholderName = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setCreditCardExpiry(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.expiration) &&\n context.lowerProperty.includes(\"expiry date\") &&\n context.importRecord[context.property].length === 7\n ) {\n context.cipher.card.expMonth = (context.importRecord[context.property] as string).substr(\n 0,\n 2\n );\n if (context.cipher.card.expMonth[0] === \"0\") {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = (context.importRecord[context.property] as string).substr(3, 4);\n return true;\n }\n return false;\n }\n\n protected setLoginPassword(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.login.password) &&\n context.lowerProperty === \"password\"\n ) {\n context.cipher.login.password = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUsername(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.login.username) &&\n context.lowerProperty === \"username\"\n ) {\n context.cipher.login.username = context.importRecord[context.property];\n return true;\n }\n return false;\n }\n\n protected setLoginUris(context: CipherImportContext) {\n if (\n (context.cipher.login.uris == null || context.cipher.login.uris.length === 0) &&\n context.lowerProperty === \"urls\"\n ) {\n const urls = context.importRecord[context.property].split(this.newLineRegex);\n context.cipher.login.uris = this.makeUriArray(urls);\n return true;\n } else if (context.lowerProperty === \"url\") {\n if (context.cipher.login.uris == null) {\n context.cipher.login.uris = [];\n }\n context.cipher.login.uris.concat(this.makeUriArray(context.importRecord[context.property]));\n return true;\n }\n return false;\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { Importer } from \"../importer\";\n\nimport { IgnoredProperties, OnePasswordCsvImporter } from \"./onepasswordCsvImporter\";\n\nexport class OnePasswordMacCsvImporter extends OnePasswordCsvImporter implements Importer {\n setCipherType(value: any, cipher: CipherView) {\n const onePassType = this.getValueOrDefault(this.getProp(value, \"type\"), \"Login\");\n switch (onePassType) {\n case \"Credit Card\":\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n IgnoredProperties.push(\"type\");\n break;\n case \"Identity\":\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n IgnoredProperties.push(\"type\");\n break;\n case \"Login\":\n case \"Secure Note\":\n IgnoredProperties.push(\"type\");\n break;\n default:\n break;\n }\n }\n}\n","import { CipherType } from \"../../enums/cipherType\";\nimport { CardView } from \"../../models/view/cardView\";\nimport { CipherView } from \"../../models/view/cipherView\";\nimport { IdentityView } from \"../../models/view/identityView\";\nimport { LoginView } from \"../../models/view/loginView\";\nimport { Importer } from \"../importer\";\n\nimport { CipherImportContext } from \"./cipherImportContext\";\nimport { OnePasswordCsvImporter } from \"./onepasswordCsvImporter\";\n\nexport class OnePasswordWinCsvImporter extends OnePasswordCsvImporter implements Importer {\n constructor() {\n super();\n this.identityPropertyParsers.push(this.setIdentityAddress);\n }\n\n setCipherType(value: any, cipher: CipherView) {\n cipher.type = CipherType.Login;\n cipher.login = new LoginView();\n\n if (\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: number/i)) &&\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: expiry date/i))\n ) {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n }\n\n if (\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: first name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: initial/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: last name/i)) ||\n !this.isNullOrWhitespace(this.getPropByRegexp(value, /internet \\d+: email/i))\n ) {\n cipher.type = CipherType.Identity;\n cipher.identity = new IdentityView();\n }\n }\n\n setIdentityAddress(context: CipherImportContext) {\n if (context.lowerProperty.match(/address \\d+: address/i)) {\n this.processKvp(context.cipher, \"address\", context.importRecord[context.property]);\n return true;\n }\n return false;\n }\n\n setCreditCardExpiry(context: CipherImportContext) {\n if (\n this.isNullOrWhitespace(context.cipher.card.expiration) &&\n context.lowerProperty.includes(\"expiry date\")\n ) {\n const expSplit = (context.importRecord[context.property] as string).split(\"/\");\n context.cipher.card.expMonth = expSplit[0];\n if (context.cipher.card.expMonth[0] === \"0\" && context.cipher.card.expMonth.length === 2) {\n context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n }\n context.cipher.card.expYear = expSplit[2].length > 4 ? expSplit[2].substr(0, 4) : expSplit[2];\n return true;\n }\n return false;\n }\n}\n","export interface ExportData {\n accounts?: AccountsEntity[] | null;\n}\nexport interface AccountsEntity {\n attrs: AccountAttributes;\n vaults?: VaultsEntity[] | null;\n}\nexport interface AccountAttributes {\n accountName: string;\n name: string;\n avatar: string;\n email: string;\n uuid: string;\n domain: string;\n}\nexport interface VaultsEntity {\n attrs: VaultAttributes;\n items?: Item[] | null;\n}\nexport interface VaultAttributes {\n uuid: string;\n desc: string;\n avatar: string;\n name: string;\n type: string;\n}\n\nexport enum CategoryEnum {\n Login = \"001\",\n CreditCard = \"002\",\n SecureNote = \"003\",\n Identity = \"004\",\n Password = \"005\",\n Document = \"006\",\n SoftwareLicense = \"100\",\n BankAccount = \"101\",\n Database = \"102\",\n DriversLicense = \"103\",\n OutdoorLicense = \"104\",\n Membership = \"105\",\n Passport = \"106\",\n RewardsProgram = \"107\",\n SocialSecurityNumber = \"108\",\n WirelessRouter = \"109\",\n Server = \"110\",\n EmailAccount = \"111\",\n API_Credential = \"112\",\n MedicalRecord = \"113\",\n}\n\nexport interface Item {\n uuid: string;\n favIndex: number;\n createdAt: number;\n updatedAt: number;\n trashed?: boolean;\n categoryUuid: string;\n details: Details;\n overview: Overview;\n}\nexport interface Details {\n loginFields?: (LoginFieldsEntity | null)[] | null;\n notesPlain?: string | null;\n sections?: (SectionsEntity | null)[] | null;\n passwordHistory?: (PasswordHistoryEntity | null)[] | null;\n documentAttributes?: DocumentAttributes | null;\n password?: string | null;\n}\n\nexport enum LoginFieldTypeEnum {\n TextOrHtml = \"T\",\n EmailAddress = \"E\",\n URL = \"U\",\n Number = \"N\",\n Password = \"P\",\n TextArea = \"A\",\n PhoneNumber = \"T\",\n CheckBox = \"C\",\n}\nexport interface LoginFieldsEntity {\n value: string;\n id: string;\n name: string;\n fieldType: LoginFieldTypeEnum | string;\n designation?: string | null;\n}\nexport interface SectionsEntity {\n title: string;\n name?: string | null;\n fields?: FieldsEntity[] | null;\n}\nexport interface FieldsEntity {\n title: string;\n id: string;\n value: Value;\n indexAtSource: number;\n guarded: boolean;\n multiline: boolean;\n dontGenerate: boolean;\n placeholder?: string;\n inputTraits: InputTraits;\n clipboardFilter?: string | null;\n}\nexport interface Value {\n totp?: string | null;\n date?: number | null;\n string?: string | null;\n concealed?: string | null;\n email?: Email | null;\n phone?: string | null;\n menu?: string | null;\n gender?: string | null;\n monthYear?: number | null;\n url?: string | null;\n address?: Address | null;\n creditCardType?: string | null;\n creditCardNumber?: string | null;\n reference?: string | null;\n}\n\nexport interface Email {\n email_address: string;\n provider: string;\n}\n\nexport interface Address {\n street: string;\n city: string;\n country: string;\n zip: string;\n state: string;\n}\nexport interface InputTraits {\n keyboard: string;\n correction: string;\n capitalization: string;\n}\nexport interface PasswordHistoryEntity {\n value: string;\n time: number;\n}\nexport interface DocumentAttributes {\n fileName: string;\n documentId: string;\n decryptedSize: number;\n}\nexport interface Overview {\n subtitle: string;\n title: string;\n url: string;\n urls?: UrlsEntity[] | null;\n ps?: number | null;\n pbe?: number | null;\n pgrng?: boolean | null;\n tags?: string[] | null;\n}\nexport interface UrlsEntity {\n label: string;\n url: string;\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PadlockCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let headers: string[] = null;\n results.forEach((value) => {\n if (headers == null) {\n headers = value.map((v: string) => v);\n return;\n }\n\n if (value.length < 2 || value.length !== headers.length) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value[1])) {\n if (this.organization) {\n const tags = (value[1] as string).split(\",\");\n tags.forEach((tag) => {\n tag = tag.trim();\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else {\n const tags = (value[1] as string).split(\",\");\n const tag = tags.length > 0 ? tags[0].trim() : null;\n this.processFolder(result, tag);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n\n for (let i = 2; i < value.length; i++) {\n const header = headers[i].trim().toLowerCase();\n if (this.isNullOrWhitespace(value[i]) || this.isNullOrWhitespace(header)) {\n continue;\n }\n\n if (this.usernameFieldNames.indexOf(header) > -1) {\n cipher.login.username = value[i];\n } else if (this.passwordFieldNames.indexOf(header) > -1) {\n cipher.login.password = value[i];\n } else if (this.uriFieldNames.indexOf(header) > -1) {\n cipher.login.uris = this.makeUriArray(value[i]);\n } else {\n this.processKvp(cipher, headers[i], value[i]);\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PassKeepCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n this.processFolder(result, this.getValue(\"category\", value));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValue(\"description\", value);\n cipher.name = this.getValueOrDefault(this.getValue(\"title\", value), \"--\");\n cipher.login.username = this.getValue(\"username\", value);\n cipher.login.password = this.getValue(\"password\", value);\n cipher.login.uris = this.makeUriArray(this.getValue(\"site\", value));\n this.processKvp(cipher, \"Password 2\", this.getValue(\"password2\", value));\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private getValue(key: string, value: any) {\n return this.getValueOrDefault(value[key], this.getValueOrDefault(value[\" \" + key]));\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PassmanJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.length === 0) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((credential: any) => {\n if (credential.tags != null && credential.tags.length > 0) {\n const folderName = credential.tags[0].text;\n this.processFolder(result, folderName);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = credential.label;\n\n cipher.login.username = this.getValueOrDefault(credential.username);\n if (this.isNullOrWhitespace(cipher.login.username)) {\n cipher.login.username = this.getValueOrDefault(credential.email);\n } else if (!this.isNullOrWhitespace(credential.email)) {\n cipher.notes = \"Email: \" + credential.email + \"\\n\";\n }\n\n cipher.login.password = this.getValueOrDefault(credential.password);\n cipher.login.uris = this.makeUriArray(credential.url);\n cipher.notes += this.getValueOrDefault(credential.description, \"\");\n if (credential.otp != null) {\n cipher.login.totp = this.getValueOrDefault(credential.otp.secret);\n }\n\n if (credential.custom_fields != null) {\n credential.custom_fields.forEach((customField: any) => {\n switch (customField.field_type) {\n case \"text\":\n case \"password\":\n this.processKvp(cipher, customField.label, customField.value);\n break;\n }\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasspackCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const tagsJson = !this.isNullOrWhitespace(value.Tags) ? JSON.parse(value.Tags) : null;\n const tags: string[] =\n tagsJson != null && tagsJson.tags != null && tagsJson.tags.length > 0\n ? tagsJson.tags\n .map((tagJson: string) => {\n try {\n const t = JSON.parse(tagJson);\n return this.getValueOrDefault(t.tag);\n } catch {\n // Ignore error\n }\n return null;\n })\n .filter((t: string) => !this.isNullOrWhitespace(t))\n : null;\n\n if (this.organization && tags != null && tags.length > 0) {\n tags.forEach((tag) => {\n let addCollection = true;\n let collectionIndex = result.collections.length;\n\n for (let i = 0; i < result.collections.length; i++) {\n if (result.collections[i].name === tag) {\n addCollection = false;\n collectionIndex = i;\n break;\n }\n }\n\n if (addCollection) {\n const collection = new CollectionView();\n collection.name = tag;\n result.collections.push(collection);\n }\n\n result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n });\n } else if (!this.organization && tags != null && tags.length > 0) {\n this.processFolder(result, tags[0]);\n }\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Notes, \"\");\n cipher.notes += \"\\n\\n\" + this.getValueOrDefault(value[\"Shared Notes\"], \"\") + \"\\n\";\n cipher.name = this.getValueOrDefault(value[\"Entry Name\"], \"--\");\n cipher.login.username = this.getValueOrDefault(value[\"User ID\"]);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n value.__parsed_extra.forEach((extra: string) => {\n if (!this.isNullOrWhitespace(extra)) {\n cipher.notes += \"\\n\" + extra;\n }\n });\n }\n\n const fieldsJson = !this.isNullOrWhitespace(value[\"Extra Fields\"])\n ? JSON.parse(value[\"Extra Fields\"])\n : null;\n const fields =\n fieldsJson != null && fieldsJson.extraFields != null && fieldsJson.extraFields.length > 0\n ? fieldsJson.extraFields.map((fieldJson: string) => {\n try {\n return JSON.parse(fieldJson);\n } catch {\n // Ignore error\n }\n return null;\n })\n : null;\n if (fields != null) {\n fields.forEach((f: any) => {\n if (f != null) {\n this.processKvp(cipher, f.name, f.data);\n }\n });\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordAgentCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let newVersion = true;\n results.forEach((value) => {\n if (value.length !== 5 && value.length < 9) {\n return;\n }\n const altFormat = value.length === 10 && value[0] === \"0\";\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[altFormat ? 1 : 0], \"--\");\n cipher.login.username = this.getValueOrDefault(value[altFormat ? 2 : 1]);\n cipher.login.password = this.getValueOrDefault(value[altFormat ? 3 : 2]);\n if (value.length === 5) {\n newVersion = false;\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.uris = this.makeUriArray(value[3]);\n } else {\n const folder = this.getValueOrDefault(value[altFormat ? 9 : 8], \"(None)\");\n let folderName = folder !== \"(None)\" ? folder.split(\"\\\\\").join(\"/\") : null;\n if (folderName != null) {\n folderName = folder.split(\" > \").join(\"/\");\n folderName = folder.split(\">\").join(\"/\");\n }\n this.processFolder(result, folderName);\n cipher.notes = this.getValueOrDefault(value[altFormat ? 5 : 3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n }\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (newVersion && this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { FolderView } from \"../models/view/folderView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordBossJsonImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = JSON.parse(data);\n if (results == null || results.items == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n results.folders.forEach((value: any) => {\n foldersMap.set(value.id, value.name);\n });\n const foldersIndexMap = new Map();\n foldersMap.forEach((val, key) => {\n foldersIndexMap.set(key, result.folders.length);\n const f = new FolderView();\n f.name = val;\n result.folders.push(f);\n });\n\n results.items.forEach((value: any) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.login.uris = this.makeUriArray(value.login_url);\n\n if (value.folder != null && foldersIndexMap.has(value.folder)) {\n result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(value.folder)]);\n }\n\n if (value.identifiers == null) {\n return;\n }\n\n if (!this.isNullOrWhitespace(value.identifiers.notes)) {\n cipher.notes = value.identifiers.notes.split(\"\\\\r\\\\n\").join(\"\\n\").split(\"\\\\n\").join(\"\\n\");\n }\n\n if (value.type === \"CreditCard\") {\n cipher.card = new CardView();\n cipher.type = CipherType.Card;\n }\n\n for (const property in value.identifiers) {\n // eslint-disable-next-line\n if (!value.identifiers.hasOwnProperty(property)) {\n continue;\n }\n const valObj = value.identifiers[property];\n const val = valObj != null ? valObj.toString() : null;\n if (\n this.isNullOrWhitespace(val) ||\n property === \"notes\" ||\n property === \"ignoreItemInSecurityScore\"\n ) {\n continue;\n }\n\n if (property === \"custom_fields\") {\n valObj.forEach((cf: any) => {\n this.processKvp(cipher, cf.name, cf.value);\n });\n continue;\n }\n\n if (cipher.type === CipherType.Card) {\n if (property === \"cardNumber\") {\n cipher.card.number = val;\n cipher.card.brand = this.getCardBrand(val);\n continue;\n } else if (property === \"nameOnCard\") {\n cipher.card.cardholderName = val;\n continue;\n } else if (property === \"security_code\") {\n cipher.card.code = val;\n continue;\n } else if (property === \"expires\") {\n try {\n const expDate = new Date(val);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch {\n // Ignore error\n }\n continue;\n } else if (property === \"cardType\") {\n continue;\n }\n } else {\n if (\n (property === \"username\" || property === \"email\") &&\n this.isNullOrWhitespace(cipher.login.username)\n ) {\n cipher.login.username = val;\n continue;\n } else if (property === \"password\") {\n cipher.login.password = val;\n continue;\n } else if (property === \"totp\") {\n cipher.login.totp = val;\n continue;\n } else if (\n (cipher.login.uris == null || cipher.login.uris.length === 0) &&\n this.uriFieldNames.indexOf(property) > -1\n ) {\n cipher.login.uris = this.makeUriArray(val);\n continue;\n }\n }\n\n this.processKvp(cipher, property, val);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordDragonXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const records = doc.querySelectorAll(\"PasswordManager > record\");\n Array.from(records).forEach((record) => {\n const category = this.querySelectorDirectChild(record, \"Category\");\n const categoryText =\n category != null &&\n !this.isNullOrWhitespace(category.textContent) &&\n category.textContent !== \"Unfiled\"\n ? category.textContent\n : null;\n this.processFolder(result, categoryText);\n\n const accountName = this.querySelectorDirectChild(record, \"Account-Name\");\n const userId = this.querySelectorDirectChild(record, \"User-Id\");\n const password = this.querySelectorDirectChild(record, \"Password\");\n const url = this.querySelectorDirectChild(record, \"URL\");\n const notes = this.querySelectorDirectChild(record, \"Notes\");\n const cipher = this.initLoginCipher();\n cipher.name =\n accountName != null ? this.getValueOrDefault(accountName.textContent, \"--\") : \"--\";\n cipher.notes = notes != null ? this.getValueOrDefault(notes.textContent) : \"\";\n cipher.login.username = userId != null ? this.getValueOrDefault(userId.textContent) : null;\n cipher.login.password =\n password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n const attributes: string[] = [];\n for (let i = 1; i <= 10; i++) {\n attributes.push(\"Attribute-\" + i);\n }\n\n this.querySelectorAllDirectChild(record, attributes.join(\",\")).forEach((attr) => {\n if (this.isNullOrWhitespace(attr.textContent) || attr.textContent === \"null\") {\n return;\n }\n this.processKvp(cipher, attr.tagName, attr.textContent);\n });\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordSafeXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const passwordSafe = doc.querySelector(\"passwordsafe\");\n if (passwordSafe == null) {\n result.errorMessage = \"Missing `passwordsafe` node.\";\n result.success = false;\n return Promise.resolve(result);\n }\n\n const notesDelimiter = passwordSafe.getAttribute(\"delimiter\");\n const entries = doc.querySelectorAll(\"passwordsafe > entry\");\n Array.from(entries).forEach((entry) => {\n const group = this.querySelectorDirectChild(entry, \"group\");\n const groupText =\n group != null && !this.isNullOrWhitespace(group.textContent)\n ? group.textContent.split(\".\").join(\"/\")\n : null;\n this.processFolder(result, groupText);\n\n const title = this.querySelectorDirectChild(entry, \"title\");\n const username = this.querySelectorDirectChild(entry, \"username\");\n const email = this.querySelectorDirectChild(entry, \"email\");\n const password = this.querySelectorDirectChild(entry, \"password\");\n const url = this.querySelectorDirectChild(entry, \"url\");\n const notes = this.querySelectorDirectChild(entry, \"notes\");\n const cipher = this.initLoginCipher();\n cipher.name = title != null ? this.getValueOrDefault(title.textContent, \"--\") : \"--\";\n cipher.notes =\n notes != null\n ? this.getValueOrDefault(notes.textContent, \"\").split(notesDelimiter).join(\"\\n\")\n : null;\n cipher.login.username =\n username != null ? this.getValueOrDefault(username.textContent) : null;\n cipher.login.password =\n password != null ? this.getValueOrDefault(password.textContent) : null;\n cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n if (this.isNullOrWhitespace(cipher.login.username) && email != null) {\n cipher.login.username = this.getValueOrDefault(email.textContent);\n } else if (email != null && !this.isNullOrWhitespace(email.textContent)) {\n cipher.notes = this.isNullOrWhitespace(cipher.notes)\n ? \"Email: \" + email.textContent\n : cipher.notes + \"\\n\" + \"Email: \" + email.textContent;\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class PasswordWalletTxtImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 1) {\n return;\n }\n if (value.length > 5) {\n this.processFolder(result, value[5]);\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n if (value.length > 4) {\n cipher.notes = this.getValueOrDefault(value[4], \"\").split(\"¬\").join(\"\\n\");\n }\n if (value.length > 2) {\n cipher.login.username = this.getValueOrDefault(value[2]);\n }\n if (value.length > 3) {\n cipher.login.password = this.getValueOrDefault(value[3]);\n }\n if (value.length > 1) {\n cipher.login.uris = this.makeUriArray(value[1]);\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class RememBearCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.trash === \"true\") {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.name);\n cipher.notes = this.getValueOrDefault(value.notes);\n if (value.type === \"LoginItem\") {\n cipher.login.uris = this.makeUriArray(value.website);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.username = this.getValueOrDefault(value.username);\n } else if (value.type === \"CreditCardItem\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n cipher.card.code = this.getValueOrDefault(value.verification);\n\n try {\n const expMonth = this.getValueOrDefault(value.expiryMonth);\n if (expMonth != null) {\n const expMonthNumber = parseInt(expMonth, null);\n if (expMonthNumber != null && expMonthNumber >= 1 && expMonthNumber <= 12) {\n cipher.card.expMonth = expMonthNumber.toString();\n }\n }\n } catch {\n // Ignore error\n }\n try {\n const expYear = this.getValueOrDefault(value.expiryYear);\n if (expYear != null) {\n const expYearNumber = parseInt(expYear, null);\n if (expYearNumber != null) {\n cipher.card.expYear = expYearNumber.toString();\n }\n }\n } catch {\n // Ignore error\n }\n\n const pin = this.getValueOrDefault(value.pin);\n if (pin != null) {\n this.processKvp(cipher, \"PIN\", pin);\n }\n const zip = this.getValueOrDefault(value.zipCode);\n if (zip != null) {\n this.processKvp(cipher, \"Zip Code\", zip);\n }\n }\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class RoboFormCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n let i = 1;\n results.forEach((value) => {\n const folder =\n !this.isNullOrWhitespace(value.Folder) && value.Folder.startsWith(\"/\")\n ? value.Folder.replace(\"/\", \"\")\n : value.Folder;\n const folderName = !this.isNullOrWhitespace(folder) ? folder : null;\n this.processFolder(result, folderName);\n\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value.Note);\n cipher.name = this.getValueOrDefault(value.Name, \"--\");\n cipher.login.username = this.getValueOrDefault(value.Login);\n cipher.login.password = this.getValueOrDefault(value.Pwd);\n cipher.login.uris = this.makeUriArray(value.Url);\n\n if (!this.isNullOrWhitespace(value.Rf_fields)) {\n let fields: string[] = [value.Rf_fields];\n if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n fields = fields.concat(value.__parsed_extra);\n }\n fields.forEach((field: string) => {\n const parts = field.split(\":\");\n if (parts.length < 3) {\n return;\n }\n const key = parts[0] === \"-no-name-\" ? null : parts[0];\n const val = parts.length === 4 && parts[2] === \"rck\" ? parts[1] : parts[2];\n this.processKvp(cipher, key, val);\n });\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n\n if (\n i === results.length &&\n cipher.name === \"--\" &&\n this.isNullOrWhitespace(cipher.login.password)\n ) {\n return;\n }\n\n result.ciphers.push(cipher);\n i++;\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SafariCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Title, \"--\");\n cipher.login.username = this.getValueOrDefault(value.Username);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.Url ?? value.URL);\n cipher.login.totp = this.getValueOrDefault(value.OTPAuth);\n cipher.notes = this.getValueOrDefault(value.Notes);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SafeInCloudXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const db = doc.querySelector(\"database\");\n if (db == null) {\n result.errorMessage = \"Missing `database` node.\";\n result.success = false;\n return Promise.resolve(result);\n }\n\n const foldersMap = new Map();\n\n Array.from(doc.querySelectorAll(\"database > label\")).forEach((labelEl) => {\n const name = labelEl.getAttribute(\"name\");\n const id = labelEl.getAttribute(\"id\");\n if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {\n foldersMap.set(id, result.folders.length);\n const folder = new FolderView();\n folder.name = name;\n result.folders.push(folder);\n }\n });\n\n Array.from(doc.querySelectorAll(\"database > card\")).forEach((cardEl) => {\n if (cardEl.getAttribute(\"template\") === \"true\" || cardEl.getAttribute(\"deleted\") === \"true\") {\n return;\n }\n\n const labelIdEl = this.querySelectorDirectChild(cardEl, \"label_id\");\n if (labelIdEl != null) {\n const labelId = labelIdEl.textContent;\n if (!this.isNullOrWhitespace(labelId) && foldersMap.has(labelId)) {\n result.folderRelationships.push([result.ciphers.length, foldersMap.get(labelId)]);\n }\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(cardEl.getAttribute(\"title\"), \"--\");\n\n if (cardEl.getAttribute(\"star\") === \"true\") {\n cipher.favorite = true;\n }\n\n const cardType = cardEl.getAttribute(\"type\");\n if (cardType === \"note\") {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n } else {\n Array.from(this.querySelectorAllDirectChild(cardEl, \"field\")).forEach((fieldEl) => {\n const text = fieldEl.textContent;\n if (this.isNullOrWhitespace(text)) {\n return;\n }\n const name = fieldEl.getAttribute(\"name\");\n const fieldType = this.getValueOrDefault(fieldEl.getAttribute(\"type\"), \"\").toLowerCase();\n if (fieldType === \"login\") {\n cipher.login.username = text;\n } else if (fieldType === \"password\" || fieldType === \"secret\") {\n // safeInCloud allows for more than one password. we just insert them here and find the one used as password later\n this.processKvp(cipher, name, text, FieldType.Hidden);\n } else if (fieldType === \"one_time_password\") {\n cipher.login.totp = text;\n } else if (fieldType === \"notes\") {\n cipher.notes += text + \"\\n\";\n } else if (fieldType === \"weblogin\" || fieldType === \"website\") {\n cipher.login.uris = this.makeUriArray(text);\n } else {\n this.processKvp(cipher, name, text);\n }\n });\n }\n\n Array.from(this.querySelectorAllDirectChild(cardEl, \"notes\")).forEach((notesEl) => {\n cipher.notes += notesEl.textContent + \"\\n\";\n });\n\n this.setPassword(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n // Choose a password from all passwords. Take one that has password in its name, or the first one if there is no such entry\n // if its name is password, we can safely remove it form the fields. otherwise, it would maybe be best to keep it as a hidden field\n setPassword(cipher: CipherView) {\n const candidates = cipher.fields.filter((field) => field.type === FieldType.Hidden);\n if (!candidates.length) {\n return;\n }\n\n let choice: FieldView;\n for (const field of candidates) {\n if (this.passwordFieldNames.includes(field.name.toLowerCase())) {\n choice = field;\n cipher.fields = cipher.fields.filter((f) => f !== choice);\n break;\n }\n }\n\n if (!choice) {\n choice = candidates[0];\n }\n\n cipher.login.password = choice.value;\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SaferPassCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(this.nameFromUrl(value.url), \"--\");\n cipher.notes = this.getValueOrDefault(value.notes);\n cipher.login.username = this.getValueOrDefault(value.username);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SecureSafeCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Title);\n cipher.notes = this.getValueOrDefault(value.Comment);\n cipher.login.uris = this.makeUriArray(value.Url);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.username = this.getValueOrDefault(value.Username);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class SplashIdCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length < 3) {\n return;\n }\n\n this.processFolder(result, this.getValueOrDefault(value[value.length - 1]));\n const cipher = this.initLoginCipher();\n cipher.notes = this.getValueOrDefault(value[value.length - 2], \"\");\n cipher.name = this.getValueOrDefault(value[1], \"--\");\n\n if (value[0] === \"Web Logins\" || value[0] === \"Servers\" || value[0] === \"Email Accounts\") {\n cipher.login.username = this.getValueOrDefault(value[2]);\n cipher.login.password = this.getValueOrDefault(value[3]);\n cipher.login.uris = this.makeUriArray(value[4]);\n this.parseFieldsToNotes(cipher, 5, value);\n } else {\n this.parseFieldsToNotes(cipher, 2, value);\n }\n\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseFieldsToNotes(cipher: CipherView, startIndex: number, value: any) {\n // last 3 rows do not get parsed\n for (let i = startIndex; i < value.length - 3; i++) {\n if (this.isNullOrWhitespace(value[i])) {\n continue;\n }\n cipher.notes += value[i] + \"\\n\";\n }\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class StickyPasswordXmlImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const doc = this.parseXml(data);\n if (doc == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n const loginNodes = doc.querySelectorAll(\"root > Database > Logins > Login\");\n Array.from(loginNodes).forEach((loginNode) => {\n const accountId = loginNode.getAttribute(\"ID\");\n if (this.isNullOrWhitespace(accountId)) {\n return;\n }\n\n const usernameText = loginNode.getAttribute(\"Name\");\n const passwordText = loginNode.getAttribute(\"Password\");\n let titleText: string = null;\n let linkText: string = null;\n let notesText: string = null;\n let groupId: string = null;\n let groupText: string = null;\n\n const accountLogin = doc.querySelector(\n \"root > Database > Accounts > Account > \" +\n 'LoginLinks > Login[SourceLoginID=\"' +\n accountId +\n '\"]'\n );\n if (accountLogin != null) {\n const account = accountLogin.parentElement.parentElement;\n if (account != null) {\n titleText = account.getAttribute(\"Name\");\n linkText = account.getAttribute(\"Link\");\n groupId = account.getAttribute(\"ParentID\");\n notesText = account.getAttribute(\"Comments\");\n if (!this.isNullOrWhitespace(notesText)) {\n notesText = notesText.split(\"/n\").join(\"\\n\");\n }\n }\n }\n\n if (!this.isNullOrWhitespace(groupId)) {\n groupText = this.buildGroupText(doc, groupId, \"\");\n this.processFolder(result, groupText);\n }\n\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(titleText, \"--\");\n cipher.notes = this.getValueOrDefault(notesText);\n cipher.login.username = this.getValueOrDefault(usernameText);\n cipher.login.password = this.getValueOrDefault(passwordText);\n cipher.login.uris = this.makeUriArray(linkText);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n buildGroupText(doc: Document, groupId: string, groupText: string): string {\n const group = doc.querySelector('root > Database > Groups > Group[ID=\"' + groupId + '\"]');\n if (group == null) {\n return groupText;\n }\n if (!this.isNullOrWhitespace(groupText)) {\n groupText = \"/\" + groupText;\n }\n groupText = group.getAttribute(\"Name\") + groupText;\n return this.buildGroupText(doc, group.getAttribute(\"ParentID\"), groupText);\n }\n}\n","import { CipherType } from \"../enums/cipherType\";\nimport { SecureNoteType } from \"../enums/secureNoteType\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CardView } from \"../models/view/cardView\";\nimport { SecureNoteView } from \"../models/view/secureNoteView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nconst PropertiesToIgnore = [\n \"kind\",\n \"autologin\",\n \"favorite\",\n \"hexcolor\",\n \"protectedwithpassword\",\n \"subdomainonly\",\n \"type\",\n \"tk_export_version\",\n \"note\",\n \"title\",\n \"document_content\",\n];\n\nexport class TrueKeyCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.favorite, \"\").toLowerCase() === \"true\";\n cipher.name = this.getValueOrDefault(value.name, \"--\");\n cipher.notes = this.getValueOrDefault(value.memo, \"\");\n cipher.login.username = this.getValueOrDefault(value.login);\n cipher.login.password = this.getValueOrDefault(value.password);\n cipher.login.uris = this.makeUriArray(value.url);\n\n if (value.kind !== \"login\") {\n cipher.name = this.getValueOrDefault(value.title, \"--\");\n cipher.notes = this.getValueOrDefault(value.note, \"\");\n }\n\n if (value.kind === \"cc\") {\n cipher.type = CipherType.Card;\n cipher.card = new CardView();\n cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n cipher.card.number = this.getValueOrDefault(value.number);\n cipher.card.brand = this.getCardBrand(cipher.card.number);\n if (!this.isNullOrWhitespace(value.expiryDate)) {\n try {\n const expDate = new Date(value.expiryDate);\n cipher.card.expYear = expDate.getFullYear().toString();\n cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n } catch {\n // Ignore error\n }\n }\n } else if (value.kind !== \"login\") {\n cipher.type = CipherType.SecureNote;\n cipher.secureNote = new SecureNoteView();\n cipher.secureNote.type = SecureNoteType.Generic;\n if (!this.isNullOrWhitespace(cipher.notes)) {\n cipher.notes = this.getValueOrDefault(value.document_content, \"\");\n }\n for (const property in value) {\n if (\n value.hasOwnProperty(property) && // eslint-disable-line\n PropertiesToIgnore.indexOf(property.toLowerCase()) < 0 &&\n !this.isNullOrWhitespace(value[property])\n ) {\n this.processKvp(cipher, property, value[property]);\n }\n }\n }\n\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class UpmCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, false);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (value.length !== 5) {\n return;\n }\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value[0], \"--\");\n cipher.notes = this.getValueOrDefault(value[4]);\n cipher.login.username = this.getValueOrDefault(value[1]);\n cipher.login.password = this.getValueOrDefault(value[2]);\n cipher.login.uris = this.makeUriArray(value[3]);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class YotiCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n const cipher = this.initLoginCipher();\n cipher.name = this.getValueOrDefault(value.Name, \"--\");\n cipher.login.username = this.getValueOrDefault(value[\"User name\"]);\n cipher.login.password = this.getValueOrDefault(value.Password);\n cipher.login.uris = this.makeUriArray(value.URL);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n result.success = true;\n return Promise.resolve(result);\n }\n}\n","import { ImportResult } from \"../models/domain/importResult\";\nimport { CipherView } from \"../models/view/cipherView\";\n\nimport { BaseImporter } from \"./baseImporter\";\nimport { Importer } from \"./importer\";\n\nexport class ZohoVaultCsvImporter extends BaseImporter implements Importer {\n parse(data: string): Promise {\n const result = new ImportResult();\n const results = this.parseCsv(data, true);\n if (results == null) {\n result.success = false;\n return Promise.resolve(result);\n }\n\n results.forEach((value) => {\n if (\n this.isNullOrWhitespace(value[\"Password Name\"]) &&\n this.isNullOrWhitespace(value[\"Secret Name\"])\n ) {\n return;\n }\n this.processFolder(result, this.getValueOrDefault(value.ChamberName));\n const cipher = this.initLoginCipher();\n cipher.favorite = this.getValueOrDefault(value.Favorite, \"0\") === \"1\";\n cipher.notes = this.getValueOrDefault(value.Notes);\n cipher.name = this.getValueOrDefault(\n value[\"Password Name\"],\n this.getValueOrDefault(value[\"Secret Name\"], \"--\")\n );\n cipher.login.uris = this.makeUriArray(\n this.getValueOrDefault(value[\"Password URL\"], this.getValueOrDefault(value[\"Secret URL\"]))\n );\n this.parseData(cipher, value.SecretData);\n this.parseData(cipher, value.CustomData);\n this.convertToNoteIfNeeded(cipher);\n this.cleanupCipher(cipher);\n result.ciphers.push(cipher);\n });\n\n if (this.organization) {\n this.moveFoldersToCollections(result);\n }\n\n result.success = true;\n return Promise.resolve(result);\n }\n\n private parseData(cipher: CipherView, data: string) {\n if (this.isNullOrWhitespace(data)) {\n return;\n }\n const dataLines = this.splitNewLine(data);\n dataLines.forEach((line) => {\n const delimPosition = line.indexOf(\":\");\n if (delimPosition < 0) {\n return;\n }\n const field = line.substring(0, delimPosition);\n const value = line.length > delimPosition ? line.substring(delimPosition + 1) : null;\n if (\n this.isNullOrWhitespace(field) ||\n this.isNullOrWhitespace(value) ||\n field === \"SecretType\"\n ) {\n return;\n }\n const fieldLower = field.toLowerCase();\n if (cipher.login.username == null && this.usernameFieldNames.indexOf(fieldLower) > -1) {\n cipher.login.username = value;\n } else if (\n cipher.login.password == null &&\n this.passwordFieldNames.indexOf(fieldLower) > -1\n ) {\n cipher.login.password = value;\n } else {\n this.processKvp(cipher, field, value);\n }\n });\n }\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\n\nimport { IFrameComponent } from \"./iframe_component\";\n\nexport class CaptchaIFrame extends IFrameComponent {\n constructor(\n win: Window,\n webVaultUrl: string,\n private i18nService: I18nService,\n successCallback: (message: string) => any,\n errorCallback: (message: string) => any,\n infoCallback: (message: string) => any\n ) {\n super(\n win,\n webVaultUrl,\n \"captcha-connector.html\",\n \"hcaptcha_iframe\",\n successCallback,\n errorCallback,\n (message: string) => {\n const parsedMessage = JSON.parse(message);\n if (typeof parsedMessage !== \"string\") {\n this.iframe.height = parsedMessage.height.toString();\n this.iframe.width = parsedMessage.width.toString();\n } else {\n infoCallback(parsedMessage);\n }\n }\n );\n }\n\n init(siteKey: string): void {\n super.initComponent(\n this.createParams({ siteKey: siteKey, locale: this.i18nService.translationLocale }, 1)\n );\n }\n}\n","export abstract class IFrameComponent {\n iframe: HTMLIFrameElement;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(\n private win: Window,\n protected webVaultUrl: string,\n private path: string,\n private iframeId: string,\n public successCallback?: (message: string) => any,\n public errorCallback?: (message: string) => any,\n public infoCallback?: (message: string) => any\n ) {\n this.connectorLink = win.document.createElement(\"a\");\n }\n\n stop() {\n this.sendMessage(\"stop\");\n }\n\n start() {\n this.sendMessage(\"start\");\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode((\"0x\" + p1) as any);\n })\n );\n }\n\n cleanup() {\n this.win.removeEventListener(\"message\", this.parseFunction, false);\n }\n\n protected createParams(data: any, version: number) {\n return new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n v: version.toString(),\n });\n }\n\n protected initComponent(params: URLSearchParams): void {\n this.connectorLink.href = `${this.webVaultUrl}/${this.path}?${params}`;\n this.iframe = this.win.document.getElementById(this.iframeId) as HTMLIFrameElement;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener(\"message\", this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split(\"|\");\n if (parts[0] === \"success\" && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === \"error\" && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === \"info\" && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (\n event.origin == null ||\n event.origin === \"\" ||\n event.origin !== (this.connectorLink as any).origin ||\n event.data == null ||\n typeof event.data !== \"string\"\n ) {\n return false;\n }\n\n return (\n event.data.indexOf(\"success|\") === 0 ||\n event.data.indexOf(\"error|\") === 0 ||\n event.data.indexOf(\"info|\") === 0\n );\n }\n}\n","import { LinkedIdType } from \"../enums/linkedIdType\";\nimport { ItemView } from \"../models/view/itemView\";\n\nexport class LinkedMetadata {\n constructor(readonly propertyKey: string, private readonly _i18nKey?: string) {}\n\n get i18nKey() {\n return this._i18nKey ?? this.propertyKey;\n }\n}\n\n/**\n * A decorator used to set metadata used by Linked custom fields. Apply it to a class property or getter to make it\n * available as a Linked custom field option.\n * @param id - A unique value that is saved in the Field model. It is used to look up the decorated class property.\n * @param i18nKey - The i18n key used to describe the decorated class property in the UI. If it is null, then the name\n * of the class property will be used as the i18n key.\n */\nexport function linkedFieldOption(id: LinkedIdType, i18nKey?: string) {\n return (prototype: ItemView, propertyKey: string) => {\n if (prototype.linkedFieldOptions == null) {\n prototype.linkedFieldOptions = new Map();\n }\n\n prototype.linkedFieldOptions.set(id, new LinkedMetadata(propertyKey, i18nKey));\n };\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../../abstractions/environment.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { ApiLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { ApiTokenRequest } from \"../../models/request/identityToken/apiTokenRequest\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class ApiLogInStrategy extends LogInStrategy {\n tokenRequest: ApiTokenRequest;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private environmentService: EnvironmentService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n if (tokenResponse.apiUseKeyConnector) {\n const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n }\n }\n\n async logIn(credentials: ApiLogInCredentials) {\n this.tokenRequest = new ApiTokenRequest(\n credentials.clientId,\n credentials.clientSecret,\n await this.buildTwoFactor(),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n await super.saveAccountInformation(tokenResponse);\n await this.stateService.setApiKeyClientId(this.tokenRequest.clientId);\n await this.stateService.setApiKeyClientSecret(this.tokenRequest.clientSecret);\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Account, AccountProfile, AccountTokens } from \"../../models/domain/account\";\nimport { AuthResult } from \"../../models/domain/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n} from \"../../models/domain/logInCredentials\";\nimport { DeviceRequest } from \"../../models/request/deviceRequest\";\nimport { ApiTokenRequest } from \"../../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../../models/request/identityToken/ssoTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../../models/request/identityToken/tokenRequestTwoFactor\";\nimport { KeysRequest } from \"../../models/request/keysRequest\";\nimport { IdentityCaptchaResponse } from \"../../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../../models/response/identityTwoFactorResponse\";\n\nexport abstract class LogInStrategy {\n protected abstract tokenRequest: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest;\n protected captchaBypassToken: string = null;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService\n ) {}\n\n abstract logIn(\n credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials\n ): Promise;\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string = null\n ): Promise {\n this.tokenRequest.setTwoFactor(twoFactor);\n return this.startLogIn();\n }\n\n protected async startLogIn(): Promise {\n this.twoFactorService.clearSelectedProvider();\n\n const response = await this.apiService.postIdentityToken(this.tokenRequest);\n\n if (response instanceof IdentityTwoFactorResponse) {\n return this.processTwoFactorResponse(response);\n } else if (response instanceof IdentityCaptchaResponse) {\n return this.processCaptchaResponse(response);\n } else if (response instanceof IdentityTokenResponse) {\n return this.processTokenResponse(response);\n }\n\n throw new Error(\"Invalid response object.\");\n }\n\n protected onSuccessfulLogin(response: IdentityTokenResponse): Promise {\n // Implemented in subclass if required\n return null;\n }\n\n protected async buildDeviceRequest() {\n const appId = await this.appIdService.getAppId();\n return new DeviceRequest(appId, this.platformUtilsService);\n }\n\n protected async buildTwoFactor(userProvidedTwoFactor?: TokenRequestTwoFactor) {\n if (userProvidedTwoFactor != null) {\n return userProvidedTwoFactor;\n }\n\n const storedTwoFactorToken = await this.tokenService.getTwoFactorToken();\n if (storedTwoFactorToken != null) {\n return new TokenRequestTwoFactor(TwoFactorProviderType.Remember, storedTwoFactorToken, false);\n }\n\n return new TokenRequestTwoFactor();\n }\n\n protected async saveAccountInformation(tokenResponse: IdentityTokenResponse) {\n const accountInformation = await this.tokenService.decodeToken(tokenResponse.accessToken);\n await this.stateService.addAccount(\n new Account({\n profile: {\n ...new AccountProfile(),\n ...{\n userId: accountInformation.sub,\n email: accountInformation.email,\n hasPremiumPersonally: accountInformation.premium,\n kdfIterations: tokenResponse.kdfIterations,\n kdfType: tokenResponse.kdf,\n },\n },\n tokens: {\n ...new AccountTokens(),\n ...{\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n },\n },\n })\n );\n }\n\n protected async processTokenResponse(response: IdentityTokenResponse): Promise {\n const result = new AuthResult();\n result.resetMasterPassword = response.resetMasterPassword;\n result.forcePasswordReset = response.forcePasswordReset;\n\n await this.saveAccountInformation(response);\n\n if (response.twoFactorToken != null) {\n await this.tokenService.setTwoFactorToken(response);\n }\n\n const newSsoUser = response.key == null;\n if (!newSsoUser) {\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(\n response.privateKey ?? (await this.createKeyPairForOldAccount())\n );\n }\n\n await this.onSuccessfulLogin(response);\n\n await this.stateService.setBiometricLocked(false);\n this.messagingService.send(\"loggedIn\");\n\n return result;\n }\n\n private async processTwoFactorResponse(response: IdentityTwoFactorResponse): Promise {\n const result = new AuthResult();\n result.twoFactorProviders = response.twoFactorProviders2;\n this.twoFactorService.setProviders(response);\n this.captchaBypassToken = response.captchaToken ?? null;\n return result;\n }\n\n private async processCaptchaResponse(response: IdentityCaptchaResponse): Promise {\n const result = new AuthResult();\n result.captchaSiteKey = response.siteKey;\n return result;\n }\n\n private async createKeyPairForOldAccount() {\n try {\n const [publicKey, privateKey] = await this.cryptoService.makeKeyPair();\n await this.apiService.postAccountKeys(new KeysRequest(publicKey, privateKey.encryptedString));\n return privateKey.encryptedString;\n } catch (e) {\n this.logService.error(e);\n }\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { AuthService } from \"../../abstractions/auth.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { HashPurpose } from \"../../enums/hashPurpose\";\nimport { AuthResult } from \"../../models/domain/authResult\";\nimport { PasswordLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../../models/domain/symmetricCryptoKey\";\nimport { PasswordTokenRequest } from \"../../models/request/identityToken/passwordTokenRequest\";\nimport { TokenRequestTwoFactor } from \"../../models/request/identityToken/tokenRequestTwoFactor\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class PasswordLogInStrategy extends LogInStrategy {\n get email() {\n return this.tokenRequest.email;\n }\n\n get masterPasswordHash() {\n return this.tokenRequest.masterPasswordHash;\n }\n\n tokenRequest: PasswordTokenRequest;\n\n private localHashedPassword: string;\n private key: SymmetricCryptoKey;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private authService: AuthService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin() {\n await this.cryptoService.setKey(this.key);\n await this.cryptoService.setKeyHash(this.localHashedPassword);\n }\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ): Promise {\n this.tokenRequest.captchaResponse = captchaResponse ?? this.captchaBypassToken;\n return super.logInTwoFactor(twoFactor);\n }\n\n async logIn(credentials: PasswordLogInCredentials) {\n const { email, masterPassword, captchaToken, twoFactor } = credentials;\n\n this.key = await this.authService.makePreloginKey(masterPassword, email);\n\n // Hash the password early (before authentication) so we don't persist it in memory in plaintext\n this.localHashedPassword = await this.cryptoService.hashPassword(\n masterPassword,\n this.key,\n HashPurpose.LocalAuthorization\n );\n const hashedPassword = await this.cryptoService.hashPassword(masterPassword, this.key);\n\n this.tokenRequest = new PasswordTokenRequest(\n email,\n hashedPassword,\n captchaToken,\n await this.buildTwoFactor(twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","import { ApiService } from \"../../abstractions/api.service\";\nimport { AppIdService } from \"../../abstractions/appId.service\";\nimport { CryptoService } from \"../../abstractions/crypto.service\";\nimport { KeyConnectorService } from \"../../abstractions/keyConnector.service\";\nimport { LogService } from \"../../abstractions/log.service\";\nimport { MessagingService } from \"../../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { StateService } from \"../../abstractions/state.service\";\nimport { TokenService } from \"../../abstractions/token.service\";\nimport { TwoFactorService } from \"../../abstractions/twoFactor.service\";\nimport { SsoLogInCredentials } from \"../../models/domain/logInCredentials\";\nimport { SsoTokenRequest } from \"../../models/request/identityToken/ssoTokenRequest\";\nimport { IdentityTokenResponse } from \"../../models/response/identityTokenResponse\";\n\nimport { LogInStrategy } from \"./logIn.strategy\";\n\nexport class SsoLogInStrategy extends LogInStrategy {\n tokenRequest: SsoTokenRequest;\n orgId: string;\n\n constructor(\n cryptoService: CryptoService,\n apiService: ApiService,\n tokenService: TokenService,\n appIdService: AppIdService,\n platformUtilsService: PlatformUtilsService,\n messagingService: MessagingService,\n logService: LogService,\n stateService: StateService,\n twoFactorService: TwoFactorService,\n private keyConnectorService: KeyConnectorService\n ) {\n super(\n cryptoService,\n apiService,\n tokenService,\n appIdService,\n platformUtilsService,\n messagingService,\n logService,\n stateService,\n twoFactorService\n );\n }\n\n async onSuccessfulLogin(tokenResponse: IdentityTokenResponse) {\n const newSsoUser = tokenResponse.key == null;\n\n if (tokenResponse.keyConnectorUrl != null) {\n if (!newSsoUser) {\n await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n } else {\n await this.keyConnectorService.convertNewSsoUserToKeyConnector(tokenResponse, this.orgId);\n }\n }\n }\n\n async logIn(credentials: SsoLogInCredentials) {\n this.orgId = credentials.orgId;\n this.tokenRequest = new SsoTokenRequest(\n credentials.code,\n credentials.codeVerifier,\n credentials.redirectUrl,\n await this.buildTwoFactor(credentials.twoFactor),\n await this.buildDeviceRequest()\n );\n\n return this.startLogIn();\n }\n}\n","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n const originalMethod: () => Promise = descriptor.value;\n const caches = new Map>>();\n\n const getCache = (obj: any) => {\n let cache = caches.get(obj);\n if (cache != null) {\n return cache;\n }\n cache = new Map>();\n caches.set(obj, cache);\n return cache;\n };\n\n return {\n value: function (...args: any[]) {\n const cache = getCache(this);\n const argsCacheKey = cacheKey(args);\n let response = cache.get(argsCacheKey);\n if (response != null) {\n return response;\n }\n\n const onFinally = () => {\n cache.delete(argsCacheKey);\n if (cache.size === 0) {\n caches.delete(this);\n }\n };\n response = originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n });\n\n cache.set(argsCacheKey, response);\n return response;\n },\n };\n };\n}\n","import { ITreeNodeObject, TreeNode } from \"../models/domain/treeNode\";\n\nexport class ServiceUtils {\n static nestedTraverse(\n nodeTree: TreeNode[],\n partIndex: number,\n parts: string[],\n obj: ITreeNodeObject,\n parent: ITreeNodeObject,\n delimiter: string\n ) {\n if (parts.length <= partIndex) {\n return;\n }\n\n const end = partIndex === parts.length - 1;\n const partName = parts[partIndex];\n\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.name !== parts[partIndex]) {\n continue;\n }\n if (end && nodeTree[i].node.id !== obj.id) {\n // Another node with the same name.\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n ServiceUtils.nestedTraverse(\n nodeTree[i].children,\n partIndex + 1,\n parts,\n obj,\n nodeTree[i].node,\n delimiter\n );\n return;\n }\n\n if (nodeTree.filter((n) => n.node.name === partName).length === 0) {\n if (end) {\n nodeTree.push(new TreeNode(obj, partName, parent));\n return;\n }\n const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n ServiceUtils.nestedTraverse(\n nodeTree,\n 0,\n [newPartName, ...parts.slice(partIndex + 2)],\n obj,\n parent,\n delimiter\n );\n }\n }\n\n static getTreeNodeObject(\n nodeTree: TreeNode[],\n id: string\n ): TreeNode {\n for (let i = 0; i < nodeTree.length; i++) {\n if (nodeTree[i].node.id === id) {\n return nodeTree[i];\n } else if (nodeTree[i].children != null) {\n const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n if (node !== null) {\n return node;\n }\n }\n }\n return null;\n }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n return (\n target: any,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise>\n ) => {\n const originalMethod: () => Promise = descriptor.value;\n const allThrottles = new Map void)[]>>();\n\n const getThrottles = (obj: any) => {\n let throttles = allThrottles.get(obj);\n if (throttles != null) {\n return throttles;\n }\n throttles = new Map void)[]>();\n allThrottles.set(obj, throttles);\n return throttles;\n };\n\n return {\n value: function (...args: any[]) {\n const throttles = getThrottles(this);\n const argsThrottleKey = throttleKey(args);\n let queue = throttles.get(argsThrottleKey);\n if (queue == null) {\n queue = [];\n throttles.set(argsThrottleKey, queue);\n }\n\n return new Promise((resolve, reject) => {\n const exec = () => {\n const onFinally = () => {\n queue.splice(queue.indexOf(exec), 1);\n if (queue.length >= limit) {\n queue[limit - 1]();\n } else if (queue.length === 0) {\n throttles.delete(argsThrottleKey);\n if (throttles.size === 0) {\n allThrottles.delete(this);\n }\n }\n };\n originalMethod\n .apply(this, args)\n .then((val: any) => {\n onFinally();\n return val;\n })\n .catch((err: any) => {\n onFinally();\n throw err;\n })\n .then(resolve, reject);\n };\n queue.push(exec);\n if (queue.length <= limit) {\n exec();\n }\n });\n },\n };\n };\n}\n","export function getDomain(host: string): string | null {\n return null;\n}\n\nexport function isValid(host: string): boolean {\n return true;\n}\n","/* eslint-disable no-useless-escape */\nimport * as tldjs from \"tldjs\";\n\nimport { I18nService } from \"../abstractions/i18n.service\";\n\nconst nodeURL = typeof window === \"undefined\" ? require(\"url\") : null;\n\nexport class Utils {\n static inited = false;\n static isNode = false;\n static isBrowser = true;\n static isMobileBrowser = false;\n static isAppleMobileBrowser = false;\n static global: any = null;\n static tldEndingRegex =\n /.*\\.(com|net|org|edu|uk|gov|ca|de|jp|fr|au|ru|ch|io|es|us|co|xyz|info|ly|mil)$/;\n // Transpiled version of /\\p{Emoji_Presentation}/gu using https://mothereff.in/regexpu. Used for compatability in older browsers.\n static regexpEmojiPresentation =\n /(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])/g;\n\n static init() {\n if (Utils.inited) {\n return;\n }\n\n Utils.inited = true;\n Utils.isNode =\n typeof process !== \"undefined\" &&\n (process as any).release != null &&\n (process as any).release.name === \"node\";\n Utils.isBrowser = typeof window !== \"undefined\";\n Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n Utils.global = Utils.isNode && !Utils.isBrowser ? global : window;\n }\n\n static fromB64ToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"base64\"));\n } else {\n const binaryString = window.atob(str);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n }\n }\n\n static fromUrlB64ToArray(str: string): Uint8Array {\n return Utils.fromB64ToArray(Utils.fromUrlB64ToB64(str));\n }\n\n static fromHexToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"hex\"));\n } else {\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n bytes[i / 2] = parseInt(str.substr(i, 2), 16);\n }\n return bytes;\n }\n }\n\n static fromUtf8ToArray(str: string): Uint8Array {\n if (Utils.isNode) {\n return new Uint8Array(Buffer.from(str, \"utf8\"));\n } else {\n const strUtf8 = unescape(encodeURIComponent(str));\n const arr = new Uint8Array(strUtf8.length);\n for (let i = 0; i < strUtf8.length; i++) {\n arr[i] = strUtf8.charCodeAt(i);\n }\n return arr;\n }\n }\n\n static fromByteStringToArray(str: string): Uint8Array {\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return arr;\n }\n\n static fromBufferToB64(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"base64\");\n } else {\n let binary = \"\";\n const bytes = new Uint8Array(buffer);\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n }\n\n static fromBufferToUrlB64(buffer: ArrayBuffer): string {\n return Utils.fromB64toUrlB64(Utils.fromBufferToB64(buffer));\n }\n\n static fromB64toUrlB64(b64Str: string) {\n return b64Str.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n }\n\n static fromBufferToUtf8(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"utf8\");\n } else {\n const bytes = new Uint8Array(buffer);\n const encodedString = String.fromCharCode.apply(null, bytes);\n return decodeURIComponent(escape(encodedString));\n }\n }\n\n static fromBufferToByteString(buffer: ArrayBuffer): string {\n return String.fromCharCode.apply(null, new Uint8Array(buffer));\n }\n\n // ref: https://stackoverflow.com/a/40031979/1090359\n static fromBufferToHex(buffer: ArrayBuffer): string {\n if (Utils.isNode) {\n return Buffer.from(buffer).toString(\"hex\");\n } else {\n const bytes = new Uint8Array(buffer);\n return Array.prototype.map\n .call(bytes, (x: number) => (\"00\" + x.toString(16)).slice(-2))\n .join(\"\");\n }\n }\n\n static fromUrlB64ToB64(urlB64Str: string): string {\n let output = urlB64Str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"Illegal base64url string!\");\n }\n\n return output;\n }\n\n static fromUrlB64ToUtf8(urlB64Str: string): string {\n return Utils.fromB64ToUtf8(Utils.fromUrlB64ToB64(urlB64Str));\n }\n\n static fromUtf8ToB64(utfStr: string): string {\n if (Utils.isNode) {\n return Buffer.from(utfStr, \"utf8\").toString(\"base64\");\n } else {\n return decodeURIComponent(escape(window.btoa(utfStr)));\n }\n }\n\n static fromUtf8ToUrlB64(utfStr: string): string {\n return Utils.fromBufferToUrlB64(Utils.fromUtf8ToArray(utfStr));\n }\n\n static fromB64ToUtf8(b64Str: string): string {\n if (Utils.isNode) {\n return Buffer.from(b64Str, \"base64\").toString(\"utf8\");\n } else {\n return decodeURIComponent(escape(window.atob(b64Str)));\n }\n }\n\n // ref: http://stackoverflow.com/a/2117523/1090359\n static newGuid(): string {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n static isGuid(id: string) {\n return RegExp(\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n \"i\"\n ).test(id);\n }\n\n static getHostname(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.hostname !== \"\" ? url.hostname : null;\n } catch {\n return null;\n }\n }\n\n static getHost(uriString: string): string {\n const url = Utils.getUrl(uriString);\n try {\n return url != null && url.host !== \"\" ? url.host : null;\n } catch {\n return null;\n }\n }\n\n static getDomain(uriString: string): string {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === \"\") {\n return null;\n }\n\n if (uriString.startsWith(\"data:\")) {\n return null;\n }\n\n let httpUrl = uriString.startsWith(\"http://\") || uriString.startsWith(\"https://\");\n if (\n !httpUrl &&\n uriString.indexOf(\"://\") < 0 &&\n Utils.tldEndingRegex.test(uriString) &&\n uriString.indexOf(\"@\") < 0\n ) {\n uriString = \"http://\" + uriString;\n httpUrl = true;\n }\n\n if (httpUrl) {\n try {\n const url = Utils.getUrlObject(uriString);\n const validHostname = tldjs?.isValid != null ? tldjs.isValid(url.hostname) : true;\n if (!validHostname) {\n return null;\n }\n\n if (url.hostname === \"localhost\" || Utils.validIpAddress(url.hostname)) {\n return url.hostname;\n }\n\n const urlDomain =\n tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(url.hostname) : null;\n return urlDomain != null ? urlDomain : url.hostname;\n } catch (e) {\n // Invalid domain, try another approach below.\n }\n }\n\n try {\n const domain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(uriString) : null;\n\n if (domain != null) {\n return domain;\n }\n } catch {\n return null;\n }\n\n return null;\n }\n\n static getQueryParams(uriString: string): Map {\n const url = Utils.getUrl(uriString);\n if (url == null || url.search == null || url.search === \"\") {\n return null;\n }\n const map = new Map();\n const pairs = (url.search[0] === \"?\" ? url.search.substr(1) : url.search).split(\"&\");\n pairs.forEach((pair) => {\n const parts = pair.split(\"=\");\n if (parts.length < 1) {\n return;\n }\n map.set(\n decodeURIComponent(parts[0]).toLowerCase(),\n parts[1] == null ? \"\" : decodeURIComponent(parts[1])\n );\n });\n return map;\n }\n\n static getSortFunction(i18nService: I18nService, prop: string) {\n return (a: any, b: any) => {\n if (a[prop] == null && b[prop] != null) {\n return -1;\n }\n if (a[prop] != null && b[prop] == null) {\n return 1;\n }\n if (a[prop] == null && b[prop] == null) {\n return 0;\n }\n\n return i18nService.collator\n ? i18nService.collator.compare(a[prop], b[prop])\n : a[prop].localeCompare(b[prop]);\n };\n }\n\n static isNullOrWhitespace(str: string): boolean {\n return str == null || typeof str !== \"string\" || str.trim() === \"\";\n }\n\n static isNullOrEmpty(str: string): boolean {\n return str == null || typeof str !== \"string\" || str == \"\";\n }\n\n static nameOf(name: string & keyof T) {\n return name;\n }\n\n static assign(target: T, source: Partial): T {\n return Object.assign(target, source);\n }\n\n static iterateEnum(obj: O) {\n return (Object.keys(obj).filter((k) => Number.isNaN(+k)) as K[]).map((k) => obj[k]);\n }\n\n static getUrl(uriString: string): URL {\n if (uriString == null) {\n return null;\n }\n\n uriString = uriString.trim();\n if (uriString === \"\") {\n return null;\n }\n\n let url = Utils.getUrlObject(uriString);\n if (url == null) {\n const hasHttpProtocol =\n uriString.indexOf(\"http://\") === 0 || uriString.indexOf(\"https://\") === 0;\n if (!hasHttpProtocol && uriString.indexOf(\".\") > -1) {\n url = Utils.getUrlObject(\"http://\" + uriString);\n }\n }\n return url;\n }\n\n static camelToPascalCase(s: string) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n\n private static validIpAddress(ipString: string): boolean {\n const ipRegex =\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n return ipRegex.test(ipString);\n }\n\n private static isMobile(win: Window) {\n let mobile = false;\n ((a) => {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n a\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n a.substr(0, 4)\n )\n ) {\n mobile = true;\n }\n })(win.navigator.userAgent || win.navigator.vendor || (win as any).opera);\n return mobile || win.navigator.userAgent.match(/iPad/i) != null;\n }\n\n private static isAppleMobile(win: Window) {\n return (\n win.navigator.userAgent.match(/iPhone/i) != null ||\n win.navigator.userAgent.match(/iPad/i) != null\n );\n }\n\n private static getUrlObject(uriString: string): URL {\n try {\n if (nodeURL != null) {\n return new nodeURL.URL(uriString);\n } else if (typeof URL === \"function\") {\n return new URL(uriString);\n } else if (window != null) {\n const hasProtocol = uriString.indexOf(\"://\") > -1;\n if (!hasProtocol && uriString.indexOf(\".\") > -1) {\n uriString = \"http://\" + uriString;\n } else if (!hasProtocol) {\n return null;\n }\n const anchor = window.document.createElement(\"a\");\n anchor.href = uriString;\n return anchor as any;\n }\n } catch (e) {\n // Ignore error\n }\n\n return null;\n }\n}\n\nUtils.init();\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\n\nexport class WebAuthnIFrame {\n private iframe: HTMLIFrameElement = null;\n private connectorLink: HTMLAnchorElement;\n private parseFunction = this.parseMessage.bind(this);\n\n constructor(\n private win: Window,\n private webVaultUrl: string,\n private webAuthnNewTab: boolean,\n private platformUtilsService: PlatformUtilsService,\n private i18nService: I18nService,\n private successCallback: Function, // eslint-disable-line\n private errorCallback: Function, // eslint-disable-line\n private infoCallback: Function // eslint-disable-line\n ) {\n this.connectorLink = win.document.createElement(\"a\");\n }\n\n init(data: any): void {\n const params = new URLSearchParams({\n data: this.base64Encode(JSON.stringify(data)),\n parent: encodeURIComponent(this.win.document.location.href),\n btnText: encodeURIComponent(this.i18nService.t(\"webAuthnAuthenticate\")),\n v: \"1\",\n });\n\n if (this.webAuthnNewTab) {\n // Firefox fallback which opens the webauthn page in a new tab\n params.append(\"locale\", this.i18nService.translationLocale);\n this.platformUtilsService.launchUri(\n `${this.webVaultUrl}/webauthn-fallback-connector.html?${params}`\n );\n } else {\n this.connectorLink.href = `${this.webVaultUrl}/webauthn-connector.html?${params}`;\n this.iframe = this.win.document.getElementById(\"webauthn_iframe\") as HTMLIFrameElement;\n this.iframe.allow = \"publickey-credentials-get \" + new URL(this.webVaultUrl).origin;\n this.iframe.src = this.connectorLink.href;\n\n this.win.addEventListener(\"message\", this.parseFunction, false);\n }\n }\n\n stop() {\n this.sendMessage(\"stop\");\n }\n\n start() {\n this.sendMessage(\"start\");\n }\n\n sendMessage(message: any) {\n if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n return;\n }\n\n this.iframe.contentWindow.postMessage(message, this.iframe.src);\n }\n\n base64Encode(str: string): string {\n return btoa(\n encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n return String.fromCharCode((\"0x\" + p1) as any);\n })\n );\n }\n\n cleanup() {\n this.win.removeEventListener(\"message\", this.parseFunction, false);\n }\n\n private parseMessage(event: MessageEvent) {\n if (!this.validMessage(event)) {\n return;\n }\n\n const parts: string[] = event.data.split(\"|\");\n if (parts[0] === \"success\" && this.successCallback) {\n this.successCallback(parts[1]);\n } else if (parts[0] === \"error\" && this.errorCallback) {\n this.errorCallback(parts[1]);\n } else if (parts[0] === \"info\" && this.infoCallback) {\n this.infoCallback(parts[1]);\n }\n }\n\n private validMessage(event: MessageEvent) {\n if (\n event.origin == null ||\n event.origin === \"\" ||\n event.origin !== (this.connectorLink as any).origin ||\n event.data == null ||\n typeof event.data !== \"string\"\n ) {\n return false;\n }\n\n return (\n event.data.indexOf(\"success|\") === 0 ||\n event.data.indexOf(\"error|\") === 0 ||\n event.data.indexOf(\"info|\") === 0\n );\n }\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EEFLongWordList = [\n \"abacus\",\n \"abdomen\",\n \"abdominal\",\n \"abide\",\n \"abiding\",\n \"ability\",\n \"ablaze\",\n \"able\",\n \"abnormal\",\n \"abrasion\",\n \"abrasive\",\n \"abreast\",\n \"abridge\",\n \"abroad\",\n \"abruptly\",\n \"absence\",\n \"absentee\",\n \"absently\",\n \"absinthe\",\n \"absolute\",\n \"absolve\",\n \"abstain\",\n \"abstract\",\n \"absurd\",\n \"accent\",\n \"acclaim\",\n \"acclimate\",\n \"accompany\",\n \"account\",\n \"accuracy\",\n \"accurate\",\n \"accustom\",\n \"acetone\",\n \"achiness\",\n \"aching\",\n \"acid\",\n \"acorn\",\n \"acquaint\",\n \"acquire\",\n \"acre\",\n \"acrobat\",\n \"acronym\",\n \"acting\",\n \"action\",\n \"activate\",\n \"activator\",\n \"active\",\n \"activism\",\n \"activist\",\n \"activity\",\n \"actress\",\n \"acts\",\n \"acutely\",\n \"acuteness\",\n \"aeration\",\n \"aerobics\",\n \"aerosol\",\n \"aerospace\",\n \"afar\",\n \"affair\",\n \"affected\",\n \"affecting\",\n \"affection\",\n \"affidavit\",\n \"affiliate\",\n \"affirm\",\n \"affix\",\n \"afflicted\",\n \"affluent\",\n \"afford\",\n \"affront\",\n \"aflame\",\n \"afloat\",\n \"aflutter\",\n \"afoot\",\n \"afraid\",\n \"afterglow\",\n \"afterlife\",\n \"aftermath\",\n \"aftermost\",\n \"afternoon\",\n \"aged\",\n \"ageless\",\n \"agency\",\n \"agenda\",\n \"agent\",\n \"aggregate\",\n \"aghast\",\n \"agile\",\n \"agility\",\n \"aging\",\n \"agnostic\",\n \"agonize\",\n \"agonizing\",\n \"agony\",\n \"agreeable\",\n \"agreeably\",\n \"agreed\",\n \"agreeing\",\n \"agreement\",\n \"aground\",\n \"ahead\",\n \"ahoy\",\n \"aide\",\n \"aids\",\n \"aim\",\n \"ajar\",\n \"alabaster\",\n \"alarm\",\n \"albatross\",\n \"album\",\n \"alfalfa\",\n \"algebra\",\n \"algorithm\",\n \"alias\",\n \"alibi\",\n \"alienable\",\n \"alienate\",\n \"aliens\",\n \"alike\",\n \"alive\",\n \"alkaline\",\n \"alkalize\",\n \"almanac\",\n \"almighty\",\n \"almost\",\n \"aloe\",\n \"aloft\",\n \"aloha\",\n \"alone\",\n \"alongside\",\n \"aloof\",\n \"alphabet\",\n \"alright\",\n \"although\",\n \"altitude\",\n \"alto\",\n \"aluminum\",\n \"alumni\",\n \"always\",\n \"amaretto\",\n \"amaze\",\n \"amazingly\",\n \"amber\",\n \"ambiance\",\n \"ambiguity\",\n \"ambiguous\",\n \"ambition\",\n \"ambitious\",\n \"ambulance\",\n \"ambush\",\n \"amendable\",\n \"amendment\",\n \"amends\",\n \"amenity\",\n \"amiable\",\n \"amicably\",\n \"amid\",\n \"amigo\",\n \"amino\",\n \"amiss\",\n \"ammonia\",\n \"ammonium\",\n \"amnesty\",\n \"amniotic\",\n \"among\",\n \"amount\",\n \"amperage\",\n \"ample\",\n \"amplifier\",\n \"amplify\",\n \"amply\",\n \"amuck\",\n \"amulet\",\n \"amusable\",\n \"amused\",\n \"amusement\",\n \"amuser\",\n \"amusing\",\n \"anaconda\",\n \"anaerobic\",\n \"anagram\",\n \"anatomist\",\n \"anatomy\",\n \"anchor\",\n \"anchovy\",\n \"ancient\",\n \"android\",\n \"anemia\",\n \"anemic\",\n \"aneurism\",\n \"anew\",\n \"angelfish\",\n \"angelic\",\n \"anger\",\n \"angled\",\n \"angler\",\n \"angles\",\n \"angling\",\n \"angrily\",\n \"angriness\",\n \"anguished\",\n \"angular\",\n \"animal\",\n \"animate\",\n \"animating\",\n \"animation\",\n \"animator\",\n \"anime\",\n \"animosity\",\n \"ankle\",\n \"annex\",\n \"annotate\",\n \"announcer\",\n \"annoying\",\n \"annually\",\n \"annuity\",\n \"anointer\",\n \"another\",\n \"answering\",\n \"antacid\",\n \"antarctic\",\n \"anteater\",\n \"antelope\",\n \"antennae\",\n \"anthem\",\n \"anthill\",\n \"anthology\",\n \"antibody\",\n \"antics\",\n \"antidote\",\n \"antihero\",\n \"antiquely\",\n \"antiques\",\n \"antiquity\",\n \"antirust\",\n \"antitoxic\",\n \"antitrust\",\n \"antiviral\",\n \"antivirus\",\n \"antler\",\n \"antonym\",\n \"antsy\",\n \"anvil\",\n \"anybody\",\n \"anyhow\",\n \"anymore\",\n \"anyone\",\n \"anyplace\",\n \"anything\",\n \"anytime\",\n \"anyway\",\n \"anywhere\",\n \"aorta\",\n \"apache\",\n \"apostle\",\n \"appealing\",\n \"appear\",\n \"appease\",\n \"appeasing\",\n \"appendage\",\n \"appendix\",\n \"appetite\",\n \"appetizer\",\n \"applaud\",\n \"applause\",\n \"apple\",\n \"appliance\",\n \"applicant\",\n \"applied\",\n \"apply\",\n \"appointee\",\n \"appraisal\",\n \"appraiser\",\n \"apprehend\",\n \"approach\",\n \"approval\",\n \"approve\",\n \"apricot\",\n \"april\",\n \"apron\",\n \"aptitude\",\n \"aptly\",\n \"aqua\",\n \"aqueduct\",\n \"arbitrary\",\n \"arbitrate\",\n \"ardently\",\n \"area\",\n \"arena\",\n \"arguable\",\n \"arguably\",\n \"argue\",\n \"arise\",\n \"armadillo\",\n \"armband\",\n \"armchair\",\n \"armed\",\n \"armful\",\n \"armhole\",\n \"arming\",\n \"armless\",\n \"armoire\",\n \"armored\",\n \"armory\",\n \"armrest\",\n \"army\",\n \"aroma\",\n \"arose\",\n \"around\",\n \"arousal\",\n \"arrange\",\n \"array\",\n \"arrest\",\n \"arrival\",\n \"arrive\",\n \"arrogance\",\n \"arrogant\",\n \"arson\",\n \"art\",\n \"ascend\",\n \"ascension\",\n \"ascent\",\n \"ascertain\",\n \"ashamed\",\n \"ashen\",\n \"ashes\",\n \"ashy\",\n \"aside\",\n \"askew\",\n \"asleep\",\n \"asparagus\",\n \"aspect\",\n \"aspirate\",\n \"aspire\",\n \"aspirin\",\n \"astonish\",\n \"astound\",\n \"astride\",\n \"astrology\",\n \"astronaut\",\n \"astronomy\",\n \"astute\",\n \"atlantic\",\n \"atlas\",\n \"atom\",\n \"atonable\",\n \"atop\",\n \"atrium\",\n \"atrocious\",\n \"atrophy\",\n \"attach\",\n \"attain\",\n \"attempt\",\n \"attendant\",\n \"attendee\",\n \"attention\",\n \"attentive\",\n \"attest\",\n \"attic\",\n \"attire\",\n \"attitude\",\n \"attractor\",\n \"attribute\",\n \"atypical\",\n \"auction\",\n \"audacious\",\n \"audacity\",\n \"audible\",\n \"audibly\",\n \"audience\",\n \"audio\",\n \"audition\",\n \"augmented\",\n \"august\",\n \"authentic\",\n \"author\",\n \"autism\",\n \"autistic\",\n \"autograph\",\n \"automaker\",\n \"automated\",\n \"automatic\",\n \"autopilot\",\n \"available\",\n \"avalanche\",\n \"avatar\",\n \"avenge\",\n \"avenging\",\n \"avenue\",\n \"average\",\n \"aversion\",\n \"avert\",\n \"aviation\",\n \"aviator\",\n \"avid\",\n \"avoid\",\n \"await\",\n \"awaken\",\n \"award\",\n \"aware\",\n \"awhile\",\n \"awkward\",\n \"awning\",\n \"awoke\",\n \"awry\",\n \"axis\",\n \"babble\",\n \"babbling\",\n \"babied\",\n \"baboon\",\n \"backache\",\n \"backboard\",\n \"backboned\",\n \"backdrop\",\n \"backed\",\n \"backer\",\n \"backfield\",\n \"backfire\",\n \"backhand\",\n \"backing\",\n \"backlands\",\n \"backlash\",\n \"backless\",\n \"backlight\",\n \"backlit\",\n \"backlog\",\n \"backpack\",\n \"backpedal\",\n \"backrest\",\n \"backroom\",\n \"backshift\",\n \"backside\",\n \"backslid\",\n \"backspace\",\n \"backspin\",\n \"backstab\",\n \"backstage\",\n \"backtalk\",\n \"backtrack\",\n \"backup\",\n \"backward\",\n \"backwash\",\n \"backwater\",\n \"backyard\",\n \"bacon\",\n \"bacteria\",\n \"bacterium\",\n \"badass\",\n \"badge\",\n \"badland\",\n \"badly\",\n \"badness\",\n \"baffle\",\n \"baffling\",\n \"bagel\",\n \"bagful\",\n \"baggage\",\n \"bagged\",\n \"baggie\",\n \"bagginess\",\n \"bagging\",\n \"baggy\",\n \"bagpipe\",\n \"baguette\",\n \"baked\",\n \"bakery\",\n \"bakeshop\",\n \"baking\",\n \"balance\",\n \"balancing\",\n \"balcony\",\n \"balmy\",\n \"balsamic\",\n \"bamboo\",\n \"banana\",\n \"banish\",\n \"banister\",\n \"banjo\",\n \"bankable\",\n \"bankbook\",\n \"banked\",\n \"banker\",\n \"banking\",\n \"banknote\",\n \"bankroll\",\n \"banner\",\n \"bannister\",\n \"banshee\",\n \"banter\",\n \"barbecue\",\n \"barbed\",\n \"barbell\",\n \"barber\",\n \"barcode\",\n \"barge\",\n \"bargraph\",\n \"barista\",\n \"baritone\",\n \"barley\",\n \"barmaid\",\n \"barman\",\n \"barn\",\n \"barometer\",\n \"barrack\",\n \"barracuda\",\n \"barrel\",\n \"barrette\",\n \"barricade\",\n \"barrier\",\n \"barstool\",\n \"bartender\",\n \"barterer\",\n \"bash\",\n \"basically\",\n \"basics\",\n \"basil\",\n \"basin\",\n \"basis\",\n \"basket\",\n \"batboy\",\n \"batch\",\n \"bath\",\n \"baton\",\n \"bats\",\n \"battalion\",\n \"battered\",\n \"battering\",\n \"battery\",\n \"batting\",\n \"battle\",\n \"bauble\",\n \"bazooka\",\n \"blabber\",\n \"bladder\",\n \"blade\",\n \"blah\",\n \"blame\",\n \"blaming\",\n \"blanching\",\n \"blandness\",\n \"blank\",\n \"blaspheme\",\n \"blasphemy\",\n \"blast\",\n \"blatancy\",\n \"blatantly\",\n \"blazer\",\n \"blazing\",\n \"bleach\",\n \"bleak\",\n \"bleep\",\n \"blemish\",\n \"blend\",\n \"bless\",\n \"blighted\",\n \"blimp\",\n \"bling\",\n \"blinked\",\n \"blinker\",\n \"blinking\",\n \"blinks\",\n \"blip\",\n \"blissful\",\n \"blitz\",\n \"blizzard\",\n \"bloated\",\n \"bloating\",\n \"blob\",\n \"blog\",\n \"bloomers\",\n \"blooming\",\n \"blooper\",\n \"blot\",\n \"blouse\",\n \"blubber\",\n \"bluff\",\n \"bluish\",\n \"blunderer\",\n \"blunt\",\n \"blurb\",\n \"blurred\",\n \"blurry\",\n \"blurt\",\n \"blush\",\n \"blustery\",\n \"boaster\",\n \"boastful\",\n \"boasting\",\n \"boat\",\n \"bobbed\",\n \"bobbing\",\n \"bobble\",\n \"bobcat\",\n \"bobsled\",\n \"bobtail\",\n \"bodacious\",\n \"body\",\n \"bogged\",\n \"boggle\",\n \"bogus\",\n \"boil\",\n \"bok\",\n \"bolster\",\n \"bolt\",\n \"bonanza\",\n \"bonded\",\n \"bonding\",\n \"bondless\",\n \"boned\",\n \"bonehead\",\n \"boneless\",\n \"bonelike\",\n \"boney\",\n \"bonfire\",\n \"bonnet\",\n \"bonsai\",\n \"bonus\",\n \"bony\",\n \"boogeyman\",\n \"boogieman\",\n \"book\",\n \"boondocks\",\n \"booted\",\n \"booth\",\n \"bootie\",\n \"booting\",\n \"bootlace\",\n \"bootleg\",\n \"boots\",\n \"boozy\",\n \"borax\",\n \"boring\",\n \"borough\",\n \"borrower\",\n \"borrowing\",\n \"boss\",\n \"botanical\",\n \"botanist\",\n \"botany\",\n \"botch\",\n \"both\",\n \"bottle\",\n \"bottling\",\n \"bottom\",\n \"bounce\",\n \"bouncing\",\n \"bouncy\",\n \"bounding\",\n \"boundless\",\n \"bountiful\",\n \"bovine\",\n \"boxcar\",\n \"boxer\",\n \"boxing\",\n \"boxlike\",\n \"boxy\",\n \"breach\",\n \"breath\",\n \"breeches\",\n \"breeching\",\n \"breeder\",\n \"breeding\",\n \"breeze\",\n \"breezy\",\n \"brethren\",\n \"brewery\",\n \"brewing\",\n \"briar\",\n \"bribe\",\n \"brick\",\n \"bride\",\n \"bridged\",\n \"brigade\",\n \"bright\",\n \"brilliant\",\n \"brim\",\n \"bring\",\n \"brink\",\n \"brisket\",\n \"briskly\",\n \"briskness\",\n \"bristle\",\n \"brittle\",\n \"broadband\",\n \"broadcast\",\n \"broaden\",\n \"broadly\",\n \"broadness\",\n \"broadside\",\n \"broadways\",\n \"broiler\",\n \"broiling\",\n \"broken\",\n \"broker\",\n \"bronchial\",\n \"bronco\",\n \"bronze\",\n \"bronzing\",\n \"brook\",\n \"broom\",\n \"brought\",\n \"browbeat\",\n \"brownnose\",\n \"browse\",\n \"browsing\",\n \"bruising\",\n \"brunch\",\n \"brunette\",\n \"brunt\",\n \"brush\",\n \"brussels\",\n \"brute\",\n \"brutishly\",\n \"bubble\",\n \"bubbling\",\n \"bubbly\",\n \"buccaneer\",\n \"bucked\",\n \"bucket\",\n \"buckle\",\n \"buckshot\",\n \"buckskin\",\n \"bucktooth\",\n \"buckwheat\",\n \"buddhism\",\n \"buddhist\",\n \"budding\",\n \"buddy\",\n \"budget\",\n \"buffalo\",\n \"buffed\",\n \"buffer\",\n \"buffing\",\n \"buffoon\",\n \"buggy\",\n \"bulb\",\n \"bulge\",\n \"bulginess\",\n \"bulgur\",\n \"bulk\",\n \"bulldog\",\n \"bulldozer\",\n \"bullfight\",\n \"bullfrog\",\n \"bullhorn\",\n \"bullion\",\n \"bullish\",\n \"bullpen\",\n \"bullring\",\n \"bullseye\",\n \"bullwhip\",\n \"bully\",\n \"bunch\",\n \"bundle\",\n \"bungee\",\n \"bunion\",\n \"bunkbed\",\n \"bunkhouse\",\n \"bunkmate\",\n \"bunny\",\n \"bunt\",\n \"busboy\",\n \"bush\",\n \"busily\",\n \"busload\",\n \"bust\",\n \"busybody\",\n \"buzz\",\n \"cabana\",\n \"cabbage\",\n \"cabbie\",\n \"cabdriver\",\n \"cable\",\n \"caboose\",\n \"cache\",\n \"cackle\",\n \"cacti\",\n \"cactus\",\n \"caddie\",\n \"caddy\",\n \"cadet\",\n \"cadillac\",\n \"cadmium\",\n \"cage\",\n \"cahoots\",\n \"cake\",\n \"calamari\",\n \"calamity\",\n \"calcium\",\n \"calculate\",\n \"calculus\",\n \"caliber\",\n \"calibrate\",\n \"calm\",\n \"caloric\",\n \"calorie\",\n \"calzone\",\n \"camcorder\",\n \"cameo\",\n \"camera\",\n \"camisole\",\n \"camper\",\n \"campfire\",\n \"camping\",\n \"campsite\",\n \"campus\",\n \"canal\",\n \"canary\",\n \"cancel\",\n \"candied\",\n \"candle\",\n \"candy\",\n \"cane\",\n \"canine\",\n \"canister\",\n \"cannabis\",\n \"canned\",\n \"canning\",\n \"cannon\",\n \"cannot\",\n \"canola\",\n \"canon\",\n \"canopener\",\n \"canopy\",\n \"canteen\",\n \"canyon\",\n \"capable\",\n \"capably\",\n \"capacity\",\n \"cape\",\n \"capillary\",\n \"capital\",\n \"capitol\",\n \"capped\",\n \"capricorn\",\n \"capsize\",\n \"capsule\",\n \"caption\",\n \"captivate\",\n \"captive\",\n \"captivity\",\n \"capture\",\n \"caramel\",\n \"carat\",\n \"caravan\",\n \"carbon\",\n \"cardboard\",\n \"carded\",\n \"cardiac\",\n \"cardigan\",\n \"cardinal\",\n \"cardstock\",\n \"carefully\",\n \"caregiver\",\n \"careless\",\n \"caress\",\n \"caretaker\",\n \"cargo\",\n \"caring\",\n \"carless\",\n \"carload\",\n \"carmaker\",\n \"carnage\",\n \"carnation\",\n \"carnival\",\n \"carnivore\",\n \"carol\",\n \"carpenter\",\n \"carpentry\",\n \"carpool\",\n \"carport\",\n \"carried\",\n \"carrot\",\n \"carrousel\",\n \"carry\",\n \"cartel\",\n \"cartload\",\n \"carton\",\n \"cartoon\",\n \"cartridge\",\n \"cartwheel\",\n \"carve\",\n \"carving\",\n \"carwash\",\n \"cascade\",\n \"case\",\n \"cash\",\n \"casing\",\n \"casino\",\n \"casket\",\n \"cassette\",\n \"casually\",\n \"casualty\",\n \"catacomb\",\n \"catalog\",\n \"catalyst\",\n \"catalyze\",\n \"catapult\",\n \"cataract\",\n \"catatonic\",\n \"catcall\",\n \"catchable\",\n \"catcher\",\n \"catching\",\n \"catchy\",\n \"caterer\",\n \"catering\",\n \"catfight\",\n \"catfish\",\n \"cathedral\",\n \"cathouse\",\n \"catlike\",\n \"catnap\",\n \"catnip\",\n \"catsup\",\n \"cattail\",\n \"cattishly\",\n \"cattle\",\n \"catty\",\n \"catwalk\",\n \"caucasian\",\n \"caucus\",\n \"causal\",\n \"causation\",\n \"cause\",\n \"causing\",\n \"cauterize\",\n \"caution\",\n \"cautious\",\n \"cavalier\",\n \"cavalry\",\n \"caviar\",\n \"cavity\",\n \"cedar\",\n \"celery\",\n \"celestial\",\n \"celibacy\",\n \"celibate\",\n \"celtic\",\n \"cement\",\n \"census\",\n \"ceramics\",\n \"ceremony\",\n \"certainly\",\n \"certainty\",\n \"certified\",\n \"certify\",\n \"cesarean\",\n \"cesspool\",\n \"chafe\",\n \"chaffing\",\n \"chain\",\n \"chair\",\n \"chalice\",\n \"challenge\",\n \"chamber\",\n \"chamomile\",\n \"champion\",\n \"chance\",\n \"change\",\n \"channel\",\n \"chant\",\n \"chaos\",\n \"chaperone\",\n \"chaplain\",\n \"chapped\",\n \"chaps\",\n \"chapter\",\n \"character\",\n \"charbroil\",\n \"charcoal\",\n \"charger\",\n \"charging\",\n \"chariot\",\n \"charity\",\n \"charm\",\n \"charred\",\n \"charter\",\n \"charting\",\n \"chase\",\n \"chasing\",\n \"chaste\",\n \"chastise\",\n \"chastity\",\n \"chatroom\",\n \"chatter\",\n \"chatting\",\n \"chatty\",\n \"cheating\",\n \"cheddar\",\n \"cheek\",\n \"cheer\",\n \"cheese\",\n \"cheesy\",\n \"chef\",\n \"chemicals\",\n \"chemist\",\n \"chemo\",\n \"cherisher\",\n \"cherub\",\n \"chess\",\n \"chest\",\n \"chevron\",\n \"chevy\",\n \"chewable\",\n \"chewer\",\n \"chewing\",\n \"chewy\",\n \"chief\",\n \"chihuahua\",\n \"childcare\",\n \"childhood\",\n \"childish\",\n \"childless\",\n \"childlike\",\n \"chili\",\n \"chill\",\n \"chimp\",\n \"chip\",\n \"chirping\",\n \"chirpy\",\n \"chitchat\",\n \"chivalry\",\n \"chive\",\n \"chloride\",\n \"chlorine\",\n \"choice\",\n \"chokehold\",\n \"choking\",\n \"chomp\",\n \"chooser\",\n \"choosing\",\n \"choosy\",\n \"chop\",\n \"chosen\",\n \"chowder\",\n \"chowtime\",\n \"chrome\",\n \"chubby\",\n \"chuck\",\n \"chug\",\n \"chummy\",\n \"chump\",\n \"chunk\",\n \"churn\",\n \"chute\",\n \"cider\",\n \"cilantro\",\n \"cinch\",\n \"cinema\",\n \"cinnamon\",\n \"circle\",\n \"circling\",\n \"circular\",\n \"circulate\",\n \"circus\",\n \"citable\",\n \"citadel\",\n \"citation\",\n \"citizen\",\n \"citric\",\n \"citrus\",\n \"city\",\n \"civic\",\n \"civil\",\n \"clad\",\n \"claim\",\n \"clambake\",\n \"clammy\",\n \"clamor\",\n \"clamp\",\n \"clamshell\",\n \"clang\",\n \"clanking\",\n \"clapped\",\n \"clapper\",\n \"clapping\",\n \"clarify\",\n \"clarinet\",\n \"clarity\",\n \"clash\",\n \"clasp\",\n \"class\",\n \"clatter\",\n \"clause\",\n \"clavicle\",\n \"claw\",\n \"clay\",\n \"clean\",\n \"clear\",\n \"cleat\",\n \"cleaver\",\n \"cleft\",\n \"clench\",\n \"clergyman\",\n \"clerical\",\n \"clerk\",\n \"clever\",\n \"clicker\",\n \"client\",\n \"climate\",\n \"climatic\",\n \"cling\",\n \"clinic\",\n \"clinking\",\n \"clip\",\n \"clique\",\n \"cloak\",\n \"clobber\",\n \"clock\",\n \"clone\",\n \"cloning\",\n \"closable\",\n \"closure\",\n \"clothes\",\n \"clothing\",\n \"cloud\",\n \"clover\",\n \"clubbed\",\n \"clubbing\",\n \"clubhouse\",\n \"clump\",\n \"clumsily\",\n \"clumsy\",\n \"clunky\",\n \"clustered\",\n \"clutch\",\n \"clutter\",\n \"coach\",\n \"coagulant\",\n \"coastal\",\n \"coaster\",\n \"coasting\",\n \"coastland\",\n \"coastline\",\n \"coat\",\n \"coauthor\",\n \"cobalt\",\n \"cobbler\",\n \"cobweb\",\n \"cocoa\",\n \"coconut\",\n \"cod\",\n \"coeditor\",\n \"coerce\",\n \"coexist\",\n \"coffee\",\n \"cofounder\",\n \"cognition\",\n \"cognitive\",\n \"cogwheel\",\n \"coherence\",\n \"coherent\",\n \"cohesive\",\n \"coil\",\n \"coke\",\n \"cola\",\n \"cold\",\n \"coleslaw\",\n \"coliseum\",\n \"collage\",\n \"collapse\",\n \"collar\",\n \"collected\",\n \"collector\",\n \"collide\",\n \"collie\",\n \"collision\",\n \"colonial\",\n \"colonist\",\n \"colonize\",\n \"colony\",\n \"colossal\",\n \"colt\",\n \"coma\",\n \"come\",\n \"comfort\",\n \"comfy\",\n \"comic\",\n \"coming\",\n \"comma\",\n \"commence\",\n \"commend\",\n \"comment\",\n \"commerce\",\n \"commode\",\n \"commodity\",\n \"commodore\",\n \"common\",\n \"commotion\",\n \"commute\",\n \"commuting\",\n \"compacted\",\n \"compacter\",\n \"compactly\",\n \"compactor\",\n \"companion\",\n \"company\",\n \"compare\",\n \"compel\",\n \"compile\",\n \"comply\",\n \"component\",\n \"composed\",\n \"composer\",\n \"composite\",\n \"compost\",\n \"composure\",\n \"compound\",\n \"compress\",\n \"comprised\",\n \"computer\",\n \"computing\",\n \"comrade\",\n \"concave\",\n \"conceal\",\n \"conceded\",\n \"concept\",\n \"concerned\",\n \"concert\",\n \"conch\",\n \"concierge\",\n \"concise\",\n \"conclude\",\n \"concrete\",\n \"concur\",\n \"condense\",\n \"condiment\",\n \"condition\",\n \"condone\",\n \"conducive\",\n \"conductor\",\n \"conduit\",\n \"cone\",\n \"confess\",\n \"confetti\",\n \"confidant\",\n \"confident\",\n \"confider\",\n \"confiding\",\n \"configure\",\n \"confined\",\n \"confining\",\n \"confirm\",\n \"conflict\",\n \"conform\",\n \"confound\",\n \"confront\",\n \"confused\",\n \"confusing\",\n \"confusion\",\n \"congenial\",\n \"congested\",\n \"congrats\",\n \"congress\",\n \"conical\",\n \"conjoined\",\n \"conjure\",\n \"conjuror\",\n \"connected\",\n \"connector\",\n \"consensus\",\n \"consent\",\n \"console\",\n \"consoling\",\n \"consonant\",\n \"constable\",\n \"constant\",\n \"constrain\",\n \"constrict\",\n \"construct\",\n \"consult\",\n \"consumer\",\n \"consuming\",\n \"contact\",\n \"container\",\n \"contempt\",\n \"contend\",\n \"contented\",\n \"contently\",\n \"contents\",\n \"contest\",\n \"context\",\n \"contort\",\n \"contour\",\n \"contrite\",\n \"control\",\n \"contusion\",\n \"convene\",\n \"convent\",\n \"copartner\",\n \"cope\",\n \"copied\",\n \"copier\",\n \"copilot\",\n \"coping\",\n \"copious\",\n \"copper\",\n \"copy\",\n \"coral\",\n \"cork\",\n \"cornball\",\n \"cornbread\",\n \"corncob\",\n \"cornea\",\n \"corned\",\n \"corner\",\n \"cornfield\",\n \"cornflake\",\n \"cornhusk\",\n \"cornmeal\",\n \"cornstalk\",\n \"corny\",\n \"coronary\",\n \"coroner\",\n \"corporal\",\n \"corporate\",\n \"corral\",\n \"correct\",\n \"corridor\",\n \"corrode\",\n \"corroding\",\n \"corrosive\",\n \"corsage\",\n \"corset\",\n \"cortex\",\n \"cosigner\",\n \"cosmetics\",\n \"cosmic\",\n \"cosmos\",\n \"cosponsor\",\n \"cost\",\n \"cottage\",\n \"cotton\",\n \"couch\",\n \"cough\",\n \"could\",\n \"countable\",\n \"countdown\",\n \"counting\",\n \"countless\",\n \"country\",\n \"county\",\n \"courier\",\n \"covenant\",\n \"cover\",\n \"coveted\",\n \"coveting\",\n \"coyness\",\n \"cozily\",\n \"coziness\",\n \"cozy\",\n \"crabbing\",\n \"crabgrass\",\n \"crablike\",\n \"crabmeat\",\n \"cradle\",\n \"cradling\",\n \"crafter\",\n \"craftily\",\n \"craftsman\",\n \"craftwork\",\n \"crafty\",\n \"cramp\",\n \"cranberry\",\n \"crane\",\n \"cranial\",\n \"cranium\",\n \"crank\",\n \"crate\",\n \"crave\",\n \"craving\",\n \"crawfish\",\n \"crawlers\",\n \"crawling\",\n \"crayfish\",\n \"crayon\",\n \"crazed\",\n \"crazily\",\n \"craziness\",\n \"crazy\",\n \"creamed\",\n \"creamer\",\n \"creamlike\",\n \"crease\",\n \"creasing\",\n \"creatable\",\n \"create\",\n \"creation\",\n \"creative\",\n \"creature\",\n \"credible\",\n \"credibly\",\n \"credit\",\n \"creed\",\n \"creme\",\n \"creole\",\n \"crepe\",\n \"crept\",\n \"crescent\",\n \"crested\",\n \"cresting\",\n \"crestless\",\n \"crevice\",\n \"crewless\",\n \"crewman\",\n \"crewmate\",\n \"crib\",\n \"cricket\",\n \"cried\",\n \"crier\",\n \"crimp\",\n \"crimson\",\n \"cringe\",\n \"cringing\",\n \"crinkle\",\n \"crinkly\",\n \"crisped\",\n \"crisping\",\n \"crisply\",\n \"crispness\",\n \"crispy\",\n \"criteria\",\n \"critter\",\n \"croak\",\n \"crock\",\n \"crook\",\n \"croon\",\n \"crop\",\n \"cross\",\n \"crouch\",\n \"crouton\",\n \"crowbar\",\n \"crowd\",\n \"crown\",\n \"crucial\",\n \"crudely\",\n \"crudeness\",\n \"cruelly\",\n \"cruelness\",\n \"cruelty\",\n \"crumb\",\n \"crummiest\",\n \"crummy\",\n \"crumpet\",\n \"crumpled\",\n \"cruncher\",\n \"crunching\",\n \"crunchy\",\n \"crusader\",\n \"crushable\",\n \"crushed\",\n \"crusher\",\n \"crushing\",\n \"crust\",\n \"crux\",\n \"crying\",\n \"cryptic\",\n \"crystal\",\n \"cubbyhole\",\n \"cube\",\n \"cubical\",\n \"cubicle\",\n \"cucumber\",\n \"cuddle\",\n \"cuddly\",\n \"cufflink\",\n \"culinary\",\n \"culminate\",\n \"culpable\",\n \"culprit\",\n \"cultivate\",\n \"cultural\",\n \"culture\",\n \"cupbearer\",\n \"cupcake\",\n \"cupid\",\n \"cupped\",\n \"cupping\",\n \"curable\",\n \"curator\",\n \"curdle\",\n \"cure\",\n \"curfew\",\n \"curing\",\n \"curled\",\n \"curler\",\n \"curliness\",\n \"curling\",\n \"curly\",\n \"curry\",\n \"curse\",\n \"cursive\",\n \"cursor\",\n \"curtain\",\n \"curtly\",\n \"curtsy\",\n \"curvature\",\n \"curve\",\n \"curvy\",\n \"cushy\",\n \"cusp\",\n \"cussed\",\n \"custard\",\n \"custodian\",\n \"custody\",\n \"customary\",\n \"customer\",\n \"customize\",\n \"customs\",\n \"cut\",\n \"cycle\",\n \"cyclic\",\n \"cycling\",\n \"cyclist\",\n \"cylinder\",\n \"cymbal\",\n \"cytoplasm\",\n \"cytoplast\",\n \"dab\",\n \"dad\",\n \"daffodil\",\n \"dagger\",\n \"daily\",\n \"daintily\",\n \"dainty\",\n \"dairy\",\n \"daisy\",\n \"dallying\",\n \"dance\",\n \"dancing\",\n \"dandelion\",\n \"dander\",\n \"dandruff\",\n \"dandy\",\n \"danger\",\n \"dangle\",\n \"dangling\",\n \"daredevil\",\n \"dares\",\n \"daringly\",\n \"darkened\",\n \"darkening\",\n \"darkish\",\n \"darkness\",\n \"darkroom\",\n \"darling\",\n \"darn\",\n \"dart\",\n \"darwinism\",\n \"dash\",\n \"dastardly\",\n \"data\",\n \"datebook\",\n \"dating\",\n \"daughter\",\n \"daunting\",\n \"dawdler\",\n \"dawn\",\n \"daybed\",\n \"daybreak\",\n \"daycare\",\n \"daydream\",\n \"daylight\",\n \"daylong\",\n \"dayroom\",\n \"daytime\",\n \"dazzler\",\n \"dazzling\",\n \"deacon\",\n \"deafening\",\n \"deafness\",\n \"dealer\",\n \"dealing\",\n \"dealmaker\",\n \"dealt\",\n \"dean\",\n \"debatable\",\n \"debate\",\n \"debating\",\n \"debit\",\n \"debrief\",\n \"debtless\",\n \"debtor\",\n \"debug\",\n \"debunk\",\n \"decade\",\n \"decaf\",\n \"decal\",\n \"decathlon\",\n \"decay\",\n \"deceased\",\n \"deceit\",\n \"deceiver\",\n \"deceiving\",\n \"december\",\n \"decency\",\n \"decent\",\n \"deception\",\n \"deceptive\",\n \"decibel\",\n \"decidable\",\n \"decimal\",\n \"decimeter\",\n \"decipher\",\n \"deck\",\n \"declared\",\n \"decline\",\n \"decode\",\n \"decompose\",\n \"decorated\",\n \"decorator\",\n \"decoy\",\n \"decrease\",\n \"decree\",\n \"dedicate\",\n \"dedicator\",\n \"deduce\",\n \"deduct\",\n \"deed\",\n \"deem\",\n \"deepen\",\n \"deeply\",\n \"deepness\",\n \"deface\",\n \"defacing\",\n \"defame\",\n \"default\",\n \"defeat\",\n \"defection\",\n \"defective\",\n \"defendant\",\n \"defender\",\n \"defense\",\n \"defensive\",\n \"deferral\",\n \"deferred\",\n \"defiance\",\n \"defiant\",\n \"defile\",\n \"defiling\",\n \"define\",\n \"definite\",\n \"deflate\",\n \"deflation\",\n \"deflator\",\n \"deflected\",\n \"deflector\",\n \"defog\",\n \"deforest\",\n \"defraud\",\n \"defrost\",\n \"deftly\",\n \"defuse\",\n \"defy\",\n \"degraded\",\n \"degrading\",\n \"degrease\",\n \"degree\",\n \"dehydrate\",\n \"deity\",\n \"dejected\",\n \"delay\",\n \"delegate\",\n \"delegator\",\n \"delete\",\n \"deletion\",\n \"delicacy\",\n \"delicate\",\n \"delicious\",\n \"delighted\",\n \"delirious\",\n \"delirium\",\n \"deliverer\",\n \"delivery\",\n \"delouse\",\n \"delta\",\n \"deluge\",\n \"delusion\",\n \"deluxe\",\n \"demanding\",\n \"demeaning\",\n \"demeanor\",\n \"demise\",\n \"democracy\",\n \"democrat\",\n \"demote\",\n \"demotion\",\n \"demystify\",\n \"denatured\",\n \"deniable\",\n \"denial\",\n \"denim\",\n \"denote\",\n \"dense\",\n \"density\",\n \"dental\",\n \"dentist\",\n \"denture\",\n \"deny\",\n \"deodorant\",\n \"deodorize\",\n \"departed\",\n \"departure\",\n \"depict\",\n \"deplete\",\n \"depletion\",\n \"deplored\",\n \"deploy\",\n \"deport\",\n \"depose\",\n \"depraved\",\n \"depravity\",\n \"deprecate\",\n \"depress\",\n \"deprive\",\n \"depth\",\n \"deputize\",\n \"deputy\",\n \"derail\",\n \"deranged\",\n \"derby\",\n \"derived\",\n \"desecrate\",\n \"deserve\",\n \"deserving\",\n \"designate\",\n \"designed\",\n \"designer\",\n \"designing\",\n \"deskbound\",\n \"desktop\",\n \"deskwork\",\n \"desolate\",\n \"despair\",\n \"despise\",\n \"despite\",\n \"destiny\",\n \"destitute\",\n \"destruct\",\n \"detached\",\n \"detail\",\n \"detection\",\n \"detective\",\n \"detector\",\n \"detention\",\n \"detergent\",\n \"detest\",\n \"detonate\",\n \"detonator\",\n \"detoxify\",\n \"detract\",\n \"deuce\",\n \"devalue\",\n \"deviancy\",\n \"deviant\",\n \"deviate\",\n \"deviation\",\n \"deviator\",\n \"device\",\n \"devious\",\n \"devotedly\",\n \"devotee\",\n \"devotion\",\n \"devourer\",\n \"devouring\",\n \"devoutly\",\n \"dexterity\",\n \"dexterous\",\n \"diabetes\",\n \"diabetic\",\n \"diabolic\",\n \"diagnoses\",\n \"diagnosis\",\n \"diagram\",\n \"dial\",\n \"diameter\",\n \"diaper\",\n \"diaphragm\",\n \"diary\",\n \"dice\",\n \"dicing\",\n \"dictate\",\n \"dictation\",\n \"dictator\",\n \"difficult\",\n \"diffused\",\n \"diffuser\",\n \"diffusion\",\n \"diffusive\",\n \"dig\",\n \"dilation\",\n \"diligence\",\n \"diligent\",\n \"dill\",\n \"dilute\",\n \"dime\",\n \"diminish\",\n \"dimly\",\n \"dimmed\",\n \"dimmer\",\n \"dimness\",\n \"dimple\",\n \"diner\",\n \"dingbat\",\n \"dinghy\",\n \"dinginess\",\n \"dingo\",\n \"dingy\",\n \"dining\",\n \"dinner\",\n \"diocese\",\n \"dioxide\",\n \"diploma\",\n \"dipped\",\n \"dipper\",\n \"dipping\",\n \"directed\",\n \"direction\",\n \"directive\",\n \"directly\",\n \"directory\",\n \"direness\",\n \"dirtiness\",\n \"disabled\",\n \"disagree\",\n \"disallow\",\n \"disarm\",\n \"disarray\",\n \"disaster\",\n \"disband\",\n \"disbelief\",\n \"disburse\",\n \"discard\",\n \"discern\",\n \"discharge\",\n \"disclose\",\n \"discolor\",\n \"discount\",\n \"discourse\",\n \"discover\",\n \"discuss\",\n \"disdain\",\n \"disengage\",\n \"disfigure\",\n \"disgrace\",\n \"dish\",\n \"disinfect\",\n \"disjoin\",\n \"disk\",\n \"dislike\",\n \"disliking\",\n \"dislocate\",\n \"dislodge\",\n \"disloyal\",\n \"dismantle\",\n \"dismay\",\n \"dismiss\",\n \"dismount\",\n \"disobey\",\n \"disorder\",\n \"disown\",\n \"disparate\",\n \"disparity\",\n \"dispatch\",\n \"dispense\",\n \"dispersal\",\n \"dispersed\",\n \"disperser\",\n \"displace\",\n \"display\",\n \"displease\",\n \"disposal\",\n \"dispose\",\n \"disprove\",\n \"dispute\",\n \"disregard\",\n \"disrupt\",\n \"dissuade\",\n \"distance\",\n \"distant\",\n \"distaste\",\n \"distill\",\n \"distinct\",\n \"distort\",\n \"distract\",\n \"distress\",\n \"district\",\n \"distrust\",\n \"ditch\",\n \"ditto\",\n \"ditzy\",\n \"dividable\",\n \"divided\",\n \"dividend\",\n \"dividers\",\n \"dividing\",\n \"divinely\",\n \"diving\",\n \"divinity\",\n \"divisible\",\n \"divisibly\",\n \"division\",\n \"divisive\",\n \"divorcee\",\n \"dizziness\",\n \"dizzy\",\n \"doable\",\n \"docile\",\n \"dock\",\n \"doctrine\",\n \"document\",\n \"dodge\",\n \"dodgy\",\n \"doily\",\n \"doing\",\n \"dole\",\n \"dollar\",\n \"dollhouse\",\n \"dollop\",\n \"dolly\",\n \"dolphin\",\n \"domain\",\n \"domelike\",\n \"domestic\",\n \"dominion\",\n \"dominoes\",\n \"donated\",\n \"donation\",\n \"donator\",\n \"donor\",\n \"donut\",\n \"doodle\",\n \"doorbell\",\n \"doorframe\",\n \"doorknob\",\n \"doorman\",\n \"doormat\",\n \"doornail\",\n \"doorpost\",\n \"doorstep\",\n \"doorstop\",\n \"doorway\",\n \"doozy\",\n \"dork\",\n \"dormitory\",\n \"dorsal\",\n \"dosage\",\n \"dose\",\n \"dotted\",\n \"doubling\",\n \"douche\",\n \"dove\",\n \"down\",\n \"dowry\",\n \"doze\",\n \"drab\",\n \"dragging\",\n \"dragonfly\",\n \"dragonish\",\n \"dragster\",\n \"drainable\",\n \"drainage\",\n \"drained\",\n \"drainer\",\n \"drainpipe\",\n \"dramatic\",\n \"dramatize\",\n \"drank\",\n \"drapery\",\n \"drastic\",\n \"draw\",\n \"dreaded\",\n \"dreadful\",\n \"dreadlock\",\n \"dreamboat\",\n \"dreamily\",\n \"dreamland\",\n \"dreamless\",\n \"dreamlike\",\n \"dreamt\",\n \"dreamy\",\n \"drearily\",\n \"dreary\",\n \"drench\",\n \"dress\",\n \"drew\",\n \"dribble\",\n \"dried\",\n \"drier\",\n \"drift\",\n \"driller\",\n \"drilling\",\n \"drinkable\",\n \"drinking\",\n \"dripping\",\n \"drippy\",\n \"drivable\",\n \"driven\",\n \"driver\",\n \"driveway\",\n \"driving\",\n \"drizzle\",\n \"drizzly\",\n \"drone\",\n \"drool\",\n \"droop\",\n \"drop-down\",\n \"dropbox\",\n \"dropkick\",\n \"droplet\",\n \"dropout\",\n \"dropper\",\n \"drove\",\n \"drown\",\n \"drowsily\",\n \"drudge\",\n \"drum\",\n \"dry\",\n \"dubbed\",\n \"dubiously\",\n \"duchess\",\n \"duckbill\",\n \"ducking\",\n \"duckling\",\n \"ducktail\",\n \"ducky\",\n \"duct\",\n \"dude\",\n \"duffel\",\n \"dugout\",\n \"duh\",\n \"duke\",\n \"duller\",\n \"dullness\",\n \"duly\",\n \"dumping\",\n \"dumpling\",\n \"dumpster\",\n \"duo\",\n \"dupe\",\n \"duplex\",\n \"duplicate\",\n \"duplicity\",\n \"durable\",\n \"durably\",\n \"duration\",\n \"duress\",\n \"during\",\n \"dusk\",\n \"dust\",\n \"dutiful\",\n \"duty\",\n \"duvet\",\n \"dwarf\",\n \"dweeb\",\n \"dwelled\",\n \"dweller\",\n \"dwelling\",\n \"dwindle\",\n \"dwindling\",\n \"dynamic\",\n \"dynamite\",\n \"dynasty\",\n \"dyslexia\",\n \"dyslexic\",\n \"each\",\n \"eagle\",\n \"earache\",\n \"eardrum\",\n \"earflap\",\n \"earful\",\n \"earlobe\",\n \"early\",\n \"earmark\",\n \"earmuff\",\n \"earphone\",\n \"earpiece\",\n \"earplugs\",\n \"earring\",\n \"earshot\",\n \"earthen\",\n \"earthlike\",\n \"earthling\",\n \"earthly\",\n \"earthworm\",\n \"earthy\",\n \"earwig\",\n \"easeful\",\n \"easel\",\n \"easiest\",\n \"easily\",\n \"easiness\",\n \"easing\",\n \"eastbound\",\n \"eastcoast\",\n \"easter\",\n \"eastward\",\n \"eatable\",\n \"eaten\",\n \"eatery\",\n \"eating\",\n \"eats\",\n \"ebay\",\n \"ebony\",\n \"ebook\",\n \"ecard\",\n \"eccentric\",\n \"echo\",\n \"eclair\",\n \"eclipse\",\n \"ecologist\",\n \"ecology\",\n \"economic\",\n \"economist\",\n \"economy\",\n \"ecosphere\",\n \"ecosystem\",\n \"edge\",\n \"edginess\",\n \"edging\",\n \"edgy\",\n \"edition\",\n \"editor\",\n \"educated\",\n \"education\",\n \"educator\",\n \"eel\",\n \"effective\",\n \"effects\",\n \"efficient\",\n \"effort\",\n \"eggbeater\",\n \"egging\",\n \"eggnog\",\n \"eggplant\",\n \"eggshell\",\n \"egomaniac\",\n \"egotism\",\n \"egotistic\",\n \"either\",\n \"eject\",\n \"elaborate\",\n \"elastic\",\n \"elated\",\n \"elbow\",\n \"eldercare\",\n \"elderly\",\n \"eldest\",\n \"electable\",\n \"election\",\n \"elective\",\n \"elephant\",\n \"elevate\",\n \"elevating\",\n \"elevation\",\n \"elevator\",\n \"eleven\",\n \"elf\",\n \"eligible\",\n \"eligibly\",\n \"eliminate\",\n \"elite\",\n \"elitism\",\n \"elixir\",\n \"elk\",\n \"ellipse\",\n \"elliptic\",\n \"elm\",\n \"elongated\",\n \"elope\",\n \"eloquence\",\n \"eloquent\",\n \"elsewhere\",\n \"elude\",\n \"elusive\",\n \"elves\",\n \"email\",\n \"embargo\",\n \"embark\",\n \"embassy\",\n \"embattled\",\n \"embellish\",\n \"ember\",\n \"embezzle\",\n \"emblaze\",\n \"emblem\",\n \"embody\",\n \"embolism\",\n \"emboss\",\n \"embroider\",\n \"emcee\",\n \"emerald\",\n \"emergency\",\n \"emission\",\n \"emit\",\n \"emote\",\n \"emoticon\",\n \"emotion\",\n \"empathic\",\n \"empathy\",\n \"emperor\",\n \"emphases\",\n \"emphasis\",\n \"emphasize\",\n \"emphatic\",\n \"empirical\",\n \"employed\",\n \"employee\",\n \"employer\",\n \"emporium\",\n \"empower\",\n \"emptier\",\n \"emptiness\",\n \"empty\",\n \"emu\",\n \"enable\",\n \"enactment\",\n \"enamel\",\n \"enchanted\",\n \"enchilada\",\n \"encircle\",\n \"enclose\",\n \"enclosure\",\n \"encode\",\n \"encore\",\n \"encounter\",\n \"encourage\",\n \"encroach\",\n \"encrust\",\n \"encrypt\",\n \"endanger\",\n \"endeared\",\n \"endearing\",\n \"ended\",\n \"ending\",\n \"endless\",\n \"endnote\",\n \"endocrine\",\n \"endorphin\",\n \"endorse\",\n \"endowment\",\n \"endpoint\",\n \"endurable\",\n \"endurance\",\n \"enduring\",\n \"energetic\",\n \"energize\",\n \"energy\",\n \"enforced\",\n \"enforcer\",\n \"engaged\",\n \"engaging\",\n \"engine\",\n \"engorge\",\n \"engraved\",\n \"engraver\",\n \"engraving\",\n \"engross\",\n \"engulf\",\n \"enhance\",\n \"enigmatic\",\n \"enjoyable\",\n \"enjoyably\",\n \"enjoyer\",\n \"enjoying\",\n \"enjoyment\",\n \"enlarged\",\n \"enlarging\",\n \"enlighten\",\n \"enlisted\",\n \"enquirer\",\n \"enrage\",\n \"enrich\",\n \"enroll\",\n \"enslave\",\n \"ensnare\",\n \"ensure\",\n \"entail\",\n \"entangled\",\n \"entering\",\n \"entertain\",\n \"enticing\",\n \"entire\",\n \"entitle\",\n \"entity\",\n \"entomb\",\n \"entourage\",\n \"entrap\",\n \"entree\",\n \"entrench\",\n \"entrust\",\n \"entryway\",\n \"entwine\",\n \"enunciate\",\n \"envelope\",\n \"enviable\",\n \"enviably\",\n \"envious\",\n \"envision\",\n \"envoy\",\n \"envy\",\n \"enzyme\",\n \"epic\",\n \"epidemic\",\n \"epidermal\",\n \"epidermis\",\n \"epidural\",\n \"epilepsy\",\n \"epileptic\",\n \"epilogue\",\n \"epiphany\",\n \"episode\",\n \"equal\",\n \"equate\",\n \"equation\",\n \"equator\",\n \"equinox\",\n \"equipment\",\n \"equity\",\n \"equivocal\",\n \"eradicate\",\n \"erasable\",\n \"erased\",\n \"eraser\",\n \"erasure\",\n \"ergonomic\",\n \"errand\",\n \"errant\",\n \"erratic\",\n \"error\",\n \"erupt\",\n \"escalate\",\n \"escalator\",\n \"escapable\",\n \"escapade\",\n \"escapist\",\n \"escargot\",\n \"eskimo\",\n \"esophagus\",\n \"espionage\",\n \"espresso\",\n \"esquire\",\n \"essay\",\n \"essence\",\n \"essential\",\n \"establish\",\n \"estate\",\n \"esteemed\",\n \"estimate\",\n \"estimator\",\n \"estranged\",\n \"estrogen\",\n \"etching\",\n \"eternal\",\n \"eternity\",\n \"ethanol\",\n \"ether\",\n \"ethically\",\n \"ethics\",\n \"euphemism\",\n \"evacuate\",\n \"evacuee\",\n \"evade\",\n \"evaluate\",\n \"evaluator\",\n \"evaporate\",\n \"evasion\",\n \"evasive\",\n \"even\",\n \"everglade\",\n \"evergreen\",\n \"everybody\",\n \"everyday\",\n \"everyone\",\n \"evict\",\n \"evidence\",\n \"evident\",\n \"evil\",\n \"evoke\",\n \"evolution\",\n \"evolve\",\n \"exact\",\n \"exalted\",\n \"example\",\n \"excavate\",\n \"excavator\",\n \"exceeding\",\n \"exception\",\n \"excess\",\n \"exchange\",\n \"excitable\",\n \"exciting\",\n \"exclaim\",\n \"exclude\",\n \"excluding\",\n \"exclusion\",\n \"exclusive\",\n \"excretion\",\n \"excretory\",\n \"excursion\",\n \"excusable\",\n \"excusably\",\n \"excuse\",\n \"exemplary\",\n \"exemplify\",\n \"exemption\",\n \"exerciser\",\n \"exert\",\n \"exes\",\n \"exfoliate\",\n \"exhale\",\n \"exhaust\",\n \"exhume\",\n \"exile\",\n \"existing\",\n \"exit\",\n \"exodus\",\n \"exonerate\",\n \"exorcism\",\n \"exorcist\",\n \"expand\",\n \"expanse\",\n \"expansion\",\n \"expansive\",\n \"expectant\",\n \"expedited\",\n \"expediter\",\n \"expel\",\n \"expend\",\n \"expenses\",\n \"expensive\",\n \"expert\",\n \"expire\",\n \"expiring\",\n \"explain\",\n \"expletive\",\n \"explicit\",\n \"explode\",\n \"exploit\",\n \"explore\",\n \"exploring\",\n \"exponent\",\n \"exporter\",\n \"exposable\",\n \"expose\",\n \"exposure\",\n \"express\",\n \"expulsion\",\n \"exquisite\",\n \"extended\",\n \"extending\",\n \"extent\",\n \"extenuate\",\n \"exterior\",\n \"external\",\n \"extinct\",\n \"extortion\",\n \"extradite\",\n \"extras\",\n \"extrovert\",\n \"extrude\",\n \"extruding\",\n \"exuberant\",\n \"fable\",\n \"fabric\",\n \"fabulous\",\n \"facebook\",\n \"facecloth\",\n \"facedown\",\n \"faceless\",\n \"facelift\",\n \"faceplate\",\n \"faceted\",\n \"facial\",\n \"facility\",\n \"facing\",\n \"facsimile\",\n \"faction\",\n \"factoid\",\n \"factor\",\n \"factsheet\",\n \"factual\",\n \"faculty\",\n \"fade\",\n \"fading\",\n \"failing\",\n \"falcon\",\n \"fall\",\n \"false\",\n \"falsify\",\n \"fame\",\n \"familiar\",\n \"family\",\n \"famine\",\n \"famished\",\n \"fanatic\",\n \"fancied\",\n \"fanciness\",\n \"fancy\",\n \"fanfare\",\n \"fang\",\n \"fanning\",\n \"fantasize\",\n \"fantastic\",\n \"fantasy\",\n \"fascism\",\n \"fastball\",\n \"faster\",\n \"fasting\",\n \"fastness\",\n \"faucet\",\n \"favorable\",\n \"favorably\",\n \"favored\",\n \"favoring\",\n \"favorite\",\n \"fax\",\n \"feast\",\n \"federal\",\n \"fedora\",\n \"feeble\",\n \"feed\",\n \"feel\",\n \"feisty\",\n \"feline\",\n \"felt-tip\",\n \"feminine\",\n \"feminism\",\n \"feminist\",\n \"feminize\",\n \"femur\",\n \"fence\",\n \"fencing\",\n \"fender\",\n \"ferment\",\n \"fernlike\",\n \"ferocious\",\n \"ferocity\",\n \"ferret\",\n \"ferris\",\n \"ferry\",\n \"fervor\",\n \"fester\",\n \"festival\",\n \"festive\",\n \"festivity\",\n \"fetal\",\n \"fetch\",\n \"fever\",\n \"fiber\",\n \"fiction\",\n \"fiddle\",\n \"fiddling\",\n \"fidelity\",\n \"fidgeting\",\n \"fidgety\",\n \"fifteen\",\n \"fifth\",\n \"fiftieth\",\n \"fifty\",\n \"figment\",\n \"figure\",\n \"figurine\",\n \"filing\",\n \"filled\",\n \"filler\",\n \"filling\",\n \"film\",\n \"filter\",\n \"filth\",\n \"filtrate\",\n \"finale\",\n \"finalist\",\n \"finalize\",\n \"finally\",\n \"finance\",\n \"financial\",\n \"finch\",\n \"fineness\",\n \"finer\",\n \"finicky\",\n \"finished\",\n \"finisher\",\n \"finishing\",\n \"finite\",\n \"finless\",\n \"finlike\",\n \"fiscally\",\n \"fit\",\n \"five\",\n \"flaccid\",\n \"flagman\",\n \"flagpole\",\n \"flagship\",\n \"flagstick\",\n \"flagstone\",\n \"flail\",\n \"flakily\",\n \"flaky\",\n \"flame\",\n \"flammable\",\n \"flanked\",\n \"flanking\",\n \"flannels\",\n \"flap\",\n \"flaring\",\n \"flashback\",\n \"flashbulb\",\n \"flashcard\",\n \"flashily\",\n \"flashing\",\n \"flashy\",\n \"flask\",\n \"flatbed\",\n \"flatfoot\",\n \"flatly\",\n \"flatness\",\n \"flatten\",\n \"flattered\",\n \"flatterer\",\n \"flattery\",\n \"flattop\",\n \"flatware\",\n \"flatworm\",\n \"flavored\",\n \"flavorful\",\n \"flavoring\",\n \"flaxseed\",\n \"fled\",\n \"fleshed\",\n \"fleshy\",\n \"flick\",\n \"flier\",\n \"flight\",\n \"flinch\",\n \"fling\",\n \"flint\",\n \"flip\",\n \"flirt\",\n \"float\",\n \"flock\",\n \"flogging\",\n \"flop\",\n \"floral\",\n \"florist\",\n \"floss\",\n \"flounder\",\n \"flyable\",\n \"flyaway\",\n \"flyer\",\n \"flying\",\n \"flyover\",\n \"flypaper\",\n \"foam\",\n \"foe\",\n \"fog\",\n \"foil\",\n \"folic\",\n \"folk\",\n \"follicle\",\n \"follow\",\n \"fondling\",\n \"fondly\",\n \"fondness\",\n \"fondue\",\n \"font\",\n \"food\",\n \"fool\",\n \"footage\",\n \"football\",\n \"footbath\",\n \"footboard\",\n \"footer\",\n \"footgear\",\n \"foothill\",\n \"foothold\",\n \"footing\",\n \"footless\",\n \"footman\",\n \"footnote\",\n \"footpad\",\n \"footpath\",\n \"footprint\",\n \"footrest\",\n \"footsie\",\n \"footsore\",\n \"footwear\",\n \"footwork\",\n \"fossil\",\n \"foster\",\n \"founder\",\n \"founding\",\n \"fountain\",\n \"fox\",\n \"foyer\",\n \"fraction\",\n \"fracture\",\n \"fragile\",\n \"fragility\",\n \"fragment\",\n \"fragrance\",\n \"fragrant\",\n \"frail\",\n \"frame\",\n \"framing\",\n \"frantic\",\n \"fraternal\",\n \"frayed\",\n \"fraying\",\n \"frays\",\n \"freckled\",\n \"freckles\",\n \"freebase\",\n \"freebee\",\n \"freebie\",\n \"freedom\",\n \"freefall\",\n \"freehand\",\n \"freeing\",\n \"freeload\",\n \"freely\",\n \"freemason\",\n \"freeness\",\n \"freestyle\",\n \"freeware\",\n \"freeway\",\n \"freewill\",\n \"freezable\",\n \"freezing\",\n \"freight\",\n \"french\",\n \"frenzied\",\n \"frenzy\",\n \"frequency\",\n \"frequent\",\n \"fresh\",\n \"fretful\",\n \"fretted\",\n \"friction\",\n \"friday\",\n \"fridge\",\n \"fried\",\n \"friend\",\n \"frighten\",\n \"frightful\",\n \"frigidity\",\n \"frigidly\",\n \"frill\",\n \"fringe\",\n \"frisbee\",\n \"frisk\",\n \"fritter\",\n \"frivolous\",\n \"frolic\",\n \"from\",\n \"front\",\n \"frostbite\",\n \"frosted\",\n \"frostily\",\n \"frosting\",\n \"frostlike\",\n \"frosty\",\n \"froth\",\n \"frown\",\n \"frozen\",\n \"fructose\",\n \"frugality\",\n \"frugally\",\n \"fruit\",\n \"frustrate\",\n \"frying\",\n \"gab\",\n \"gaffe\",\n \"gag\",\n \"gainfully\",\n \"gaining\",\n \"gains\",\n \"gala\",\n \"gallantly\",\n \"galleria\",\n \"gallery\",\n \"galley\",\n \"gallon\",\n \"gallows\",\n \"gallstone\",\n \"galore\",\n \"galvanize\",\n \"gambling\",\n \"game\",\n \"gaming\",\n \"gamma\",\n \"gander\",\n \"gangly\",\n \"gangrene\",\n \"gangway\",\n \"gap\",\n \"garage\",\n \"garbage\",\n \"garden\",\n \"gargle\",\n \"garland\",\n \"garlic\",\n \"garment\",\n \"garnet\",\n \"garnish\",\n \"garter\",\n \"gas\",\n \"gatherer\",\n \"gathering\",\n \"gating\",\n \"gauging\",\n \"gauntlet\",\n \"gauze\",\n \"gave\",\n \"gawk\",\n \"gazing\",\n \"gear\",\n \"gecko\",\n \"geek\",\n \"geiger\",\n \"gem\",\n \"gender\",\n \"generic\",\n \"generous\",\n \"genetics\",\n \"genre\",\n \"gentile\",\n \"gentleman\",\n \"gently\",\n \"gents\",\n \"geography\",\n \"geologic\",\n \"geologist\",\n \"geology\",\n \"geometric\",\n \"geometry\",\n \"geranium\",\n \"gerbil\",\n \"geriatric\",\n \"germicide\",\n \"germinate\",\n \"germless\",\n \"germproof\",\n \"gestate\",\n \"gestation\",\n \"gesture\",\n \"getaway\",\n \"getting\",\n \"getup\",\n \"giant\",\n \"gibberish\",\n \"giblet\",\n \"giddily\",\n \"giddiness\",\n \"giddy\",\n \"gift\",\n \"gigabyte\",\n \"gigahertz\",\n \"gigantic\",\n \"giggle\",\n \"giggling\",\n \"giggly\",\n \"gigolo\",\n \"gilled\",\n \"gills\",\n \"gimmick\",\n \"girdle\",\n \"giveaway\",\n \"given\",\n \"giver\",\n \"giving\",\n \"gizmo\",\n \"gizzard\",\n \"glacial\",\n \"glacier\",\n \"glade\",\n \"gladiator\",\n \"gladly\",\n \"glamorous\",\n \"glamour\",\n \"glance\",\n \"glancing\",\n \"glandular\",\n \"glare\",\n \"glaring\",\n \"glass\",\n \"glaucoma\",\n \"glazing\",\n \"gleaming\",\n \"gleeful\",\n \"glider\",\n \"gliding\",\n \"glimmer\",\n \"glimpse\",\n \"glisten\",\n \"glitch\",\n \"glitter\",\n \"glitzy\",\n \"gloater\",\n \"gloating\",\n \"gloomily\",\n \"gloomy\",\n \"glorified\",\n \"glorifier\",\n \"glorify\",\n \"glorious\",\n \"glory\",\n \"gloss\",\n \"glove\",\n \"glowing\",\n \"glowworm\",\n \"glucose\",\n \"glue\",\n \"gluten\",\n \"glutinous\",\n \"glutton\",\n \"gnarly\",\n \"gnat\",\n \"goal\",\n \"goatskin\",\n \"goes\",\n \"goggles\",\n \"going\",\n \"goldfish\",\n \"goldmine\",\n \"goldsmith\",\n \"golf\",\n \"goliath\",\n \"gonad\",\n \"gondola\",\n \"gone\",\n \"gong\",\n \"good\",\n \"gooey\",\n \"goofball\",\n \"goofiness\",\n \"goofy\",\n \"google\",\n \"goon\",\n \"gopher\",\n \"gore\",\n \"gorged\",\n \"gorgeous\",\n \"gory\",\n \"gosling\",\n \"gossip\",\n \"gothic\",\n \"gotten\",\n \"gout\",\n \"gown\",\n \"grab\",\n \"graceful\",\n \"graceless\",\n \"gracious\",\n \"gradation\",\n \"graded\",\n \"grader\",\n \"gradient\",\n \"grading\",\n \"gradually\",\n \"graduate\",\n \"graffiti\",\n \"grafted\",\n \"grafting\",\n \"grain\",\n \"granddad\",\n \"grandkid\",\n \"grandly\",\n \"grandma\",\n \"grandpa\",\n \"grandson\",\n \"granite\",\n \"granny\",\n \"granola\",\n \"grant\",\n \"granular\",\n \"grape\",\n \"graph\",\n \"grapple\",\n \"grappling\",\n \"grasp\",\n \"grass\",\n \"gratified\",\n \"gratify\",\n \"grating\",\n \"gratitude\",\n \"gratuity\",\n \"gravel\",\n \"graveness\",\n \"graves\",\n \"graveyard\",\n \"gravitate\",\n \"gravity\",\n \"gravy\",\n \"gray\",\n \"grazing\",\n \"greasily\",\n \"greedily\",\n \"greedless\",\n \"greedy\",\n \"green\",\n \"greeter\",\n \"greeting\",\n \"grew\",\n \"greyhound\",\n \"grid\",\n \"grief\",\n \"grievance\",\n \"grieving\",\n \"grievous\",\n \"grill\",\n \"grimace\",\n \"grimacing\",\n \"grime\",\n \"griminess\",\n \"grimy\",\n \"grinch\",\n \"grinning\",\n \"grip\",\n \"gristle\",\n \"grit\",\n \"groggily\",\n \"groggy\",\n \"groin\",\n \"groom\",\n \"groove\",\n \"grooving\",\n \"groovy\",\n \"grope\",\n \"ground\",\n \"grouped\",\n \"grout\",\n \"grove\",\n \"grower\",\n \"growing\",\n \"growl\",\n \"grub\",\n \"grudge\",\n \"grudging\",\n \"grueling\",\n \"gruffly\",\n \"grumble\",\n \"grumbling\",\n \"grumbly\",\n \"grumpily\",\n \"grunge\",\n \"grunt\",\n \"guacamole\",\n \"guidable\",\n \"guidance\",\n \"guide\",\n \"guiding\",\n \"guileless\",\n \"guise\",\n \"gulf\",\n \"gullible\",\n \"gully\",\n \"gulp\",\n \"gumball\",\n \"gumdrop\",\n \"gumminess\",\n \"gumming\",\n \"gummy\",\n \"gurgle\",\n \"gurgling\",\n \"guru\",\n \"gush\",\n \"gusto\",\n \"gusty\",\n \"gutless\",\n \"guts\",\n \"gutter\",\n \"guy\",\n \"guzzler\",\n \"gyration\",\n \"habitable\",\n \"habitant\",\n \"habitat\",\n \"habitual\",\n \"hacked\",\n \"hacker\",\n \"hacking\",\n \"hacksaw\",\n \"had\",\n \"haggler\",\n \"haiku\",\n \"half\",\n \"halogen\",\n \"halt\",\n \"halved\",\n \"halves\",\n \"hamburger\",\n \"hamlet\",\n \"hammock\",\n \"hamper\",\n \"hamster\",\n \"hamstring\",\n \"handbag\",\n \"handball\",\n \"handbook\",\n \"handbrake\",\n \"handcart\",\n \"handclap\",\n \"handclasp\",\n \"handcraft\",\n \"handcuff\",\n \"handed\",\n \"handful\",\n \"handgrip\",\n \"handgun\",\n \"handheld\",\n \"handiness\",\n \"handiwork\",\n \"handlebar\",\n \"handled\",\n \"handler\",\n \"handling\",\n \"handmade\",\n \"handoff\",\n \"handpick\",\n \"handprint\",\n \"handrail\",\n \"handsaw\",\n \"handset\",\n \"handsfree\",\n \"handshake\",\n \"handstand\",\n \"handwash\",\n \"handwork\",\n \"handwoven\",\n \"handwrite\",\n \"handyman\",\n \"hangnail\",\n \"hangout\",\n \"hangover\",\n \"hangup\",\n \"hankering\",\n \"hankie\",\n \"hanky\",\n \"haphazard\",\n \"happening\",\n \"happier\",\n \"happiest\",\n \"happily\",\n \"happiness\",\n \"happy\",\n \"harbor\",\n \"hardcopy\",\n \"hardcore\",\n \"hardcover\",\n \"harddisk\",\n \"hardened\",\n \"hardener\",\n \"hardening\",\n \"hardhat\",\n \"hardhead\",\n \"hardiness\",\n \"hardly\",\n \"hardness\",\n \"hardship\",\n \"hardware\",\n \"hardwired\",\n \"hardwood\",\n \"hardy\",\n \"harmful\",\n \"harmless\",\n \"harmonica\",\n \"harmonics\",\n \"harmonize\",\n \"harmony\",\n \"harness\",\n \"harpist\",\n \"harsh\",\n \"harvest\",\n \"hash\",\n \"hassle\",\n \"haste\",\n \"hastily\",\n \"hastiness\",\n \"hasty\",\n \"hatbox\",\n \"hatchback\",\n \"hatchery\",\n \"hatchet\",\n \"hatching\",\n \"hatchling\",\n \"hate\",\n \"hatless\",\n \"hatred\",\n \"haunt\",\n \"haven\",\n \"hazard\",\n \"hazelnut\",\n \"hazily\",\n \"haziness\",\n \"hazing\",\n \"hazy\",\n \"headache\",\n \"headband\",\n \"headboard\",\n \"headcount\",\n \"headdress\",\n \"headed\",\n \"header\",\n \"headfirst\",\n \"headgear\",\n \"heading\",\n \"headlamp\",\n \"headless\",\n \"headlock\",\n \"headphone\",\n \"headpiece\",\n \"headrest\",\n \"headroom\",\n \"headscarf\",\n \"headset\",\n \"headsman\",\n \"headstand\",\n \"headstone\",\n \"headway\",\n \"headwear\",\n \"heap\",\n \"heat\",\n \"heave\",\n \"heavily\",\n \"heaviness\",\n \"heaving\",\n \"hedge\",\n \"hedging\",\n \"heftiness\",\n \"hefty\",\n \"helium\",\n \"helmet\",\n \"helper\",\n \"helpful\",\n \"helping\",\n \"helpless\",\n \"helpline\",\n \"hemlock\",\n \"hemstitch\",\n \"hence\",\n \"henchman\",\n \"henna\",\n \"herald\",\n \"herbal\",\n \"herbicide\",\n \"herbs\",\n \"heritage\",\n \"hermit\",\n \"heroics\",\n \"heroism\",\n \"herring\",\n \"herself\",\n \"hertz\",\n \"hesitancy\",\n \"hesitant\",\n \"hesitate\",\n \"hexagon\",\n \"hexagram\",\n \"hubcap\",\n \"huddle\",\n \"huddling\",\n \"huff\",\n \"hug\",\n \"hula\",\n \"hulk\",\n \"hull\",\n \"human\",\n \"humble\",\n \"humbling\",\n \"humbly\",\n \"humid\",\n \"humiliate\",\n \"humility\",\n \"humming\",\n \"hummus\",\n \"humongous\",\n \"humorist\",\n \"humorless\",\n \"humorous\",\n \"humpback\",\n \"humped\",\n \"humvee\",\n \"hunchback\",\n \"hundredth\",\n \"hunger\",\n \"hungrily\",\n \"hungry\",\n \"hunk\",\n \"hunter\",\n \"hunting\",\n \"huntress\",\n \"huntsman\",\n \"hurdle\",\n \"hurled\",\n \"hurler\",\n \"hurling\",\n \"hurray\",\n \"hurricane\",\n \"hurried\",\n \"hurry\",\n \"hurt\",\n \"husband\",\n \"hush\",\n \"husked\",\n \"huskiness\",\n \"hut\",\n \"hybrid\",\n \"hydrant\",\n \"hydrated\",\n \"hydration\",\n \"hydrogen\",\n \"hydroxide\",\n \"hyperlink\",\n \"hypertext\",\n \"hyphen\",\n \"hypnoses\",\n \"hypnosis\",\n \"hypnotic\",\n \"hypnotism\",\n \"hypnotist\",\n \"hypnotize\",\n \"hypocrisy\",\n \"hypocrite\",\n \"ibuprofen\",\n \"ice\",\n \"iciness\",\n \"icing\",\n \"icky\",\n \"icon\",\n \"icy\",\n \"idealism\",\n \"idealist\",\n \"idealize\",\n \"ideally\",\n \"idealness\",\n \"identical\",\n \"identify\",\n \"identity\",\n \"ideology\",\n \"idiocy\",\n \"idiom\",\n \"idly\",\n \"igloo\",\n \"ignition\",\n \"ignore\",\n \"iguana\",\n \"illicitly\",\n \"illusion\",\n \"illusive\",\n \"image\",\n \"imaginary\",\n \"imagines\",\n \"imaging\",\n \"imbecile\",\n \"imitate\",\n \"imitation\",\n \"immature\",\n \"immerse\",\n \"immersion\",\n \"imminent\",\n \"immobile\",\n \"immodest\",\n \"immorally\",\n \"immortal\",\n \"immovable\",\n \"immovably\",\n \"immunity\",\n \"immunize\",\n \"impaired\",\n \"impale\",\n \"impart\",\n \"impatient\",\n \"impeach\",\n \"impeding\",\n \"impending\",\n \"imperfect\",\n \"imperial\",\n \"impish\",\n \"implant\",\n \"implement\",\n \"implicate\",\n \"implicit\",\n \"implode\",\n \"implosion\",\n \"implosive\",\n \"imply\",\n \"impolite\",\n \"important\",\n \"importer\",\n \"impose\",\n \"imposing\",\n \"impotence\",\n \"impotency\",\n \"impotent\",\n \"impound\",\n \"imprecise\",\n \"imprint\",\n \"imprison\",\n \"impromptu\",\n \"improper\",\n \"improve\",\n \"improving\",\n \"improvise\",\n \"imprudent\",\n \"impulse\",\n \"impulsive\",\n \"impure\",\n \"impurity\",\n \"iodine\",\n \"iodize\",\n \"ion\",\n \"ipad\",\n \"iphone\",\n \"ipod\",\n \"irate\",\n \"irk\",\n \"iron\",\n \"irregular\",\n \"irrigate\",\n \"irritable\",\n \"irritably\",\n \"irritant\",\n \"irritate\",\n \"islamic\",\n \"islamist\",\n \"isolated\",\n \"isolating\",\n \"isolation\",\n \"isotope\",\n \"issue\",\n \"issuing\",\n \"italicize\",\n \"italics\",\n \"item\",\n \"itinerary\",\n \"itunes\",\n \"ivory\",\n \"ivy\",\n \"jab\",\n \"jackal\",\n \"jacket\",\n \"jackknife\",\n \"jackpot\",\n \"jailbird\",\n \"jailbreak\",\n \"jailer\",\n \"jailhouse\",\n \"jalapeno\",\n \"jam\",\n \"janitor\",\n \"january\",\n \"jargon\",\n \"jarring\",\n \"jasmine\",\n \"jaundice\",\n \"jaunt\",\n \"java\",\n \"jawed\",\n \"jawless\",\n \"jawline\",\n \"jaws\",\n \"jaybird\",\n \"jaywalker\",\n \"jazz\",\n \"jeep\",\n \"jeeringly\",\n \"jellied\",\n \"jelly\",\n \"jersey\",\n \"jester\",\n \"jet\",\n \"jiffy\",\n \"jigsaw\",\n \"jimmy\",\n \"jingle\",\n \"jingling\",\n \"jinx\",\n \"jitters\",\n \"jittery\",\n \"job\",\n \"jockey\",\n \"jockstrap\",\n \"jogger\",\n \"jogging\",\n \"john\",\n \"joining\",\n \"jokester\",\n \"jokingly\",\n \"jolliness\",\n \"jolly\",\n \"jolt\",\n \"jot\",\n \"jovial\",\n \"joyfully\",\n \"joylessly\",\n \"joyous\",\n \"joyride\",\n \"joystick\",\n \"jubilance\",\n \"jubilant\",\n \"judge\",\n \"judgingly\",\n \"judicial\",\n \"judiciary\",\n \"judo\",\n \"juggle\",\n \"juggling\",\n \"jugular\",\n \"juice\",\n \"juiciness\",\n \"juicy\",\n \"jujitsu\",\n \"jukebox\",\n \"july\",\n \"jumble\",\n \"jumbo\",\n \"jump\",\n \"junction\",\n \"juncture\",\n \"june\",\n \"junior\",\n \"juniper\",\n \"junkie\",\n \"junkman\",\n \"junkyard\",\n \"jurist\",\n \"juror\",\n \"jury\",\n \"justice\",\n \"justifier\",\n \"justify\",\n \"justly\",\n \"justness\",\n \"juvenile\",\n \"kabob\",\n \"kangaroo\",\n \"karaoke\",\n \"karate\",\n \"karma\",\n \"kebab\",\n \"keenly\",\n \"keenness\",\n \"keep\",\n \"keg\",\n \"kelp\",\n \"kennel\",\n \"kept\",\n \"kerchief\",\n \"kerosene\",\n \"kettle\",\n \"kick\",\n \"kiln\",\n \"kilobyte\",\n \"kilogram\",\n \"kilometer\",\n \"kilowatt\",\n \"kilt\",\n \"kimono\",\n \"kindle\",\n \"kindling\",\n \"kindly\",\n \"kindness\",\n \"kindred\",\n \"kinetic\",\n \"kinfolk\",\n \"king\",\n \"kinship\",\n \"kinsman\",\n \"kinswoman\",\n \"kissable\",\n \"kisser\",\n \"kissing\",\n \"kitchen\",\n \"kite\",\n \"kitten\",\n \"kitty\",\n \"kiwi\",\n \"kleenex\",\n \"knapsack\",\n \"knee\",\n \"knelt\",\n \"knickers\",\n \"knoll\",\n \"koala\",\n \"kooky\",\n \"kosher\",\n \"krypton\",\n \"kudos\",\n \"kung\",\n \"labored\",\n \"laborer\",\n \"laboring\",\n \"laborious\",\n \"labrador\",\n \"ladder\",\n \"ladies\",\n \"ladle\",\n \"ladybug\",\n \"ladylike\",\n \"lagged\",\n \"lagging\",\n \"lagoon\",\n \"lair\",\n \"lake\",\n \"lance\",\n \"landed\",\n \"landfall\",\n \"landfill\",\n \"landing\",\n \"landlady\",\n \"landless\",\n \"landline\",\n \"landlord\",\n \"landmark\",\n \"landmass\",\n \"landmine\",\n \"landowner\",\n \"landscape\",\n \"landside\",\n \"landslide\",\n \"language\",\n \"lankiness\",\n \"lanky\",\n \"lantern\",\n \"lapdog\",\n \"lapel\",\n \"lapped\",\n \"lapping\",\n \"laptop\",\n \"lard\",\n \"large\",\n \"lark\",\n \"lash\",\n \"lasso\",\n \"last\",\n \"latch\",\n \"late\",\n \"lather\",\n \"latitude\",\n \"latrine\",\n \"latter\",\n \"latticed\",\n \"launch\",\n \"launder\",\n \"laundry\",\n \"laurel\",\n \"lavender\",\n \"lavish\",\n \"laxative\",\n \"lazily\",\n \"laziness\",\n \"lazy\",\n \"lecturer\",\n \"left\",\n \"legacy\",\n \"legal\",\n \"legend\",\n \"legged\",\n \"leggings\",\n \"legible\",\n \"legibly\",\n \"legislate\",\n \"lego\",\n \"legroom\",\n \"legume\",\n \"legwarmer\",\n \"legwork\",\n \"lemon\",\n \"lend\",\n \"length\",\n \"lens\",\n \"lent\",\n \"leotard\",\n \"lesser\",\n \"letdown\",\n \"lethargic\",\n \"lethargy\",\n \"letter\",\n \"lettuce\",\n \"level\",\n \"leverage\",\n \"levers\",\n \"levitate\",\n \"levitator\",\n \"liability\",\n \"liable\",\n \"liberty\",\n \"librarian\",\n \"library\",\n \"licking\",\n \"licorice\",\n \"lid\",\n \"life\",\n \"lifter\",\n \"lifting\",\n \"liftoff\",\n \"ligament\",\n \"likely\",\n \"likeness\",\n \"likewise\",\n \"liking\",\n \"lilac\",\n \"lilly\",\n \"lily\",\n \"limb\",\n \"limeade\",\n \"limelight\",\n \"limes\",\n \"limit\",\n \"limping\",\n \"limpness\",\n \"line\",\n \"lingo\",\n \"linguini\",\n \"linguist\",\n \"lining\",\n \"linked\",\n \"linoleum\",\n \"linseed\",\n \"lint\",\n \"lion\",\n \"lip\",\n \"liquefy\",\n \"liqueur\",\n \"liquid\",\n \"lisp\",\n \"list\",\n \"litigate\",\n \"litigator\",\n \"litmus\",\n \"litter\",\n \"little\",\n \"livable\",\n \"lived\",\n \"lively\",\n \"liver\",\n \"livestock\",\n \"lividly\",\n \"living\",\n \"lizard\",\n \"lubricant\",\n \"lubricate\",\n \"lucid\",\n \"luckily\",\n \"luckiness\",\n \"luckless\",\n \"lucrative\",\n \"ludicrous\",\n \"lugged\",\n \"lukewarm\",\n \"lullaby\",\n \"lumber\",\n \"luminance\",\n \"luminous\",\n \"lumpiness\",\n \"lumping\",\n \"lumpish\",\n \"lunacy\",\n \"lunar\",\n \"lunchbox\",\n \"luncheon\",\n \"lunchroom\",\n \"lunchtime\",\n \"lung\",\n \"lurch\",\n \"lure\",\n \"luridness\",\n \"lurk\",\n \"lushly\",\n \"lushness\",\n \"luster\",\n \"lustfully\",\n \"lustily\",\n \"lustiness\",\n \"lustrous\",\n \"lusty\",\n \"luxurious\",\n \"luxury\",\n \"lying\",\n \"lyrically\",\n \"lyricism\",\n \"lyricist\",\n \"lyrics\",\n \"macarena\",\n \"macaroni\",\n \"macaw\",\n \"mace\",\n \"machine\",\n \"machinist\",\n \"magazine\",\n \"magenta\",\n \"maggot\",\n \"magical\",\n \"magician\",\n \"magma\",\n \"magnesium\",\n \"magnetic\",\n \"magnetism\",\n \"magnetize\",\n \"magnifier\",\n \"magnify\",\n \"magnitude\",\n \"magnolia\",\n \"mahogany\",\n \"maimed\",\n \"majestic\",\n \"majesty\",\n \"majorette\",\n \"majority\",\n \"makeover\",\n \"maker\",\n \"makeshift\",\n \"making\",\n \"malformed\",\n \"malt\",\n \"mama\",\n \"mammal\",\n \"mammary\",\n \"mammogram\",\n \"manager\",\n \"managing\",\n \"manatee\",\n \"mandarin\",\n \"mandate\",\n \"mandatory\",\n \"mandolin\",\n \"manger\",\n \"mangle\",\n \"mango\",\n \"mangy\",\n \"manhandle\",\n \"manhole\",\n \"manhood\",\n \"manhunt\",\n \"manicotti\",\n \"manicure\",\n \"manifesto\",\n \"manila\",\n \"mankind\",\n \"manlike\",\n \"manliness\",\n \"manly\",\n \"manmade\",\n \"manned\",\n \"mannish\",\n \"manor\",\n \"manpower\",\n \"mantis\",\n \"mantra\",\n \"manual\",\n \"many\",\n \"map\",\n \"marathon\",\n \"marauding\",\n \"marbled\",\n \"marbles\",\n \"marbling\",\n \"march\",\n \"mardi\",\n \"margarine\",\n \"margarita\",\n \"margin\",\n \"marigold\",\n \"marina\",\n \"marine\",\n \"marital\",\n \"maritime\",\n \"marlin\",\n \"marmalade\",\n \"maroon\",\n \"married\",\n \"marrow\",\n \"marry\",\n \"marshland\",\n \"marshy\",\n \"marsupial\",\n \"marvelous\",\n \"marxism\",\n \"mascot\",\n \"masculine\",\n \"mashed\",\n \"mashing\",\n \"massager\",\n \"masses\",\n \"massive\",\n \"mastiff\",\n \"matador\",\n \"matchbook\",\n \"matchbox\",\n \"matcher\",\n \"matching\",\n \"matchless\",\n \"material\",\n \"maternal\",\n \"maternity\",\n \"math\",\n \"mating\",\n \"matriarch\",\n \"matrimony\",\n \"matrix\",\n \"matron\",\n \"matted\",\n \"matter\",\n \"maturely\",\n \"maturing\",\n \"maturity\",\n \"mauve\",\n \"maverick\",\n \"maximize\",\n \"maximum\",\n \"maybe\",\n \"mayday\",\n \"mayflower\",\n \"moaner\",\n \"moaning\",\n \"mobile\",\n \"mobility\",\n \"mobilize\",\n \"mobster\",\n \"mocha\",\n \"mocker\",\n \"mockup\",\n \"modified\",\n \"modify\",\n \"modular\",\n \"modulator\",\n \"module\",\n \"moisten\",\n \"moistness\",\n \"moisture\",\n \"molar\",\n \"molasses\",\n \"mold\",\n \"molecular\",\n \"molecule\",\n \"molehill\",\n \"mollusk\",\n \"mom\",\n \"monastery\",\n \"monday\",\n \"monetary\",\n \"monetize\",\n \"moneybags\",\n \"moneyless\",\n \"moneywise\",\n \"mongoose\",\n \"mongrel\",\n \"monitor\",\n \"monkhood\",\n \"monogamy\",\n \"monogram\",\n \"monologue\",\n \"monopoly\",\n \"monorail\",\n \"monotone\",\n \"monotype\",\n \"monoxide\",\n \"monsieur\",\n \"monsoon\",\n \"monstrous\",\n \"monthly\",\n \"monument\",\n \"moocher\",\n \"moodiness\",\n \"moody\",\n \"mooing\",\n \"moonbeam\",\n \"mooned\",\n \"moonlight\",\n \"moonlike\",\n \"moonlit\",\n \"moonrise\",\n \"moonscape\",\n \"moonshine\",\n \"moonstone\",\n \"moonwalk\",\n \"mop\",\n \"morale\",\n \"morality\",\n \"morally\",\n \"morbidity\",\n \"morbidly\",\n \"morphine\",\n \"morphing\",\n \"morse\",\n \"mortality\",\n \"mortally\",\n \"mortician\",\n \"mortified\",\n \"mortify\",\n \"mortuary\",\n \"mosaic\",\n \"mossy\",\n \"most\",\n \"mothball\",\n \"mothproof\",\n \"motion\",\n \"motivate\",\n \"motivator\",\n \"motive\",\n \"motocross\",\n \"motor\",\n \"motto\",\n \"mountable\",\n \"mountain\",\n \"mounted\",\n \"mounting\",\n \"mourner\",\n \"mournful\",\n \"mouse\",\n \"mousiness\",\n \"moustache\",\n \"mousy\",\n \"mouth\",\n \"movable\",\n \"move\",\n \"movie\",\n \"moving\",\n \"mower\",\n \"mowing\",\n \"much\",\n \"muck\",\n \"mud\",\n \"mug\",\n \"mulberry\",\n \"mulch\",\n \"mule\",\n \"mulled\",\n \"mullets\",\n \"multiple\",\n \"multiply\",\n \"multitask\",\n \"multitude\",\n \"mumble\",\n \"mumbling\",\n \"mumbo\",\n \"mummified\",\n \"mummify\",\n \"mummy\",\n \"mumps\",\n \"munchkin\",\n \"mundane\",\n \"municipal\",\n \"muppet\",\n \"mural\",\n \"murkiness\",\n \"murky\",\n \"murmuring\",\n \"muscular\",\n \"museum\",\n \"mushily\",\n \"mushiness\",\n \"mushroom\",\n \"mushy\",\n \"music\",\n \"musket\",\n \"muskiness\",\n \"musky\",\n \"mustang\",\n \"mustard\",\n \"muster\",\n \"mustiness\",\n \"musty\",\n \"mutable\",\n \"mutate\",\n \"mutation\",\n \"mute\",\n \"mutilated\",\n \"mutilator\",\n \"mutiny\",\n \"mutt\",\n \"mutual\",\n \"muzzle\",\n \"myself\",\n \"myspace\",\n \"mystified\",\n \"mystify\",\n \"myth\",\n \"nacho\",\n \"nag\",\n \"nail\",\n \"name\",\n \"naming\",\n \"nanny\",\n \"nanometer\",\n \"nape\",\n \"napkin\",\n \"napped\",\n \"napping\",\n \"nappy\",\n \"narrow\",\n \"nastily\",\n \"nastiness\",\n \"national\",\n \"native\",\n \"nativity\",\n \"natural\",\n \"nature\",\n \"naturist\",\n \"nautical\",\n \"navigate\",\n \"navigator\",\n \"navy\",\n \"nearby\",\n \"nearest\",\n \"nearly\",\n \"nearness\",\n \"neatly\",\n \"neatness\",\n \"nebula\",\n \"nebulizer\",\n \"nectar\",\n \"negate\",\n \"negation\",\n \"negative\",\n \"neglector\",\n \"negligee\",\n \"negligent\",\n \"negotiate\",\n \"nemeses\",\n \"nemesis\",\n \"neon\",\n \"nephew\",\n \"nerd\",\n \"nervous\",\n \"nervy\",\n \"nest\",\n \"net\",\n \"neurology\",\n \"neuron\",\n \"neurosis\",\n \"neurotic\",\n \"neuter\",\n \"neutron\",\n \"never\",\n \"next\",\n \"nibble\",\n \"nickname\",\n \"nicotine\",\n \"niece\",\n \"nifty\",\n \"nimble\",\n \"nimbly\",\n \"nineteen\",\n \"ninetieth\",\n \"ninja\",\n \"nintendo\",\n \"ninth\",\n \"nuclear\",\n \"nuclei\",\n \"nucleus\",\n \"nugget\",\n \"nullify\",\n \"number\",\n \"numbing\",\n \"numbly\",\n \"numbness\",\n \"numeral\",\n \"numerate\",\n \"numerator\",\n \"numeric\",\n \"numerous\",\n \"nuptials\",\n \"nursery\",\n \"nursing\",\n \"nurture\",\n \"nutcase\",\n \"nutlike\",\n \"nutmeg\",\n \"nutrient\",\n \"nutshell\",\n \"nuttiness\",\n \"nutty\",\n \"nuzzle\",\n \"nylon\",\n \"oaf\",\n \"oak\",\n \"oasis\",\n \"oat\",\n \"obedience\",\n \"obedient\",\n \"obituary\",\n \"object\",\n \"obligate\",\n \"obliged\",\n \"oblivion\",\n \"oblivious\",\n \"oblong\",\n \"obnoxious\",\n \"oboe\",\n \"obscure\",\n \"obscurity\",\n \"observant\",\n \"observer\",\n \"observing\",\n \"obsessed\",\n \"obsession\",\n \"obsessive\",\n \"obsolete\",\n \"obstacle\",\n \"obstinate\",\n \"obstruct\",\n \"obtain\",\n \"obtrusive\",\n \"obtuse\",\n \"obvious\",\n \"occultist\",\n \"occupancy\",\n \"occupant\",\n \"occupier\",\n \"occupy\",\n \"ocean\",\n \"ocelot\",\n \"octagon\",\n \"octane\",\n \"october\",\n \"octopus\",\n \"ogle\",\n \"oil\",\n \"oink\",\n \"ointment\",\n \"okay\",\n \"old\",\n \"olive\",\n \"olympics\",\n \"omega\",\n \"omen\",\n \"ominous\",\n \"omission\",\n \"omit\",\n \"omnivore\",\n \"onboard\",\n \"oncoming\",\n \"ongoing\",\n \"onion\",\n \"online\",\n \"onlooker\",\n \"only\",\n \"onscreen\",\n \"onset\",\n \"onshore\",\n \"onslaught\",\n \"onstage\",\n \"onto\",\n \"onward\",\n \"onyx\",\n \"oops\",\n \"ooze\",\n \"oozy\",\n \"opacity\",\n \"opal\",\n \"open\",\n \"operable\",\n \"operate\",\n \"operating\",\n \"operation\",\n \"operative\",\n \"operator\",\n \"opium\",\n \"opossum\",\n \"opponent\",\n \"oppose\",\n \"opposing\",\n \"opposite\",\n \"oppressed\",\n \"oppressor\",\n \"opt\",\n \"opulently\",\n \"osmosis\",\n \"other\",\n \"otter\",\n \"ouch\",\n \"ought\",\n \"ounce\",\n \"outage\",\n \"outback\",\n \"outbid\",\n \"outboard\",\n \"outbound\",\n \"outbreak\",\n \"outburst\",\n \"outcast\",\n \"outclass\",\n \"outcome\",\n \"outdated\",\n \"outdoors\",\n \"outer\",\n \"outfield\",\n \"outfit\",\n \"outflank\",\n \"outgoing\",\n \"outgrow\",\n \"outhouse\",\n \"outing\",\n \"outlast\",\n \"outlet\",\n \"outline\",\n \"outlook\",\n \"outlying\",\n \"outmatch\",\n \"outmost\",\n \"outnumber\",\n \"outplayed\",\n \"outpost\",\n \"outpour\",\n \"output\",\n \"outrage\",\n \"outrank\",\n \"outreach\",\n \"outright\",\n \"outscore\",\n \"outsell\",\n \"outshine\",\n \"outshoot\",\n \"outsider\",\n \"outskirts\",\n \"outsmart\",\n \"outsource\",\n \"outspoken\",\n \"outtakes\",\n \"outthink\",\n \"outward\",\n \"outweigh\",\n \"outwit\",\n \"oval\",\n \"ovary\",\n \"oven\",\n \"overact\",\n \"overall\",\n \"overarch\",\n \"overbid\",\n \"overbill\",\n \"overbite\",\n \"overblown\",\n \"overboard\",\n \"overbook\",\n \"overbuilt\",\n \"overcast\",\n \"overcoat\",\n \"overcome\",\n \"overcook\",\n \"overcrowd\",\n \"overdraft\",\n \"overdrawn\",\n \"overdress\",\n \"overdrive\",\n \"overdue\",\n \"overeager\",\n \"overeater\",\n \"overexert\",\n \"overfed\",\n \"overfeed\",\n \"overfill\",\n \"overflow\",\n \"overfull\",\n \"overgrown\",\n \"overhand\",\n \"overhang\",\n \"overhaul\",\n \"overhead\",\n \"overhear\",\n \"overheat\",\n \"overhung\",\n \"overjoyed\",\n \"overkill\",\n \"overlabor\",\n \"overlaid\",\n \"overlap\",\n \"overlay\",\n \"overload\",\n \"overlook\",\n \"overlord\",\n \"overlying\",\n \"overnight\",\n \"overpass\",\n \"overpay\",\n \"overplant\",\n \"overplay\",\n \"overpower\",\n \"overprice\",\n \"overrate\",\n \"overreach\",\n \"overreact\",\n \"override\",\n \"overripe\",\n \"overrule\",\n \"overrun\",\n \"overshoot\",\n \"overshot\",\n \"oversight\",\n \"oversized\",\n \"oversleep\",\n \"oversold\",\n \"overspend\",\n \"overstate\",\n \"overstay\",\n \"overstep\",\n \"overstock\",\n \"overstuff\",\n \"oversweet\",\n \"overtake\",\n \"overthrow\",\n \"overtime\",\n \"overtly\",\n \"overtone\",\n \"overture\",\n \"overturn\",\n \"overuse\",\n \"overvalue\",\n \"overview\",\n \"overwrite\",\n \"owl\",\n \"oxford\",\n \"oxidant\",\n \"oxidation\",\n \"oxidize\",\n \"oxidizing\",\n \"oxygen\",\n \"oxymoron\",\n \"oyster\",\n \"ozone\",\n \"paced\",\n \"pacemaker\",\n \"pacific\",\n \"pacifier\",\n \"pacifism\",\n \"pacifist\",\n \"pacify\",\n \"padded\",\n \"padding\",\n \"paddle\",\n \"paddling\",\n \"padlock\",\n \"pagan\",\n \"pager\",\n \"paging\",\n \"pajamas\",\n \"palace\",\n \"palatable\",\n \"palm\",\n \"palpable\",\n \"palpitate\",\n \"paltry\",\n \"pampered\",\n \"pamperer\",\n \"pampers\",\n \"pamphlet\",\n \"panama\",\n \"pancake\",\n \"pancreas\",\n \"panda\",\n \"pandemic\",\n \"pang\",\n \"panhandle\",\n \"panic\",\n \"panning\",\n \"panorama\",\n \"panoramic\",\n \"panther\",\n \"pantomime\",\n \"pantry\",\n \"pants\",\n \"pantyhose\",\n \"paparazzi\",\n \"papaya\",\n \"paper\",\n \"paprika\",\n \"papyrus\",\n \"parabola\",\n \"parachute\",\n \"parade\",\n \"paradox\",\n \"paragraph\",\n \"parakeet\",\n \"paralegal\",\n \"paralyses\",\n \"paralysis\",\n \"paralyze\",\n \"paramedic\",\n \"parameter\",\n \"paramount\",\n \"parasail\",\n \"parasite\",\n \"parasitic\",\n \"parcel\",\n \"parched\",\n \"parchment\",\n \"pardon\",\n \"parish\",\n \"parka\",\n \"parking\",\n \"parkway\",\n \"parlor\",\n \"parmesan\",\n \"parole\",\n \"parrot\",\n \"parsley\",\n \"parsnip\",\n \"partake\",\n \"parted\",\n \"parting\",\n \"partition\",\n \"partly\",\n \"partner\",\n \"partridge\",\n \"party\",\n \"passable\",\n \"passably\",\n \"passage\",\n \"passcode\",\n \"passenger\",\n \"passerby\",\n \"passing\",\n \"passion\",\n \"passive\",\n \"passivism\",\n \"passover\",\n \"passport\",\n \"password\",\n \"pasta\",\n \"pasted\",\n \"pastel\",\n \"pastime\",\n \"pastor\",\n \"pastrami\",\n \"pasture\",\n \"pasty\",\n \"patchwork\",\n \"patchy\",\n \"paternal\",\n \"paternity\",\n \"path\",\n \"patience\",\n \"patient\",\n \"patio\",\n \"patriarch\",\n \"patriot\",\n \"patrol\",\n \"patronage\",\n \"patronize\",\n \"pauper\",\n \"pavement\",\n \"paver\",\n \"pavestone\",\n \"pavilion\",\n \"paving\",\n \"pawing\",\n \"payable\",\n \"payback\",\n \"paycheck\",\n \"payday\",\n \"payee\",\n \"payer\",\n \"paying\",\n \"payment\",\n \"payphone\",\n \"payroll\",\n \"pebble\",\n \"pebbly\",\n \"pecan\",\n \"pectin\",\n \"peculiar\",\n \"peddling\",\n \"pediatric\",\n \"pedicure\",\n \"pedigree\",\n \"pedometer\",\n \"pegboard\",\n \"pelican\",\n \"pellet\",\n \"pelt\",\n \"pelvis\",\n \"penalize\",\n \"penalty\",\n \"pencil\",\n \"pendant\",\n \"pending\",\n \"penholder\",\n \"penknife\",\n \"pennant\",\n \"penniless\",\n \"penny\",\n \"penpal\",\n \"pension\",\n \"pentagon\",\n \"pentagram\",\n \"pep\",\n \"perceive\",\n \"percent\",\n \"perch\",\n \"percolate\",\n \"perennial\",\n \"perfected\",\n \"perfectly\",\n \"perfume\",\n \"periscope\",\n \"perish\",\n \"perjurer\",\n \"perjury\",\n \"perkiness\",\n \"perky\",\n \"perm\",\n \"peroxide\",\n \"perpetual\",\n \"perplexed\",\n \"persecute\",\n \"persevere\",\n \"persuaded\",\n \"persuader\",\n \"pesky\",\n \"peso\",\n \"pessimism\",\n \"pessimist\",\n \"pester\",\n \"pesticide\",\n \"petal\",\n \"petite\",\n \"petition\",\n \"petri\",\n \"petroleum\",\n \"petted\",\n \"petticoat\",\n \"pettiness\",\n \"petty\",\n \"petunia\",\n \"phantom\",\n \"phobia\",\n \"phoenix\",\n \"phonebook\",\n \"phoney\",\n \"phonics\",\n \"phoniness\",\n \"phony\",\n \"phosphate\",\n \"photo\",\n \"phrase\",\n \"phrasing\",\n \"placard\",\n \"placate\",\n \"placidly\",\n \"plank\",\n \"planner\",\n \"plant\",\n \"plasma\",\n \"plaster\",\n \"plastic\",\n \"plated\",\n \"platform\",\n \"plating\",\n \"platinum\",\n \"platonic\",\n \"platter\",\n \"platypus\",\n \"plausible\",\n \"plausibly\",\n \"playable\",\n \"playback\",\n \"player\",\n \"playful\",\n \"playgroup\",\n \"playhouse\",\n \"playing\",\n \"playlist\",\n \"playmaker\",\n \"playmate\",\n \"playoff\",\n \"playpen\",\n \"playroom\",\n \"playset\",\n \"plaything\",\n \"playtime\",\n \"plaza\",\n \"pleading\",\n \"pleat\",\n \"pledge\",\n \"plentiful\",\n \"plenty\",\n \"plethora\",\n \"plexiglas\",\n \"pliable\",\n \"plod\",\n \"plop\",\n \"plot\",\n \"plow\",\n \"ploy\",\n \"pluck\",\n \"plug\",\n \"plunder\",\n \"plunging\",\n \"plural\",\n \"plus\",\n \"plutonium\",\n \"plywood\",\n \"poach\",\n \"pod\",\n \"poem\",\n \"poet\",\n \"pogo\",\n \"pointed\",\n \"pointer\",\n \"pointing\",\n \"pointless\",\n \"pointy\",\n \"poise\",\n \"poison\",\n \"poker\",\n \"poking\",\n \"polar\",\n \"police\",\n \"policy\",\n \"polio\",\n \"polish\",\n \"politely\",\n \"polka\",\n \"polo\",\n \"polyester\",\n \"polygon\",\n \"polygraph\",\n \"polymer\",\n \"poncho\",\n \"pond\",\n \"pony\",\n \"popcorn\",\n \"pope\",\n \"poplar\",\n \"popper\",\n \"poppy\",\n \"popsicle\",\n \"populace\",\n \"popular\",\n \"populate\",\n \"porcupine\",\n \"pork\",\n \"porous\",\n \"porridge\",\n \"portable\",\n \"portal\",\n \"portfolio\",\n \"porthole\",\n \"portion\",\n \"portly\",\n \"portside\",\n \"poser\",\n \"posh\",\n \"posing\",\n \"possible\",\n \"possibly\",\n \"possum\",\n \"postage\",\n \"postal\",\n \"postbox\",\n \"postcard\",\n \"posted\",\n \"poster\",\n \"posting\",\n \"postnasal\",\n \"posture\",\n \"postwar\",\n \"pouch\",\n \"pounce\",\n \"pouncing\",\n \"pound\",\n \"pouring\",\n \"pout\",\n \"powdered\",\n \"powdering\",\n \"powdery\",\n \"power\",\n \"powwow\",\n \"pox\",\n \"praising\",\n \"prance\",\n \"prancing\",\n \"pranker\",\n \"prankish\",\n \"prankster\",\n \"prayer\",\n \"praying\",\n \"preacher\",\n \"preaching\",\n \"preachy\",\n \"preamble\",\n \"precinct\",\n \"precise\",\n \"precision\",\n \"precook\",\n \"precut\",\n \"predator\",\n \"predefine\",\n \"predict\",\n \"preface\",\n \"prefix\",\n \"preflight\",\n \"preformed\",\n \"pregame\",\n \"pregnancy\",\n \"pregnant\",\n \"preheated\",\n \"prelaunch\",\n \"prelaw\",\n \"prelude\",\n \"premiere\",\n \"premises\",\n \"premium\",\n \"prenatal\",\n \"preoccupy\",\n \"preorder\",\n \"prepaid\",\n \"prepay\",\n \"preplan\",\n \"preppy\",\n \"preschool\",\n \"prescribe\",\n \"preseason\",\n \"preset\",\n \"preshow\",\n \"president\",\n \"presoak\",\n \"press\",\n \"presume\",\n \"presuming\",\n \"preteen\",\n \"pretended\",\n \"pretender\",\n \"pretense\",\n \"pretext\",\n \"pretty\",\n \"pretzel\",\n \"prevail\",\n \"prevalent\",\n \"prevent\",\n \"preview\",\n \"previous\",\n \"prewar\",\n \"prewashed\",\n \"prideful\",\n \"pried\",\n \"primal\",\n \"primarily\",\n \"primary\",\n \"primate\",\n \"primer\",\n \"primp\",\n \"princess\",\n \"print\",\n \"prior\",\n \"prism\",\n \"prison\",\n \"prissy\",\n \"pristine\",\n \"privacy\",\n \"private\",\n \"privatize\",\n \"prize\",\n \"proactive\",\n \"probable\",\n \"probably\",\n \"probation\",\n \"probe\",\n \"probing\",\n \"probiotic\",\n \"problem\",\n \"procedure\",\n \"process\",\n \"proclaim\",\n \"procreate\",\n \"procurer\",\n \"prodigal\",\n \"prodigy\",\n \"produce\",\n \"product\",\n \"profane\",\n \"profanity\",\n \"professed\",\n \"professor\",\n \"profile\",\n \"profound\",\n \"profusely\",\n \"progeny\",\n \"prognosis\",\n \"program\",\n \"progress\",\n \"projector\",\n \"prologue\",\n \"prolonged\",\n \"promenade\",\n \"prominent\",\n \"promoter\",\n \"promotion\",\n \"prompter\",\n \"promptly\",\n \"prone\",\n \"prong\",\n \"pronounce\",\n \"pronto\",\n \"proofing\",\n \"proofread\",\n \"proofs\",\n \"propeller\",\n \"properly\",\n \"property\",\n \"proponent\",\n \"proposal\",\n \"propose\",\n \"props\",\n \"prorate\",\n \"protector\",\n \"protegee\",\n \"proton\",\n \"prototype\",\n \"protozoan\",\n \"protract\",\n \"protrude\",\n \"proud\",\n \"provable\",\n \"proved\",\n \"proven\",\n \"provided\",\n \"provider\",\n \"providing\",\n \"province\",\n \"proving\",\n \"provoke\",\n \"provoking\",\n \"provolone\",\n \"prowess\",\n \"prowler\",\n \"prowling\",\n \"proximity\",\n \"proxy\",\n \"prozac\",\n \"prude\",\n \"prudishly\",\n \"prune\",\n \"pruning\",\n \"pry\",\n \"psychic\",\n \"public\",\n \"publisher\",\n \"pucker\",\n \"pueblo\",\n \"pug\",\n \"pull\",\n \"pulmonary\",\n \"pulp\",\n \"pulsate\",\n \"pulse\",\n \"pulverize\",\n \"puma\",\n \"pumice\",\n \"pummel\",\n \"punch\",\n \"punctual\",\n \"punctuate\",\n \"punctured\",\n \"pungent\",\n \"punisher\",\n \"punk\",\n \"pupil\",\n \"puppet\",\n \"puppy\",\n \"purchase\",\n \"pureblood\",\n \"purebred\",\n \"purely\",\n \"pureness\",\n \"purgatory\",\n \"purge\",\n \"purging\",\n \"purifier\",\n \"purify\",\n \"purist\",\n \"puritan\",\n \"purity\",\n \"purple\",\n \"purplish\",\n \"purposely\",\n \"purr\",\n \"purse\",\n \"pursuable\",\n \"pursuant\",\n \"pursuit\",\n \"purveyor\",\n \"pushcart\",\n \"pushchair\",\n \"pusher\",\n \"pushiness\",\n \"pushing\",\n \"pushover\",\n \"pushpin\",\n \"pushup\",\n \"pushy\",\n \"putdown\",\n \"putt\",\n \"puzzle\",\n \"puzzling\",\n \"pyramid\",\n \"pyromania\",\n \"python\",\n \"quack\",\n \"quadrant\",\n \"quail\",\n \"quaintly\",\n \"quake\",\n \"quaking\",\n \"qualified\",\n \"qualifier\",\n \"qualify\",\n \"quality\",\n \"qualm\",\n \"quantum\",\n \"quarrel\",\n \"quarry\",\n \"quartered\",\n \"quarterly\",\n \"quarters\",\n \"quartet\",\n \"quench\",\n \"query\",\n \"quicken\",\n \"quickly\",\n \"quickness\",\n \"quicksand\",\n \"quickstep\",\n \"quiet\",\n \"quill\",\n \"quilt\",\n \"quintet\",\n \"quintuple\",\n \"quirk\",\n \"quit\",\n \"quiver\",\n \"quizzical\",\n \"quotable\",\n \"quotation\",\n \"quote\",\n \"rabid\",\n \"race\",\n \"racing\",\n \"racism\",\n \"rack\",\n \"racoon\",\n \"radar\",\n \"radial\",\n \"radiance\",\n \"radiantly\",\n \"radiated\",\n \"radiation\",\n \"radiator\",\n \"radio\",\n \"radish\",\n \"raffle\",\n \"raft\",\n \"rage\",\n \"ragged\",\n \"raging\",\n \"ragweed\",\n \"raider\",\n \"railcar\",\n \"railing\",\n \"railroad\",\n \"railway\",\n \"raisin\",\n \"rake\",\n \"raking\",\n \"rally\",\n \"ramble\",\n \"rambling\",\n \"ramp\",\n \"ramrod\",\n \"ranch\",\n \"rancidity\",\n \"random\",\n \"ranged\",\n \"ranger\",\n \"ranging\",\n \"ranked\",\n \"ranking\",\n \"ransack\",\n \"ranting\",\n \"rants\",\n \"rare\",\n \"rarity\",\n \"rascal\",\n \"rash\",\n \"rasping\",\n \"ravage\",\n \"raven\",\n \"ravine\",\n \"raving\",\n \"ravioli\",\n \"ravishing\",\n \"reabsorb\",\n \"reach\",\n \"reacquire\",\n \"reaction\",\n \"reactive\",\n \"reactor\",\n \"reaffirm\",\n \"ream\",\n \"reanalyze\",\n \"reappear\",\n \"reapply\",\n \"reappoint\",\n \"reapprove\",\n \"rearrange\",\n \"rearview\",\n \"reason\",\n \"reassign\",\n \"reassure\",\n \"reattach\",\n \"reawake\",\n \"rebalance\",\n \"rebate\",\n \"rebel\",\n \"rebirth\",\n \"reboot\",\n \"reborn\",\n \"rebound\",\n \"rebuff\",\n \"rebuild\",\n \"rebuilt\",\n \"reburial\",\n \"rebuttal\",\n \"recall\",\n \"recant\",\n \"recapture\",\n \"recast\",\n \"recede\",\n \"recent\",\n \"recess\",\n \"recharger\",\n \"recipient\",\n \"recital\",\n \"recite\",\n \"reckless\",\n \"reclaim\",\n \"recliner\",\n \"reclining\",\n \"recluse\",\n \"reclusive\",\n \"recognize\",\n \"recoil\",\n \"recollect\",\n \"recolor\",\n \"reconcile\",\n \"reconfirm\",\n \"reconvene\",\n \"recopy\",\n \"record\",\n \"recount\",\n \"recoup\",\n \"recovery\",\n \"recreate\",\n \"rectal\",\n \"rectangle\",\n \"rectified\",\n \"rectify\",\n \"recycled\",\n \"recycler\",\n \"recycling\",\n \"reemerge\",\n \"reenact\",\n \"reenter\",\n \"reentry\",\n \"reexamine\",\n \"referable\",\n \"referee\",\n \"reference\",\n \"refill\",\n \"refinance\",\n \"refined\",\n \"refinery\",\n \"refining\",\n \"refinish\",\n \"reflected\",\n \"reflector\",\n \"reflex\",\n \"reflux\",\n \"refocus\",\n \"refold\",\n \"reforest\",\n \"reformat\",\n \"reformed\",\n \"reformer\",\n \"reformist\",\n \"refract\",\n \"refrain\",\n \"refreeze\",\n \"refresh\",\n \"refried\",\n \"refueling\",\n \"refund\",\n \"refurbish\",\n \"refurnish\",\n \"refusal\",\n \"refuse\",\n \"refusing\",\n \"refutable\",\n \"refute\",\n \"regain\",\n \"regalia\",\n \"regally\",\n \"reggae\",\n \"regime\",\n \"region\",\n \"register\",\n \"registrar\",\n \"registry\",\n \"regress\",\n \"regretful\",\n \"regroup\",\n \"regular\",\n \"regulate\",\n \"regulator\",\n \"rehab\",\n \"reheat\",\n \"rehire\",\n \"rehydrate\",\n \"reimburse\",\n \"reissue\",\n \"reiterate\",\n \"rejoice\",\n \"rejoicing\",\n \"rejoin\",\n \"rekindle\",\n \"relapse\",\n \"relapsing\",\n \"relatable\",\n \"related\",\n \"relation\",\n \"relative\",\n \"relax\",\n \"relay\",\n \"relearn\",\n \"release\",\n \"relenting\",\n \"reliable\",\n \"reliably\",\n \"reliance\",\n \"reliant\",\n \"relic\",\n \"relieve\",\n \"relieving\",\n \"relight\",\n \"relish\",\n \"relive\",\n \"reload\",\n \"relocate\",\n \"relock\",\n \"reluctant\",\n \"rely\",\n \"remake\",\n \"remark\",\n \"remarry\",\n \"rematch\",\n \"remedial\",\n \"remedy\",\n \"remember\",\n \"reminder\",\n \"remindful\",\n \"remission\",\n \"remix\",\n \"remnant\",\n \"remodeler\",\n \"remold\",\n \"remorse\",\n \"remote\",\n \"removable\",\n \"removal\",\n \"removed\",\n \"remover\",\n \"removing\",\n \"rename\",\n \"renderer\",\n \"rendering\",\n \"rendition\",\n \"renegade\",\n \"renewable\",\n \"renewably\",\n \"renewal\",\n \"renewed\",\n \"renounce\",\n \"renovate\",\n \"renovator\",\n \"rentable\",\n \"rental\",\n \"rented\",\n \"renter\",\n \"reoccupy\",\n \"reoccur\",\n \"reopen\",\n \"reorder\",\n \"repackage\",\n \"repacking\",\n \"repaint\",\n \"repair\",\n \"repave\",\n \"repaying\",\n \"repayment\",\n \"repeal\",\n \"repeated\",\n \"repeater\",\n \"repent\",\n \"rephrase\",\n \"replace\",\n \"replay\",\n \"replica\",\n \"reply\",\n \"reporter\",\n \"repose\",\n \"repossess\",\n \"repost\",\n \"repressed\",\n \"reprimand\",\n \"reprint\",\n \"reprise\",\n \"reproach\",\n \"reprocess\",\n \"reproduce\",\n \"reprogram\",\n \"reps\",\n \"reptile\",\n \"reptilian\",\n \"repugnant\",\n \"repulsion\",\n \"repulsive\",\n \"repurpose\",\n \"reputable\",\n \"reputably\",\n \"request\",\n \"require\",\n \"requisite\",\n \"reroute\",\n \"rerun\",\n \"resale\",\n \"resample\",\n \"rescuer\",\n \"reseal\",\n \"research\",\n \"reselect\",\n \"reseller\",\n \"resemble\",\n \"resend\",\n \"resent\",\n \"reset\",\n \"reshape\",\n \"reshoot\",\n \"reshuffle\",\n \"residence\",\n \"residency\",\n \"resident\",\n \"residual\",\n \"residue\",\n \"resigned\",\n \"resilient\",\n \"resistant\",\n \"resisting\",\n \"resize\",\n \"resolute\",\n \"resolved\",\n \"resonant\",\n \"resonate\",\n \"resort\",\n \"resource\",\n \"respect\",\n \"resubmit\",\n \"result\",\n \"resume\",\n \"resupply\",\n \"resurface\",\n \"resurrect\",\n \"retail\",\n \"retainer\",\n \"retaining\",\n \"retake\",\n \"retaliate\",\n \"retention\",\n \"rethink\",\n \"retinal\",\n \"retired\",\n \"retiree\",\n \"retiring\",\n \"retold\",\n \"retool\",\n \"retorted\",\n \"retouch\",\n \"retrace\",\n \"retract\",\n \"retrain\",\n \"retread\",\n \"retreat\",\n \"retrial\",\n \"retrieval\",\n \"retriever\",\n \"retry\",\n \"return\",\n \"retying\",\n \"retype\",\n \"reunion\",\n \"reunite\",\n \"reusable\",\n \"reuse\",\n \"reveal\",\n \"reveler\",\n \"revenge\",\n \"revenue\",\n \"reverb\",\n \"revered\",\n \"reverence\",\n \"reverend\",\n \"reversal\",\n \"reverse\",\n \"reversing\",\n \"reversion\",\n \"revert\",\n \"revisable\",\n \"revise\",\n \"revision\",\n \"revisit\",\n \"revivable\",\n \"revival\",\n \"reviver\",\n \"reviving\",\n \"revocable\",\n \"revoke\",\n \"revolt\",\n \"revolver\",\n \"revolving\",\n \"reward\",\n \"rewash\",\n \"rewind\",\n \"rewire\",\n \"reword\",\n \"rework\",\n \"rewrap\",\n \"rewrite\",\n \"rhyme\",\n \"ribbon\",\n \"ribcage\",\n \"rice\",\n \"riches\",\n \"richly\",\n \"richness\",\n \"rickety\",\n \"ricotta\",\n \"riddance\",\n \"ridden\",\n \"ride\",\n \"riding\",\n \"rifling\",\n \"rift\",\n \"rigging\",\n \"rigid\",\n \"rigor\",\n \"rimless\",\n \"rimmed\",\n \"rind\",\n \"rink\",\n \"rinse\",\n \"rinsing\",\n \"riot\",\n \"ripcord\",\n \"ripeness\",\n \"ripening\",\n \"ripping\",\n \"ripple\",\n \"rippling\",\n \"riptide\",\n \"rise\",\n \"rising\",\n \"risk\",\n \"risotto\",\n \"ritalin\",\n \"ritzy\",\n \"rival\",\n \"riverbank\",\n \"riverbed\",\n \"riverboat\",\n \"riverside\",\n \"riveter\",\n \"riveting\",\n \"roamer\",\n \"roaming\",\n \"roast\",\n \"robbing\",\n \"robe\",\n \"robin\",\n \"robotics\",\n \"robust\",\n \"rockband\",\n \"rocker\",\n \"rocket\",\n \"rockfish\",\n \"rockiness\",\n \"rocking\",\n \"rocklike\",\n \"rockslide\",\n \"rockstar\",\n \"rocky\",\n \"rogue\",\n \"roman\",\n \"romp\",\n \"rope\",\n \"roping\",\n \"roster\",\n \"rosy\",\n \"rotten\",\n \"rotting\",\n \"rotunda\",\n \"roulette\",\n \"rounding\",\n \"roundish\",\n \"roundness\",\n \"roundup\",\n \"roundworm\",\n \"routine\",\n \"routing\",\n \"rover\",\n \"roving\",\n \"royal\",\n \"rubbed\",\n \"rubber\",\n \"rubbing\",\n \"rubble\",\n \"rubdown\",\n \"ruby\",\n \"ruckus\",\n \"rudder\",\n \"rug\",\n \"ruined\",\n \"rule\",\n \"rumble\",\n \"rumbling\",\n \"rummage\",\n \"rumor\",\n \"runaround\",\n \"rundown\",\n \"runner\",\n \"running\",\n \"runny\",\n \"runt\",\n \"runway\",\n \"rupture\",\n \"rural\",\n \"ruse\",\n \"rush\",\n \"rust\",\n \"rut\",\n \"sabbath\",\n \"sabotage\",\n \"sacrament\",\n \"sacred\",\n \"sacrifice\",\n \"sadden\",\n \"saddlebag\",\n \"saddled\",\n \"saddling\",\n \"sadly\",\n \"sadness\",\n \"safari\",\n \"safeguard\",\n \"safehouse\",\n \"safely\",\n \"safeness\",\n \"saffron\",\n \"saga\",\n \"sage\",\n \"sagging\",\n \"saggy\",\n \"said\",\n \"saint\",\n \"sake\",\n \"salad\",\n \"salami\",\n \"salaried\",\n \"salary\",\n \"saline\",\n \"salon\",\n \"saloon\",\n \"salsa\",\n \"salt\",\n \"salutary\",\n \"salute\",\n \"salvage\",\n \"salvaging\",\n \"salvation\",\n \"same\",\n \"sample\",\n \"sampling\",\n \"sanction\",\n \"sanctity\",\n \"sanctuary\",\n \"sandal\",\n \"sandbag\",\n \"sandbank\",\n \"sandbar\",\n \"sandblast\",\n \"sandbox\",\n \"sanded\",\n \"sandfish\",\n \"sanding\",\n \"sandlot\",\n \"sandpaper\",\n \"sandpit\",\n \"sandstone\",\n \"sandstorm\",\n \"sandworm\",\n \"sandy\",\n \"sanitary\",\n \"sanitizer\",\n \"sank\",\n \"santa\",\n \"sapling\",\n \"sappiness\",\n \"sappy\",\n \"sarcasm\",\n \"sarcastic\",\n \"sardine\",\n \"sash\",\n \"sasquatch\",\n \"sassy\",\n \"satchel\",\n \"satiable\",\n \"satin\",\n \"satirical\",\n \"satisfied\",\n \"satisfy\",\n \"saturate\",\n \"saturday\",\n \"sauciness\",\n \"saucy\",\n \"sauna\",\n \"savage\",\n \"savanna\",\n \"saved\",\n \"savings\",\n \"savior\",\n \"savor\",\n \"saxophone\",\n \"say\",\n \"scabbed\",\n \"scabby\",\n \"scalded\",\n \"scalding\",\n \"scale\",\n \"scaling\",\n \"scallion\",\n \"scallop\",\n \"scalping\",\n \"scam\",\n \"scandal\",\n \"scanner\",\n \"scanning\",\n \"scant\",\n \"scapegoat\",\n \"scarce\",\n \"scarcity\",\n \"scarecrow\",\n \"scared\",\n \"scarf\",\n \"scarily\",\n \"scariness\",\n \"scarring\",\n \"scary\",\n \"scavenger\",\n \"scenic\",\n \"schedule\",\n \"schematic\",\n \"scheme\",\n \"scheming\",\n \"schilling\",\n \"schnapps\",\n \"scholar\",\n \"science\",\n \"scientist\",\n \"scion\",\n \"scoff\",\n \"scolding\",\n \"scone\",\n \"scoop\",\n \"scooter\",\n \"scope\",\n \"scorch\",\n \"scorebook\",\n \"scorecard\",\n \"scored\",\n \"scoreless\",\n \"scorer\",\n \"scoring\",\n \"scorn\",\n \"scorpion\",\n \"scotch\",\n \"scoundrel\",\n \"scoured\",\n \"scouring\",\n \"scouting\",\n \"scouts\",\n \"scowling\",\n \"scrabble\",\n \"scraggly\",\n \"scrambled\",\n \"scrambler\",\n \"scrap\",\n \"scratch\",\n \"scrawny\",\n \"screen\",\n \"scribble\",\n \"scribe\",\n \"scribing\",\n \"scrimmage\",\n \"script\",\n \"scroll\",\n \"scrooge\",\n \"scrounger\",\n \"scrubbed\",\n \"scrubber\",\n \"scruffy\",\n \"scrunch\",\n \"scrutiny\",\n \"scuba\",\n \"scuff\",\n \"sculptor\",\n \"sculpture\",\n \"scurvy\",\n \"scuttle\",\n \"secluded\",\n \"secluding\",\n \"seclusion\",\n \"second\",\n \"secrecy\",\n \"secret\",\n \"sectional\",\n \"sector\",\n \"secular\",\n \"securely\",\n \"security\",\n \"sedan\",\n \"sedate\",\n \"sedation\",\n \"sedative\",\n \"sediment\",\n \"seduce\",\n \"seducing\",\n \"segment\",\n \"seismic\",\n \"seizing\",\n \"seldom\",\n \"selected\",\n \"selection\",\n \"selective\",\n \"selector\",\n \"self\",\n \"seltzer\",\n \"semantic\",\n \"semester\",\n \"semicolon\",\n \"semifinal\",\n \"seminar\",\n \"semisoft\",\n \"semisweet\",\n \"senate\",\n \"senator\",\n \"send\",\n \"senior\",\n \"senorita\",\n \"sensation\",\n \"sensitive\",\n \"sensitize\",\n \"sensually\",\n \"sensuous\",\n \"sepia\",\n \"september\",\n \"septic\",\n \"septum\",\n \"sequel\",\n \"sequence\",\n \"sequester\",\n \"series\",\n \"sermon\",\n \"serotonin\",\n \"serpent\",\n \"serrated\",\n \"serve\",\n \"service\",\n \"serving\",\n \"sesame\",\n \"sessions\",\n \"setback\",\n \"setting\",\n \"settle\",\n \"settling\",\n \"setup\",\n \"sevenfold\",\n \"seventeen\",\n \"seventh\",\n \"seventy\",\n \"severity\",\n \"shabby\",\n \"shack\",\n \"shaded\",\n \"shadily\",\n \"shadiness\",\n \"shading\",\n \"shadow\",\n \"shady\",\n \"shaft\",\n \"shakable\",\n \"shakily\",\n \"shakiness\",\n \"shaking\",\n \"shaky\",\n \"shale\",\n \"shallot\",\n \"shallow\",\n \"shame\",\n \"shampoo\",\n \"shamrock\",\n \"shank\",\n \"shanty\",\n \"shape\",\n \"shaping\",\n \"share\",\n \"sharpener\",\n \"sharper\",\n \"sharpie\",\n \"sharply\",\n \"sharpness\",\n \"shawl\",\n \"sheath\",\n \"shed\",\n \"sheep\",\n \"sheet\",\n \"shelf\",\n \"shell\",\n \"shelter\",\n \"shelve\",\n \"shelving\",\n \"sherry\",\n \"shield\",\n \"shifter\",\n \"shifting\",\n \"shiftless\",\n \"shifty\",\n \"shimmer\",\n \"shimmy\",\n \"shindig\",\n \"shine\",\n \"shingle\",\n \"shininess\",\n \"shining\",\n \"shiny\",\n \"ship\",\n \"shirt\",\n \"shivering\",\n \"shock\",\n \"shone\",\n \"shoplift\",\n \"shopper\",\n \"shopping\",\n \"shoptalk\",\n \"shore\",\n \"shortage\",\n \"shortcake\",\n \"shortcut\",\n \"shorten\",\n \"shorter\",\n \"shorthand\",\n \"shortlist\",\n \"shortly\",\n \"shortness\",\n \"shorts\",\n \"shortwave\",\n \"shorty\",\n \"shout\",\n \"shove\",\n \"showbiz\",\n \"showcase\",\n \"showdown\",\n \"shower\",\n \"showgirl\",\n \"showing\",\n \"showman\",\n \"shown\",\n \"showoff\",\n \"showpiece\",\n \"showplace\",\n \"showroom\",\n \"showy\",\n \"shrank\",\n \"shrapnel\",\n \"shredder\",\n \"shredding\",\n \"shrewdly\",\n \"shriek\",\n \"shrill\",\n \"shrimp\",\n \"shrine\",\n \"shrink\",\n \"shrivel\",\n \"shrouded\",\n \"shrubbery\",\n \"shrubs\",\n \"shrug\",\n \"shrunk\",\n \"shucking\",\n \"shudder\",\n \"shuffle\",\n \"shuffling\",\n \"shun\",\n \"shush\",\n \"shut\",\n \"shy\",\n \"siamese\",\n \"siberian\",\n \"sibling\",\n \"siding\",\n \"sierra\",\n \"siesta\",\n \"sift\",\n \"sighing\",\n \"silenced\",\n \"silencer\",\n \"silent\",\n \"silica\",\n \"silicon\",\n \"silk\",\n \"silliness\",\n \"silly\",\n \"silo\",\n \"silt\",\n \"silver\",\n \"similarly\",\n \"simile\",\n \"simmering\",\n \"simple\",\n \"simplify\",\n \"simply\",\n \"sincere\",\n \"sincerity\",\n \"singer\",\n \"singing\",\n \"single\",\n \"singular\",\n \"sinister\",\n \"sinless\",\n \"sinner\",\n \"sinuous\",\n \"sip\",\n \"siren\",\n \"sister\",\n \"sitcom\",\n \"sitter\",\n \"sitting\",\n \"situated\",\n \"situation\",\n \"sixfold\",\n \"sixteen\",\n \"sixth\",\n \"sixties\",\n \"sixtieth\",\n \"sixtyfold\",\n \"sizable\",\n \"sizably\",\n \"size\",\n \"sizing\",\n \"sizzle\",\n \"sizzling\",\n \"skater\",\n \"skating\",\n \"skedaddle\",\n \"skeletal\",\n \"skeleton\",\n \"skeptic\",\n \"sketch\",\n \"skewed\",\n \"skewer\",\n \"skid\",\n \"skied\",\n \"skier\",\n \"skies\",\n \"skiing\",\n \"skilled\",\n \"skillet\",\n \"skillful\",\n \"skimmed\",\n \"skimmer\",\n \"skimming\",\n \"skimpily\",\n \"skincare\",\n \"skinhead\",\n \"skinless\",\n \"skinning\",\n \"skinny\",\n \"skintight\",\n \"skipper\",\n \"skipping\",\n \"skirmish\",\n \"skirt\",\n \"skittle\",\n \"skydiver\",\n \"skylight\",\n \"skyline\",\n \"skype\",\n \"skyrocket\",\n \"skyward\",\n \"slab\",\n \"slacked\",\n \"slacker\",\n \"slacking\",\n \"slackness\",\n \"slacks\",\n \"slain\",\n \"slam\",\n \"slander\",\n \"slang\",\n \"slapping\",\n \"slapstick\",\n \"slashed\",\n \"slashing\",\n \"slate\",\n \"slather\",\n \"slaw\",\n \"sled\",\n \"sleek\",\n \"sleep\",\n \"sleet\",\n \"sleeve\",\n \"slept\",\n \"sliceable\",\n \"sliced\",\n \"slicer\",\n \"slicing\",\n \"slick\",\n \"slider\",\n \"slideshow\",\n \"sliding\",\n \"slighted\",\n \"slighting\",\n \"slightly\",\n \"slimness\",\n \"slimy\",\n \"slinging\",\n \"slingshot\",\n \"slinky\",\n \"slip\",\n \"slit\",\n \"sliver\",\n \"slobbery\",\n \"slogan\",\n \"sloped\",\n \"sloping\",\n \"sloppily\",\n \"sloppy\",\n \"slot\",\n \"slouching\",\n \"slouchy\",\n \"sludge\",\n \"slug\",\n \"slum\",\n \"slurp\",\n \"slush\",\n \"sly\",\n \"small\",\n \"smartly\",\n \"smartness\",\n \"smasher\",\n \"smashing\",\n \"smashup\",\n \"smell\",\n \"smelting\",\n \"smile\",\n \"smilingly\",\n \"smirk\",\n \"smite\",\n \"smith\",\n \"smitten\",\n \"smock\",\n \"smog\",\n \"smoked\",\n \"smokeless\",\n \"smokiness\",\n \"smoking\",\n \"smoky\",\n \"smolder\",\n \"smooth\",\n \"smother\",\n \"smudge\",\n \"smudgy\",\n \"smuggler\",\n \"smuggling\",\n \"smugly\",\n \"smugness\",\n \"snack\",\n \"snagged\",\n \"snaking\",\n \"snap\",\n \"snare\",\n \"snarl\",\n \"snazzy\",\n \"sneak\",\n \"sneer\",\n \"sneeze\",\n \"sneezing\",\n \"snide\",\n \"sniff\",\n \"snippet\",\n \"snipping\",\n \"snitch\",\n \"snooper\",\n \"snooze\",\n \"snore\",\n \"snoring\",\n \"snorkel\",\n \"snort\",\n \"snout\",\n \"snowbird\",\n \"snowboard\",\n \"snowbound\",\n \"snowcap\",\n \"snowdrift\",\n \"snowdrop\",\n \"snowfall\",\n \"snowfield\",\n \"snowflake\",\n \"snowiness\",\n \"snowless\",\n \"snowman\",\n \"snowplow\",\n \"snowshoe\",\n \"snowstorm\",\n \"snowsuit\",\n \"snowy\",\n \"snub\",\n \"snuff\",\n \"snuggle\",\n \"snugly\",\n \"snugness\",\n \"speak\",\n \"spearfish\",\n \"spearhead\",\n \"spearman\",\n \"spearmint\",\n \"species\",\n \"specimen\",\n \"specked\",\n \"speckled\",\n \"specks\",\n \"spectacle\",\n \"spectator\",\n \"spectrum\",\n \"speculate\",\n \"speech\",\n \"speed\",\n \"spellbind\",\n \"speller\",\n \"spelling\",\n \"spendable\",\n \"spender\",\n \"spending\",\n \"spent\",\n \"spew\",\n \"sphere\",\n \"spherical\",\n \"sphinx\",\n \"spider\",\n \"spied\",\n \"spiffy\",\n \"spill\",\n \"spilt\",\n \"spinach\",\n \"spinal\",\n \"spindle\",\n \"spinner\",\n \"spinning\",\n \"spinout\",\n \"spinster\",\n \"spiny\",\n \"spiral\",\n \"spirited\",\n \"spiritism\",\n \"spirits\",\n \"spiritual\",\n \"splashed\",\n \"splashing\",\n \"splashy\",\n \"splatter\",\n \"spleen\",\n \"splendid\",\n \"splendor\",\n \"splice\",\n \"splicing\",\n \"splinter\",\n \"splotchy\",\n \"splurge\",\n \"spoilage\",\n \"spoiled\",\n \"spoiler\",\n \"spoiling\",\n \"spoils\",\n \"spoken\",\n \"spokesman\",\n \"sponge\",\n \"spongy\",\n \"sponsor\",\n \"spoof\",\n \"spookily\",\n \"spooky\",\n \"spool\",\n \"spoon\",\n \"spore\",\n \"sporting\",\n \"sports\",\n \"sporty\",\n \"spotless\",\n \"spotlight\",\n \"spotted\",\n \"spotter\",\n \"spotting\",\n \"spotty\",\n \"spousal\",\n \"spouse\",\n \"spout\",\n \"sprain\",\n \"sprang\",\n \"sprawl\",\n \"spray\",\n \"spree\",\n \"sprig\",\n \"spring\",\n \"sprinkled\",\n \"sprinkler\",\n \"sprint\",\n \"sprite\",\n \"sprout\",\n \"spruce\",\n \"sprung\",\n \"spry\",\n \"spud\",\n \"spur\",\n \"sputter\",\n \"spyglass\",\n \"squabble\",\n \"squad\",\n \"squall\",\n \"squander\",\n \"squash\",\n \"squatted\",\n \"squatter\",\n \"squatting\",\n \"squeak\",\n \"squealer\",\n \"squealing\",\n \"squeamish\",\n \"squeegee\",\n \"squeeze\",\n \"squeezing\",\n \"squid\",\n \"squiggle\",\n \"squiggly\",\n \"squint\",\n \"squire\",\n \"squirt\",\n \"squishier\",\n \"squishy\",\n \"stability\",\n \"stabilize\",\n \"stable\",\n \"stack\",\n \"stadium\",\n \"staff\",\n \"stage\",\n \"staging\",\n \"stagnant\",\n \"stagnate\",\n \"stainable\",\n \"stained\",\n \"staining\",\n \"stainless\",\n \"stalemate\",\n \"staleness\",\n \"stalling\",\n \"stallion\",\n \"stamina\",\n \"stammer\",\n \"stamp\",\n \"stand\",\n \"stank\",\n \"staple\",\n \"stapling\",\n \"starboard\",\n \"starch\",\n \"stardom\",\n \"stardust\",\n \"starfish\",\n \"stargazer\",\n \"staring\",\n \"stark\",\n \"starless\",\n \"starlet\",\n \"starlight\",\n \"starlit\",\n \"starring\",\n \"starry\",\n \"starship\",\n \"starter\",\n \"starting\",\n \"startle\",\n \"startling\",\n \"startup\",\n \"starved\",\n \"starving\",\n \"stash\",\n \"state\",\n \"static\",\n \"statistic\",\n \"statue\",\n \"stature\",\n \"status\",\n \"statute\",\n \"statutory\",\n \"staunch\",\n \"stays\",\n \"steadfast\",\n \"steadier\",\n \"steadily\",\n \"steadying\",\n \"steam\",\n \"steed\",\n \"steep\",\n \"steerable\",\n \"steering\",\n \"steersman\",\n \"stegosaur\",\n \"stellar\",\n \"stem\",\n \"stench\",\n \"stencil\",\n \"step\",\n \"stereo\",\n \"sterile\",\n \"sterility\",\n \"sterilize\",\n \"sterling\",\n \"sternness\",\n \"sternum\",\n \"stew\",\n \"stick\",\n \"stiffen\",\n \"stiffly\",\n \"stiffness\",\n \"stifle\",\n \"stifling\",\n \"stillness\",\n \"stilt\",\n \"stimulant\",\n \"stimulate\",\n \"stimuli\",\n \"stimulus\",\n \"stinger\",\n \"stingily\",\n \"stinging\",\n \"stingray\",\n \"stingy\",\n \"stinking\",\n \"stinky\",\n \"stipend\",\n \"stipulate\",\n \"stir\",\n \"stitch\",\n \"stock\",\n \"stoic\",\n \"stoke\",\n \"stole\",\n \"stomp\",\n \"stonewall\",\n \"stoneware\",\n \"stonework\",\n \"stoning\",\n \"stony\",\n \"stood\",\n \"stooge\",\n \"stool\",\n \"stoop\",\n \"stoplight\",\n \"stoppable\",\n \"stoppage\",\n \"stopped\",\n \"stopper\",\n \"stopping\",\n \"stopwatch\",\n \"storable\",\n \"storage\",\n \"storeroom\",\n \"storewide\",\n \"storm\",\n \"stout\",\n \"stove\",\n \"stowaway\",\n \"stowing\",\n \"straddle\",\n \"straggler\",\n \"strained\",\n \"strainer\",\n \"straining\",\n \"strangely\",\n \"stranger\",\n \"strangle\",\n \"strategic\",\n \"strategy\",\n \"stratus\",\n \"straw\",\n \"stray\",\n \"streak\",\n \"stream\",\n \"street\",\n \"strength\",\n \"strenuous\",\n \"strep\",\n \"stress\",\n \"stretch\",\n \"strewn\",\n \"stricken\",\n \"strict\",\n \"stride\",\n \"strife\",\n \"strike\",\n \"striking\",\n \"strive\",\n \"striving\",\n \"strobe\",\n \"strode\",\n \"stroller\",\n \"strongbox\",\n \"strongly\",\n \"strongman\",\n \"struck\",\n \"structure\",\n \"strudel\",\n \"struggle\",\n \"strum\",\n \"strung\",\n \"strut\",\n \"stubbed\",\n \"stubble\",\n \"stubbly\",\n \"stubborn\",\n \"stucco\",\n \"stuck\",\n \"student\",\n \"studied\",\n \"studio\",\n \"study\",\n \"stuffed\",\n \"stuffing\",\n \"stuffy\",\n \"stumble\",\n \"stumbling\",\n \"stump\",\n \"stung\",\n \"stunned\",\n \"stunner\",\n \"stunning\",\n \"stunt\",\n \"stupor\",\n \"sturdily\",\n \"sturdy\",\n \"styling\",\n \"stylishly\",\n \"stylist\",\n \"stylized\",\n \"stylus\",\n \"suave\",\n \"subarctic\",\n \"subatomic\",\n \"subdivide\",\n \"subdued\",\n \"subduing\",\n \"subfloor\",\n \"subgroup\",\n \"subheader\",\n \"subject\",\n \"sublease\",\n \"sublet\",\n \"sublevel\",\n \"sublime\",\n \"submarine\",\n \"submerge\",\n \"submersed\",\n \"submitter\",\n \"subpanel\",\n \"subpar\",\n \"subplot\",\n \"subprime\",\n \"subscribe\",\n \"subscript\",\n \"subsector\",\n \"subside\",\n \"subsiding\",\n \"subsidize\",\n \"subsidy\",\n \"subsoil\",\n \"subsonic\",\n \"substance\",\n \"subsystem\",\n \"subtext\",\n \"subtitle\",\n \"subtly\",\n \"subtotal\",\n \"subtract\",\n \"subtype\",\n \"suburb\",\n \"subway\",\n \"subwoofer\",\n \"subzero\",\n \"succulent\",\n \"such\",\n \"suction\",\n \"sudden\",\n \"sudoku\",\n \"suds\",\n \"sufferer\",\n \"suffering\",\n \"suffice\",\n \"suffix\",\n \"suffocate\",\n \"suffrage\",\n \"sugar\",\n \"suggest\",\n \"suing\",\n \"suitable\",\n \"suitably\",\n \"suitcase\",\n \"suitor\",\n \"sulfate\",\n \"sulfide\",\n \"sulfite\",\n \"sulfur\",\n \"sulk\",\n \"sullen\",\n \"sulphate\",\n \"sulphuric\",\n \"sultry\",\n \"superbowl\",\n \"superglue\",\n \"superhero\",\n \"superior\",\n \"superjet\",\n \"superman\",\n \"supermom\",\n \"supernova\",\n \"supervise\",\n \"supper\",\n \"supplier\",\n \"supply\",\n \"support\",\n \"supremacy\",\n \"supreme\",\n \"surcharge\",\n \"surely\",\n \"sureness\",\n \"surface\",\n \"surfacing\",\n \"surfboard\",\n \"surfer\",\n \"surgery\",\n \"surgical\",\n \"surging\",\n \"surname\",\n \"surpass\",\n \"surplus\",\n \"surprise\",\n \"surreal\",\n \"surrender\",\n \"surrogate\",\n \"surround\",\n \"survey\",\n \"survival\",\n \"survive\",\n \"surviving\",\n \"survivor\",\n \"sushi\",\n \"suspect\",\n \"suspend\",\n \"suspense\",\n \"sustained\",\n \"sustainer\",\n \"swab\",\n \"swaddling\",\n \"swagger\",\n \"swampland\",\n \"swan\",\n \"swapping\",\n \"swarm\",\n \"sway\",\n \"swear\",\n \"sweat\",\n \"sweep\",\n \"swell\",\n \"swept\",\n \"swerve\",\n \"swifter\",\n \"swiftly\",\n \"swiftness\",\n \"swimmable\",\n \"swimmer\",\n \"swimming\",\n \"swimsuit\",\n \"swimwear\",\n \"swinger\",\n \"swinging\",\n \"swipe\",\n \"swirl\",\n \"switch\",\n \"swivel\",\n \"swizzle\",\n \"swooned\",\n \"swoop\",\n \"swoosh\",\n \"swore\",\n \"sworn\",\n \"swung\",\n \"sycamore\",\n \"sympathy\",\n \"symphonic\",\n \"symphony\",\n \"symptom\",\n \"synapse\",\n \"syndrome\",\n \"synergy\",\n \"synopses\",\n \"synopsis\",\n \"synthesis\",\n \"synthetic\",\n \"syrup\",\n \"system\",\n \"t-shirt\",\n \"tabasco\",\n \"tabby\",\n \"tableful\",\n \"tables\",\n \"tablet\",\n \"tableware\",\n \"tabloid\",\n \"tackiness\",\n \"tacking\",\n \"tackle\",\n \"tackling\",\n \"tacky\",\n \"taco\",\n \"tactful\",\n \"tactical\",\n \"tactics\",\n \"tactile\",\n \"tactless\",\n \"tadpole\",\n \"taekwondo\",\n \"tag\",\n \"tainted\",\n \"take\",\n \"taking\",\n \"talcum\",\n \"talisman\",\n \"tall\",\n \"talon\",\n \"tamale\",\n \"tameness\",\n \"tamer\",\n \"tamper\",\n \"tank\",\n \"tanned\",\n \"tannery\",\n \"tanning\",\n \"tantrum\",\n \"tapeless\",\n \"tapered\",\n \"tapering\",\n \"tapestry\",\n \"tapioca\",\n \"tapping\",\n \"taps\",\n \"tarantula\",\n \"target\",\n \"tarmac\",\n \"tarnish\",\n \"tarot\",\n \"tartar\",\n \"tartly\",\n \"tartness\",\n \"task\",\n \"tassel\",\n \"taste\",\n \"tastiness\",\n \"tasting\",\n \"tasty\",\n \"tattered\",\n \"tattle\",\n \"tattling\",\n \"tattoo\",\n \"taunt\",\n \"tavern\",\n \"thank\",\n \"that\",\n \"thaw\",\n \"theater\",\n \"theatrics\",\n \"thee\",\n \"theft\",\n \"theme\",\n \"theology\",\n \"theorize\",\n \"thermal\",\n \"thermos\",\n \"thesaurus\",\n \"these\",\n \"thesis\",\n \"thespian\",\n \"thicken\",\n \"thicket\",\n \"thickness\",\n \"thieving\",\n \"thievish\",\n \"thigh\",\n \"thimble\",\n \"thing\",\n \"think\",\n \"thinly\",\n \"thinner\",\n \"thinness\",\n \"thinning\",\n \"thirstily\",\n \"thirsting\",\n \"thirsty\",\n \"thirteen\",\n \"thirty\",\n \"thong\",\n \"thorn\",\n \"those\",\n \"thousand\",\n \"thrash\",\n \"thread\",\n \"threaten\",\n \"threefold\",\n \"thrift\",\n \"thrill\",\n \"thrive\",\n \"thriving\",\n \"throat\",\n \"throbbing\",\n \"throng\",\n \"throttle\",\n \"throwaway\",\n \"throwback\",\n \"thrower\",\n \"throwing\",\n \"thud\",\n \"thumb\",\n \"thumping\",\n \"thursday\",\n \"thus\",\n \"thwarting\",\n \"thyself\",\n \"tiara\",\n \"tibia\",\n \"tidal\",\n \"tidbit\",\n \"tidiness\",\n \"tidings\",\n \"tidy\",\n \"tiger\",\n \"tighten\",\n \"tightly\",\n \"tightness\",\n \"tightrope\",\n \"tightwad\",\n \"tigress\",\n \"tile\",\n \"tiling\",\n \"till\",\n \"tilt\",\n \"timid\",\n \"timing\",\n \"timothy\",\n \"tinderbox\",\n \"tinfoil\",\n \"tingle\",\n \"tingling\",\n \"tingly\",\n \"tinker\",\n \"tinkling\",\n \"tinsel\",\n \"tinsmith\",\n \"tint\",\n \"tinwork\",\n \"tiny\",\n \"tipoff\",\n \"tipped\",\n \"tipper\",\n \"tipping\",\n \"tiptoeing\",\n \"tiptop\",\n \"tiring\",\n \"tissue\",\n \"trace\",\n \"tracing\",\n \"track\",\n \"traction\",\n \"tractor\",\n \"trade\",\n \"trading\",\n \"tradition\",\n \"traffic\",\n \"tragedy\",\n \"trailing\",\n \"trailside\",\n \"train\",\n \"traitor\",\n \"trance\",\n \"tranquil\",\n \"transfer\",\n \"transform\",\n \"translate\",\n \"transpire\",\n \"transport\",\n \"transpose\",\n \"trapdoor\",\n \"trapeze\",\n \"trapezoid\",\n \"trapped\",\n \"trapper\",\n \"trapping\",\n \"traps\",\n \"trash\",\n \"travel\",\n \"traverse\",\n \"travesty\",\n \"tray\",\n \"treachery\",\n \"treading\",\n \"treadmill\",\n \"treason\",\n \"treat\",\n \"treble\",\n \"tree\",\n \"trekker\",\n \"tremble\",\n \"trembling\",\n \"tremor\",\n \"trench\",\n \"trend\",\n \"trespass\",\n \"triage\",\n \"trial\",\n \"triangle\",\n \"tribesman\",\n \"tribunal\",\n \"tribune\",\n \"tributary\",\n \"tribute\",\n \"triceps\",\n \"trickery\",\n \"trickily\",\n \"tricking\",\n \"trickle\",\n \"trickster\",\n \"tricky\",\n \"tricolor\",\n \"tricycle\",\n \"trident\",\n \"tried\",\n \"trifle\",\n \"trifocals\",\n \"trillion\",\n \"trilogy\",\n \"trimester\",\n \"trimmer\",\n \"trimming\",\n \"trimness\",\n \"trinity\",\n \"trio\",\n \"tripod\",\n \"tripping\",\n \"triumph\",\n \"trivial\",\n \"trodden\",\n \"trolling\",\n \"trombone\",\n \"trophy\",\n \"tropical\",\n \"tropics\",\n \"trouble\",\n \"troubling\",\n \"trough\",\n \"trousers\",\n \"trout\",\n \"trowel\",\n \"truce\",\n \"truck\",\n \"truffle\",\n \"trump\",\n \"trunks\",\n \"trustable\",\n \"trustee\",\n \"trustful\",\n \"trusting\",\n \"trustless\",\n \"truth\",\n \"try\",\n \"tubby\",\n \"tubeless\",\n \"tubular\",\n \"tucking\",\n \"tuesday\",\n \"tug\",\n \"tuition\",\n \"tulip\",\n \"tumble\",\n \"tumbling\",\n \"tummy\",\n \"turban\",\n \"turbine\",\n \"turbofan\",\n \"turbojet\",\n \"turbulent\",\n \"turf\",\n \"turkey\",\n \"turmoil\",\n \"turret\",\n \"turtle\",\n \"tusk\",\n \"tutor\",\n \"tutu\",\n \"tux\",\n \"tweak\",\n \"tweed\",\n \"tweet\",\n \"tweezers\",\n \"twelve\",\n \"twentieth\",\n \"twenty\",\n \"twerp\",\n \"twice\",\n \"twiddle\",\n \"twiddling\",\n \"twig\",\n \"twilight\",\n \"twine\",\n \"twins\",\n \"twirl\",\n \"twistable\",\n \"twisted\",\n \"twister\",\n \"twisting\",\n \"twisty\",\n \"twitch\",\n \"twitter\",\n \"tycoon\",\n \"tying\",\n \"tyke\",\n \"udder\",\n \"ultimate\",\n \"ultimatum\",\n \"ultra\",\n \"umbilical\",\n \"umbrella\",\n \"umpire\",\n \"unabashed\",\n \"unable\",\n \"unadorned\",\n \"unadvised\",\n \"unafraid\",\n \"unaired\",\n \"unaligned\",\n \"unaltered\",\n \"unarmored\",\n \"unashamed\",\n \"unaudited\",\n \"unawake\",\n \"unaware\",\n \"unbaked\",\n \"unbalance\",\n \"unbeaten\",\n \"unbend\",\n \"unbent\",\n \"unbiased\",\n \"unbitten\",\n \"unblended\",\n \"unblessed\",\n \"unblock\",\n \"unbolted\",\n \"unbounded\",\n \"unboxed\",\n \"unbraided\",\n \"unbridle\",\n \"unbroken\",\n \"unbuckled\",\n \"unbundle\",\n \"unburned\",\n \"unbutton\",\n \"uncanny\",\n \"uncapped\",\n \"uncaring\",\n \"uncertain\",\n \"unchain\",\n \"unchanged\",\n \"uncharted\",\n \"uncheck\",\n \"uncivil\",\n \"unclad\",\n \"unclaimed\",\n \"unclamped\",\n \"unclasp\",\n \"uncle\",\n \"unclip\",\n \"uncloak\",\n \"unclog\",\n \"unclothed\",\n \"uncoated\",\n \"uncoiled\",\n \"uncolored\",\n \"uncombed\",\n \"uncommon\",\n \"uncooked\",\n \"uncork\",\n \"uncorrupt\",\n \"uncounted\",\n \"uncouple\",\n \"uncouth\",\n \"uncover\",\n \"uncross\",\n \"uncrown\",\n \"uncrushed\",\n \"uncured\",\n \"uncurious\",\n \"uncurled\",\n \"uncut\",\n \"undamaged\",\n \"undated\",\n \"undaunted\",\n \"undead\",\n \"undecided\",\n \"undefined\",\n \"underage\",\n \"underarm\",\n \"undercoat\",\n \"undercook\",\n \"undercut\",\n \"underdog\",\n \"underdone\",\n \"underfed\",\n \"underfeed\",\n \"underfoot\",\n \"undergo\",\n \"undergrad\",\n \"underhand\",\n \"underline\",\n \"underling\",\n \"undermine\",\n \"undermost\",\n \"underpaid\",\n \"underpass\",\n \"underpay\",\n \"underrate\",\n \"undertake\",\n \"undertone\",\n \"undertook\",\n \"undertow\",\n \"underuse\",\n \"underwear\",\n \"underwent\",\n \"underwire\",\n \"undesired\",\n \"undiluted\",\n \"undivided\",\n \"undocked\",\n \"undoing\",\n \"undone\",\n \"undrafted\",\n \"undress\",\n \"undrilled\",\n \"undusted\",\n \"undying\",\n \"unearned\",\n \"unearth\",\n \"unease\",\n \"uneasily\",\n \"uneasy\",\n \"uneatable\",\n \"uneaten\",\n \"unedited\",\n \"unelected\",\n \"unending\",\n \"unengaged\",\n \"unenvied\",\n \"unequal\",\n \"unethical\",\n \"uneven\",\n \"unexpired\",\n \"unexposed\",\n \"unfailing\",\n \"unfair\",\n \"unfasten\",\n \"unfazed\",\n \"unfeeling\",\n \"unfiled\",\n \"unfilled\",\n \"unfitted\",\n \"unfitting\",\n \"unfixable\",\n \"unfixed\",\n \"unflawed\",\n \"unfocused\",\n \"unfold\",\n \"unfounded\",\n \"unframed\",\n \"unfreeze\",\n \"unfrosted\",\n \"unfrozen\",\n \"unfunded\",\n \"unglazed\",\n \"ungloved\",\n \"unglue\",\n \"ungodly\",\n \"ungraded\",\n \"ungreased\",\n \"unguarded\",\n \"unguided\",\n \"unhappily\",\n \"unhappy\",\n \"unharmed\",\n \"unhealthy\",\n \"unheard\",\n \"unhearing\",\n \"unheated\",\n \"unhelpful\",\n \"unhidden\",\n \"unhinge\",\n \"unhitched\",\n \"unholy\",\n \"unhook\",\n \"unicorn\",\n \"unicycle\",\n \"unified\",\n \"unifier\",\n \"uniformed\",\n \"uniformly\",\n \"unify\",\n \"unimpeded\",\n \"uninjured\",\n \"uninstall\",\n \"uninsured\",\n \"uninvited\",\n \"union\",\n \"uniquely\",\n \"unisexual\",\n \"unison\",\n \"unissued\",\n \"unit\",\n \"universal\",\n \"universe\",\n \"unjustly\",\n \"unkempt\",\n \"unkind\",\n \"unknotted\",\n \"unknowing\",\n \"unknown\",\n \"unlaced\",\n \"unlatch\",\n \"unlawful\",\n \"unleaded\",\n \"unlearned\",\n \"unleash\",\n \"unless\",\n \"unleveled\",\n \"unlighted\",\n \"unlikable\",\n \"unlimited\",\n \"unlined\",\n \"unlinked\",\n \"unlisted\",\n \"unlit\",\n \"unlivable\",\n \"unloaded\",\n \"unloader\",\n \"unlocked\",\n \"unlocking\",\n \"unlovable\",\n \"unloved\",\n \"unlovely\",\n \"unloving\",\n \"unluckily\",\n \"unlucky\",\n \"unmade\",\n \"unmanaged\",\n \"unmanned\",\n \"unmapped\",\n \"unmarked\",\n \"unmasked\",\n \"unmasking\",\n \"unmatched\",\n \"unmindful\",\n \"unmixable\",\n \"unmixed\",\n \"unmolded\",\n \"unmoral\",\n \"unmovable\",\n \"unmoved\",\n \"unmoving\",\n \"unnamable\",\n \"unnamed\",\n \"unnatural\",\n \"unneeded\",\n \"unnerve\",\n \"unnerving\",\n \"unnoticed\",\n \"unopened\",\n \"unopposed\",\n \"unpack\",\n \"unpadded\",\n \"unpaid\",\n \"unpainted\",\n \"unpaired\",\n \"unpaved\",\n \"unpeeled\",\n \"unpicked\",\n \"unpiloted\",\n \"unpinned\",\n \"unplanned\",\n \"unplanted\",\n \"unpleased\",\n \"unpledged\",\n \"unplowed\",\n \"unplug\",\n \"unpopular\",\n \"unproven\",\n \"unquote\",\n \"unranked\",\n \"unrated\",\n \"unraveled\",\n \"unreached\",\n \"unread\",\n \"unreal\",\n \"unreeling\",\n \"unrefined\",\n \"unrelated\",\n \"unrented\",\n \"unrest\",\n \"unretired\",\n \"unrevised\",\n \"unrigged\",\n \"unripe\",\n \"unrivaled\",\n \"unroasted\",\n \"unrobed\",\n \"unroll\",\n \"unruffled\",\n \"unruly\",\n \"unrushed\",\n \"unsaddle\",\n \"unsafe\",\n \"unsaid\",\n \"unsalted\",\n \"unsaved\",\n \"unsavory\",\n \"unscathed\",\n \"unscented\",\n \"unscrew\",\n \"unsealed\",\n \"unseated\",\n \"unsecured\",\n \"unseeing\",\n \"unseemly\",\n \"unseen\",\n \"unselect\",\n \"unselfish\",\n \"unsent\",\n \"unsettled\",\n \"unshackle\",\n \"unshaken\",\n \"unshaved\",\n \"unshaven\",\n \"unsheathe\",\n \"unshipped\",\n \"unsightly\",\n \"unsigned\",\n \"unskilled\",\n \"unsliced\",\n \"unsmooth\",\n \"unsnap\",\n \"unsocial\",\n \"unsoiled\",\n \"unsold\",\n \"unsolved\",\n \"unsorted\",\n \"unspoiled\",\n \"unspoken\",\n \"unstable\",\n \"unstaffed\",\n \"unstamped\",\n \"unsteady\",\n \"unsterile\",\n \"unstirred\",\n \"unstitch\",\n \"unstopped\",\n \"unstuck\",\n \"unstuffed\",\n \"unstylish\",\n \"unsubtle\",\n \"unsubtly\",\n \"unsuited\",\n \"unsure\",\n \"unsworn\",\n \"untagged\",\n \"untainted\",\n \"untaken\",\n \"untamed\",\n \"untangled\",\n \"untapped\",\n \"untaxed\",\n \"unthawed\",\n \"unthread\",\n \"untidy\",\n \"untie\",\n \"until\",\n \"untimed\",\n \"untimely\",\n \"untitled\",\n \"untoasted\",\n \"untold\",\n \"untouched\",\n \"untracked\",\n \"untrained\",\n \"untreated\",\n \"untried\",\n \"untrimmed\",\n \"untrue\",\n \"untruth\",\n \"unturned\",\n \"untwist\",\n \"untying\",\n \"unusable\",\n \"unused\",\n \"unusual\",\n \"unvalued\",\n \"unvaried\",\n \"unvarying\",\n \"unveiled\",\n \"unveiling\",\n \"unvented\",\n \"unviable\",\n \"unvisited\",\n \"unvocal\",\n \"unwanted\",\n \"unwarlike\",\n \"unwary\",\n \"unwashed\",\n \"unwatched\",\n \"unweave\",\n \"unwed\",\n \"unwelcome\",\n \"unwell\",\n \"unwieldy\",\n \"unwilling\",\n \"unwind\",\n \"unwired\",\n \"unwitting\",\n \"unwomanly\",\n \"unworldly\",\n \"unworn\",\n \"unworried\",\n \"unworthy\",\n \"unwound\",\n \"unwoven\",\n \"unwrapped\",\n \"unwritten\",\n \"unzip\",\n \"upbeat\",\n \"upchuck\",\n \"upcoming\",\n \"upcountry\",\n \"update\",\n \"upfront\",\n \"upgrade\",\n \"upheaval\",\n \"upheld\",\n \"uphill\",\n \"uphold\",\n \"uplifted\",\n \"uplifting\",\n \"upload\",\n \"upon\",\n \"upper\",\n \"upright\",\n \"uprising\",\n \"upriver\",\n \"uproar\",\n \"uproot\",\n \"upscale\",\n \"upside\",\n \"upstage\",\n \"upstairs\",\n \"upstart\",\n \"upstate\",\n \"upstream\",\n \"upstroke\",\n \"upswing\",\n \"uptake\",\n \"uptight\",\n \"uptown\",\n \"upturned\",\n \"upward\",\n \"upwind\",\n \"uranium\",\n \"urban\",\n \"urchin\",\n \"urethane\",\n \"urgency\",\n \"urgent\",\n \"urging\",\n \"urologist\",\n \"urology\",\n \"usable\",\n \"usage\",\n \"useable\",\n \"used\",\n \"uselessly\",\n \"user\",\n \"usher\",\n \"usual\",\n \"utensil\",\n \"utility\",\n \"utilize\",\n \"utmost\",\n \"utopia\",\n \"utter\",\n \"vacancy\",\n \"vacant\",\n \"vacate\",\n \"vacation\",\n \"vagabond\",\n \"vagrancy\",\n \"vagrantly\",\n \"vaguely\",\n \"vagueness\",\n \"valiant\",\n \"valid\",\n \"valium\",\n \"valley\",\n \"valuables\",\n \"value\",\n \"vanilla\",\n \"vanish\",\n \"vanity\",\n \"vanquish\",\n \"vantage\",\n \"vaporizer\",\n \"variable\",\n \"variably\",\n \"varied\",\n \"variety\",\n \"various\",\n \"varmint\",\n \"varnish\",\n \"varsity\",\n \"varying\",\n \"vascular\",\n \"vaseline\",\n \"vastly\",\n \"vastness\",\n \"veal\",\n \"vegan\",\n \"veggie\",\n \"vehicular\",\n \"velcro\",\n \"velocity\",\n \"velvet\",\n \"vendetta\",\n \"vending\",\n \"vendor\",\n \"veneering\",\n \"vengeful\",\n \"venomous\",\n \"ventricle\",\n \"venture\",\n \"venue\",\n \"venus\",\n \"verbalize\",\n \"verbally\",\n \"verbose\",\n \"verdict\",\n \"verify\",\n \"verse\",\n \"version\",\n \"versus\",\n \"vertebrae\",\n \"vertical\",\n \"vertigo\",\n \"very\",\n \"vessel\",\n \"vest\",\n \"veteran\",\n \"veto\",\n \"vexingly\",\n \"viability\",\n \"viable\",\n \"vibes\",\n \"vice\",\n \"vicinity\",\n \"victory\",\n \"video\",\n \"viewable\",\n \"viewer\",\n \"viewing\",\n \"viewless\",\n \"viewpoint\",\n \"vigorous\",\n \"village\",\n \"villain\",\n \"vindicate\",\n \"vineyard\",\n \"vintage\",\n \"violate\",\n \"violation\",\n \"violator\",\n \"violet\",\n \"violin\",\n \"viper\",\n \"viral\",\n \"virtual\",\n \"virtuous\",\n \"virus\",\n \"visa\",\n \"viscosity\",\n \"viscous\",\n \"viselike\",\n \"visible\",\n \"visibly\",\n \"vision\",\n \"visiting\",\n \"visitor\",\n \"visor\",\n \"vista\",\n \"vitality\",\n \"vitalize\",\n \"vitally\",\n \"vitamins\",\n \"vivacious\",\n \"vividly\",\n \"vividness\",\n \"vixen\",\n \"vocalist\",\n \"vocalize\",\n \"vocally\",\n \"vocation\",\n \"voice\",\n \"voicing\",\n \"void\",\n \"volatile\",\n \"volley\",\n \"voltage\",\n \"volumes\",\n \"voter\",\n \"voting\",\n \"voucher\",\n \"vowed\",\n \"vowel\",\n \"voyage\",\n \"wackiness\",\n \"wad\",\n \"wafer\",\n \"waffle\",\n \"waged\",\n \"wager\",\n \"wages\",\n \"waggle\",\n \"wagon\",\n \"wake\",\n \"waking\",\n \"walk\",\n \"walmart\",\n \"walnut\",\n \"walrus\",\n \"waltz\",\n \"wand\",\n \"wannabe\",\n \"wanted\",\n \"wanting\",\n \"wasabi\",\n \"washable\",\n \"washbasin\",\n \"washboard\",\n \"washbowl\",\n \"washcloth\",\n \"washday\",\n \"washed\",\n \"washer\",\n \"washhouse\",\n \"washing\",\n \"washout\",\n \"washroom\",\n \"washstand\",\n \"washtub\",\n \"wasp\",\n \"wasting\",\n \"watch\",\n \"water\",\n \"waviness\",\n \"waving\",\n \"wavy\",\n \"whacking\",\n \"whacky\",\n \"wham\",\n \"wharf\",\n \"wheat\",\n \"whenever\",\n \"whiff\",\n \"whimsical\",\n \"whinny\",\n \"whiny\",\n \"whisking\",\n \"whoever\",\n \"whole\",\n \"whomever\",\n \"whoopee\",\n \"whooping\",\n \"whoops\",\n \"why\",\n \"wick\",\n \"widely\",\n \"widen\",\n \"widget\",\n \"widow\",\n \"width\",\n \"wieldable\",\n \"wielder\",\n \"wife\",\n \"wifi\",\n \"wikipedia\",\n \"wildcard\",\n \"wildcat\",\n \"wilder\",\n \"wildfire\",\n \"wildfowl\",\n \"wildland\",\n \"wildlife\",\n \"wildly\",\n \"wildness\",\n \"willed\",\n \"willfully\",\n \"willing\",\n \"willow\",\n \"willpower\",\n \"wilt\",\n \"wimp\",\n \"wince\",\n \"wincing\",\n \"wind\",\n \"wing\",\n \"winking\",\n \"winner\",\n \"winnings\",\n \"winter\",\n \"wipe\",\n \"wired\",\n \"wireless\",\n \"wiring\",\n \"wiry\",\n \"wisdom\",\n \"wise\",\n \"wish\",\n \"wisplike\",\n \"wispy\",\n \"wistful\",\n \"wizard\",\n \"wobble\",\n \"wobbling\",\n \"wobbly\",\n \"wok\",\n \"wolf\",\n \"wolverine\",\n \"womanhood\",\n \"womankind\",\n \"womanless\",\n \"womanlike\",\n \"womanly\",\n \"womb\",\n \"woof\",\n \"wooing\",\n \"wool\",\n \"woozy\",\n \"word\",\n \"work\",\n \"worried\",\n \"worrier\",\n \"worrisome\",\n \"worry\",\n \"worsening\",\n \"worshiper\",\n \"worst\",\n \"wound\",\n \"woven\",\n \"wow\",\n \"wrangle\",\n \"wrath\",\n \"wreath\",\n \"wreckage\",\n \"wrecker\",\n \"wrecking\",\n \"wrench\",\n \"wriggle\",\n \"wriggly\",\n \"wrinkle\",\n \"wrinkly\",\n \"wrist\",\n \"writing\",\n \"written\",\n \"wrongdoer\",\n \"wronged\",\n \"wrongful\",\n \"wrongly\",\n \"wrongness\",\n \"wrought\",\n \"xbox\",\n \"xerox\",\n \"yahoo\",\n \"yam\",\n \"yanking\",\n \"yapping\",\n \"yard\",\n \"yarn\",\n \"yeah\",\n \"yearbook\",\n \"yearling\",\n \"yearly\",\n \"yearning\",\n \"yeast\",\n \"yelling\",\n \"yelp\",\n \"yen\",\n \"yesterday\",\n \"yiddish\",\n \"yield\",\n \"yin\",\n \"yippee\",\n \"yo-yo\",\n \"yodel\",\n \"yoga\",\n \"yogurt\",\n \"yonder\",\n \"yoyo\",\n \"yummy\",\n \"zap\",\n \"zealous\",\n \"zebra\",\n \"zen\",\n \"zeppelin\",\n \"zero\",\n \"zestfully\",\n \"zesty\",\n \"zigzagged\",\n \"zipfile\",\n \"zipping\",\n \"zippy\",\n \"zips\",\n \"zit\",\n \"zodiac\",\n \"zombie\",\n \"zone\",\n \"zoning\",\n \"zookeeper\",\n \"zoologist\",\n \"zoology\",\n \"zoom\",\n];\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class BillingSyncConfigApi extends BaseResponse {\n billingSyncKey: string;\n\n constructor(data: any) {\n super(data);\n if (data == null) {\n return;\n }\n this.billingSyncKey = this.getResponseProperty(\"BillingSyncKey\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class CardApi extends BaseResponse {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.cardholderName = this.getResponseProperty(\"CardholderName\");\n this.brand = this.getResponseProperty(\"Brand\");\n this.number = this.getResponseProperty(\"Number\");\n this.expMonth = this.getResponseProperty(\"ExpMonth\");\n this.expYear = this.getResponseProperty(\"ExpYear\");\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class FieldApi extends BaseResponse {\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.value = this.getResponseProperty(\"Value\");\n this.linkedId = this.getResponseProperty(\"linkedId\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class IdentityApi extends BaseResponse {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.title = this.getResponseProperty(\"Title\");\n this.firstName = this.getResponseProperty(\"FirstName\");\n this.middleName = this.getResponseProperty(\"MiddleName\");\n this.lastName = this.getResponseProperty(\"LastName\");\n this.address1 = this.getResponseProperty(\"Address1\");\n this.address2 = this.getResponseProperty(\"Address2\");\n this.address3 = this.getResponseProperty(\"Address3\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n this.company = this.getResponseProperty(\"Company\");\n this.email = this.getResponseProperty(\"Email\");\n this.phone = this.getResponseProperty(\"Phone\");\n this.ssn = this.getResponseProperty(\"SSN\");\n this.username = this.getResponseProperty(\"Username\");\n this.passportNumber = this.getResponseProperty(\"PassportNumber\");\n this.licenseNumber = this.getResponseProperty(\"LicenseNumber\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nimport { LoginUriApi } from \"./loginUriApi\";\n\nexport class LoginApi extends BaseResponse {\n uris: LoginUriApi[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.username = this.getResponseProperty(\"Username\");\n this.password = this.getResponseProperty(\"Password\");\n this.passwordRevisionDate = this.getResponseProperty(\"PasswordRevisionDate\");\n this.totp = this.getResponseProperty(\"Totp\");\n this.autofillOnPageLoad = this.getResponseProperty(\"AutofillOnPageLoad\");\n\n const uris = this.getResponseProperty(\"Uris\");\n if (uris != null) {\n this.uris = uris.map((u: any) => new LoginUriApi(u));\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class LoginUriApi extends BaseResponse {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.uri = this.getResponseProperty(\"Uri\");\n const match = this.getResponseProperty(\"Match\");\n this.match = match != null ? match : null;\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class PermissionsApi extends BaseResponse {\n accessEventLogs: boolean;\n accessImportExport: boolean;\n accessReports: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAllCollections: boolean;\n createNewCollections: boolean;\n editAnyCollection: boolean;\n deleteAnyCollection: boolean;\n /**\n * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n */\n manageAssignedCollections: boolean;\n editAssignedCollections: boolean;\n deleteAssignedCollections: boolean;\n manageCiphers: boolean;\n manageGroups: boolean;\n manageSso: boolean;\n managePolicies: boolean;\n manageUsers: boolean;\n manageResetPassword: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return this;\n }\n this.accessEventLogs = this.getResponseProperty(\"AccessEventLogs\");\n this.accessImportExport = this.getResponseProperty(\"AccessImportExport\");\n this.accessReports = this.getResponseProperty(\"AccessReports\");\n\n // For backwards compatibility with Server <= 1.43.0\n this.manageAllCollections = this.getResponseProperty(\"ManageAllCollections\");\n this.manageAssignedCollections = this.getResponseProperty(\"ManageAssignedCollections\");\n\n this.createNewCollections = this.getResponseProperty(\"CreateNewCollections\");\n this.editAnyCollection = this.getResponseProperty(\"EditAnyCollection\");\n this.deleteAnyCollection = this.getResponseProperty(\"DeleteAnyCollection\");\n this.editAssignedCollections = this.getResponseProperty(\"EditAssignedCollections\");\n this.deleteAssignedCollections = this.getResponseProperty(\"DeleteAssignedCollections\");\n\n this.manageCiphers = this.getResponseProperty(\"ManageCiphers\");\n this.manageGroups = this.getResponseProperty(\"ManageGroups\");\n this.manageSso = this.getResponseProperty(\"ManageSso\");\n this.managePolicies = this.getResponseProperty(\"ManagePolicies\");\n this.manageUsers = this.getResponseProperty(\"ManageUsers\");\n this.manageResetPassword = this.getResponseProperty(\"ManageResetPassword\");\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { BaseResponse } from \"../response/baseResponse\";\n\nexport class SecureNoteApi extends BaseResponse {\n type: SecureNoteType;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class SendFileApi extends BaseResponse {\n id: string;\n fileName: string;\n size: string;\n sizeName: string;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.id = this.getResponseProperty(\"Id\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { BaseResponse } from \"../response/baseResponse\";\n\nexport class SendTextApi extends BaseResponse {\n text: string;\n hidden: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n this.text = this.getResponseProperty(\"Text\");\n this.hidden = this.getResponseProperty(\"Hidden\") || false;\n }\n}\n","import {\n OpenIdConnectRedirectBehavior,\n Saml2BindingType,\n Saml2NameIdFormat,\n Saml2SigningBehavior,\n SsoType,\n} from \"../../enums/ssoEnums\";\nimport { BaseResponse } from \"../response/baseResponse\";\nimport { SsoConfigView } from \"../view/ssoConfigView\";\n\nexport class SsoConfigApi extends BaseResponse {\n static fromView(view: SsoConfigView, api = new SsoConfigApi()) {\n api.configType = view.configType;\n\n api.keyConnectorEnabled = view.keyConnectorEnabled;\n api.keyConnectorUrl = view.keyConnectorUrl;\n\n if (api.configType === SsoType.OpenIdConnect) {\n api.authority = view.openId.authority;\n api.clientId = view.openId.clientId;\n api.clientSecret = view.openId.clientSecret;\n api.metadataAddress = view.openId.metadataAddress;\n api.redirectBehavior = view.openId.redirectBehavior;\n api.getClaimsFromUserInfoEndpoint = view.openId.getClaimsFromUserInfoEndpoint;\n api.additionalScopes = view.openId.additionalScopes;\n api.additionalUserIdClaimTypes = view.openId.additionalUserIdClaimTypes;\n api.additionalEmailClaimTypes = view.openId.additionalEmailClaimTypes;\n api.additionalNameClaimTypes = view.openId.additionalNameClaimTypes;\n api.acrValues = view.openId.acrValues;\n api.expectedReturnAcrValue = view.openId.expectedReturnAcrValue;\n } else if (api.configType === SsoType.Saml2) {\n api.spNameIdFormat = view.saml.spNameIdFormat;\n api.spOutboundSigningAlgorithm = view.saml.spOutboundSigningAlgorithm;\n api.spSigningBehavior = view.saml.spSigningBehavior;\n api.spMinIncomingSigningAlgorithm = view.saml.spMinIncomingSigningAlgorithm;\n api.spWantAssertionsSigned = view.saml.spWantAssertionsSigned;\n api.spValidateCertificates = view.saml.spValidateCertificates;\n\n api.idpEntityId = view.saml.idpEntityId;\n api.idpBindingType = view.saml.idpBindingType;\n api.idpSingleSignOnServiceUrl = view.saml.idpSingleSignOnServiceUrl;\n api.idpSingleLogoutServiceUrl = view.saml.idpSingleLogoutServiceUrl;\n api.idpX509PublicCert = view.saml.idpX509PublicCert;\n api.idpOutboundSigningAlgorithm = view.saml.idpOutboundSigningAlgorithm;\n api.idpAllowUnsolicitedAuthnResponse = view.saml.idpAllowUnsolicitedAuthnResponse;\n api.idpWantAuthnRequestsSigned = view.saml.idpWantAuthnRequestsSigned;\n\n // Value is inverted in the api model (disable instead of allow)\n api.idpDisableOutboundLogoutRequests = !view.saml.idpAllowOutboundLogoutRequests;\n }\n\n return api;\n }\n configType: SsoType;\n\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n\n // OpenId\n authority: string;\n clientId: string;\n clientSecret: string;\n metadataAddress: string;\n redirectBehavior: OpenIdConnectRedirectBehavior;\n getClaimsFromUserInfoEndpoint: boolean;\n additionalScopes: string;\n additionalUserIdClaimTypes: string;\n additionalEmailClaimTypes: string;\n additionalNameClaimTypes: string;\n acrValues: string;\n expectedReturnAcrValue: string;\n\n // SAML\n spNameIdFormat: Saml2NameIdFormat;\n spOutboundSigningAlgorithm: string;\n spSigningBehavior: Saml2SigningBehavior;\n spMinIncomingSigningAlgorithm: boolean;\n spWantAssertionsSigned: boolean;\n spValidateCertificates: boolean;\n\n idpEntityId: string;\n idpBindingType: Saml2BindingType;\n idpSingleSignOnServiceUrl: string;\n idpSingleLogoutServiceUrl: string;\n idpX509PublicCert: string;\n idpOutboundSigningAlgorithm: string;\n idpAllowUnsolicitedAuthnResponse: boolean;\n idpDisableOutboundLogoutRequests: boolean;\n idpWantAuthnRequestsSigned: boolean;\n\n constructor(data: any = null) {\n super(data);\n if (data == null) {\n return;\n }\n\n this.configType = this.getResponseProperty(\"ConfigType\");\n\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n\n this.authority = this.getResponseProperty(\"Authority\");\n this.clientId = this.getResponseProperty(\"ClientId\");\n this.clientSecret = this.getResponseProperty(\"ClientSecret\");\n this.metadataAddress = this.getResponseProperty(\"MetadataAddress\");\n this.redirectBehavior = this.getResponseProperty(\"RedirectBehavior\");\n this.getClaimsFromUserInfoEndpoint = this.getResponseProperty(\"GetClaimsFromUserInfoEndpoint\");\n this.additionalScopes = this.getResponseProperty(\"AdditionalScopes\");\n this.additionalUserIdClaimTypes = this.getResponseProperty(\"AdditionalUserIdClaimTypes\");\n this.additionalEmailClaimTypes = this.getResponseProperty(\"AdditionalEmailClaimTypes\");\n this.additionalNameClaimTypes = this.getResponseProperty(\"AdditionalNameClaimTypes\");\n this.acrValues = this.getResponseProperty(\"AcrValues\");\n this.expectedReturnAcrValue = this.getResponseProperty(\"ExpectedReturnAcrValue\");\n\n this.spNameIdFormat = this.getResponseProperty(\"SpNameIdFormat\");\n this.spOutboundSigningAlgorithm = this.getResponseProperty(\"SpOutboundSigningAlgorithm\");\n this.spSigningBehavior = this.getResponseProperty(\"SpSigningBehavior\");\n this.spMinIncomingSigningAlgorithm = this.getResponseProperty(\"SpMinIncomingSigningAlgorithm\");\n this.spWantAssertionsSigned = this.getResponseProperty(\"SpWantAssertionsSigned\");\n this.spValidateCertificates = this.getResponseProperty(\"SpValidateCertificates\");\n\n this.idpEntityId = this.getResponseProperty(\"IdpEntityId\");\n this.idpBindingType = this.getResponseProperty(\"IdpBindingType\");\n this.idpSingleSignOnServiceUrl = this.getResponseProperty(\"IdpSingleSignOnServiceUrl\");\n this.idpSingleLogoutServiceUrl = this.getResponseProperty(\"IdpSingleLogoutServiceUrl\");\n this.idpX509PublicCert = this.getResponseProperty(\"IdpX509PublicCert\");\n this.idpOutboundSigningAlgorithm = this.getResponseProperty(\"IdpOutboundSigningAlgorithm\");\n this.idpAllowUnsolicitedAuthnResponse = this.getResponseProperty(\n \"IdpAllowUnsolicitedAuthnResponse\"\n );\n this.idpDisableOutboundLogoutRequests = this.getResponseProperty(\n \"IdpDisableOutboundLogoutRequests\"\n );\n this.idpWantAuthnRequestsSigned = this.getResponseProperty(\"IdpWantAuthnRequestsSigned\");\n }\n}\n","import { AttachmentResponse } from \"../response/attachmentResponse\";\n\nexport class AttachmentData {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response?: AttachmentResponse) {\n if (response == null) {\n return;\n }\n this.id = response.id;\n this.url = response.url;\n this.fileName = response.fileName;\n this.key = response.key;\n this.size = response.size;\n this.sizeName = response.sizeName;\n }\n}\n","import { CardApi } from \"../api/cardApi\";\n\nexport class CardData {\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(data?: CardApi) {\n if (data == null) {\n return;\n }\n\n this.cardholderName = data.cardholderName;\n this.brand = data.brand;\n this.number = data.number;\n this.expMonth = data.expMonth;\n this.expYear = data.expYear;\n this.code = data.code;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CipherResponse } from \"../response/cipherResponse\";\n\nimport { AttachmentData } from \"./attachmentData\";\nimport { CardData } from \"./cardData\";\nimport { FieldData } from \"./fieldData\";\nimport { IdentityData } from \"./identityData\";\nimport { LoginData } from \"./loginData\";\nimport { PasswordHistoryData } from \"./passwordHistoryData\";\nimport { SecureNoteData } from \"./secureNoteData\";\n\nexport class CipherData {\n id: string;\n organizationId: string;\n folderId: string;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n favorite: boolean;\n revisionDate: string;\n type: CipherType;\n name: string;\n notes: string;\n login?: LoginData;\n secureNote?: SecureNoteData;\n card?: CardData;\n identity?: IdentityData;\n fields?: FieldData[];\n attachments?: AttachmentData[];\n passwordHistory?: PasswordHistoryData[];\n collectionIds?: string[];\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response?: CipherResponse, collectionIds?: string[]) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.folderId = response.folderId;\n this.edit = response.edit;\n this.viewPassword = response.viewPassword;\n this.organizationUseTotp = response.organizationUseTotp;\n this.favorite = response.favorite;\n this.revisionDate = response.revisionDate;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds;\n this.deletedDate = response.deletedDate;\n this.reprompt = response.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginData(response.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteData(response.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardData(response.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityData(response.identity);\n break;\n default:\n break;\n }\n\n if (response.fields != null) {\n this.fields = response.fields.map((f) => new FieldData(f));\n }\n if (response.attachments != null) {\n this.attachments = response.attachments.map((a) => new AttachmentData(a));\n }\n if (response.passwordHistory != null) {\n this.passwordHistory = response.passwordHistory.map((ph) => new PasswordHistoryData(ph));\n }\n }\n}\n","import { CollectionDetailsResponse } from \"../response/collectionResponse\";\n\nexport class CollectionData {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n readOnly: boolean;\n\n constructor(response: CollectionDetailsResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.name = response.name;\n this.externalId = response.externalId;\n this.readOnly = response.readOnly;\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventData {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldApi } from \"../api/fieldApi\";\n\nexport class FieldData {\n type: FieldType;\n name: string;\n value: string;\n linkedId: LinkedIdType;\n\n constructor(response?: FieldApi) {\n if (response == null) {\n return;\n }\n this.type = response.type;\n this.name = response.name;\n this.value = response.value;\n this.linkedId = response.linkedId;\n }\n}\n","import { FolderResponse } from \"../response/folderResponse\";\n\nexport class FolderData {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: FolderResponse) {\n this.name = response.name;\n this.id = response.id;\n this.revisionDate = response.revisionDate;\n }\n}\n","import { IdentityApi } from \"../api/identityApi\";\n\nexport class IdentityData {\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(data?: IdentityApi) {\n if (data == null) {\n return;\n }\n\n this.title = data.title;\n this.firstName = data.firstName;\n this.middleName = data.middleName;\n this.lastName = data.lastName;\n this.address1 = data.address1;\n this.address2 = data.address2;\n this.address3 = data.address3;\n this.city = data.city;\n this.state = data.state;\n this.postalCode = data.postalCode;\n this.country = data.country;\n this.company = data.company;\n this.email = data.email;\n this.phone = data.phone;\n this.ssn = data.ssn;\n this.username = data.username;\n this.passportNumber = data.passportNumber;\n this.licenseNumber = data.licenseNumber;\n }\n}\n","import { LoginApi } from \"../api/loginApi\";\n\nimport { LoginUriData } from \"./loginUriData\";\n\nexport class LoginData {\n uris: LoginUriData[];\n username: string;\n password: string;\n passwordRevisionDate: string;\n totp: string;\n autofillOnPageLoad: boolean;\n\n constructor(data?: LoginApi) {\n if (data == null) {\n return;\n }\n\n this.username = data.username;\n this.password = data.password;\n this.passwordRevisionDate = data.passwordRevisionDate;\n this.totp = data.totp;\n this.autofillOnPageLoad = data.autofillOnPageLoad;\n\n if (data.uris) {\n this.uris = data.uris.map((u) => new LoginUriData(u));\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriApi } from \"../api/loginUriApi\";\n\nexport class LoginUriData {\n uri: string;\n match: UriMatchType = null;\n\n constructor(data?: LoginUriApi) {\n if (data == null) {\n return;\n }\n this.uri = data.uri;\n this.match = data.match;\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\nimport { ProfileOrganizationResponse } from \"../response/profileOrganizationResponse\";\n\nexport class OrganizationData {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n\n constructor(response: ProfileOrganizationResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.usePolicies = response.usePolicies;\n this.useGroups = response.useGroups;\n this.useDirectory = response.useDirectory;\n this.useEvents = response.useEvents;\n this.useTotp = response.useTotp;\n this.use2fa = response.use2fa;\n this.useApi = response.useApi;\n this.useSso = response.useSso;\n this.useKeyConnector = response.useKeyConnector;\n this.useResetPassword = response.useResetPassword;\n this.selfHost = response.selfHost;\n this.usersGetPremium = response.usersGetPremium;\n this.seats = response.seats;\n this.maxCollections = response.maxCollections;\n this.maxStorageGb = response.maxStorageGb;\n this.ssoBound = response.ssoBound;\n this.identifier = response.identifier;\n this.permissions = response.permissions;\n this.resetPasswordEnrolled = response.resetPasswordEnrolled;\n this.userId = response.userId;\n this.hasPublicAndPrivateKeys = response.hasPublicAndPrivateKeys;\n this.providerId = response.providerId;\n this.providerName = response.providerName;\n this.familySponsorshipFriendlyName = response.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = response.familySponsorshipAvailable;\n this.planProductType = response.planProductType;\n this.keyConnectorEnabled = response.keyConnectorEnabled;\n this.keyConnectorUrl = response.keyConnectorUrl;\n this.familySponsorshipLastSyncDate = response.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = response.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = response.familySponsorshipToDelete;\n }\n}\n","import { PasswordHistoryResponse } from \"../response/passwordHistoryResponse\";\n\nexport class PasswordHistoryData {\n password: string;\n lastUsedDate: string;\n\n constructor(response?: PasswordHistoryResponse) {\n if (response == null) {\n return;\n }\n\n this.password = response.password;\n this.lastUsedDate = response.lastUsedDate;\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyResponse } from \"../response/policyResponse\";\n\nexport class PolicyData {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: PolicyResponse) {\n this.id = response.id;\n this.organizationId = response.organizationId;\n this.type = response.type;\n this.data = response.data;\n this.enabled = response.enabled;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProfileProviderResponse } from \"../response/profileProviderResponse\";\n\nexport class ProviderData {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(response: ProfileProviderResponse) {\n this.id = response.id;\n this.name = response.name;\n this.status = response.status;\n this.type = response.type;\n this.enabled = response.enabled;\n this.userId = response.userId;\n this.useEvents = response.useEvents;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\n\nexport class SecureNoteData {\n type: SecureNoteType;\n\n constructor(data?: SecureNoteApi) {\n if (data == null) {\n return;\n }\n\n this.type = data.type;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendResponse } from \"../response/sendResponse\";\n\nimport { SendFileData } from \"./sendFileData\";\nimport { SendTextData } from \"./sendTextData\";\n\nexport class SendData {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileData;\n text: SendTextData;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(response?: SendResponse) {\n if (response == null) {\n return;\n }\n\n this.id = response.id;\n this.accessId = response.accessId;\n this.type = response.type;\n this.name = response.name;\n this.notes = response.notes;\n this.key = response.key;\n this.maxAccessCount = response.maxAccessCount;\n this.accessCount = response.accessCount;\n this.revisionDate = response.revisionDate;\n this.expirationDate = response.expirationDate;\n this.deletionDate = response.deletionDate;\n this.password = response.password;\n this.disabled = response.disable;\n this.hideEmail = response.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextData(response.text);\n break;\n case SendType.File:\n this.file = new SendFileData(response.file);\n break;\n default:\n break;\n }\n }\n}\n","import { SendFileApi } from \"../api/sendFileApi\";\n\nexport class SendFileData {\n id: string;\n fileName: string;\n size: string;\n sizeName: string;\n\n constructor(data?: SendFileApi) {\n if (data == null) {\n return;\n }\n\n this.id = data.id;\n this.fileName = data.fileName;\n this.size = data.size;\n this.sizeName = data.sizeName;\n }\n}\n","import { SendTextApi } from \"../api/sendTextApi\";\n\nexport class SendTextData {\n text: string;\n hidden: boolean;\n\n constructor(data?: SendTextApi) {\n if (data == null) {\n return;\n }\n\n this.text = data.text;\n this.hidden = data.hidden;\n }\n}\n","import { AuthenticationStatus } from \"../../enums/authenticationStatus\";\nimport { KdfType } from \"../../enums/kdfType\";\nimport { UriMatchType } from \"../../enums/uriMatchType\";\nimport { CipherData } from \"../data/cipherData\";\nimport { CollectionData } from \"../data/collectionData\";\nimport { EventData } from \"../data/eventData\";\nimport { FolderData } from \"../data/folderData\";\nimport { OrganizationData } from \"../data/organizationData\";\nimport { PolicyData } from \"../data/policyData\";\nimport { ProviderData } from \"../data/providerData\";\nimport { SendData } from \"../data/sendData\";\nimport { CipherView } from \"../view/cipherView\";\nimport { CollectionView } from \"../view/collectionView\";\nimport { FolderView } from \"../view/folderView\";\nimport { SendView } from \"../view/sendView\";\n\nimport { EncString } from \"./encString\";\nimport { EnvironmentUrls } from \"./environmentUrls\";\nimport { GeneratedPasswordHistory } from \"./generatedPasswordHistory\";\nimport { Policy } from \"./policy\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncryptionPair {\n encrypted?: TEncrypted;\n decrypted?: TDecrypted;\n}\n\nexport class DataEncryptionPair {\n encrypted?: { [id: string]: TEncrypted };\n decrypted?: TDecrypted[];\n}\n\nexport class AccountData {\n ciphers?: DataEncryptionPair = new DataEncryptionPair<\n CipherData,\n CipherView\n >();\n folders?: DataEncryptionPair = new DataEncryptionPair<\n FolderData,\n FolderView\n >();\n localData?: any;\n sends?: DataEncryptionPair = new DataEncryptionPair();\n collections?: DataEncryptionPair = new DataEncryptionPair<\n CollectionData,\n CollectionView\n >();\n policies?: DataEncryptionPair = new DataEncryptionPair();\n passwordGenerationHistory?: EncryptionPair<\n GeneratedPasswordHistory[],\n GeneratedPasswordHistory[]\n > = new EncryptionPair();\n addEditCipherInfo?: any;\n eventCollection?: EventData[];\n organizations?: { [id: string]: OrganizationData };\n providers?: { [id: string]: ProviderData };\n}\n\nexport class AccountKeys {\n cryptoMasterKey?: SymmetricCryptoKey;\n cryptoMasterKeyAuto?: string;\n cryptoMasterKeyB64?: string;\n cryptoMasterKeyBiometric?: string;\n cryptoSymmetricKey?: EncryptionPair = new EncryptionPair<\n string,\n SymmetricCryptoKey\n >();\n organizationKeys?: EncryptionPair> = new EncryptionPair<\n any,\n Map\n >();\n providerKeys?: EncryptionPair> = new EncryptionPair<\n any,\n Map\n >();\n privateKey?: EncryptionPair = new EncryptionPair();\n legacyEtmKey?: SymmetricCryptoKey;\n publicKey?: ArrayBuffer;\n apiKeyClientSecret?: string;\n}\n\nexport class AccountProfile {\n apiKeyClientId?: string;\n authenticationStatus?: AuthenticationStatus;\n convertAccountToKeyConnector?: boolean;\n email?: string;\n emailVerified?: boolean;\n entityId?: string;\n entityType?: string;\n everBeenUnlocked?: boolean;\n forcePasswordReset?: boolean;\n hasPremiumPersonally?: boolean;\n hasPremiumFromOrganization?: boolean;\n lastSync?: string;\n userId?: string;\n usesKeyConnector?: boolean;\n keyHash?: string;\n kdfIterations?: number;\n kdfType?: KdfType;\n}\n\nexport class AccountSettings {\n autoConfirmFingerPrints?: boolean;\n autoFillOnPageLoadDefault?: boolean;\n biometricLocked?: boolean;\n biometricUnlock?: boolean;\n clearClipboard?: number;\n collapsedGroupings?: string[];\n defaultUriMatch?: UriMatchType;\n disableAddLoginNotification?: boolean;\n disableAutoBiometricsPrompt?: boolean;\n disableAutoTotpCopy?: boolean;\n disableBadgeCounter?: boolean;\n disableChangedPasswordNotification?: boolean;\n disableContextMenuItem?: boolean;\n disableGa?: boolean;\n dontShowCardsCurrentTab?: boolean;\n dontShowIdentitiesCurrentTab?: boolean;\n enableAlwaysOnTop?: boolean;\n enableAutoFillOnPageLoad?: boolean;\n enableBiometric?: boolean;\n enableFullWidth?: boolean;\n enableGravitars?: boolean;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n equivalentDomains?: any;\n minimizeOnCopyToClipboard?: boolean;\n neverDomains?: { [id: string]: any };\n passwordGenerationOptions?: any;\n usernameGenerationOptions?: any;\n generatorOptions?: any;\n pinProtected?: EncryptionPair = new EncryptionPair();\n protectedPin?: string;\n settings?: any; // TODO: Merge whatever is going on here into the AccountSettings model properly\n vaultTimeout?: number;\n vaultTimeoutAction?: string = \"lock\";\n}\n\nexport class AccountTokens {\n accessToken?: string;\n decodedToken?: any;\n refreshToken?: string;\n securityStamp?: string;\n}\n\nexport class Account {\n data?: AccountData = new AccountData();\n keys?: AccountKeys = new AccountKeys();\n profile?: AccountProfile = new AccountProfile();\n settings?: AccountSettings = new AccountSettings();\n tokens?: AccountTokens = new AccountTokens();\n\n constructor(init: Partial) {\n Object.assign(this, {\n data: {\n ...new AccountData(),\n ...init?.data,\n },\n keys: {\n ...new AccountKeys(),\n ...init?.keys,\n },\n profile: {\n ...new AccountProfile(),\n ...init?.profile,\n },\n settings: {\n ...new AccountSettings(),\n ...init?.settings,\n },\n tokens: {\n ...new AccountTokens(),\n ...init?.tokens,\n },\n });\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { Utils } from \"../../misc/utils\";\nimport { AttachmentData } from \"../data/attachmentData\";\nimport { AttachmentView } from \"../view/attachmentView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Attachment extends Domain {\n id: string;\n url: string;\n size: string;\n sizeName: string; // Readable size, ex: \"4.2 KB\" or \"1.43 GB\"\n key: EncString;\n fileName: EncString;\n\n constructor(obj?: AttachmentData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n },\n [\"id\", \"url\", \"sizeName\"]\n );\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new AttachmentView(this),\n {\n fileName: null,\n },\n orgId,\n encKey\n );\n\n if (this.key != null) {\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n\n try {\n const orgKey = await cryptoService.getOrgKey(orgId);\n const decValue = await cryptoService.decryptToBytes(this.key, orgKey ?? encKey);\n view.key = new SymmetricCryptoKey(decValue);\n } catch (e) {\n // TODO: error?\n }\n }\n\n return view;\n }\n\n toAttachmentData(): AttachmentData {\n const a = new AttachmentData();\n a.size = this.size;\n this.buildDataModel(\n this,\n a,\n {\n id: null,\n url: null,\n sizeName: null,\n fileName: null,\n key: null,\n },\n [\"id\", \"url\", \"sizeName\"]\n );\n return a;\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class AuthResult {\n captchaSiteKey = \"\";\n resetMasterPassword = false;\n forcePasswordReset = false;\n twoFactorProviders: Map = null;\n\n get requiresCaptcha() {\n return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n }\n\n get requiresTwoFactor() {\n return this.twoFactorProviders != null;\n }\n}\n","import { CardData } from \"../data/cardData\";\nimport { CardView } from \"../view/cardView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Card extends Domain {\n cardholderName: EncString;\n brand: EncString;\n number: EncString;\n expMonth: EncString;\n expYear: EncString;\n code: EncString;\n\n constructor(obj?: CardData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new CardView(),\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n orgId,\n encKey\n );\n }\n\n toCardData(): CardData {\n const c = new CardData();\n this.buildDataModel(this, c, {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n });\n return c;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CipherData } from \"../data/cipherData\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { Attachment } from \"./attachment\";\nimport { Card } from \"./card\";\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { Field } from \"./field\";\nimport { Identity } from \"./identity\";\nimport { Login } from \"./login\";\nimport { Password } from \"./password\";\nimport { SecureNote } from \"./secureNote\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Cipher extends Domain {\n id: string;\n organizationId: string;\n folderId: string;\n name: EncString;\n notes: EncString;\n type: CipherType;\n favorite: boolean;\n organizationUseTotp: boolean;\n edit: boolean;\n viewPassword: boolean;\n revisionDate: Date;\n localData: any;\n login: Login;\n identity: Identity;\n card: Card;\n secureNote: SecureNote;\n attachments: Attachment[];\n fields: Field[];\n passwordHistory: Password[];\n collectionIds: string[];\n deletedDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(obj?: CipherData, localData: any = null) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n organizationId: null,\n folderId: null,\n name: null,\n notes: null,\n },\n [\"id\", \"organizationId\", \"folderId\"]\n );\n\n this.type = obj.type;\n this.favorite = obj.favorite;\n this.organizationUseTotp = obj.organizationUseTotp;\n this.edit = obj.edit;\n if (obj.viewPassword != null) {\n this.viewPassword = obj.viewPassword;\n } else {\n this.viewPassword = true; // Default for already synced Ciphers without viewPassword\n }\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.collectionIds = obj.collectionIds;\n this.localData = localData;\n this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n this.reprompt = obj.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new Login(obj.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNote(obj.secureNote);\n break;\n case CipherType.Card:\n this.card = new Card(obj.card);\n break;\n case CipherType.Identity:\n this.identity = new Identity(obj.identity);\n break;\n default:\n break;\n }\n\n if (obj.attachments != null) {\n this.attachments = obj.attachments.map((a) => new Attachment(a));\n } else {\n this.attachments = null;\n }\n\n if (obj.fields != null) {\n this.fields = obj.fields.map((f) => new Field(f));\n } else {\n this.fields = null;\n }\n\n if (obj.passwordHistory != null) {\n this.passwordHistory = obj.passwordHistory.map((ph) => new Password(ph));\n } else {\n this.passwordHistory = null;\n }\n }\n\n async decrypt(encKey?: SymmetricCryptoKey): Promise {\n const model = new CipherView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n this.organizationId,\n encKey\n );\n\n switch (this.type) {\n case CipherType.Login:\n model.login = await this.login.decrypt(this.organizationId, encKey);\n break;\n case CipherType.SecureNote:\n model.secureNote = await this.secureNote.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Card:\n model.card = await this.card.decrypt(this.organizationId, encKey);\n break;\n case CipherType.Identity:\n model.identity = await this.identity.decrypt(this.organizationId, encKey);\n break;\n default:\n break;\n }\n\n const orgId = this.organizationId;\n\n if (this.attachments != null && this.attachments.length > 0) {\n const attachments: any[] = [];\n await this.attachments.reduce((promise, attachment) => {\n return promise\n .then(() => {\n return attachment.decrypt(orgId, encKey);\n })\n .then((decAttachment) => {\n attachments.push(decAttachment);\n });\n }, Promise.resolve());\n model.attachments = attachments;\n }\n\n if (this.fields != null && this.fields.length > 0) {\n const fields: any[] = [];\n await this.fields.reduce((promise, field) => {\n return promise\n .then(() => {\n return field.decrypt(orgId, encKey);\n })\n .then((decField) => {\n fields.push(decField);\n });\n }, Promise.resolve());\n model.fields = fields;\n }\n\n if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n const passwordHistory: any[] = [];\n await this.passwordHistory.reduce((promise, ph) => {\n return promise\n .then(() => {\n return ph.decrypt(orgId, encKey);\n })\n .then((decPh) => {\n passwordHistory.push(decPh);\n });\n }, Promise.resolve());\n model.passwordHistory = passwordHistory;\n }\n\n return model;\n }\n\n toCipherData(): CipherData {\n const c = new CipherData();\n c.id = this.id;\n c.organizationId = this.organizationId;\n c.folderId = this.folderId;\n c.edit = this.edit;\n c.viewPassword = this.viewPassword;\n c.organizationUseTotp = this.organizationUseTotp;\n c.favorite = this.favorite;\n c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n c.type = this.type;\n c.collectionIds = this.collectionIds;\n c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n c.reprompt = this.reprompt;\n\n this.buildDataModel(this, c, {\n name: null,\n notes: null,\n });\n\n switch (c.type) {\n case CipherType.Login:\n c.login = this.login.toLoginData();\n break;\n case CipherType.SecureNote:\n c.secureNote = this.secureNote.toSecureNoteData();\n break;\n case CipherType.Card:\n c.card = this.card.toCardData();\n break;\n case CipherType.Identity:\n c.identity = this.identity.toIdentityData();\n break;\n default:\n break;\n }\n\n if (this.fields != null) {\n c.fields = this.fields.map((f) => f.toFieldData());\n }\n if (this.attachments != null) {\n c.attachments = this.attachments.map((a) => a.toAttachmentData());\n }\n if (this.passwordHistory != null) {\n c.passwordHistory = this.passwordHistory.map((ph) => ph.toPasswordHistoryData());\n }\n return c;\n }\n}\n","import { CollectionData } from \"../data/collectionData\";\nimport { CollectionView } from \"../view/collectionView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\n\nexport class Collection extends Domain {\n id: string;\n organizationId: string;\n name: EncString;\n externalId: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(obj?: CollectionData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n organizationId: null,\n name: null,\n externalId: null,\n readOnly: null,\n hidePasswords: null,\n },\n [\"id\", \"organizationId\", \"externalId\", \"readOnly\", \"hidePasswords\"]\n );\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new CollectionView(this),\n {\n name: null,\n },\n this.organizationId\n );\n }\n}\n","export class DecryptParameters {\n encKey: T;\n data: T;\n iv: T;\n macKey: T;\n mac: T;\n macData: T;\n}\n","import { View } from \"../view/view\";\n\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport default class Domain {\n protected buildDomainModel(\n domain: D,\n dataObj: any,\n map: any,\n notEncList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = dataObj[map[prop] || prop];\n if (notEncList.indexOf(prop) > -1) {\n (domain as any)[prop] = objProp ? objProp : null;\n } else {\n (domain as any)[prop] = objProp ? new EncString(objProp) : null;\n }\n }\n }\n protected buildDataModel(\n domain: D,\n dataObj: any,\n map: any,\n notEncStringList: any[] = []\n ) {\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n const objProp = (domain as any)[map[prop] || prop];\n if (notEncStringList.indexOf(prop) > -1) {\n (dataObj as any)[prop] = objProp != null ? objProp : null;\n } else {\n (dataObj as any)[prop] = objProp != null ? (objProp as EncString).encryptedString : null;\n }\n }\n }\n\n protected async decryptObj(\n viewModel: T,\n map: any,\n orgId: string,\n key: SymmetricCryptoKey = null\n ): Promise {\n const promises = [];\n const self: any = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp) {\n const p = Promise.resolve()\n .then(() => {\n const mapProp = map[theProp] || theProp;\n if (self[mapProp]) {\n return self[mapProp].decrypt(orgId, key);\n }\n return null;\n })\n .then((val: any) => {\n (viewModel as any)[theProp] = val;\n });\n promises.push(p);\n })(prop);\n }\n\n await Promise.all(promises);\n return viewModel;\n }\n}\n","export class EncArrayBuffer {\n constructor(public buffer: ArrayBuffer) {}\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { EncryptionType } from \"../../enums/encryptionType\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncString {\n encryptedString?: string;\n encryptionType?: EncryptionType;\n decryptedValue?: string;\n data?: string;\n iv?: string;\n mac?: string;\n\n constructor(\n encryptedStringOrType: string | EncryptionType,\n data?: string,\n iv?: string,\n mac?: string\n ) {\n if (data != null) {\n // data and header\n const encType = encryptedStringOrType as EncryptionType;\n\n if (iv != null) {\n this.encryptedString = encType + \".\" + iv + \"|\" + data;\n } else {\n this.encryptedString = encType + \".\" + data;\n }\n\n // mac\n if (mac != null) {\n this.encryptedString += \"|\" + mac;\n }\n\n this.encryptionType = encType;\n this.data = data;\n this.iv = iv;\n this.mac = mac;\n\n return;\n }\n\n this.encryptedString = encryptedStringOrType as string;\n if (!this.encryptedString) {\n return;\n }\n\n const headerPieces = this.encryptedString.split(\".\");\n let encPieces: string[] = null;\n\n if (headerPieces.length === 2) {\n try {\n this.encryptionType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n return;\n }\n } else {\n encPieces = this.encryptedString.split(\"|\");\n this.encryptionType =\n encPieces.length === 3\n ? EncryptionType.AesCbc128_HmacSha256_B64\n : EncryptionType.AesCbc256_B64;\n }\n\n switch (this.encryptionType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encPieces.length !== 3) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n this.mac = encPieces[2];\n break;\n case EncryptionType.AesCbc256_B64:\n if (encPieces.length !== 2) {\n return;\n }\n\n this.iv = encPieces[0];\n this.data = encPieces[1];\n break;\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n if (encPieces.length !== 1) {\n return;\n }\n\n this.data = encPieces[0];\n break;\n default:\n return;\n }\n }\n\n async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise {\n if (this.decryptedValue != null) {\n return this.decryptedValue;\n }\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n\n try {\n if (key == null) {\n key = await cryptoService.getOrgKey(orgId);\n }\n this.decryptedValue = await cryptoService.decryptToUtf8(this, key);\n } catch (e) {\n this.decryptedValue = \"[error: cannot decrypt]\";\n }\n return this.decryptedValue;\n }\n}\n","import { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class EncryptedObject {\n iv: ArrayBuffer;\n data: ArrayBuffer;\n mac: ArrayBuffer;\n key: SymmetricCryptoKey;\n}\n","export class EnvironmentUrls {\n base: string = null;\n api: string = null;\n identity: string = null;\n icons: string = null;\n notifications: string = null;\n events: string = null;\n webVault: string = null;\n keyConnector: string = null;\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { FieldData } from \"../data/fieldData\";\nimport { FieldView } from \"../view/fieldView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Field extends Domain {\n name: EncString;\n value: EncString;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(obj?: FieldData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n this.linkedId = obj.linkedId;\n this.buildDomainModel(\n this,\n obj,\n {\n name: null,\n value: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new FieldView(this),\n {\n name: null,\n value: null,\n },\n orgId,\n encKey\n );\n }\n\n toFieldData(): FieldData {\n const f = new FieldData();\n this.buildDataModel(\n this,\n f,\n {\n name: null,\n value: null,\n type: null,\n linkedId: null,\n },\n [\"type\", \"linkedId\"]\n );\n return f;\n }\n}\n","import { FolderData } from \"../data/folderData\";\nimport { FolderView } from \"../view/folderView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\n\nexport class Folder extends Domain {\n id: string;\n name: EncString;\n revisionDate: Date;\n\n constructor(obj?: FolderData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n },\n [\"id\"]\n );\n\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n }\n\n decrypt(): Promise {\n return this.decryptObj(\n new FolderView(this),\n {\n name: null,\n },\n null\n );\n }\n}\n","export class GeneratedPasswordHistory {\n password: string;\n date: number;\n\n constructor(password: string, date: number) {\n this.password = password;\n this.date = date;\n }\n}\n","import { StateVersion } from \"../../enums/stateVersion\";\nimport { ThemeType } from \"../../enums/themeType\";\n\nimport { EnvironmentUrls } from \"./environmentUrls\";\nimport { WindowState } from \"./windowState\";\n\nexport class GlobalState {\n enableAlwaysOnTop?: boolean;\n installedVersion?: string;\n locale?: string;\n organizationInvitation?: any;\n ssoCodeVerifier?: string;\n ssoOrganizationIdentifier?: string;\n ssoState?: string;\n rememberedEmail?: string;\n theme?: ThemeType = ThemeType.System;\n window?: WindowState = new WindowState();\n twoFactorToken?: string;\n disableFavicon?: boolean;\n biometricAwaitingAcceptance?: boolean;\n biometricFingerprintValidated?: boolean;\n vaultTimeout?: number;\n vaultTimeoutAction?: string;\n loginRedirect?: any;\n mainWindowSize?: number;\n enableBiometrics?: boolean;\n biometricText?: string;\n noAutoPromptBiometrics?: boolean;\n noAutoPromptBiometricsText?: string;\n stateVersion: StateVersion = StateVersion.One;\n environmentUrls: EnvironmentUrls = new EnvironmentUrls();\n enableTray?: boolean;\n enableMinimizeToTray?: boolean;\n enableCloseToTray?: boolean;\n enableStartToTray?: boolean;\n openAtLogin?: boolean;\n alwaysShowDock?: boolean;\n enableBrowserIntegration?: boolean;\n enableBrowserIntegrationFingerprint?: boolean;\n}\n","import { IdentityData } from \"../data/identityData\";\nimport { IdentityView } from \"../view/identityView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Identity extends Domain {\n title: EncString;\n firstName: EncString;\n middleName: EncString;\n lastName: EncString;\n address1: EncString;\n address2: EncString;\n address3: EncString;\n city: EncString;\n state: EncString;\n postalCode: EncString;\n country: EncString;\n company: EncString;\n email: EncString;\n phone: EncString;\n ssn: EncString;\n username: EncString;\n passportNumber: EncString;\n licenseNumber: EncString;\n\n constructor(obj?: IdentityData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new IdentityView(),\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n orgId,\n encKey\n );\n }\n\n toIdentityData(): IdentityData {\n const i = new IdentityData();\n this.buildDataModel(this, i, {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n });\n return i;\n }\n}\n","import { CipherView } from \"../view/cipherView\";\nimport { CollectionView } from \"../view/collectionView\";\nimport { FolderView } from \"../view/folderView\";\n\nexport class ImportResult {\n success = false;\n missingPassword = false;\n errorMessage: string;\n ciphers: CipherView[] = [];\n folders: FolderView[] = [];\n folderRelationships: [number, number][] = [];\n collections: CollectionView[] = [];\n collectionRelationships: [number, number][] = [];\n}\n","import { AuthenticationType } from \"../../enums/authenticationType\";\nimport { TokenRequestTwoFactor } from \"../request/identityToken/tokenRequestTwoFactor\";\n\nexport class PasswordLogInCredentials {\n readonly type = AuthenticationType.Password;\n\n constructor(\n public email: string,\n public masterPassword: string,\n public captchaToken?: string,\n public twoFactor?: TokenRequestTwoFactor\n ) {}\n}\n\nexport class SsoLogInCredentials {\n readonly type = AuthenticationType.Sso;\n\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUrl: string,\n public orgId: string,\n public twoFactor?: TokenRequestTwoFactor\n ) {}\n}\n\nexport class ApiLogInCredentials {\n readonly type = AuthenticationType.Api;\n\n constructor(public clientId: string, public clientSecret: string) {}\n}\n","import { LoginData } from \"../data/loginData\";\nimport { LoginView } from \"../view/loginView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { LoginUri } from \"./loginUri\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Login extends Domain {\n uris: LoginUri[];\n username: EncString;\n password: EncString;\n passwordRevisionDate?: Date;\n totp: EncString;\n autofillOnPageLoad: boolean;\n\n constructor(obj?: LoginData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.passwordRevisionDate =\n obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n this.autofillOnPageLoad = obj.autofillOnPageLoad;\n this.buildDomainModel(\n this,\n obj,\n {\n username: null,\n password: null,\n totp: null,\n },\n []\n );\n\n if (obj.uris) {\n this.uris = [];\n obj.uris.forEach((u) => {\n this.uris.push(new LoginUri(u));\n });\n }\n }\n\n async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new LoginView(this),\n {\n username: null,\n password: null,\n totp: null,\n },\n orgId,\n encKey\n );\n\n if (this.uris != null) {\n view.uris = [];\n for (let i = 0; i < this.uris.length; i++) {\n const uri = await this.uris[i].decrypt(orgId, encKey);\n view.uris.push(uri);\n }\n }\n\n return view;\n }\n\n toLoginData(): LoginData {\n const l = new LoginData();\n l.passwordRevisionDate =\n this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n l.autofillOnPageLoad = this.autofillOnPageLoad;\n this.buildDataModel(this, l, {\n username: null,\n password: null,\n totp: null,\n });\n\n if (this.uris != null && this.uris.length > 0) {\n l.uris = [];\n this.uris.forEach((u) => {\n l.uris.push(u.toLoginUriData());\n });\n }\n\n return l;\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { LoginUriData } from \"../data/loginUriData\";\nimport { LoginUriView } from \"../view/loginUriView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class LoginUri extends Domain {\n uri: EncString;\n match: UriMatchType;\n\n constructor(obj?: LoginUriData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.match = obj.match;\n this.buildDomainModel(\n this,\n obj,\n {\n uri: null,\n },\n []\n );\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new LoginUriView(this),\n {\n uri: null,\n },\n orgId,\n encKey\n );\n }\n\n toLoginUriData(): LoginUriData {\n const u = new LoginUriData();\n this.buildDataModel(\n this,\n u,\n {\n uri: null,\n match: null,\n },\n [\"match\"]\n );\n return u;\n }\n}\n","import Domain from \"./domainBase\";\n\nexport class MasterPasswordPolicyOptions extends Domain {\n minComplexity = 0;\n minLength = 0;\n requireUpper = false;\n requireLower = false;\n requireNumbers = false;\n requireSpecial = false;\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { Permissions } from \"../../enums/permissions\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\nimport { OrganizationData } from \"../data/organizationData\";\n\nexport class Organization {\n id: string;\n name: string;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n hasPublicAndPrivateKeys: boolean;\n providerId: string;\n providerName: string;\n isProviderUser: boolean;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n\n constructor(obj?: OrganizationData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.usePolicies = obj.usePolicies;\n this.useGroups = obj.useGroups;\n this.useDirectory = obj.useDirectory;\n this.useEvents = obj.useEvents;\n this.useTotp = obj.useTotp;\n this.use2fa = obj.use2fa;\n this.useApi = obj.useApi;\n this.useSso = obj.useSso;\n this.useKeyConnector = obj.useKeyConnector;\n this.useResetPassword = obj.useResetPassword;\n this.selfHost = obj.selfHost;\n this.usersGetPremium = obj.usersGetPremium;\n this.seats = obj.seats;\n this.maxCollections = obj.maxCollections;\n this.maxStorageGb = obj.maxStorageGb;\n this.ssoBound = obj.ssoBound;\n this.identifier = obj.identifier;\n this.permissions = obj.permissions;\n this.resetPasswordEnrolled = obj.resetPasswordEnrolled;\n this.userId = obj.userId;\n this.hasPublicAndPrivateKeys = obj.hasPublicAndPrivateKeys;\n this.providerId = obj.providerId;\n this.providerName = obj.providerName;\n this.isProviderUser = obj.isProviderUser;\n this.familySponsorshipFriendlyName = obj.familySponsorshipFriendlyName;\n this.familySponsorshipAvailable = obj.familySponsorshipAvailable;\n this.planProductType = obj.planProductType;\n this.keyConnectorEnabled = obj.keyConnectorEnabled;\n this.keyConnectorUrl = obj.keyConnectorUrl;\n this.familySponsorshipLastSyncDate = obj.familySponsorshipLastSyncDate;\n this.familySponsorshipValidUntil = obj.familySponsorshipValidUntil;\n this.familySponsorshipToDelete = obj.familySponsorshipToDelete;\n }\n\n get canAccess() {\n if (this.type === OrganizationUserType.Owner) {\n return true;\n }\n return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n }\n\n get isManager() {\n return (\n this.type === OrganizationUserType.Manager ||\n this.type === OrganizationUserType.Owner ||\n this.type === OrganizationUserType.Admin\n );\n }\n\n get isAdmin() {\n return this.type === OrganizationUserType.Owner || this.type === OrganizationUserType.Admin;\n }\n\n get isOwner() {\n return this.type === OrganizationUserType.Owner || this.isProviderUser;\n }\n\n get canAccessEventLogs() {\n return this.isAdmin || this.permissions.accessEventLogs;\n }\n\n get canAccessImportExport() {\n return this.isAdmin || this.permissions.accessImportExport;\n }\n\n get canAccessReports() {\n return this.isAdmin || this.permissions.accessReports;\n }\n\n get canCreateNewCollections() {\n return (\n this.isManager ||\n (this.permissions.createNewCollections ?? this.permissions.manageAllCollections)\n );\n }\n\n get canEditAnyCollection() {\n return (\n this.isAdmin || (this.permissions.editAnyCollection ?? this.permissions.manageAllCollections)\n );\n }\n\n get canDeleteAnyCollection() {\n return (\n this.isAdmin ||\n (this.permissions.deleteAnyCollection ?? this.permissions.manageAllCollections)\n );\n }\n\n get canViewAllCollections() {\n return this.canCreateNewCollections || this.canEditAnyCollection || this.canDeleteAnyCollection;\n }\n\n get canEditAssignedCollections() {\n return (\n this.isManager ||\n (this.permissions.editAssignedCollections ?? this.permissions.manageAssignedCollections)\n );\n }\n\n get canDeleteAssignedCollections() {\n return (\n this.isManager ||\n (this.permissions.deleteAssignedCollections ?? this.permissions.manageAssignedCollections)\n );\n }\n\n get canViewAssignedCollections() {\n return this.canDeleteAssignedCollections || this.canEditAssignedCollections;\n }\n\n get canManageGroups() {\n return this.isAdmin || this.permissions.manageGroups;\n }\n\n get canManageSso() {\n return this.isAdmin || this.permissions.manageSso;\n }\n\n get canManagePolicies() {\n return this.isAdmin || this.permissions.managePolicies;\n }\n\n get canManageUsers() {\n return this.isAdmin || this.permissions.manageUsers;\n }\n\n get canManageUsersPassword() {\n return this.isAdmin || this.permissions.manageResetPassword;\n }\n\n get isExemptFromPolicies() {\n return this.canManagePolicies;\n }\n\n hasAnyPermission(permissions: Permissions[]) {\n const specifiedPermissions =\n (permissions.includes(Permissions.AccessEventLogs) && this.canAccessEventLogs) ||\n (permissions.includes(Permissions.AccessImportExport) && this.canAccessImportExport) ||\n (permissions.includes(Permissions.AccessReports) && this.canAccessReports) ||\n (permissions.includes(Permissions.CreateNewCollections) && this.canCreateNewCollections) ||\n (permissions.includes(Permissions.EditAnyCollection) && this.canEditAnyCollection) ||\n (permissions.includes(Permissions.DeleteAnyCollection) && this.canDeleteAnyCollection) ||\n (permissions.includes(Permissions.EditAssignedCollections) &&\n this.canEditAssignedCollections) ||\n (permissions.includes(Permissions.DeleteAssignedCollections) &&\n this.canDeleteAssignedCollections) ||\n (permissions.includes(Permissions.ManageGroups) && this.canManageGroups) ||\n (permissions.includes(Permissions.ManageOrganization) && this.isOwner) ||\n (permissions.includes(Permissions.ManagePolicies) && this.canManagePolicies) ||\n (permissions.includes(Permissions.ManageUsers) && this.canManageUsers) ||\n (permissions.includes(Permissions.ManageUsersPassword) && this.canManageUsersPassword) ||\n (permissions.includes(Permissions.ManageSso) && this.canManageSso) ||\n (permissions.includes(Permissions.ManageBilling) && this.canManageBilling);\n\n return specifiedPermissions && (this.enabled || this.isOwner);\n }\n\n get canManageBilling() {\n return this.isOwner && (this.isProviderUser || !this.hasProvider);\n }\n\n get hasProvider() {\n return this.providerId != null || this.providerName != null;\n }\n}\n","import { PasswordHistoryData } from \"../data/passwordHistoryData\";\nimport { PasswordHistoryView } from \"../view/passwordHistoryView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class Password extends Domain {\n password: EncString;\n lastUsedDate: Date;\n\n constructor(obj?: PasswordHistoryData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(this, obj, {\n password: null,\n });\n this.lastUsedDate = new Date(obj.lastUsedDate);\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new PasswordHistoryView(this),\n {\n password: null,\n },\n orgId,\n encKey\n );\n }\n\n toPasswordHistoryData(): PasswordHistoryData {\n const ph = new PasswordHistoryData();\n ph.lastUsedDate = this.lastUsedDate.toISOString();\n this.buildDataModel(this, ph, {\n password: null,\n });\n return ph;\n }\n}\n","import Domain from \"./domainBase\";\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n defaultType = \"\";\n minLength = 0;\n useUppercase = false;\n useLowercase = false;\n useNumbers = false;\n numberCount = 0;\n useSpecial = false;\n specialCount = 0;\n minNumberWords = 0;\n capitalize = false;\n includeNumber = false;\n\n inEffect() {\n return (\n this.defaultType !== \"\" ||\n this.minLength > 0 ||\n this.numberCount > 0 ||\n this.specialCount > 0 ||\n this.useUppercase ||\n this.useLowercase ||\n this.useNumbers ||\n this.useSpecial ||\n this.minNumberWords > 0 ||\n this.capitalize ||\n this.includeNumber\n );\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\nimport { PolicyData } from \"../data/policyData\";\n\nimport Domain from \"./domainBase\";\n\nexport class Policy extends Domain {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(obj?: PolicyData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.organizationId = obj.organizationId;\n this.type = obj.type;\n this.data = obj.data;\n this.enabled = obj.enabled;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { ProviderData } from \"../data/providerData\";\n\nexport class Provider {\n id: string;\n name: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n userId: string;\n useEvents: boolean;\n\n constructor(obj?: ProviderData) {\n if (obj == null) {\n return;\n }\n\n this.id = obj.id;\n this.name = obj.name;\n this.status = obj.status;\n this.type = obj.type;\n this.enabled = obj.enabled;\n this.userId = obj.userId;\n this.useEvents = obj.useEvents;\n }\n\n get canAccess() {\n if (this.isProviderAdmin) {\n return true;\n }\n return this.enabled && this.status === ProviderUserStatusType.Confirmed;\n }\n\n get canCreateOrganizations() {\n return this.enabled && this.isProviderAdmin;\n }\n\n get canManageUsers() {\n return this.isProviderAdmin;\n }\n\n get canAccessEventLogs() {\n return this.isProviderAdmin;\n }\n\n get isProviderAdmin() {\n return this.type === ProviderUserType.ProviderAdmin;\n }\n}\n","import Domain from \"./domainBase\";\n\nexport class ResetPasswordPolicyOptions extends Domain {\n autoEnrollEnabled = false;\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNoteData } from \"../data/secureNoteData\";\nimport { SecureNoteView } from \"../view/secureNoteView\";\n\nimport Domain from \"./domainBase\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SecureNote extends Domain {\n type: SecureNoteType;\n\n constructor(obj?: SecureNoteData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.type = obj.type;\n }\n\n decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise {\n return Promise.resolve(new SecureNoteView(this));\n }\n\n toSecureNoteData(): SecureNoteData {\n const n = new SecureNoteData();\n n.type = this.type;\n return n;\n }\n}\n","import { CryptoService } from \"../../abstractions/crypto.service\";\nimport { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { SendData } from \"../data/sendData\";\nimport { SendView } from \"../view/sendView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SendFile } from \"./sendFile\";\nimport { SendText } from \"./sendText\";\n\nexport class Send extends Domain {\n id: string;\n accessId: string;\n type: SendType;\n name: EncString;\n notes: EncString;\n file: SendFile;\n text: SendText;\n key: EncString;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: Date;\n expirationDate: Date;\n deletionDate: Date;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(obj?: SendData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n accessId: null,\n name: null,\n notes: null,\n key: null,\n },\n [\"id\", \"accessId\"]\n );\n\n this.type = obj.type;\n this.maxAccessCount = obj.maxAccessCount;\n this.accessCount = obj.accessCount;\n this.password = obj.password;\n this.disabled = obj.disabled;\n this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;\n this.expirationDate = obj.expirationDate != null ? new Date(obj.expirationDate) : null;\n this.hideEmail = obj.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\n break;\n default:\n break;\n }\n }\n\n async decrypt(): Promise {\n const model = new SendView(this);\n\n let cryptoService: CryptoService;\n const containerService = (Utils.global as any).bitwardenContainerService;\n if (containerService) {\n cryptoService = containerService.getCryptoService();\n } else {\n throw new Error(\"global bitwardenContainerService not initialized.\");\n }\n\n try {\n model.key = await cryptoService.decryptToBytes(this.key, null);\n model.cryptoKey = await cryptoService.makeSendKey(model.key);\n } catch (e) {\n // TODO: error?\n }\n\n await this.decryptObj(\n model,\n {\n name: null,\n notes: null,\n },\n null,\n model.cryptoKey\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(model.cryptoKey);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(model.cryptoKey);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccessResponse } from \"../response/sendAccessResponse\";\nimport { SendAccessView } from \"../view/sendAccessView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SendFile } from \"./sendFile\";\nimport { SendText } from \"./sendText\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendAccess extends Domain {\n id: string;\n type: SendType;\n name: EncString;\n file: SendFile;\n text: SendText;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(obj?: SendAccessResponse) {\n super();\n if (obj == null) {\n return;\n }\n\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n name: null,\n expirationDate: null,\n creatorIdentifier: null,\n },\n [\"id\", \"expirationDate\", \"creatorIdentifier\"]\n );\n\n this.type = obj.type;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendText(obj.text);\n break;\n case SendType.File:\n this.file = new SendFile(obj.file);\n break;\n default:\n break;\n }\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const model = new SendAccessView(this);\n\n await this.decryptObj(\n model,\n {\n name: null,\n },\n null,\n key\n );\n\n switch (this.type) {\n case SendType.File:\n model.file = await this.file.decrypt(key);\n break;\n case SendType.Text:\n model.text = await this.text.decrypt(key);\n break;\n default:\n break;\n }\n\n return model;\n }\n}\n","import { SendFileData } from \"../data/sendFileData\";\nimport { SendFileView } from \"../view/sendFileView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendFile extends Domain {\n id: string;\n size: string;\n sizeName: string;\n fileName: EncString;\n\n constructor(obj?: SendFileData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.size = obj.size;\n this.buildDomainModel(\n this,\n obj,\n {\n id: null,\n sizeName: null,\n fileName: null,\n },\n [\"id\", \"sizeName\"]\n );\n }\n\n async decrypt(key: SymmetricCryptoKey): Promise {\n const view = await this.decryptObj(\n new SendFileView(this),\n {\n fileName: null,\n },\n null,\n key\n );\n return view;\n }\n}\n","import { SendTextData } from \"../data/sendTextData\";\nimport { SendTextView } from \"../view/sendTextView\";\n\nimport Domain from \"./domainBase\";\nimport { EncString } from \"./encString\";\nimport { SymmetricCryptoKey } from \"./symmetricCryptoKey\";\n\nexport class SendText extends Domain {\n text: EncString;\n hidden: boolean;\n\n constructor(obj?: SendTextData) {\n super();\n if (obj == null) {\n return;\n }\n\n this.hidden = obj.hidden;\n this.buildDomainModel(\n this,\n obj,\n {\n text: null,\n },\n []\n );\n }\n\n decrypt(key: SymmetricCryptoKey): Promise {\n return this.decryptObj(\n new SendTextView(this),\n {\n text: null,\n },\n null,\n key\n );\n }\n}\n","import { CipherView } from \"../view/cipherView\";\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n private readonly sortedCiphersByUrl: Map = new Map();\n private readonly timeouts: Map = new Map();\n\n constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) {}\n\n isCached(url: string) {\n return this.sortedCiphersByUrl.has(url);\n }\n\n addCiphers(url: string, ciphers: CipherView[]) {\n ciphers.sort(this.comparator);\n this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n this.resetTimer(url);\n }\n\n getLastUsed(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n }\n\n getLastLaunched(url: string) {\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n }\n\n getNext(url: string) {\n this.resetTimer(url);\n return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n }\n\n updateLastUsedIndex(url: string) {\n if (this.isCached(url)) {\n this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n }\n }\n\n clear() {\n this.sortedCiphersByUrl.clear();\n this.timeouts.clear();\n }\n\n private resetTimer(url: string) {\n clearTimeout(this.timeouts.get(url));\n this.timeouts.set(\n url,\n setTimeout(() => {\n this.sortedCiphersByUrl.delete(url);\n this.timeouts.delete(url);\n }, CacheTTL)\n );\n }\n}\n\nclass Ciphers {\n lastUsedIndex = -1;\n\n constructor(private readonly ciphers: CipherView[]) {}\n\n getLastUsed() {\n this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n return this.ciphers[this.lastUsedIndex];\n }\n\n getLastLaunched() {\n const usedCiphers = this.ciphers.filter((cipher) => cipher.localData?.lastLaunched);\n const sortedCiphers = usedCiphers.sort(\n (x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf()\n );\n return sortedCiphers[0];\n }\n\n getNextIndex() {\n return (this.lastUsedIndex + 1) % this.ciphers.length;\n }\n\n getNext() {\n return this.ciphers[this.getNextIndex()];\n }\n\n updateLastUsedIndex() {\n this.lastUsedIndex = this.getNextIndex();\n }\n}\n","import { Account } from \"./account\";\nimport { GlobalState } from \"./globalState\";\n\nexport class State<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n accounts: { [userId: string]: TAccount } = {};\n globals: TGlobalState;\n activeUserId: string;\n authenticatedAccounts: string[] = [];\n accountActivity: { [userId: string]: number } = {};\n\n constructor(globals: TGlobalState) {\n this.globals = globals;\n }\n}\n","import { EncryptionType } from \"../../enums/encryptionType\";\nimport { Utils } from \"../../misc/utils\";\n\nexport class SymmetricCryptoKey {\n key: ArrayBuffer;\n encKey?: ArrayBuffer;\n macKey?: ArrayBuffer;\n encType: EncryptionType;\n\n keyB64: string;\n encKeyB64: string;\n macKeyB64: string;\n\n meta: any;\n\n constructor(key: ArrayBuffer, encType?: EncryptionType) {\n if (key == null) {\n throw new Error(\"Must provide key\");\n }\n\n if (encType == null) {\n if (key.byteLength === 32) {\n encType = EncryptionType.AesCbc256_B64;\n } else if (key.byteLength === 64) {\n encType = EncryptionType.AesCbc256_HmacSha256_B64;\n } else {\n throw new Error(\"Unable to determine encType.\");\n }\n }\n\n this.key = key;\n this.encType = encType;\n\n if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n this.encKey = key;\n this.macKey = null;\n } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n this.encKey = key.slice(0, 16);\n this.macKey = key.slice(16, 32);\n } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n this.encKey = key.slice(0, 32);\n this.macKey = key.slice(32, 64);\n } else {\n throw new Error(\"Unsupported encType/key length.\");\n }\n\n if (this.key != null) {\n this.keyB64 = Utils.fromBufferToB64(this.key);\n }\n if (this.encKey != null) {\n this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n }\n if (this.macKey != null) {\n this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n }\n }\n}\n","export class TreeNode {\n parent: T;\n node: T;\n children: TreeNode[] = [];\n\n constructor(node: T, name: string, parent: T) {\n this.parent = parent;\n this.node = node;\n this.node.name = name;\n }\n}\n\nexport interface ITreeNodeObject {\n id: string;\n name: string;\n}\n","export class WindowState {\n width?: number;\n height?: number;\n isMaximized?: boolean;\n // TODO: displayBounds is an Electron.Rectangle.\n // We need to establish some kind of client-specific global state, similiar to the way we already extend a base Account.\n displayBounds: any;\n x?: number;\n y?: number;\n}\n","import { Card as CardDomain } from \"../domain/card\";\nimport { EncString } from \"../domain/encString\";\nimport { CardView } from \"../view/cardView\";\n\nexport class CardExport {\n static template(): CardExport {\n const req = new CardExport();\n req.cardholderName = \"John Doe\";\n req.brand = \"visa\";\n req.number = \"4242424242424242\";\n req.expMonth = \"04\";\n req.expYear = \"2023\";\n req.code = \"123\";\n return req;\n }\n\n static toView(req: CardExport, view = new CardView()) {\n view.cardholderName = req.cardholderName;\n view.brand = req.brand;\n view.number = req.number;\n view.expMonth = req.expMonth;\n view.expYear = req.expYear;\n view.code = req.code;\n return view;\n }\n\n static toDomain(req: CardExport, domain = new CardDomain()) {\n domain.cardholderName = req.cardholderName != null ? new EncString(req.cardholderName) : null;\n domain.brand = req.brand != null ? new EncString(req.brand) : null;\n domain.number = req.number != null ? new EncString(req.number) : null;\n domain.expMonth = req.expMonth != null ? new EncString(req.expMonth) : null;\n domain.expYear = req.expYear != null ? new EncString(req.expYear) : null;\n domain.code = req.code != null ? new EncString(req.code) : null;\n return domain;\n }\n\n cardholderName: string;\n brand: string;\n number: string;\n expMonth: string;\n expYear: string;\n code: string;\n\n constructor(o?: CardView | CardDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof CardView) {\n this.cardholderName = o.cardholderName;\n this.brand = o.brand;\n this.number = o.number;\n this.expMonth = o.expMonth;\n this.expYear = o.expYear;\n this.code = o.code;\n } else {\n this.cardholderName = o.cardholderName?.encryptedString;\n this.brand = o.brand?.encryptedString;\n this.number = o.number?.encryptedString;\n this.expMonth = o.expMonth?.encryptedString;\n this.expYear = o.expYear?.encryptedString;\n this.code = o.code?.encryptedString;\n }\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { EncString } from \"../domain/encString\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { CardExport } from \"./cardExport\";\nimport { FieldExport } from \"./fieldExport\";\nimport { IdentityExport } from \"./identityExport\";\nimport { LoginExport } from \"./loginExport\";\nimport { SecureNoteExport } from \"./secureNoteExport\";\n\nexport class CipherExport {\n static template(): CipherExport {\n const req = new CipherExport();\n req.organizationId = null;\n req.collectionIds = null;\n req.folderId = null;\n req.type = CipherType.Login;\n req.name = \"Item name\";\n req.notes = \"Some notes about this item.\";\n req.favorite = false;\n req.fields = [];\n req.login = null;\n req.secureNote = null;\n req.card = null;\n req.identity = null;\n req.reprompt = CipherRepromptType.None;\n return req;\n }\n\n static toView(req: CipherExport, view = new CipherView()) {\n view.type = req.type;\n view.folderId = req.folderId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n if (view.collectionIds || req.collectionIds) {\n const set = new Set((view.collectionIds ?? []).concat(req.collectionIds ?? []));\n view.collectionIds = Array.from(set.values());\n }\n view.name = req.name;\n view.notes = req.notes;\n view.favorite = req.favorite;\n view.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n view.fields = req.fields.map((f) => FieldExport.toView(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n view.login = LoginExport.toView(req.login);\n break;\n case CipherType.SecureNote:\n view.secureNote = SecureNoteExport.toView(req.secureNote);\n break;\n case CipherType.Card:\n view.card = CardExport.toView(req.card);\n break;\n case CipherType.Identity:\n view.identity = IdentityExport.toView(req.identity);\n break;\n }\n\n return view;\n }\n\n static toDomain(req: CipherExport, domain = new CipherDomain()) {\n domain.type = req.type;\n domain.folderId = req.folderId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.notes = req.notes != null ? new EncString(req.notes) : null;\n domain.favorite = req.favorite;\n domain.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n if (req.fields != null) {\n domain.fields = req.fields.map((f) => FieldExport.toDomain(f));\n }\n\n switch (req.type) {\n case CipherType.Login:\n domain.login = LoginExport.toDomain(req.login);\n break;\n case CipherType.SecureNote:\n domain.secureNote = SecureNoteExport.toDomain(req.secureNote);\n break;\n case CipherType.Card:\n domain.card = CardExport.toDomain(req.card);\n break;\n case CipherType.Identity:\n domain.identity = IdentityExport.toDomain(req.identity);\n break;\n }\n\n return domain;\n }\n\n type: CipherType;\n folderId: string;\n organizationId: string;\n collectionIds: string[];\n name: string;\n notes: string;\n favorite: boolean;\n fields: FieldExport[];\n login: LoginExport;\n secureNote: SecureNoteExport;\n card: CardExport;\n identity: IdentityExport;\n reprompt: CipherRepromptType;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.organizationId = o.organizationId;\n this.folderId = o.folderId;\n this.type = o.type;\n this.reprompt = o.reprompt;\n\n if (o instanceof CipherView) {\n this.name = o.name;\n this.notes = o.notes;\n } else {\n this.name = o.name?.encryptedString;\n this.notes = o.notes?.encryptedString;\n }\n\n this.favorite = o.favorite;\n\n if (o.fields != null) {\n if (o instanceof CipherView) {\n this.fields = o.fields.map((f) => new FieldExport(f));\n } else {\n this.fields = o.fields.map((f) => new FieldExport(f));\n }\n }\n\n switch (o.type) {\n case CipherType.Login:\n this.login = new LoginExport(o.login);\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteExport(o.secureNote);\n break;\n case CipherType.Card:\n this.card = new CardExport(o.card);\n break;\n case CipherType.Identity:\n this.identity = new IdentityExport(o.identity);\n break;\n }\n }\n}\n","import { Cipher as CipherDomain } from \"../domain/cipher\";\nimport { CipherView } from \"../view/cipherView\";\n\nimport { CipherExport } from \"./cipherExport\";\n\nexport class CipherWithIdExport extends CipherExport {\n id: string;\n collectionIds: string[];\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CipherView | CipherDomain) {\n this.id = o.id;\n super.build(o);\n this.collectionIds = o.collectionIds;\n }\n}\n","import { Collection as CollectionDomain } from \"../domain/collection\";\nimport { EncString } from \"../domain/encString\";\nimport { CollectionView } from \"../view/collectionView\";\n\nexport class CollectionExport {\n static template(): CollectionExport {\n const req = new CollectionExport();\n req.organizationId = \"00000000-0000-0000-0000-000000000000\";\n req.name = \"Collection name\";\n req.externalId = null;\n return req;\n }\n\n static toView(req: CollectionExport, view = new CollectionView()) {\n view.name = req.name;\n view.externalId = req.externalId;\n if (view.organizationId == null) {\n view.organizationId = req.organizationId;\n }\n return view;\n }\n\n static toDomain(req: CollectionExport, domain = new CollectionDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.externalId = req.externalId;\n if (domain.organizationId == null) {\n domain.organizationId = req.organizationId;\n }\n return domain;\n }\n\n organizationId: string;\n name: string;\n externalId: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.organizationId = o.organizationId;\n if (o instanceof CollectionView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n this.externalId = o.externalId;\n }\n}\n","import { Collection as CollectionDomain } from \"../domain/collection\";\nimport { CollectionView } from \"../view/collectionView\";\n\nimport { CollectionExport } from \"./collectionExport\";\n\nexport class CollectionWithIdExport extends CollectionExport {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: CollectionView | CollectionDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { EventType } from \"../../enums/eventType\";\nimport { EventView } from \"../view/eventView\";\n\nexport class EventExport {\n message: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: string;\n installationId: string;\n\n constructor(event: EventView) {\n this.message = event.humanReadableMessage;\n this.appIcon = event.appIcon;\n this.appName = event.appName;\n this.userId = event.userId;\n this.userName = event.userName;\n this.userEmail = event.userEmail;\n this.date = event.date;\n this.ip = event.ip;\n this.type = EventType[event.type];\n this.installationId = event.installationId;\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { EncString } from \"../domain/encString\";\nimport { Field as FieldDomain } from \"../domain/field\";\nimport { FieldView } from \"../view/fieldView\";\n\nexport class FieldExport {\n static template(): FieldExport {\n const req = new FieldExport();\n req.name = \"Field name\";\n req.value = \"Some value\";\n req.type = FieldType.Text;\n return req;\n }\n\n static toView(req: FieldExport, view = new FieldView()) {\n view.type = req.type;\n view.value = req.value;\n view.name = req.name;\n view.linkedId = req.linkedId;\n return view;\n }\n\n static toDomain(req: FieldExport, domain = new FieldDomain()) {\n domain.type = req.type;\n domain.value = req.value != null ? new EncString(req.value) : null;\n domain.name = req.name != null ? new EncString(req.name) : null;\n domain.linkedId = req.linkedId;\n return domain;\n }\n\n name: string;\n value: string;\n type: FieldType;\n linkedId: LinkedIdType;\n\n constructor(o?: FieldView | FieldDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof FieldView) {\n this.name = o.name;\n this.value = o.value;\n } else {\n this.name = o.name?.encryptedString;\n this.value = o.value?.encryptedString;\n }\n this.type = o.type;\n this.linkedId = o.linkedId;\n }\n}\n","import { EncString } from \"../domain/encString\";\nimport { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folderView\";\n\nexport class FolderExport {\n static template(): FolderExport {\n const req = new FolderExport();\n req.name = \"Folder name\";\n return req;\n }\n\n static toView(req: FolderExport, view = new FolderView()) {\n view.name = req.name;\n return view;\n }\n\n static toDomain(req: FolderExport, domain = new FolderDomain()) {\n domain.name = req.name != null ? new EncString(req.name) : null;\n return domain;\n }\n\n name: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n if (o instanceof FolderView) {\n this.name = o.name;\n } else {\n this.name = o.name?.encryptedString;\n }\n }\n}\n","import { Folder as FolderDomain } from \"../domain/folder\";\nimport { FolderView } from \"../view/folderView\";\n\nimport { FolderExport } from \"./folderExport\";\n\nexport class FolderWithIdExport extends FolderExport {\n id: string;\n\n // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n build(o: FolderView | FolderDomain) {\n this.id = o.id;\n super.build(o);\n }\n}\n","import { EncString } from \"../domain/encString\";\nimport { Identity as IdentityDomain } from \"../domain/identity\";\nimport { IdentityView } from \"../view/identityView\";\n\nexport class IdentityExport {\n static template(): IdentityExport {\n const req = new IdentityExport();\n req.title = \"Mr\";\n req.firstName = \"John\";\n req.middleName = \"William\";\n req.lastName = \"Doe\";\n req.address1 = \"123 Any St\";\n req.address2 = \"Apt #123\";\n req.address3 = null;\n req.city = \"New York\";\n req.state = \"NY\";\n req.postalCode = \"10001\";\n req.country = \"US\";\n req.company = \"Acme Inc.\";\n req.email = \"john@company.com\";\n req.phone = \"5555551234\";\n req.ssn = \"000-123-4567\";\n req.username = \"jdoe\";\n req.passportNumber = \"US-123456789\";\n req.licenseNumber = \"D123-12-123-12333\";\n return req;\n }\n\n static toView(req: IdentityExport, view = new IdentityView()) {\n view.title = req.title;\n view.firstName = req.firstName;\n view.middleName = req.middleName;\n view.lastName = req.lastName;\n view.address1 = req.address1;\n view.address2 = req.address2;\n view.address3 = req.address3;\n view.city = req.city;\n view.state = req.state;\n view.postalCode = req.postalCode;\n view.country = req.country;\n view.company = req.company;\n view.email = req.email;\n view.phone = req.phone;\n view.ssn = req.ssn;\n view.username = req.username;\n view.passportNumber = req.passportNumber;\n view.licenseNumber = req.licenseNumber;\n return view;\n }\n\n static toDomain(req: IdentityExport, domain = new IdentityDomain()) {\n domain.title = req.title != null ? new EncString(req.title) : null;\n domain.firstName = req.firstName != null ? new EncString(req.firstName) : null;\n domain.middleName = req.middleName != null ? new EncString(req.middleName) : null;\n domain.lastName = req.lastName != null ? new EncString(req.lastName) : null;\n domain.address1 = req.address1 != null ? new EncString(req.address1) : null;\n domain.address2 = req.address2 != null ? new EncString(req.address2) : null;\n domain.address3 = req.address3 != null ? new EncString(req.address3) : null;\n domain.city = req.city != null ? new EncString(req.city) : null;\n domain.state = req.state != null ? new EncString(req.state) : null;\n domain.postalCode = req.postalCode != null ? new EncString(req.postalCode) : null;\n domain.country = req.country != null ? new EncString(req.country) : null;\n domain.company = req.company != null ? new EncString(req.company) : null;\n domain.email = req.email != null ? new EncString(req.email) : null;\n domain.phone = req.phone != null ? new EncString(req.phone) : null;\n domain.ssn = req.ssn != null ? new EncString(req.ssn) : null;\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.passportNumber = req.passportNumber != null ? new EncString(req.passportNumber) : null;\n domain.licenseNumber = req.licenseNumber != null ? new EncString(req.licenseNumber) : null;\n return domain;\n }\n\n title: string;\n firstName: string;\n middleName: string;\n lastName: string;\n address1: string;\n address2: string;\n address3: string;\n city: string;\n state: string;\n postalCode: string;\n country: string;\n company: string;\n email: string;\n phone: string;\n ssn: string;\n username: string;\n passportNumber: string;\n licenseNumber: string;\n\n constructor(o?: IdentityView | IdentityDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof IdentityView) {\n this.title = o.title;\n this.firstName = o.firstName;\n this.middleName = o.middleName;\n this.lastName = o.lastName;\n this.address1 = o.address1;\n this.address2 = o.address2;\n this.address3 = o.address3;\n this.city = o.city;\n this.state = o.state;\n this.postalCode = o.postalCode;\n this.country = o.country;\n this.company = o.company;\n this.email = o.email;\n this.phone = o.phone;\n this.ssn = o.ssn;\n this.username = o.username;\n this.passportNumber = o.passportNumber;\n this.licenseNumber = o.licenseNumber;\n } else {\n this.title = o.title?.encryptedString;\n this.firstName = o.firstName?.encryptedString;\n this.middleName = o.middleName?.encryptedString;\n this.lastName = o.lastName?.encryptedString;\n this.address1 = o.address1?.encryptedString;\n this.address2 = o.address2?.encryptedString;\n this.address3 = o.address3?.encryptedString;\n this.city = o.city?.encryptedString;\n this.state = o.state?.encryptedString;\n this.postalCode = o.postalCode?.encryptedString;\n this.country = o.country?.encryptedString;\n this.company = o.company?.encryptedString;\n this.email = o.email?.encryptedString;\n this.phone = o.phone?.encryptedString;\n this.ssn = o.ssn?.encryptedString;\n this.username = o.username?.encryptedString;\n this.passportNumber = o.passportNumber?.encryptedString;\n this.licenseNumber = o.licenseNumber?.encryptedString;\n }\n }\n}\n","import { EncString } from \"../domain/encString\";\nimport { Login as LoginDomain } from \"../domain/login\";\nimport { LoginView } from \"../view/loginView\";\n\nimport { LoginUriExport } from \"./loginUriExport\";\n\nexport class LoginExport {\n static template(): LoginExport {\n const req = new LoginExport();\n req.uris = [];\n req.username = \"jdoe\";\n req.password = \"myp@ssword123\";\n req.totp = \"JBSWY3DPEHPK3PXP\";\n return req;\n }\n\n static toView(req: LoginExport, view = new LoginView()) {\n if (req.uris != null) {\n view.uris = req.uris.map((u) => LoginUriExport.toView(u));\n }\n view.username = req.username;\n view.password = req.password;\n view.totp = req.totp;\n return view;\n }\n\n static toDomain(req: LoginExport, domain = new LoginDomain()) {\n if (req.uris != null) {\n domain.uris = req.uris.map((u) => LoginUriExport.toDomain(u));\n }\n domain.username = req.username != null ? new EncString(req.username) : null;\n domain.password = req.password != null ? new EncString(req.password) : null;\n domain.totp = req.totp != null ? new EncString(req.totp) : null;\n return domain;\n }\n\n uris: LoginUriExport[];\n username: string;\n password: string;\n totp: string;\n\n constructor(o?: LoginView | LoginDomain) {\n if (o == null) {\n return;\n }\n\n if (o.uris != null) {\n if (o instanceof LoginView) {\n this.uris = o.uris.map((u) => new LoginUriExport(u));\n } else {\n this.uris = o.uris.map((u) => new LoginUriExport(u));\n }\n }\n\n if (o instanceof LoginView) {\n this.username = o.username;\n this.password = o.password;\n this.totp = o.totp;\n } else {\n this.username = o.username?.encryptedString;\n this.password = o.password?.encryptedString;\n this.totp = o.totp?.encryptedString;\n }\n }\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { EncString } from \"../domain/encString\";\nimport { LoginUri as LoginUriDomain } from \"../domain/loginUri\";\nimport { LoginUriView } from \"../view/loginUriView\";\n\nexport class LoginUriExport {\n static template(): LoginUriExport {\n const req = new LoginUriExport();\n req.uri = \"https://google.com\";\n req.match = null;\n return req;\n }\n\n static toView(req: LoginUriExport, view = new LoginUriView()) {\n view.uri = req.uri;\n view.match = req.match;\n return view;\n }\n\n static toDomain(req: LoginUriExport, domain = new LoginUriDomain()) {\n domain.uri = req.uri != null ? new EncString(req.uri) : null;\n domain.match = req.match;\n return domain;\n }\n\n uri: string;\n match: UriMatchType = null;\n\n constructor(o?: LoginUriView | LoginUriDomain) {\n if (o == null) {\n return;\n }\n\n if (o instanceof LoginUriView) {\n this.uri = o.uri;\n } else {\n this.uri = o.uri?.encryptedString;\n }\n this.match = o.match;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote as SecureNoteDomain } from \"../domain/secureNote\";\nimport { SecureNoteView } from \"../view/secureNoteView\";\n\nexport class SecureNoteExport {\n static template(): SecureNoteExport {\n const req = new SecureNoteExport();\n req.type = SecureNoteType.Generic;\n return req;\n }\n\n static toView(req: SecureNoteExport, view = new SecureNoteView()) {\n view.type = req.type;\n return view;\n }\n\n static toDomain(req: SecureNoteExport, view = new SecureNoteDomain()) {\n view.type = req.type;\n return view;\n }\n\n type: SecureNoteType;\n\n constructor(o?: SecureNoteView | SecureNoteDomain) {\n if (o == null) {\n return;\n }\n\n this.type = o.type;\n }\n}\n","import { KdfType } from \"../../../enums/kdfType\";\nimport { KeysRequest } from \"../keysRequest\";\n\nexport class SetKeyConnectorKeyRequest {\n key: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n key: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.key = key;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","export class VerifyOTPRequest {\n OTP: string;\n\n constructor(OTP: string) {\n this.OTP = OTP;\n }\n}\n","export class AttachmentRequest {\n fileName: string;\n key: string;\n fileSize: number;\n adminRequest: boolean;\n}\n","export class BillingSyncConfigRequest {\n constructor(private billingSyncKey: string) {}\n}\n","export class BitPayInvoiceRequest {\n userId: string;\n organizationId: string;\n credit: boolean;\n amount: number;\n returnUrl: string;\n name: string;\n email: string;\n}\n","export class CipherBulkDeleteRequest {\n ids: string[];\n organizationId: string;\n\n constructor(ids: string[], organizationId?: string) {\n this.ids = ids == null ? [] : ids;\n this.organizationId = organizationId;\n }\n}\n","export class CipherBulkMoveRequest {\n ids: string[];\n folderId: string;\n\n constructor(ids: string[], folderId: string) {\n this.ids = ids == null ? [] : ids;\n this.folderId = folderId;\n }\n}\n","export class CipherBulkRestoreRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherWithIdRequest } from \"./cipherWithIdRequest\";\n\nexport class CipherBulkShareRequest {\n ciphers: CipherWithIdRequest[];\n collectionIds: string[];\n\n constructor(ciphers: Cipher[], collectionIds: string[]) {\n if (ciphers != null) {\n this.ciphers = [];\n ciphers.forEach((c) => {\n this.ciphers.push(new CipherWithIdRequest(c));\n });\n }\n this.collectionIds = collectionIds;\n }\n}\n","export class CipherCollectionsRequest {\n collectionIds: string[];\n\n constructor(collectionIds: string[]) {\n this.collectionIds = collectionIds == null ? [] : collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherCreateRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { CardApi } from \"../api/cardApi\";\nimport { FieldApi } from \"../api/fieldApi\";\nimport { IdentityApi } from \"../api/identityApi\";\nimport { LoginApi } from \"../api/loginApi\";\nimport { LoginUriApi } from \"../api/loginUriApi\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentRequest } from \"./attachmentRequest\";\nimport { PasswordHistoryRequest } from \"./passwordHistoryRequest\";\n\nexport class CipherRequest {\n type: CipherType;\n folderId: string;\n organizationId: string;\n name: string;\n notes: string;\n favorite: boolean;\n login: LoginApi;\n secureNote: SecureNoteApi;\n card: CardApi;\n identity: IdentityApi;\n fields: FieldApi[];\n passwordHistory: PasswordHistoryRequest[];\n // Deprecated, remove at some point and rename attachments2 to attachments\n attachments: { [id: string]: string };\n attachments2: { [id: string]: AttachmentRequest };\n lastKnownRevisionDate: Date;\n reprompt: CipherRepromptType;\n\n constructor(cipher: Cipher) {\n this.type = cipher.type;\n this.folderId = cipher.folderId;\n this.organizationId = cipher.organizationId;\n this.name = cipher.name ? cipher.name.encryptedString : null;\n this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n this.favorite = cipher.favorite;\n this.lastKnownRevisionDate = cipher.revisionDate;\n this.reprompt = cipher.reprompt;\n\n switch (this.type) {\n case CipherType.Login:\n this.login = new LoginApi();\n this.login.uris = null;\n this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n this.login.passwordRevisionDate =\n cipher.login.passwordRevisionDate != null\n ? cipher.login.passwordRevisionDate.toISOString()\n : null;\n this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n this.login.autofillOnPageLoad = cipher.login.autofillOnPageLoad;\n\n if (cipher.login.uris != null) {\n this.login.uris = cipher.login.uris.map((u) => {\n const uri = new LoginUriApi();\n uri.uri = u.uri != null ? u.uri.encryptedString : null;\n uri.match = u.match != null ? u.match : null;\n return uri;\n });\n }\n break;\n case CipherType.SecureNote:\n this.secureNote = new SecureNoteApi();\n this.secureNote.type = cipher.secureNote.type;\n break;\n case CipherType.Card:\n this.card = new CardApi();\n this.card.cardholderName =\n cipher.card.cardholderName != null ? cipher.card.cardholderName.encryptedString : null;\n this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n this.card.expMonth =\n cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n this.card.expYear =\n cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n break;\n case CipherType.Identity:\n this.identity = new IdentityApi();\n this.identity.title =\n cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n this.identity.firstName =\n cipher.identity.firstName != null ? cipher.identity.firstName.encryptedString : null;\n this.identity.middleName =\n cipher.identity.middleName != null ? cipher.identity.middleName.encryptedString : null;\n this.identity.lastName =\n cipher.identity.lastName != null ? cipher.identity.lastName.encryptedString : null;\n this.identity.address1 =\n cipher.identity.address1 != null ? cipher.identity.address1.encryptedString : null;\n this.identity.address2 =\n cipher.identity.address2 != null ? cipher.identity.address2.encryptedString : null;\n this.identity.address3 =\n cipher.identity.address3 != null ? cipher.identity.address3.encryptedString : null;\n this.identity.city =\n cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n this.identity.state =\n cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n this.identity.postalCode =\n cipher.identity.postalCode != null ? cipher.identity.postalCode.encryptedString : null;\n this.identity.country =\n cipher.identity.country != null ? cipher.identity.country.encryptedString : null;\n this.identity.company =\n cipher.identity.company != null ? cipher.identity.company.encryptedString : null;\n this.identity.email =\n cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n this.identity.phone =\n cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n this.identity.ssn =\n cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n this.identity.username =\n cipher.identity.username != null ? cipher.identity.username.encryptedString : null;\n this.identity.passportNumber =\n cipher.identity.passportNumber != null\n ? cipher.identity.passportNumber.encryptedString\n : null;\n this.identity.licenseNumber =\n cipher.identity.licenseNumber != null\n ? cipher.identity.licenseNumber.encryptedString\n : null;\n break;\n default:\n break;\n }\n\n if (cipher.fields != null) {\n this.fields = cipher.fields.map((f) => {\n const field = new FieldApi();\n field.type = f.type;\n field.name = f.name ? f.name.encryptedString : null;\n field.value = f.value ? f.value.encryptedString : null;\n field.linkedId = f.linkedId;\n return field;\n });\n }\n\n if (cipher.passwordHistory != null) {\n this.passwordHistory = [];\n cipher.passwordHistory.forEach((ph) => {\n this.passwordHistory.push({\n lastUsedDate: ph.lastUsedDate,\n password: ph.password ? ph.password.encryptedString : null,\n });\n });\n }\n\n if (cipher.attachments != null) {\n this.attachments = {};\n this.attachments2 = {};\n cipher.attachments.forEach((attachment) => {\n const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n this.attachments[attachment.id] = fileName;\n const attachmentRequest = new AttachmentRequest();\n attachmentRequest.fileName = fileName;\n if (attachment.key != null) {\n attachmentRequest.key = attachment.key.encryptedString;\n }\n this.attachments2[attachment.id] = attachmentRequest;\n });\n }\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherShareRequest {\n cipher: CipherRequest;\n collectionIds: string[];\n\n constructor(cipher: Cipher) {\n this.cipher = new CipherRequest(cipher);\n this.collectionIds = cipher.collectionIds;\n }\n}\n","import { Cipher } from \"../domain/cipher\";\n\nimport { CipherRequest } from \"./cipherRequest\";\n\nexport class CipherWithIdRequest extends CipherRequest {\n id: string;\n\n constructor(cipher: Cipher) {\n super(cipher);\n this.id = cipher.id;\n }\n}\n","import { Collection } from \"../domain/collection\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class CollectionRequest {\n name: string;\n externalId: string;\n groups: SelectionReadOnlyRequest[] = [];\n\n constructor(collection?: Collection) {\n if (collection == null) {\n return;\n }\n this.name = collection.name ? collection.name.encryptedString : null;\n this.externalId = collection.externalId;\n }\n}\n","export class DeleteRecoverRequest {\n email: string;\n}\n","import { PlatformUtilsService } from \"../../abstractions/platformUtils.service\";\nimport { DeviceType } from \"../../enums/deviceType\";\n\nexport class DeviceRequest {\n type: DeviceType;\n name: string;\n identifier: string;\n pushToken?: string;\n\n constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n this.type = platformUtilsService.getDevice();\n this.name = platformUtilsService.getDeviceString();\n this.identifier = appId;\n this.pushToken = null;\n }\n}\n","export class DeviceVerificationRequest {\n unknownDeviceVerificationEnabled: boolean;\n\n constructor(unknownDeviceVerificationEnabled: boolean) {\n this.unknownDeviceVerificationEnabled = unknownDeviceVerificationEnabled;\n }\n}\n","import { EmailTokenRequest } from \"./emailTokenRequest\";\n\nexport class EmailRequest extends EmailTokenRequest {\n newMasterPasswordHash: string;\n token: string;\n key: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class EmailTokenRequest extends SecretVerificationRequest {\n newEmail: string;\n masterPasswordHash: string;\n}\n","export class EmergencyAccessAcceptRequest {\n token: string;\n}\n","export class EmergencyAccessConfirmRequest {\n key: string;\n}\n","import { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\n\nexport class EmergencyAccessInviteRequest {\n email: string;\n type: EmergencyAccessType;\n waitTimeDays: number;\n}\n","export class EmergencyAccessPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\n\nexport class EmergencyAccessUpdateRequest {\n type: EmergencyAccessType;\n waitTimeDays: number;\n keyEncrypted?: string;\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventRequest {\n type: EventType;\n cipherId: string;\n date: string;\n}\n","import { Folder } from \"../domain/folder\";\n\nexport class FolderRequest {\n name: string;\n\n constructor(folder: Folder) {\n this.name = folder.name ? folder.name.encryptedString : null;\n }\n}\n","import { Folder } from \"../domain/folder\";\n\nimport { FolderRequest } from \"./folderRequest\";\n\nexport class FolderWithIdRequest extends FolderRequest {\n id: string;\n\n constructor(folder: Folder) {\n super(folder);\n this.id = folder.id;\n }\n}\n","import { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class GroupRequest {\n name: string;\n accessAll: boolean;\n externalId: string;\n collections: SelectionReadOnlyRequest[] = [];\n}\n","import { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class ApiTokenRequest extends TokenRequest {\n constructor(\n public clientId: string,\n public clientSecret: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken() {\n const obj = super.toIdentityToken(this.clientId);\n\n obj.scope = this.clientId.startsWith(\"organization\") ? \"api.organization\" : \"api\";\n obj.grant_type = \"client_credentials\";\n obj.client_secret = this.clientSecret;\n\n return obj;\n }\n}\n","import { ClientType } from \"../../../enums/clientType\";\nimport { Utils } from \"../../../misc/utils\";\nimport { CaptchaProtectedRequest } from \"../captchaProtectedRequest\";\nimport { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class PasswordTokenRequest extends TokenRequest implements CaptchaProtectedRequest {\n constructor(\n public email: string,\n public masterPasswordHash: string,\n public captchaResponse: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: ClientType) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"password\";\n obj.username = this.email;\n obj.password = this.masterPasswordHash;\n\n if (this.captchaResponse != null) {\n obj.captchaResponse = this.captchaResponse;\n }\n\n return obj;\n }\n\n alterIdentityTokenHeaders(headers: Headers) {\n headers.set(\"Auth-Email\", Utils.fromUtf8ToUrlB64(this.email));\n }\n}\n","import { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequest } from \"./tokenRequest\";\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport class SsoTokenRequest extends TokenRequest {\n constructor(\n public code: string,\n public codeVerifier: string,\n public redirectUri: string,\n protected twoFactor: TokenRequestTwoFactor,\n device?: DeviceRequest\n ) {\n super(twoFactor, device);\n }\n\n toIdentityToken(clientId: string) {\n const obj = super.toIdentityToken(clientId);\n\n obj.grant_type = \"authorization_code\";\n obj.code = this.code;\n obj.code_verifier = this.codeVerifier;\n obj.redirect_uri = this.redirectUri;\n\n return obj;\n }\n}\n","import { DeviceRequest } from \"../deviceRequest\";\n\nimport { TokenRequestTwoFactor } from \"./tokenRequestTwoFactor\";\n\nexport abstract class TokenRequest {\n protected device?: DeviceRequest;\n\n constructor(protected twoFactor: TokenRequestTwoFactor, device?: DeviceRequest) {\n this.device = device != null ? device : null;\n }\n\n // eslint-disable-next-line\n alterIdentityTokenHeaders(headers: Headers) {\n // Implemented in subclass if required\n }\n\n setTwoFactor(twoFactor: TokenRequestTwoFactor) {\n this.twoFactor = twoFactor;\n }\n\n protected toIdentityToken(clientId: string) {\n const obj: any = {\n scope: \"api offline_access\",\n client_id: clientId,\n };\n\n if (this.device) {\n obj.deviceType = this.device.type;\n obj.deviceIdentifier = this.device.identifier;\n obj.deviceName = this.device.name;\n // no push tokens for browser apps yet\n // obj.devicePushToken = this.device.pushToken;\n }\n\n if (this.twoFactor.token && this.twoFactor.provider != null) {\n obj.twoFactorToken = this.twoFactor.token;\n obj.twoFactorProvider = this.twoFactor.provider;\n obj.twoFactorRemember = this.twoFactor.remember ? \"1\" : \"0\";\n }\n\n return obj;\n }\n}\n","import { TwoFactorProviderType } from \"jslib-common/enums/twoFactorProviderType\";\n\nexport class TokenRequestTwoFactor {\n constructor(\n public provider: TwoFactorProviderType = null,\n public token: string = null,\n public remember: boolean = false\n ) {}\n}\n","import { CipherRequest } from \"./cipherRequest\";\nimport { FolderRequest } from \"./folderRequest\";\nimport { KvpRequest } from \"./kvpRequest\";\n\nexport class ImportCiphersRequest {\n ciphers: CipherRequest[] = [];\n folders: FolderRequest[] = [];\n folderRelationships: KvpRequest[] = [];\n}\n","import { CipherRequest } from \"./cipherRequest\";\nimport { CollectionRequest } from \"./collectionRequest\";\nimport { KvpRequest } from \"./kvpRequest\";\n\nexport class ImportOrganizationCiphersRequest {\n ciphers: CipherRequest[] = [];\n collections: CollectionRequest[] = [];\n collectionRelationships: KvpRequest[] = [];\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { PasswordRequest } from \"./passwordRequest\";\n\nexport class KdfRequest extends PasswordRequest {\n kdf: KdfType;\n kdfIterations: number;\n}\n","export class KeyConnectorUserKeyRequest {\n key: string;\n\n constructor(key: string) {\n this.key = key;\n }\n}\n","export class KeysRequest {\n publicKey: string;\n encryptedPrivateKey: string;\n\n constructor(publicKey: string, encryptedPrivateKey: string) {\n this.publicKey = publicKey;\n this.encryptedPrivateKey = encryptedPrivateKey;\n }\n}\n","export class KvpRequest {\n key: TK;\n value: TV;\n\n constructor(key: TK, value: TV) {\n this.key = key;\n this.value = value;\n }\n}\n","import { PlanSponsorshipType } from \"../../../enums/planSponsorshipType\";\n\nexport class OrganizationSponsorshipRedeemRequest {\n planSponsorshipType: PlanSponsorshipType;\n sponsoredOrganizationId: string;\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class OrganizationApiKeyRequest extends SecretVerificationRequest {\n type: OrganizationApiKeyType = OrganizationApiKeyType.Default;\n}\n","import { OrganizationConnectionType } from \"jslib-common/enums/organizationConnectionType\";\n\nimport { BillingSyncConfigRequest } from \"./billingSyncConfigRequest\";\n\n/**API request config types for OrganizationConnectionRequest */\nexport type OrganizationConnectionRequestConfigs = BillingSyncConfigRequest;\n\nexport class OrganizationConnectionRequest {\n constructor(\n public organizationId: string,\n public type: OrganizationConnectionType,\n public enabled: boolean,\n public config: OrganizationConnectionRequestConfigs\n ) {}\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationCreateRequest {\n name: string;\n businessName: string;\n billingEmail: string;\n planType: PlanType;\n key: string;\n keys: OrganizationKeysRequest;\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n additionalSeats: number;\n maxAutoscaleSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n collectionName: string;\n taxIdNumber: string;\n billingAddressLine1: string;\n billingAddressLine2: string;\n billingAddressCity: string;\n billingAddressState: string;\n billingAddressPostalCode: string;\n billingAddressCountry: string;\n}\n","import { KeysRequest } from \"./keysRequest\";\n\nexport class OrganizationKeysRequest extends KeysRequest {\n constructor(publicKey: string, encryptedPrivateKey: string) {\n super(publicKey, encryptedPrivateKey);\n }\n}\n","export class OrganizationSubscriptionUpdateRequest {\n constructor(public seatAdjustment: number, public maxAutoscaleSeats?: number) {}\n}\n","import { TaxInfoUpdateRequest } from \"./taxInfoUpdateRequest\";\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n taxId: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n}\n","import { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationUpdateRequest {\n name: string;\n identifier: string;\n businessName: string;\n billingEmail: string;\n keys: OrganizationKeysRequest;\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { OrganizationKeysRequest } from \"./organizationKeysRequest\";\n\nexport class OrganizationUpgradeRequest {\n businessName: string;\n planType: PlanType;\n additionalSeats: number;\n additionalStorageGb: number;\n premiumAccessAddon: boolean;\n billingAddressCountry: string;\n billingAddressPostalCode: string;\n keys: OrganizationKeysRequest;\n}\n","export class OrganizationUserAcceptRequest {\n token: string;\n // Used to auto-enroll in master password reset\n resetPasswordKey: string;\n}\n","type OrganizationUserBulkRequestEntry = {\n id: string;\n key: string;\n};\n\nexport class OrganizationUserBulkConfirmRequest {\n keys: OrganizationUserBulkRequestEntry[];\n\n constructor(keys: OrganizationUserBulkRequestEntry[]) {\n this.keys = keys;\n }\n}\n","export class OrganizationUserBulkRequest {\n ids: string[];\n\n constructor(ids: string[]) {\n this.ids = ids == null ? [] : ids;\n }\n}\n","export class OrganizationUserConfirmRequest {\n key: string;\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class OrganizationUserInviteRequest {\n emails: string[] = [];\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest {\n resetPasswordKey: string;\n}\n","export class OrganizationUserResetPasswordRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","export class OrganizationUserUpdateGroupsRequest {\n groupIds: string[] = [];\n}\n","import { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { SelectionReadOnlyRequest } from \"./selectionReadOnlyRequest\";\n\nexport class OrganizationUserUpdateRequest {\n type: OrganizationUserType;\n accessAll: boolean;\n collections: SelectionReadOnlyRequest[] = [];\n permissions: PermissionsApi;\n}\n","export class PasswordHintRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class PasswordRequest extends SecretVerificationRequest {\n newMasterPasswordHash: string;\n key: string;\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../request/organizationTaxInfoUpdateRequest\";\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n paymentMethodType: PaymentMethodType;\n paymentToken: string;\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nexport class PolicyRequest {\n type: PolicyType;\n enabled: boolean;\n data: any;\n}\n","export class PreloginRequest {\n email: string;\n\n constructor(email: string) {\n this.email = email;\n }\n}\n","import { OrganizationCreateRequest } from \"../organizationCreateRequest\";\n\nexport class ProviderOrganizationCreateRequest {\n constructor(\n public clientOwnerEmail: string,\n public organizationCreateRequest: OrganizationCreateRequest\n ) {}\n}\n","export class ReferenceEventRequest {\n id: string;\n layout: string;\n flow: string;\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { CaptchaProtectedRequest } from \"./captchaProtectedRequest\";\nimport { KeysRequest } from \"./keysRequest\";\nimport { ReferenceEventRequest } from \"./referenceEventRequest\";\n\nexport class RegisterRequest implements CaptchaProtectedRequest {\n masterPasswordHint: string;\n keys: KeysRequest;\n token: string;\n organizationUserId: string;\n\n constructor(\n public email: string,\n public name: string,\n public masterPasswordHash: string,\n masterPasswordHint: string,\n public key: string,\n public kdf: KdfType,\n public kdfIterations: number,\n public referenceData: ReferenceEventRequest,\n public captchaResponse: string\n ) {\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","export class SecretVerificationRequest {\n masterPasswordHash: string;\n otp: string;\n}\n","export class SelectionReadOnlyRequest {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(id: string, readOnly: boolean, hidePasswords: boolean) {\n this.id = id;\n this.readOnly = readOnly;\n this.hidePasswords = hidePasswords;\n }\n}\n","export class SendAccessRequest {\n password: string;\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\nimport { Send } from \"../domain/send\";\n\nexport class SendRequest {\n type: SendType;\n fileLength?: number;\n name: string;\n notes: string;\n key: string;\n maxAccessCount?: number;\n expirationDate: string;\n deletionDate: string;\n text: SendTextApi;\n file: SendFileApi;\n password: string;\n disabled: boolean;\n hideEmail: boolean;\n\n constructor(send: Send, fileLength?: number) {\n this.type = send.type;\n this.fileLength = fileLength;\n this.name = send.name ? send.name.encryptedString : null;\n this.notes = send.notes ? send.notes.encryptedString : null;\n this.maxAccessCount = send.maxAccessCount;\n this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n this.key = send.key != null ? send.key.encryptedString : null;\n this.password = send.password;\n this.disabled = send.disabled;\n this.hideEmail = send.hideEmail;\n\n switch (this.type) {\n case SendType.Text:\n this.text = new SendTextApi();\n this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n this.text.hidden = send.text.hidden;\n break;\n case SendType.File:\n this.file = new SendFileApi();\n this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n break;\n default:\n break;\n }\n }\n}\n","import { Send } from \"../domain/send\";\n\nimport { SendRequest } from \"./sendRequest\";\n\nexport class SendWithIdRequest extends SendRequest {\n id: string;\n\n constructor(send: Send) {\n super(send);\n this.id = send.id;\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { KeysRequest } from \"./keysRequest\";\n\nexport class SetPasswordRequest {\n masterPasswordHash: string;\n key: string;\n masterPasswordHint: string;\n keys: KeysRequest;\n kdf: KdfType;\n kdfIterations: number;\n orgIdentifier: string;\n\n constructor(\n masterPasswordHash: string,\n key: string,\n masterPasswordHint: string,\n kdf: KdfType,\n kdfIterations: number,\n orgIdentifier: string,\n keys: KeysRequest\n ) {\n this.masterPasswordHash = masterPasswordHash;\n this.key = key;\n this.masterPasswordHint = masterPasswordHint;\n this.kdf = kdf;\n this.kdfIterations = kdfIterations;\n this.orgIdentifier = orgIdentifier;\n this.keys = keys;\n }\n}\n","export class StorageRequest {\n storageGbAdjustment: number;\n}\n","export class TaxInfoUpdateRequest {\n country: string;\n postalCode: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorEmailRequest extends SecretVerificationRequest {\n email: string;\n deviceIdentifier: string;\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorProviderRequest extends SecretVerificationRequest {\n type: TwoFactorProviderType;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class TwoFactorRecoveryRequest extends SecretVerificationRequest {\n recoveryCode: string;\n email: string;\n}\n","export class UpdateDomainsRequest {\n equivalentDomains: string[][];\n excludedGlobalEquivalentDomains: number[];\n}\n","import { CipherWithIdRequest } from \"./cipherWithIdRequest\";\nimport { FolderWithIdRequest } from \"./folderWithIdRequest\";\nimport { SendWithIdRequest } from \"./sendWithIdRequest\";\n\nexport class UpdateKeyRequest {\n ciphers: CipherWithIdRequest[] = [];\n folders: FolderWithIdRequest[] = [];\n sends: SendWithIdRequest[] = [];\n masterPasswordHash: string;\n privateKey: string;\n key: string;\n}\n","export class UpdateProfileRequest {\n name: string;\n masterPasswordHint: string;\n culture = \"en-US\"; // deprecated\n\n constructor(name: string, masterPasswordHint: string) {\n this.name = name;\n this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n }\n}\n","import { OrganizationUserResetPasswordRequest } from \"./organizationUserResetPasswordRequest\";\n\nexport class UpdateTempPasswordRequest extends OrganizationUserResetPasswordRequest {\n masterPasswordHint: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorAuthenticatorRequest extends SecretVerificationRequest {\n token: string;\n key: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorDuoRequest extends SecretVerificationRequest {\n integrationKey: string;\n secretKey: string;\n host: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorEmailRequest extends SecretVerificationRequest {\n token: string;\n email: string;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends SecretVerificationRequest {\n id: number;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorWebAuthnRequest extends SecretVerificationRequest {\n deviceResponse: PublicKeyCredential;\n name: string;\n id: number;\n}\n","import { SecretVerificationRequest } from \"./secretVerificationRequest\";\n\nexport class UpdateTwoFactorYubioOtpRequest extends SecretVerificationRequest {\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n}\n","export class VerifyBankRequest {\n amount1: number;\n amount2: number;\n}\n","export class VerifyDeleteRecoverRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","export class VerifyEmailRequest {\n userId: string;\n token: string;\n\n constructor(userId: string, token: string) {\n this.userId = userId;\n this.token = token;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class ApiKeyResponse extends BaseResponse {\n apiKey: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.apiKey = this.getResponseProperty(\"ApiKey\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class AttachmentResponse extends BaseResponse {\n id: string;\n url: string;\n fileName: string;\n key: string;\n size: string;\n sizeName: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n this.fileName = this.getResponseProperty(\"FileName\");\n this.key = this.getResponseProperty(\"Key\");\n this.size = this.getResponseProperty(\"Size\");\n this.sizeName = this.getResponseProperty(\"SizeName\");\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\n\nexport class AttachmentUploadDataResponse extends BaseResponse {\n attachmentId: string;\n fileUploadType: FileUploadType;\n cipherResponse: CipherResponse;\n cipherMiniResponse: CipherResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.attachmentId = this.getResponseProperty(\"AttachmentId\");\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const cipherResponse = this.getResponseProperty(\"CipherResponse\");\n const cipherMiniResponse = this.getResponseProperty(\"CipherMiniResponse\");\n this.cipherResponse = cipherResponse == null ? null : new CipherResponse(cipherResponse);\n this.cipherMiniResponse =\n cipherMiniResponse == null ? null : new CipherResponse(cipherMiniResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","export abstract class BaseResponse {\n private response: any;\n\n constructor(response: any) {\n this.response = response;\n }\n\n protected getResponseProperty(\n propertyName: string,\n response: any = null,\n exactName = false\n ): any {\n if (propertyName == null || propertyName === \"\") {\n throw new Error(\"propertyName must not be null/empty.\");\n }\n if (response == null && this.response != null) {\n response = this.response;\n }\n if (response == null) {\n return null;\n }\n if (!exactName && response[propertyName] === undefined) {\n let otherCasePropertyName: string = null;\n if (propertyName.charAt(0) === propertyName.charAt(0).toUpperCase()) {\n otherCasePropertyName = propertyName.charAt(0).toLowerCase();\n } else {\n otherCasePropertyName = propertyName.charAt(0).toUpperCase();\n }\n if (propertyName.length > 1) {\n otherCasePropertyName += propertyName.slice(1);\n }\n\n propertyName = otherCasePropertyName;\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toLowerCase();\n }\n if (response[propertyName] === undefined) {\n propertyName = propertyName.toUpperCase();\n }\n }\n return response[propertyName];\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { BillingInvoiceResponse, BillingTransactionResponse } from \"./billingResponse\";\n\nexport class BillingHistoryResponse extends BaseResponse {\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const transactions = this.getResponseProperty(\"Transactions\");\n const invoices = this.getResponseProperty(\"Invoices\");\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n\n get hasNoHistory() {\n return this.invoices.length == 0 && this.transactions.length == 0;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { BillingSourceResponse } from \"./billingResponse\";\n\nexport class BillingPaymentResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty(\"Balance\");\n const paymentSource = this.getResponseProperty(\"PaymentSource\");\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n }\n}\n","import { PaymentMethodType } from \"../../enums/paymentMethodType\";\nimport { TransactionType } from \"../../enums/transactionType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class BillingResponse extends BaseResponse {\n balance: number;\n paymentSource: BillingSourceResponse;\n invoices: BillingInvoiceResponse[] = [];\n transactions: BillingTransactionResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.balance = this.getResponseProperty(\"Balance\");\n const paymentSource = this.getResponseProperty(\"PaymentSource\");\n const transactions = this.getResponseProperty(\"Transactions\");\n const invoices = this.getResponseProperty(\"Invoices\");\n this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n if (transactions != null) {\n this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n }\n if (invoices != null) {\n this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n }\n }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n type: PaymentMethodType;\n cardBrand: string;\n description: string;\n needsVerification: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.cardBrand = this.getResponseProperty(\"CardBrand\");\n this.description = this.getResponseProperty(\"Description\");\n this.needsVerification = this.getResponseProperty(\"NeedsVerification\");\n }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n url: string;\n pdfUrl: string;\n number: string;\n paid: boolean;\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.url = this.getResponseProperty(\"Url\");\n this.pdfUrl = this.getResponseProperty(\"PdfUrl\");\n this.number = this.getResponseProperty(\"Number\");\n this.paid = this.getResponseProperty(\"Paid\");\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n createdDate: string;\n amount: number;\n refunded: boolean;\n partiallyRefunded: boolean;\n refundedAmount: number;\n type: TransactionType;\n paymentMethodType: PaymentMethodType;\n details: string;\n\n constructor(response: any) {\n super(response);\n this.createdDate = this.getResponseProperty(\"CreatedDate\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.refunded = this.getResponseProperty(\"Refunded\");\n this.partiallyRefunded = this.getResponseProperty(\"PartiallyRefunded\");\n this.refundedAmount = this.getResponseProperty(\"RefundedAmount\");\n this.type = this.getResponseProperty(\"Type\");\n this.paymentMethodType = this.getResponseProperty(\"PaymentMethodType\");\n this.details = this.getResponseProperty(\"Details\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class BreachAccountResponse extends BaseResponse {\n addedDate: string;\n breachDate: string;\n dataClasses: string[];\n description: string;\n domain: string;\n isActive: boolean;\n isVerified: boolean;\n logoPath: string;\n modifiedDate: string;\n name: string;\n pwnCount: number;\n title: string;\n\n constructor(response: any) {\n super(response);\n this.addedDate = this.getResponseProperty(\"AddedDate\");\n this.breachDate = this.getResponseProperty(\"BreachDate\");\n this.dataClasses = this.getResponseProperty(\"DataClasses\");\n this.description = this.getResponseProperty(\"Description\");\n this.domain = this.getResponseProperty(\"Domain\");\n this.isActive = this.getResponseProperty(\"IsActive\");\n this.isVerified = this.getResponseProperty(\"IsVerified\");\n this.logoPath = this.getResponseProperty(\"LogoPath\");\n this.modifiedDate = this.getResponseProperty(\"ModifiedDate\");\n this.name = this.getResponseProperty(\"Name\");\n this.pwnCount = this.getResponseProperty(\"PwnCount\");\n this.title = this.getResponseProperty(\"Title\");\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CardApi } from \"../api/cardApi\";\nimport { FieldApi } from \"../api/fieldApi\";\nimport { IdentityApi } from \"../api/identityApi\";\nimport { LoginApi } from \"../api/loginApi\";\nimport { SecureNoteApi } from \"../api/secureNoteApi\";\n\nimport { AttachmentResponse } from \"./attachmentResponse\";\nimport { BaseResponse } from \"./baseResponse\";\nimport { PasswordHistoryResponse } from \"./passwordHistoryResponse\";\n\nexport class CipherResponse extends BaseResponse {\n id: string;\n organizationId: string;\n folderId: string;\n type: number;\n name: string;\n notes: string;\n fields: FieldApi[];\n login: LoginApi;\n card: CardApi;\n identity: IdentityApi;\n secureNote: SecureNoteApi;\n favorite: boolean;\n edit: boolean;\n viewPassword: boolean;\n organizationUseTotp: boolean;\n revisionDate: string;\n attachments: AttachmentResponse[];\n passwordHistory: PasswordHistoryResponse[];\n collectionIds: string[];\n deletedDate: string;\n reprompt: CipherRepromptType;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.folderId = this.getResponseProperty(\"FolderId\") || null;\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.favorite = this.getResponseProperty(\"Favorite\") || false;\n this.edit = !!this.getResponseProperty(\"Edit\");\n if (this.getResponseProperty(\"ViewPassword\") == null) {\n this.viewPassword = true;\n } else {\n this.viewPassword = this.getResponseProperty(\"ViewPassword\");\n }\n this.organizationUseTotp = this.getResponseProperty(\"OrganizationUseTotp\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.deletedDate = this.getResponseProperty(\"DeletedDate\");\n\n const login = this.getResponseProperty(\"Login\");\n if (login != null) {\n this.login = new LoginApi(login);\n }\n\n const card = this.getResponseProperty(\"Card\");\n if (card != null) {\n this.card = new CardApi(card);\n }\n\n const identity = this.getResponseProperty(\"Identity\");\n if (identity != null) {\n this.identity = new IdentityApi(identity);\n }\n\n const secureNote = this.getResponseProperty(\"SecureNote\");\n if (secureNote != null) {\n this.secureNote = new SecureNoteApi(secureNote);\n }\n\n const fields = this.getResponseProperty(\"Fields\");\n if (fields != null) {\n this.fields = fields.map((f: any) => new FieldApi(f));\n }\n\n const attachments = this.getResponseProperty(\"Attachments\");\n if (attachments != null) {\n this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n }\n\n const passwordHistory = this.getResponseProperty(\"PasswordHistory\");\n if (passwordHistory != null) {\n this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n }\n\n this.reprompt = this.getResponseProperty(\"Reprompt\") || CipherRepromptType.None;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class CollectionResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n readOnly: boolean;\n\n constructor(response: any) {\n super(response);\n this.readOnly = this.getResponseProperty(\"ReadOnly\") || false;\n }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n groups: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const groups = this.getResponseProperty(\"Groups\");\n if (groups != null) {\n this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class DeviceVerificationResponse extends BaseResponse {\n isDeviceVerificationSectionEnabled: boolean;\n unknownDeviceVerificationEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.isDeviceVerificationSectionEnabled = this.getResponseProperty(\n \"IsDeviceVerificationSectionEnabled\"\n );\n this.unknownDeviceVerificationEnabled = this.getResponseProperty(\n \"UnknownDeviceVerificationEnabled\"\n );\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { GlobalDomainResponse } from \"./globalDomainResponse\";\n\nexport class DomainsResponse extends BaseResponse {\n equivalentDomains: string[][];\n globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.equivalentDomains = this.getResponseProperty(\"EquivalentDomains\");\n const globalEquivalentDomains = this.getResponseProperty(\"GlobalEquivalentDomains\");\n if (globalEquivalentDomains != null) {\n this.globalEquivalentDomains = globalEquivalentDomains.map(\n (d: any) => new GlobalDomainResponse(d)\n );\n } else {\n this.globalEquivalentDomains = [];\n }\n }\n}\n","import { EmergencyAccessStatusType } from \"../../enums/emergencyAccessStatusType\";\nimport { EmergencyAccessType } from \"../../enums/emergencyAccessType\";\nimport { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\n\nexport class EmergencyAccessGranteeDetailsResponse extends BaseResponse {\n id: string;\n granteeId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.granteeId = this.getResponseProperty(\"GranteeId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessGrantorDetailsResponse extends BaseResponse {\n id: string;\n grantorId: string;\n name: string;\n email: string;\n type: EmergencyAccessType;\n status: EmergencyAccessStatusType;\n waitTimeDays: number;\n creationDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.grantorId = this.getResponseProperty(\"GrantorId\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.waitTimeDays = this.getResponseProperty(\"WaitTimeDays\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n keyEncrypted: string;\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n keyEncrypted: string;\n ciphers: CipherResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n this.keyEncrypted = this.getResponseProperty(\"KeyEncrypted\");\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ErrorResponse extends BaseResponse {\n message: string;\n validationErrors: { [key: string]: string[] };\n statusCode: number;\n captchaRequired: boolean;\n captchaSiteKey: string;\n\n constructor(response: any, status: number, identityResponse?: boolean) {\n super(response);\n let errorModel = null;\n if (response != null) {\n const responseErrorModel = this.getResponseProperty(\"ErrorModel\");\n if (responseErrorModel && identityResponse) {\n errorModel = responseErrorModel;\n } else {\n errorModel = response;\n }\n }\n\n if (errorModel) {\n this.message = this.getResponseProperty(\"Message\", errorModel);\n this.validationErrors = this.getResponseProperty(\"ValidationErrors\", errorModel);\n this.captchaSiteKey = this.validationErrors?.HCaptcha_SiteKey?.[0];\n this.captchaRequired = !Utils.isNullOrWhitespace(this.captchaSiteKey);\n } else {\n if (status === 429) {\n this.message = \"Rate limit exceeded. Try again later.\";\n }\n }\n this.statusCode = status;\n }\n\n getSingleMessage(): string {\n if (this.validationErrors == null) {\n return this.message;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n if (this.validationErrors[key].length) {\n return this.validationErrors[key][0];\n }\n }\n return this.message;\n }\n\n getAllMessages(): string[] {\n const messages: string[] = [];\n if (this.validationErrors == null) {\n return messages;\n }\n for (const key in this.validationErrors) {\n // eslint-disable-next-line\n if (!this.validationErrors.hasOwnProperty(key)) {\n continue;\n }\n this.validationErrors[key].forEach((item: string) => {\n let prefix = \"\";\n if (key.indexOf(\"[\") > -1 && key.indexOf(\"]\") > -1) {\n const lastSep = key.lastIndexOf(\".\");\n prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + \": \";\n }\n messages.push(prefix + item);\n });\n }\n return messages;\n }\n}\n","import { DeviceType } from \"../../enums/deviceType\";\nimport { EventType } from \"../../enums/eventType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class EventResponse extends BaseResponse {\n type: EventType;\n userId: string;\n organizationId: string;\n providerId: string;\n cipherId: string;\n collectionId: string;\n groupId: string;\n policyId: string;\n organizationUserId: string;\n providerUserId: string;\n providerOrganizationId: string;\n actingUserId: string;\n date: string;\n deviceType: DeviceType;\n ipAddress: string;\n installationId: string;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.cipherId = this.getResponseProperty(\"CipherId\");\n this.collectionId = this.getResponseProperty(\"CollectionId\");\n this.groupId = this.getResponseProperty(\"GroupId\");\n this.policyId = this.getResponseProperty(\"PolicyId\");\n this.organizationUserId = this.getResponseProperty(\"OrganizationUserId\");\n this.providerUserId = this.getResponseProperty(\"ProviderUserId\");\n this.providerOrganizationId = this.getResponseProperty(\"ProviderOrganizationId\");\n this.actingUserId = this.getResponseProperty(\"ActingUserId\");\n this.date = this.getResponseProperty(\"Date\");\n this.deviceType = this.getResponseProperty(\"DeviceType\");\n this.ipAddress = this.getResponseProperty(\"IpAddress\");\n this.installationId = this.getResponseProperty(\"InstallationId\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class FolderResponse extends BaseResponse {\n id: string;\n name: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class GlobalDomainResponse extends BaseResponse {\n type: number;\n domains: string[];\n excluded: boolean;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.domains = this.getResponseProperty(\"Domains\");\n this.excluded = this.getResponseProperty(\"Excluded\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class GroupResponse extends BaseResponse {\n id: string;\n organizationId: string;\n name: string;\n accessAll: boolean;\n externalId: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.name = this.getResponseProperty(\"Name\");\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.externalId = this.getResponseProperty(\"ExternalId\");\n }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityCaptchaResponse extends BaseResponse {\n siteKey: string;\n\n constructor(response: any) {\n super(response);\n this.siteKey = this.getResponseProperty(\"HCaptcha_SiteKey\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityTokenResponse extends BaseResponse {\n accessToken: string;\n expiresIn: number;\n refreshToken: string;\n tokenType: string;\n\n resetMasterPassword: boolean;\n privateKey: string;\n key: string;\n twoFactorToken: string;\n kdf: KdfType;\n kdfIterations: number;\n forcePasswordReset: boolean;\n apiUseKeyConnector: boolean;\n keyConnectorUrl: string;\n\n constructor(response: any) {\n super(response);\n this.accessToken = response.access_token;\n this.expiresIn = response.expires_in;\n this.refreshToken = response.refresh_token;\n this.tokenType = response.token_type;\n\n this.resetMasterPassword = this.getResponseProperty(\"ResetMasterPassword\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.key = this.getResponseProperty(\"Key\");\n this.twoFactorToken = this.getResponseProperty(\"TwoFactorToken\");\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\");\n this.apiUseKeyConnector = this.getResponseProperty(\"ApiUseKeyConnector\");\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n twoFactorProviders: TwoFactorProviderType[];\n twoFactorProviders2 = new Map();\n captchaToken: string;\n\n constructor(response: any) {\n super(response);\n this.captchaToken = this.getResponseProperty(\"CaptchaBypassToken\");\n this.twoFactorProviders = this.getResponseProperty(\"TwoFactorProviders\");\n const twoFactorProviders2 = this.getResponseProperty(\"TwoFactorProviders2\");\n if (twoFactorProviders2 != null) {\n for (const prop in twoFactorProviders2) {\n // eslint-disable-next-line\n if (twoFactorProviders2.hasOwnProperty(prop)) {\n this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n }\n }\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class KeyConnectorUserKeyResponse extends BaseResponse {\n key: string;\n\n constructor(response: any) {\n super(response);\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class KeysResponse extends BaseResponse {\n privateKey: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class ListResponse extends BaseResponse {\n data: T[];\n continuationToken: string;\n\n constructor(response: any, t: new (dataResponse: any) => T) {\n super(response);\n const data = this.getResponseProperty(\"Data\");\n this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n this.continuationToken = this.getResponseProperty(\"ContinuationToken\");\n }\n}\n","import { NotificationType } from \"../../enums/notificationType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class NotificationResponse extends BaseResponse {\n contextId: string;\n type: NotificationType;\n payload: any;\n\n constructor(response: any) {\n super(response);\n this.contextId = this.getResponseProperty(\"ContextId\");\n this.type = this.getResponseProperty(\"Type\");\n\n const payload = this.getResponseProperty(\"Payload\");\n switch (this.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncCipherUpdate:\n case NotificationType.SyncLoginDelete:\n this.payload = new SyncCipherNotification(payload);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderDelete:\n case NotificationType.SyncFolderUpdate:\n this.payload = new SyncFolderNotification(payload);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncOrgKeys:\n case NotificationType.SyncSettings:\n case NotificationType.LogOut:\n this.payload = new UserNotification(payload);\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n case NotificationType.SyncSendDelete:\n this.payload = new SyncSendNotification(payload);\n break;\n default:\n break;\n }\n }\n}\n\nexport class SyncCipherNotification extends BaseResponse {\n id: string;\n userId: string;\n organizationId: string;\n collectionIds: string[];\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.collectionIds = this.getResponseProperty(\"CollectionIds\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class SyncFolderNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n\nexport class UserNotification extends BaseResponse {\n userId: string;\n date: Date;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.date = new Date(this.getResponseProperty(\"Date\"));\n }\n}\n\nexport class SyncSendNotification extends BaseResponse {\n id: string;\n userId: string;\n revisionDate: Date;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.revisionDate = new Date(this.getResponseProperty(\"RevisionDate\"));\n }\n}\n","import { SsoConfigApi } from \"../../api/ssoConfigApi\";\nimport { BaseResponse } from \"../baseResponse\";\n\nexport class OrganizationSsoResponse extends BaseResponse {\n enabled: boolean;\n data: SsoConfigApi;\n urls: SsoUrls;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.data =\n this.getResponseProperty(\"Data\") != null\n ? new SsoConfigApi(this.getResponseProperty(\"Data\"))\n : null;\n this.urls = new SsoUrls(this.getResponseProperty(\"Urls\"));\n }\n}\n\nclass SsoUrls extends BaseResponse {\n callbackPath: string;\n signedOutCallbackPath: string;\n spEntityId: string;\n spMetadataUrl: string;\n spAcsUrl: string;\n\n constructor(response: any) {\n super(response);\n this.callbackPath = this.getResponseProperty(\"CallbackPath\");\n this.signedOutCallbackPath = this.getResponseProperty(\"SignedOutCallbackPath\");\n this.spEntityId = this.getResponseProperty(\"SpEntityId\");\n this.spMetadataUrl = this.getResponseProperty(\"SpMetadataUrl\");\n this.spAcsUrl = this.getResponseProperty(\"SpAcsUrl\");\n }\n}\n","import { OrganizationApiKeyType } from \"../../enums/organizationApiKeyType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationApiKeyInformationResponse extends BaseResponse {\n keyType: OrganizationApiKeyType;\n\n constructor(response: any) {\n super(response);\n this.keyType = this.getResponseProperty(\"KeyType\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationAutoEnrollStatusResponse extends BaseResponse {\n id: string;\n resetPasswordEnabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.resetPasswordEnabled = this.getResponseProperty(\"ResetPasswordEnabled\");\n }\n}\n","import { OrganizationConnectionType } from \"jslib-common/enums/organizationConnectionType\";\n\nimport { BillingSyncConfigApi } from \"../api/billingSyncConfigApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\n/**API response config types for OrganizationConnectionResponse */\nexport type OrganizationConnectionConfigApis = BillingSyncConfigApi;\n\nexport class OrganizationConnectionResponse<\n TConfig extends OrganizationConnectionConfigApis\n> extends BaseResponse {\n id: string;\n type: OrganizationConnectionType;\n organizationId: string;\n enabled: boolean;\n config: TConfig;\n\n constructor(response: any, configType: { new (response: any): TConfig }) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n const rawConfig = this.getResponseProperty(\"Config\");\n this.config = rawConfig == null ? null : new configType(rawConfig);\n }\n}\n","import { KeysResponse } from \"./keysResponse\";\n\nexport class OrganizationKeysResponse extends KeysResponse {\n constructor(response: any) {\n super(response);\n }\n}\n","import { PlanType } from \"../../enums/planType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { PlanResponse } from \"./planResponse\";\n\nexport class OrganizationResponse extends BaseResponse {\n id: string;\n identifier: string;\n name: string;\n businessName: string;\n businessAddress1: string;\n businessAddress2: string;\n businessAddress3: string;\n businessCountry: string;\n businessTaxNumber: string;\n billingEmail: string;\n plan: PlanResponse;\n planType: PlanType;\n seats: number;\n maxAutoscaleSeats: number;\n maxCollections: number;\n maxStorageGb: number;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useResetPassword: boolean;\n hasPublicAndPrivateKeys: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.businessAddress1 = this.getResponseProperty(\"BusinessAddress1\");\n this.businessAddress2 = this.getResponseProperty(\"BusinessAddress2\");\n this.businessAddress3 = this.getResponseProperty(\"BusinessAddress3\");\n this.businessCountry = this.getResponseProperty(\"BusinessCountry\");\n this.businessTaxNumber = this.getResponseProperty(\"BusinessTaxNumber\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n const plan = this.getResponseProperty(\"Plan\");\n this.plan = plan == null ? null : new PlanResponse(plan);\n this.planType = this.getResponseProperty(\"PlanType\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxAutoscaleSeats = this.getResponseProperty(\"MaxAutoscaleSeats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationSponsorshipSyncStatusResponse extends BaseResponse {\n lastSyncDate?: Date;\n\n constructor(response: any) {\n super(response);\n const lastSyncDate = this.getResponseProperty(\"LastSyncDate\");\n if (lastSyncDate) {\n this.lastSyncDate = new Date(lastSyncDate);\n }\n }\n}\n","import { OrganizationResponse } from \"./organizationResponse\";\nimport {\n BillingSubscriptionResponse,\n BillingSubscriptionUpcomingInvoiceResponse,\n} from \"./subscriptionResponse\";\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n storageName: string;\n storageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n expiration: string;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n const subscription = this.getResponseProperty(\"Subscription\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n this.expiration = this.getResponseProperty(\"Expiration\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationUserBulkPublicKeyResponse extends BaseResponse {\n id: string;\n userId: string;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class OrganizationUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\nimport { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { SelectionReadOnlyResponse } from \"./selectionReadOnlyResponse\";\n\nexport class OrganizationUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: OrganizationUserType;\n status: OrganizationUserStatusType;\n accessAll: boolean;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n this.accessAll = this.getResponseProperty(\"AccessAll\");\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n name: string;\n email: string;\n twoFactorEnabled: boolean;\n usesKeyConnector: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n collections: SelectionReadOnlyResponse[] = [];\n\n constructor(response: any) {\n super(response);\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n }\n }\n}\n\nexport class OrganizationUserResetPasswordDetailsReponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n resetPasswordKey: string;\n encryptedPrivateKey: string;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n this.resetPasswordKey = this.getResponseProperty(\"ResetPasswordKey\");\n this.encryptedPrivateKey = this.getResponseProperty(\"EncryptedPrivateKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class PasswordHistoryResponse extends BaseResponse {\n password: string;\n lastUsedDate: string;\n\n constructor(response: any) {\n super(response);\n this.password = this.getResponseProperty(\"Password\");\n this.lastUsedDate = this.getResponseProperty(\"LastUsedDate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { ProfileResponse } from \"./profileResponse\";\n\nexport class PaymentResponse extends BaseResponse {\n userProfile: ProfileResponse;\n paymentIntentClientSecret: string;\n success: boolean;\n\n constructor(response: any) {\n super(response);\n const userProfile = this.getResponseProperty(\"UserProfile\");\n if (userProfile != null) {\n this.userProfile = new ProfileResponse(userProfile);\n }\n this.paymentIntentClientSecret = this.getResponseProperty(\"PaymentIntentClientSecret\");\n this.success = this.getResponseProperty(\"Success\");\n }\n}\n","import { PlanType } from \"../../enums/planType\";\nimport { ProductType } from \"../../enums/productType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PlanResponse extends BaseResponse {\n type: PlanType;\n product: ProductType;\n name: string;\n isAnnual: boolean;\n nameLocalizationKey: string;\n descriptionLocalizationKey: string;\n canBeUsedByBusiness: boolean;\n baseSeats: number;\n baseStorageGb: number;\n maxCollections: number;\n maxUsers: number;\n\n hasAdditionalSeatsOption: boolean;\n maxAdditionalSeats: number;\n hasAdditionalStorageOption: boolean;\n maxAdditionalStorage: number;\n hasPremiumAccessOption: boolean;\n trialPeriodDays: number;\n\n hasSelfHost: boolean;\n hasPolicies: boolean;\n hasGroups: boolean;\n hasDirectory: boolean;\n hasEvents: boolean;\n hasTotp: boolean;\n has2fa: boolean;\n hasApi: boolean;\n hasSso: boolean;\n hasResetPassword: boolean;\n usersGetPremium: boolean;\n\n upgradeSortOrder: number;\n displaySortOrder: number;\n legacyYear: number;\n disabled: boolean;\n\n stripePlanId: string;\n stripeSeatPlanId: string;\n stripeStoragePlanId: string;\n stripePremiumAccessPlanId: string;\n basePrice: number;\n seatPrice: number;\n additionalStoragePricePerGb: number;\n premiumAccessOptionPrice: number;\n\n constructor(response: any) {\n super(response);\n this.type = this.getResponseProperty(\"Type\");\n this.product = this.getResponseProperty(\"Product\");\n this.name = this.getResponseProperty(\"Name\");\n this.isAnnual = this.getResponseProperty(\"IsAnnual\");\n this.nameLocalizationKey = this.getResponseProperty(\"NameLocalizationKey\");\n this.descriptionLocalizationKey = this.getResponseProperty(\"DescriptionLocalizationKey\");\n this.canBeUsedByBusiness = this.getResponseProperty(\"CanBeUsedByBusiness\");\n this.baseSeats = this.getResponseProperty(\"BaseSeats\");\n this.baseStorageGb = this.getResponseProperty(\"BaseStorageGb\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxUsers = this.getResponseProperty(\"MaxUsers\");\n this.hasAdditionalSeatsOption = this.getResponseProperty(\"HasAdditionalSeatsOption\");\n this.maxAdditionalSeats = this.getResponseProperty(\"MaxAdditionalSeats\");\n this.hasAdditionalStorageOption = this.getResponseProperty(\"HasAdditionalStorageOption\");\n this.maxAdditionalStorage = this.getResponseProperty(\"MaxAdditionalStorage\");\n this.hasPremiumAccessOption = this.getResponseProperty(\"HasPremiumAccessOption\");\n this.trialPeriodDays = this.getResponseProperty(\"TrialPeriodDays\");\n this.hasSelfHost = this.getResponseProperty(\"HasSelfHost\");\n this.hasPolicies = this.getResponseProperty(\"HasPolicies\");\n this.hasGroups = this.getResponseProperty(\"HasGroups\");\n this.hasDirectory = this.getResponseProperty(\"HasDirectory\");\n this.hasEvents = this.getResponseProperty(\"HasEvents\");\n this.hasTotp = this.getResponseProperty(\"HasTotp\");\n this.has2fa = this.getResponseProperty(\"Has2fa\");\n this.hasApi = this.getResponseProperty(\"HasApi\");\n this.hasSso = this.getResponseProperty(\"HasSso\");\n this.hasResetPassword = this.getResponseProperty(\"HasResetPassword\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.upgradeSortOrder = this.getResponseProperty(\"UpgradeSortOrder\");\n this.displaySortOrder = this.getResponseProperty(\"SortOrder\");\n this.legacyYear = this.getResponseProperty(\"LegacyYear\");\n this.disabled = this.getResponseProperty(\"Disabled\");\n this.stripePlanId = this.getResponseProperty(\"StripePlanId\");\n this.stripeSeatPlanId = this.getResponseProperty(\"StripeSeatPlanId\");\n this.stripeStoragePlanId = this.getResponseProperty(\"StripeStoragePlanId\");\n this.stripePremiumAccessPlanId = this.getResponseProperty(\"StripePremiumAccessPlanId\");\n this.basePrice = this.getResponseProperty(\"BasePrice\");\n this.seatPrice = this.getResponseProperty(\"SeatPrice\");\n this.additionalStoragePricePerGb = this.getResponseProperty(\"AdditionalStoragePricePerGb\");\n this.premiumAccessOptionPrice = this.getResponseProperty(\"PremiumAccessOptionPrice\");\n }\n}\n","import { PolicyType } from \"../../enums/policyType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PolicyResponse extends BaseResponse {\n id: string;\n organizationId: string;\n type: PolicyType;\n data: any;\n enabled: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.type = this.getResponseProperty(\"Type\");\n this.data = this.getResponseProperty(\"Data\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n }\n}\n","import { KdfType } from \"../../enums/kdfType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class PreloginResponse extends BaseResponse {\n kdf: KdfType;\n kdfIterations: number;\n\n constructor(response: any) {\n super(response);\n this.kdf = this.getResponseProperty(\"Kdf\");\n this.kdfIterations = this.getResponseProperty(\"KdfIterations\");\n }\n}\n","import { OrganizationUserStatusType } from \"../../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../../enums/organizationUserType\";\nimport { ProductType } from \"../../enums/productType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n id: string;\n name: string;\n usePolicies: boolean;\n useGroups: boolean;\n useDirectory: boolean;\n useEvents: boolean;\n useTotp: boolean;\n use2fa: boolean;\n useApi: boolean;\n useSso: boolean;\n useKeyConnector: boolean;\n useResetPassword: boolean;\n selfHost: boolean;\n usersGetPremium: boolean;\n seats: number;\n maxCollections: number;\n maxStorageGb?: number;\n key: string;\n hasPublicAndPrivateKeys: boolean;\n status: OrganizationUserStatusType;\n type: OrganizationUserType;\n enabled: boolean;\n ssoBound: boolean;\n identifier: string;\n permissions: PermissionsApi;\n resetPasswordEnrolled: boolean;\n userId: string;\n providerId: string;\n providerName: string;\n familySponsorshipFriendlyName: string;\n familySponsorshipAvailable: boolean;\n planProductType: ProductType;\n keyConnectorEnabled: boolean;\n keyConnectorUrl: string;\n familySponsorshipLastSyncDate?: Date;\n familySponsorshipValidUntil?: Date;\n familySponsorshipToDelete?: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.usePolicies = this.getResponseProperty(\"UsePolicies\");\n this.useGroups = this.getResponseProperty(\"UseGroups\");\n this.useDirectory = this.getResponseProperty(\"UseDirectory\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n this.useTotp = this.getResponseProperty(\"UseTotp\");\n this.use2fa = this.getResponseProperty(\"Use2fa\");\n this.useApi = this.getResponseProperty(\"UseApi\");\n this.useSso = this.getResponseProperty(\"UseSso\");\n this.useKeyConnector = this.getResponseProperty(\"UseKeyConnector\") ?? false;\n this.useResetPassword = this.getResponseProperty(\"UseResetPassword\");\n this.selfHost = this.getResponseProperty(\"SelfHost\");\n this.usersGetPremium = this.getResponseProperty(\"UsersGetPremium\");\n this.seats = this.getResponseProperty(\"Seats\");\n this.maxCollections = this.getResponseProperty(\"MaxCollections\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.key = this.getResponseProperty(\"Key\");\n this.hasPublicAndPrivateKeys = this.getResponseProperty(\"HasPublicAndPrivateKeys\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.ssoBound = this.getResponseProperty(\"SsoBound\");\n this.identifier = this.getResponseProperty(\"Identifier\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.resetPasswordEnrolled = this.getResponseProperty(\"ResetPasswordEnrolled\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.providerName = this.getResponseProperty(\"ProviderName\");\n this.familySponsorshipFriendlyName = this.getResponseProperty(\"FamilySponsorshipFriendlyName\");\n this.familySponsorshipAvailable = this.getResponseProperty(\"FamilySponsorshipAvailable\");\n this.planProductType = this.getResponseProperty(\"PlanProductType\");\n this.keyConnectorEnabled = this.getResponseProperty(\"KeyConnectorEnabled\") ?? false;\n this.keyConnectorUrl = this.getResponseProperty(\"KeyConnectorUrl\");\n const familySponsorshipLastSyncDateString = this.getResponseProperty(\n \"FamilySponsorshipLastSyncDate\"\n );\n if (familySponsorshipLastSyncDateString) {\n this.familySponsorshipLastSyncDate = new Date(familySponsorshipLastSyncDateString);\n }\n const familySponsorshipValidUntilString = this.getResponseProperty(\n \"FamilySponsorshipValidUntil\"\n );\n if (familySponsorshipValidUntilString) {\n this.familySponsorshipValidUntil = new Date(familySponsorshipValidUntilString);\n }\n this.familySponsorshipToDelete = this.getResponseProperty(\"FamilySponsorshipToDelete\");\n }\n}\n","import { ProfileOrganizationResponse } from \"./profileOrganizationResponse\";\n\nexport class ProfileProviderOrganizationResponse extends ProfileOrganizationResponse {\n constructor(response: any) {\n super(response);\n this.keyConnectorEnabled = false;\n }\n}\n","import { ProviderUserStatusType } from \"../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../enums/providerUserType\";\nimport { PermissionsApi } from \"../api/permissionsApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class ProfileProviderResponse extends BaseResponse {\n id: string;\n name: string;\n key: string;\n status: ProviderUserStatusType;\n type: ProviderUserType;\n enabled: boolean;\n permissions: PermissionsApi;\n userId: string;\n useEvents: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.key = this.getResponseProperty(\"Key\");\n this.status = this.getResponseProperty(\"Status\");\n this.type = this.getResponseProperty(\"Type\");\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"permissions\"));\n this.userId = this.getResponseProperty(\"UserId\");\n this.useEvents = this.getResponseProperty(\"UseEvents\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { ProfileOrganizationResponse } from \"./profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"./profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"./profileProviderResponse\";\n\nexport class ProfileResponse extends BaseResponse {\n id: string;\n name: string;\n email: string;\n emailVerified: boolean;\n masterPasswordHint: string;\n premiumPersonally: boolean;\n premiumFromOrganization: boolean;\n culture: string;\n twoFactorEnabled: boolean;\n key: string;\n privateKey: string;\n securityStamp: string;\n forcePasswordReset: boolean;\n usesKeyConnector: boolean;\n organizations: ProfileOrganizationResponse[] = [];\n providers: ProfileProviderResponse[] = [];\n providerOrganizations: ProfileProviderOrganizationResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n this.emailVerified = this.getResponseProperty(\"EmailVerified\");\n this.masterPasswordHint = this.getResponseProperty(\"MasterPasswordHint\");\n this.premiumPersonally = this.getResponseProperty(\"Premium\");\n this.premiumFromOrganization = this.getResponseProperty(\"PremiumFromOrganization\");\n this.culture = this.getResponseProperty(\"Culture\");\n this.twoFactorEnabled = this.getResponseProperty(\"TwoFactorEnabled\");\n this.key = this.getResponseProperty(\"Key\");\n this.privateKey = this.getResponseProperty(\"PrivateKey\");\n this.securityStamp = this.getResponseProperty(\"SecurityStamp\");\n this.forcePasswordReset = this.getResponseProperty(\"ForcePasswordReset\") ?? false;\n this.usesKeyConnector = this.getResponseProperty(\"UsesKeyConnector\") ?? false;\n\n const organizations = this.getResponseProperty(\"Organizations\");\n if (organizations != null) {\n this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n }\n const providers = this.getResponseProperty(\"Providers\");\n if (providers != null) {\n this.providers = providers.map((o: any) => new ProfileProviderResponse(o));\n }\n const providerOrganizations = this.getResponseProperty(\"ProviderOrganizations\");\n if (providerOrganizations != null) {\n this.providerOrganizations = providerOrganizations.map(\n (o: any) => new ProfileProviderOrganizationResponse(o)\n );\n }\n }\n}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderOrganizationResponse extends BaseResponse {\n id: string;\n providerId: string;\n organizationId: string;\n key: string;\n settings: string;\n creationDate: string;\n revisionDate: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.providerId = this.getResponseProperty(\"ProviderId\");\n this.organizationId = this.getResponseProperty(\"OrganizationId\");\n this.key = this.getResponseProperty(\"Key\");\n this.settings = this.getResponseProperty(\"Settings\");\n this.creationDate = this.getResponseProperty(\"CreationDate\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n }\n}\n\nexport class ProviderOrganizationOrganizationDetailsResponse extends ProviderOrganizationResponse {\n organizationName: string;\n\n constructor(response: any) {\n super(response);\n this.organizationName = this.getResponseProperty(\"OrganizationName\");\n }\n}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderResponse extends BaseResponse {\n id: string;\n name: string;\n businessName: string;\n billingEmail: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.name = this.getResponseProperty(\"Name\");\n this.businessName = this.getResponseProperty(\"BusinessName\");\n this.billingEmail = this.getResponseProperty(\"BillingEmail\");\n }\n}\n","import { OrganizationUserBulkPublicKeyResponse } from \"../organizationUserBulkPublicKeyResponse\";\n\nexport class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {}\n","import { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderUserBulkResponse extends BaseResponse {\n id: string;\n error: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.error = this.getResponseProperty(\"Error\");\n }\n}\n","import { ProviderUserStatusType } from \"../../../enums/providerUserStatusType\";\nimport { ProviderUserType } from \"../../../enums/providerUserType\";\nimport { PermissionsApi } from \"../../api/permissionsApi\";\nimport { BaseResponse } from \"../baseResponse\";\n\nexport class ProviderUserResponse extends BaseResponse {\n id: string;\n userId: string;\n type: ProviderUserType;\n status: ProviderUserStatusType;\n permissions: PermissionsApi;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.userId = this.getResponseProperty(\"UserId\");\n this.type = this.getResponseProperty(\"Type\");\n this.status = this.getResponseProperty(\"Status\");\n this.permissions = new PermissionsApi(this.getResponseProperty(\"Permissions\"));\n }\n}\n\nexport class ProviderUserUserDetailsResponse extends ProviderUserResponse {\n name: string;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n id: string;\n readOnly: boolean;\n hidePasswords: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.readOnly = this.getResponseProperty(\"ReadOnly\");\n this.hidePasswords = this.getResponseProperty(\"HidePasswords\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class SendAccessResponse extends BaseResponse {\n id: string;\n type: SendType;\n name: string;\n file: SendFileApi;\n text: SendTextApi;\n expirationDate: Date;\n creatorIdentifier: string;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.creatorIdentifier = this.getResponseProperty(\"CreatorIdentifier\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n id: string = null;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { FileUploadType } from \"../../enums/fileUploadType\";\n\nimport { BaseResponse } from \"./baseResponse\";\nimport { SendResponse } from \"./sendResponse\";\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n fileUploadType: FileUploadType;\n sendResponse: SendResponse;\n url: string = null;\n constructor(response: any) {\n super(response);\n this.fileUploadType = this.getResponseProperty(\"FileUploadType\");\n const sendResponse = this.getResponseProperty(\"SendResponse\");\n this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n this.url = this.getResponseProperty(\"Url\");\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendFileApi } from \"../api/sendFileApi\";\nimport { SendTextApi } from \"../api/sendTextApi\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class SendResponse extends BaseResponse {\n id: string;\n accessId: string;\n type: SendType;\n name: string;\n notes: string;\n file: SendFileApi;\n text: SendTextApi;\n key: string;\n maxAccessCount?: number;\n accessCount: number;\n revisionDate: string;\n expirationDate: string;\n deletionDate: string;\n password: string;\n disable: boolean;\n hideEmail: boolean;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.accessId = this.getResponseProperty(\"AccessId\");\n this.type = this.getResponseProperty(\"Type\");\n this.name = this.getResponseProperty(\"Name\");\n this.notes = this.getResponseProperty(\"Notes\");\n this.key = this.getResponseProperty(\"Key\");\n this.maxAccessCount = this.getResponseProperty(\"MaxAccessCount\");\n this.accessCount = this.getResponseProperty(\"AccessCount\");\n this.revisionDate = this.getResponseProperty(\"RevisionDate\");\n this.expirationDate = this.getResponseProperty(\"ExpirationDate\");\n this.deletionDate = this.getResponseProperty(\"DeletionDate\");\n this.password = this.getResponseProperty(\"Password\");\n this.disable = this.getResponseProperty(\"Disabled\") || false;\n this.hideEmail = this.getResponseProperty(\"HideEmail\") || false;\n\n const text = this.getResponseProperty(\"Text\");\n if (text != null) {\n this.text = new SendTextApi(text);\n }\n\n const file = this.getResponseProperty(\"File\");\n if (file != null) {\n this.file = new SendFileApi(file);\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SsoPreValidateResponse extends BaseResponse {\n token: string;\n\n constructor(response: any) {\n super(response);\n this.token = this.getResponseProperty(\"Token\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class SubscriptionResponse extends BaseResponse {\n storageName: string;\n storageGb: number;\n maxStorageGb: number;\n subscription: BillingSubscriptionResponse;\n upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n license: any;\n expiration: string;\n usingInAppPurchase: boolean;\n\n constructor(response: any) {\n super(response);\n this.storageName = this.getResponseProperty(\"StorageName\");\n this.storageGb = this.getResponseProperty(\"StorageGb\");\n this.maxStorageGb = this.getResponseProperty(\"MaxStorageGb\");\n this.license = this.getResponseProperty(\"License\");\n this.expiration = this.getResponseProperty(\"Expiration\");\n this.usingInAppPurchase = this.getResponseProperty(\"UsingInAppPurchase\");\n const subscription = this.getResponseProperty(\"Subscription\");\n const upcomingInvoice = this.getResponseProperty(\"UpcomingInvoice\");\n this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n this.upcomingInvoice =\n upcomingInvoice == null\n ? null\n : new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n trialStartDate: string;\n trialEndDate: string;\n periodStartDate: string;\n periodEndDate: string;\n cancelledDate: string;\n cancelAtEndDate: boolean;\n status: string;\n cancelled: boolean;\n items: BillingSubscriptionItemResponse[] = [];\n\n constructor(response: any) {\n super(response);\n this.trialEndDate = this.getResponseProperty(\"TrialStartDate\");\n this.trialEndDate = this.getResponseProperty(\"TrialEndDate\");\n this.periodStartDate = this.getResponseProperty(\"PeriodStartDate\");\n this.periodEndDate = this.getResponseProperty(\"PeriodEndDate\");\n this.cancelledDate = this.getResponseProperty(\"CancelledDate\");\n this.cancelAtEndDate = this.getResponseProperty(\"CancelAtEndDate\");\n this.status = this.getResponseProperty(\"Status\");\n this.cancelled = this.getResponseProperty(\"Cancelled\");\n const items = this.getResponseProperty(\"Items\");\n if (items != null) {\n this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n }\n }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n name: string;\n amount: number;\n quantity: number;\n interval: string;\n sponsoredSubscriptionItem: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.amount = this.getResponseProperty(\"Amount\");\n this.quantity = this.getResponseProperty(\"Quantity\");\n this.interval = this.getResponseProperty(\"Interval\");\n this.sponsoredSubscriptionItem = this.getResponseProperty(\"SponsoredSubscriptionItem\");\n }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n date: string;\n amount: number;\n\n constructor(response: any) {\n super(response);\n this.date = this.getResponseProperty(\"Date\");\n this.amount = this.getResponseProperty(\"Amount\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\nimport { CipherResponse } from \"./cipherResponse\";\nimport { CollectionDetailsResponse } from \"./collectionResponse\";\nimport { DomainsResponse } from \"./domainsResponse\";\nimport { FolderResponse } from \"./folderResponse\";\nimport { PolicyResponse } from \"./policyResponse\";\nimport { ProfileResponse } from \"./profileResponse\";\nimport { SendResponse } from \"./sendResponse\";\n\nexport class SyncResponse extends BaseResponse {\n profile?: ProfileResponse;\n folders: FolderResponse[] = [];\n collections: CollectionDetailsResponse[] = [];\n ciphers: CipherResponse[] = [];\n domains?: DomainsResponse;\n policies?: PolicyResponse[] = [];\n sends: SendResponse[] = [];\n\n constructor(response: any) {\n super(response);\n\n const profile = this.getResponseProperty(\"Profile\");\n if (profile != null) {\n this.profile = new ProfileResponse(profile);\n }\n\n const folders = this.getResponseProperty(\"Folders\");\n if (folders != null) {\n this.folders = folders.map((f: any) => new FolderResponse(f));\n }\n\n const collections = this.getResponseProperty(\"Collections\");\n if (collections != null) {\n this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n }\n\n const ciphers = this.getResponseProperty(\"Ciphers\");\n if (ciphers != null) {\n this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n }\n\n const domains = this.getResponseProperty(\"Domains\");\n if (domains != null) {\n this.domains = new DomainsResponse(domains);\n }\n\n const policies = this.getResponseProperty(\"Policies\");\n if (policies != null) {\n this.policies = policies.map((p: any) => new PolicyResponse(p));\n }\n\n const sends = this.getResponseProperty(\"Sends\");\n if (sends != null) {\n this.sends = sends.map((s: any) => new SendResponse(s));\n }\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TaxInfoResponse extends BaseResponse {\n taxId: string;\n taxIdType: string;\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n postalCode: string;\n\n constructor(response: any) {\n super(response);\n this.taxId = this.getResponseProperty(\"TaxIdNumber\");\n this.taxIdType = this.getResponseProperty(\"TaxIdType\");\n this.line1 = this.getResponseProperty(\"Line1\");\n this.line2 = this.getResponseProperty(\"Line2\");\n this.city = this.getResponseProperty(\"City\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.country = this.getResponseProperty(\"Country\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TaxRateResponse extends BaseResponse {\n id: string;\n country: string;\n state: string;\n postalCode: string;\n rate: number;\n\n constructor(response: any) {\n super(response);\n this.id = this.getResponseProperty(\"Id\");\n this.country = this.getResponseProperty(\"Country\");\n this.state = this.getResponseProperty(\"State\");\n this.postalCode = this.getResponseProperty(\"PostalCode\");\n this.rate = this.getResponseProperty(\"Rate\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n enabled: boolean;\n key: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key = this.getResponseProperty(\"Key\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n enabled: boolean;\n host: string;\n secretKey: string;\n integrationKey: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.host = this.getResponseProperty(\"Host\");\n this.secretKey = this.getResponseProperty(\"SecretKey\");\n this.integrationKey = this.getResponseProperty(\"IntegrationKey\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n enabled: boolean;\n email: string;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.email = this.getResponseProperty(\"Email\");\n }\n}\n","import { TwoFactorProviderType } from \"../../enums/twoFactorProviderType\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n enabled: boolean;\n type: TwoFactorProviderType;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.type = this.getResponseProperty(\"Type\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n code: string;\n\n constructor(response: any) {\n super(response);\n this.code = this.getResponseProperty(\"Code\");\n }\n}\n","import { Utils } from \"../../misc/utils\";\n\nimport { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorWebAuthnResponse extends BaseResponse {\n enabled: boolean;\n keys: KeyResponse[];\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n const keys = this.getResponseProperty(\"Keys\");\n this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n }\n}\n\nexport class KeyResponse extends BaseResponse {\n name: string;\n id: number;\n migrated: boolean;\n\n constructor(response: any) {\n super(response);\n this.name = this.getResponseProperty(\"Name\");\n this.id = this.getResponseProperty(\"Id\");\n this.migrated = this.getResponseProperty(\"Migrated\");\n }\n}\n\nexport class ChallengeResponse extends BaseResponse implements PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference;\n authenticatorSelection?: AuthenticatorSelectionCriteria;\n challenge: BufferSource;\n excludeCredentials?: PublicKeyCredentialDescriptor[];\n extensions?: AuthenticationExtensionsClientInputs;\n pubKeyCredParams: PublicKeyCredentialParameters[];\n rp: PublicKeyCredentialRpEntity;\n timeout?: number;\n user: PublicKeyCredentialUserEntity;\n\n constructor(response: any) {\n super(response);\n this.attestation = this.getResponseProperty(\"attestation\");\n this.authenticatorSelection = this.getResponseProperty(\"authenticatorSelection\");\n this.challenge = Utils.fromUrlB64ToArray(this.getResponseProperty(\"challenge\"));\n this.excludeCredentials = this.getResponseProperty(\"excludeCredentials\").map((c: any) => {\n c.id = Utils.fromUrlB64ToArray(c.id).buffer;\n return c;\n });\n this.extensions = this.getResponseProperty(\"extensions\");\n this.pubKeyCredParams = this.getResponseProperty(\"pubKeyCredParams\");\n this.rp = this.getResponseProperty(\"rp\");\n this.timeout = this.getResponseProperty(\"timeout\");\n\n const user = this.getResponseProperty(\"user\");\n user.id = Utils.fromUrlB64ToArray(user.id);\n\n this.user = user;\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n enabled: boolean;\n key1: string;\n key2: string;\n key3: string;\n key4: string;\n key5: string;\n nfc: boolean;\n\n constructor(response: any) {\n super(response);\n this.enabled = this.getResponseProperty(\"Enabled\");\n this.key1 = this.getResponseProperty(\"Key1\");\n this.key2 = this.getResponseProperty(\"Key2\");\n this.key3 = this.getResponseProperty(\"Key3\");\n this.key4 = this.getResponseProperty(\"Key4\");\n this.key5 = this.getResponseProperty(\"Key5\");\n this.nfc = this.getResponseProperty(\"Nfc\");\n }\n}\n","import { BaseResponse } from \"./baseResponse\";\n\nexport class UserKeyResponse extends BaseResponse {\n userId: string;\n publicKey: string;\n\n constructor(response: any) {\n super(response);\n this.userId = this.getResponseProperty(\"UserId\");\n this.publicKey = this.getResponseProperty(\"PublicKey\");\n }\n}\n","import { Attachment } from \"../domain/attachment\";\nimport { SymmetricCryptoKey } from \"../domain/symmetricCryptoKey\";\n\nimport { View } from \"./view\";\n\nexport class AttachmentView implements View {\n id: string = null;\n url: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n key: SymmetricCryptoKey = null;\n\n constructor(a?: Attachment) {\n if (!a) {\n return;\n }\n\n this.id = a.id;\n this.url = a.url;\n this.size = a.size;\n this.sizeName = a.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n}\n","import { CardLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\n\nimport { ItemView } from \"./itemView\";\n\nexport class CardView extends ItemView {\n @linkedFieldOption(LinkedId.CardholderName)\n cardholderName: string = null;\n @linkedFieldOption(LinkedId.ExpMonth, \"expirationMonth\")\n expMonth: string = null;\n @linkedFieldOption(LinkedId.ExpYear, \"expirationYear\")\n expYear: string = null;\n @linkedFieldOption(LinkedId.Code, \"securityCode\")\n code: string = null;\n\n private _brand: string = null;\n private _number: string = null;\n private _subTitle: string = null;\n\n constructor() {\n super();\n }\n\n get maskedCode(): string {\n return this.code != null ? \"•\".repeat(this.code.length) : null;\n }\n\n get maskedNumber(): string {\n return this.number != null ? \"•\".repeat(this.number.length) : null;\n }\n\n @linkedFieldOption(LinkedId.Brand)\n get brand(): string {\n return this._brand;\n }\n set brand(value: string) {\n this._brand = value;\n this._subTitle = null;\n }\n\n @linkedFieldOption(LinkedId.Number)\n get number(): string {\n return this._number;\n }\n set number(value: string) {\n this._number = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null) {\n this._subTitle = this.brand;\n if (this.number != null && this.number.length >= 4) {\n if (this._subTitle != null && this._subTitle !== \"\") {\n this._subTitle += \", \";\n } else {\n this._subTitle = \"\";\n }\n\n // Show last 5 on amex, last 4 for all others\n const count =\n this.number.length >= 5 && this.number.match(new RegExp(\"^3[47]\")) != null ? 5 : 4;\n this._subTitle += \"*\" + this.number.substr(this.number.length - count);\n }\n }\n return this._subTitle;\n }\n\n get expiration(): string {\n if (!this.expMonth && !this.expYear) {\n return null;\n }\n\n let exp = this.expMonth != null ? (\"0\" + this.expMonth).slice(-2) : \"__\";\n exp += \" / \" + (this.expYear != null ? this.formatYear(this.expYear) : \"____\");\n return exp;\n }\n\n private formatYear(year: string): string {\n return year.length === 2 ? \"20\" + year : year;\n }\n}\n","import { CipherRepromptType } from \"../../enums/cipherRepromptType\";\nimport { CipherType } from \"../../enums/cipherType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { Cipher } from \"../domain/cipher\";\n\nimport { AttachmentView } from \"./attachmentView\";\nimport { CardView } from \"./cardView\";\nimport { FieldView } from \"./fieldView\";\nimport { IdentityView } from \"./identityView\";\nimport { LoginView } from \"./loginView\";\nimport { PasswordHistoryView } from \"./passwordHistoryView\";\nimport { SecureNoteView } from \"./secureNoteView\";\nimport { View } from \"./view\";\n\nexport class CipherView implements View {\n id: string = null;\n organizationId: string = null;\n folderId: string = null;\n name: string = null;\n notes: string = null;\n type: CipherType = null;\n favorite = false;\n organizationUseTotp = false;\n edit = false;\n viewPassword = true;\n localData: any;\n login = new LoginView();\n identity = new IdentityView();\n card = new CardView();\n secureNote = new SecureNoteView();\n attachments: AttachmentView[] = null;\n fields: FieldView[] = null;\n passwordHistory: PasswordHistoryView[] = null;\n collectionIds: string[] = null;\n revisionDate: Date = null;\n deletedDate: Date = null;\n reprompt: CipherRepromptType = CipherRepromptType.None;\n\n constructor(c?: Cipher) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.folderId = c.folderId;\n this.favorite = c.favorite;\n this.organizationUseTotp = c.organizationUseTotp;\n this.edit = c.edit;\n this.viewPassword = c.viewPassword;\n this.type = c.type;\n this.localData = c.localData;\n this.collectionIds = c.collectionIds;\n this.revisionDate = c.revisionDate;\n this.deletedDate = c.deletedDate;\n // Old locally stored ciphers might have reprompt == null. If so set it to None.\n this.reprompt = c.reprompt ?? CipherRepromptType.None;\n }\n\n private get item() {\n switch (this.type) {\n case CipherType.Login:\n return this.login;\n case CipherType.SecureNote:\n return this.secureNote;\n case CipherType.Card:\n return this.card;\n case CipherType.Identity:\n return this.identity;\n default:\n break;\n }\n\n return null;\n }\n\n get subTitle(): string {\n return this.item.subTitle;\n }\n\n get hasPasswordHistory(): boolean {\n return this.passwordHistory && this.passwordHistory.length > 0;\n }\n\n get hasAttachments(): boolean {\n return this.attachments && this.attachments.length > 0;\n }\n\n get hasOldAttachments(): boolean {\n if (this.hasAttachments) {\n for (let i = 0; i < this.attachments.length; i++) {\n if (this.attachments[i].key == null) {\n return true;\n }\n }\n }\n return false;\n }\n\n get hasFields(): boolean {\n return this.fields && this.fields.length > 0;\n }\n\n get passwordRevisionDisplayDate(): Date {\n if (this.type !== CipherType.Login || this.login == null) {\n return null;\n } else if (this.login.password == null || this.login.password === \"\") {\n return null;\n }\n return this.login.passwordRevisionDate;\n }\n\n get isDeleted(): boolean {\n return this.deletedDate != null;\n }\n\n get linkedFieldOptions() {\n return this.item.linkedFieldOptions;\n }\n\n linkedFieldValue(id: LinkedIdType) {\n const linkedFieldOption = this.linkedFieldOptions?.get(id);\n if (linkedFieldOption == null) {\n return null;\n }\n\n const item = this.item;\n return this.item[linkedFieldOption.propertyKey as keyof typeof item];\n }\n\n linkedFieldI18nKey(id: LinkedIdType): string {\n return this.linkedFieldOptions.get(id)?.i18nKey;\n }\n}\n","import { Collection } from \"../domain/collection\";\nimport { ITreeNodeObject } from \"../domain/treeNode\";\nimport { CollectionGroupDetailsResponse } from \"../response/collectionResponse\";\n\nimport { View } from \"./view\";\n\nexport class CollectionView implements View, ITreeNodeObject {\n id: string = null;\n organizationId: string = null;\n name: string = null;\n externalId: string = null;\n readOnly: boolean = null;\n hidePasswords: boolean = null;\n\n constructor(c?: Collection | CollectionGroupDetailsResponse) {\n if (!c) {\n return;\n }\n\n this.id = c.id;\n this.organizationId = c.organizationId;\n this.externalId = c.externalId;\n if (c instanceof Collection) {\n this.readOnly = c.readOnly;\n this.hidePasswords = c.hidePasswords;\n }\n }\n}\n","import { EventType } from \"../../enums/eventType\";\n\nexport class EventView {\n message: string;\n humanReadableMessage: string;\n appIcon: string;\n appName: string;\n userId: string;\n userName: string;\n userEmail: string;\n date: string;\n ip: string;\n type: EventType;\n installationId: string;\n\n constructor(data: Required) {\n this.message = data.message;\n this.humanReadableMessage = data.humanReadableMessage;\n this.appIcon = data.appIcon;\n this.appName = data.appName;\n this.userId = data.userId;\n this.userName = data.userName;\n this.userEmail = data.userEmail;\n this.date = data.date;\n this.ip = data.ip;\n this.type = data.type;\n this.installationId = data.installationId;\n }\n}\n","import { FieldType } from \"../../enums/fieldType\";\nimport { LinkedIdType } from \"../../enums/linkedIdType\";\nimport { Field } from \"../domain/field\";\n\nimport { View } from \"./view\";\n\nexport class FieldView implements View {\n name: string = null;\n value: string = null;\n type: FieldType = null;\n newField = false; // Marks if the field is new and hasn't been saved\n showValue = false;\n showCount = false;\n linkedId: LinkedIdType = null;\n\n constructor(f?: Field) {\n if (!f) {\n return;\n }\n\n this.type = f.type;\n this.linkedId = f.linkedId;\n }\n\n get maskedValue(): string {\n return this.value != null ? \"••••••••\" : null;\n }\n}\n","import { Folder } from \"../domain/folder\";\nimport { ITreeNodeObject } from \"../domain/treeNode\";\n\nimport { View } from \"./view\";\n\nexport class FolderView implements View, ITreeNodeObject {\n id: string = null;\n name: string = null;\n revisionDate: Date = null;\n\n constructor(f?: Folder) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.revisionDate = f.revisionDate;\n }\n}\n","import { IdentityLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../misc/utils\";\n\nimport { ItemView } from \"./itemView\";\n\nexport class IdentityView extends ItemView {\n @linkedFieldOption(LinkedId.Title)\n title: string = null;\n @linkedFieldOption(LinkedId.MiddleName)\n middleName: string = null;\n @linkedFieldOption(LinkedId.Address1)\n address1: string = null;\n @linkedFieldOption(LinkedId.Address2)\n address2: string = null;\n @linkedFieldOption(LinkedId.Address3)\n address3: string = null;\n @linkedFieldOption(LinkedId.City, \"cityTown\")\n city: string = null;\n @linkedFieldOption(LinkedId.State, \"stateProvince\")\n state: string = null;\n @linkedFieldOption(LinkedId.PostalCode, \"zipPostalCode\")\n postalCode: string = null;\n @linkedFieldOption(LinkedId.Country)\n country: string = null;\n @linkedFieldOption(LinkedId.Company)\n company: string = null;\n @linkedFieldOption(LinkedId.Email)\n email: string = null;\n @linkedFieldOption(LinkedId.Phone)\n phone: string = null;\n @linkedFieldOption(LinkedId.Ssn)\n ssn: string = null;\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.PassportNumber)\n passportNumber: string = null;\n @linkedFieldOption(LinkedId.LicenseNumber)\n licenseNumber: string = null;\n\n private _firstName: string = null;\n private _lastName: string = null;\n private _subTitle: string = null;\n\n constructor() {\n super();\n }\n\n @linkedFieldOption(LinkedId.FirstName)\n get firstName(): string {\n return this._firstName;\n }\n set firstName(value: string) {\n this._firstName = value;\n this._subTitle = null;\n }\n\n @linkedFieldOption(LinkedId.LastName)\n get lastName(): string {\n return this._lastName;\n }\n set lastName(value: string) {\n this._lastName = value;\n this._subTitle = null;\n }\n\n get subTitle(): string {\n if (this._subTitle == null && (this.firstName != null || this.lastName != null)) {\n this._subTitle = \"\";\n if (this.firstName != null) {\n this._subTitle = this.firstName;\n }\n if (this.lastName != null) {\n if (this._subTitle !== \"\") {\n this._subTitle += \" \";\n }\n this._subTitle += this.lastName;\n }\n }\n\n return this._subTitle;\n }\n\n @linkedFieldOption(LinkedId.FullName)\n get fullName(): string {\n if (\n this.title != null ||\n this.firstName != null ||\n this.middleName != null ||\n this.lastName != null\n ) {\n let name = \"\";\n if (this.title != null) {\n name += this.title + \" \";\n }\n if (this.firstName != null) {\n name += this.firstName + \" \";\n }\n if (this.middleName != null) {\n name += this.middleName + \" \";\n }\n if (this.lastName != null) {\n name += this.lastName;\n }\n return name.trim();\n }\n\n return null;\n }\n\n get fullAddress(): string {\n let address = this.address1;\n if (!Utils.isNullOrWhitespace(this.address2)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address2;\n }\n if (!Utils.isNullOrWhitespace(this.address3)) {\n if (!Utils.isNullOrWhitespace(address)) {\n address += \", \";\n }\n address += this.address3;\n }\n return address;\n }\n\n get fullAddressPart2(): string {\n if (this.city == null && this.state == null && this.postalCode == null) {\n return null;\n }\n const city = this.city || \"-\";\n const state = this.state;\n const postalCode = this.postalCode || \"-\";\n let addressPart2 = city;\n if (!Utils.isNullOrWhitespace(state)) {\n addressPart2 += \", \" + state;\n }\n addressPart2 += \", \" + postalCode;\n return addressPart2;\n }\n}\n","import { LinkedMetadata } from \"../../misc/linkedFieldOption.decorator\";\n\nimport { View } from \"./view\";\n\nexport abstract class ItemView implements View {\n linkedFieldOptions: Map;\n abstract get subTitle(): string;\n}\n","import { UriMatchType } from \"../../enums/uriMatchType\";\nimport { Utils } from \"../../misc/utils\";\nimport { LoginUri } from \"../domain/loginUri\";\n\nimport { View } from \"./view\";\n\nconst CanLaunchWhitelist = [\n \"https://\",\n \"http://\",\n \"ssh://\",\n \"ftp://\",\n \"sftp://\",\n \"irc://\",\n \"vnc://\",\n // https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-uri\n \"rdp://\", // Legacy RDP URI scheme\n \"ms-rd:\", // Preferred RDP URI scheme\n \"chrome://\",\n \"iosapp://\",\n \"androidapp://\",\n];\n\nexport class LoginUriView implements View {\n match: UriMatchType = null;\n\n private _uri: string = null;\n private _domain: string = null;\n private _hostname: string = null;\n private _host: string = null;\n private _canLaunch: boolean = null;\n\n constructor(u?: LoginUri) {\n if (!u) {\n return;\n }\n\n this.match = u.match;\n }\n\n get uri(): string {\n return this._uri;\n }\n set uri(value: string) {\n this._uri = value;\n this._domain = null;\n this._canLaunch = null;\n }\n\n get domain(): string {\n if (this._domain == null && this.uri != null) {\n this._domain = Utils.getDomain(this.uri);\n if (this._domain === \"\") {\n this._domain = null;\n }\n }\n\n return this._domain;\n }\n\n get hostname(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._hostname == null && this.uri != null) {\n this._hostname = Utils.getHostname(this.uri);\n if (this._hostname === \"\") {\n this._hostname = null;\n }\n }\n\n return this._hostname;\n }\n\n get host(): string {\n if (this.match === UriMatchType.RegularExpression) {\n return null;\n }\n if (this._host == null && this.uri != null) {\n this._host = Utils.getHost(this.uri);\n if (this._host === \"\") {\n this._host = null;\n }\n }\n\n return this._host;\n }\n\n get hostnameOrUri(): string {\n return this.hostname != null ? this.hostname : this.uri;\n }\n\n get hostOrUri(): string {\n return this.host != null ? this.host : this.uri;\n }\n\n get isWebsite(): boolean {\n return (\n this.uri != null &&\n (this.uri.indexOf(\"http://\") === 0 ||\n this.uri.indexOf(\"https://\") === 0 ||\n (this.uri.indexOf(\"://\") < 0 && Utils.tldEndingRegex.test(this.uri)))\n );\n }\n\n get canLaunch(): boolean {\n if (this._canLaunch != null) {\n return this._canLaunch;\n }\n if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n const uri = this.launchUri;\n for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n this._canLaunch = true;\n return this._canLaunch;\n }\n }\n }\n this._canLaunch = false;\n return this._canLaunch;\n }\n\n get launchUri(): string {\n return this.uri.indexOf(\"://\") < 0 && Utils.tldEndingRegex.test(this.uri)\n ? \"http://\" + this.uri\n : this.uri;\n }\n}\n","import { LoginLinkedId as LinkedId } from \"../../enums/linkedIdType\";\nimport { linkedFieldOption } from \"../../misc/linkedFieldOption.decorator\";\nimport { Utils } from \"../../misc/utils\";\nimport { Login } from \"../domain/login\";\n\nimport { ItemView } from \"./itemView\";\nimport { LoginUriView } from \"./loginUriView\";\n\nexport class LoginView extends ItemView {\n @linkedFieldOption(LinkedId.Username)\n username: string = null;\n @linkedFieldOption(LinkedId.Password)\n password: string = null;\n\n passwordRevisionDate?: Date = null;\n totp: string = null;\n uris: LoginUriView[] = null;\n autofillOnPageLoad: boolean = null;\n\n constructor(l?: Login) {\n super();\n if (!l) {\n return;\n }\n\n this.passwordRevisionDate = l.passwordRevisionDate;\n this.autofillOnPageLoad = l.autofillOnPageLoad;\n }\n\n get uri(): string {\n return this.hasUris ? this.uris[0].uri : null;\n }\n\n get maskedPassword(): string {\n return this.password != null ? \"••••••••\" : null;\n }\n\n get subTitle(): string {\n return this.username;\n }\n\n get canLaunch(): boolean {\n return this.hasUris && this.uris.some((u) => u.canLaunch);\n }\n\n get hasTotp(): boolean {\n return !Utils.isNullOrWhitespace(this.totp);\n }\n\n get launchUri(): string {\n if (this.hasUris) {\n const uri = this.uris.find((u) => u.canLaunch);\n if (uri != null) {\n return uri.launchUri;\n }\n }\n return null;\n }\n\n get hasUris(): boolean {\n return this.uris != null && this.uris.length > 0;\n }\n}\n","import { Password } from \"../domain/password\";\n\nimport { View } from \"./view\";\n\nexport class PasswordHistoryView implements View {\n password: string = null;\n lastUsedDate: Date = null;\n\n constructor(ph?: Password) {\n if (!ph) {\n return;\n }\n\n this.lastUsedDate = ph.lastUsedDate;\n }\n}\n","import { SecureNoteType } from \"../../enums/secureNoteType\";\nimport { SecureNote } from \"../domain/secureNote\";\n\nimport { ItemView } from \"./itemView\";\n\nexport class SecureNoteView extends ItemView {\n type: SecureNoteType = null;\n\n constructor(n?: SecureNote) {\n super();\n if (!n) {\n return;\n }\n\n this.type = n.type;\n }\n\n get subTitle(): string {\n return null;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { SendAccess } from \"../domain/sendAccess\";\n\nimport { SendFileView } from \"./sendFileView\";\nimport { SendTextView } from \"./sendTextView\";\nimport { View } from \"./view\";\n\nexport class SendAccessView implements View {\n id: string = null;\n name: string = null;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n expirationDate: Date = null;\n creatorIdentifier: string = null;\n\n constructor(s?: SendAccess) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.type = s.type;\n this.expirationDate = s.expirationDate;\n this.creatorIdentifier = s.creatorIdentifier;\n }\n}\n","import { SendFile } from \"../domain/sendFile\";\n\nimport { View } from \"./view\";\n\nexport class SendFileView implements View {\n id: string = null;\n size: string = null;\n sizeName: string = null;\n fileName: string = null;\n\n constructor(f?: SendFile) {\n if (!f) {\n return;\n }\n\n this.id = f.id;\n this.size = f.size;\n this.sizeName = f.sizeName;\n }\n\n get fileSize(): number {\n try {\n if (this.size != null) {\n return parseInt(this.size, null);\n }\n } catch {\n // Invalid file size.\n }\n return 0;\n }\n}\n","import { SendText } from \"../domain/sendText\";\n\nimport { View } from \"./view\";\n\nexport class SendTextView implements View {\n text: string = null;\n hidden: boolean;\n\n constructor(t?: SendText) {\n if (!t) {\n return;\n }\n\n this.hidden = t.hidden;\n }\n\n get maskedText(): string {\n return this.text != null ? \"••••••••\" : null;\n }\n}\n","import { SendType } from \"../../enums/sendType\";\nimport { Utils } from \"../../misc/utils\";\nimport { Send } from \"../domain/send\";\nimport { SymmetricCryptoKey } from \"../domain/symmetricCryptoKey\";\n\nimport { SendFileView } from \"./sendFileView\";\nimport { SendTextView } from \"./sendTextView\";\nimport { View } from \"./view\";\n\nexport class SendView implements View {\n id: string = null;\n accessId: string = null;\n name: string = null;\n notes: string = null;\n key: ArrayBuffer;\n cryptoKey: SymmetricCryptoKey;\n type: SendType = null;\n text = new SendTextView();\n file = new SendFileView();\n maxAccessCount?: number = null;\n accessCount = 0;\n revisionDate: Date = null;\n deletionDate: Date = null;\n expirationDate: Date = null;\n password: string = null;\n disabled = false;\n hideEmail = false;\n\n constructor(s?: Send) {\n if (!s) {\n return;\n }\n\n this.id = s.id;\n this.accessId = s.accessId;\n this.type = s.type;\n this.maxAccessCount = s.maxAccessCount;\n this.accessCount = s.accessCount;\n this.revisionDate = s.revisionDate;\n this.deletionDate = s.deletionDate;\n this.expirationDate = s.expirationDate;\n this.disabled = s.disabled;\n this.password = s.password;\n this.hideEmail = s.hideEmail;\n }\n\n get urlB64Key(): string {\n return Utils.fromBufferToUrlB64(this.key);\n }\n\n get maxAccessCountReached(): boolean {\n if (this.maxAccessCount == null) {\n return false;\n }\n return this.accessCount >= this.maxAccessCount;\n }\n\n get expired(): boolean {\n if (this.expirationDate == null) {\n return false;\n }\n return this.expirationDate <= new Date();\n }\n\n get pendingDelete(): boolean {\n return this.deletionDate <= new Date();\n }\n}\n","import { AppIdService } from \"jslib-common/abstractions/appId.service\";\nimport { OrganizationConnectionType } from \"jslib-common/enums/organizationConnectionType\";\nimport { DeviceRequest } from \"jslib-common/models/request/deviceRequest\";\nimport { TokenRequestTwoFactor } from \"jslib-common/models/request/identityToken/tokenRequestTwoFactor\";\nimport { OrganizationConnectionRequest } from \"jslib-common/models/request/organizationConnectionRequest\";\nimport { BillingHistoryResponse } from \"jslib-common/models/response/billingHistoryResponse\";\nimport { BillingPaymentResponse } from \"jslib-common/models/response/billingPaymentResponse\";\nimport {\n OrganizationConnectionConfigApis,\n OrganizationConnectionResponse,\n} from \"jslib-common/models/response/organizationConnectionResponse\";\nimport { SsoPreValidateResponse } from \"jslib-common/models/response/ssoPreValidateResponse\";\n\nimport { ApiService as ApiServiceAbstraction } from \"../abstractions/api.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { DeviceType } from \"../enums/deviceType\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { Utils } from \"../misc/utils\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/setKeyConnectorKeyRequest\";\nimport { VerifyOTPRequest } from \"../models/request/account/verifyOTPRequest\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { BitPayInvoiceRequest } from \"../models/request/bitPayInvoiceRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { DeleteRecoverRequest } from \"../models/request/deleteRecoverRequest\";\nimport { DeviceVerificationRequest } from \"../models/request/deviceVerificationRequest\";\nimport { EmailRequest } from \"../models/request/emailRequest\";\nimport { EmailTokenRequest } from \"../models/request/emailTokenRequest\";\nimport { EmergencyAccessAcceptRequest } from \"../models/request/emergencyAccessAcceptRequest\";\nimport { EmergencyAccessConfirmRequest } from \"../models/request/emergencyAccessConfirmRequest\";\nimport { EmergencyAccessInviteRequest } from \"../models/request/emergencyAccessInviteRequest\";\nimport { EmergencyAccessPasswordRequest } from \"../models/request/emergencyAccessPasswordRequest\";\nimport { EmergencyAccessUpdateRequest } from \"../models/request/emergencyAccessUpdateRequest\";\nimport { EventRequest } from \"../models/request/eventRequest\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { GroupRequest } from \"../models/request/groupRequest\";\nimport { IapCheckRequest } from \"../models/request/iapCheckRequest\";\nimport { ApiTokenRequest } from \"../models/request/identityToken/apiTokenRequest\";\nimport { PasswordTokenRequest } from \"../models/request/identityToken/passwordTokenRequest\";\nimport { SsoTokenRequest } from \"../models/request/identityToken/ssoTokenRequest\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportDirectoryRequest } from \"../models/request/importDirectoryRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KdfRequest } from \"../models/request/kdfRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { OrganizationSponsorshipCreateRequest } from \"../models/request/organization/organizationSponsorshipCreateRequest\";\nimport { OrganizationSponsorshipRedeemRequest } from \"../models/request/organization/organizationSponsorshipRedeemRequest\";\nimport { OrganizationSsoRequest } from \"../models/request/organization/organizationSsoRequest\";\nimport { OrganizationApiKeyRequest } from \"../models/request/organizationApiKeyRequest\";\nimport { OrganizationCreateRequest } from \"../models/request/organizationCreateRequest\";\nimport { OrganizationImportRequest } from \"../models/request/organizationImportRequest\";\nimport { OrganizationKeysRequest } from \"../models/request/organizationKeysRequest\";\nimport { OrganizationSubscriptionUpdateRequest } from \"../models/request/organizationSubscriptionUpdateRequest\";\nimport { OrganizationTaxInfoUpdateRequest } from \"../models/request/organizationTaxInfoUpdateRequest\";\nimport { OrganizationUpdateRequest } from \"../models/request/organizationUpdateRequest\";\nimport { OrganizationUpgradeRequest } from \"../models/request/organizationUpgradeRequest\";\nimport { OrganizationUserAcceptRequest } from \"../models/request/organizationUserAcceptRequest\";\nimport { OrganizationUserBulkConfirmRequest } from \"../models/request/organizationUserBulkConfirmRequest\";\nimport { OrganizationUserBulkRequest } from \"../models/request/organizationUserBulkRequest\";\nimport { OrganizationUserConfirmRequest } from \"../models/request/organizationUserConfirmRequest\";\nimport { OrganizationUserInviteRequest } from \"../models/request/organizationUserInviteRequest\";\nimport { OrganizationUserResetPasswordEnrollmentRequest } from \"../models/request/organizationUserResetPasswordEnrollmentRequest\";\nimport { OrganizationUserResetPasswordRequest } from \"../models/request/organizationUserResetPasswordRequest\";\nimport { OrganizationUserUpdateGroupsRequest } from \"../models/request/organizationUserUpdateGroupsRequest\";\nimport { OrganizationUserUpdateRequest } from \"../models/request/organizationUserUpdateRequest\";\nimport { PasswordHintRequest } from \"../models/request/passwordHintRequest\";\nimport { PasswordRequest } from \"../models/request/passwordRequest\";\nimport { PaymentRequest } from \"../models/request/paymentRequest\";\nimport { PolicyRequest } from \"../models/request/policyRequest\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ProviderAddOrganizationRequest } from \"../models/request/provider/providerAddOrganizationRequest\";\nimport { ProviderOrganizationCreateRequest } from \"../models/request/provider/providerOrganizationCreateRequest\";\nimport { ProviderSetupRequest } from \"../models/request/provider/providerSetupRequest\";\nimport { ProviderUpdateRequest } from \"../models/request/provider/providerUpdateRequest\";\nimport { ProviderUserAcceptRequest } from \"../models/request/provider/providerUserAcceptRequest\";\nimport { ProviderUserBulkConfirmRequest } from \"../models/request/provider/providerUserBulkConfirmRequest\";\nimport { ProviderUserBulkRequest } from \"../models/request/provider/providerUserBulkRequest\";\nimport { ProviderUserConfirmRequest } from \"../models/request/provider/providerUserConfirmRequest\";\nimport { ProviderUserInviteRequest } from \"../models/request/provider/providerUserInviteRequest\";\nimport { ProviderUserUpdateRequest } from \"../models/request/provider/providerUserUpdateRequest\";\nimport { RegisterRequest } from \"../models/request/registerRequest\";\nimport { SeatRequest } from \"../models/request/seatRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { SelectionReadOnlyRequest } from \"../models/request/selectionReadOnlyRequest\";\nimport { SendAccessRequest } from \"../models/request/sendAccessRequest\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { SetPasswordRequest } from \"../models/request/setPasswordRequest\";\nimport { StorageRequest } from \"../models/request/storageRequest\";\nimport { TaxInfoUpdateRequest } from \"../models/request/taxInfoUpdateRequest\";\nimport { TwoFactorEmailRequest } from \"../models/request/twoFactorEmailRequest\";\nimport { TwoFactorProviderRequest } from \"../models/request/twoFactorProviderRequest\";\nimport { TwoFactorRecoveryRequest } from \"../models/request/twoFactorRecoveryRequest\";\nimport { UpdateDomainsRequest } from \"../models/request/updateDomainsRequest\";\nimport { UpdateKeyRequest } from \"../models/request/updateKeyRequest\";\nimport { UpdateProfileRequest } from \"../models/request/updateProfileRequest\";\nimport { UpdateTempPasswordRequest } from \"../models/request/updateTempPasswordRequest\";\nimport { UpdateTwoFactorAuthenticatorRequest } from \"../models/request/updateTwoFactorAuthenticatorRequest\";\nimport { UpdateTwoFactorDuoRequest } from \"../models/request/updateTwoFactorDuoRequest\";\nimport { UpdateTwoFactorEmailRequest } from \"../models/request/updateTwoFactorEmailRequest\";\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from \"../models/request/updateTwoFactorWebAuthnDeleteRequest\";\nimport { UpdateTwoFactorWebAuthnRequest } from \"../models/request/updateTwoFactorWebAuthnRequest\";\nimport { UpdateTwoFactorYubioOtpRequest } from \"../models/request/updateTwoFactorYubioOtpRequest\";\nimport { VerifyBankRequest } from \"../models/request/verifyBankRequest\";\nimport { VerifyDeleteRecoverRequest } from \"../models/request/verifyDeleteRecoverRequest\";\nimport { VerifyEmailRequest } from \"../models/request/verifyEmailRequest\";\nimport { ApiKeyResponse } from \"../models/response/apiKeyResponse\";\nimport { AttachmentResponse } from \"../models/response/attachmentResponse\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { BillingResponse } from \"../models/response/billingResponse\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport {\n CollectionGroupDetailsResponse,\n CollectionResponse,\n} from \"../models/response/collectionResponse\";\nimport { DeviceVerificationResponse } from \"../models/response/deviceVerificationResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport {\n EmergencyAccessGranteeDetailsResponse,\n EmergencyAccessGrantorDetailsResponse,\n EmergencyAccessTakeoverResponse,\n EmergencyAccessViewResponse,\n} from \"../models/response/emergencyAccessResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { EventResponse } from \"../models/response/eventResponse\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport { GroupDetailsResponse, GroupResponse } from \"../models/response/groupResponse\";\nimport { IdentityCaptchaResponse } from \"../models/response/identityCaptchaResponse\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\nimport { KeyConnectorUserKeyResponse } from \"../models/response/keyConnectorUserKeyResponse\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { OrganizationSsoResponse } from \"../models/response/organization/organizationSsoResponse\";\nimport { OrganizationApiKeyInformationResponse } from \"../models/response/organizationApiKeyInformationResponse\";\nimport { OrganizationAutoEnrollStatusResponse } from \"../models/response/organizationAutoEnrollStatusResponse\";\nimport { OrganizationKeysResponse } from \"../models/response/organizationKeysResponse\";\nimport { OrganizationResponse } from \"../models/response/organizationResponse\";\nimport { OrganizationSponsorshipSyncStatusResponse } from \"../models/response/organizationSponsorshipSyncStatusResponse\";\nimport { OrganizationSubscriptionResponse } from \"../models/response/organizationSubscriptionResponse\";\nimport { OrganizationUserBulkPublicKeyResponse } from \"../models/response/organizationUserBulkPublicKeyResponse\";\nimport { OrganizationUserBulkResponse } from \"../models/response/organizationUserBulkResponse\";\nimport {\n OrganizationUserDetailsResponse,\n OrganizationUserResetPasswordDetailsReponse,\n OrganizationUserUserDetailsResponse,\n} from \"../models/response/organizationUserResponse\";\nimport { PaymentResponse } from \"../models/response/paymentResponse\";\nimport { PlanResponse } from \"../models/response/planResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { PreloginResponse } from \"../models/response/preloginResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport {\n ProviderOrganizationOrganizationDetailsResponse,\n ProviderOrganizationResponse,\n} from \"../models/response/provider/providerOrganizationResponse\";\nimport { ProviderResponse } from \"../models/response/provider/providerResponse\";\nimport { ProviderUserBulkPublicKeyResponse } from \"../models/response/provider/providerUserBulkPublicKeyResponse\";\nimport { ProviderUserBulkResponse } from \"../models/response/provider/providerUserBulkResponse\";\nimport {\n ProviderUserResponse,\n ProviderUserUserDetailsResponse,\n} from \"../models/response/provider/providerUserResponse\";\nimport { SelectionReadOnlyResponse } from \"../models/response/selectionReadOnlyResponse\";\nimport { SendAccessResponse } from \"../models/response/sendAccessResponse\";\nimport { SendFileDownloadDataResponse } from \"../models/response/sendFileDownloadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SubscriptionResponse } from \"../models/response/subscriptionResponse\";\nimport { SyncResponse } from \"../models/response/syncResponse\";\nimport { TaxInfoResponse } from \"../models/response/taxInfoResponse\";\nimport { TaxRateResponse } from \"../models/response/taxRateResponse\";\nimport { TwoFactorAuthenticatorResponse } from \"../models/response/twoFactorAuthenticatorResponse\";\nimport { TwoFactorDuoResponse } from \"../models/response/twoFactorDuoResponse\";\nimport { TwoFactorEmailResponse } from \"../models/response/twoFactorEmailResponse\";\nimport { TwoFactorProviderResponse } from \"../models/response/twoFactorProviderResponse\";\nimport { TwoFactorRecoverResponse } from \"../models/response/twoFactorRescoverResponse\";\nimport {\n TwoFactorWebAuthnResponse,\n ChallengeResponse,\n} from \"../models/response/twoFactorWebAuthnResponse\";\nimport { TwoFactorYubiKeyResponse } from \"../models/response/twoFactorYubiKeyResponse\";\nimport { UserKeyResponse } from \"../models/response/userKeyResponse\";\nimport { SendAccessView } from \"../models/view/sendAccessView\";\n\nexport class ApiService implements ApiServiceAbstraction {\n private device: DeviceType;\n private deviceType: string;\n private isWebClient = false;\n private isDesktopClient = false;\n\n constructor(\n private tokenService: TokenService,\n private platformUtilsService: PlatformUtilsService,\n private environmentService: EnvironmentService,\n private appIdService: AppIdService,\n private logoutCallback: (expired: boolean) => Promise,\n private customUserAgent: string = null\n ) {\n this.device = platformUtilsService.getDevice();\n this.deviceType = this.device.toString();\n this.isWebClient =\n this.device === DeviceType.IEBrowser ||\n this.device === DeviceType.ChromeBrowser ||\n this.device === DeviceType.EdgeBrowser ||\n this.device === DeviceType.FirefoxBrowser ||\n this.device === DeviceType.OperaBrowser ||\n this.device === DeviceType.SafariBrowser ||\n this.device === DeviceType.UnknownBrowser ||\n this.device === DeviceType.VivaldiBrowser;\n this.isDesktopClient =\n this.device === DeviceType.WindowsDesktop ||\n this.device === DeviceType.MacOsDesktop ||\n this.device === DeviceType.LinuxDesktop;\n }\n\n // Auth APIs\n\n async postIdentityToken(\n request: ApiTokenRequest | PasswordTokenRequest | SsoTokenRequest\n ): Promise {\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n request.alterIdentityTokenHeaders(headers);\n\n const identityToken =\n request instanceof ApiTokenRequest\n ? request.toIdentityToken()\n : request.toIdentityToken(this.platformUtilsService.getClientType());\n\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify(identityToken),\n credentials: this.getCredentials(),\n cache: \"no-store\",\n headers: headers,\n method: \"POST\",\n })\n );\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n }\n\n if (responseJson != null) {\n if (response.status === 200) {\n return new IdentityTokenResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.TwoFactorProviders2 &&\n Object.keys(responseJson.TwoFactorProviders2).length\n ) {\n await this.tokenService.clearTwoFactorToken();\n return new IdentityTwoFactorResponse(responseJson);\n } else if (\n response.status === 400 &&\n responseJson.HCaptcha_SiteKey &&\n Object.keys(responseJson.HCaptcha_SiteKey).length\n ) {\n return new IdentityCaptchaResponse(responseJson);\n }\n }\n\n return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n }\n\n async refreshIdentityToken(): Promise {\n try {\n await this.doAuthRefresh();\n } catch (e) {\n return Promise.reject(null);\n }\n }\n\n // Account APIs\n\n async getProfile(): Promise {\n const r = await this.send(\"GET\", \"/accounts/profile\", null, true, true);\n return new ProfileResponse(r);\n }\n\n async getUserSubscription(): Promise {\n const r = await this.send(\"GET\", \"/accounts/subscription\", null, true, true);\n return new SubscriptionResponse(r);\n }\n\n async getTaxInfo(): Promise {\n const r = await this.send(\"GET\", \"/accounts/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async putProfile(request: UpdateProfileRequest): Promise {\n const r = await this.send(\"PUT\", \"/accounts/profile\", request, true, true);\n return new ProfileResponse(r);\n }\n\n putTaxInfo(request: TaxInfoUpdateRequest): Promise {\n return this.send(\"PUT\", \"/accounts/tax\", request, true, false);\n }\n\n async postPrelogin(request: PreloginRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/accounts/prelogin\",\n request,\n false,\n true,\n this.platformUtilsService.isDev()\n ? this.environmentService.getIdentityUrl()\n : this.environmentService.getApiUrl()\n );\n return new PreloginResponse(r);\n }\n\n postEmailToken(request: EmailTokenRequest): Promise {\n return this.send(\"POST\", \"/accounts/email-token\", request, true, false);\n }\n\n postEmail(request: EmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/email\", request, true, false);\n }\n\n postPassword(request: PasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/password\", request, true, false);\n }\n\n setPassword(request: SetPasswordRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-password\", request, true, false);\n }\n\n postSetKeyConnectorKey(request: SetKeyConnectorKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/set-key-connector-key\", request, true, false);\n }\n\n postSecurityStamp(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/security-stamp\", request, true, false);\n }\n\n deleteAccount(request: SecretVerificationRequest): Promise {\n return this.send(\"DELETE\", \"/accounts\", request, true, false);\n }\n\n async getAccountRevisionDate(): Promise {\n const r = await this.send(\"GET\", \"/accounts/revision-date\", null, true, true);\n return r as number;\n }\n\n postPasswordHint(request: PasswordHintRequest): Promise {\n return this.send(\"POST\", \"/accounts/password-hint\", request, false, false);\n }\n\n postRegister(request: RegisterRequest): Promise {\n return this.send(\n \"POST\",\n \"/accounts/register\",\n request,\n false,\n false,\n this.platformUtilsService.isDev()\n ? this.environmentService.getIdentityUrl()\n : this.environmentService.getApiUrl()\n );\n }\n\n async postPremium(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/accounts/premium\", data, true, true);\n return new PaymentResponse(r);\n }\n\n async postIapCheck(request: IapCheckRequest): Promise {\n return this.send(\"POST\", \"/accounts/iap-check\", request, true, false);\n }\n\n postReinstatePremium(): Promise {\n return this.send(\"POST\", \"/accounts/reinstate-premium\", null, true, false);\n }\n\n postCancelPremium(): Promise {\n return this.send(\"POST\", \"/accounts/cancel-premium\", null, true, false);\n }\n\n async postAccountStorage(request: StorageRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/storage\", request, true, true);\n return new PaymentResponse(r);\n }\n\n postAccountPayment(request: PaymentRequest): Promise {\n return this.send(\"POST\", \"/accounts/payment\", request, true, false);\n }\n\n postAccountLicense(data: FormData): Promise {\n return this.send(\"POST\", \"/accounts/license\", data, true, false);\n }\n\n postAccountKeys(request: KeysRequest): Promise {\n return this.send(\"POST\", \"/accounts/keys\", request, true, false);\n }\n\n postAccountKey(request: UpdateKeyRequest): Promise {\n return this.send(\"POST\", \"/accounts/key\", request, true, false);\n }\n\n postAccountVerifyEmail(): Promise {\n return this.send(\"POST\", \"/accounts/verify-email\", null, true, false);\n }\n\n postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-email-token\", request, false, false);\n }\n\n postAccountVerifyPassword(request: SecretVerificationRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-password\", request, true, false);\n }\n\n postAccountRecoverDelete(request: DeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover\", request, false, false);\n }\n\n postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise {\n return this.send(\"POST\", \"/accounts/delete-recover-token\", request, false, false);\n }\n\n postAccountKdf(request: KdfRequest): Promise {\n return this.send(\"POST\", \"/accounts/kdf\", request, true, false);\n }\n\n async deleteSsoUser(organizationId: string): Promise {\n return this.send(\"DELETE\", \"/accounts/sso/\" + organizationId, null, true, false);\n }\n\n async getSsoUserIdentifier(): Promise {\n return this.send(\"GET\", \"/accounts/sso/user-identifier\", null, true, true);\n }\n\n async postUserApiKey(id: string, request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/accounts/api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async postUserRotateApiKey(\n id: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/accounts/rotate-api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n putUpdateTempPassword(request: UpdateTempPasswordRequest): Promise {\n return this.send(\"PUT\", \"/accounts/update-temp-password\", request, true, false);\n }\n\n postAccountRequestOTP(): Promise {\n return this.send(\"POST\", \"/accounts/request-otp\", null, true, false);\n }\n\n postAccountVerifyOTP(request: VerifyOTPRequest): Promise {\n return this.send(\"POST\", \"/accounts/verify-otp\", request, true, false);\n }\n\n postConvertToKeyConnector(): Promise {\n return this.send(\"POST\", \"/accounts/convert-to-key-connector\", null, true, false);\n }\n\n // Account Billing APIs\n\n async getUserBillingHistory(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/history\", null, true, true);\n return new BillingHistoryResponse(r);\n }\n\n async getUserBillingPayment(): Promise {\n const r = await this.send(\"GET\", \"/accounts/billing/payment-method\", null, true, true);\n return new BillingPaymentResponse(r);\n }\n\n // Folder APIs\n\n async getFolder(id: string): Promise {\n const r = await this.send(\"GET\", \"/folders/\" + id, null, true, true);\n return new FolderResponse(r);\n }\n\n async postFolder(request: FolderRequest): Promise {\n const r = await this.send(\"POST\", \"/folders\", request, true, true);\n return new FolderResponse(r);\n }\n\n async putFolder(id: string, request: FolderRequest): Promise {\n const r = await this.send(\"PUT\", \"/folders/\" + id, request, true, true);\n return new FolderResponse(r);\n }\n\n deleteFolder(id: string): Promise {\n return this.send(\"DELETE\", \"/folders/\" + id, null, true, false);\n }\n\n // Send APIs\n\n async getSend(id: string): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + id, null, true, true);\n return new SendResponse(r);\n }\n\n async postSendAccess(\n id: string,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/access/\" + id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendAccessResponse(r);\n }\n\n async getSendFileDownloadData(\n send: SendAccessView,\n request: SendAccessRequest,\n apiUrl?: string\n ): Promise {\n const addSendIdHeader = (headers: Headers) => {\n headers.set(\"Send-Id\", send.id);\n };\n const r = await this.send(\n \"POST\",\n \"/sends/\" + send.id + \"/access/file/\" + send.file.id,\n request,\n false,\n true,\n apiUrl,\n addSendIdHeader\n );\n return new SendFileDownloadDataResponse(r);\n }\n\n async getSends(): Promise> {\n const r = await this.send(\"GET\", \"/sends\", null, true, true);\n return new ListResponse(r, SendResponse);\n }\n\n async postSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends\", request, true, true);\n return new SendResponse(r);\n }\n\n async postFileTypeSend(request: SendRequest): Promise {\n const r = await this.send(\"POST\", \"/sends/file/v2\", request, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n async renewSendFileUploadUrl(\n sendId: string,\n fileId: string\n ): Promise {\n const r = await this.send(\"GET\", \"/sends/\" + sendId + \"/file/\" + fileId, null, true, true);\n return new SendFileUploadDataResponse(r);\n }\n\n postSendFile(sendId: string, fileId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/sends/\" + sendId + \"/file/\" + fileId, data, true, false);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postSendFileLegacy(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/sends/file\", data, true, true);\n return new SendResponse(r);\n }\n\n async putSend(id: string, request: SendRequest): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id, request, true, true);\n return new SendResponse(r);\n }\n\n async putSendRemovePassword(id: string): Promise {\n const r = await this.send(\"PUT\", \"/sends/\" + id + \"/remove-password\", null, true, true);\n return new SendResponse(r);\n }\n\n deleteSend(id: string): Promise {\n return this.send(\"DELETE\", \"/sends/\" + id, null, true, false);\n }\n\n // Cipher APIs\n\n async getCipher(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id, null, true, true);\n return new CipherResponse(r);\n }\n\n async getCipherAdmin(id: string): Promise {\n const r = await this.send(\"GET\", \"/ciphers/\" + id + \"/admin\", null, true, true);\n return new CipherResponse(r);\n }\n\n async getCiphersOrganization(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/ciphers/organization-details?organizationId=\" + organizationId,\n null,\n true,\n true\n );\n return new ListResponse(r, CipherResponse);\n }\n\n async postCipher(request: CipherRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherCreate(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/create\", request, true, true);\n return new CipherResponse(r);\n }\n\n async postCipherAdmin(request: CipherCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/ciphers/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipher(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id, request, true, true);\n return new CipherResponse(r);\n }\n\n async putCipherAdmin(id: string, request: CipherRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/admin\", request, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipher(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id, null, true, false);\n }\n\n deleteCipherAdmin(id: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/admin\", null, true, false);\n }\n\n deleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers\", request, true, false);\n }\n\n deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"DELETE\", \"/ciphers/admin\", request, true, false);\n }\n\n putMoveCiphers(request: CipherBulkMoveRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/move\", request, true, false);\n }\n\n async putShareCipher(id: string, request: CipherShareRequest): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/share\", request, true, true);\n return new CipherResponse(r);\n }\n\n putShareCiphers(request: CipherBulkShareRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/share\", request, true, false);\n }\n\n putCipherCollections(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections\", request, true, false);\n }\n\n putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/collections-admin\", request, true, false);\n }\n\n postPurgeCiphers(\n request: SecretVerificationRequest,\n organizationId: string = null\n ): Promise {\n let path = \"/ciphers/purge\";\n if (organizationId != null) {\n path += \"?organizationId=\" + organizationId;\n }\n return this.send(\"POST\", path, request, true, false);\n }\n\n postImportCiphers(request: ImportCiphersRequest): Promise {\n return this.send(\"POST\", \"/ciphers/import\", request, true, false);\n }\n\n postImportOrganizationCiphers(\n organizationId: string,\n request: ImportOrganizationCiphersRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/ciphers/import-organization?organizationId=\" + organizationId,\n request,\n true,\n false\n );\n }\n\n putDeleteCipher(id: string): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/delete\", null, true, false);\n }\n\n putDeleteCipherAdmin(id: string): Promise {\n return this.send(\"PUT\", \"/ciphers/\" + id + \"/delete-admin\", null, true, false);\n }\n\n putDeleteManyCiphers(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/delete\", request, true, false);\n }\n\n putDeleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise {\n return this.send(\"PUT\", \"/ciphers/delete-admin\", request, true, false);\n }\n\n async putRestoreCipher(id: string): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/restore\", null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreCipherAdmin(id: string): Promise {\n const r = await this.send(\"PUT\", \"/ciphers/\" + id + \"/restore-admin\", null, true, true);\n return new CipherResponse(r);\n }\n\n async putRestoreManyCiphers(\n request: CipherBulkDeleteRequest\n ): Promise> {\n const r = await this.send(\"PUT\", \"/ciphers/restore\", request, true, true);\n return new ListResponse(r, CipherResponse);\n }\n\n // Attachments APIs\n\n async getAttachmentData(\n cipherId: string,\n attachmentId: string,\n emergencyAccessId?: string\n ): Promise {\n const path =\n (emergencyAccessId != null ? \"/emergency-access/\" + emergencyAccessId + \"/\" : \"/ciphers/\") +\n cipherId +\n \"/attachment/\" +\n attachmentId;\n const r = await this.send(\"GET\", path, null, true, true);\n return new AttachmentResponse(r);\n }\n\n async postCipherAttachment(\n id: string,\n request: AttachmentRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/v2\", request, true, true);\n return new AttachmentUploadDataResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment\", data, true, true);\n return new CipherResponse(r);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async postCipherAttachmentAdminLegacy(id: string, data: FormData): Promise {\n const r = await this.send(\"POST\", \"/ciphers/\" + id + \"/attachment-admin\", data, true, true);\n return new CipherResponse(r);\n }\n\n deleteCipherAttachment(id: string, attachmentId: string): Promise {\n return this.send(\"DELETE\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, null, true, false);\n }\n\n deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/admin\",\n null,\n true,\n false\n );\n }\n\n postShareCipherAttachment(\n id: string,\n attachmentId: string,\n data: FormData,\n organizationId: string\n ): Promise {\n return this.send(\n \"POST\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/share?organizationId=\" + organizationId,\n data,\n true,\n false\n );\n }\n\n async renewAttachmentUploadUrl(\n id: string,\n attachmentId: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/ciphers/\" + id + \"/attachment/\" + attachmentId + \"/renew\",\n null,\n true,\n true\n );\n return new AttachmentUploadDataResponse(r);\n }\n\n postAttachmentFile(id: string, attachmentId: string, data: FormData): Promise {\n return this.send(\"POST\", \"/ciphers/\" + id + \"/attachment/\" + attachmentId, data, true, false);\n }\n\n // Collections APIs\n\n async getCollectionDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/details\",\n null,\n true,\n true\n );\n return new CollectionGroupDetailsResponse(r);\n }\n\n async getUserCollections(): Promise> {\n const r = await this.send(\"GET\", \"/collections\", null, true, true);\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollections(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections\",\n null,\n true,\n true\n );\n return new ListResponse(r, CollectionResponse);\n }\n\n async getCollectionUsers(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n }\n\n async postCollection(\n organizationId: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/collections\",\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollection(\n organizationId: string,\n id: string,\n request: CollectionRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n request,\n true,\n true\n );\n return new CollectionResponse(r);\n }\n\n async putCollectionUsers(\n organizationId: string,\n id: string,\n request: SelectionReadOnlyRequest[]\n ): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteCollection(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id,\n null,\n true,\n false\n );\n }\n\n deleteCollectionUser(\n organizationId: string,\n id: string,\n organizationUserId: string\n ): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/collections/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Groups APIs\n\n async getGroupDetails(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/details\",\n null,\n true,\n true\n );\n return new GroupDetailsResponse(r);\n }\n\n async getGroups(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups\",\n null,\n true,\n true\n );\n return new ListResponse(r, GroupResponse);\n }\n\n async getGroupUsers(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n null,\n true,\n true\n );\n return r;\n }\n\n async postGroup(organizationId: string, request: GroupRequest): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/groups\",\n request,\n true,\n true\n );\n return new GroupResponse(r);\n }\n\n async putGroup(\n organizationId: string,\n id: string,\n request: GroupRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id,\n request,\n true,\n true\n );\n return new GroupResponse(r);\n }\n\n async putGroupUsers(organizationId: string, id: string, request: string[]): Promise {\n await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/users\",\n request,\n true,\n false\n );\n }\n\n deleteGroup(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id,\n null,\n true,\n false\n );\n }\n\n deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/groups/\" + id + \"/user/\" + organizationUserId,\n null,\n true,\n false\n );\n }\n\n // Policy APIs\n\n async getPolicy(organizationId: string, type: PolicyType): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies/\" + type,\n null,\n true,\n true\n );\n return new PolicyResponse(r);\n }\n\n async getPolicies(organizationId: string): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies\",\n null,\n true,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByToken(\n organizationId: string,\n token: string,\n email: string,\n organizationUserId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" +\n organizationId +\n \"/policies/token?\" +\n \"token=\" +\n encodeURIComponent(token) +\n \"&email=\" +\n encodeURIComponent(email) +\n \"&organizationUserId=\" +\n organizationUserId,\n null,\n false,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async getPoliciesByInvitedUser(\n organizationId: string,\n userId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/policies/invited-user?\" + \"userId=\" + userId,\n null,\n false,\n true\n );\n return new ListResponse(r, PolicyResponse);\n }\n\n async putPolicy(\n organizationId: string,\n type: PolicyType,\n request: PolicyRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/policies/\" + type,\n request,\n true,\n true\n );\n return new PolicyResponse(r);\n }\n\n // Organization User APIs\n\n async getOrganizationUser(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n true\n );\n return new OrganizationUserDetailsResponse(r);\n }\n\n async getOrganizationUserGroups(organizationId: string, id: string): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n null,\n true,\n true\n );\n return r;\n }\n\n async getOrganizationUsers(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users\",\n null,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserUserDetailsResponse);\n }\n\n async getOrganizationUserResetPasswordDetails(\n organizationId: string,\n id: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password-details\",\n null,\n true,\n true\n );\n return new OrganizationUserResetPasswordDetailsReponse(r);\n }\n\n async getOrganizationAutoEnrollStatus(\n identifier: string\n ): Promise {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + identifier + \"/auto-enroll-status\",\n null,\n true,\n true\n );\n return new OrganizationAutoEnrollStatusResponse(r);\n }\n\n postOrganizationUserInvite(\n organizationId: string,\n request: OrganizationUserInviteRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/invite\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserReinvite(organizationId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyOrganizationUserReinvite(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n postOrganizationUserAccept(\n organizationId: string,\n id: string,\n request: OrganizationUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postOrganizationUserConfirm(\n organizationId: string,\n id: string,\n request: OrganizationUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postOrganizationUsersPublicKey(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkPublicKeyResponse);\n }\n\n async postOrganizationUserBulkConfirm(\n organizationId: string,\n request: OrganizationUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n putOrganizationUser(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n request,\n true,\n false\n );\n }\n\n putOrganizationUserGroups(\n organizationId: string,\n id: string,\n request: OrganizationUserUpdateGroupsRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/groups\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPasswordEnrollment(\n organizationId: string,\n userId: string,\n request: OrganizationUserResetPasswordEnrollmentRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + userId + \"/reset-password-enrollment\",\n request,\n true,\n false\n );\n }\n\n putOrganizationUserResetPassword(\n organizationId: string,\n id: string,\n request: OrganizationUserResetPasswordRequest\n ): Promise {\n return this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/reset-password\",\n request,\n true,\n false\n );\n }\n\n deleteOrganizationUser(organizationId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users/\" + id,\n null,\n true,\n false\n );\n }\n\n async deleteManyOrganizationUsers(\n organizationId: string,\n request: OrganizationUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"DELETE\",\n \"/organizations/\" + organizationId + \"/users\",\n request,\n true,\n true\n );\n return new ListResponse(r, OrganizationUserBulkResponse);\n }\n\n // Plan APIs\n\n async getPlans(): Promise> {\n const r = await this.send(\"GET\", \"/plans/\", null, true, true);\n return new ListResponse(r, PlanResponse);\n }\n\n async postImportDirectory(organizationId: string, request: ImportDirectoryRequest): Promise {\n return this.send(\"POST\", \"/organizations/\" + organizationId + \"/import\", request, true, false);\n }\n\n async postPublicImportDirectory(request: OrganizationImportRequest): Promise {\n return this.send(\"POST\", \"/public/organization/import\", request, true, false);\n }\n\n async getTaxRates(): Promise> {\n const r = await this.send(\"GET\", \"/plans/sales-tax-rates/\", null, true, true);\n return new ListResponse(r, TaxRateResponse);\n }\n\n // Settings APIs\n\n async getSettingsDomains(): Promise {\n const r = await this.send(\"GET\", \"/settings/domains\", null, true, true);\n return new DomainsResponse(r);\n }\n\n async putSettingsDomains(request: UpdateDomainsRequest): Promise {\n const r = await this.send(\"PUT\", \"/settings/domains\", request, true, true);\n return new DomainsResponse(r);\n }\n\n // Sync APIs\n\n async getSync(): Promise {\n const path = this.isDesktopClient || this.isWebClient ? \"/sync?excludeDomains=true\" : \"/sync\";\n const r = await this.send(\"GET\", path, null, true, true);\n return new SyncResponse(r);\n }\n\n // Two-factor APIs\n\n async getTwoFactorProviders(): Promise> {\n const r = await this.send(\"GET\", \"/two-factor\", null, true, true);\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorOrganizationProviders(\n organizationId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + organizationId + \"/two-factor\",\n null,\n true,\n true\n );\n return new ListResponse(r, TwoFactorProviderResponse);\n }\n\n async getTwoFactorAuthenticator(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async getTwoFactorEmail(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async getTwoFactorDuo(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorOrganizationDuo(\n organizationId: string,\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + organizationId + \"/two-factor/get-duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async getTwoFactorYubiKey(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async getTwoFactorWebAuthn(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async getTwoFactorWebAuthnChallenge(\n request: SecretVerificationRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-webauthn-challenge\", request, true, true);\n return new ChallengeResponse(r);\n }\n\n async getTwoFactorRecover(request: SecretVerificationRequest): Promise {\n const r = await this.send(\"POST\", \"/two-factor/get-recover\", request, true, true);\n return new TwoFactorRecoverResponse(r);\n }\n\n async putTwoFactorAuthenticator(\n request: UpdateTwoFactorAuthenticatorRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/authenticator\", request, true, true);\n return new TwoFactorAuthenticatorResponse(r);\n }\n\n async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/email\", request, true, true);\n return new TwoFactorEmailResponse(r);\n }\n\n async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/duo\", request, true, true);\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorOrganizationDuo(\n organizationId: string,\n request: UpdateTwoFactorDuoRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/duo\",\n request,\n true,\n true\n );\n return new TwoFactorDuoResponse(r);\n }\n\n async putTwoFactorYubiKey(\n request: UpdateTwoFactorYubioOtpRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/yubikey\", request, true, true);\n return new TwoFactorYubiKeyResponse(r);\n }\n\n async putTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnRequest\n ): Promise {\n const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n const data: any = Object.assign({}, request);\n\n data.deviceResponse = {\n id: request.deviceResponse.id,\n rawId: btoa(request.deviceResponse.id),\n type: request.deviceResponse.type,\n extensions: request.deviceResponse.getClientExtensionResults(),\n response: {\n AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n },\n };\n\n const r = await this.send(\"PUT\", \"/two-factor/webauthn\", data, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async deleteTwoFactorWebAuthn(\n request: UpdateTwoFactorWebAuthnDeleteRequest\n ): Promise {\n const r = await this.send(\"DELETE\", \"/two-factor/webauthn\", request, true, true);\n return new TwoFactorWebAuthnResponse(r);\n }\n\n async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise {\n const r = await this.send(\"PUT\", \"/two-factor/disable\", request, true, true);\n return new TwoFactorProviderResponse(r);\n }\n\n async putTwoFactorOrganizationDisable(\n organizationId: string,\n request: TwoFactorProviderRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/organizations/\" + organizationId + \"/two-factor/disable\",\n request,\n true,\n true\n );\n return new TwoFactorProviderResponse(r);\n }\n\n postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise {\n return this.send(\"POST\", \"/two-factor/recover\", request, false, false);\n }\n\n postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email\", request, true, false);\n }\n\n postTwoFactorEmail(request: TwoFactorEmailRequest): Promise {\n return this.send(\"POST\", \"/two-factor/send-email-login\", request, false, false);\n }\n\n async getDeviceVerificationSettings(): Promise {\n const r = await this.send(\n \"GET\",\n \"/two-factor/get-device-verification-settings\",\n null,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n async putDeviceVerificationSettings(\n request: DeviceVerificationRequest\n ): Promise {\n const r = await this.send(\n \"PUT\",\n \"/two-factor/device-verification-settings\",\n request,\n true,\n true\n );\n return new DeviceVerificationResponse(r);\n }\n\n // Emergency Access APIs\n\n async getEmergencyAccessTrusted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/trusted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n }\n\n async getEmergencyAccessGranted(): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/granted\", null, true, true);\n return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n }\n\n async getEmergencyAccess(id: string): Promise {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id, null, true, true);\n return new EmergencyAccessGranteeDetailsResponse(r);\n }\n\n async getEmergencyGrantorPolicies(id: string): Promise> {\n const r = await this.send(\"GET\", \"/emergency-access/\" + id + \"/policies\", null, true, true);\n return new ListResponse(r, PolicyResponse);\n }\n\n putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise {\n return this.send(\"PUT\", \"/emergency-access/\" + id, request, true, false);\n }\n\n deleteEmergencyAccess(id: string): Promise {\n return this.send(\"DELETE\", \"/emergency-access/\" + id, null, true, false);\n }\n\n postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/invite\", request, true, false);\n }\n\n postEmergencyAccessReinvite(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reinvite\", null, true, false);\n }\n\n postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/accept\", request, true, false);\n }\n\n postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/confirm\", request, true, false);\n }\n\n postEmergencyAccessInitiate(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/initiate\", null, true, false);\n }\n\n postEmergencyAccessApprove(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/approve\", null, true, false);\n }\n\n postEmergencyAccessReject(id: string): Promise {\n return this.send(\"POST\", \"/emergency-access/\" + id + \"/reject\", null, true, false);\n }\n\n async postEmergencyAccessTakeover(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/takeover\", null, true, true);\n return new EmergencyAccessTakeoverResponse(r);\n }\n\n async postEmergencyAccessPassword(\n id: string,\n request: EmergencyAccessPasswordRequest\n ): Promise {\n await this.send(\"POST\", \"/emergency-access/\" + id + \"/password\", request, true, true);\n }\n\n async postEmergencyAccessView(id: string): Promise {\n const r = await this.send(\"POST\", \"/emergency-access/\" + id + \"/view\", null, true, true);\n return new EmergencyAccessViewResponse(r);\n }\n\n // Organization APIs\n\n async getOrganization(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id, null, true, true);\n return new OrganizationResponse(r);\n }\n\n async getOrganizationBilling(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/billing\", null, true, true);\n return new BillingResponse(r);\n }\n\n async getOrganizationSubscription(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/subscription\", null, true, true);\n return new OrganizationSubscriptionResponse(r);\n }\n\n async getCloudCommunicationsEnabled(): Promise {\n const r = await this.send(\"GET\", \"/organizations/connections/enabled\", null, true, true);\n return r as boolean;\n }\n\n async getOrganizationConnection(\n id: string,\n type: OrganizationConnectionType,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"GET\", `/organizations/connections/${id}/${type}`, null, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async createOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig }\n ): Promise> {\n const r = await this.send(\"POST\", \"/organizations/connections/\", request, true, true);\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async updateOrganizationConnection(\n request: OrganizationConnectionRequest,\n configType: { new (response: any): TConfig },\n organizationConnectionId?: string\n ): Promise> {\n const r = await this.send(\n \"PUT\",\n \"/organizations/connections/\" + organizationConnectionId,\n request,\n true,\n true\n );\n return new OrganizationConnectionResponse(r, configType);\n }\n\n async deleteOrganizationConnection(id: string): Promise {\n return this.send(\"DELETE\", \"/organizations/connections/\" + id, null, true, false);\n }\n\n async getOrganizationLicense(id: string, installationId: string): Promise {\n return this.send(\n \"GET\",\n \"/organizations/\" + id + \"/license?installationId=\" + installationId,\n null,\n true,\n true\n );\n }\n\n async getOrganizationTaxInfo(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/tax\", null, true, true);\n return new TaxInfoResponse(r);\n }\n\n async getOrganizationSso(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/sso\", null, true, true);\n return new OrganizationSsoResponse(r);\n }\n\n async postOrganization(request: OrganizationCreateRequest): Promise {\n const r = await this.send(\"POST\", \"/organizations\", request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganization(\n id: string,\n request: OrganizationUpdateRequest\n ): Promise {\n const r = await this.send(\"PUT\", \"/organizations/\" + id, request, true, true);\n return new OrganizationResponse(r);\n }\n\n async putOrganizationTaxInfo(\n id: string,\n request: OrganizationTaxInfoUpdateRequest\n ): Promise {\n return this.send(\"PUT\", \"/organizations/\" + id + \"/tax\", request, true, false);\n }\n\n postLeaveOrganization(id: string): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/leave\", null, true, false);\n }\n\n async postOrganizationLicense(data: FormData): Promise {\n const r = await this.send(\"POST\", \"/organizations/license\", data, true, true);\n return new OrganizationResponse(r);\n }\n\n async postOrganizationLicenseUpdate(id: string, data: FormData): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/license\", data, true, false);\n }\n\n async postOrganizationApiKey(\n id: string,\n request: OrganizationApiKeyRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/api-key\", request, true, true);\n return new ApiKeyResponse(r);\n }\n\n async getOrganizationApiKeyInformation(\n id: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/organizations/\" + id + \"/api-key-information\",\n null,\n true,\n true\n );\n return new ListResponse(r, OrganizationApiKeyInformationResponse);\n }\n\n async postOrganizationRotateApiKey(\n id: string,\n request: OrganizationApiKeyRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/organizations/\" + id + \"/rotate-api-key\",\n request,\n true,\n true\n );\n return new ApiKeyResponse(r);\n }\n\n async postOrganizationSso(\n id: string,\n request: OrganizationSsoRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/sso\", request, true, true);\n return new OrganizationSsoResponse(r);\n }\n\n async postOrganizationUpgrade(\n id: string,\n request: OrganizationUpgradeRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/upgrade\", request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationUpdateSubscription(\n id: string,\n request: OrganizationSubscriptionUpdateRequest\n ): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/subscription\", request, true, false);\n }\n\n async postOrganizationSeat(id: string, request: SeatRequest): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/seat\", request, true, true);\n return new PaymentResponse(r);\n }\n\n async postOrganizationStorage(id: string, request: StorageRequest): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/storage\", request, true, true);\n return new PaymentResponse(r);\n }\n\n postOrganizationPayment(id: string, request: PaymentRequest): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/payment\", request, true, false);\n }\n\n postOrganizationVerifyBank(id: string, request: VerifyBankRequest): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/verify-bank\", request, true, false);\n }\n\n postOrganizationCancel(id: string): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/cancel\", null, true, false);\n }\n\n postOrganizationReinstate(id: string): Promise {\n return this.send(\"POST\", \"/organizations/\" + id + \"/reinstate\", null, true, false);\n }\n\n deleteOrganization(id: string, request: SecretVerificationRequest): Promise {\n return this.send(\"DELETE\", \"/organizations/\" + id, request, true, false);\n }\n\n async getOrganizationKeys(id: string): Promise {\n const r = await this.send(\"GET\", \"/organizations/\" + id + \"/keys\", null, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n async postOrganizationKeys(\n id: string,\n request: OrganizationKeysRequest\n ): Promise {\n const r = await this.send(\"POST\", \"/organizations/\" + id + \"/keys\", request, true, true);\n return new OrganizationKeysResponse(r);\n }\n\n // Provider APIs\n\n async postProviderSetup(id: string, request: ProviderSetupRequest) {\n const r = await this.send(\"POST\", \"/providers/\" + id + \"/setup\", request, true, true);\n return new ProviderResponse(r);\n }\n\n async getProvider(id: string) {\n const r = await this.send(\"GET\", \"/providers/\" + id, null, true, true);\n return new ProviderResponse(r);\n }\n\n async putProvider(id: string, request: ProviderUpdateRequest) {\n const r = await this.send(\"PUT\", \"/providers/\" + id, request, true, true);\n return new ProviderResponse(r);\n }\n\n // Provider User APIs\n\n async getProviderUsers(\n providerId: string\n ): Promise> {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users\", null, true, true);\n return new ListResponse(r, ProviderUserUserDetailsResponse);\n }\n\n async getProviderUser(providerId: string, id: string): Promise {\n const r = await this.send(\"GET\", \"/providers/\" + providerId + \"/users/\" + id, null, true, true);\n return new ProviderUserResponse(r);\n }\n\n postProviderUserInvite(providerId: string, request: ProviderUserInviteRequest): Promise {\n return this.send(\"POST\", \"/providers/\" + providerId + \"/users/invite\", request, true, false);\n }\n\n postProviderUserReinvite(providerId: string, id: string): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/reinvite\",\n null,\n true,\n false\n );\n }\n\n async postManyProviderUserReinvite(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/reinvite\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async postProviderUserBulkConfirm(\n providerId: string,\n request: ProviderUserBulkConfirmRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/confirm\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n async deleteManyProviderUsers(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\"DELETE\", \"/providers/\" + providerId + \"/users\", request, true, true);\n return new ListResponse(r, ProviderUserBulkResponse);\n }\n\n postProviderUserAccept(\n providerId: string,\n id: string,\n request: ProviderUserAcceptRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/accept\",\n request,\n true,\n false\n );\n }\n\n postProviderUserConfirm(\n providerId: string,\n id: string,\n request: ProviderUserConfirmRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/\" + id + \"/confirm\",\n request,\n true,\n false\n );\n }\n\n async postProviderUsersPublicKey(\n providerId: string,\n request: ProviderUserBulkRequest\n ): Promise> {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/users/public-keys\",\n request,\n true,\n true\n );\n return new ListResponse(r, ProviderUserBulkPublicKeyResponse);\n }\n\n putProviderUser(\n providerId: string,\n id: string,\n request: ProviderUserUpdateRequest\n ): Promise {\n return this.send(\"PUT\", \"/providers/\" + providerId + \"/users/\" + id, request, true, false);\n }\n\n deleteProviderUser(providerId: string, id: string): Promise {\n return this.send(\"DELETE\", \"/providers/\" + providerId + \"/users/\" + id, null, true, false);\n }\n\n // Provider Organization APIs\n\n async getProviderClients(\n providerId: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n \"/providers/\" + providerId + \"/organizations\",\n null,\n true,\n true\n );\n return new ListResponse(r, ProviderOrganizationOrganizationDetailsResponse);\n }\n\n postProviderAddOrganization(\n providerId: string,\n request: ProviderAddOrganizationRequest\n ): Promise {\n return this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations/add\",\n request,\n true,\n false\n );\n }\n\n async postProviderCreateOrganization(\n providerId: string,\n request: ProviderOrganizationCreateRequest\n ): Promise {\n const r = await this.send(\n \"POST\",\n \"/providers/\" + providerId + \"/organizations\",\n request,\n true,\n true\n );\n return new ProviderOrganizationResponse(r);\n }\n\n deleteProviderOrganization(providerId: string, id: string): Promise {\n return this.send(\n \"DELETE\",\n \"/providers/\" + providerId + \"/organizations/\" + id,\n null,\n true,\n false\n );\n }\n\n // Event APIs\n\n async getEvents(start: string, end: string, token: string): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsCipher(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/ciphers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganization(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/organizations/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsOrganizationUser(\n organizationId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/organizations/\" + organizationId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProvider(\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\"/providers/\" + id + \"/events\", start, end, token),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async getEventsProviderUser(\n providerId: string,\n id: string,\n start: string,\n end: string,\n token: string\n ): Promise> {\n const r = await this.send(\n \"GET\",\n this.addEventParameters(\n \"/providers/\" + providerId + \"/users/\" + id + \"/events\",\n start,\n end,\n token\n ),\n null,\n true,\n true\n );\n return new ListResponse(r, EventResponse);\n }\n\n async postEventsCollect(request: EventRequest[]): Promise {\n const authHeader = await this.getActiveBearerToken();\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n const response = await this.fetch(\n new Request(this.environmentService.getEventsUrl() + \"/collect\", {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: \"POST\",\n body: JSON.stringify(request),\n headers: headers,\n })\n );\n if (response.status !== 200) {\n return Promise.reject(\"Event post failed.\");\n }\n }\n\n // User APIs\n\n async getUserPublicKey(id: string): Promise {\n const r = await this.send(\"GET\", \"/users/\" + id + \"/public-key\", null, true, true);\n return new UserKeyResponse(r);\n }\n\n // HIBP APIs\n\n async getHibpBreach(username: string): Promise {\n const r = await this.send(\"GET\", \"/hibp/breach?username=\" + username, null, true, true);\n return r.map((a: any) => new BreachAccountResponse(a));\n }\n\n // Misc\n\n async postBitPayInvoice(request: BitPayInvoiceRequest): Promise {\n const r = await this.send(\"POST\", \"/bitpay-invoice\", request, true, true);\n return r as string;\n }\n\n async postSetupPayment(): Promise {\n const r = await this.send(\"POST\", \"/setup-payment\", null, true, true);\n return r as string;\n }\n\n // Key Connector\n\n async getUserKeyFromKeyConnector(keyConnectorUrl: string): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n\n return new KeyConnectorUserKeyResponse(await response.json());\n }\n\n async postUserKeyToKeyConnector(\n keyConnectorUrl: string,\n request: KeyConnectorUserKeyRequest\n ): Promise {\n const authHeader = await this.getActiveBearerToken();\n\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/user-keys\", {\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Accept: \"application/json\",\n Authorization: \"Bearer \" + authHeader,\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n body: JSON.stringify(request),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async getKeyConnectorAlive(keyConnectorUrl: string) {\n const response = await this.fetch(\n new Request(keyConnectorUrl + \"/alive\", {\n cache: \"no-store\",\n method: \"GET\",\n headers: new Headers({\n Accept: \"application/json\",\n \"Content-Type\": \"application/json; charset=utf-8\",\n }),\n })\n );\n\n if (response.status !== 200) {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n // Helpers\n\n async getActiveBearerToken(): Promise {\n let accessToken = await this.tokenService.getToken();\n if (await this.tokenService.tokenNeedsRefresh()) {\n await this.doAuthRefresh();\n accessToken = await this.tokenService.getToken();\n }\n return accessToken;\n }\n\n async fetch(request: Request): Promise {\n if (request.method === \"GET\") {\n request.headers.set(\"Cache-Control\", \"no-store\");\n request.headers.set(\"Pragma\", \"no-cache\");\n }\n request.headers.set(\"Bitwarden-Client-Name\", this.platformUtilsService.getClientType());\n request.headers.set(\n \"Bitwarden-Client-Version\",\n await this.platformUtilsService.getApplicationVersion()\n );\n return this.nativeFetch(request);\n }\n\n nativeFetch(request: Request): Promise {\n return fetch(request);\n }\n\n async preValidateSso(identifier: string): Promise {\n if (identifier == null || identifier === \"\") {\n throw new Error(\"Organization Identifier was not provided.\");\n }\n const headers = new Headers({\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + path, {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"GET\",\n })\n );\n\n if (response.status === 200) {\n const body = await response.json();\n return new SsoPreValidateResponse(body);\n } else {\n const error = await this.handleError(response, false, true);\n return Promise.reject(error);\n }\n }\n\n async postCreateSponsorship(\n sponsoredOrgId: string,\n request: OrganizationSponsorshipCreateRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoredOrgId +\n \"/families-for-enterprise\",\n request,\n true,\n false\n );\n }\n\n async getSponsorshipSyncStatus(\n sponsoredOrgId: string\n ): Promise {\n const response = await this.send(\n \"GET\",\n \"/organization/sponsorship/\" + sponsoredOrgId + \"/sync-status\",\n null,\n true,\n true\n );\n return new OrganizationSponsorshipSyncStatusResponse(response);\n }\n\n async deleteRevokeSponsorship(sponsoringOrganizationId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/\" +\n (this.platformUtilsService.isSelfHost() ? \"self-hosted/\" : \"\") +\n sponsoringOrganizationId,\n null,\n true,\n false\n );\n }\n\n async deleteRemoveSponsorship(sponsoringOrgId: string): Promise {\n return await this.send(\n \"DELETE\",\n \"/organization/sponsorship/sponsored/\" + sponsoringOrgId,\n null,\n true,\n false\n );\n }\n\n async postPreValidateSponsorshipToken(sponsorshipToken: string): Promise {\n const r = await this.send(\n \"POST\",\n \"/organization/sponsorship/validate-token?sponsorshipToken=\" +\n encodeURIComponent(sponsorshipToken),\n null,\n true,\n true\n );\n return r as boolean;\n }\n\n async postRedeemSponsorship(\n sponsorshipToken: string,\n request: OrganizationSponsorshipRedeemRequest\n ): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/redeem?sponsorshipToken=\" + encodeURIComponent(sponsorshipToken),\n request,\n true,\n false\n );\n }\n\n async postResendSponsorshipOffer(sponsoringOrgId: string): Promise {\n return await this.send(\n \"POST\",\n \"/organization/sponsorship/\" + sponsoringOrgId + \"/families-for-enterprise/resend\",\n null,\n true,\n false\n );\n }\n\n protected async doAuthRefresh(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken != null && refreshToken !== \"\") {\n return this.doRefreshToken();\n }\n\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n if (!Utils.isNullOrWhitespace(clientId) && !Utils.isNullOrWhitespace(clientSecret)) {\n return this.doApiTokenRefresh();\n }\n\n throw new Error(\"Cannot refresh token, no refresh token or api keys are stored\");\n }\n\n protected async doRefreshToken(): Promise {\n const refreshToken = await this.tokenService.getRefreshToken();\n if (refreshToken == null || refreshToken === \"\") {\n throw new Error();\n }\n const headers = new Headers({\n \"Content-Type\": \"application/x-www-form-urlencoded; charset=utf-8\",\n Accept: \"application/json\",\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const decodedToken = await this.tokenService.decodeToken();\n const response = await this.fetch(\n new Request(this.environmentService.getIdentityUrl() + \"/connect/token\", {\n body: this.qsStringify({\n grant_type: \"refresh_token\",\n client_id: decodedToken.client_id,\n refresh_token: refreshToken,\n }),\n cache: \"no-store\",\n credentials: this.getCredentials(),\n headers: headers,\n method: \"POST\",\n })\n );\n\n if (response.status === 200) {\n const responseJson = await response.json();\n const tokenResponse = new IdentityTokenResponse(responseJson);\n await this.tokenService.setTokens(\n tokenResponse.accessToken,\n tokenResponse.refreshToken,\n null\n );\n } else {\n const error = await this.handleError(response, true, true);\n return Promise.reject(error);\n }\n }\n\n protected async doApiTokenRefresh(): Promise {\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const appId = await this.appIdService.getAppId();\n const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n\n const tokenRequest = new ApiTokenRequest(\n clientId,\n clientSecret,\n new TokenRequestTwoFactor(),\n deviceRequest\n );\n\n const response = await this.postIdentityToken(tokenRequest);\n if (!(response instanceof IdentityTokenResponse)) {\n throw new Error(\"Invalid response received when refreshing api token\");\n }\n\n await this.tokenService.setToken(response.accessToken);\n }\n\n private async send(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body: any,\n authed: boolean,\n hasResponse: boolean,\n apiUrl?: string,\n alterHeaders?: (headers: Headers) => void\n ): Promise {\n apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.environmentService.getApiUrl() : apiUrl;\n\n const requestUrl = apiUrl + path;\n // Prevent directory traversal from malicious paths\n if (new URL(requestUrl).href !== requestUrl) {\n return Promise.reject(\"Invalid request url path.\");\n }\n\n const headers = new Headers({\n \"Device-Type\": this.deviceType,\n });\n if (this.customUserAgent != null) {\n headers.set(\"User-Agent\", this.customUserAgent);\n }\n\n const requestInit: RequestInit = {\n cache: \"no-store\",\n credentials: this.getCredentials(),\n method: method,\n };\n\n if (authed) {\n const authHeader = await this.getActiveBearerToken();\n headers.set(\"Authorization\", \"Bearer \" + authHeader);\n }\n if (body != null) {\n if (typeof body === \"string\") {\n requestInit.body = body;\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded; charset=utf-8\");\n } else if (typeof body === \"object\") {\n if (body instanceof FormData) {\n requestInit.body = body;\n } else {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n requestInit.body = JSON.stringify(body);\n }\n }\n }\n if (hasResponse) {\n headers.set(\"Accept\", \"application/json\");\n }\n if (alterHeaders != null) {\n alterHeaders(headers);\n }\n\n requestInit.headers = headers;\n const response = await this.fetch(new Request(requestUrl, requestInit));\n\n if (hasResponse && response.status === 200) {\n const responseJson = await response.json();\n return responseJson;\n } else if (response.status !== 200) {\n const error = await this.handleError(response, false, authed);\n return Promise.reject(error);\n }\n }\n\n private async handleError(\n response: Response,\n tokenError: boolean,\n authed: boolean\n ): Promise {\n if (\n authed &&\n ((tokenError && response.status === 400) ||\n response.status === 401 ||\n response.status === 403)\n ) {\n await this.logoutCallback(true);\n return null;\n }\n\n let responseJson: any = null;\n if (this.isJsonResponse(response)) {\n responseJson = await response.json();\n } else if (this.isTextResponse(response)) {\n responseJson = { Message: await response.text() };\n }\n\n return new ErrorResponse(responseJson, response.status, tokenError);\n }\n\n private qsStringify(params: any): string {\n return Object.keys(params)\n .map((key) => {\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\");\n }\n\n private getCredentials(): RequestCredentials {\n if (!this.isWebClient || this.environmentService.hasBaseUrl()) {\n return \"include\";\n }\n return undefined;\n }\n\n private addEventParameters(base: string, start: string, end: string, token: string) {\n if (start != null) {\n base += \"?start=\" + start;\n }\n if (end != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"end=\" + end;\n }\n if (token != null) {\n base += base.indexOf(\"?\") > -1 ? \"&\" : \"?\";\n base += \"continuationToken=\" + token;\n }\n return base;\n }\n\n private isJsonResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"application/json\") > -1;\n }\n\n private isTextResponse(response: Response): boolean {\n const typeHeader = response.headers.get(\"content-type\");\n return typeHeader != null && typeHeader.indexOf(\"text\") > -1;\n }\n}\n","import { AppIdService as AppIdServiceAbstraction } from \"../abstractions/appId.service\";\nimport { StorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { Utils } from \"../misc/utils\";\n\nexport class AppIdService implements AppIdServiceAbstraction {\n constructor(private storageService: StorageService) {}\n\n getAppId(): Promise {\n return this.makeAndGetAppId(\"appId\");\n }\n\n getAnonymousAppId(): Promise {\n return this.makeAndGetAppId(\"anonymousAppId\");\n }\n\n private async makeAndGetAppId(key: string) {\n const existingId = await this.storageService.get(key, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n if (existingId != null) {\n return existingId;\n }\n\n const guid = Utils.newGuid();\n await this.storageService.save(key, guid, {\n htmlStorageLocation: HtmlStorageLocation.Local,\n });\n return guid;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { AuditService as AuditServiceAbstraction } from \"../abstractions/audit.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { throttle } from \"../misc/throttle\";\nimport { Utils } from \"../misc/utils\";\nimport { BreachAccountResponse } from \"../models/response/breachAccountResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\n\nconst PwnedPasswordsApi = \"https://api.pwnedpasswords.com/range/\";\n\nexport class AuditService implements AuditServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private apiService: ApiService\n ) {}\n\n @throttle(100, () => \"passwordLeaked\")\n async passwordLeaked(password: string): Promise {\n const hashBytes = await this.cryptoFunctionService.hash(password, \"sha1\");\n const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n const hashStart = hash.substr(0, 5);\n const hashEnding = hash.substr(5);\n\n const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n const leakedHashes = await response.text();\n const match = leakedHashes.split(/\\r?\\n/).find((v) => {\n return v.split(\":\")[0] === hashEnding;\n });\n\n return match != null ? parseInt(match.split(\":\")[1], 10) : 0;\n }\n\n async breachedAccounts(username: string): Promise {\n try {\n return await this.apiService.getHibpBreach(username);\n } catch (e) {\n const error = e as ErrorResponse;\n if (error.statusCode === 404) {\n return [];\n }\n throw new Error();\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { AuthService as AuthServiceAbstraction } from \"../abstractions/auth.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { TwoFactorService } from \"../abstractions/twoFactor.service\";\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { AuthenticationType } from \"../enums/authenticationType\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { ApiLogInStrategy } from \"../misc/logInStrategies/apiLogin.strategy\";\nimport { PasswordLogInStrategy } from \"../misc/logInStrategies/passwordLogin.strategy\";\nimport { SsoLogInStrategy } from \"../misc/logInStrategies/ssoLogin.strategy\";\nimport { AuthResult } from \"../models/domain/authResult\";\nimport {\n ApiLogInCredentials,\n PasswordLogInCredentials,\n SsoLogInCredentials,\n} from \"../models/domain/logInCredentials\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TokenRequestTwoFactor } from \"../models/request/identityToken/tokenRequestTwoFactor\";\nimport { PreloginRequest } from \"../models/request/preloginRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\n\nconst sessionTimeoutLength = 2 * 60 * 1000; // 2 minutes\n\nexport class AuthService implements AuthServiceAbstraction {\n get email(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy ? this.logInStrategy.email : null;\n }\n\n get masterPasswordHash(): string {\n return this.logInStrategy instanceof PasswordLogInStrategy\n ? this.logInStrategy.masterPasswordHash\n : null;\n }\n\n private logInStrategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy;\n private sessionTimeout: any;\n\n constructor(\n protected cryptoService: CryptoService,\n protected apiService: ApiService,\n protected tokenService: TokenService,\n protected appIdService: AppIdService,\n protected platformUtilsService: PlatformUtilsService,\n protected messagingService: MessagingService,\n protected logService: LogService,\n protected keyConnectorService: KeyConnectorService,\n protected environmentService: EnvironmentService,\n protected stateService: StateService,\n protected twoFactorService: TwoFactorService,\n protected i18nService: I18nService\n ) {}\n\n async logIn(\n credentials: ApiLogInCredentials | PasswordLogInCredentials | SsoLogInCredentials\n ): Promise {\n this.clearState();\n\n let strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy;\n\n if (credentials.type === AuthenticationType.Password) {\n strategy = new PasswordLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this\n );\n } else if (credentials.type === AuthenticationType.Sso) {\n strategy = new SsoLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.keyConnectorService\n );\n } else if (credentials.type === AuthenticationType.Api) {\n strategy = new ApiLogInStrategy(\n this.cryptoService,\n this.apiService,\n this.tokenService,\n this.appIdService,\n this.platformUtilsService,\n this.messagingService,\n this.logService,\n this.stateService,\n this.twoFactorService,\n this.environmentService,\n this.keyConnectorService\n );\n }\n\n const result = await strategy.logIn(credentials as any);\n\n if (result?.requiresTwoFactor) {\n this.saveState(strategy);\n }\n return result;\n }\n\n async logInTwoFactor(\n twoFactor: TokenRequestTwoFactor,\n captchaResponse: string\n ): Promise {\n if (this.logInStrategy == null) {\n throw new Error(this.i18nService.t(\"sessionTimeout\"));\n }\n\n try {\n const result = await this.logInStrategy.logInTwoFactor(twoFactor, captchaResponse);\n\n // Only clear state if 2FA token has been accepted, otherwise we need to be able to try again\n if (!result.requiresTwoFactor && !result.requiresCaptcha) {\n this.clearState();\n }\n return result;\n } catch (e) {\n // API exceptions are okay, but if there are any unhandled client-side errors then clear state to be safe\n if (!(e instanceof ErrorResponse)) {\n this.clearState();\n }\n throw e;\n }\n }\n\n logOut(callback: () => void) {\n callback();\n this.messagingService.send(\"loggedOut\");\n }\n\n authingWithApiKey(): boolean {\n return this.logInStrategy instanceof ApiLogInStrategy;\n }\n\n authingWithSso(): boolean {\n return this.logInStrategy instanceof SsoLogInStrategy;\n }\n\n authingWithPassword(): boolean {\n return this.logInStrategy instanceof PasswordLogInStrategy;\n }\n\n async getAuthStatus(userId?: string): Promise {\n const isAuthenticated = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!isAuthenticated) {\n return AuthenticationStatus.LoggedOut;\n }\n\n // Keys aren't stored for a device that is locked or logged out\n // Make sure we're logged in before checking this, otherwise we could mix up those states\n const neverLock =\n (await this.cryptoService.hasKeyStored(KeySuffixOptions.Auto, userId)) &&\n !(await this.stateService.getEverBeenUnlocked({ userId: userId }));\n if (neverLock) {\n // TODO: This also _sets_ the key so when we check memory in the next line it finds a key.\n // We should refactor here.\n await this.cryptoService.getKey(KeySuffixOptions.Auto, userId);\n }\n\n const hasKeyInMemory = await this.cryptoService.hasKeyInMemory(userId);\n if (!hasKeyInMemory) {\n return AuthenticationStatus.Locked;\n }\n\n return AuthenticationStatus.Unlocked;\n }\n\n async makePreloginKey(masterPassword: string, email: string): Promise {\n email = email.trim().toLowerCase();\n let kdf: KdfType = null;\n let kdfIterations: number = null;\n try {\n const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n if (preloginResponse != null) {\n kdf = preloginResponse.kdf;\n kdfIterations = preloginResponse.kdfIterations;\n }\n } catch (e) {\n if (e == null || e.statusCode !== 404) {\n throw e;\n }\n }\n return this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n }\n\n private saveState(strategy: ApiLogInStrategy | PasswordLogInStrategy | SsoLogInStrategy) {\n this.logInStrategy = strategy;\n this.startSessionTimeout();\n }\n\n private clearState() {\n this.logInStrategy = null;\n this.clearSessionTimeout();\n }\n\n private startSessionTimeout() {\n this.clearSessionTimeout();\n this.sessionTimeout = setTimeout(() => this.clearState(), sessionTimeoutLength);\n }\n\n private clearSessionTimeout() {\n if (this.sessionTimeout != null) {\n clearTimeout(this.sessionTimeout);\n }\n }\n}\n","import { LogService } from \"../abstractions/log.service\";\nimport { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n constructor(private logService: LogService) {}\n\n async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise) {\n if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n return await this.azureUploadBlob(url, data);\n } else {\n return await this.azureUploadBlocks(url, data, renewalCallback);\n }\n }\n private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n const urlObject = Utils.getUrl(url);\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": urlObject.searchParams.get(\"sv\"),\n \"Content-Length\": data.buffer.byteLength.toString(),\n \"x-ms-blob-type\": \"BlockBlob\",\n });\n\n const request = new Request(url, {\n body: data.buffer,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const blobResponse = await fetch(request);\n\n if (blobResponse.status !== 201) {\n throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n }\n }\n private async azureUploadBlocks(\n url: string,\n data: EncArrayBuffer,\n renewalCallback: () => Promise\n ) {\n const baseUrl = Utils.getUrl(url);\n const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get(\"sv\"));\n let blockIndex = 0;\n const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n const blocksStaged: string[] = [];\n\n if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n throw new Error(\n `Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`\n );\n }\n\n // eslint-disable-next-line\n try {\n while (blockIndex < numBlocks) {\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockUrl = Utils.getUrl(url);\n const blockId = this.encodedBlockId(blockIndex);\n blockUrl.searchParams.append(\"comp\", \"block\");\n blockUrl.searchParams.append(\"blockid\", blockId);\n const start = blockIndex * blockSize;\n const blockData = data.buffer.slice(start, start + blockSize);\n const blockHeaders = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockData.byteLength.toString(),\n });\n\n const blockRequest = new Request(blockUrl.toString(), {\n body: blockData,\n cache: \"no-store\",\n method: \"PUT\",\n headers: blockHeaders,\n });\n\n const blockResponse = await fetch(blockRequest);\n\n if (blockResponse.status !== 201) {\n const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n this.logService.error(message + \"\\n\" + (await blockResponse.json()));\n throw new Error(message);\n }\n\n blocksStaged.push(blockId);\n blockIndex++;\n }\n\n url = await this.renewUrlIfNecessary(url, renewalCallback);\n const blockListUrl = Utils.getUrl(url);\n const blockListXml = this.blockListXml(blocksStaged);\n blockListUrl.searchParams.append(\"comp\", \"blocklist\");\n const headers = new Headers({\n \"x-ms-date\": new Date().toUTCString(),\n \"x-ms-version\": blockListUrl.searchParams.get(\"sv\"),\n \"Content-Length\": blockListXml.length.toString(),\n });\n\n const request = new Request(blockListUrl.toString(), {\n body: blockListXml,\n cache: \"no-store\",\n method: \"PUT\",\n headers: headers,\n });\n\n const response = await fetch(request);\n\n if (response.status !== 201) {\n const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n this.logService.error(message + \"\\n\" + (await response.json()));\n throw new Error(message);\n }\n } catch (e) {\n throw e;\n }\n }\n\n private async renewUrlIfNecessary(\n url: string,\n renewalCallback: () => Promise\n ): Promise {\n const urlObject = Utils.getUrl(url);\n const expiry = new Date(urlObject.searchParams.get(\"se\") ?? \"\");\n\n if (isNaN(expiry.getTime())) {\n expiry.setTime(Date.now() + 3600000);\n }\n\n if (expiry.getTime() < Date.now() + 1000) {\n return await renewalCallback();\n }\n return url;\n }\n\n private encodedBlockId(blockIndex: number) {\n // Encoded blockId max size is 64, so pre-encoding max size is 48\n const utfBlockId = (\n \"000000000000000000000000000000000000000000000000\" + blockIndex.toString()\n ).slice(-48);\n return Utils.fromUtf8ToB64(utfBlockId);\n }\n\n private blockListXml(blockIdList: string[]) {\n let xml = '';\n blockIdList.forEach((blockId) => {\n xml += `${blockId}`;\n });\n xml += \"\";\n return xml;\n }\n\n private getMaxBlockSize(version: string) {\n if (Version.compare(version, \"2019-12-12\") >= 0) {\n return 4000 * 1024 * 1024; // 4000 MiB\n } else if (Version.compare(version, \"2016-05-31\") >= 0) {\n return 100 * 1024 * 1024; // 100 MiB\n } else {\n return 4 * 1024 * 1024; // 4 MiB\n }\n }\n}\n\nclass Version {\n /**\n * Compares two Azure Versions against each other\n * @param a Version to compare\n * @param b Version to compare\n * @returns a number less than zero if b is newer than a, 0 if equal,\n * and greater than zero if a is newer than b\n */\n static compare(a: Required | string, b: Required | string) {\n if (typeof a === \"string\") {\n a = new Version(a);\n }\n\n if (typeof b === \"string\") {\n b = new Version(b);\n }\n\n return a.year !== b.year\n ? a.year - b.year\n : a.month !== b.month\n ? a.month - b.month\n : a.day !== b.day\n ? a.day - b.day\n : 0;\n }\n year = 0;\n month = 0;\n day = 0;\n\n constructor(version: string) {\n try {\n const parts = version.split(\"-\").map((v) => Number.parseInt(v, 10));\n this.year = parts[0];\n this.month = parts[1];\n this.day = parts[2];\n } catch {\n // Ignore error\n }\n }\n /**\n * Compares two Azure Versions against each other\n * @param compareTo Version to compare against\n * @returns a number less than zero if compareTo is newer, 0 if equal,\n * and greater than zero if this is greater than compareTo\n */\n compare(compareTo: Required | string) {\n return Version.compare(this, compareTo);\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { Utils } from \"../misc/utils\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\n\nexport class BitwardenFileUploadService {\n constructor(private apiService: ApiService) {}\n\n async upload(\n encryptedFileName: string,\n encryptedFileData: EncArrayBuffer,\n apiCall: (fd: FormData) => Promise\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encryptedFileData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"data\", blob, encryptedFileName);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\n \"data\",\n Buffer.from(encryptedFileData.buffer) as any,\n {\n filepath: encryptedFileName,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n await apiCall(fd);\n }\n}\n","import { BroadcasterService as BroadcasterServiceAbstraction } from \"../abstractions/broadcaster.service\";\n\nexport class BroadcasterService implements BroadcasterServiceAbstraction {\n subscribers: Map any> = new Map any>();\n\n send(message: any, id?: string) {\n if (id != null) {\n if (this.subscribers.has(id)) {\n this.subscribers.get(id)(message);\n }\n return;\n }\n\n this.subscribers.forEach((value) => {\n value(message);\n });\n }\n\n subscribe(id: string, messageCallback: (message: any) => any) {\n this.subscribers.set(id, messageCallback);\n }\n\n unsubscribe(id: string) {\n if (this.subscribers.has(id)) {\n this.subscribers.delete(id);\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService as CipherServiceAbstraction } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FileUploadService } from \"../abstractions/fileUpload.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService } from \"../abstractions/search.service\";\nimport { SettingsService } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { Attachment } from \"../models/domain/attachment\";\nimport { Card } from \"../models/domain/card\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport Domain from \"../models/domain/domainBase\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { Field } from \"../models/domain/field\";\nimport { Identity } from \"../models/domain/identity\";\nimport { Login } from \"../models/domain/login\";\nimport { LoginUri } from \"../models/domain/loginUri\";\nimport { Password } from \"../models/domain/password\";\nimport { SecureNote } from \"../models/domain/secureNote\";\nimport { SortedCiphersCache } from \"../models/domain/sortedCiphersCache\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { AttachmentRequest } from \"../models/request/attachmentRequest\";\nimport { CipherBulkDeleteRequest } from \"../models/request/cipherBulkDeleteRequest\";\nimport { CipherBulkMoveRequest } from \"../models/request/cipherBulkMoveRequest\";\nimport { CipherBulkRestoreRequest } from \"../models/request/cipherBulkRestoreRequest\";\nimport { CipherBulkShareRequest } from \"../models/request/cipherBulkShareRequest\";\nimport { CipherCollectionsRequest } from \"../models/request/cipherCollectionsRequest\";\nimport { CipherCreateRequest } from \"../models/request/cipherCreateRequest\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CipherShareRequest } from \"../models/request/cipherShareRequest\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { AttachmentView } from \"../models/view/attachmentView\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { FieldView } from \"../models/view/fieldView\";\nimport { PasswordHistoryView } from \"../models/view/passwordHistoryView\";\nimport { View } from \"../models/view/view\";\n\nconst DomainMatchBlacklist = new Map>([\n [\"google.com\", new Set([\"script.google.com\"])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n private sortedCiphersCache: SortedCiphersCache = new SortedCiphersCache(\n this.sortCiphersByLastUsed\n );\n\n constructor(\n private cryptoService: CryptoService,\n private settingsService: SettingsService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private searchService: () => SearchService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async getDecryptedCipherCache(): Promise {\n const decryptedCiphers = await this.stateService.getDecryptedCiphers();\n return decryptedCiphers;\n }\n\n async setDecryptedCipherCache(value: CipherView[]) {\n await this.stateService.setDecryptedCiphers(value);\n if (this.searchService != null) {\n if (value == null) {\n this.searchService().clearIndex();\n } else {\n this.searchService().indexCiphers();\n }\n }\n }\n\n async clearCache(userId?: string): Promise {\n await this.clearDecryptedCiphersState(userId);\n }\n\n async encrypt(\n model: CipherView,\n key?: SymmetricCryptoKey,\n originalCipher: Cipher = null\n ): Promise {\n // Adjust password history\n if (model.id != null) {\n if (originalCipher == null) {\n originalCipher = await this.get(model.id);\n }\n if (originalCipher != null) {\n const existingCipher = await originalCipher.decrypt();\n model.passwordHistory = existingCipher.passwordHistory || [];\n if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n if (\n existingCipher.login.password != null &&\n existingCipher.login.password !== \"\" &&\n existingCipher.login.password !== model.login.password\n ) {\n const ph = new PasswordHistoryView();\n ph.password = existingCipher.login.password;\n ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n } else {\n model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n }\n }\n if (existingCipher.hasFields) {\n const existingHiddenFields = existingCipher.fields.filter(\n (f) =>\n f.type === FieldType.Hidden &&\n f.name != null &&\n f.name !== \"\" &&\n f.value != null &&\n f.value !== \"\"\n );\n const hiddenFields =\n model.fields == null\n ? []\n : model.fields.filter(\n (f) => f.type === FieldType.Hidden && f.name != null && f.name !== \"\"\n );\n existingHiddenFields.forEach((ef) => {\n const matchedField = hiddenFields.find((f) => f.name === ef.name);\n if (matchedField == null || matchedField.value !== ef.value) {\n const ph = new PasswordHistoryView();\n ph.password = ef.name + \": \" + ef.value;\n ph.lastUsedDate = new Date();\n model.passwordHistory.splice(0, 0, ph);\n }\n });\n }\n }\n if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n model.passwordHistory = null;\n } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n // only save last 5 history\n model.passwordHistory = model.passwordHistory.slice(0, 5);\n }\n }\n\n const cipher = new Cipher();\n cipher.id = model.id;\n cipher.folderId = model.folderId;\n cipher.favorite = model.favorite;\n cipher.organizationId = model.organizationId;\n cipher.type = model.type;\n cipher.collectionIds = model.collectionIds;\n cipher.revisionDate = model.revisionDate;\n cipher.reprompt = model.reprompt;\n\n if (key == null && cipher.organizationId != null) {\n key = await this.cryptoService.getOrgKey(cipher.organizationId);\n if (key == null) {\n throw new Error(\"Cannot encrypt cipher for organization. No key.\");\n }\n }\n await Promise.all([\n this.encryptObjProperty(\n model,\n cipher,\n {\n name: null,\n notes: null,\n },\n key\n ),\n this.encryptCipherData(cipher, model, key),\n this.encryptFields(model.fields, key).then((fields) => {\n cipher.fields = fields;\n }),\n this.encryptPasswordHistories(model.passwordHistory, key).then((ph) => {\n cipher.passwordHistory = ph;\n }),\n this.encryptAttachments(model.attachments, key).then((attachments) => {\n cipher.attachments = attachments;\n }),\n ]);\n\n return cipher;\n }\n\n async encryptAttachments(\n attachmentsModel: AttachmentView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (attachmentsModel == null || attachmentsModel.length === 0) {\n return null;\n }\n\n const promises: Promise[] = [];\n const encAttachments: Attachment[] = [];\n attachmentsModel.forEach(async (model) => {\n const attachment = new Attachment();\n attachment.id = model.id;\n attachment.size = model.size;\n attachment.sizeName = model.sizeName;\n attachment.url = model.url;\n const promise = this.encryptObjProperty(\n model,\n attachment,\n {\n fileName: null,\n },\n key\n ).then(async () => {\n if (model.key != null) {\n attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n }\n encAttachments.push(attachment);\n });\n promises.push(promise);\n });\n\n await Promise.all(promises);\n return encAttachments;\n }\n\n async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise {\n if (!fieldsModel || !fieldsModel.length) {\n return null;\n }\n\n const self = this;\n const encFields: Field[] = [];\n await fieldsModel.reduce(async (promise, field) => {\n await promise;\n const encField = await self.encryptField(field, key);\n encFields.push(encField);\n }, Promise.resolve());\n\n return encFields;\n }\n\n async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise {\n const field = new Field();\n field.type = fieldModel.type;\n field.linkedId = fieldModel.linkedId;\n // normalize boolean type field values\n if (fieldModel.type === FieldType.Boolean && fieldModel.value !== \"true\") {\n fieldModel.value = \"false\";\n }\n\n await this.encryptObjProperty(\n fieldModel,\n field,\n {\n name: null,\n value: null,\n },\n key\n );\n\n return field;\n }\n\n async encryptPasswordHistories(\n phModels: PasswordHistoryView[],\n key: SymmetricCryptoKey\n ): Promise {\n if (!phModels || !phModels.length) {\n return null;\n }\n\n const self = this;\n const encPhs: Password[] = [];\n await phModels.reduce(async (promise, ph) => {\n await promise;\n const encPh = await self.encryptPasswordHistory(ph, key);\n encPhs.push(encPh);\n }, Promise.resolve());\n\n return encPhs;\n }\n\n async encryptPasswordHistory(\n phModel: PasswordHistoryView,\n key: SymmetricCryptoKey\n ): Promise {\n const ph = new Password();\n ph.lastUsedDate = phModel.lastUsedDate;\n\n await this.encryptObjProperty(\n phModel,\n ph,\n {\n password: null,\n },\n key\n );\n\n return ph;\n }\n\n async get(id: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n return null;\n }\n\n const localData = await this.stateService.getLocalData();\n return new Cipher(ciphers[id], localData ? localData[id] : null);\n }\n\n async getAll(): Promise {\n const localData = await this.stateService.getLocalData();\n const ciphers = await this.stateService.getEncryptedCiphers();\n const response: Cipher[] = [];\n for (const id in ciphers) {\n // eslint-disable-next-line\n if (ciphers.hasOwnProperty(id)) {\n response.push(new Cipher(ciphers[id], localData ? localData[id] : null));\n }\n }\n return response;\n }\n\n @sequentialize(() => \"getAllDecrypted\")\n async getAllDecrypted(): Promise {\n const userId = await this.stateService.getUserId();\n if ((await this.getDecryptedCipherCache()) != null) {\n if (\n this.searchService != null &&\n (this.searchService().indexedEntityId ?? userId) !== userId\n ) {\n await this.searchService().indexCiphers(userId, await this.getDecryptedCipherCache());\n }\n return await this.getDecryptedCipherCache();\n }\n\n const decCiphers: CipherView[] = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: any[] = [];\n const ciphers = await this.getAll();\n ciphers.forEach(async (cipher) => {\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n await this.setDecryptedCipherCache(decCiphers);\n return decCiphers;\n }\n\n async getAllDecryptedForGrouping(groupingId: string, folder = true): Promise {\n const ciphers = await this.getAllDecrypted();\n\n return ciphers.filter((cipher) => {\n if (cipher.isDeleted) {\n return false;\n }\n if (folder && cipher.folderId === groupingId) {\n return true;\n } else if (\n !folder &&\n cipher.collectionIds != null &&\n cipher.collectionIds.indexOf(groupingId) > -1\n ) {\n return true;\n }\n\n return false;\n });\n }\n\n async getAllDecryptedForUrl(\n url: string,\n includeOtherTypes?: CipherType[],\n defaultMatch: UriMatchType = null\n ): Promise {\n if (url == null && includeOtherTypes == null) {\n return Promise.resolve([]);\n }\n\n const domain = Utils.getDomain(url);\n const eqDomainsPromise =\n domain == null\n ? Promise.resolve([])\n : this.settingsService.getEquivalentDomains().then((eqDomains: any[][]) => {\n let matches: any[] = [];\n eqDomains.forEach((eqDomain) => {\n if (eqDomain.length && eqDomain.indexOf(domain) >= 0) {\n matches = matches.concat(eqDomain);\n }\n });\n\n if (!matches.length) {\n matches.push(domain);\n }\n\n return matches;\n });\n\n const result = await Promise.all([eqDomainsPromise, this.getAllDecrypted()]);\n const matchingDomains = result[0];\n const ciphers = result[1];\n\n if (defaultMatch == null) {\n defaultMatch = await this.stateService.getDefaultUriMatch();\n if (defaultMatch == null) {\n defaultMatch = UriMatchType.Domain;\n }\n }\n\n return ciphers.filter((cipher) => {\n if (cipher.deletedDate != null) {\n return false;\n }\n if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n return true;\n }\n\n if (url != null && cipher.type === CipherType.Login && cipher.login.uris != null) {\n for (let i = 0; i < cipher.login.uris.length; i++) {\n const u = cipher.login.uris[i];\n if (u.uri == null) {\n continue;\n }\n\n const match = u.match == null ? defaultMatch : u.match;\n switch (match) {\n case UriMatchType.Domain:\n if (domain != null && u.domain != null && matchingDomains.indexOf(u.domain) > -1) {\n if (DomainMatchBlacklist.has(u.domain)) {\n const domainUrlHost = Utils.getHost(url);\n if (!DomainMatchBlacklist.get(u.domain).has(domainUrlHost)) {\n return true;\n }\n } else {\n return true;\n }\n }\n break;\n case UriMatchType.Host: {\n const urlHost = Utils.getHost(url);\n if (urlHost != null && urlHost === Utils.getHost(u.uri)) {\n return true;\n }\n break;\n }\n case UriMatchType.Exact:\n if (url === u.uri) {\n return true;\n }\n break;\n case UriMatchType.StartsWith:\n if (url.startsWith(u.uri)) {\n return true;\n }\n break;\n case UriMatchType.RegularExpression:\n try {\n const regex = new RegExp(u.uri, \"i\");\n if (regex.test(url)) {\n return true;\n }\n } catch (e) {\n this.logService.error(e);\n }\n break;\n case UriMatchType.Never:\n default:\n break;\n }\n }\n }\n\n return false;\n });\n }\n\n async getAllFromApiForOrganization(organizationId: string): Promise {\n const ciphers = await this.apiService.getCiphersOrganization(organizationId);\n if (ciphers != null && ciphers.data != null && ciphers.data.length) {\n const decCiphers: CipherView[] = [];\n const promises: any[] = [];\n ciphers.data.forEach((r) => {\n const data = new CipherData(r);\n const cipher = new Cipher(data);\n promises.push(cipher.decrypt().then((c) => decCiphers.push(c)));\n });\n await Promise.all(promises);\n decCiphers.sort(this.getLocaleSortingFunction());\n return decCiphers;\n } else {\n return [];\n }\n }\n\n async getLastUsedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, true, false, autofillOnPageLoad);\n }\n\n async getLastLaunchedForUrl(url: string, autofillOnPageLoad = false): Promise {\n return this.getCipherForUrl(url, false, true, autofillOnPageLoad);\n }\n\n async getNextCipherForUrl(url: string): Promise {\n return this.getCipherForUrl(url, false, false, false);\n }\n\n updateLastUsedIndexForUrl(url: string) {\n this.sortedCiphersCache.updateLastUsedIndex(url);\n }\n\n async updateLastUsedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastUsedDate = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async updateLastLaunchedDate(id: string): Promise {\n let ciphersLocalData = await this.stateService.getLocalData();\n if (!ciphersLocalData) {\n ciphersLocalData = {};\n }\n\n if (ciphersLocalData[id]) {\n ciphersLocalData[id].lastLaunched = new Date().getTime();\n } else {\n ciphersLocalData[id] = {\n lastUsedDate: new Date().getTime(),\n };\n }\n\n await this.stateService.setLocalData(ciphersLocalData);\n\n const decryptedCipherCache = await this.stateService.getDecryptedCiphers();\n if (!decryptedCipherCache) {\n return;\n }\n\n for (let i = 0; i < decryptedCipherCache.length; i++) {\n const cached = decryptedCipherCache[i];\n if (cached.id === id) {\n cached.localData = ciphersLocalData[id];\n break;\n }\n }\n await this.stateService.setDecryptedCiphers(decryptedCipherCache);\n }\n\n async saveNeverDomain(domain: string): Promise {\n if (domain == null) {\n return;\n }\n\n let domains = await this.stateService.getNeverDomains();\n if (!domains) {\n domains = {};\n }\n domains[domain] = null;\n await this.stateService.setNeverDomains(domains);\n }\n\n async saveWithServer(cipher: Cipher): Promise {\n let response: CipherResponse;\n if (cipher.id == null) {\n if (cipher.collectionIds != null) {\n const request = new CipherCreateRequest(cipher);\n response = await this.apiService.postCipherCreate(request);\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.postCipher(request);\n }\n cipher.id = response.id;\n } else {\n const request = new CipherRequest(cipher);\n response = await this.apiService.putCipher(cipher.id, request);\n }\n\n const data = new CipherData(response, cipher.collectionIds);\n await this.upsert(data);\n }\n\n async shareWithServer(\n cipher: CipherView,\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const attachmentPromises: Promise[] = [];\n if (cipher.attachments != null) {\n cipher.attachments.forEach((attachment) => {\n if (attachment.key == null) {\n attachmentPromises.push(\n this.shareAttachmentWithServer(attachment, cipher.id, organizationId)\n );\n }\n });\n }\n await Promise.all(attachmentPromises);\n\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n const encCipher = await this.encrypt(cipher);\n const request = new CipherShareRequest(encCipher);\n const response = await this.apiService.putShareCipher(cipher.id, request);\n const data = new CipherData(response, collectionIds);\n await this.upsert(data);\n }\n\n async shareManyWithServer(\n ciphers: CipherView[],\n organizationId: string,\n collectionIds: string[]\n ): Promise {\n const promises: Promise[] = [];\n const encCiphers: Cipher[] = [];\n for (const cipher of ciphers) {\n cipher.organizationId = organizationId;\n cipher.collectionIds = collectionIds;\n promises.push(\n this.encrypt(cipher).then((c) => {\n encCiphers.push(c);\n })\n );\n }\n await Promise.all(promises);\n const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n try {\n await this.apiService.putShareCiphers(request);\n } catch (e) {\n for (const cipher of ciphers) {\n cipher.organizationId = null;\n cipher.collectionIds = null;\n }\n throw e;\n }\n await this.upsert(encCiphers.map((c) => c.toCipherData()));\n }\n\n saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(unencryptedFile);\n reader.onload = async (evt: any) => {\n try {\n const cData = await this.saveAttachmentRawWithServer(\n cipher,\n unencryptedFile.name,\n evt.target.result,\n admin\n );\n resolve(cData);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = () => {\n reject(\"Error reading file.\");\n };\n });\n }\n\n async saveAttachmentRawWithServer(\n cipher: Cipher,\n filename: string,\n data: ArrayBuffer,\n admin = false\n ): Promise {\n const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n const encFileName = await this.cryptoService.encrypt(filename, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n const request: AttachmentRequest = {\n key: dataEncKey[1].encryptedString,\n fileName: encFileName.encryptedString,\n fileSize: encData.buffer.byteLength,\n adminRequest: admin,\n };\n\n let response: CipherResponse;\n try {\n const uploadDataResponse = await this.apiService.postCipherAttachment(cipher.id, request);\n response = admin ? uploadDataResponse.cipherMiniResponse : uploadDataResponse.cipherResponse;\n await this.fileUploadService.uploadCipherAttachment(\n admin,\n uploadDataResponse,\n encFileName,\n encData\n );\n } catch (e) {\n if (\n (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) ||\n (e as ErrorResponse).statusCode === 405\n ) {\n response = await this.legacyServerAttachmentFileUpload(\n admin,\n cipher.id,\n encFileName,\n encData,\n dataEncKey[1]\n );\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n\n const cData = new CipherData(response, cipher.collectionIds);\n if (!admin) {\n await this.upsert(cData);\n }\n return new Cipher(cData);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerAttachmentFileUpload(\n admin: boolean,\n cipherId: string,\n encFileName: EncString,\n encData: EncArrayBuffer,\n key: EncString\n ) {\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"key\", key.encryptedString);\n fd.append(\"data\", blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"key\", key.encryptedString);\n fd.append(\n \"data\",\n Buffer.from(encData.buffer) as any,\n {\n filepath: encFileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n let response: CipherResponse;\n try {\n if (admin) {\n response = await this.apiService.postCipherAttachmentAdminLegacy(cipherId, fd);\n } else {\n response = await this.apiService.postCipherAttachmentLegacy(cipherId, fd);\n }\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n\n return response;\n }\n\n async saveCollectionsWithServer(cipher: Cipher): Promise {\n const request = new CipherCollectionsRequest(cipher.collectionIds);\n await this.apiService.putCipherCollections(cipher.id, request);\n const data = cipher.toCipherData();\n await this.upsert(data);\n }\n\n async upsert(cipher: CipherData | CipherData[]): Promise {\n let ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n ciphers = {};\n }\n\n if (cipher instanceof CipherData) {\n const c = cipher as CipherData;\n ciphers[c.id] = c;\n } else {\n (cipher as CipherData[]).forEach((c) => {\n ciphers[c.id] = c;\n });\n }\n\n await this.replace(ciphers);\n }\n\n async replace(ciphers: { [id: string]: CipherData }): Promise {\n await this.clearDecryptedCiphersState();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async clear(userId?: string): Promise {\n await this.clearEncryptedCiphersState(userId);\n await this.clearCache(userId);\n }\n\n async moveManyWithServer(ids: string[], folderId: string): Promise {\n await this.apiService.putMoveCiphers(new CipherBulkMoveRequest(ids, folderId));\n\n let ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n ciphers = {};\n }\n\n ids.forEach((id) => {\n // eslint-disable-next-line\n if (ciphers.hasOwnProperty(id)) {\n ciphers[id].folderId = folderId;\n }\n });\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async delete(id: string | string[]): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (ciphers[id] == null) {\n return;\n }\n delete ciphers[id];\n } else {\n (id as string[]).forEach((i) => {\n delete ciphers[i];\n });\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteCipher(id);\n await this.delete(id);\n }\n\n async deleteManyWithServer(ids: string[]): Promise {\n await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.delete(ids);\n }\n\n async deleteAttachment(id: string, attachmentId: string): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n\n // eslint-disable-next-line\n if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) {\n return;\n }\n\n for (let i = 0; i < ciphers[id].attachments.length; i++) {\n if (ciphers[id].attachments[i].id === attachmentId) {\n ciphers[id].attachments.splice(i, 1);\n }\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async deleteAttachmentWithServer(id: string, attachmentId: string): Promise {\n try {\n await this.apiService.deleteCipherAttachment(id, attachmentId);\n } catch (e) {\n return Promise.reject((e as ErrorResponse).getSingleMessage());\n }\n await this.deleteAttachment(id, attachmentId);\n }\n\n sortCiphersByLastUsed(a: CipherView, b: CipherView): number {\n const aLastUsed =\n a.localData && a.localData.lastUsedDate ? (a.localData.lastUsedDate as number) : null;\n const bLastUsed =\n b.localData && b.localData.lastUsedDate ? (b.localData.lastUsedDate as number) : null;\n\n const bothNotNull = aLastUsed != null && bLastUsed != null;\n if (bothNotNull && aLastUsed < bLastUsed) {\n return 1;\n }\n if (aLastUsed != null && bLastUsed == null) {\n return -1;\n }\n\n if (bothNotNull && aLastUsed > bLastUsed) {\n return -1;\n }\n if (bLastUsed != null && aLastUsed == null) {\n return 1;\n }\n\n return 0;\n }\n\n sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number {\n const result = this.sortCiphersByLastUsed(a, b);\n if (result !== 0) {\n return result;\n }\n\n return this.getLocaleSortingFunction()(a, b);\n }\n\n getLocaleSortingFunction(): (a: CipherView, b: CipherView) => number {\n return (a, b) => {\n let aName = a.name;\n let bName = b.name;\n\n if (aName == null && bName != null) {\n return -1;\n }\n if (aName != null && bName == null) {\n return 1;\n }\n if (aName == null && bName == null) {\n return 0;\n }\n\n const result = this.i18nService.collator\n ? this.i18nService.collator.compare(aName, bName)\n : aName.localeCompare(bName);\n\n if (result !== 0 || a.type !== CipherType.Login || b.type !== CipherType.Login) {\n return result;\n }\n\n if (a.login.username != null) {\n aName += a.login.username;\n }\n\n if (b.login.username != null) {\n bName += b.login.username;\n }\n\n return this.i18nService.collator\n ? this.i18nService.collator.compare(aName, bName)\n : aName.localeCompare(bName);\n };\n }\n\n async softDelete(id: string | string[]): Promise {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n const setDeletedDate = (cipherId: string) => {\n if (ciphers[cipherId] == null) {\n return;\n }\n ciphers[cipherId].deletedDate = new Date().toISOString();\n };\n\n if (typeof id === \"string\") {\n setDeletedDate(id);\n } else {\n (id as string[]).forEach(setDeletedDate);\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async softDeleteWithServer(id: string): Promise {\n await this.apiService.putDeleteCipher(id);\n await this.softDelete(id);\n }\n\n async softDeleteManyWithServer(ids: string[]): Promise {\n await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\n await this.softDelete(ids);\n }\n\n async restore(\n cipher: { id: string; revisionDate: string } | { id: string; revisionDate: string }[]\n ) {\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers == null) {\n return;\n }\n\n const clearDeletedDate = (c: { id: string; revisionDate: string }) => {\n if (ciphers[c.id] == null) {\n return;\n }\n ciphers[c.id].deletedDate = null;\n ciphers[c.id].revisionDate = c.revisionDate;\n };\n\n if (cipher.constructor.name === Array.name) {\n (cipher as { id: string; revisionDate: string }[]).forEach(clearDeletedDate);\n } else {\n clearDeletedDate(cipher as { id: string; revisionDate: string });\n }\n\n await this.clearCache();\n await this.stateService.setEncryptedCiphers(ciphers);\n }\n\n async restoreWithServer(id: string): Promise {\n const response = await this.apiService.putRestoreCipher(id);\n await this.restore({ id: id, revisionDate: response.revisionDate });\n }\n\n async restoreManyWithServer(ids: string[]): Promise {\n const response = await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n const restores: { id: string; revisionDate: string }[] = [];\n for (const cipher of response.data) {\n restores.push({ id: cipher.id, revisionDate: cipher.revisionDate });\n }\n await this.restore(restores);\n }\n\n // Helpers\n\n private async shareAttachmentWithServer(\n attachmentView: AttachmentView,\n cipherId: string,\n organizationId: string\n ): Promise {\n const attachmentResponse = await this.apiService.nativeFetch(\n new Request(attachmentView.url, { cache: \"no-store\" })\n );\n if (attachmentResponse.status !== 200) {\n throw Error(\"Failed to download attachment: \" + attachmentResponse.status.toString());\n }\n\n const buf = await attachmentResponse.arrayBuffer();\n const decBuf = await this.cryptoService.decryptFromBytes(buf, null);\n const key = await this.cryptoService.getOrgKey(organizationId);\n const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n const dataEncKey = await this.cryptoService.makeEncKey(key);\n const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n const fd = new FormData();\n try {\n const blob = new Blob([encData.buffer], { type: \"application/octet-stream\" });\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\"data\", blob, encFileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"key\", dataEncKey[1].encryptedString);\n fd.append(\n \"data\",\n Buffer.from(encData.buffer) as any,\n {\n filepath: encFileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n\n try {\n await this.apiService.postShareCipherAttachment(\n cipherId,\n attachmentView.id,\n fd,\n organizationId\n );\n } catch (e) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n }\n }\n\n private async encryptObjProperty(\n model: V,\n obj: D,\n map: any,\n key: SymmetricCryptoKey\n ): Promise {\n const promises = [];\n const self = this;\n\n for (const prop in map) {\n // eslint-disable-next-line\n if (!map.hasOwnProperty(prop)) {\n continue;\n }\n\n (function (theProp, theObj) {\n const p = Promise.resolve()\n .then(() => {\n const modelProp = (model as any)[map[theProp] || theProp];\n if (modelProp && modelProp !== \"\") {\n return self.cryptoService.encrypt(modelProp, key);\n }\n return null;\n })\n .then((val: EncString) => {\n (theObj as any)[theProp] = val;\n });\n promises.push(p);\n })(prop, obj);\n }\n\n await Promise.all(promises);\n }\n\n private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n switch (cipher.type) {\n case CipherType.Login:\n cipher.login = new Login();\n cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n cipher.login.autofillOnPageLoad = model.login.autofillOnPageLoad;\n await this.encryptObjProperty(\n model.login,\n cipher.login,\n {\n username: null,\n password: null,\n totp: null,\n },\n key\n );\n\n if (model.login.uris != null) {\n cipher.login.uris = [];\n for (let i = 0; i < model.login.uris.length; i++) {\n const loginUri = new LoginUri();\n loginUri.match = model.login.uris[i].match;\n await this.encryptObjProperty(\n model.login.uris[i],\n loginUri,\n {\n uri: null,\n },\n key\n );\n cipher.login.uris.push(loginUri);\n }\n }\n return;\n case CipherType.SecureNote:\n cipher.secureNote = new SecureNote();\n cipher.secureNote.type = model.secureNote.type;\n return;\n case CipherType.Card:\n cipher.card = new Card();\n await this.encryptObjProperty(\n model.card,\n cipher.card,\n {\n cardholderName: null,\n brand: null,\n number: null,\n expMonth: null,\n expYear: null,\n code: null,\n },\n key\n );\n return;\n case CipherType.Identity:\n cipher.identity = new Identity();\n await this.encryptObjProperty(\n model.identity,\n cipher.identity,\n {\n title: null,\n firstName: null,\n middleName: null,\n lastName: null,\n address1: null,\n address2: null,\n address3: null,\n city: null,\n state: null,\n postalCode: null,\n country: null,\n company: null,\n email: null,\n phone: null,\n ssn: null,\n username: null,\n passportNumber: null,\n licenseNumber: null,\n },\n key\n );\n return;\n default:\n throw new Error(\"Unknown cipher type.\");\n }\n }\n\n private async getCipherForUrl(\n url: string,\n lastUsed: boolean,\n lastLaunched: boolean,\n autofillOnPageLoad: boolean\n ): Promise {\n const cacheKey = autofillOnPageLoad ? \"autofillOnPageLoad-\" + url : url;\n\n if (!this.sortedCiphersCache.isCached(cacheKey)) {\n let ciphers = await this.getAllDecryptedForUrl(url);\n if (!ciphers) {\n return null;\n }\n\n if (autofillOnPageLoad) {\n const autofillOnPageLoadDefault = await this.stateService.getAutoFillOnPageLoadDefault();\n ciphers = ciphers.filter(\n (cipher) =>\n cipher.login.autofillOnPageLoad ||\n (cipher.login.autofillOnPageLoad == null && autofillOnPageLoadDefault !== false)\n );\n if (ciphers.length === 0) {\n return null;\n }\n }\n\n this.sortedCiphersCache.addCiphers(cacheKey, ciphers);\n }\n\n if (lastLaunched) {\n return this.sortedCiphersCache.getLastLaunched(cacheKey);\n } else if (lastUsed) {\n return this.sortedCiphersCache.getLastUsed(cacheKey);\n } else {\n return this.sortedCiphersCache.getNext(cacheKey);\n }\n }\n\n private async clearEncryptedCiphersState(userId?: string) {\n await this.stateService.setEncryptedCiphers(null, { userId: userId });\n }\n\n private async clearDecryptedCiphersState(userId?: string) {\n await this.stateService.setDecryptedCiphers(null, { userId: userId });\n this.clearSortedCiphers();\n }\n\n private clearSortedCiphers() {\n this.sortedCiphersCache.clear();\n }\n}\n","import { CollectionService as CollectionServiceAbstraction } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ServiceUtils } from \"../misc/serviceUtils\";\nimport { Utils } from \"../misc/utils\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { Collection } from \"../models/domain/collection\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { CollectionView } from \"../models/view/collectionView\";\n\nconst NestingDelimiter = \"/\";\n\nexport class CollectionService implements CollectionServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private stateService: StateService\n ) {}\n\n async clearCache(userId?: string): Promise {\n await this.stateService.setDecryptedCollections(null, { userId: userId });\n }\n\n async encrypt(model: CollectionView): Promise {\n if (model.organizationId == null) {\n throw new Error(\"Collection has no organization id.\");\n }\n const key = await this.cryptoService.getOrgKey(model.organizationId);\n if (key == null) {\n throw new Error(\"No key for this collection's organization.\");\n }\n const collection = new Collection();\n collection.id = model.id;\n collection.organizationId = model.organizationId;\n collection.readOnly = model.readOnly;\n collection.name = await this.cryptoService.encrypt(model.name, key);\n return collection;\n }\n\n async decryptMany(collections: Collection[]): Promise {\n if (collections == null) {\n return [];\n }\n const decCollections: CollectionView[] = [];\n const promises: Promise[] = [];\n collections.forEach((collection) => {\n promises.push(collection.decrypt().then((c) => decCollections.push(c)));\n });\n await Promise.all(promises);\n return decCollections.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n }\n\n async get(id: string): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n // eslint-disable-next-line\n if (collections == null || !collections.hasOwnProperty(id)) {\n return null;\n }\n\n return new Collection(collections[id]);\n }\n\n async getAll(): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n const response: Collection[] = [];\n for (const id in collections) {\n // eslint-disable-next-line\n if (collections.hasOwnProperty(id)) {\n response.push(new Collection(collections[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decryptedCollections = await this.stateService.getDecryptedCollections();\n if (decryptedCollections != null) {\n return decryptedCollections;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const collections = await this.getAll();\n decryptedCollections = await this.decryptMany(collections);\n await this.stateService.setDecryptedCollections(decryptedCollections);\n return decryptedCollections;\n }\n\n async getAllNested(collections: CollectionView[] = null): Promise[]> {\n if (collections == null) {\n collections = await this.getAllDecrypted();\n }\n const nodes: TreeNode[] = [];\n collections.forEach((c) => {\n const collectionCopy = new CollectionView();\n collectionCopy.id = c.id;\n collectionCopy.organizationId = c.organizationId;\n const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const collections = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode;\n }\n\n async upsert(collection: CollectionData | CollectionData[]): Promise {\n let collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n collections = {};\n }\n\n if (collection instanceof CollectionData) {\n const c = collection as CollectionData;\n collections[c.id] = c;\n } else {\n (collection as CollectionData[]).forEach((c) => {\n collections[c.id] = c;\n });\n }\n\n await this.replace(collections);\n }\n\n async replace(collections: { [id: string]: CollectionData }): Promise {\n await this.clearCache();\n await this.stateService.setEncryptedCollections(collections);\n }\n\n async clear(userId?: string): Promise {\n await this.clearCache(userId);\n await this.stateService.setEncryptedCollections(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const collections = await this.stateService.getEncryptedCollections();\n if (collections == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n delete collections[id];\n } else {\n (id as string[]).forEach((i) => {\n delete collections[i];\n });\n }\n\n await this.replace(collections);\n }\n}\n","import * as hrtime from \"browser-hrtime\";\n\nimport { LogService as LogServiceAbstraction } from \"../abstractions/log.service\";\nimport { LogLevelType } from \"../enums/logLevelType\";\n\nexport class ConsoleLogService implements LogServiceAbstraction {\n protected timersMap: Map = new Map();\n\n constructor(\n protected isDev: boolean,\n protected filter: (level: LogLevelType) => boolean = null\n ) {}\n\n debug(message: string) {\n if (!this.isDev) {\n return;\n }\n this.write(LogLevelType.Debug, message);\n }\n\n info(message: string) {\n this.write(LogLevelType.Info, message);\n }\n\n warning(message: string) {\n this.write(LogLevelType.Warning, message);\n }\n\n error(message: string) {\n this.write(LogLevelType.Error, message);\n }\n\n write(level: LogLevelType, message: string) {\n if (this.filter != null && this.filter(level)) {\n return;\n }\n\n switch (level) {\n case LogLevelType.Debug:\n // eslint-disable-next-line\n console.log(message);\n break;\n case LogLevelType.Info:\n // eslint-disable-next-line\n console.log(message);\n break;\n case LogLevelType.Warning:\n // eslint-disable-next-line\n console.warn(message);\n break;\n case LogLevelType.Error:\n // eslint-disable-next-line\n console.error(message);\n break;\n default:\n break;\n }\n }\n\n time(label = \"default\") {\n if (!this.timersMap.has(label)) {\n this.timersMap.set(label, hrtime());\n }\n }\n\n timeEnd(label = \"default\"): [number, number] {\n const elapsed = hrtime(this.timersMap.get(label));\n this.timersMap.delete(label);\n this.write(LogLevelType.Info, `${label}: ${elapsed[0] * 1000 + elapsed[1] / 10e6}ms`);\n return elapsed;\n }\n}\n","import { CryptoService } from \"../abstractions/crypto.service\";\n\nexport class ContainerService {\n constructor(private cryptoService: CryptoService) {}\n\n // deprecated, use attachToGlobal instead\n attachToWindow(win: any) {\n this.attachToGlobal(win);\n }\n\n attachToGlobal(global: any) {\n if (!global.bitwardenContainerService) {\n global.bitwardenContainerService = this;\n }\n }\n\n getCryptoService(): CryptoService {\n return this.cryptoService;\n }\n}\n","import * as bigInt from \"big-integer\";\n\nimport { CryptoService as CryptoServiceAbstraction } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EncryptionType } from \"../enums/encryptionType\";\nimport { HashPurpose } from \"../enums/hashPurpose\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { KeySuffixOptions } from \"../enums/keySuffixOptions\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { Utils } from \"../misc/utils\";\nimport { EEFLongWordList } from \"../misc/wordlist\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EncryptedObject } from \"../models/domain/encryptedObject\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { ProfileOrganizationResponse } from \"../models/response/profileOrganizationResponse\";\nimport { ProfileProviderOrganizationResponse } from \"../models/response/profileProviderOrganizationResponse\";\nimport { ProfileProviderResponse } from \"../models/response/profileProviderResponse\";\n\nexport class CryptoService implements CryptoServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n protected platformUtilService: PlatformUtilsService,\n protected logService: LogService,\n protected stateService: StateService\n ) {}\n\n async setKey(key: SymmetricCryptoKey, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(key, { userId: userId });\n await this.storeKey(key, userId);\n }\n\n async setKeyHash(keyHash: string): Promise {\n await this.stateService.setKeyHash(keyHash);\n }\n\n async setEncKey(encKey: string): Promise {\n if (encKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedCryptoSymmetricKey(null);\n await this.stateService.setEncryptedCryptoSymmetricKey(encKey);\n }\n\n async setEncPrivateKey(encPrivateKey: string): Promise {\n if (encPrivateKey == null) {\n return;\n }\n\n await this.stateService.setDecryptedPrivateKey(null);\n await this.stateService.setEncryptedPrivateKey(encPrivateKey);\n }\n\n async setOrgKeys(\n orgs: ProfileOrganizationResponse[],\n providerOrgs: ProfileProviderOrganizationResponse[]\n ): Promise {\n const orgKeys: any = {};\n orgs.forEach((org) => {\n orgKeys[org.id] = org.key;\n });\n\n for (const providerOrg of providerOrgs) {\n // Convert provider encrypted keys to user encrypted.\n const providerKey = await this.getProviderKey(providerOrg.providerId);\n const decValue = await this.decryptToBytes(new EncString(providerOrg.key), providerKey);\n orgKeys[providerOrg.id] = (await this.rsaEncrypt(decValue)).encryptedString;\n }\n\n await this.stateService.setDecryptedOrganizationKeys(null);\n return await this.stateService.setEncryptedOrganizationKeys(orgKeys);\n }\n\n async setProviderKeys(providers: ProfileProviderResponse[]): Promise {\n const providerKeys: any = {};\n providers.forEach((provider) => {\n providerKeys[provider.id] = provider.key;\n });\n\n await this.stateService.setDecryptedProviderKeys(null);\n return await this.stateService.setEncryptedProviderKeys(providerKeys);\n }\n\n async getKey(keySuffix?: KeySuffixOptions, userId?: string): Promise {\n const inMemoryKey = await this.stateService.getCryptoMasterKey({ userId: userId });\n\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n keySuffix ||= KeySuffixOptions.Auto;\n const symmetricKey = await this.getKeyFromStorage(keySuffix, userId);\n\n if (symmetricKey != null) {\n // TODO: Refactor here so get key doesn't also set key\n this.setKey(symmetricKey, userId);\n }\n\n return symmetricKey;\n }\n\n async getKeyFromStorage(\n keySuffix: KeySuffixOptions,\n userId?: string\n ): Promise {\n const key = await this.retrieveKeyFromStorage(keySuffix, userId);\n if (key != null) {\n const symmetricKey = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n\n if (!(await this.validateKey(symmetricKey))) {\n this.logService.warning(\"Wrong key, throwing away stored key\");\n await this.clearSecretKeyStore(userId);\n return null;\n }\n\n return symmetricKey;\n }\n return null;\n }\n\n async getKeyHash(): Promise {\n return await this.stateService.getKeyHash();\n }\n\n async compareAndUpdateKeyHash(masterPassword: string, key: SymmetricCryptoKey): Promise {\n const storedKeyHash = await this.getKeyHash();\n if (masterPassword != null && storedKeyHash != null) {\n const localKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.LocalAuthorization\n );\n if (localKeyHash != null && storedKeyHash === localKeyHash) {\n return true;\n }\n\n // TODO: remove serverKeyHash check in 1-2 releases after everyone's keyHash has been updated\n const serverKeyHash = await this.hashPassword(\n masterPassword,\n key,\n HashPurpose.ServerAuthorization\n );\n if (serverKeyHash != null && storedKeyHash === serverKeyHash) {\n await this.setKeyHash(localKeyHash);\n return true;\n }\n }\n\n return false;\n }\n\n @sequentialize(() => \"getEncKey\")\n getEncKey(key: SymmetricCryptoKey = null): Promise {\n return this.getEncKeyHelper(key);\n }\n\n async getPublicKey(): Promise {\n const inMemoryPublicKey = await this.stateService.getPublicKey();\n if (inMemoryPublicKey != null) {\n return inMemoryPublicKey;\n }\n\n const privateKey = await this.getPrivateKey();\n if (privateKey == null) {\n return null;\n }\n\n const publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n await this.stateService.setPublicKey(publicKey);\n return publicKey;\n }\n\n async getPrivateKey(): Promise {\n const decryptedPrivateKey = await this.stateService.getDecryptedPrivateKey();\n if (decryptedPrivateKey != null) {\n return decryptedPrivateKey;\n }\n\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n if (encPrivateKey == null) {\n return null;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), null);\n await this.stateService.setDecryptedPrivateKey(privateKey);\n return privateKey;\n }\n\n async getFingerprint(userId: string, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey === null) {\n throw new Error(\"No public key available.\");\n }\n const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, \"sha256\");\n const userFingerprint = await this.cryptoFunctionService.hkdfExpand(\n keyFingerprint,\n userId,\n 32,\n \"sha256\"\n );\n return this.hashPhrase(userFingerprint);\n }\n\n @sequentialize(() => \"getOrgKeys\")\n async getOrgKeys(): Promise> {\n const orgKeys: Map = new Map();\n const decryptedOrganizationKeys = await this.stateService.getDecryptedOrganizationKeys();\n if (decryptedOrganizationKeys != null && decryptedOrganizationKeys.size > 0) {\n return decryptedOrganizationKeys;\n }\n\n const encOrgKeys = await this.stateService.getEncryptedOrganizationKeys();\n if (encOrgKeys == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId in encOrgKeys) {\n // eslint-disable-next-line\n if (!encOrgKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encOrgKeys[orgId]);\n orgKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedOrganizationKeys(orgKeys);\n }\n\n return orgKeys;\n }\n\n async getOrgKey(orgId: string): Promise {\n if (orgId == null) {\n return null;\n }\n\n const orgKeys = await this.getOrgKeys();\n if (orgKeys == null || !orgKeys.has(orgId)) {\n return null;\n }\n\n return orgKeys.get(orgId);\n }\n\n @sequentialize(() => \"getProviderKeys\")\n async getProviderKeys(): Promise> {\n const providerKeys: Map = new Map();\n const decryptedProviderKeys = await this.stateService.getDecryptedProviderKeys();\n if (decryptedProviderKeys != null && decryptedProviderKeys.size > 0) {\n return decryptedProviderKeys;\n }\n\n const encProviderKeys = await this.stateService.getEncryptedProviderKeys();\n if (encProviderKeys == null) {\n return null;\n }\n\n let setKey = false;\n\n for (const orgId in encProviderKeys) {\n // eslint-disable-next-line\n if (!encProviderKeys.hasOwnProperty(orgId)) {\n continue;\n }\n\n const decValue = await this.rsaDecrypt(encProviderKeys[orgId]);\n providerKeys.set(orgId, new SymmetricCryptoKey(decValue));\n setKey = true;\n }\n\n if (setKey) {\n await this.stateService.setDecryptedProviderKeys(providerKeys);\n }\n\n return providerKeys;\n }\n\n async getProviderKey(providerId: string): Promise {\n if (providerId == null) {\n return null;\n }\n\n const providerKeys = await this.getProviderKeys();\n if (providerKeys == null || !providerKeys.has(providerId)) {\n return null;\n }\n\n return providerKeys.get(providerId);\n }\n\n async hasKey(): Promise {\n return (\n (await this.hasKeyInMemory()) ||\n (await this.hasKeyStored(KeySuffixOptions.Auto)) ||\n (await this.hasKeyStored(KeySuffixOptions.Biometric))\n );\n }\n\n async hasKeyInMemory(userId?: string): Promise {\n return (await this.stateService.getCryptoMasterKey({ userId: userId })) != null;\n }\n\n async hasKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise {\n switch (keySuffix) {\n case KeySuffixOptions.Auto:\n return (await this.stateService.getCryptoMasterKeyAuto({ userId: userId })) != null;\n case KeySuffixOptions.Biometric:\n return (await this.stateService.hasCryptoMasterKeyBiometric({ userId: userId })) === true;\n default:\n return false;\n }\n }\n\n async hasEncKey(): Promise {\n return (await this.stateService.getEncryptedCryptoSymmetricKey()) != null;\n }\n\n async clearKey(clearSecretStorage = true, userId?: string): Promise {\n await this.stateService.setCryptoMasterKey(null, { userId: userId });\n await this.stateService.setLegacyEtmKey(null, { userId: userId });\n if (clearSecretStorage) {\n await this.clearSecretKeyStore(userId);\n }\n }\n\n async clearStoredKey(keySuffix: KeySuffixOptions) {\n keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.setCryptoMasterKeyAuto(null)\n : await this.stateService.setCryptoMasterKeyBiometric(null);\n }\n\n async clearKeyHash(userId?: string): Promise {\n return await this.stateService.setKeyHash(null, { userId: userId });\n }\n\n async clearEncKey(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedCryptoSymmetricKey(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedCryptoSymmetricKey(null, { userId: userId });\n }\n }\n\n async clearKeyPair(memoryOnly?: boolean, userId?: string): Promise {\n const keysToClear: Promise[] = [\n this.stateService.setDecryptedPrivateKey(null, { userId: userId }),\n this.stateService.setPublicKey(null, { userId: userId }),\n ];\n if (!memoryOnly) {\n keysToClear.push(this.stateService.setEncryptedPrivateKey(null, { userId: userId }));\n }\n return Promise.all(keysToClear);\n }\n\n async clearOrgKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedOrganizationKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedOrganizationKeys(null, { userId: userId });\n }\n }\n\n async clearProviderKeys(memoryOnly?: boolean, userId?: string): Promise {\n await this.stateService.setDecryptedProviderKeys(null, { userId: userId });\n if (!memoryOnly) {\n await this.stateService.setEncryptedProviderKeys(null, { userId: userId });\n }\n }\n\n async clearPinProtectedKey(userId?: string): Promise {\n return await this.stateService.setEncryptedPinProtected(null, { userId: userId });\n }\n\n async clearKeys(userId?: string): Promise {\n await this.clearKey(true, userId);\n await this.clearKeyHash(userId);\n await this.clearOrgKeys(false, userId);\n await this.clearProviderKeys(false, userId);\n await this.clearEncKey(false, userId);\n await this.clearKeyPair(false, userId);\n await this.clearPinProtectedKey(userId);\n }\n\n async toggleKey(): Promise {\n const key = await this.getKey();\n\n await this.setKey(key);\n }\n\n async makeKey(\n password: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ): Promise {\n let key: ArrayBuffer = null;\n if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n if (kdfIterations == null) {\n kdfIterations = 5000;\n } else if (kdfIterations < 5000) {\n throw new Error(\"PBKDF2 iteration minimum is 5000.\");\n }\n key = await this.cryptoFunctionService.pbkdf2(password, salt, \"sha256\", kdfIterations);\n } else {\n throw new Error(\"Unknown Kdf.\");\n }\n return new SymmetricCryptoKey(key);\n }\n\n async makeKeyFromPin(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number,\n protectedKeyCs: EncString = null\n ): Promise {\n if (protectedKeyCs == null) {\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n if (pinProtectedKey == null) {\n throw new Error(\"No PIN protected key found.\");\n }\n protectedKeyCs = new EncString(pinProtectedKey);\n }\n const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations);\n const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n return new SymmetricCryptoKey(decKey);\n }\n\n async makeShareKey(): Promise<[EncString, SymmetricCryptoKey]> {\n const shareKey = await this.cryptoFunctionService.randomBytes(64);\n const publicKey = await this.getPublicKey();\n const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n return [encShareKey, new SymmetricCryptoKey(shareKey)];\n }\n\n async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n const privateEnc = await this.encrypt(keyPair[1], key);\n return [publicB64, privateEnc];\n }\n\n async makePinKey(\n pin: string,\n salt: string,\n kdf: KdfType,\n kdfIterations: number\n ): Promise {\n const pinKey = await this.makeKey(pin, salt, kdf, kdfIterations);\n return await this.stretchKey(pinKey);\n }\n\n async makeSendKey(keyMaterial: ArrayBuffer): Promise {\n const sendKey = await this.cryptoFunctionService.hkdf(\n keyMaterial,\n \"bitwarden-send\",\n \"send\",\n 64,\n \"sha256\"\n );\n return new SymmetricCryptoKey(sendKey);\n }\n\n async hashPassword(\n password: string,\n key: SymmetricCryptoKey,\n hashPurpose?: HashPurpose\n ): Promise {\n if (key == null) {\n key = await this.getKey();\n }\n if (password == null || key == null) {\n throw new Error(\"Invalid parameters.\");\n }\n\n const iterations = hashPurpose === HashPurpose.LocalAuthorization ? 2 : 1;\n const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, \"sha256\", iterations);\n return Utils.fromBufferToB64(hash);\n }\n\n async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n const theKey = await this.getKeyForEncryption(key);\n const encKey = await this.cryptoFunctionService.randomBytes(64);\n return this.buildEncKey(theKey, encKey);\n }\n\n async remakeEncKey(\n key: SymmetricCryptoKey,\n encKey?: SymmetricCryptoKey\n ): Promise<[SymmetricCryptoKey, EncString]> {\n if (encKey == null) {\n encKey = await this.getEncKey();\n }\n return this.buildEncKey(key, encKey.key);\n }\n\n async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n if (plainValue == null) {\n return Promise.resolve(null);\n }\n\n let plainBuf: ArrayBuffer;\n if (typeof plainValue === \"string\") {\n plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n } else {\n plainBuf = plainValue;\n }\n\n const encObj = await this.aesEncrypt(plainBuf, key);\n const iv = Utils.fromBufferToB64(encObj.iv);\n const data = Utils.fromBufferToB64(encObj.data);\n const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n return new EncString(encObj.key.encType, data, iv, mac);\n }\n\n async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise {\n const encValue = await this.aesEncrypt(plainValue, key);\n let macLen = 0;\n if (encValue.mac != null) {\n macLen = encValue.mac.byteLength;\n }\n\n const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n encBytes.set([encValue.key.encType]);\n encBytes.set(new Uint8Array(encValue.iv), 1);\n if (encValue.mac != null) {\n encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n }\n\n encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n return new EncArrayBuffer(encBytes.buffer);\n }\n\n async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise {\n if (publicKey == null) {\n publicKey = await this.getPublicKey();\n }\n if (publicKey == null) {\n throw new Error(\"Public key unavailable.\");\n }\n\n const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, \"sha1\");\n return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n }\n\n async rsaDecrypt(encValue: string, privateKeyValue?: ArrayBuffer): Promise {\n const headerPieces = encValue.split(\".\");\n let encType: EncryptionType = null;\n let encPieces: string[];\n\n if (headerPieces.length === 1) {\n encType = EncryptionType.Rsa2048_OaepSha256_B64;\n encPieces = [headerPieces[0]];\n } else if (headerPieces.length === 2) {\n try {\n encType = parseInt(headerPieces[0], null);\n encPieces = headerPieces[1].split(\"|\");\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64: // HmacSha256 types are deprecated\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n if (encPieces == null || encPieces.length <= 0) {\n throw new Error(\"encPieces unavailable.\");\n }\n\n const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n const privateKey = privateKeyValue ?? (await this.getPrivateKey());\n if (privateKey == null) {\n throw new Error(\"No private key.\");\n }\n\n let alg: \"sha1\" | \"sha256\" = \"sha1\";\n switch (encType) {\n case EncryptionType.Rsa2048_OaepSha256_B64:\n case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n alg = \"sha256\";\n break;\n case EncryptionType.Rsa2048_OaepSha1_B64:\n case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n break;\n default:\n throw new Error(\"encType unavailable.\");\n }\n\n return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n }\n\n async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise {\n const iv = Utils.fromB64ToArray(encString.iv).buffer;\n const data = Utils.fromB64ToArray(encString.data).buffer;\n const mac = encString.mac ? Utils.fromB64ToArray(encString.mac).buffer : null;\n const decipher = await this.aesDecryptToBytes(encString.encryptionType, data, iv, mac, key);\n if (decipher == null) {\n return null;\n }\n\n return decipher;\n }\n\n async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise {\n return await this.aesDecryptToUtf8(\n encString.encryptionType,\n encString.data,\n encString.iv,\n encString.mac,\n key\n );\n }\n\n async decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n if (encBuf == null) {\n throw new Error(\"no encBuf.\");\n }\n\n const encBytes = new Uint8Array(encBuf);\n const encType = encBytes[0];\n let ctBytes: Uint8Array = null;\n let ivBytes: Uint8Array = null;\n let macBytes: Uint8Array = null;\n\n switch (encType) {\n case EncryptionType.AesCbc128_HmacSha256_B64:\n case EncryptionType.AesCbc256_HmacSha256_B64:\n if (encBytes.length <= 49) {\n // 1 + 16 + 32 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n macBytes = encBytes.slice(17, 49);\n ctBytes = encBytes.slice(49);\n break;\n case EncryptionType.AesCbc256_B64:\n if (encBytes.length <= 17) {\n // 1 + 16 + ctLength\n return null;\n }\n\n ivBytes = encBytes.slice(1, 17);\n ctBytes = encBytes.slice(17);\n break;\n default:\n return null;\n }\n\n return await this.aesDecryptToBytes(\n encType,\n ctBytes.buffer,\n ivBytes.buffer,\n macBytes != null ? macBytes.buffer : null,\n key\n );\n }\n\n // EFForg/OpenWireless\n // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n async randomNumber(min: number, max: number): Promise {\n let rval = 0;\n const range = max - min + 1;\n const bitsNeeded = Math.ceil(Math.log2(range));\n if (bitsNeeded > 53) {\n throw new Error(\"We cannot generate numbers larger than 53 bits.\");\n }\n\n const bytesNeeded = Math.ceil(bitsNeeded / 8);\n const mask = Math.pow(2, bitsNeeded) - 1;\n // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n // Fill a byte array with N random numbers\n const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n let p = (bytesNeeded - 1) * 8;\n for (let i = 0; i < bytesNeeded; i++) {\n rval += byteArray[i] * Math.pow(2, p);\n p -= 8;\n }\n\n // Use & to apply the mask and reduce the number of recursive lookups\n rval = rval & mask;\n\n if (rval >= range) {\n // Integer out of acceptable range\n return this.randomNumber(min, max);\n }\n\n // Return an integer that falls within the range\n return min + rval;\n }\n\n async validateKey(key: SymmetricCryptoKey) {\n try {\n const encPrivateKey = await this.stateService.getEncryptedPrivateKey();\n const encKey = await this.getEncKeyHelper(key);\n if (encPrivateKey == null || encKey == null) {\n return false;\n }\n\n const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), encKey);\n await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n } catch (e) {\n return false;\n }\n\n return true;\n }\n\n // Helpers\n protected async storeKey(key: SymmetricCryptoKey, userId?: string) {\n if (await this.shouldStoreKey(KeySuffixOptions.Auto, userId)) {\n await this.stateService.setCryptoMasterKeyAuto(key.keyB64, { userId: userId });\n } else if (await this.shouldStoreKey(KeySuffixOptions.Biometric, userId)) {\n await this.stateService.setCryptoMasterKeyBiometric(key.keyB64, { userId: userId });\n } else {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n }\n\n protected async shouldStoreKey(keySuffix: KeySuffixOptions, userId?: string) {\n let shouldStoreKey = false;\n if (keySuffix === KeySuffixOptions.Auto) {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n shouldStoreKey = vaultTimeout == null;\n } else if (keySuffix === KeySuffixOptions.Biometric) {\n const biometricUnlock = await this.stateService.getBiometricUnlock({ userId: userId });\n shouldStoreKey = biometricUnlock && this.platformUtilService.supportsSecureStorage();\n }\n return shouldStoreKey;\n }\n\n protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions, userId?: string) {\n return keySuffix === KeySuffixOptions.Auto\n ? await this.stateService.getCryptoMasterKeyAuto({ userId: userId })\n : await this.stateService.getCryptoMasterKeyBiometric({ userId: userId });\n }\n\n private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise {\n const obj = new EncryptedObject();\n obj.key = await this.getKeyForEncryption(key);\n obj.iv = await this.cryptoFunctionService.randomBytes(16);\n obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n if (obj.key.macKey != null) {\n const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n macData.set(new Uint8Array(obj.iv), 0);\n macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, \"sha256\");\n }\n\n return obj;\n }\n\n private async aesDecryptToUtf8(\n encType: EncryptionType,\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = await this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n this.logService.error(\"mac required.\");\n return null;\n }\n\n if (theKey.encType !== encType) {\n this.logService.error(\"encType unavailable.\");\n return null;\n }\n\n const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(data, iv, mac, theKey);\n if (fastParams.macKey != null && fastParams.mac != null) {\n const computedMac = await this.cryptoFunctionService.hmacFast(\n fastParams.macData,\n fastParams.macKey,\n \"sha256\"\n );\n const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n if (!macsEqual) {\n this.logService.error(\"mac failed.\");\n return null;\n }\n }\n\n return this.cryptoFunctionService.aesDecryptFast(fastParams);\n }\n\n private async aesDecryptToBytes(\n encType: EncryptionType,\n data: ArrayBuffer,\n iv: ArrayBuffer,\n mac: ArrayBuffer,\n key: SymmetricCryptoKey\n ): Promise {\n const keyForEnc = await this.getKeyForEncryption(key);\n const theKey = await this.resolveLegacyKey(encType, keyForEnc);\n\n if (theKey.macKey != null && mac == null) {\n return null;\n }\n\n if (theKey.encType !== encType) {\n return null;\n }\n\n if (theKey.macKey != null && mac != null) {\n const macData = new Uint8Array(iv.byteLength + data.byteLength);\n macData.set(new Uint8Array(iv), 0);\n macData.set(new Uint8Array(data), iv.byteLength);\n const computedMac = await this.cryptoFunctionService.hmac(\n macData.buffer,\n theKey.macKey,\n \"sha256\"\n );\n if (computedMac === null) {\n return null;\n }\n\n const macsMatch = await this.cryptoFunctionService.compare(mac, computedMac);\n if (!macsMatch) {\n this.logService.error(\"mac failed.\");\n return null;\n }\n }\n\n return await this.cryptoFunctionService.aesDecrypt(data, iv, theKey.encKey);\n }\n\n private async getKeyForEncryption(key?: SymmetricCryptoKey): Promise {\n if (key != null) {\n return key;\n }\n\n const encKey = await this.getEncKey();\n if (encKey != null) {\n return encKey;\n }\n\n return await this.getKey();\n }\n\n private async resolveLegacyKey(\n encType: EncryptionType,\n key: SymmetricCryptoKey\n ): Promise {\n if (\n encType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n key.encType === EncryptionType.AesCbc256_B64\n ) {\n // Old encrypt-then-mac scheme, make a new key\n let legacyKey = await this.stateService.getLegacyEtmKey();\n if (legacyKey == null) {\n legacyKey = new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n await this.stateService.setLegacyEtmKey(legacyKey);\n }\n return legacyKey;\n }\n\n return key;\n }\n\n private async stretchKey(key: SymmetricCryptoKey): Promise {\n const newKey = new Uint8Array(64);\n const encKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"enc\", 32, \"sha256\");\n const macKey = await this.cryptoFunctionService.hkdfExpand(key.key, \"mac\", 32, \"sha256\");\n newKey.set(new Uint8Array(encKey));\n newKey.set(new Uint8Array(macKey), 32);\n return new SymmetricCryptoKey(newKey.buffer);\n }\n\n private async hashPhrase(hash: ArrayBuffer, minimumEntropy = 64) {\n const entropyPerWord = Math.log(EEFLongWordList.length) / Math.log(2);\n let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n const hashArr = Array.from(new Uint8Array(hash));\n const entropyAvailable = hashArr.length * 4;\n if (numWords * entropyPerWord > entropyAvailable) {\n throw new Error(\"Output entropy of hash function is too small\");\n }\n\n const phrase: string[] = [];\n let hashNumber = bigInt.fromArray(hashArr, 256);\n while (numWords--) {\n const remainder = hashNumber.mod(EEFLongWordList.length);\n hashNumber = hashNumber.divide(EEFLongWordList.length);\n phrase.push(EEFLongWordList[remainder as any]);\n }\n return phrase;\n }\n\n private async buildEncKey(\n key: SymmetricCryptoKey,\n encKey: ArrayBuffer\n ): Promise<[SymmetricCryptoKey, EncString]> {\n let encKeyEnc: EncString = null;\n if (key.key.byteLength === 32) {\n const newKey = await this.stretchKey(key);\n encKeyEnc = await this.encrypt(encKey, newKey);\n } else if (key.key.byteLength === 64) {\n encKeyEnc = await this.encrypt(encKey, key);\n } else {\n throw new Error(\"Invalid key size.\");\n }\n return [new SymmetricCryptoKey(encKey), encKeyEnc];\n }\n\n private async clearSecretKeyStore(userId?: string): Promise {\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId });\n }\n\n private async getEncKeyHelper(key: SymmetricCryptoKey = null): Promise {\n const inMemoryKey = await this.stateService.getDecryptedCryptoSymmetricKey();\n if (inMemoryKey != null) {\n return inMemoryKey;\n }\n\n const encKey = await this.stateService.getEncryptedCryptoSymmetricKey();\n if (encKey == null) {\n return null;\n }\n\n if (key == null) {\n key = await this.getKey();\n }\n if (key == null) {\n return null;\n }\n\n let decEncKey: ArrayBuffer;\n const encKeyCipher = new EncString(encKey);\n if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n decEncKey = await this.decryptToBytes(encKeyCipher, key);\n } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n const newKey = await this.stretchKey(key);\n decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n } else {\n throw new Error(\"Unsupported encKey type.\");\n }\n if (decEncKey == null) {\n return null;\n }\n const symmetricCryptoKey = new SymmetricCryptoKey(decEncKey);\n await this.stateService.setDecryptedCryptoSymmetricKey(symmetricCryptoKey);\n return symmetricCryptoKey;\n }\n}\n","import { Observable, Subject } from \"rxjs\";\n\nimport {\n EnvironmentService as EnvironmentServiceAbstraction,\n Urls,\n} from \"../abstractions/environment.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n private readonly urlsSubject = new Subject();\n urls: Observable = this.urlsSubject;\n\n private baseUrl: string;\n private webVaultUrl: string;\n private apiUrl: string;\n private identityUrl: string;\n private iconsUrl: string;\n private notificationsUrl: string;\n private eventsUrl: string;\n private keyConnectorUrl: string;\n\n constructor(private stateService: StateService) {\n this.stateService.activeAccount.subscribe(async () => {\n await this.setUrlsFromStorage();\n });\n }\n\n hasBaseUrl() {\n return this.baseUrl != null;\n }\n\n getNotificationsUrl() {\n if (this.notificationsUrl != null) {\n return this.notificationsUrl;\n }\n\n if (this.baseUrl != null) {\n return this.baseUrl + \"/notifications\";\n }\n\n return \"https://notifications.bitwarden.com\";\n }\n\n getWebVaultUrl() {\n if (this.webVaultUrl != null) {\n return this.webVaultUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl;\n }\n return \"https://vault.bitwarden.com\";\n }\n\n getSendUrl() {\n return this.getWebVaultUrl() === \"https://vault.bitwarden.com\"\n ? \"https://send.bitwarden.com/#\"\n : this.getWebVaultUrl() + \"/#/send/\";\n }\n\n getIconsUrl() {\n if (this.iconsUrl != null) {\n return this.iconsUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/icons\";\n }\n\n return \"https://icons.bitwarden.net\";\n }\n\n getApiUrl() {\n if (this.apiUrl != null) {\n return this.apiUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/api\";\n }\n\n return \"https://api.bitwarden.com\";\n }\n\n getIdentityUrl() {\n if (this.identityUrl != null) {\n return this.identityUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/identity\";\n }\n\n return \"https://identity.bitwarden.com\";\n }\n\n getEventsUrl() {\n if (this.eventsUrl != null) {\n return this.eventsUrl;\n }\n\n if (this.baseUrl) {\n return this.baseUrl + \"/events\";\n }\n\n return \"https://events.bitwarden.com\";\n }\n\n getKeyConnectorUrl() {\n return this.keyConnectorUrl;\n }\n\n async setUrlsFromStorage(): Promise {\n const urls: any = await this.stateService.getEnvironmentUrls();\n const envUrls = new EnvironmentUrls();\n\n this.baseUrl = envUrls.base = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = envUrls.api = urls.api;\n this.identityUrl = envUrls.identity = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = envUrls.events = urls.events;\n this.keyConnectorUrl = urls.keyConnector;\n }\n\n async setUrls(urls: Urls): Promise {\n urls.base = this.formatUrl(urls.base);\n urls.webVault = this.formatUrl(urls.webVault);\n urls.api = this.formatUrl(urls.api);\n urls.identity = this.formatUrl(urls.identity);\n urls.icons = this.formatUrl(urls.icons);\n urls.notifications = this.formatUrl(urls.notifications);\n urls.events = this.formatUrl(urls.events);\n urls.keyConnector = this.formatUrl(urls.keyConnector);\n\n await this.stateService.setEnvironmentUrls({\n base: urls.base,\n api: urls.api,\n identity: urls.identity,\n webVault: urls.webVault,\n icons: urls.icons,\n notifications: urls.notifications,\n events: urls.events,\n keyConnector: urls.keyConnector,\n });\n\n this.baseUrl = urls.base;\n this.webVaultUrl = urls.webVault;\n this.apiUrl = urls.api;\n this.identityUrl = urls.identity;\n this.iconsUrl = urls.icons;\n this.notificationsUrl = urls.notifications;\n this.eventsUrl = urls.events;\n this.keyConnectorUrl = urls.keyConnector;\n\n this.urlsSubject.next(urls);\n\n return urls;\n }\n\n getUrls() {\n return {\n base: this.baseUrl,\n webVault: this.webVaultUrl,\n api: this.apiUrl,\n identity: this.identityUrl,\n icons: this.iconsUrl,\n notifications: this.notificationsUrl,\n events: this.eventsUrl,\n keyConnector: this.keyConnectorUrl,\n };\n }\n\n private formatUrl(url: string): string {\n if (url == null || url === \"\") {\n return null;\n }\n\n url = url.replace(/\\/+$/g, \"\");\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = \"https://\" + url;\n }\n\n return url.trim();\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { EventService as EventServiceAbstraction } from \"../abstractions/event.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { EventType } from \"../enums/eventType\";\nimport { EventData } from \"../models/data/eventData\";\nimport { EventRequest } from \"../models/request/eventRequest\";\n\nexport class EventService implements EventServiceAbstraction {\n private inited = false;\n\n constructor(\n private apiService: ApiService,\n private cipherService: CipherService,\n private stateService: StateService,\n private logService: LogService,\n private organizationService: OrganizationService\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.uploadEvents();\n setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n }\n }\n\n async collect(\n eventType: EventType,\n cipherId: string = null,\n uploadImmediately = false\n ): Promise {\n const authed = await this.stateService.getIsAuthenticated();\n if (!authed) {\n return;\n }\n const organizations = await this.organizationService.getAll();\n if (organizations == null) {\n return;\n }\n const orgIds = new Set(organizations.filter((o) => o.useEvents).map((o) => o.id));\n if (orgIds.size === 0) {\n return;\n }\n if (cipherId != null) {\n const cipher = await this.cipherService.get(cipherId);\n if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {\n return;\n }\n }\n let eventCollection = await this.stateService.getEventCollection();\n if (eventCollection == null) {\n eventCollection = [];\n }\n const event = new EventData();\n event.type = eventType;\n event.cipherId = cipherId;\n event.date = new Date().toISOString();\n eventCollection.push(event);\n await this.stateService.setEventCollection(eventCollection);\n if (uploadImmediately) {\n await this.uploadEvents();\n }\n }\n\n async uploadEvents(userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n const eventCollection = await this.stateService.getEventCollection({ userId: userId });\n if (eventCollection == null || eventCollection.length === 0) {\n return;\n }\n const request = eventCollection.map((e) => {\n const req = new EventRequest();\n req.type = e.type;\n req.cipherId = e.cipherId;\n req.date = e.date;\n return req;\n });\n try {\n await this.apiService.postEventsCollect(request);\n this.clearEvents(userId);\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n async clearEvents(userId?: string): Promise {\n await this.stateService.setEventCollection(null, { userId: userId });\n }\n}\n","import * as papa from \"papaparse\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport {\n ExportFormat,\n ExportService as ExportServiceAbstraction,\n} from \"../abstractions/export.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { DEFAULT_KDF_ITERATIONS, KdfType } from \"../enums/kdfType\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { Cipher } from \"../models/domain/cipher\";\nimport { Collection } from \"../models/domain/collection\";\nimport { Folder } from \"../models/domain/folder\";\nimport { CipherWithIdExport as CipherExport } from \"../models/export/cipherWithIdsExport\";\nimport { CollectionWithIdExport as CollectionExport } from \"../models/export/collectionWithIdExport\";\nimport { EventExport } from \"../models/export/eventExport\";\nimport { FolderWithIdExport as FolderExport } from \"../models/export/folderWithIdExport\";\nimport { CollectionDetailsResponse } from \"../models/response/collectionResponse\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { EventView } from \"../models/view/eventView\";\nimport { FolderView } from \"../models/view/folderView\";\n\nexport class ExportService implements ExportServiceAbstraction {\n constructor(\n private folderService: FolderService,\n private cipherService: CipherService,\n private apiService: ApiService,\n private cryptoService: CryptoService,\n private cryptoFunctionService: CryptoFunctionService\n ) {}\n\n async getExport(format: ExportFormat = \"csv\", organizationId?: string): Promise {\n if (organizationId) {\n return await this.getOrganizationExport(organizationId, format);\n }\n\n if (format === \"encrypted_json\") {\n return this.getEncryptedExport();\n } else {\n return this.getDecryptedExport(format);\n }\n }\n\n async getPasswordProtectedExport(password: string, organizationId?: string): Promise {\n const clearText = organizationId\n ? await this.getOrganizationExport(organizationId, \"json\")\n : await this.getExport(\"json\");\n\n const salt = Utils.fromBufferToB64(await this.cryptoFunctionService.randomBytes(16));\n const kdfIterations = DEFAULT_KDF_ITERATIONS;\n const key = await this.cryptoService.makePinKey(\n password,\n salt,\n KdfType.PBKDF2_SHA256,\n kdfIterations\n );\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), key);\n const encText = await this.cryptoService.encrypt(clearText, key);\n\n const jsonDoc: any = {\n encrypted: true,\n passwordProtected: true,\n salt: salt,\n kdfIterations: kdfIterations,\n kdfType: KdfType.PBKDF2_SHA256,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n data: encText.encryptedString,\n };\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n async getOrganizationExport(\n organizationId: string,\n format: ExportFormat = \"csv\"\n ): Promise {\n if (format === \"encrypted_json\") {\n return this.getOrganizationEncryptedExport(organizationId);\n } else {\n return this.getOrganizationDecryptedExport(organizationId, format);\n }\n }\n\n async getEventExport(events: EventView[]): Promise {\n return papa.unparse(events.map((e) => new EventExport(e)));\n }\n\n getFileName(prefix: string = null, extension = \"csv\"): string {\n const now = new Date();\n const dateString =\n now.getFullYear() +\n \"\" +\n this.padNumber(now.getMonth() + 1, 2) +\n \"\" +\n this.padNumber(now.getDate(), 2) +\n this.padNumber(now.getHours(), 2) +\n \"\" +\n this.padNumber(now.getMinutes(), 2) +\n this.padNumber(now.getSeconds(), 2);\n\n return \"bitwarden\" + (prefix ? \"_\" + prefix : \"\") + \"_export_\" + dateString + \".\" + extension;\n }\n\n private async getDecryptedExport(format: \"json\" | \"csv\"): Promise {\n let decFolders: FolderView[] = [];\n let decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n this.folderService.getAllDecrypted().then((folders) => {\n decFolders = folders;\n })\n );\n\n promises.push(\n this.cipherService.getAllDecrypted().then((ciphers) => {\n decCiphers = ciphers.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const foldersMap = new Map();\n decFolders.forEach((f) => {\n if (f.id != null) {\n foldersMap.set(f.id, f);\n }\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n if (c.organizationId != null) {\n return;\n }\n\n const cipher: any = {};\n cipher.folder =\n c.folderId != null && foldersMap.has(c.folderId) ? foldersMap.get(c.folderId).name : null;\n cipher.favorite = c.favorite ? 1 : null;\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n folders: [],\n items: [],\n };\n\n decFolders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n decCiphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getEncryptedExport(): Promise {\n let folders: Folder[] = [];\n let ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n this.folderService.getAll().then((f) => {\n folders = f;\n })\n );\n\n promises.push(\n this.cipherService.getAll().then((c) => {\n ciphers = c.filter((f) => f.deletedDate == null);\n })\n );\n\n await Promise.all(promises);\n\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid());\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n folders: [],\n items: [],\n };\n\n folders.forEach((f) => {\n if (f.id == null) {\n return;\n }\n const folder = new FolderExport();\n folder.build(f);\n jsonDoc.folders.push(folder);\n });\n\n ciphers.forEach((c) => {\n if (c.organizationId != null) {\n return;\n }\n const cipher = new CipherExport();\n cipher.build(c);\n cipher.collectionIds = null;\n jsonDoc.items.push(cipher);\n });\n\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private async getOrganizationDecryptedExport(\n organizationId: string,\n format: \"json\" | \"csv\"\n ): Promise {\n const decCollections: CollectionView[] = [];\n const decCiphers: CipherView[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getCollections(organizationId).then((collections) => {\n const collectionPromises: any = [];\n if (collections != null && collections.data != null && collections.data.length > 0) {\n collections.data.forEach((c) => {\n const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n collectionPromises.push(\n collection.decrypt().then((decCol) => {\n decCollections.push(decCol);\n })\n );\n });\n }\n return Promise.all(collectionPromises);\n })\n );\n\n promises.push(\n this.apiService.getCiphersOrganization(organizationId).then((ciphers) => {\n const cipherPromises: any = [];\n if (ciphers != null && ciphers.data != null && ciphers.data.length > 0) {\n ciphers.data\n .filter((c) => c.deletedDate === null)\n .forEach((c) => {\n const cipher = new Cipher(new CipherData(c));\n cipherPromises.push(\n cipher.decrypt().then((decCipher) => {\n decCiphers.push(decCipher);\n })\n );\n });\n }\n return Promise.all(cipherPromises);\n })\n );\n\n await Promise.all(promises);\n\n if (format === \"csv\") {\n const collectionsMap = new Map();\n decCollections.forEach((c) => {\n collectionsMap.set(c.id, c);\n });\n\n const exportCiphers: any[] = [];\n decCiphers.forEach((c) => {\n // only export logins and secure notes\n if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n return;\n }\n\n const cipher: any = {};\n cipher.collections = [];\n if (c.collectionIds != null) {\n cipher.collections = c.collectionIds\n .filter((id) => collectionsMap.has(id))\n .map((id) => collectionsMap.get(id).name);\n }\n this.buildCommonCipher(cipher, c);\n exportCiphers.push(cipher);\n });\n\n return papa.unparse(exportCiphers);\n } else {\n const jsonDoc: any = {\n encrypted: false,\n collections: [],\n items: [],\n };\n\n decCollections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n decCiphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n }\n\n private async getOrganizationEncryptedExport(organizationId: string): Promise {\n const collections: Collection[] = [];\n const ciphers: Cipher[] = [];\n const promises = [];\n\n promises.push(\n this.apiService.getCollections(organizationId).then((c) => {\n const collectionPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data.forEach((r) => {\n const collection = new Collection(new CollectionData(r as CollectionDetailsResponse));\n collections.push(collection);\n });\n }\n return Promise.all(collectionPromises);\n })\n );\n\n promises.push(\n this.apiService.getCiphersOrganization(organizationId).then((c) => {\n const cipherPromises: any = [];\n if (c != null && c.data != null && c.data.length > 0) {\n c.data\n .filter((item) => item.deletedDate === null)\n .forEach((item) => {\n const cipher = new Cipher(new CipherData(item));\n ciphers.push(cipher);\n });\n }\n return Promise.all(cipherPromises);\n })\n );\n\n await Promise.all(promises);\n\n const orgKey = await this.cryptoService.getOrgKey(organizationId);\n const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), orgKey);\n\n const jsonDoc: any = {\n encrypted: true,\n encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n collections: [],\n items: [],\n };\n\n collections.forEach((c) => {\n const collection = new CollectionExport();\n collection.build(c);\n jsonDoc.collections.push(collection);\n });\n\n ciphers.forEach((c) => {\n const cipher = new CipherExport();\n cipher.build(c);\n jsonDoc.items.push(cipher);\n });\n return JSON.stringify(jsonDoc, null, \" \");\n }\n\n private padNumber(num: number, width: number, padCharacter = \"0\"): string {\n const numString = num.toString();\n return numString.length >= width\n ? numString\n : new Array(width - numString.length + 1).join(padCharacter) + numString;\n }\n\n private buildCommonCipher(cipher: any, c: CipherView) {\n cipher.type = null;\n cipher.name = c.name;\n cipher.notes = c.notes;\n cipher.fields = null;\n cipher.reprompt = c.reprompt;\n // Login props\n cipher.login_uri = null;\n cipher.login_username = null;\n cipher.login_password = null;\n cipher.login_totp = null;\n\n if (c.fields) {\n c.fields.forEach((f: any) => {\n if (!cipher.fields) {\n cipher.fields = \"\";\n } else {\n cipher.fields += \"\\n\";\n }\n\n cipher.fields += (f.name || \"\") + \": \" + f.value;\n });\n }\n\n switch (c.type) {\n case CipherType.Login:\n cipher.type = \"login\";\n cipher.login_username = c.login.username;\n cipher.login_password = c.login.password;\n cipher.login_totp = c.login.totp;\n\n if (c.login.uris) {\n cipher.login_uri = [];\n c.login.uris.forEach((u) => {\n cipher.login_uri.push(u.uri);\n });\n }\n break;\n case CipherType.SecureNote:\n cipher.type = \"note\";\n break;\n default:\n return;\n }\n\n return cipher;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { FileUploadService as FileUploadServiceAbstraction } from \"../abstractions/fileUpload.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { FileUploadType } from \"../enums/fileUploadType\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { AttachmentUploadDataResponse } from \"../models/response/attachmentUploadDataResponse\";\nimport { SendFileUploadDataResponse } from \"../models/response/sendFileUploadDataResponse\";\n\nimport { AzureFileUploadService } from \"./azureFileUpload.service\";\nimport { BitwardenFileUploadService } from \"./bitwardenFileUpload.service\";\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n private azureFileUploadService: AzureFileUploadService;\n private bitwardenFileUploadService: BitwardenFileUploadService;\n\n constructor(private logService: LogService, private apiService: ApiService) {\n this.azureFileUploadService = new AzureFileUploadService(logService);\n this.bitwardenFileUploadService = new BitwardenFileUploadService(apiService);\n }\n\n async uploadSendFile(\n uploadData: SendFileUploadDataResponse,\n fileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n fileName.encryptedString,\n encryptedFileData,\n (fd) =>\n this.apiService.postSendFile(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id,\n fd\n )\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewSendFileUploadUrl(\n uploadData.sendResponse.id,\n uploadData.sendResponse.file.id\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type\");\n }\n } catch (e) {\n await this.apiService.deleteSend(uploadData.sendResponse.id);\n throw e;\n }\n }\n\n async uploadCipherAttachment(\n admin: boolean,\n uploadData: AttachmentUploadDataResponse,\n encryptedFileName: EncString,\n encryptedFileData: EncArrayBuffer\n ) {\n const response = admin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n try {\n switch (uploadData.fileUploadType) {\n case FileUploadType.Direct:\n await this.bitwardenFileUploadService.upload(\n encryptedFileName.encryptedString,\n encryptedFileData,\n (fd) => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd)\n );\n break;\n case FileUploadType.Azure: {\n const renewalCallback = async () => {\n const renewalResponse = await this.apiService.renewAttachmentUploadUrl(\n response.id,\n uploadData.attachmentId\n );\n return renewalResponse.url;\n };\n await this.azureFileUploadService.upload(\n uploadData.url,\n encryptedFileData,\n renewalCallback\n );\n break;\n }\n default:\n throw new Error(\"Unknown file upload type.\");\n }\n } catch (e) {\n if (admin) {\n await this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n } else {\n await this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n }\n throw e;\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService as FolderServiceAbstraction } from \"../abstractions/folder.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ServiceUtils } from \"../misc/serviceUtils\";\nimport { Utils } from \"../misc/utils\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { Folder } from \"../models/domain/folder\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { TreeNode } from \"../models/domain/treeNode\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport { FolderView } from \"../models/view/folderView\";\n\nconst NestingDelimiter = \"/\";\n\nexport class FolderService implements FolderServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private i18nService: I18nService,\n private cipherService: CipherService,\n private stateService: StateService\n ) {}\n\n async clearCache(userId?: string): Promise {\n await this.stateService.setDecryptedFolders(null, { userId: userId });\n }\n\n async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise {\n const folder = new Folder();\n folder.id = model.id;\n folder.name = await this.cryptoService.encrypt(model.name, key);\n return folder;\n }\n\n async get(id: string): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n // eslint-disable-next-line\n if (folders == null || !folders.hasOwnProperty(id)) {\n return null;\n }\n\n return new Folder(folders[id]);\n }\n\n async getAll(): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n const response: Folder[] = [];\n for (const id in folders) {\n // eslint-disable-next-line\n if (folders.hasOwnProperty(id)) {\n response.push(new Folder(folders[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n const decryptedFolders = await this.stateService.getDecryptedFolders();\n if (decryptedFolders != null) {\n return decryptedFolders;\n }\n\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const decFolders: FolderView[] = [];\n const promises: Promise[] = [];\n const folders = await this.getAll();\n folders.forEach((folder) => {\n promises.push(folder.decrypt().then((f) => decFolders.push(f)));\n });\n\n await Promise.all(promises);\n decFolders.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n const noneFolder = new FolderView();\n noneFolder.name = this.i18nService.t(\"noneFolder\");\n decFolders.push(noneFolder);\n\n await this.stateService.setDecryptedFolders(decFolders);\n return decFolders;\n }\n\n async getAllNested(folders?: FolderView[]): Promise[]> {\n folders = folders ?? (await this.getAllDecrypted());\n const nodes: TreeNode[] = [];\n folders.forEach((f) => {\n const folderCopy = new FolderView();\n folderCopy.id = f.id;\n folderCopy.revisionDate = f.revisionDate;\n const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, \"\").split(NestingDelimiter) : [];\n ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n });\n return nodes;\n }\n\n async getNested(id: string): Promise> {\n const folders = await this.getAllNested();\n return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode;\n }\n\n async saveWithServer(folder: Folder): Promise {\n const request = new FolderRequest(folder);\n\n let response: FolderResponse;\n if (folder.id == null) {\n response = await this.apiService.postFolder(request);\n folder.id = response.id;\n } else {\n response = await this.apiService.putFolder(folder.id, request);\n }\n\n const data = new FolderData(response);\n await this.upsert(data);\n }\n\n async upsert(folder: FolderData | FolderData[]): Promise {\n let folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n folders = {};\n }\n\n if (folder instanceof FolderData) {\n const f = folder as FolderData;\n folders[f.id] = f;\n } else {\n (folder as FolderData[]).forEach((f) => {\n folders[f.id] = f;\n });\n }\n\n await this.stateService.setDecryptedFolders(null);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async replace(folders: { [id: string]: FolderData }): Promise {\n await this.stateService.setDecryptedFolders(null);\n await this.stateService.setEncryptedFolders(folders);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setDecryptedFolders(null, { userId: userId });\n await this.stateService.setEncryptedFolders(null, { userId: userId });\n }\n\n async delete(id: string | string[]): Promise {\n const folders = await this.stateService.getEncryptedFolders();\n if (folders == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (folders[id] == null) {\n return;\n }\n delete folders[id];\n } else {\n (id as string[]).forEach((i) => {\n delete folders[i];\n });\n }\n\n await this.stateService.setDecryptedFolders(null);\n await this.stateService.setEncryptedFolders(folders);\n\n // Items in a deleted folder are re-assigned to \"No Folder\"\n const ciphers = await this.stateService.getEncryptedCiphers();\n if (ciphers != null) {\n const updates: CipherData[] = [];\n for (const cId in ciphers) {\n if (ciphers[cId].folderId === id) {\n ciphers[cId].folderId = null;\n updates.push(ciphers[cId]);\n }\n }\n if (updates.length > 0) {\n this.cipherService.upsert(updates);\n }\n }\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteFolder(id);\n await this.delete(id);\n }\n}\n","import { I18nService as I18nServiceAbstraction } from \"../abstractions/i18n.service\";\n\nexport class I18nService implements I18nServiceAbstraction {\n locale: string;\n // First locale is the default (English)\n supportedTranslationLocales: string[] = [\"en\"];\n translationLocale: string;\n collator: Intl.Collator;\n localeNames = new Map([\n [\"af\", \"Afrikaans\"],\n [\"az\", \"Azərbaycanca\"],\n [\"be\", \"Беларуская\"],\n [\"bg\", \"български\"],\n [\"bn\", \"বাংলা\"],\n [\"bs\", \"bosanski jezik\"],\n [\"ca\", \"català\"],\n [\"cs\", \"čeština\"],\n [\"da\", \"dansk\"],\n [\"de\", \"Deutsch\"],\n [\"el\", \"Ελληνικά\"],\n [\"en\", \"English\"],\n [\"en-GB\", \"English (British)\"],\n [\"en-IN\", \"English (India)\"],\n [\"eo\", \"Esperanto\"],\n [\"es\", \"español\"],\n [\"et\", \"eesti\"],\n [\"fa\", \"فارسی\"],\n [\"fi\", \"suomi\"],\n [\"fil\", \"Wikang Filipino\"],\n [\"fr\", \"français\"],\n [\"he\", \"עברית\"],\n [\"hi\", \"हिन्दी\"],\n [\"hr\", \"hrvatski\"],\n [\"hu\", \"magyar\"],\n [\"id\", \"Bahasa Indonesia\"],\n [\"it\", \"italiano\"],\n [\"ja\", \"日本語\"],\n [\"ka\", \"ქართული\"],\n [\"km\", \"ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ\"],\n [\"kn\", \"ಕನ್ನಡ\"],\n [\"ko\", \"한국어\"],\n [\"lt\", \"lietuvių kalba\"],\n [\"lv\", \"Latvietis\"],\n [\"me\", \"црногорски\"],\n [\"ml\", \"മലയാളം\"],\n [\"nb\", \"norsk (bokmål)\"],\n [\"nl\", \"Nederlands\"],\n [\"nn\", \"Norsk Nynorsk\"],\n [\"pl\", \"polski\"],\n [\"pt-BR\", \"português do Brasil\"],\n [\"pt-PT\", \"português\"],\n [\"ro\", \"română\"],\n [\"ru\", \"русский\"],\n [\"si\", \"සිංහල\"],\n [\"sk\", \"slovenčina\"],\n [\"sl\", \"Slovenski jezik, Slovenščina\"],\n [\"sr\", \"Српски\"],\n [\"sv\", \"svenska\"],\n [\"th\", \"ไทย\"],\n [\"tr\", \"Türkçe\"],\n [\"uk\", \"українська\"],\n [\"vi\", \"Tiếng Việt\"],\n [\"zh-CN\", \"中文(中国大陆)\"],\n [\"zh-TW\", \"中文(台灣)\"],\n ]);\n\n protected inited: boolean;\n protected defaultMessages: any = {};\n protected localeMessages: any = {};\n\n constructor(\n protected systemLanguage: string,\n protected localesDirectory: string,\n protected getLocalesJson: (formattedLocale: string) => Promise\n ) {\n this.systemLanguage = systemLanguage.replace(\"_\", \"-\");\n }\n\n async init(locale?: string) {\n if (this.inited) {\n throw new Error(\"i18n already initialized.\");\n }\n if (this.supportedTranslationLocales == null || this.supportedTranslationLocales.length === 0) {\n throw new Error(\"supportedTranslationLocales not set.\");\n }\n\n this.inited = true;\n this.locale = this.translationLocale = locale != null ? locale : this.systemLanguage;\n\n try {\n this.collator = new Intl.Collator(this.locale, { numeric: true, sensitivity: \"base\" });\n } catch {\n this.collator = null;\n }\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.translationLocale.slice(0, 2);\n\n if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n this.translationLocale = this.supportedTranslationLocales[0];\n }\n }\n\n if (this.localesDirectory != null) {\n await this.loadMessages(this.translationLocale, this.localeMessages);\n if (this.translationLocale !== this.supportedTranslationLocales[0]) {\n await this.loadMessages(this.supportedTranslationLocales[0], this.defaultMessages);\n }\n }\n }\n\n t(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.translate(id, p1, p2, p3);\n }\n\n translate(id: string, p1?: string, p2?: string, p3?: string): string {\n let result: string;\n // eslint-disable-next-line\n if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n result = this.localeMessages[id];\n // eslint-disable-next-line\n } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n result = this.defaultMessages[id];\n } else {\n result = \"\";\n }\n\n if (result !== \"\") {\n if (p1 != null) {\n result = result.split(\"__$1__\").join(p1);\n }\n if (p2 != null) {\n result = result.split(\"__$2__\").join(p2);\n }\n if (p3 != null) {\n result = result.split(\"__$3__\").join(p3);\n }\n }\n\n return result;\n }\n\n private async loadMessages(locale: string, messagesObj: any): Promise {\n const formattedLocale = locale.replace(\"-\", \"_\");\n const locales = await this.getLocalesJson(formattedLocale);\n for (const prop in locales) {\n // eslint-disable-next-line\n if (!locales.hasOwnProperty(prop)) {\n continue;\n }\n messagesObj[prop] = locales[prop].message;\n\n if (locales[prop].placeholders) {\n for (const placeProp in locales[prop].placeholders) {\n if (\n !locales[prop].placeholders.hasOwnProperty(placeProp) || // eslint-disable-line\n !locales[prop].placeholders[placeProp].content\n ) {\n continue;\n }\n\n const replaceToken = \"\\\\$\" + placeProp.toUpperCase() + \"\\\\$\";\n let replaceContent = locales[prop].placeholders[placeProp].content;\n if (replaceContent === \"$1\" || replaceContent === \"$2\" || replaceContent === \"$3\") {\n replaceContent = \"__$\" + replaceContent + \"__\";\n }\n messagesObj[prop] = messagesObj[prop].replace(\n new RegExp(replaceToken, \"g\"),\n replaceContent\n );\n }\n }\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CollectionService } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { ImportService as ImportServiceAbstraction } from \"../abstractions/import.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport {\n featuredImportOptions,\n ImportOption,\n ImportType,\n regularImportOptions,\n} from \"../enums/importOptions\";\nimport { AscendoCsvImporter } from \"../importers/ascendoCsvImporter\";\nimport { AvastCsvImporter } from \"../importers/avastCsvImporter\";\nimport { AvastJsonImporter } from \"../importers/avastJsonImporter\";\nimport { AviraCsvImporter } from \"../importers/aviraCsvImporter\";\nimport { BitwardenCsvImporter } from \"../importers/bitwardenCsvImporter\";\nimport { BitwardenJsonImporter } from \"../importers/bitwardenJsonImporter\";\nimport { BitwardenPasswordProtectedImporter } from \"../importers/bitwardenPasswordProtectedImporter\";\nimport { BlackBerryCsvImporter } from \"../importers/blackBerryCsvImporter\";\nimport { BlurCsvImporter } from \"../importers/blurCsvImporter\";\nimport { ButtercupCsvImporter } from \"../importers/buttercupCsvImporter\";\nimport { ChromeCsvImporter } from \"../importers/chromeCsvImporter\";\nimport { ClipperzHtmlImporter } from \"../importers/clipperzHtmlImporter\";\nimport { CodebookCsvImporter } from \"../importers/codebookCsvImporter\";\nimport { DashlaneCsvImporter } from \"../importers/dashlaneImporters/dashlaneCsvImporter\";\nimport { DashlaneJsonImporter } from \"../importers/dashlaneImporters/dashlaneJsonImporter\";\nimport { EncryptrCsvImporter } from \"../importers/encryptrCsvImporter\";\nimport { EnpassCsvImporter } from \"../importers/enpassCsvImporter\";\nimport { EnpassJsonImporter } from \"../importers/enpassJsonImporter\";\nimport { FirefoxCsvImporter } from \"../importers/firefoxCsvImporter\";\nimport { FSecureFskImporter } from \"../importers/fsecureFskImporter\";\nimport { GnomeJsonImporter } from \"../importers/gnomeJsonImporter\";\nimport { ImportError } from \"../importers/importError\";\nimport { Importer } from \"../importers/importer\";\nimport { KasperskyTxtImporter } from \"../importers/kasperskyTxtImporter\";\nimport { KeePass2XmlImporter } from \"../importers/keepass2XmlImporter\";\nimport { KeePassXCsvImporter } from \"../importers/keepassxCsvImporter\";\nimport { KeeperCsvImporter } from \"../importers/keeperImporters/keeperCsvImporter\";\nimport { LastPassCsvImporter } from \"../importers/lastpassCsvImporter\";\nimport { LogMeOnceCsvImporter } from \"../importers/logMeOnceCsvImporter\";\nimport { MeldiumCsvImporter } from \"../importers/meldiumCsvImporter\";\nimport { MSecureCsvImporter } from \"../importers/msecureCsvImporter\";\nimport { MykiCsvImporter } from \"../importers/mykiCsvImporter\";\nimport { NordPassCsvImporter } from \"../importers/nordpassCsvImporter\";\nimport { OnePassword1PifImporter } from \"../importers/onepasswordImporters/onepassword1PifImporter\";\nimport { OnePassword1PuxImporter } from \"../importers/onepasswordImporters/onepassword1PuxImporter\";\nimport { OnePasswordMacCsvImporter } from \"../importers/onepasswordImporters/onepasswordMacCsvImporter\";\nimport { OnePasswordWinCsvImporter } from \"../importers/onepasswordImporters/onepasswordWinCsvImporter\";\nimport { PadlockCsvImporter } from \"../importers/padlockCsvImporter\";\nimport { PassKeepCsvImporter } from \"../importers/passkeepCsvImporter\";\nimport { PassmanJsonImporter } from \"../importers/passmanJsonImporter\";\nimport { PasspackCsvImporter } from \"../importers/passpackCsvImporter\";\nimport { PasswordAgentCsvImporter } from \"../importers/passwordAgentCsvImporter\";\nimport { PasswordBossJsonImporter } from \"../importers/passwordBossJsonImporter\";\nimport { PasswordDragonXmlImporter } from \"../importers/passwordDragonXmlImporter\";\nimport { PasswordSafeXmlImporter } from \"../importers/passwordSafeXmlImporter\";\nimport { PasswordWalletTxtImporter } from \"../importers/passwordWalletTxtImporter\";\nimport { RememBearCsvImporter } from \"../importers/rememBearCsvImporter\";\nimport { RoboFormCsvImporter } from \"../importers/roboformCsvImporter\";\nimport { SafariCsvImporter } from \"../importers/safariCsvImporter\";\nimport { SafeInCloudXmlImporter } from \"../importers/safeInCloudXmlImporter\";\nimport { SaferPassCsvImporter } from \"../importers/saferpassCsvImport\";\nimport { SecureSafeCsvImporter } from \"../importers/secureSafeCsvImporter\";\nimport { SplashIdCsvImporter } from \"../importers/splashIdCsvImporter\";\nimport { StickyPasswordXmlImporter } from \"../importers/stickyPasswordXmlImporter\";\nimport { TrueKeyCsvImporter } from \"../importers/truekeyCsvImporter\";\nimport { UpmCsvImporter } from \"../importers/upmCsvImporter\";\nimport { YotiCsvImporter } from \"../importers/yotiCsvImporter\";\nimport { ZohoVaultCsvImporter } from \"../importers/zohoVaultCsvImporter\";\nimport { Utils } from \"../misc/utils\";\nimport { ImportResult } from \"../models/domain/importResult\";\nimport { CipherRequest } from \"../models/request/cipherRequest\";\nimport { CollectionRequest } from \"../models/request/collectionRequest\";\nimport { FolderRequest } from \"../models/request/folderRequest\";\nimport { ImportCiphersRequest } from \"../models/request/importCiphersRequest\";\nimport { ImportOrganizationCiphersRequest } from \"../models/request/importOrganizationCiphersRequest\";\nimport { KvpRequest } from \"../models/request/kvpRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { CipherView } from \"../models/view/cipherView\";\n\nexport class ImportService implements ImportServiceAbstraction {\n featuredImportOptions = featuredImportOptions as readonly ImportOption[];\n\n regularImportOptions = regularImportOptions as readonly ImportOption[];\n\n constructor(\n private cipherService: CipherService,\n private folderService: FolderService,\n private apiService: ApiService,\n private i18nService: I18nService,\n private collectionService: CollectionService,\n private platformUtilsService: PlatformUtilsService,\n private cryptoService: CryptoService\n ) {}\n\n getImportOptions(): ImportOption[] {\n return this.featuredImportOptions.concat(this.regularImportOptions);\n }\n\n async import(\n importer: Importer,\n fileContents: string,\n organizationId: string = null\n ): Promise {\n const importResult = await importer.parse(fileContents);\n if (importResult.success) {\n if (importResult.folders.length === 0 && importResult.ciphers.length === 0) {\n return new ImportError(this.i18nService.t(\"importNothingError\"));\n } else if (importResult.ciphers.length > 0) {\n const halfway = Math.floor(importResult.ciphers.length / 2);\n const last = importResult.ciphers.length - 1;\n\n if (\n this.badData(importResult.ciphers[0]) &&\n this.badData(importResult.ciphers[halfway]) &&\n this.badData(importResult.ciphers[last])\n ) {\n return new ImportError(this.i18nService.t(\"importFormatError\"));\n }\n }\n try {\n await this.postImport(importResult, organizationId);\n } catch (error) {\n const errorResponse = new ErrorResponse(error, 400);\n return this.handleServerError(errorResponse, importResult);\n }\n return null;\n } else {\n if (!Utils.isNullOrWhitespace(importResult.errorMessage)) {\n return new ImportError(importResult.errorMessage, importResult.missingPassword);\n } else {\n return new ImportError(\n this.i18nService.t(\"importFormatError\"),\n importResult.missingPassword\n );\n }\n }\n }\n\n getImporter(\n format: ImportType | \"bitwardenpasswordprotected\",\n organizationId: string = null,\n password: string = null\n ): Importer {\n const importer = this.getImporterInstance(format, password);\n if (importer == null) {\n return null;\n }\n importer.organizationId = organizationId;\n return importer;\n }\n\n private getImporterInstance(format: ImportType | \"bitwardenpasswordprotected\", password: string) {\n if (format == null) {\n return null;\n }\n\n switch (format) {\n case \"bitwardencsv\":\n return new BitwardenCsvImporter();\n case \"bitwardenjson\":\n return new BitwardenJsonImporter(this.cryptoService, this.i18nService);\n case \"bitwardenpasswordprotected\":\n return new BitwardenPasswordProtectedImporter(\n this.cryptoService,\n this.i18nService,\n password\n );\n case \"lastpasscsv\":\n case \"passboltcsv\":\n return new LastPassCsvImporter();\n case \"keepassxcsv\":\n return new KeePassXCsvImporter();\n case \"aviracsv\":\n return new AviraCsvImporter();\n case \"blurcsv\":\n return new BlurCsvImporter();\n case \"safeincloudxml\":\n return new SafeInCloudXmlImporter();\n case \"padlockcsv\":\n return new PadlockCsvImporter();\n case \"keepass2xml\":\n return new KeePass2XmlImporter();\n case \"chromecsv\":\n case \"operacsv\":\n case \"vivaldicsv\":\n return new ChromeCsvImporter();\n case \"firefoxcsv\":\n return new FirefoxCsvImporter();\n case \"upmcsv\":\n return new UpmCsvImporter();\n case \"saferpasscsv\":\n return new SaferPassCsvImporter();\n case \"safaricsv\":\n return new SafariCsvImporter();\n case \"meldiumcsv\":\n return new MeldiumCsvImporter();\n case \"1password1pif\":\n return new OnePassword1PifImporter();\n case \"1password1pux\":\n return new OnePassword1PuxImporter();\n case \"1passwordwincsv\":\n return new OnePasswordWinCsvImporter();\n case \"1passwordmaccsv\":\n return new OnePasswordMacCsvImporter();\n case \"keepercsv\":\n return new KeeperCsvImporter();\n // case \"keeperjson\":\n // return new KeeperJsonImporter();\n case \"passworddragonxml\":\n return new PasswordDragonXmlImporter();\n case \"enpasscsv\":\n return new EnpassCsvImporter();\n case \"enpassjson\":\n return new EnpassJsonImporter();\n case \"pwsafexml\":\n return new PasswordSafeXmlImporter();\n case \"dashlanecsv\":\n return new DashlaneCsvImporter();\n case \"dashlanejson\":\n return new DashlaneJsonImporter();\n case \"msecurecsv\":\n return new MSecureCsvImporter();\n case \"stickypasswordxml\":\n return new StickyPasswordXmlImporter();\n case \"truekeycsv\":\n return new TrueKeyCsvImporter();\n case \"clipperzhtml\":\n return new ClipperzHtmlImporter();\n case \"roboformcsv\":\n return new RoboFormCsvImporter();\n case \"ascendocsv\":\n return new AscendoCsvImporter();\n case \"passwordbossjson\":\n return new PasswordBossJsonImporter();\n case \"zohovaultcsv\":\n return new ZohoVaultCsvImporter();\n case \"splashidcsv\":\n return new SplashIdCsvImporter();\n case \"passkeepcsv\":\n return new PassKeepCsvImporter();\n case \"gnomejson\":\n return new GnomeJsonImporter();\n case \"passwordagentcsv\":\n return new PasswordAgentCsvImporter();\n case \"passpackcsv\":\n return new PasspackCsvImporter();\n case \"passmanjson\":\n return new PassmanJsonImporter();\n case \"avastcsv\":\n return new AvastCsvImporter();\n case \"avastjson\":\n return new AvastJsonImporter();\n case \"fsecurefsk\":\n return new FSecureFskImporter();\n case \"kasperskytxt\":\n return new KasperskyTxtImporter();\n case \"remembearcsv\":\n return new RememBearCsvImporter();\n case \"passwordwallettxt\":\n return new PasswordWalletTxtImporter();\n case \"mykicsv\":\n return new MykiCsvImporter();\n case \"securesafecsv\":\n return new SecureSafeCsvImporter();\n case \"logmeoncecsv\":\n return new LogMeOnceCsvImporter();\n case \"blackberrycsv\":\n return new BlackBerryCsvImporter();\n case \"buttercupcsv\":\n return new ButtercupCsvImporter();\n case \"codebookcsv\":\n return new CodebookCsvImporter();\n case \"encryptrcsv\":\n return new EncryptrCsvImporter();\n case \"yoticsv\":\n return new YotiCsvImporter();\n case \"nordpasscsv\":\n return new NordPassCsvImporter();\n default:\n return null;\n }\n }\n\n private async postImport(importResult: ImportResult, organizationId: string = null) {\n if (organizationId == null) {\n const request = new ImportCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.folders != null) {\n for (let i = 0; i < importResult.folders.length; i++) {\n const f = await this.folderService.encrypt(importResult.folders[i]);\n request.folders.push(new FolderRequest(f));\n }\n }\n if (importResult.folderRelationships != null) {\n importResult.folderRelationships.forEach((r) =>\n request.folderRelationships.push(new KvpRequest(r[0], r[1]))\n );\n }\n return await this.apiService.postImportCiphers(request);\n } else {\n const request = new ImportOrganizationCiphersRequest();\n for (let i = 0; i < importResult.ciphers.length; i++) {\n importResult.ciphers[i].organizationId = organizationId;\n const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n request.ciphers.push(new CipherRequest(c));\n }\n if (importResult.collections != null) {\n for (let i = 0; i < importResult.collections.length; i++) {\n importResult.collections[i].organizationId = organizationId;\n const c = await this.collectionService.encrypt(importResult.collections[i]);\n request.collections.push(new CollectionRequest(c));\n }\n }\n if (importResult.collectionRelationships != null) {\n importResult.collectionRelationships.forEach((r) =>\n request.collectionRelationships.push(new KvpRequest(r[0], r[1]))\n );\n }\n return await this.apiService.postImportOrganizationCiphers(organizationId, request);\n }\n }\n\n private badData(c: CipherView) {\n return (\n (c.name == null || c.name === \"--\") &&\n c.type === CipherType.Login &&\n c.login != null &&\n Utils.isNullOrWhitespace(c.login.password)\n );\n }\n\n private handleServerError(errorResponse: ErrorResponse, importResult: ImportResult): ImportError {\n if (errorResponse.validationErrors == null) {\n return new ImportError(errorResponse.message);\n }\n\n let errorMessage = \"\";\n\n Object.entries(errorResponse.validationErrors).forEach(([key, value], index) => {\n let item;\n let itemType;\n const i = Number(key.match(/[0-9]+/)[0]);\n\n switch (key.match(/^\\w+/)[0]) {\n case \"Ciphers\":\n item = importResult.ciphers[i];\n itemType = CipherType[item.type];\n break;\n case \"Folders\":\n item = importResult.folders[i];\n itemType = \"Folder\";\n break;\n case \"Collections\":\n item = importResult.collections[i];\n itemType = \"Collection\";\n break;\n default:\n return;\n }\n\n if (index > 0) {\n errorMessage += \"\\n\\n\";\n }\n\n if (itemType !== \"Folder\" && itemType !== \"Collection\") {\n errorMessage += \"[\" + (i + 1) + \"] \";\n }\n\n errorMessage += \"[\" + itemType + '] \"' + item.name + '\": ' + value;\n });\n\n return new ImportError(errorMessage);\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { OrganizationUserType } from \"../enums/organizationUserType\";\nimport { Utils } from \"../misc/utils\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SetKeyConnectorKeyRequest } from \"../models/request/account/setKeyConnectorKeyRequest\";\nimport { KeyConnectorUserKeyRequest } from \"../models/request/keyConnectorUserKeyRequest\";\nimport { KeysRequest } from \"../models/request/keysRequest\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport class KeyConnectorService implements KeyConnectorServiceAbstraction {\n constructor(\n private stateService: StateService,\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private tokenService: TokenService,\n private logService: LogService,\n private organizationService: OrganizationService,\n private cryptoFunctionService: CryptoFunctionService,\n private logoutCallback: (expired: boolean, userId?: string) => void\n ) {}\n\n setUsesKeyConnector(usesKeyConnector: boolean) {\n return this.stateService.setUsesKeyConnector(usesKeyConnector);\n }\n\n async getUsesKeyConnector(): Promise {\n return await this.stateService.getUsesKeyConnector();\n }\n\n async userNeedsMigration() {\n const loggedInUsingSso = await this.tokenService.getIsExternal();\n const requiredByOrganization = (await this.getManagingOrganization()) != null;\n const userIsNotUsingKeyConnector = !(await this.getUsesKeyConnector());\n\n return loggedInUsingSso && requiredByOrganization && userIsNotUsingKeyConnector;\n }\n\n async migrateUser() {\n const organization = await this.getManagingOrganization();\n const key = await this.cryptoService.getKey();\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(key.encKeyB64);\n\n try {\n await this.apiService.postUserKeyToKeyConnector(\n organization.keyConnectorUrl,\n keyConnectorRequest\n );\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n\n await this.apiService.postConvertToKeyConnector();\n }\n\n async getAndSetKey(url: string) {\n try {\n const userKeyResponse = await this.apiService.getUserKeyFromKeyConnector(url);\n const keyArr = Utils.fromB64ToArray(userKeyResponse.key);\n const k = new SymmetricCryptoKey(keyArr);\n await this.cryptoService.setKey(k);\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n }\n\n async getManagingOrganization() {\n const orgs = await this.organizationService.getAll();\n return orgs.find(\n (o) =>\n o.keyConnectorEnabled &&\n o.type !== OrganizationUserType.Admin &&\n o.type !== OrganizationUserType.Owner &&\n !o.isProviderUser\n );\n }\n\n async convertNewSsoUserToKeyConnector(tokenResponse: IdentityTokenResponse, orgId: string) {\n const { kdf, kdfIterations, keyConnectorUrl } = tokenResponse;\n const password = await this.cryptoFunctionService.randomBytes(64);\n\n const k = await this.cryptoService.makeKey(\n Utils.fromBufferToB64(password),\n await this.tokenService.getEmail(),\n kdf,\n kdfIterations\n );\n const keyConnectorRequest = new KeyConnectorUserKeyRequest(k.encKeyB64);\n await this.cryptoService.setKey(k);\n\n const encKey = await this.cryptoService.makeEncKey(k);\n await this.cryptoService.setEncKey(encKey[1].encryptedString);\n\n const [pubKey, privKey] = await this.cryptoService.makeKeyPair();\n\n try {\n await this.apiService.postUserKeyToKeyConnector(keyConnectorUrl, keyConnectorRequest);\n } catch (e) {\n this.handleKeyConnectorError(e);\n }\n\n const keys = new KeysRequest(pubKey, privKey.encryptedString);\n const setPasswordRequest = new SetKeyConnectorKeyRequest(\n encKey[1].encryptedString,\n kdf,\n kdfIterations,\n orgId,\n keys\n );\n await this.apiService.postSetKeyConnectorKey(setPasswordRequest);\n }\n\n async setConvertAccountRequired(status: boolean) {\n await this.stateService.setConvertAccountToKeyConnector(status);\n }\n\n async getConvertAccountRequired(): Promise {\n return await this.stateService.getConvertAccountToKeyConnector();\n }\n\n async removeConvertAccountRequired() {\n await this.stateService.setConvertAccountToKeyConnector(null);\n }\n\n async clear() {\n await this.removeConvertAccountRequired();\n }\n\n private handleKeyConnectorError(e: any) {\n this.logService.error(e);\n if (this.logoutCallback != null) {\n this.logoutCallback(false);\n }\n throw new Error(\"Key Connector error\");\n }\n}\n","import * as signalR from \"@microsoft/signalr\";\nimport * as signalRMsgPack from \"@microsoft/signalr-protocol-msgpack\";\n\nimport { ApiService } from \"../abstractions/api.service\";\nimport { AppIdService } from \"../abstractions/appId.service\";\nimport { AuthService } from \"../abstractions/auth.service\";\nimport { EnvironmentService } from \"../abstractions/environment.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { NotificationsService as NotificationsServiceAbstraction } from \"../abstractions/notifications.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SyncService } from \"../abstractions/sync.service\";\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { NotificationType } from \"../enums/notificationType\";\nimport {\n NotificationResponse,\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notificationResponse\";\n\nexport class NotificationsService implements NotificationsServiceAbstraction {\n private signalrConnection: signalR.HubConnection;\n private url: string;\n private connected = false;\n private inited = false;\n private inactive = false;\n private reconnectTimer: any = null;\n\n constructor(\n private syncService: SyncService,\n private appIdService: AppIdService,\n private apiService: ApiService,\n private environmentService: EnvironmentService,\n private logoutCallback: (expired: boolean) => Promise,\n private logService: LogService,\n private stateService: StateService,\n private authService: AuthService\n ) {\n this.environmentService.urls.subscribe(() => {\n if (!this.inited) {\n return;\n }\n\n this.init();\n });\n }\n\n async init(): Promise {\n this.inited = false;\n this.url = this.environmentService.getNotificationsUrl();\n\n // Set notifications server URL to `https://-` to effectively disable communication\n // with the notifications server from the client app\n if (this.url === \"https://-\") {\n return;\n }\n\n if (this.signalrConnection != null) {\n this.signalrConnection.off(\"ReceiveMessage\");\n this.signalrConnection.off(\"Heartbeat\");\n await this.signalrConnection.stop();\n this.connected = false;\n this.signalrConnection = null;\n }\n\n this.signalrConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.url + \"/hub\", {\n accessTokenFactory: () => this.apiService.getActiveBearerToken(),\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets,\n })\n .withHubProtocol(new signalRMsgPack.MessagePackHubProtocol() as signalR.IHubProtocol)\n // .configureLogging(signalR.LogLevel.Trace)\n .build();\n\n this.signalrConnection.on(\"ReceiveMessage\", (data: any) =>\n this.processNotification(new NotificationResponse(data))\n );\n // eslint-disable-next-line\n this.signalrConnection.on(\"Heartbeat\", (data: any) => {\n /*console.log('Heartbeat!');*/\n });\n this.signalrConnection.onclose(() => {\n this.connected = false;\n this.reconnect(true);\n });\n this.inited = true;\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(false);\n }\n }\n\n async updateConnection(sync = false): Promise {\n if (!this.inited) {\n return;\n }\n try {\n if (await this.isAuthedAndUnlocked()) {\n await this.reconnect(sync);\n } else {\n await this.signalrConnection.stop();\n }\n } catch (e) {\n this.logService.error(e.toString());\n }\n }\n\n async reconnectFromActivity(): Promise {\n this.inactive = false;\n if (this.inited && !this.connected) {\n await this.reconnect(true);\n }\n }\n\n async disconnectFromInactivity(): Promise {\n this.inactive = true;\n if (this.inited && this.connected) {\n await this.signalrConnection.stop();\n }\n }\n\n private async processNotification(notification: NotificationResponse) {\n const appId = await this.appIdService.getAppId();\n if (notification == null || notification.contextId === appId) {\n return;\n }\n\n const isAuthenticated = await this.stateService.getIsAuthenticated();\n const payloadUserId = notification.payload.userId || notification.payload.UserId;\n const myUserId = await this.stateService.getUserId();\n if (isAuthenticated && payloadUserId != null && payloadUserId !== myUserId) {\n return;\n }\n\n switch (notification.type) {\n case NotificationType.SyncCipherCreate:\n case NotificationType.SyncCipherUpdate:\n await this.syncService.syncUpsertCipher(\n notification.payload as SyncCipherNotification,\n notification.type === NotificationType.SyncCipherUpdate\n );\n break;\n case NotificationType.SyncCipherDelete:\n case NotificationType.SyncLoginDelete:\n await this.syncService.syncDeleteCipher(notification.payload as SyncCipherNotification);\n break;\n case NotificationType.SyncFolderCreate:\n case NotificationType.SyncFolderUpdate:\n await this.syncService.syncUpsertFolder(\n notification.payload as SyncFolderNotification,\n notification.type === NotificationType.SyncFolderUpdate\n );\n break;\n case NotificationType.SyncFolderDelete:\n await this.syncService.syncDeleteFolder(notification.payload as SyncFolderNotification);\n break;\n case NotificationType.SyncVault:\n case NotificationType.SyncCiphers:\n case NotificationType.SyncSettings:\n if (isAuthenticated) {\n await this.syncService.fullSync(false);\n }\n break;\n case NotificationType.SyncOrgKeys:\n if (isAuthenticated) {\n await this.syncService.fullSync(true);\n // Stop so a reconnect can be made\n await this.signalrConnection.stop();\n }\n break;\n case NotificationType.LogOut:\n if (isAuthenticated) {\n this.logoutCallback(true);\n }\n break;\n case NotificationType.SyncSendCreate:\n case NotificationType.SyncSendUpdate:\n await this.syncService.syncUpsertSend(\n notification.payload as SyncSendNotification,\n notification.type === NotificationType.SyncSendUpdate\n );\n break;\n case NotificationType.SyncSendDelete:\n await this.syncService.syncDeleteSend(notification.payload as SyncSendNotification);\n break;\n default:\n break;\n }\n }\n\n private async reconnect(sync: boolean) {\n if (this.reconnectTimer != null) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.connected || !this.inited || this.inactive) {\n return;\n }\n const authedAndUnlocked = await this.isAuthedAndUnlocked();\n if (!authedAndUnlocked) {\n return;\n }\n\n try {\n await this.signalrConnection.start();\n this.connected = true;\n if (sync) {\n await this.syncService.fullSync(false);\n }\n } catch (e) {\n this.logService.error(e);\n }\n\n if (!this.connected) {\n this.reconnectTimer = setTimeout(() => this.reconnect(sync), this.random(120000, 300000));\n }\n }\n\n private async isAuthedAndUnlocked() {\n const authStatus = await this.authService.getAuthStatus();\n return authStatus >= AuthenticationStatus.Unlocked;\n }\n\n private random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n}\n","import { OrganizationService as OrganizationServiceAbstraction } from \"../abstractions/organization.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { Organization } from \"../models/domain/organization\";\n\nexport class OrganizationService implements OrganizationServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const organizations = await this.stateService.getOrganizations();\n // eslint-disable-next-line\n if (organizations == null || !organizations.hasOwnProperty(id)) {\n return null;\n }\n\n return new Organization(organizations[id]);\n }\n\n async getByIdentifier(identifier: string): Promise {\n const organizations = await this.getAll();\n if (organizations == null || organizations.length === 0) {\n return null;\n }\n\n return organizations.find((o) => o.identifier === identifier);\n }\n\n async getAll(userId?: string): Promise {\n const organizations = await this.stateService.getOrganizations({ userId: userId });\n const response: Organization[] = [];\n for (const id in organizations) {\n // eslint-disable-next-line\n if (organizations.hasOwnProperty(id) && !organizations[id].isProviderUser) {\n response.push(new Organization(organizations[id]));\n }\n }\n const sortedResponse = response.sort((a, b) => a.name.localeCompare(b.name));\n return sortedResponse;\n }\n\n async save(organizations: { [id: string]: OrganizationData }) {\n return await this.stateService.setOrganizations(organizations);\n }\n\n async canManageSponsorships(): Promise {\n const orgs = await this.getAll();\n return orgs.some(\n (o) => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null\n );\n }\n\n async hasOrganizations(userId?: string): Promise {\n const organizations = await this.getAll(userId);\n return organizations.length > 0;\n }\n}\n","import * as zxcvbn from \"zxcvbn\";\n\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { PasswordGenerationService as PasswordGenerationServiceAbstraction } from \"../abstractions/passwordGeneration.service\";\nimport { PolicyService } from \"../abstractions/policy.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { EEFLongWordList } from \"../misc/wordlist\";\nimport { EncString } from \"../models/domain/encString\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { PasswordGeneratorPolicyOptions } from \"../models/domain/passwordGeneratorPolicyOptions\";\nimport { Policy } from \"../models/domain/policy\";\n\nconst DefaultOptions = {\n length: 14,\n ambiguous: false,\n number: true,\n minNumber: 1,\n uppercase: true,\n minUppercase: 0,\n lowercase: true,\n minLowercase: 0,\n special: false,\n minSpecial: 1,\n type: \"password\",\n numWords: 3,\n wordSeparator: \"-\",\n capitalize: false,\n includeNumber: false,\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private policyService: PolicyService,\n private stateService: StateService\n ) {}\n\n async generatePassword(options: any): Promise {\n // overload defaults with given options\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.type === \"passphrase\") {\n return this.generatePassphrase(options);\n }\n\n // sanitize\n this.sanitizePasswordLength(o, true);\n\n const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n if (o.length < minLength) {\n o.length = minLength;\n }\n\n const positions: string[] = [];\n if (o.lowercase && o.minLowercase > 0) {\n for (let i = 0; i < o.minLowercase; i++) {\n positions.push(\"l\");\n }\n }\n if (o.uppercase && o.minUppercase > 0) {\n for (let i = 0; i < o.minUppercase; i++) {\n positions.push(\"u\");\n }\n }\n if (o.number && o.minNumber > 0) {\n for (let i = 0; i < o.minNumber; i++) {\n positions.push(\"n\");\n }\n }\n if (o.special && o.minSpecial > 0) {\n for (let i = 0; i < o.minSpecial; i++) {\n positions.push(\"s\");\n }\n }\n while (positions.length < o.length) {\n positions.push(\"a\");\n }\n\n // shuffle\n await this.shuffleArray(positions);\n\n // build out the char sets\n let allCharSet = \"\";\n\n let lowercaseCharSet = \"abcdefghijkmnopqrstuvwxyz\";\n if (o.ambiguous) {\n lowercaseCharSet += \"l\";\n }\n if (o.lowercase) {\n allCharSet += lowercaseCharSet;\n }\n\n let uppercaseCharSet = \"ABCDEFGHJKLMNPQRSTUVWXYZ\";\n if (o.ambiguous) {\n uppercaseCharSet += \"IO\";\n }\n if (o.uppercase) {\n allCharSet += uppercaseCharSet;\n }\n\n let numberCharSet = \"23456789\";\n if (o.ambiguous) {\n numberCharSet += \"01\";\n }\n if (o.number) {\n allCharSet += numberCharSet;\n }\n\n const specialCharSet = \"!@#$%^&*\";\n if (o.special) {\n allCharSet += specialCharSet;\n }\n\n let password = \"\";\n for (let i = 0; i < o.length; i++) {\n let positionChars: string;\n switch (positions[i]) {\n case \"l\":\n positionChars = lowercaseCharSet;\n break;\n case \"u\":\n positionChars = uppercaseCharSet;\n break;\n case \"n\":\n positionChars = numberCharSet;\n break;\n case \"s\":\n positionChars = specialCharSet;\n break;\n case \"a\":\n positionChars = allCharSet;\n break;\n default:\n break;\n }\n\n const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n password += positionChars.charAt(randomCharIndex);\n }\n\n return password;\n }\n\n async generatePassphrase(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.numWords == null || o.numWords <= 2) {\n o.numWords = DefaultOptions.numWords;\n }\n if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n o.wordSeparator = \" \";\n }\n if (o.capitalize == null) {\n o.capitalize = false;\n }\n if (o.includeNumber == null) {\n o.includeNumber = false;\n }\n\n const listLength = EEFLongWordList.length - 1;\n const wordList = new Array(o.numWords);\n for (let i = 0; i < o.numWords; i++) {\n const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n if (o.capitalize) {\n wordList[i] = this.capitalize(EEFLongWordList[wordIndex]);\n } else {\n wordList[i] = EEFLongWordList[wordIndex];\n }\n }\n\n if (o.includeNumber) {\n await this.appendRandomNumberToRandomWord(wordList);\n }\n return wordList.join(o.wordSeparator);\n }\n\n async getOptions(): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let options = await this.stateService.getPasswordGenerationOptions();\n if (options == null) {\n options = Object.assign({}, DefaultOptions);\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setPasswordGenerationOptions(options);\n const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(options);\n options = enforcedOptions[0];\n return [options, enforcedOptions[1]];\n }\n\n async enforcePasswordGeneratorPoliciesOnOptions(\n options: any\n ): Promise<[any, PasswordGeneratorPolicyOptions]> {\n let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n if (enforcedPolicyOptions != null) {\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (enforcedPolicyOptions.useUppercase) {\n options.uppercase = true;\n }\n\n if (enforcedPolicyOptions.useLowercase) {\n options.lowercase = true;\n }\n\n if (enforcedPolicyOptions.useNumbers) {\n options.number = true;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (enforcedPolicyOptions.useSpecial) {\n options.special = true;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n // Must normalize these fields because the receiving call expects all options to pass the current rules\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (enforcedPolicyOptions.capitalize) {\n options.capitalize = true;\n }\n\n if (enforcedPolicyOptions.includeNumber) {\n options.includeNumber = true;\n }\n\n // Force default type if password/passphrase selected via policy\n if (\n enforcedPolicyOptions.defaultType === \"password\" ||\n enforcedPolicyOptions.defaultType === \"passphrase\"\n ) {\n options.type = enforcedPolicyOptions.defaultType;\n }\n } else {\n // UI layer expects an instantiated object to prevent more explicit null checks\n enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n }\n return [options, enforcedPolicyOptions];\n }\n\n async getPasswordGeneratorPolicyOptions(): Promise {\n const policies: Policy[] =\n this.policyService == null\n ? null\n : await this.policyService.getAll(PolicyType.PasswordGenerator);\n let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new PasswordGeneratorPolicyOptions();\n }\n\n // Password wins in multi-org collisions\n if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== \"password\") {\n enforcedOptions.defaultType = currentPolicy.data.defaultType;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.useUpper) {\n enforcedOptions.useUppercase = true;\n }\n\n if (currentPolicy.data.useLower) {\n enforcedOptions.useLowercase = true;\n }\n\n if (currentPolicy.data.useNumbers) {\n enforcedOptions.useNumbers = true;\n }\n\n if (\n currentPolicy.data.minNumbers != null &&\n currentPolicy.data.minNumbers > enforcedOptions.numberCount\n ) {\n enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n }\n\n if (currentPolicy.data.useSpecial) {\n enforcedOptions.useSpecial = true;\n }\n\n if (\n currentPolicy.data.minSpecial != null &&\n currentPolicy.data.minSpecial > enforcedOptions.specialCount\n ) {\n enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n }\n\n if (\n currentPolicy.data.minNumberWords != null &&\n currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords\n ) {\n enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n }\n\n if (currentPolicy.data.capitalize) {\n enforcedOptions.capitalize = true;\n }\n\n if (currentPolicy.data.includeNumber) {\n enforcedOptions.includeNumber = true;\n }\n });\n\n return enforcedOptions;\n }\n\n async saveOptions(options: any) {\n await this.stateService.setPasswordGenerationOptions(options);\n }\n\n async getHistory(): Promise {\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return new Array();\n }\n\n if ((await this.stateService.getDecryptedPasswordGenerationHistory()) == null) {\n const encrypted = await this.stateService.getEncryptedPasswordGenerationHistory();\n const decrypted = await this.decryptHistory(encrypted);\n await this.stateService.setDecryptedPasswordGenerationHistory(decrypted);\n }\n\n const passwordGenerationHistory =\n await this.stateService.getDecryptedPasswordGenerationHistory();\n return passwordGenerationHistory != null\n ? passwordGenerationHistory\n : new Array();\n }\n\n async addHistory(password: string): Promise {\n // Cannot add new history if no key is available\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n return;\n }\n\n const currentHistory = await this.getHistory();\n\n // Prevent duplicates\n if (this.matchesPrevious(password, currentHistory)) {\n return;\n }\n\n currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n // Remove old items.\n if (currentHistory.length > MaxPasswordsInHistory) {\n currentHistory.pop();\n }\n\n const newHistory = await this.encryptHistory(currentHistory);\n return await this.stateService.setEncryptedPasswordGenerationHistory(newHistory);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEncryptedPasswordGenerationHistory(null, { userId: userId });\n await this.stateService.setDecryptedPasswordGenerationHistory(null, { userId: userId });\n }\n\n passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n if (password == null || password.length === 0) {\n return null;\n }\n let globalUserInputs = [\"bitwarden\", \"bit\", \"warden\"];\n if (userInputs != null && userInputs.length > 0) {\n globalUserInputs = globalUserInputs.concat(userInputs);\n }\n // Use a hash set to get rid of any duplicate user inputs\n const finalUserInputs = Array.from(new Set(globalUserInputs));\n const result = zxcvbn(password, finalUserInputs);\n return result;\n }\n\n normalizeOptions(options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) {\n options.minLowercase = 0;\n options.minUppercase = 0;\n\n if (!options.length || options.length < 5) {\n options.length = 5;\n } else if (options.length > 128) {\n options.length = 128;\n }\n\n if (options.length < enforcedPolicyOptions.minLength) {\n options.length = enforcedPolicyOptions.minLength;\n }\n\n if (!options.minNumber) {\n options.minNumber = 0;\n } else if (options.minNumber > options.length) {\n options.minNumber = options.length;\n } else if (options.minNumber > 9) {\n options.minNumber = 9;\n }\n\n if (options.minNumber < enforcedPolicyOptions.numberCount) {\n options.minNumber = enforcedPolicyOptions.numberCount;\n }\n\n if (!options.minSpecial) {\n options.minSpecial = 0;\n } else if (options.minSpecial > options.length) {\n options.minSpecial = options.length;\n } else if (options.minSpecial > 9) {\n options.minSpecial = 9;\n }\n\n if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n options.minSpecial = enforcedPolicyOptions.specialCount;\n }\n\n if (options.minSpecial + options.minNumber > options.length) {\n options.minSpecial = options.length - options.minNumber;\n }\n\n if (options.numWords == null || options.length < 3) {\n options.numWords = 3;\n } else if (options.numWords > 20) {\n options.numWords = 20;\n }\n\n if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n options.numWords = enforcedPolicyOptions.minNumberWords;\n }\n\n if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n options.wordSeparator = options.wordSeparator[0];\n }\n\n this.sanitizePasswordLength(options, false);\n }\n\n private capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private async appendRandomNumberToRandomWord(wordList: string[]) {\n if (wordList == null || wordList.length <= 0) {\n return;\n }\n const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n const num = await this.cryptoService.randomNumber(0, 9);\n wordList[index] = wordList[index] + num;\n }\n\n private async encryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const encrypted = await this.cryptoService.encrypt(item.password);\n return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private async decryptHistory(\n history: GeneratedPasswordHistory[]\n ): Promise {\n if (history == null || history.length === 0) {\n return Promise.resolve([]);\n }\n\n const promises = history.map(async (item) => {\n const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n return new GeneratedPasswordHistory(decrypted, item.date);\n });\n\n return await Promise.all(promises);\n }\n\n private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n if (history == null || history.length === 0) {\n return false;\n }\n\n return history[history.length - 1].password === password;\n }\n\n // ref: https://stackoverflow.com/a/12646864/1090359\n private async shuffleArray(array: string[]) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = await this.cryptoService.randomNumber(0, i);\n [array[i], array[j]] = [array[j], array[i]];\n }\n }\n\n private sanitizePasswordLength(options: any, forGeneration: boolean) {\n let minUppercaseCalc = 0;\n let minLowercaseCalc = 0;\n let minNumberCalc: number = options.minNumber;\n let minSpecialCalc: number = options.minSpecial;\n\n if (options.uppercase && options.minUppercase <= 0) {\n minUppercaseCalc = 1;\n } else if (!options.uppercase) {\n minUppercaseCalc = 0;\n }\n\n if (options.lowercase && options.minLowercase <= 0) {\n minLowercaseCalc = 1;\n } else if (!options.lowercase) {\n minLowercaseCalc = 0;\n }\n\n if (options.number && options.minNumber <= 0) {\n minNumberCalc = 1;\n } else if (!options.number) {\n minNumberCalc = 0;\n }\n\n if (options.special && options.minSpecial <= 0) {\n minSpecialCalc = 1;\n } else if (!options.special) {\n minSpecialCalc = 0;\n }\n\n // This should never happen but is a final safety net\n if (!options.length || options.length < 1) {\n options.length = 10;\n }\n\n const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n // Normalize and Generation both require this modification\n if (options.length < minLength) {\n options.length = minLength;\n }\n\n // Apply other changes if the options object passed in is for generation\n if (forGeneration) {\n options.minUppercase = minUppercaseCalc;\n options.minLowercase = minLowercaseCalc;\n options.minNumber = minNumberCalc;\n options.minSpecial = minSpecialCalc;\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { PolicyService as PolicyServiceAbstraction } from \"../abstractions/policy.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { OrganizationUserStatusType } from \"../enums/organizationUserStatusType\";\nimport { OrganizationUserType } from \"../enums/organizationUserType\";\nimport { PolicyType } from \"../enums/policyType\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { MasterPasswordPolicyOptions } from \"../models/domain/masterPasswordPolicyOptions\";\nimport { Organization } from \"../models/domain/organization\";\nimport { Policy } from \"../models/domain/policy\";\nimport { ResetPasswordPolicyOptions } from \"../models/domain/resetPasswordPolicyOptions\";\nimport { ListResponse } from \"../models/response/listResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\n\nexport class PolicyService implements PolicyServiceAbstraction {\n policyCache: Policy[];\n\n constructor(\n private stateService: StateService,\n private organizationService: OrganizationService,\n private apiService: ApiService\n ) {}\n\n async clearCache(): Promise {\n await this.stateService.setDecryptedPolicies(null);\n }\n\n async getAll(type?: PolicyType, userId?: string): Promise {\n let response: Policy[] = [];\n const decryptedPolicies = await this.stateService.getDecryptedPolicies({ userId: userId });\n if (decryptedPolicies != null) {\n response = decryptedPolicies;\n } else {\n const diskPolicies = await this.stateService.getEncryptedPolicies({ userId: userId });\n for (const id in diskPolicies) {\n // eslint-disable-next-line\n if (diskPolicies.hasOwnProperty(id)) {\n response.push(new Policy(diskPolicies[id]));\n }\n }\n await this.stateService.setDecryptedPolicies(response, { userId: userId });\n }\n if (type != null) {\n return response.filter((policy) => policy.type === type);\n } else {\n return response;\n }\n }\n\n async getPolicyForOrganization(policyType: PolicyType, organizationId: string): Promise {\n const org = await this.organizationService.get(organizationId);\n if (org?.isProviderUser) {\n const orgPolicies = await this.apiService.getPolicies(organizationId);\n const policy = orgPolicies.data.find((p) => p.organizationId === organizationId);\n\n if (policy == null) {\n return null;\n }\n\n return new Policy(new PolicyData(policy));\n }\n\n const policies = await this.getAll(policyType);\n return policies.find((p) => p.organizationId === organizationId);\n }\n\n async replace(policies: { [id: string]: PolicyData }): Promise {\n await this.stateService.setDecryptedPolicies(null);\n await this.stateService.setEncryptedPolicies(policies);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setDecryptedPolicies(null, { userId: userId });\n await this.stateService.setEncryptedPolicies(null, { userId: userId });\n }\n\n async getMasterPasswordPoliciesForInvitedUsers(\n orgId: string\n ): Promise {\n const userId = await this.stateService.getUserId();\n const response = await this.apiService.getPoliciesByInvitedUser(orgId, userId);\n const policies = await this.mapPoliciesFromToken(response);\n return this.getMasterPasswordPolicyOptions(policies);\n }\n\n async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise {\n let enforcedOptions: MasterPasswordPolicyOptions = null;\n\n if (policies == null) {\n policies = await this.getAll(PolicyType.MasterPassword);\n } else {\n policies = policies.filter((p) => p.type === PolicyType.MasterPassword);\n }\n\n if (policies == null || policies.length === 0) {\n return enforcedOptions;\n }\n\n policies.forEach((currentPolicy) => {\n if (!currentPolicy.enabled || currentPolicy.data == null) {\n return;\n }\n\n if (enforcedOptions == null) {\n enforcedOptions = new MasterPasswordPolicyOptions();\n }\n\n if (\n currentPolicy.data.minComplexity != null &&\n currentPolicy.data.minComplexity > enforcedOptions.minComplexity\n ) {\n enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n }\n\n if (\n currentPolicy.data.minLength != null &&\n currentPolicy.data.minLength > enforcedOptions.minLength\n ) {\n enforcedOptions.minLength = currentPolicy.data.minLength;\n }\n\n if (currentPolicy.data.requireUpper) {\n enforcedOptions.requireUpper = true;\n }\n\n if (currentPolicy.data.requireLower) {\n enforcedOptions.requireLower = true;\n }\n\n if (currentPolicy.data.requireNumbers) {\n enforcedOptions.requireNumbers = true;\n }\n\n if (currentPolicy.data.requireSpecial) {\n enforcedOptions.requireSpecial = true;\n }\n });\n\n return enforcedOptions;\n }\n\n evaluateMasterPassword(\n passwordStrength: number,\n newPassword: string,\n enforcedPolicyOptions: MasterPasswordPolicyOptions\n ): boolean {\n if (enforcedPolicyOptions == null) {\n return true;\n }\n\n if (\n enforcedPolicyOptions.minComplexity > 0 &&\n enforcedPolicyOptions.minComplexity > passwordStrength\n ) {\n return false;\n }\n\n if (\n enforcedPolicyOptions.minLength > 0 &&\n enforcedPolicyOptions.minLength > newPassword.length\n ) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n return false;\n }\n\n if (enforcedPolicyOptions.requireNumbers && !/[0-9]/.test(newPassword)) {\n return false;\n }\n\n // eslint-disable-next-line\n if (enforcedPolicyOptions.requireSpecial && !/[!@#$%\\^&*]/g.test(newPassword)) {\n return false;\n }\n\n return true;\n }\n\n getResetPasswordPolicyOptions(\n policies: Policy[],\n orgId: string\n ): [ResetPasswordPolicyOptions, boolean] {\n const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions();\n\n if (policies == null || orgId == null) {\n return [resetPasswordPolicyOptions, false];\n }\n\n const policy = policies.find(\n (p) => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled\n );\n resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false;\n\n return [resetPasswordPolicyOptions, policy?.enabled ?? false];\n }\n\n mapPoliciesFromToken(policiesResponse: ListResponse): Policy[] {\n if (policiesResponse == null || policiesResponse.data == null) {\n return null;\n }\n\n const policiesData = policiesResponse.data.map((p) => new PolicyData(p));\n return policiesData.map((p) => new Policy(p));\n }\n\n async policyAppliesToUser(\n policyType: PolicyType,\n policyFilter?: (policy: Policy) => boolean,\n userId?: string\n ) {\n const policies = await this.getAll(policyType, userId);\n const organizations = await this.organizationService.getAll(userId);\n let filteredPolicies;\n\n if (policyFilter != null) {\n filteredPolicies = policies.filter((p) => p.enabled && policyFilter(p));\n } else {\n filteredPolicies = policies.filter((p) => p.enabled);\n }\n\n const policySet = new Set(filteredPolicies.map((p) => p.organizationId));\n\n return organizations.some(\n (o) =>\n o.enabled &&\n o.status >= OrganizationUserStatusType.Accepted &&\n o.usePolicies &&\n !this.isExcemptFromPolicies(o, policyType) &&\n policySet.has(o.id)\n );\n }\n\n private isExcemptFromPolicies(organization: Organization, policyType: PolicyType) {\n if (policyType === PolicyType.MaximumVaultTimeout) {\n return organization.type === OrganizationUserType.Owner;\n }\n\n return organization.isExemptFromPolicies;\n }\n}\n","import { ProviderService as ProviderServiceAbstraction } from \"../abstractions/provider.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { Provider } from \"../models/domain/provider\";\n\nexport class ProviderService implements ProviderServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async get(id: string): Promise {\n const providers = await this.stateService.getProviders();\n // eslint-disable-next-line\n if (providers == null || !providers.hasOwnProperty(id)) {\n return null;\n }\n\n return new Provider(providers[id]);\n }\n\n async getAll(): Promise {\n const providers = await this.stateService.getProviders();\n const response: Provider[] = [];\n for (const id in providers) {\n // eslint-disable-next-line\n if (providers.hasOwnProperty(id)) {\n response.push(new Provider(providers[id]));\n }\n }\n return response;\n }\n\n async save(providers: { [id: string]: ProviderData }) {\n await this.stateService.setProviders(providers);\n }\n}\n","import * as lunr from \"lunr\";\n\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { SearchService as SearchServiceAbstraction } from \"../abstractions/search.service\";\nimport { CipherType } from \"../enums/cipherType\";\nimport { FieldType } from \"../enums/fieldType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport class SearchService implements SearchServiceAbstraction {\n indexedEntityId?: string = null;\n private indexing = false;\n private index: lunr.Index = null;\n private searchableMinLength = 2;\n\n constructor(\n private cipherService: CipherService,\n private logService: LogService,\n private i18nService: I18nService\n ) {\n if ([\"zh-CN\", \"zh-TW\"].indexOf(i18nService.locale) !== -1) {\n this.searchableMinLength = 1;\n }\n //register lunr pipeline function\n lunr.Pipeline.registerFunction(this.normalizeAccentsPipelineFunction, \"normalizeAccents\");\n }\n\n clearIndex(): void {\n this.indexedEntityId = null;\n this.index = null;\n }\n\n isSearchable(query: string): boolean {\n query = SearchService.normalizeSearchQuery(query);\n const notSearchable =\n query == null ||\n (this.index == null && query.length < this.searchableMinLength) ||\n (this.index != null && query.length < this.searchableMinLength && query.indexOf(\">\") !== 0);\n return !notSearchable;\n }\n\n async indexCiphers(indexedEntityId?: string, ciphers?: CipherView[]): Promise {\n if (this.indexing) {\n return;\n }\n\n this.logService.time(\"search indexing\");\n this.indexing = true;\n this.indexedEntityId = indexedEntityId;\n this.index = null;\n const builder = new lunr.Builder();\n builder.pipeline.add(this.normalizeAccentsPipelineFunction);\n builder.ref(\"id\");\n builder.field(\"shortid\", { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n builder.field(\"name\", {\n boost: 10,\n });\n builder.field(\"subtitle\", {\n boost: 5,\n extractor: (c: CipherView) => {\n if (c.subTitle != null && c.type === CipherType.Card) {\n return c.subTitle.replace(/\\*/g, \"\");\n }\n return c.subTitle;\n },\n });\n builder.field(\"notes\");\n builder.field(\"login.username\", {\n extractor: (c: CipherView) =>\n c.type === CipherType.Login && c.login != null ? c.login.username : null,\n });\n builder.field(\"login.uris\", { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n builder.field(\"fields\", { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n builder.field(\"fields_joined\", { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n builder.field(\"attachments\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, false),\n });\n builder.field(\"attachments_joined\", {\n extractor: (c: CipherView) => this.attachmentExtractor(c, true),\n });\n builder.field(\"organizationid\", { extractor: (c: CipherView) => c.organizationId });\n ciphers = ciphers || (await this.cipherService.getAllDecrypted());\n ciphers.forEach((c) => builder.add(c));\n this.index = builder.build();\n\n this.indexing = false;\n\n this.logService.timeEnd(\"search indexing\");\n }\n\n async searchCiphers(\n query: string,\n filter: ((cipher: CipherView) => boolean) | ((cipher: CipherView) => boolean)[] = null,\n ciphers: CipherView[] = null\n ): Promise {\n const results: CipherView[] = [];\n if (query != null) {\n query = SearchService.normalizeSearchQuery(query.trim().toLowerCase());\n }\n if (query === \"\") {\n query = null;\n }\n\n if (ciphers == null) {\n ciphers = await this.cipherService.getAllDecrypted();\n }\n\n if (filter != null && Array.isArray(filter) && filter.length > 0) {\n ciphers = ciphers.filter((c) => filter.every((f) => f == null || f(c)));\n } else if (filter != null) {\n ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n }\n\n if (!this.isSearchable(query)) {\n return ciphers;\n }\n\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 250));\n if (this.indexing) {\n await new Promise((r) => setTimeout(r, 500));\n }\n }\n\n const index = this.getIndexForSearch();\n if (index == null) {\n // Fall back to basic search if index is not available\n return this.searchCiphersBasic(ciphers, query);\n }\n\n const ciphersMap = new Map();\n ciphers.forEach((c) => ciphersMap.set(c.id, c));\n\n let searchResults: lunr.Index.Result[] = null;\n const isQueryString = query != null && query.length > 1 && query.indexOf(\">\") === 0;\n if (isQueryString) {\n try {\n searchResults = index.search(query.substr(1).trim());\n } catch (e) {\n this.logService.error(e);\n }\n } else {\n const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n searchResults = index.query((q) => {\n lunr.tokenizer(query).forEach((token) => {\n const t = token.toString();\n q.term(t, { fields: [\"name\"], wildcard: soWild });\n q.term(t, { fields: [\"subtitle\"], wildcard: soWild });\n q.term(t, { fields: [\"login.uris\"], wildcard: soWild });\n q.term(t, {});\n });\n });\n }\n\n if (searchResults != null) {\n searchResults.forEach((r) => {\n if (ciphersMap.has(r.ref)) {\n results.push(ciphersMap.get(r.ref));\n }\n });\n }\n return results;\n }\n\n searchCiphersBasic(ciphers: CipherView[], query: string, deleted = false) {\n query = SearchService.normalizeSearchQuery(query.trim().toLowerCase());\n return ciphers.filter((c) => {\n if (deleted !== c.isDeleted) {\n return false;\n }\n if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (query.length >= 8 && c.id.startsWith(query)) {\n return true;\n }\n if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) {\n return true;\n }\n return false;\n });\n }\n\n searchSends(sends: SendView[], query: string) {\n query = SearchService.normalizeSearchQuery(query.trim().toLocaleLowerCase());\n if (query === null) {\n return sends;\n }\n const sendsMatched: SendView[] = [];\n const lowPriorityMatched: SendView[] = [];\n sends.forEach((s) => {\n if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n sendsMatched.push(s);\n } else if (\n query.length >= 8 &&\n (s.id.startsWith(query) ||\n s.accessId.toLocaleLowerCase().startsWith(query) ||\n (s.file?.id != null && s.file.id.startsWith(query)))\n ) {\n lowPriorityMatched.push(s);\n } else if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n } else if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n lowPriorityMatched.push(s);\n }\n });\n return sendsMatched.concat(lowPriorityMatched);\n }\n\n getIndexForSearch(): lunr.Index {\n return this.index;\n }\n\n private fieldExtractor(c: CipherView, joined: boolean) {\n if (!c.hasFields) {\n return null;\n }\n let fields: string[] = [];\n c.fields.forEach((f) => {\n if (f.name != null) {\n fields.push(f.name);\n }\n if (f.type === FieldType.Text && f.value != null) {\n fields.push(f.value);\n }\n });\n fields = fields.filter((f) => f.trim() !== \"\");\n if (fields.length === 0) {\n return null;\n }\n return joined ? fields.join(\" \") : fields;\n }\n\n private attachmentExtractor(c: CipherView, joined: boolean) {\n if (!c.hasAttachments) {\n return null;\n }\n let attachments: string[] = [];\n c.attachments.forEach((a) => {\n if (a != null && a.fileName != null) {\n if (joined && a.fileName.indexOf(\".\") > -1) {\n attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf(\".\")));\n } else {\n attachments.push(a.fileName);\n }\n }\n });\n attachments = attachments.filter((f) => f.trim() !== \"\");\n if (attachments.length === 0) {\n return null;\n }\n return joined ? attachments.join(\" \") : attachments;\n }\n\n private uriExtractor(c: CipherView) {\n if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n return null;\n }\n const uris: string[] = [];\n c.login.uris.forEach((u) => {\n if (u.uri == null || u.uri === \"\") {\n return;\n }\n if (u.hostname != null) {\n uris.push(u.hostname);\n return;\n }\n let uri = u.uri;\n if (u.match !== UriMatchType.RegularExpression) {\n const protocolIndex = uri.indexOf(\"://\");\n if (protocolIndex > -1) {\n uri = uri.substr(protocolIndex + 3);\n }\n const queryIndex = uri.search(/\\?|&|#/);\n if (queryIndex > -1) {\n uri = uri.substring(0, queryIndex);\n }\n }\n uris.push(uri);\n });\n return uris.length > 0 ? uris : null;\n }\n\n private normalizeAccentsPipelineFunction(token: lunr.Token): any {\n const searchableFields = [\"name\", \"login.username\", \"subtitle\", \"notes\"];\n const fields = (token as any).metadata[\"fields\"];\n const checkFields = fields.every((i: any) => searchableFields.includes(i));\n\n if (checkFields) {\n return SearchService.normalizeSearchQuery(token.toString());\n }\n\n return token;\n }\n\n // Remove accents/diacritics characters from text. This regex is equivalent to the Diacritic unicode property escape, i.e. it will match all diacritic characters.\n static normalizeSearchQuery(query: string): string {\n return query?.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { FileUploadService } from \"../abstractions/fileUpload.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { SendService as SendServiceAbstraction } from \"../abstractions/send.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SEND_KDF_ITERATIONS } from \"../enums/kdfType\";\nimport { SendType } from \"../enums/sendType\";\nimport { Utils } from \"../misc/utils\";\nimport { SendData } from \"../models/data/sendData\";\nimport { EncArrayBuffer } from \"../models/domain/encArrayBuffer\";\nimport { EncString } from \"../models/domain/encString\";\nimport { Send } from \"../models/domain/send\";\nimport { SendFile } from \"../models/domain/sendFile\";\nimport { SendText } from \"../models/domain/sendText\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { SendRequest } from \"../models/request/sendRequest\";\nimport { ErrorResponse } from \"../models/response/errorResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\nimport { SendView } from \"../models/view/sendView\";\n\nexport class SendService implements SendServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private apiService: ApiService,\n private fileUploadService: FileUploadService,\n private i18nService: I18nService,\n private cryptoFunctionService: CryptoFunctionService,\n private stateService: StateService\n ) {}\n\n async clearCache(): Promise {\n await this.stateService.setDecryptedSends(null);\n }\n\n async encrypt(\n model: SendView,\n file: File | ArrayBuffer,\n password: string,\n key?: SymmetricCryptoKey\n ): Promise<[Send, EncArrayBuffer]> {\n let fileData: EncArrayBuffer = null;\n const send = new Send();\n send.id = model.id;\n send.type = model.type;\n send.disabled = model.disabled;\n send.hideEmail = model.hideEmail;\n send.maxAccessCount = model.maxAccessCount;\n if (model.key == null) {\n model.key = await this.cryptoFunctionService.randomBytes(16);\n model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n }\n if (password != null) {\n const passwordHash = await this.cryptoFunctionService.pbkdf2(\n password,\n model.key,\n \"sha256\",\n SEND_KDF_ITERATIONS\n );\n send.password = Utils.fromBufferToB64(passwordHash);\n }\n send.key = await this.cryptoService.encrypt(model.key, key);\n send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n if (send.type === SendType.Text) {\n send.text = new SendText();\n send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n send.text.hidden = model.text.hidden;\n } else if (send.type === SendType.File) {\n send.file = new SendFile();\n if (file != null) {\n if (file instanceof ArrayBuffer) {\n const [name, data] = await this.encryptFileData(\n model.file.fileName,\n file,\n model.cryptoKey\n );\n send.file.fileName = name;\n fileData = data;\n } else {\n fileData = await this.parseFile(send, file, model.cryptoKey);\n }\n }\n }\n\n return [send, fileData];\n }\n\n async get(id: string): Promise {\n const sends = await this.stateService.getEncryptedSends();\n // eslint-disable-next-line\n if (sends == null || !sends.hasOwnProperty(id)) {\n return null;\n }\n\n return new Send(sends[id]);\n }\n\n async getAll(): Promise {\n const sends = await this.stateService.getEncryptedSends();\n const response: Send[] = [];\n for (const id in sends) {\n // eslint-disable-next-line\n if (sends.hasOwnProperty(id)) {\n response.push(new Send(sends[id]));\n }\n }\n return response;\n }\n\n async getAllDecrypted(): Promise {\n let decSends = await this.stateService.getDecryptedSends();\n if (decSends != null) {\n return decSends;\n }\n\n decSends = [];\n const hasKey = await this.cryptoService.hasKey();\n if (!hasKey) {\n throw new Error(\"No key.\");\n }\n\n const promises: Promise[] = [];\n const sends = await this.getAll();\n sends.forEach((send) => {\n promises.push(send.decrypt().then((f) => decSends.push(f)));\n });\n\n await Promise.all(promises);\n decSends.sort(Utils.getSortFunction(this.i18nService, \"name\"));\n\n await this.stateService.setDecryptedSends(decSends);\n return decSends;\n }\n\n async saveWithServer(sendData: [Send, EncArrayBuffer]): Promise {\n const request = new SendRequest(sendData[0], sendData[1]?.buffer.byteLength);\n let response: SendResponse;\n if (sendData[0].id == null) {\n if (sendData[0].type === SendType.Text) {\n response = await this.apiService.postSend(request);\n } else {\n try {\n const uploadDataResponse = await this.apiService.postFileTypeSend(request);\n response = uploadDataResponse.sendResponse;\n\n await this.fileUploadService.uploadSendFile(\n uploadDataResponse,\n sendData[0].file.fileName,\n sendData[1]\n );\n } catch (e) {\n if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n response = await this.legacyServerSendFileUpload(sendData, request);\n } else if (e instanceof ErrorResponse) {\n throw new Error((e as ErrorResponse).getSingleMessage());\n } else {\n throw e;\n }\n }\n }\n sendData[0].id = response.id;\n sendData[0].accessId = response.accessId;\n } else {\n response = await this.apiService.putSend(sendData[0].id, request);\n }\n\n const data = new SendData(response);\n await this.upsert(data);\n }\n\n /**\n * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n * This method still exists for backward compatibility with old server versions.\n */\n async legacyServerSendFileUpload(\n sendData: [Send, EncArrayBuffer],\n request: SendRequest\n ): Promise {\n const fd = new FormData();\n try {\n const blob = new Blob([sendData[1].buffer], { type: \"application/octet-stream\" });\n fd.append(\"model\", JSON.stringify(request));\n fd.append(\"data\", blob, sendData[0].file.fileName.encryptedString);\n } catch (e) {\n if (Utils.isNode && !Utils.isBrowser) {\n fd.append(\"model\", JSON.stringify(request));\n fd.append(\n \"data\",\n Buffer.from(sendData[1].buffer) as any,\n {\n filepath: sendData[0].file.fileName.encryptedString,\n contentType: \"application/octet-stream\",\n } as any\n );\n } else {\n throw e;\n }\n }\n return await this.apiService.postSendFileLegacy(fd);\n }\n\n async upsert(send: SendData | SendData[]): Promise {\n let sends = await this.stateService.getEncryptedSends();\n if (sends == null) {\n sends = {};\n }\n\n if (send instanceof SendData) {\n const s = send as SendData;\n sends[s.id] = s;\n } else {\n (send as SendData[]).forEach((s) => {\n sends[s.id] = s;\n });\n }\n\n await this.replace(sends);\n }\n\n async replace(sends: { [id: string]: SendData }): Promise {\n await this.stateService.setDecryptedSends(null);\n await this.stateService.setEncryptedSends(sends);\n }\n\n async clear(): Promise {\n await this.stateService.setDecryptedSends(null);\n await this.stateService.setEncryptedSends(null);\n }\n\n async delete(id: string | string[]): Promise {\n const sends = await this.stateService.getEncryptedSends();\n if (sends == null) {\n return;\n }\n\n if (typeof id === \"string\") {\n if (sends[id] == null) {\n return;\n }\n delete sends[id];\n } else {\n (id as string[]).forEach((i) => {\n delete sends[i];\n });\n }\n\n await this.replace(sends);\n }\n\n async deleteWithServer(id: string): Promise {\n await this.apiService.deleteSend(id);\n await this.delete(id);\n }\n\n async removePasswordWithServer(id: string): Promise {\n const response = await this.apiService.putSendRemovePassword(id);\n const data = new SendData(response);\n await this.upsert(data);\n }\n\n private parseFile(send: Send, file: File, key: SymmetricCryptoKey): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file);\n reader.onload = async (evt) => {\n try {\n const [name, data] = await this.encryptFileData(\n file.name,\n evt.target.result as ArrayBuffer,\n key\n );\n send.file.fileName = name;\n resolve(data);\n } catch (e) {\n reject(e);\n }\n };\n reader.onerror = () => {\n reject(\"Error reading file.\");\n };\n });\n }\n\n private async encryptFileData(\n fileName: string,\n data: ArrayBuffer,\n key: SymmetricCryptoKey\n ): Promise<[EncString, EncArrayBuffer]> {\n const encFileName = await this.cryptoService.encrypt(fileName, key);\n const encFileData = await this.cryptoService.encryptToBytes(data, key);\n return [encFileName, encFileData];\n }\n}\n","import { SettingsService as SettingsServiceAbstraction } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\n\nconst Keys = {\n settingsPrefix: \"settings_\",\n equivalentDomains: \"equivalentDomains\",\n};\n\nexport class SettingsService implements SettingsServiceAbstraction {\n constructor(private stateService: StateService) {}\n\n async clearCache(): Promise {\n await this.stateService.setSettings(null);\n }\n\n getEquivalentDomains(): Promise {\n return this.getSettingsKey(Keys.equivalentDomains);\n }\n\n async setEquivalentDomains(equivalentDomains: string[][]): Promise {\n await this.setSettingsKey(Keys.equivalentDomains, equivalentDomains);\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setSettings(null, { userId: userId });\n }\n\n // Helpers\n\n private async getSettings(): Promise {\n const settings = await this.stateService.getSettings();\n if (settings == null) {\n // eslint-disable-next-line\n const userId = await this.stateService.getUserId();\n }\n return settings;\n }\n\n private async getSettingsKey(key: string): Promise {\n const settings = await this.getSettings();\n if (settings != null && settings[key]) {\n return settings[key];\n }\n return null;\n }\n\n private async setSettingsKey(key: string, value: any): Promise {\n let settings = await this.getSettings();\n if (!settings) {\n settings = {};\n }\n\n settings[key] = value;\n await this.stateService.setSettings(settings);\n }\n}\n","import { BehaviorSubject } from \"rxjs\";\n\nimport { LogService } from \"../abstractions/log.service\";\nimport { StateService as StateServiceAbstraction } from \"../abstractions/state.service\";\nimport { StateMigrationService } from \"../abstractions/stateMigration.service\";\nimport { StorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { StorageLocation } from \"../enums/storageLocation\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { UriMatchType } from \"../enums/uriMatchType\";\nimport { StateFactory } from \"../factories/stateFactory\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { Account, AccountData } from \"../models/domain/account\";\nimport { EncString } from \"../models/domain/encString\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { GlobalState } from \"../models/domain/globalState\";\nimport { Policy } from \"../models/domain/policy\";\nimport { State } from \"../models/domain/state\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\nimport { WindowState } from \"../models/domain/windowState\";\nimport { CipherView } from \"../models/view/cipherView\";\nimport { CollectionView } from \"../models/view/collectionView\";\nimport { FolderView } from \"../models/view/folderView\";\nimport { SendView } from \"../models/view/sendView\";\n\nconst keys = {\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nexport class StateService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> implements StateServiceAbstraction\n{\n accounts = new BehaviorSubject<{ [userId: string]: TAccount }>({});\n activeAccount = new BehaviorSubject(null);\n\n protected state: State = new State(\n this.createGlobals()\n );\n\n private hasBeenInited = false;\n\n private accountDiskCache: Map;\n\n constructor(\n protected storageService: StorageService,\n protected secureStorageService: StorageService,\n protected logService: LogService,\n protected stateMigrationService: StateMigrationService,\n protected stateFactory: StateFactory,\n protected useAccountCache: boolean = true\n ) {\n this.accountDiskCache = new Map();\n }\n\n async init(): Promise {\n if (this.hasBeenInited) {\n return;\n }\n\n if (await this.stateMigrationService.needsMigration()) {\n await this.stateMigrationService.migrate();\n }\n\n await this.initAccountState();\n this.hasBeenInited = true;\n }\n\n async initAccountState() {\n this.state.authenticatedAccounts =\n (await this.storageService.get(keys.authenticatedAccounts)) ?? [];\n for (const i in this.state.authenticatedAccounts) {\n if (i != null) {\n await this.syncAccountFromDisk(this.state.authenticatedAccounts[i]);\n }\n }\n const storedActiveUser = await this.storageService.get(keys.activeUserId);\n if (storedActiveUser != null) {\n this.state.activeUserId = storedActiveUser;\n }\n await this.pushAccounts();\n this.activeAccount.next(this.state.activeUserId);\n }\n\n async syncAccountFromDisk(userId: string) {\n if (userId == null) {\n return;\n }\n this.state.accounts[userId] = this.createAccount();\n const diskAccount = await this.getAccountFromDisk({ userId: userId });\n this.state.accounts[userId].profile = diskAccount.profile;\n }\n\n async addAccount(account: TAccount) {\n account = await this.setAccountEnvironmentUrls(account);\n this.state.authenticatedAccounts.push(account.profile.userId);\n await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts);\n this.state.accounts[account.profile.userId] = account;\n await this.scaffoldNewAccountStorage(account);\n await this.setLastActive(new Date().getTime(), { userId: account.profile.userId });\n await this.setActiveUser(account.profile.userId);\n this.activeAccount.next(account.profile.userId);\n }\n\n async setActiveUser(userId: string): Promise {\n this.clearDecryptedDataForActiveUser();\n this.state.activeUserId = userId;\n await this.storageService.save(keys.activeUserId, userId);\n this.activeAccount.next(this.state.activeUserId);\n await this.pushAccounts();\n }\n\n async clean(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, this.defaultInMemoryOptions);\n await this.deAuthenticateAccount(options.userId);\n if (options.userId === this.state.activeUserId) {\n await this.dynamicallySetActiveUser();\n }\n\n await this.removeAccountFromDisk(options?.userId);\n this.removeAccountFromMemory(options?.userId);\n await this.pushAccounts();\n }\n\n async getAccessToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.accessToken;\n }\n\n async setAccessToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.accessToken = value;\n await this.saveAccount(account, options);\n }\n\n async getAddEditCipherInfo(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.addEditCipherInfo;\n }\n\n async setAddEditCipherInfo(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.addEditCipherInfo = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getAlwaysShowDock(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.alwaysShowDock ?? false\n );\n }\n\n async setAlwaysShowDock(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.alwaysShowDock = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getApiKeyClientId(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.profile?.apiKeyClientId;\n }\n\n async setApiKeyClientId(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.profile.apiKeyClientId = value;\n await this.saveAccount(account, options);\n }\n\n async getApiKeyClientSecret(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.keys?.apiKeyClientSecret;\n }\n\n async setApiKeyClientSecret(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.keys.apiKeyClientSecret = value;\n await this.saveAccount(account, options);\n }\n\n async getAutoConfirmFingerPrints(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.autoConfirmFingerPrints ?? false\n );\n }\n\n async setAutoConfirmFingerprints(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.autoConfirmFingerPrints = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getAutoFillOnPageLoadDefault(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.autoFillOnPageLoadDefault ?? true\n );\n }\n\n async setAutoFillOnPageLoadDefault(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.autoFillOnPageLoadDefault = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricAwaitingAcceptance(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.biometricAwaitingAcceptance ?? false\n );\n }\n\n async setBiometricAwaitingAcceptance(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricAwaitingAcceptance = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricFingerprintValidated(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.biometricFingerprintValidated ?? false\n );\n }\n\n async setBiometricFingerprintValidated(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricFingerprintValidated = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricLocked(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.settings\n ?.biometricLocked ?? false\n );\n }\n\n async setBiometricLocked(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.settings.biometricLocked = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getBiometricText(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.biometricText;\n }\n\n async setBiometricText(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.biometricText = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getBiometricUnlock(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.biometricUnlock ?? false\n );\n }\n\n async setBiometricUnlock(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.biometricUnlock = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getCanAccessPremium(options?: StorageOptions): Promise {\n if (!(await this.getIsAuthenticated(options))) {\n return false;\n }\n\n return (\n (await this.getHasPremiumPersonally(options)) ||\n (await this.getHasPremiumFromOrganization(options))\n );\n }\n\n async getHasPremiumPersonally(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n return account?.profile?.hasPremiumPersonally;\n }\n\n async setHasPremiumPersonally(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.hasPremiumPersonally = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getHasPremiumFromOrganization(options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n\n if (account.profile?.hasPremiumFromOrganization) {\n return true;\n }\n\n // TODO: older server versions won't send the hasPremiumFromOrganization flag, so we're keeping the old logic\n // for backwards compatibility. It can be removed after everyone has upgraded.\n const organizations = await this.getOrganizations(options);\n if (organizations == null) {\n return false;\n }\n\n for (const id of Object.keys(organizations)) {\n const o = organizations[id];\n if (o.enabled && o.usersGetPremium && !o.isProviderUser) {\n return true;\n }\n }\n\n return false;\n }\n\n async setHasPremiumFromOrganization(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.hasPremiumFromOrganization = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getClearClipboard(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.clearClipboard ?? null\n );\n }\n\n async setClearClipboard(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.clearClipboard = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getCollapsedGroupings(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.collapsedGroupings;\n }\n\n async setCollapsedGroupings(value: string[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.collapsedGroupings = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getConvertAccountToKeyConnector(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.convertAccountToKeyConnector;\n }\n\n async setConvertAccountToKeyConnector(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.convertAccountToKeyConnector = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getCryptoMasterKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.cryptoMasterKey;\n }\n\n async setCryptoMasterKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.cryptoMasterKey = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getCryptoMasterKeyAuto(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(`${options.userId}${partialKeys.autoKey}`, options);\n }\n\n async setCryptoMasterKeyAuto(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"auto\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.autoKey, value, options);\n }\n\n async getCryptoMasterKeyB64(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options?.userId}${partialKeys.masterKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyB64(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultSecureStorageOptions());\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.masterKey, value, options);\n }\n\n async getCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return null;\n }\n return await this.secureStorageService.get(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async hasCryptoMasterKeyBiometric(options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return false;\n }\n return await this.secureStorageService.has(\n `${options.userId}${partialKeys.biometricKey}`,\n options\n );\n }\n\n async setCryptoMasterKeyBiometric(value: string, options?: StorageOptions): Promise {\n options = this.reconcileOptions(\n this.reconcileOptions(options, { keySuffix: \"biometric\" }),\n await this.defaultSecureStorageOptions()\n );\n if (options?.userId == null) {\n return;\n }\n await this.saveSecureStorageKey(partialKeys.biometricKey, value, options);\n }\n\n async getDecodedToken(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.tokens?.decodedToken;\n }\n\n async setDecodedToken(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.tokens.decodedToken = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedCiphers(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.ciphers?.decrypted;\n }\n\n async setDecryptedCiphers(value: CipherView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.ciphers.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedCollections(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.collections?.decrypted;\n }\n\n async setDecryptedCollections(value: CollectionView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.collections.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.cryptoSymmetricKey?.decrypted;\n }\n\n async setDecryptedCryptoSymmetricKey(\n value: SymmetricCryptoKey,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.cryptoSymmetricKey.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedFolders(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.folders?.decrypted;\n }\n\n async setDecryptedFolders(value: FolderView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.folders.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedOrganizationKeys(\n options?: StorageOptions\n ): Promise> {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.organizationKeys?.decrypted;\n }\n\n async setDecryptedOrganizationKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.organizationKeys.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.passwordGenerationHistory?.decrypted;\n }\n\n async setDecryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.passwordGenerationHistory.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPinProtected(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.settings?.pinProtected?.decrypted;\n }\n\n async setDecryptedPinProtected(value: EncString, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.settings.pinProtected.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPolicies(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.policies?.decrypted;\n }\n\n async setDecryptedPolicies(value: Policy[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.policies.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedPrivateKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.privateKey?.decrypted;\n }\n\n async setDecryptedPrivateKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.privateKey.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedProviderKeys(\n options?: StorageOptions\n ): Promise> {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.providerKeys?.decrypted;\n }\n\n async setDecryptedProviderKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.providerKeys.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDecryptedSends(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.data?.sends?.decrypted;\n }\n\n async setDecryptedSends(value: SendView[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.data.sends.decrypted = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getDefaultUriMatch(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.defaultUriMatch;\n }\n\n async setDefaultUriMatch(value: UriMatchType, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.defaultUriMatch = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAddLoginNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAddLoginNotification ?? false\n );\n }\n\n async setDisableAddLoginNotification(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAddLoginNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoBiometricsPrompt(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoBiometricsPrompt ?? false\n );\n }\n\n async setDisableAutoBiometricsPrompt(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoBiometricsPrompt = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableAutoTotpCopy(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableAutoTotpCopy ?? false\n );\n }\n\n async setDisableAutoTotpCopy(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableAutoTotpCopy = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableBadgeCounter(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableBadgeCounter ?? false\n );\n }\n\n async setDisableBadgeCounter(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableBadgeCounter = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableChangedPasswordNotification(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableChangedPasswordNotification ?? false\n );\n }\n\n async setDisableChangedPasswordNotification(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableChangedPasswordNotification = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableContextMenuItem(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableContextMenuItem ?? false\n );\n }\n\n async setDisableContextMenuItem(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableContextMenuItem = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDisableFavicon(options?: StorageOptions): Promise {\n return (\n (\n await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.disableFavicon ?? false\n );\n }\n\n async setDisableFavicon(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.disableFavicon = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getDisableGa(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.disableGa ?? false\n );\n }\n\n async setDisableGa(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.disableGa = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDontShowCardsCurrentTab(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.dontShowCardsCurrentTab ?? false\n );\n }\n\n async setDontShowCardsCurrentTab(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.dontShowCardsCurrentTab = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getDontShowIdentitiesCurrentTab(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.dontShowIdentitiesCurrentTab ?? false\n );\n }\n\n async setDontShowIdentitiesCurrentTab(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.dontShowIdentitiesCurrentTab = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEmail(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.profile?.email;\n }\n\n async setEmail(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.profile.email = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getEmailVerified(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.profile.emailVerified ?? false\n );\n }\n\n async setEmailVerified(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.emailVerified = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableAlwaysOnTop(options?: StorageOptions): Promise {\n const accountPreference = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.enableAlwaysOnTop;\n const globalPreference = (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.enableAlwaysOnTop;\n return accountPreference ?? globalPreference ?? false;\n }\n\n async setEnableAlwaysOnTop(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.enableAlwaysOnTop = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableAlwaysOnTop = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableAutoFillOnPageLoad(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.enableAutoFillOnPageLoad ?? false\n );\n }\n\n async setEnableAutoFillOnPageLoad(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.enableAutoFillOnPageLoad = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBiometric(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBiometrics ?? false\n );\n }\n\n async setEnableBiometric(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBiometrics = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBrowserIntegration(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBrowserIntegration ?? false\n );\n }\n\n async setEnableBrowserIntegration(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBrowserIntegration = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableBrowserIntegrationFingerprint(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableBrowserIntegrationFingerprint ?? false\n );\n }\n\n async setEnableBrowserIntegrationFingerprint(\n value: boolean,\n options?: StorageOptions\n ): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableBrowserIntegrationFingerprint = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableCloseToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableCloseToTray ?? false\n );\n }\n\n async setEnableCloseToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableCloseToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableFullWidth(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.enableFullWidth ?? false\n );\n }\n\n async setEnableFullWidth(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.enableFullWidth = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnableGravitars(options?: StorageOptions): Promise {\n return (\n (\n await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n )\n )?.settings?.enableGravitars ?? false\n );\n }\n\n async setEnableGravitars(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.enableGravitars = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnableMinimizeToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableMinimizeToTray ?? false\n );\n }\n\n async setEnableMinimizeToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableMinimizeToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableStartToTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableStartToTray ?? false\n );\n }\n\n async setEnableStartToTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableStartToTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEnableTray(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.enableTray ?? false\n );\n }\n\n async setEnableTray(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.enableTray = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedCiphers(options?: StorageOptions): Promise<{ [id: string]: CipherData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.ciphers?.encrypted;\n }\n\n async setEncryptedCiphers(\n value: { [id: string]: CipherData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.ciphers.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedCollections(\n options?: StorageOptions\n ): Promise<{ [id: string]: CollectionData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.collections?.encrypted;\n }\n\n async setEncryptedCollections(\n value: { [id: string]: CollectionData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.collections.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedCryptoSymmetricKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys.cryptoSymmetricKey.encrypted;\n }\n\n async setEncryptedCryptoSymmetricKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.cryptoSymmetricKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedFolders(options?: StorageOptions): Promise<{ [id: string]: FolderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.folders?.encrypted;\n }\n\n async setEncryptedFolders(\n value: { [id: string]: FolderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.folders.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEncryptedOrganizationKeys(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.organizationKeys.encrypted;\n }\n\n async setEncryptedOrganizationKeys(\n value: Map,\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.organizationKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPasswordGenerationHistory(\n options?: StorageOptions\n ): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.passwordGenerationHistory?.encrypted;\n }\n\n async setEncryptedPasswordGenerationHistory(\n value: GeneratedPasswordHistory[],\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.passwordGenerationHistory.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPinProtected(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.pinProtected?.encrypted;\n }\n\n async setEncryptedPinProtected(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.pinProtected.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPolicies(options?: StorageOptions): Promise<{ [id: string]: PolicyData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.policies?.encrypted;\n }\n\n async setEncryptedPolicies(\n value: { [id: string]: PolicyData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.policies.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedPrivateKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.privateKey?.encrypted;\n }\n\n async setEncryptedPrivateKey(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.privateKey.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedProviderKeys(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.providerKeys?.encrypted;\n }\n\n async setEncryptedProviderKeys(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.providerKeys.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEncryptedSends(options?: StorageOptions): Promise<{ [id: string]: SendData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.data?.sends.encrypted;\n }\n\n async setEncryptedSends(\n value: { [id: string]: SendData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.data.sends.encrypted = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getEntityId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityId;\n }\n\n async setEntityId(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityId = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEntityType(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.profile?.entityType;\n }\n\n async setEntityType(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.profile.entityType = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getEnvironmentUrls(options?: StorageOptions): Promise {\n if (this.state.activeUserId == null) {\n return await this.getGlobalEnvironmentUrls(options);\n }\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getAccount(options))?.settings?.environmentUrls ?? new EnvironmentUrls();\n }\n\n async setEnvironmentUrls(value: EnvironmentUrls, options?: StorageOptions): Promise {\n // Global values are set on each change and the current global settings are passed to any newly authed accounts.\n // This is to allow setting environement values before an account is active, while still allowing individual accounts to have their own environments.\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.environmentUrls = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEquivalentDomains(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.equivalentDomains;\n }\n\n async setEquivalentDomains(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.equivalentDomains = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEventCollection(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.eventCollection;\n }\n\n async setEventCollection(value: EventData[], options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.eventCollection = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getEverBeenUnlocked(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile\n ?.everBeenUnlocked ?? false\n );\n }\n\n async setEverBeenUnlocked(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.profile.everBeenUnlocked = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getForcePasswordReset(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))?.profile\n ?.forcePasswordReset ?? false\n );\n }\n\n async setForcePasswordReset(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.profile.forcePasswordReset = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getInstalledVersion(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.installedVersion;\n }\n\n async setInstalledVersion(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.installedVersion = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getIsAuthenticated(options?: StorageOptions): Promise {\n return (await this.getAccessToken(options)) != null && (await this.getUserId(options)) != null;\n }\n\n async getKdfIterations(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfIterations;\n }\n\n async setKdfIterations(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.kdfIterations = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getKdfType(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.kdfType;\n }\n\n async setKdfType(value: KdfType, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.kdfType = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getKeyHash(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.keyHash;\n }\n\n async setKeyHash(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.keyHash = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getLastActive(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n\n const accountActivity = await this.storageService.get<{ [userId: string]: number }>(\n keys.accountActivity,\n options\n );\n\n if (accountActivity == null || Object.keys(accountActivity).length < 1) {\n return null;\n }\n\n return accountActivity[options.userId];\n }\n\n async setLastActive(value: number, options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n if (options.userId == null) {\n return;\n }\n const accountActivity =\n (await this.storageService.get<{ [userId: string]: number }>(\n keys.accountActivity,\n options\n )) ?? {};\n accountActivity[options.userId] = value;\n await this.storageService.save(keys.accountActivity, accountActivity, options);\n }\n\n async getLastSync(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.profile?.lastSync;\n }\n\n async setLastSync(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.profile.lastSync = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getLegacyEtmKey(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.keys?.legacyEtmKey;\n }\n\n async setLegacyEtmKey(value: SymmetricCryptoKey, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.keys.legacyEtmKey = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getLocalData(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.data?.localData;\n }\n async setLocalData(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.data.localData = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getLocale(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.locale;\n }\n\n async setLocale(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.locale = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getMainWindowSize(options?: StorageOptions): Promise {\n return (await this.getGlobals(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.mainWindowSize;\n }\n\n async setMainWindowSize(value: number, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n globals.mainWindowSize = value;\n await this.saveGlobals(globals, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getMinimizeOnCopyToClipboard(options?: StorageOptions): Promise {\n return (\n (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.settings?.minimizeOnCopyToClipboard ?? false\n );\n }\n\n async setMinimizeOnCopyToClipboard(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.minimizeOnCopyToClipboard = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNeverDomains(options?: StorageOptions): Promise<{ [id: string]: any }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.neverDomains;\n }\n\n async setNeverDomains(value: { [id: string]: any }, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.neverDomains = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNoAutoPromptBiometrics(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.noAutoPromptBiometrics ?? false\n );\n }\n\n async setNoAutoPromptBiometrics(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.noAutoPromptBiometrics = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getNoAutoPromptBiometricsText(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.noAutoPromptBiometricsText;\n }\n\n async setNoAutoPromptBiometricsText(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.noAutoPromptBiometricsText = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOpenAtLogin(options?: StorageOptions): Promise {\n return (\n (await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions())))\n ?.openAtLogin ?? false\n );\n }\n\n async setOpenAtLogin(value: boolean, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.openAtLogin = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getOrganizationInvitation(options?: StorageOptions): Promise {\n return (await this.getGlobals(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.organizationInvitation;\n }\n\n async setOrganizationInvitation(value: any, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n globals.organizationInvitation = value;\n await this.saveGlobals(globals, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getOrganizations(options?: StorageOptions): Promise<{ [id: string]: OrganizationData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.organizations;\n }\n\n async setOrganizations(\n value: { [id: string]: OrganizationData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.organizations = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPasswordGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.passwordGenerationOptions;\n }\n\n async setPasswordGenerationOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.passwordGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUsernameGenerationOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.usernameGenerationOptions;\n }\n\n async setUsernameGenerationOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.usernameGenerationOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getGeneratorOptions(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.generatorOptions;\n }\n\n async setGeneratorOptions(value: any, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.generatorOptions = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getProtectedPin(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.settings?.protectedPin;\n }\n\n async setProtectedPin(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.settings.protectedPin = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getProviders(options?: StorageOptions): Promise<{ [id: string]: ProviderData }> {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.data?.providers;\n }\n\n async setProviders(\n value: { [id: string]: ProviderData },\n options?: StorageOptions\n ): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.data.providers = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getPublicKey(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.keys?.publicKey;\n }\n\n async setPublicKey(value: ArrayBuffer, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.keys.publicKey = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getRefreshToken(options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n return (await this.getAccount(options))?.tokens?.refreshToken;\n }\n\n async setRefreshToken(value: string, options?: StorageOptions): Promise {\n options = await this.getTimeoutBasedStorageOptions(options);\n const account = await this.getAccount(options);\n account.tokens.refreshToken = value;\n await this.saveAccount(account, options);\n }\n\n async getRememberedEmail(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.rememberedEmail;\n }\n\n async setRememberedEmail(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.rememberedEmail = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSecurityStamp(options?: StorageOptions): Promise {\n return (await this.getAccount(this.reconcileOptions(options, this.defaultInMemoryOptions)))\n ?.tokens?.securityStamp;\n }\n\n async setSecurityStamp(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, this.defaultInMemoryOptions)\n );\n account.tokens.securityStamp = value;\n await this.saveAccount(account, this.reconcileOptions(options, this.defaultInMemoryOptions));\n }\n\n async getSettings(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions()))\n )?.settings?.settings;\n }\n\n async setSettings(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n account.settings.settings = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskMemoryOptions())\n );\n }\n\n async getSsoCodeVerifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoCodeVerifier;\n }\n\n async setSsoCodeVerifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoCodeVerifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getSsoOrgIdentifier(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.ssoOrganizationIdentifier;\n }\n\n async setSsoOrganizationIdentifier(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.ssoOrganizationIdentifier = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getSsoState(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.ssoState;\n }\n\n async setSsoState(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.ssoState = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getTheme(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.theme;\n }\n\n async setTheme(value: ThemeType, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.theme = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getTwoFactorToken(options?: StorageOptions): Promise {\n return (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.twoFactorToken;\n }\n\n async setTwoFactorToken(value: string, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n globals.twoFactorToken = value;\n await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getUserId(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.userId;\n }\n\n async getUsesKeyConnector(options?: StorageOptions): Promise {\n return (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskOptions()))\n )?.profile?.usesKeyConnector;\n }\n\n async setUsesKeyConnector(value: boolean, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n account.profile.usesKeyConnector = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n async getVaultTimeout(options?: StorageOptions): Promise {\n const accountVaultTimeout = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeout;\n return accountVaultTimeout;\n }\n\n async setVaultTimeout(value: number, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeout = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getVaultTimeoutAction(options?: StorageOptions): Promise {\n const accountVaultTimeoutAction = (\n await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.settings?.vaultTimeoutAction;\n const globalVaultTimeoutAction = (\n await this.getGlobals(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()))\n )?.vaultTimeoutAction;\n return accountVaultTimeoutAction ?? globalVaultTimeoutAction;\n }\n\n async setVaultTimeoutAction(value: string, options?: StorageOptions): Promise {\n const account = await this.getAccount(\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n account.settings.vaultTimeoutAction = value;\n await this.saveAccount(\n account,\n this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())\n );\n }\n\n async getStateVersion(): Promise {\n return (await this.getGlobals(await this.defaultOnDiskLocalOptions())).stateVersion ?? 1;\n }\n\n async setStateVersion(value: number): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n globals.stateVersion = value;\n await this.saveGlobals(globals, await this.defaultOnDiskOptions());\n }\n\n async getWindow(): Promise {\n const globals = await this.getGlobals(await this.defaultOnDiskOptions());\n return globals?.window != null && Object.keys(globals.window).length > 0\n ? globals.window\n : new WindowState();\n }\n\n async setWindow(value: WindowState, options?: StorageOptions): Promise {\n const globals = await this.getGlobals(\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n globals.window = value;\n return await this.saveGlobals(\n globals,\n this.reconcileOptions(options, await this.defaultOnDiskOptions())\n );\n }\n\n protected async getGlobals(options: StorageOptions): Promise {\n let globals: TGlobalState;\n if (this.useMemory(options.storageLocation)) {\n globals = this.getGlobalsFromMemory();\n }\n\n if (this.useDisk && globals == null) {\n globals = await this.getGlobalsFromDisk(options);\n }\n\n return globals ?? this.createGlobals();\n }\n\n protected async saveGlobals(globals: TGlobalState, options: StorageOptions) {\n return this.useMemory(options.storageLocation)\n ? this.saveGlobalsToMemory(globals)\n : await this.saveGlobalsToDisk(globals, options);\n }\n\n protected getGlobalsFromMemory(): TGlobalState {\n return this.state.globals;\n }\n\n protected async getGlobalsFromDisk(options: StorageOptions): Promise {\n return await this.storageService.get(keys.global, options);\n }\n\n protected saveGlobalsToMemory(globals: TGlobalState): void {\n this.state.globals = globals;\n }\n\n protected async saveGlobalsToDisk(globals: TGlobalState, options: StorageOptions): Promise {\n if (options.useSecureStorage) {\n await this.secureStorageService.save(keys.global, globals, options);\n } else {\n await this.storageService.save(keys.global, globals, options);\n }\n }\n\n protected async getAccount(options: StorageOptions): Promise {\n try {\n let account: TAccount;\n if (this.useMemory(options.storageLocation)) {\n account = this.getAccountFromMemory(options);\n }\n\n if (this.useDisk(options.storageLocation) && account == null) {\n account = await this.getAccountFromDisk(options);\n }\n\n return account;\n } catch (e) {\n this.logService.error(e);\n }\n }\n\n protected getAccountFromMemory(options: StorageOptions): TAccount {\n if (this.state.accounts == null) {\n return null;\n }\n return this.state.accounts[this.getUserIdFromMemory(options)];\n }\n\n protected getUserIdFromMemory(options: StorageOptions): string {\n return options?.userId != null\n ? this.state.accounts[options.userId]?.profile?.userId\n : this.state.activeUserId;\n }\n\n protected async getAccountFromDisk(options: StorageOptions): Promise {\n if (options?.userId == null && this.state.activeUserId == null) {\n return null;\n }\n\n if (this.useAccountCache) {\n const cachedAccount = this.accountDiskCache.get(options.userId);\n if (cachedAccount != null) {\n return cachedAccount;\n }\n }\n\n const account = options?.useSecureStorage\n ? (await this.secureStorageService.get(options.userId, options)) ??\n (await this.storageService.get(\n options.userId,\n this.reconcileOptions(options, { htmlStorageLocation: HtmlStorageLocation.Local })\n ))\n : await this.storageService.get(options.userId, options);\n\n if (this.useAccountCache) {\n this.accountDiskCache.set(options.userId, account);\n }\n return account;\n }\n\n protected useMemory(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Memory || storageLocation === StorageLocation.Both;\n }\n\n protected useDisk(storageLocation: StorageLocation) {\n return storageLocation === StorageLocation.Disk || storageLocation === StorageLocation.Both;\n }\n\n protected async saveAccount(\n account: TAccount,\n options: StorageOptions = {\n storageLocation: StorageLocation.Both,\n useSecureStorage: false,\n }\n ) {\n return this.useMemory(options.storageLocation)\n ? await this.saveAccountToMemory(account)\n : await this.saveAccountToDisk(account, options);\n }\n\n protected async saveAccountToDisk(account: TAccount, options: StorageOptions): Promise {\n const storageLocation = options.useSecureStorage\n ? this.secureStorageService\n : this.storageService;\n\n await storageLocation.save(`${options.userId}`, account, options);\n\n if (this.useAccountCache) {\n this.accountDiskCache.delete(options.userId);\n }\n }\n\n protected async saveAccountToMemory(account: TAccount): Promise {\n if (this.getAccountFromMemory({ userId: account.profile.userId }) !== null) {\n this.state.accounts[account.profile.userId] = account;\n }\n await this.pushAccounts();\n }\n\n protected async scaffoldNewAccountStorage(account: TAccount): Promise {\n // We don't want to manipulate the referenced in memory account\n const deepClone = JSON.parse(JSON.stringify(account));\n await this.scaffoldNewAccountLocalStorage(deepClone);\n await this.scaffoldNewAccountSessionStorage(deepClone);\n await this.scaffoldNewAccountMemoryStorage(deepClone);\n }\n\n // TODO: There is a tech debt item for splitting up these methods - only Web uses multiple storage locations in its storageService.\n // For now these methods exist with some redundancy to facilitate this special web requirement.\n protected async scaffoldNewAccountLocalStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n // EnvironmentUrls are set before authenticating and should override whatever is stored from any previous session\n const environmentUrls = account.settings.environmentUrls;\n if (storedAccount?.settings != null) {\n account.settings = storedAccount.settings;\n } else if (await this.storageService.has(keys.tempAccountSettings)) {\n account.settings = await this.storageService.get(keys.tempAccountSettings);\n await this.storageService.remove(keys.tempAccountSettings);\n }\n account.settings.environmentUrls = environmentUrls;\n if (account.settings.vaultTimeoutAction === \"logOut\" && account.settings.vaultTimeout != null) {\n account.tokens.accessToken = null;\n account.tokens.refreshToken = null;\n account.profile.apiKeyClientId = null;\n account.keys.apiKeyClientSecret = null;\n }\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskLocalOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountMemoryStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions(\n { userId: account.profile.userId },\n await this.defaultOnDiskMemoryOptions()\n )\n );\n }\n\n protected async scaffoldNewAccountSessionStorage(account: TAccount): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n if (storedAccount?.settings != null) {\n storedAccount.settings.environmentUrls = account.settings.environmentUrls;\n account.settings = storedAccount.settings;\n }\n await this.storageService.save(\n account.profile.userId,\n account,\n await this.defaultOnDiskMemoryOptions()\n );\n await this.saveAccount(\n account,\n this.reconcileOptions({ userId: account.profile.userId }, await this.defaultOnDiskOptions())\n );\n }\n //\n\n protected async pushAccounts(): Promise {\n await this.pruneInMemoryAccounts();\n if (this.state?.accounts == null || Object.keys(this.state.accounts).length < 1) {\n this.accounts.next(null);\n return;\n }\n\n this.accounts.next(this.state.accounts);\n }\n\n protected reconcileOptions(\n requestedOptions: StorageOptions,\n defaultOptions: StorageOptions\n ): StorageOptions {\n if (requestedOptions == null) {\n return defaultOptions;\n }\n requestedOptions.userId = requestedOptions?.userId ?? defaultOptions.userId;\n requestedOptions.storageLocation =\n requestedOptions?.storageLocation ?? defaultOptions.storageLocation;\n requestedOptions.useSecureStorage =\n requestedOptions?.useSecureStorage ?? defaultOptions.useSecureStorage;\n requestedOptions.htmlStorageLocation =\n requestedOptions?.htmlStorageLocation ?? defaultOptions.htmlStorageLocation;\n requestedOptions.keySuffix = requestedOptions?.keySuffix ?? defaultOptions.keySuffix;\n return requestedOptions;\n }\n\n protected get defaultInMemoryOptions(): StorageOptions {\n return { storageLocation: StorageLocation.Memory, userId: this.state.activeUserId };\n }\n\n protected async defaultOnDiskOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Session,\n userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskLocalOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Local,\n userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultOnDiskMemoryOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n htmlStorageLocation: HtmlStorageLocation.Memory,\n userId: this.state.activeUserId ?? (await this.getUserId()),\n useSecureStorage: false,\n };\n }\n\n protected async defaultSecureStorageOptions(): Promise {\n return {\n storageLocation: StorageLocation.Disk,\n useSecureStorage: true,\n userId: this.state.activeUserId ?? (await this.getActiveUserIdFromStorage()),\n };\n }\n\n protected async getActiveUserIdFromStorage(): Promise {\n return await this.storageService.get(keys.activeUserId);\n }\n\n protected async removeAccountFromLocalStorage(\n userId: string = this.state.activeUserId\n ): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskLocalOptions())\n );\n }\n\n protected async removeAccountFromSessionStorage(\n userId: string = this.state.activeUserId\n ): Promise {\n const storedAccount = await this.getAccount(\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n await this.saveAccount(\n this.resetAccount(storedAccount),\n this.reconcileOptions({ userId: userId }, await this.defaultOnDiskOptions())\n );\n }\n\n protected async removeAccountFromSecureStorage(\n userId: string = this.state.activeUserId\n ): Promise {\n await this.setCryptoMasterKeyAuto(null, { userId: userId });\n await this.setCryptoMasterKeyBiometric(null, { userId: userId });\n await this.setCryptoMasterKeyB64(null, { userId: userId });\n }\n\n protected removeAccountFromMemory(userId: string = this.state.activeUserId): void {\n delete this.state.accounts[userId];\n if (this.useAccountCache) {\n this.accountDiskCache.delete(userId);\n }\n }\n\n protected async pruneInMemoryAccounts() {\n // We preserve settings for logged out accounts, but we don't want to consider them when thinking about active account state\n for (const userId in this.state.accounts) {\n if (!(await this.getIsAuthenticated({ userId: userId }))) {\n this.removeAccountFromMemory(userId);\n }\n }\n }\n\n // settings persist even on reset, and are not effected by this method\n protected resetAccount(account: TAccount) {\n const persistentAccountInformation = { settings: account.settings };\n return Object.assign(this.createAccount(), persistentAccountInformation);\n }\n\n protected async setAccountEnvironmentUrls(account: TAccount): Promise {\n account.settings.environmentUrls = await this.getGlobalEnvironmentUrls();\n return account;\n }\n\n protected async getGlobalEnvironmentUrls(options?: StorageOptions): Promise {\n options = this.reconcileOptions(options, await this.defaultOnDiskOptions());\n return (await this.getGlobals(options)).environmentUrls ?? new EnvironmentUrls();\n }\n\n protected clearDecryptedDataForActiveUser() {\n const userId = this.state.activeUserId;\n if (userId == null || this.state?.accounts[userId]?.data == null) {\n return;\n }\n this.state.accounts[userId].data = new AccountData();\n }\n\n protected createAccount(init: Partial = null): TAccount {\n return this.stateFactory.createAccount(init);\n }\n\n protected createGlobals(init: Partial = null): TGlobalState {\n return this.stateFactory.createGlobal(init);\n }\n\n protected async deAuthenticateAccount(userId: string) {\n await this.setAccessToken(null, { userId: userId });\n await this.setLastActive(null, { userId: userId });\n this.state.authenticatedAccounts = this.state.authenticatedAccounts.filter(\n (activeUserId) => activeUserId !== userId\n );\n await this.storageService.save(keys.authenticatedAccounts, this.state.authenticatedAccounts);\n }\n\n protected async removeAccountFromDisk(userId: string) {\n await this.removeAccountFromSessionStorage(userId);\n await this.removeAccountFromLocalStorage(userId);\n await this.removeAccountFromSecureStorage(userId);\n }\n\n protected async dynamicallySetActiveUser() {\n if (this.state.accounts == null || Object.keys(this.state.accounts).length < 1) {\n await this.setActiveUser(null);\n return;\n }\n for (const userId in this.state.accounts) {\n if (userId == null) {\n continue;\n }\n if (await this.getIsAuthenticated({ userId: userId })) {\n await this.setActiveUser(userId);\n break;\n }\n await this.setActiveUser(null);\n }\n }\n\n private async getTimeoutBasedStorageOptions(options?: StorageOptions): Promise {\n const timeoutAction = await this.getVaultTimeoutAction({ userId: options?.userId });\n const timeout = await this.getVaultTimeout({ userId: options?.userId });\n const defaultOptions =\n timeoutAction === \"logOut\" && timeout != null\n ? this.defaultInMemoryOptions\n : await this.defaultOnDiskOptions();\n return this.reconcileOptions(options, defaultOptions);\n }\n\n private async saveSecureStorageKey(key: string, value: string, options?: StorageOptions) {\n return value == null\n ? await this.secureStorageService.remove(`${options.userId}${key}`, options)\n : await this.secureStorageService.save(`${options.userId}${key}`, value, options);\n }\n}\n","import { StorageService } from \"../abstractions/storage.service\";\nimport { HtmlStorageLocation } from \"../enums/htmlStorageLocation\";\nimport { KdfType } from \"../enums/kdfType\";\nimport { StateVersion } from \"../enums/stateVersion\";\nimport { ThemeType } from \"../enums/themeType\";\nimport { StateFactory } from \"../factories/stateFactory\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { EventData } from \"../models/data/eventData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { Account, AccountSettings } from \"../models/domain/account\";\nimport { EnvironmentUrls } from \"../models/domain/environmentUrls\";\nimport { GeneratedPasswordHistory } from \"../models/domain/generatedPasswordHistory\";\nimport { GlobalState } from \"../models/domain/globalState\";\nimport { StorageOptions } from \"../models/domain/storageOptions\";\n\nimport { TokenService } from \"./token.service\";\n\n// Originally (before January 2022) storage was handled as a flat key/value pair store.\n// With the move to a typed object for state storage these keys should no longer be in use anywhere outside of this migration.\nconst v1Keys: { [key: string]: string } = {\n accessToken: \"accessToken\",\n alwaysShowDock: \"alwaysShowDock\",\n autoConfirmFingerprints: \"autoConfirmFingerprints\",\n autoFillOnPageLoadDefault: \"autoFillOnPageLoadDefault\",\n biometricAwaitingAcceptance: \"biometricAwaitingAcceptance\",\n biometricFingerprintValidated: \"biometricFingerprintValidated\",\n biometricText: \"biometricText\",\n biometricUnlock: \"biometric\",\n clearClipboard: \"clearClipboardKey\",\n clientId: \"apikey_clientId\",\n clientSecret: \"apikey_clientSecret\",\n collapsedGroupings: \"collapsedGroupings\",\n convertAccountToKeyConnector: \"convertAccountToKeyConnector\",\n defaultUriMatch: \"defaultUriMatch\",\n disableAddLoginNotification: \"disableAddLoginNotification\",\n disableAutoBiometricsPrompt: \"noAutoPromptBiometrics\",\n disableAutoTotpCopy: \"disableAutoTotpCopy\",\n disableBadgeCounter: \"disableBadgeCounter\",\n disableChangedPasswordNotification: \"disableChangedPasswordNotification\",\n disableContextMenuItem: \"disableContextMenuItem\",\n disableFavicon: \"disableFavicon\",\n disableGa: \"disableGa\",\n dontShowCardsCurrentTab: \"dontShowCardsCurrentTab\",\n dontShowIdentitiesCurrentTab: \"dontShowIdentitiesCurrentTab\",\n emailVerified: \"emailVerified\",\n enableAlwaysOnTop: \"enableAlwaysOnTopKey\",\n enableAutoFillOnPageLoad: \"enableAutoFillOnPageLoad\",\n enableBiometric: \"enabledBiometric\",\n enableBrowserIntegration: \"enableBrowserIntegration\",\n enableBrowserIntegrationFingerprint: \"enableBrowserIntegrationFingerprint\",\n enableCloseToTray: \"enableCloseToTray\",\n enableFullWidth: \"enableFullWidth\",\n enableGravatars: \"enableGravatars\",\n enableMinimizeToTray: \"enableMinimizeToTray\",\n enableStartToTray: \"enableStartToTrayKey\",\n enableTray: \"enableTray\",\n encKey: \"encKey\", // Generated Symmetric Key\n encOrgKeys: \"encOrgKeys\",\n encPrivate: \"encPrivateKey\",\n encProviderKeys: \"encProviderKeys\",\n entityId: \"entityId\",\n entityType: \"entityType\",\n environmentUrls: \"environmentUrls\",\n equivalentDomains: \"equivalentDomains\",\n eventCollection: \"eventCollection\",\n forcePasswordReset: \"forcePasswordReset\",\n history: \"generatedPasswordHistory\",\n installedVersion: \"installedVersion\",\n kdf: \"kdf\",\n kdfIterations: \"kdfIterations\",\n key: \"key\", // Master Key\n keyHash: \"keyHash\",\n lastActive: \"lastActive\",\n localData: \"sitesLocalData\",\n locale: \"locale\",\n mainWindowSize: \"mainWindowSize\",\n minimizeOnCopyToClipboard: \"minimizeOnCopyToClipboardKey\",\n neverDomains: \"neverDomains\",\n noAutoPromptBiometricsText: \"noAutoPromptBiometricsText\",\n openAtLogin: \"openAtLogin\",\n passwordGenerationOptions: \"passwordGenerationOptions\",\n pinProtected: \"pinProtectedKey\",\n protectedPin: \"protectedPin\",\n refreshToken: \"refreshToken\",\n ssoCodeVerifier: \"ssoCodeVerifier\",\n ssoIdentifier: \"ssoOrgIdentifier\",\n ssoState: \"ssoState\",\n stamp: \"securityStamp\",\n theme: \"theme\",\n userEmail: \"userEmail\",\n userId: \"userId\",\n usesConnector: \"usesKeyConnector\",\n vaultTimeoutAction: \"vaultTimeoutAction\",\n vaultTimeout: \"lockOption\",\n rememberedEmail: \"rememberedEmail\",\n};\n\nconst v1KeyPrefixes: { [key: string]: string } = {\n ciphers: \"ciphers_\",\n collections: \"collections_\",\n folders: \"folders_\",\n lastSync: \"lastSync_\",\n policies: \"policies_\",\n twoFactorToken: \"twoFactorToken_\",\n organizations: \"organizations_\",\n providers: \"providers_\",\n sends: \"sends_\",\n settings: \"settings_\",\n};\n\nconst keys = {\n global: \"global\",\n authenticatedAccounts: \"authenticatedAccounts\",\n activeUserId: \"activeUserId\",\n tempAccountSettings: \"tempAccountSettings\", // used to hold account specific settings (i.e clear clipboard) between initial migration and first account authentication\n accountActivity: \"accountActivity\",\n};\n\nconst partialKeys = {\n autoKey: \"_masterkey_auto\",\n biometricKey: \"_masterkey_biometric\",\n masterKey: \"_masterkey\",\n};\n\nexport class StateMigrationService<\n TGlobalState extends GlobalState = GlobalState,\n TAccount extends Account = Account\n> {\n constructor(\n protected storageService: StorageService,\n protected secureStorageService: StorageService,\n protected stateFactory: StateFactory\n ) {}\n\n async needsMigration(): Promise {\n const currentStateVersion = await this.getCurrentStateVersion();\n return currentStateVersion == null || currentStateVersion < StateVersion.Latest;\n }\n\n async migrate(): Promise {\n let currentStateVersion = await this.getCurrentStateVersion();\n while (currentStateVersion < StateVersion.Latest) {\n switch (currentStateVersion) {\n case StateVersion.One:\n await this.migrateStateFrom1To2();\n break;\n case StateVersion.Two:\n await this.migrateStateFrom2To3();\n break;\n case StateVersion.Three:\n await this.migrateStateFrom3To4();\n break;\n }\n\n currentStateVersion += 1;\n }\n }\n\n protected async migrateStateFrom1To2(): Promise {\n const clearV1Keys = async (clearingUserId?: string) => {\n for (const key in v1Keys) {\n if (key == null) {\n continue;\n }\n await this.set(v1Keys[key], null);\n }\n if (clearingUserId != null) {\n for (const keyPrefix in v1KeyPrefixes) {\n if (keyPrefix == null) {\n continue;\n }\n await this.set(v1KeyPrefixes[keyPrefix] + userId, null);\n }\n }\n };\n\n // Some processes, like biometrics, may have already defined a value before migrations are run.\n // We don't want to null out those values if they don't exist in the old storage scheme (like for new installs)\n // So, the OOO for migration is that we:\n // 1. Check for an existing storage value from the old storage structure OR\n // 2. Check for a value already set by processes that run before migration OR\n // 3. Assign the default value\n const globals =\n (await this.get(keys.global)) ?? this.stateFactory.createGlobal(null);\n globals.stateVersion = StateVersion.Two;\n globals.environmentUrls =\n (await this.get(v1Keys.environmentUrls)) ?? globals.environmentUrls;\n globals.locale = (await this.get(v1Keys.locale)) ?? globals.locale;\n globals.noAutoPromptBiometrics =\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n globals.noAutoPromptBiometrics;\n globals.noAutoPromptBiometricsText =\n (await this.get(v1Keys.noAutoPromptBiometricsText)) ??\n globals.noAutoPromptBiometricsText;\n globals.ssoCodeVerifier =\n (await this.get(v1Keys.ssoCodeVerifier)) ?? globals.ssoCodeVerifier;\n globals.ssoOrganizationIdentifier =\n (await this.get(v1Keys.ssoIdentifier)) ?? globals.ssoOrganizationIdentifier;\n globals.ssoState = (await this.get(v1Keys.ssoState)) ?? globals.ssoState;\n globals.rememberedEmail =\n (await this.get(v1Keys.rememberedEmail)) ?? globals.rememberedEmail;\n globals.theme = (await this.get(v1Keys.theme)) ?? globals.theme;\n globals.vaultTimeout = (await this.get(v1Keys.vaultTimeout)) ?? globals.vaultTimeout;\n globals.vaultTimeoutAction =\n (await this.get(v1Keys.vaultTimeoutAction)) ?? globals.vaultTimeoutAction;\n globals.window = (await this.get(v1Keys.mainWindowSize)) ?? globals.window;\n globals.enableTray = (await this.get(v1Keys.enableTray)) ?? globals.enableTray;\n globals.enableMinimizeToTray =\n (await this.get(v1Keys.enableMinimizeToTray)) ?? globals.enableMinimizeToTray;\n globals.enableCloseToTray =\n (await this.get(v1Keys.enableCloseToTray)) ?? globals.enableCloseToTray;\n globals.enableStartToTray =\n (await this.get(v1Keys.enableStartToTray)) ?? globals.enableStartToTray;\n globals.openAtLogin = (await this.get(v1Keys.openAtLogin)) ?? globals.openAtLogin;\n globals.alwaysShowDock =\n (await this.get(v1Keys.alwaysShowDock)) ?? globals.alwaysShowDock;\n globals.enableBrowserIntegration =\n (await this.get(v1Keys.enableBrowserIntegration)) ??\n globals.enableBrowserIntegration;\n globals.enableBrowserIntegrationFingerprint =\n (await this.get(v1Keys.enableBrowserIntegrationFingerprint)) ??\n globals.enableBrowserIntegrationFingerprint;\n\n const userId =\n (await this.get(v1Keys.userId)) ?? (await this.get(v1Keys.entityId));\n\n const defaultAccount = this.stateFactory.createAccount(null);\n const accountSettings: AccountSettings = {\n autoConfirmFingerPrints:\n (await this.get(v1Keys.autoConfirmFingerprints)) ??\n defaultAccount.settings.autoConfirmFingerPrints,\n autoFillOnPageLoadDefault:\n (await this.get(v1Keys.autoFillOnPageLoadDefault)) ??\n defaultAccount.settings.autoFillOnPageLoadDefault,\n biometricLocked: null,\n biometricUnlock:\n (await this.get(v1Keys.biometricUnlock)) ??\n defaultAccount.settings.biometricUnlock,\n clearClipboard:\n (await this.get(v1Keys.clearClipboard)) ?? defaultAccount.settings.clearClipboard,\n defaultUriMatch:\n (await this.get(v1Keys.defaultUriMatch)) ?? defaultAccount.settings.defaultUriMatch,\n disableAddLoginNotification:\n (await this.get(v1Keys.disableAddLoginNotification)) ??\n defaultAccount.settings.disableAddLoginNotification,\n disableAutoBiometricsPrompt:\n (await this.get(v1Keys.disableAutoBiometricsPrompt)) ??\n defaultAccount.settings.disableAutoBiometricsPrompt,\n disableAutoTotpCopy:\n (await this.get(v1Keys.disableAutoTotpCopy)) ??\n defaultAccount.settings.disableAutoTotpCopy,\n disableBadgeCounter:\n (await this.get(v1Keys.disableBadgeCounter)) ??\n defaultAccount.settings.disableBadgeCounter,\n disableChangedPasswordNotification:\n (await this.get(v1Keys.disableChangedPasswordNotification)) ??\n defaultAccount.settings.disableChangedPasswordNotification,\n disableContextMenuItem:\n (await this.get(v1Keys.disableContextMenuItem)) ??\n defaultAccount.settings.disableContextMenuItem,\n disableGa: (await this.get(v1Keys.disableGa)) ?? defaultAccount.settings.disableGa,\n dontShowCardsCurrentTab:\n (await this.get(v1Keys.dontShowCardsCurrentTab)) ??\n defaultAccount.settings.dontShowCardsCurrentTab,\n dontShowIdentitiesCurrentTab:\n (await this.get(v1Keys.dontShowIdentitiesCurrentTab)) ??\n defaultAccount.settings.dontShowIdentitiesCurrentTab,\n enableAlwaysOnTop:\n (await this.get(v1Keys.enableAlwaysOnTop)) ??\n defaultAccount.settings.enableAlwaysOnTop,\n enableAutoFillOnPageLoad:\n (await this.get(v1Keys.enableAutoFillOnPageLoad)) ??\n defaultAccount.settings.enableAutoFillOnPageLoad,\n enableBiometric:\n (await this.get(v1Keys.enableBiometric)) ??\n defaultAccount.settings.enableBiometric,\n enableFullWidth:\n (await this.get(v1Keys.enableFullWidth)) ??\n defaultAccount.settings.enableFullWidth,\n enableGravitars:\n (await this.get(v1Keys.enableGravatars)) ??\n defaultAccount.settings.enableGravitars,\n environmentUrls: globals.environmentUrls ?? defaultAccount.settings.environmentUrls,\n equivalentDomains:\n (await this.get(v1Keys.equivalentDomains)) ??\n defaultAccount.settings.equivalentDomains,\n minimizeOnCopyToClipboard:\n (await this.get(v1Keys.minimizeOnCopyToClipboard)) ??\n defaultAccount.settings.minimizeOnCopyToClipboard,\n neverDomains:\n (await this.get(v1Keys.neverDomains)) ?? defaultAccount.settings.neverDomains,\n passwordGenerationOptions:\n (await this.get(v1Keys.passwordGenerationOptions)) ??\n defaultAccount.settings.passwordGenerationOptions,\n pinProtected: {\n decrypted: null,\n encrypted: await this.get(v1Keys.pinProtected),\n },\n protectedPin: await this.get(v1Keys.protectedPin),\n settings: userId == null ? null : await this.get(v1KeyPrefixes.settings + userId),\n vaultTimeout:\n (await this.get(v1Keys.vaultTimeout)) ?? defaultAccount.settings.vaultTimeout,\n vaultTimeoutAction:\n (await this.get(v1Keys.vaultTimeoutAction)) ??\n defaultAccount.settings.vaultTimeoutAction,\n };\n\n // (userId == null) = no logged in user (so no known userId) and we need to temporarily store account specific settings in state to migrate on first auth\n // (userId != null) = we have a currently authed user (so known userId) with encrypted data and other key settings we can move, no need to temporarily store account settings\n if (userId == null) {\n await this.set(keys.tempAccountSettings, accountSettings);\n await this.set(keys.global, globals);\n await this.set(keys.authenticatedAccounts, []);\n await this.set(keys.activeUserId, null);\n await clearV1Keys();\n return;\n }\n\n globals.twoFactorToken = await this.get(v1KeyPrefixes.twoFactorToken + userId);\n await this.set(keys.global, globals);\n await this.set(userId, {\n data: {\n addEditCipherInfo: null,\n ciphers: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CipherData }>(v1KeyPrefixes.ciphers + userId),\n },\n collapsedGroupings: null,\n collections: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: CollectionData }>(\n v1KeyPrefixes.collections + userId\n ),\n },\n eventCollection: await this.get(v1Keys.eventCollection),\n folders: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: FolderData }>(v1KeyPrefixes.folders + userId),\n },\n localData: null,\n organizations: await this.get<{ [id: string]: OrganizationData }>(\n v1KeyPrefixes.organizations + userId\n ),\n passwordGenerationHistory: {\n decrypted: null,\n encrypted: await this.get(v1Keys.history),\n },\n policies: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: PolicyData }>(v1KeyPrefixes.policies + userId),\n },\n providers: await this.get<{ [id: string]: ProviderData }>(v1KeyPrefixes.providers + userId),\n sends: {\n decrypted: null,\n encrypted: await this.get<{ [id: string]: SendData }>(v1KeyPrefixes.sends + userId),\n },\n },\n keys: {\n apiKeyClientSecret: await this.get(v1Keys.clientSecret),\n cryptoMasterKey: null,\n cryptoMasterKeyAuto: null,\n cryptoMasterKeyB64: null,\n cryptoMasterKeyBiometric: null,\n cryptoSymmetricKey: {\n encrypted: await this.get(v1Keys.encKey),\n decrypted: null,\n },\n legacyEtmKey: null,\n organizationKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encOrgKeys),\n },\n privateKey: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encPrivate),\n },\n providerKeys: {\n decrypted: null,\n encrypted: await this.get(v1Keys.encProviderKeys),\n },\n publicKey: null,\n },\n profile: {\n apiKeyClientId: await this.get(v1Keys.clientId),\n authenticationStatus: null,\n convertAccountToKeyConnector: await this.get(v1Keys.convertAccountToKeyConnector),\n email: await this.get(v1Keys.userEmail),\n emailVerified: await this.get(v1Keys.emailVerified),\n entityId: null,\n entityType: null,\n everBeenUnlocked: null,\n forcePasswordReset: null,\n hasPremiumPersonally: null,\n kdfIterations: await this.get(v1Keys.kdfIterations),\n kdfType: await this.get(v1Keys.kdf),\n keyHash: await this.get(v1Keys.keyHash),\n lastSync: null,\n userId: userId,\n usesKeyConnector: null,\n },\n settings: accountSettings,\n tokens: {\n accessToken: await this.get(v1Keys.accessToken),\n decodedToken: null,\n refreshToken: await this.get(v1Keys.refreshToken),\n securityStamp: null,\n },\n });\n\n await this.set(keys.authenticatedAccounts, [userId]);\n await this.set(keys.activeUserId, userId);\n\n const accountActivity: { [userId: string]: number } = {\n [userId]: await this.get(v1Keys.lastActive),\n };\n accountActivity[userId] = await this.get(v1Keys.lastActive);\n await this.set(keys.accountActivity, accountActivity);\n\n await clearV1Keys(userId);\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"biometric\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.biometricKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"biometric\" }),\n { keySuffix: \"biometric\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"biometric\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key, { keySuffix: \"auto\" })) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.autoKey}`,\n await this.secureStorageService.get(v1Keys.key, { keySuffix: \"auto\" }),\n { keySuffix: \"auto\" }\n );\n await this.secureStorageService.remove(v1Keys.key, { keySuffix: \"auto\" });\n }\n\n if (await this.secureStorageService.has(v1Keys.key)) {\n await this.secureStorageService.save(\n `${userId}${partialKeys.masterKey}`,\n await this.secureStorageService.get(v1Keys.key)\n );\n await this.secureStorageService.remove(v1Keys.key);\n }\n }\n\n protected async migrateStateFrom2To3(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (\n account?.profile?.hasPremiumPersonally === null &&\n account.tokens?.accessToken != null\n ) {\n const decodedToken = await TokenService.decodeToken(account.tokens.accessToken);\n account.profile.hasPremiumPersonally = decodedToken.premium;\n await this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Three;\n await this.set(keys.global, globals);\n }\n\n protected async migrateStateFrom3To4(): Promise {\n const authenticatedUserIds = await this.get(keys.authenticatedAccounts);\n await Promise.all(\n authenticatedUserIds.map(async (userId) => {\n const account = await this.get(userId);\n if (account?.profile?.everBeenUnlocked != null) {\n delete account.profile.everBeenUnlocked;\n return this.set(userId, account);\n }\n })\n );\n\n const globals = await this.getGlobals();\n globals.stateVersion = StateVersion.Four;\n await this.set(keys.global, globals);\n }\n\n protected get options(): StorageOptions {\n return { htmlStorageLocation: HtmlStorageLocation.Local };\n }\n\n protected get(key: string): Promise {\n return this.storageService.get(key, this.options);\n }\n\n protected set(key: string, value: any): Promise {\n if (value == null) {\n return this.storageService.remove(key, this.options);\n }\n return this.storageService.save(key, value, this.options);\n }\n\n protected async getGlobals(): Promise {\n return await this.get(keys.global);\n }\n\n protected async getCurrentStateVersion(): Promise {\n return (await this.getGlobals())?.stateVersion ?? StateVersion.One;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CollectionService } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { OrganizationService } from \"../abstractions/organization.service\";\nimport { PolicyService } from \"../abstractions/policy.service\";\nimport { ProviderService } from \"../abstractions/provider.service\";\nimport { SendService } from \"../abstractions/send.service\";\nimport { SettingsService } from \"../abstractions/settings.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { SyncService as SyncServiceAbstraction } from \"../abstractions/sync.service\";\nimport { sequentialize } from \"../misc/sequentialize\";\nimport { CipherData } from \"../models/data/cipherData\";\nimport { CollectionData } from \"../models/data/collectionData\";\nimport { FolderData } from \"../models/data/folderData\";\nimport { OrganizationData } from \"../models/data/organizationData\";\nimport { PolicyData } from \"../models/data/policyData\";\nimport { ProviderData } from \"../models/data/providerData\";\nimport { SendData } from \"../models/data/sendData\";\nimport { CipherResponse } from \"../models/response/cipherResponse\";\nimport { CollectionDetailsResponse } from \"../models/response/collectionResponse\";\nimport { DomainsResponse } from \"../models/response/domainsResponse\";\nimport { FolderResponse } from \"../models/response/folderResponse\";\nimport {\n SyncCipherNotification,\n SyncFolderNotification,\n SyncSendNotification,\n} from \"../models/response/notificationResponse\";\nimport { PolicyResponse } from \"../models/response/policyResponse\";\nimport { ProfileResponse } from \"../models/response/profileResponse\";\nimport { SendResponse } from \"../models/response/sendResponse\";\n\nexport class SyncService implements SyncServiceAbstraction {\n syncInProgress = false;\n\n constructor(\n private apiService: ApiService,\n private settingsService: SettingsService,\n private folderService: FolderService,\n private cipherService: CipherService,\n private cryptoService: CryptoService,\n private collectionService: CollectionService,\n private messagingService: MessagingService,\n private policyService: PolicyService,\n private sendService: SendService,\n private logService: LogService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private organizationService: OrganizationService,\n private providerService: ProviderService,\n private logoutCallback: (expired: boolean) => Promise\n ) {}\n\n async getLastSync(): Promise {\n if ((await this.stateService.getUserId()) == null) {\n return null;\n }\n\n const lastSync = await this.stateService.getLastSync();\n if (lastSync) {\n return new Date(lastSync);\n }\n\n return null;\n }\n\n async setLastSync(date: Date, userId?: string): Promise {\n await this.stateService.setLastSync(date.toJSON(), { userId: userId });\n }\n\n @sequentialize(() => \"fullSync\")\n async fullSync(forceSync: boolean, allowThrowOnError = false): Promise {\n this.syncStarted();\n const isAuthenticated = await this.stateService.getIsAuthenticated();\n if (!isAuthenticated) {\n return this.syncCompleted(false);\n }\n\n const now = new Date();\n let needsSync = false;\n try {\n needsSync = await this.needsSyncing(forceSync);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n }\n }\n\n if (!needsSync) {\n await this.setLastSync(now);\n return this.syncCompleted(false);\n }\n\n try {\n await this.apiService.refreshIdentityToken();\n const response = await this.apiService.getSync();\n\n await this.syncProfile(response.profile);\n await this.syncFolders(response.folders);\n await this.syncCollections(response.collections);\n await this.syncCiphers(response.ciphers);\n await this.syncSends(response.sends);\n await this.syncSettings(response.domains);\n await this.syncPolicies(response.policies);\n\n await this.setLastSync(now);\n return this.syncCompleted(true);\n } catch (e) {\n if (allowThrowOnError) {\n throw e;\n } else {\n return this.syncCompleted(false);\n }\n }\n }\n\n async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localFolder = await this.folderService.get(notification.id);\n if (\n (!isEdit && localFolder == null) ||\n (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)\n ) {\n const remoteFolder = await this.apiService.getFolder(notification.id);\n if (remoteFolder != null) {\n await this.folderService.upsert(new FolderData(remoteFolder));\n this.messagingService.send(\"syncedUpsertedFolder\", { folderId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteFolder(notification: SyncFolderNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.folderService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedFolder\", { folderId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n let shouldUpdate = true;\n const localCipher = await this.cipherService.get(notification.id);\n if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n shouldUpdate = false;\n }\n\n let checkCollections = false;\n if (shouldUpdate) {\n if (isEdit) {\n shouldUpdate = localCipher != null;\n checkCollections = true;\n } else {\n if (notification.collectionIds == null || notification.organizationId == null) {\n shouldUpdate = localCipher == null;\n } else {\n shouldUpdate = false;\n checkCollections = true;\n }\n }\n }\n\n if (\n !shouldUpdate &&\n checkCollections &&\n notification.organizationId != null &&\n notification.collectionIds != null &&\n notification.collectionIds.length > 0\n ) {\n const collections = await this.collectionService.getAll();\n if (collections != null) {\n for (let i = 0; i < collections.length; i++) {\n if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n shouldUpdate = true;\n break;\n }\n }\n }\n }\n\n if (shouldUpdate) {\n const remoteCipher = await this.apiService.getCipher(notification.id);\n if (remoteCipher != null) {\n await this.cipherService.upsert(new CipherData(remoteCipher));\n this.messagingService.send(\"syncedUpsertedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n if (e != null && e.statusCode === 404 && isEdit) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteCipher(notification: SyncCipherNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.cipherService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedCipher\", { cipherId: notification.id });\n return this.syncCompleted(true);\n }\n return this.syncCompleted(false);\n }\n\n async syncUpsertSend(notification: SyncSendNotification, isEdit: boolean): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n try {\n const localSend = await this.sendService.get(notification.id);\n if (\n (!isEdit && localSend == null) ||\n (isEdit && localSend != null && localSend.revisionDate < notification.revisionDate)\n ) {\n const remoteSend = await this.apiService.getSend(notification.id);\n if (remoteSend != null) {\n await this.sendService.upsert(new SendData(remoteSend));\n this.messagingService.send(\"syncedUpsertedSend\", { sendId: notification.id });\n return this.syncCompleted(true);\n }\n }\n } catch (e) {\n this.logService.error(e);\n }\n }\n return this.syncCompleted(false);\n }\n\n async syncDeleteSend(notification: SyncSendNotification): Promise {\n this.syncStarted();\n if (await this.stateService.getIsAuthenticated()) {\n await this.sendService.delete(notification.id);\n this.messagingService.send(\"syncedDeletedSend\", { sendId: notification.id });\n this.syncCompleted(true);\n return true;\n }\n return this.syncCompleted(false);\n }\n\n // Helpers\n\n private syncStarted() {\n this.syncInProgress = true;\n this.messagingService.send(\"syncStarted\");\n }\n\n private syncCompleted(successfully: boolean): boolean {\n this.syncInProgress = false;\n this.messagingService.send(\"syncCompleted\", { successfully: successfully });\n return successfully;\n }\n\n private async needsSyncing(forceSync: boolean) {\n if (forceSync) {\n return true;\n }\n\n const lastSync = await this.getLastSync();\n if (lastSync == null || lastSync.getTime() === 0) {\n return true;\n }\n\n const response = await this.apiService.getAccountRevisionDate();\n if (new Date(response) <= lastSync) {\n return false;\n }\n return true;\n }\n\n private async syncProfile(response: ProfileResponse) {\n const stamp = await this.stateService.getSecurityStamp();\n if (stamp != null && stamp !== response.securityStamp) {\n if (this.logoutCallback != null) {\n await this.logoutCallback(true);\n }\n\n throw new Error(\"Stamp has changed\");\n }\n\n await this.cryptoService.setEncKey(response.key);\n await this.cryptoService.setEncPrivateKey(response.privateKey);\n await this.cryptoService.setProviderKeys(response.providers);\n await this.cryptoService.setOrgKeys(response.organizations, response.providerOrganizations);\n await this.stateService.setSecurityStamp(response.securityStamp);\n await this.stateService.setEmailVerified(response.emailVerified);\n await this.stateService.setHasPremiumPersonally(response.premiumPersonally);\n await this.stateService.setHasPremiumFromOrganization(response.premiumFromOrganization);\n await this.stateService.setForcePasswordReset(response.forcePasswordReset);\n await this.keyConnectorService.setUsesKeyConnector(response.usesKeyConnector);\n\n const organizations: { [id: string]: OrganizationData } = {};\n response.organizations.forEach((o) => {\n organizations[o.id] = new OrganizationData(o);\n });\n\n const providers: { [id: string]: ProviderData } = {};\n response.providers.forEach((p) => {\n providers[p.id] = new ProviderData(p);\n });\n\n response.providerOrganizations.forEach((o) => {\n if (organizations[o.id] == null) {\n organizations[o.id] = new OrganizationData(o);\n organizations[o.id].isProviderUser = true;\n }\n });\n\n await this.organizationService.save(organizations);\n await this.providerService.save(providers);\n\n if (await this.keyConnectorService.userNeedsMigration()) {\n await this.keyConnectorService.setConvertAccountRequired(true);\n this.messagingService.send(\"convertAccountToKeyConnector\");\n } else {\n this.keyConnectorService.removeConvertAccountRequired();\n }\n }\n\n private async syncFolders(response: FolderResponse[]) {\n const folders: { [id: string]: FolderData } = {};\n response.forEach((f) => {\n folders[f.id] = new FolderData(f);\n });\n return await this.folderService.replace(folders);\n }\n\n private async syncCollections(response: CollectionDetailsResponse[]) {\n const collections: { [id: string]: CollectionData } = {};\n response.forEach((c) => {\n collections[c.id] = new CollectionData(c);\n });\n return await this.collectionService.replace(collections);\n }\n\n private async syncCiphers(response: CipherResponse[]) {\n const ciphers: { [id: string]: CipherData } = {};\n response.forEach((c) => {\n ciphers[c.id] = new CipherData(c);\n });\n return await this.cipherService.replace(ciphers);\n }\n\n private async syncSends(response: SendResponse[]) {\n const sends: { [id: string]: SendData } = {};\n response.forEach((s) => {\n sends[s.id] = new SendData(s);\n });\n return await this.sendService.replace(sends);\n }\n\n private async syncSettings(response: DomainsResponse) {\n let eqDomains: string[][] = [];\n if (response != null && response.equivalentDomains != null) {\n eqDomains = eqDomains.concat(response.equivalentDomains);\n }\n\n if (response != null && response.globalEquivalentDomains != null) {\n response.globalEquivalentDomains.forEach((global) => {\n if (global.domains.length > 0) {\n eqDomains.push(global.domains);\n }\n });\n }\n\n return this.settingsService.setEquivalentDomains(eqDomains);\n }\n\n private async syncPolicies(response: PolicyResponse[]) {\n const policies: { [id: string]: PolicyData } = {};\n if (response != null) {\n response.forEach((p) => {\n policies[p.id] = new PolicyData(p);\n });\n }\n return await this.policyService.replace(policies);\n }\n}\n","import { StateService } from \"../abstractions/state.service\";\nimport { TokenService as TokenServiceAbstraction } from \"../abstractions/token.service\";\nimport { Utils } from \"../misc/utils\";\nimport { IdentityTokenResponse } from \"../models/response/identityTokenResponse\";\n\nexport class TokenService implements TokenServiceAbstraction {\n static decodeToken(token: string): Promise {\n if (token == null) {\n throw new Error(\"Token not provided.\");\n }\n\n const parts = token.split(\".\");\n if (parts.length !== 3) {\n throw new Error(\"JWT must have 3 parts\");\n }\n\n const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n if (decoded == null) {\n throw new Error(\"Cannot decode the token\");\n }\n\n const decodedToken = JSON.parse(decoded);\n return decodedToken;\n }\n\n constructor(private stateService: StateService) {}\n\n async setTokens(\n accessToken: string,\n refreshToken: string,\n clientIdClientSecret: [string, string]\n ): Promise {\n await this.setToken(accessToken);\n await this.setRefreshToken(refreshToken);\n if (clientIdClientSecret != null) {\n await this.setClientId(clientIdClientSecret[0]);\n await this.setClientSecret(clientIdClientSecret[1]);\n }\n }\n\n async setClientId(clientId: string): Promise {\n return await this.stateService.setApiKeyClientId(clientId);\n }\n\n async getClientId(): Promise {\n return await this.stateService.getApiKeyClientId();\n }\n\n async setClientSecret(clientSecret: string): Promise {\n return await this.stateService.setApiKeyClientSecret(clientSecret);\n }\n\n async getClientSecret(): Promise {\n return await this.stateService.getApiKeyClientSecret();\n }\n\n async setToken(token: string): Promise {\n await this.stateService.setAccessToken(token);\n }\n\n async getToken(): Promise {\n return await this.stateService.getAccessToken();\n }\n\n async setRefreshToken(refreshToken: string): Promise {\n return await this.stateService.setRefreshToken(refreshToken);\n }\n\n async getRefreshToken(): Promise {\n return await this.stateService.getRefreshToken();\n }\n\n async setTwoFactorToken(tokenResponse: IdentityTokenResponse): Promise {\n return await this.stateService.setTwoFactorToken(tokenResponse.twoFactorToken);\n }\n\n async getTwoFactorToken(): Promise {\n return await this.stateService.getTwoFactorToken();\n }\n\n async clearTwoFactorToken(): Promise {\n return await this.stateService.setTwoFactorToken(null);\n }\n\n async clearToken(userId?: string): Promise {\n await this.stateService.setAccessToken(null, { userId: userId });\n await this.stateService.setRefreshToken(null, { userId: userId });\n await this.stateService.setApiKeyClientId(null, { userId: userId });\n await this.stateService.setApiKeyClientSecret(null, { userId: userId });\n }\n\n // jwthelper methods\n // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n async decodeToken(token?: string): Promise {\n const storedToken = await this.stateService.getDecodedToken();\n if (token === null && storedToken != null) {\n return storedToken;\n }\n\n token = token ?? (await this.stateService.getAccessToken());\n\n if (token == null) {\n throw new Error(\"Token not found.\");\n }\n\n return TokenService.decodeToken(token);\n }\n\n async getTokenExpirationDate(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.exp === \"undefined\") {\n return null;\n }\n\n const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n d.setUTCSeconds(decoded.exp);\n return d;\n }\n\n async tokenSecondsRemaining(offsetSeconds = 0): Promise {\n const d = await this.getTokenExpirationDate();\n if (d == null) {\n return 0;\n }\n\n const msRemaining = d.valueOf() - (new Date().valueOf() + offsetSeconds * 1000);\n return Math.round(msRemaining / 1000);\n }\n\n async tokenNeedsRefresh(minutes = 5): Promise {\n const sRemaining = await this.tokenSecondsRemaining();\n return sRemaining < 60 * minutes;\n }\n\n async getUserId(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.sub === \"undefined\") {\n throw new Error(\"No user id found\");\n }\n\n return decoded.sub as string;\n }\n\n async getEmail(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email === \"undefined\") {\n throw new Error(\"No email found\");\n }\n\n return decoded.email as string;\n }\n\n async getEmailVerified(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.email_verified === \"undefined\") {\n throw new Error(\"No email verification found\");\n }\n\n return decoded.email_verified as boolean;\n }\n\n async getName(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.name === \"undefined\") {\n return null;\n }\n\n return decoded.name as string;\n }\n\n async getIssuer(): Promise {\n const decoded = await this.decodeToken();\n if (typeof decoded.iss === \"undefined\") {\n throw new Error(\"No issuer found\");\n }\n\n return decoded.iss as string;\n }\n\n async getIsExternal(): Promise {\n const decoded = await this.decodeToken();\n\n return Array.isArray(decoded.amr) && decoded.amr.includes(\"external\");\n }\n}\n","import { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { LogService } from \"../abstractions/log.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TotpService as TotpServiceAbstraction } from \"../abstractions/totp.service\";\nimport { Utils } from \"../misc/utils\";\n\nconst B32Chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst SteamChars = \"23456789BCDFGHJKMNPQRTVWXY\";\n\nexport class TotpService implements TotpServiceAbstraction {\n constructor(\n private cryptoFunctionService: CryptoFunctionService,\n private logService: LogService,\n private stateService: StateService\n ) {}\n\n async getCode(key: string): Promise {\n if (key == null) {\n return null;\n }\n let period = 30;\n let alg: \"sha1\" | \"sha256\" | \"sha512\" = \"sha1\";\n let digits = 6;\n let keyB32 = key;\n const isOtpAuth = key.toLowerCase().indexOf(\"otpauth://\") === 0;\n const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf(\"steam://\") === 0;\n if (isOtpAuth) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"digits\") && params.get(\"digits\") != null) {\n try {\n const digitParams = parseInt(params.get(\"digits\").trim(), null);\n if (digitParams > 10) {\n digits = 10;\n } else if (digitParams > 0) {\n digits = digitParams;\n }\n } catch {\n this.logService.error(\"Invalid digits param.\");\n }\n }\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n const periodParam = parseInt(params.get(\"period\").trim(), null);\n if (periodParam > 0) {\n period = periodParam;\n }\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n if (params.has(\"secret\") && params.get(\"secret\") != null) {\n keyB32 = params.get(\"secret\");\n }\n if (params.has(\"algorithm\") && params.get(\"algorithm\") != null) {\n const algParam = params.get(\"algorithm\").toLowerCase();\n if (algParam === \"sha1\" || algParam === \"sha256\" || algParam === \"sha512\") {\n alg = algParam;\n }\n }\n } else if (isSteamAuth) {\n keyB32 = key.substr(\"steam://\".length);\n digits = 5;\n }\n\n const epoch = Math.round(new Date().getTime() / 1000.0);\n const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, \"0\");\n const timeBytes = Utils.fromHexToArray(timeHex);\n const keyBytes = this.b32ToBytes(keyB32);\n\n if (!keyBytes.length || !timeBytes.length) {\n return null;\n }\n\n const hash = await this.sign(keyBytes, timeBytes, alg);\n if (hash.length === 0) {\n return null;\n }\n\n const offset = hash[hash.length - 1] & 0xf;\n const binary =\n ((hash[offset] & 0x7f) << 24) |\n ((hash[offset + 1] & 0xff) << 16) |\n ((hash[offset + 2] & 0xff) << 8) |\n (hash[offset + 3] & 0xff);\n\n let otp = \"\";\n if (isSteamAuth) {\n let fullCode = binary & 0x7fffffff;\n for (let i = 0; i < digits; i++) {\n otp += SteamChars[fullCode % SteamChars.length];\n fullCode = Math.trunc(fullCode / SteamChars.length);\n }\n } else {\n otp = (binary % Math.pow(10, digits)).toString();\n otp = this.leftPad(otp, digits, \"0\");\n }\n\n return otp;\n }\n\n getTimeInterval(key: string): number {\n let period = 30;\n if (key != null && key.toLowerCase().indexOf(\"otpauth://\") === 0) {\n const params = Utils.getQueryParams(key);\n if (params.has(\"period\") && params.get(\"period\") != null) {\n try {\n period = parseInt(params.get(\"period\").trim(), null);\n } catch {\n this.logService.error(\"Invalid period param.\");\n }\n }\n }\n return period;\n }\n\n async isAutoCopyEnabled(): Promise {\n return !(await this.stateService.getDisableAutoTotpCopy());\n }\n\n // Helpers\n\n private leftPad(s: string, l: number, p: string): string {\n if (l + 1 >= s.length) {\n s = Array(l + 1 - s.length).join(p) + s;\n }\n return s;\n }\n\n private decToHex(d: number): string {\n return (d < 15.5 ? \"0\" : \"\") + Math.round(d).toString(16);\n }\n\n private b32ToHex(s: string): string {\n s = s.toUpperCase();\n let cleanedInput = \"\";\n\n for (let i = 0; i < s.length; i++) {\n if (B32Chars.indexOf(s[i]) < 0) {\n continue;\n }\n\n cleanedInput += s[i];\n }\n s = cleanedInput;\n\n let bits = \"\";\n let hex = \"\";\n for (let i = 0; i < s.length; i++) {\n const byteIndex = B32Chars.indexOf(s.charAt(i));\n if (byteIndex < 0) {\n continue;\n }\n bits += this.leftPad(byteIndex.toString(2), 5, \"0\");\n }\n for (let i = 0; i + 4 <= bits.length; i += 4) {\n const chunk = bits.substr(i, 4);\n hex = hex + parseInt(chunk, 2).toString(16);\n }\n return hex;\n }\n\n private b32ToBytes(s: string): Uint8Array {\n return Utils.fromHexToArray(this.b32ToHex(s));\n }\n\n private async sign(\n keyBytes: Uint8Array,\n timeBytes: Uint8Array,\n alg: \"sha1\" | \"sha256\" | \"sha512\"\n ) {\n const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n return new Uint8Array(signature);\n }\n}\n","import { I18nService } from \"../abstractions/i18n.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport {\n TwoFactorProviderDetails,\n TwoFactorService as TwoFactorServiceAbstraction,\n} from \"../abstractions/twoFactor.service\";\nimport { TwoFactorProviderType } from \"../enums/twoFactorProviderType\";\nimport { IdentityTwoFactorResponse } from \"../models/response/identityTwoFactorResponse\";\n\nexport const TwoFactorProviders: Partial> =\n {\n [TwoFactorProviderType.Authenticator]: {\n type: TwoFactorProviderType.Authenticator,\n name: null as string,\n description: null as string,\n priority: 1,\n sort: 1,\n premium: false,\n },\n [TwoFactorProviderType.Yubikey]: {\n type: TwoFactorProviderType.Yubikey,\n name: null as string,\n description: null as string,\n priority: 3,\n sort: 2,\n premium: true,\n },\n [TwoFactorProviderType.Duo]: {\n type: TwoFactorProviderType.Duo,\n name: \"Duo\",\n description: null as string,\n priority: 2,\n sort: 3,\n premium: true,\n },\n [TwoFactorProviderType.OrganizationDuo]: {\n type: TwoFactorProviderType.OrganizationDuo,\n name: \"Duo (Organization)\",\n description: null as string,\n priority: 10,\n sort: 4,\n premium: false,\n },\n [TwoFactorProviderType.Email]: {\n type: TwoFactorProviderType.Email,\n name: null as string,\n description: null as string,\n priority: 0,\n sort: 6,\n premium: false,\n },\n [TwoFactorProviderType.WebAuthn]: {\n type: TwoFactorProviderType.WebAuthn,\n name: null as string,\n description: null as string,\n priority: 4,\n sort: 5,\n premium: true,\n },\n };\n\nexport class TwoFactorService implements TwoFactorServiceAbstraction {\n private twoFactorProvidersData: Map;\n private selectedTwoFactorProviderType: TwoFactorProviderType = null;\n\n constructor(\n private i18nService: I18nService,\n private platformUtilsService: PlatformUtilsService\n ) {}\n\n init() {\n TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t(\"emailTitle\");\n TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t(\"emailDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Authenticator].name =\n this.i18nService.t(\"authenticatorAppTitle\");\n TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n this.i18nService.t(\"authenticatorAppDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t(\"duoDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n \"Duo (\" + this.i18nService.t(\"organization\") + \")\";\n TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n this.i18nService.t(\"duoOrganizationDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t(\"webAuthnTitle\");\n TwoFactorProviders[TwoFactorProviderType.WebAuthn].description =\n this.i18nService.t(\"webAuthnDesc\");\n\n TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t(\"yubiKeyTitle\");\n TwoFactorProviders[TwoFactorProviderType.Yubikey].description =\n this.i18nService.t(\"yubiKeyDesc\");\n }\n\n getSupportedProviders(win: Window): TwoFactorProviderDetails[] {\n const providers: any[] = [];\n if (this.twoFactorProvidersData == null) {\n return providers;\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) &&\n this.platformUtilsService.supportsDuo()\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n }\n\n if (\n this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) &&\n this.platformUtilsService.supportsWebAuthn(win)\n ) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n }\n\n if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n }\n\n return providers;\n }\n\n getDefaultProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n if (this.twoFactorProvidersData == null) {\n return null;\n }\n\n if (\n this.selectedTwoFactorProviderType != null &&\n this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)\n ) {\n return this.selectedTwoFactorProviderType;\n }\n\n let providerType: TwoFactorProviderType = null;\n let providerPriority = -1;\n this.twoFactorProvidersData.forEach((_value, type) => {\n const provider = (TwoFactorProviders as any)[type];\n if (provider != null && provider.priority > providerPriority) {\n if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n return;\n }\n\n providerType = type;\n providerPriority = provider.priority;\n }\n });\n\n return providerType;\n }\n\n setSelectedProvider(type: TwoFactorProviderType) {\n this.selectedTwoFactorProviderType = type;\n }\n\n clearSelectedProvider() {\n this.selectedTwoFactorProviderType = null;\n }\n\n setProviders(response: IdentityTwoFactorResponse) {\n this.twoFactorProvidersData = response.twoFactorProviders2;\n }\n\n clearProviders() {\n this.twoFactorProvidersData = null;\n }\n\n getProviders() {\n return this.twoFactorProvidersData;\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { I18nService } from \"../abstractions/i18n.service\";\nimport { UserVerificationService as UserVerificationServiceAbstraction } from \"../abstractions/userVerification.service\";\nimport { VerificationType } from \"../enums/verificationType\";\nimport { VerifyOTPRequest } from \"../models/request/account/verifyOTPRequest\";\nimport { SecretVerificationRequest } from \"../models/request/secretVerificationRequest\";\nimport { Verification } from \"../types/verification\";\n\n/**\n * Used for general-purpose user verification throughout the app.\n * Use it to verify the input collected by UserVerificationComponent.\n */\nexport class UserVerificationService implements UserVerificationServiceAbstraction {\n constructor(\n private cryptoService: CryptoService,\n private i18nService: I18nService,\n private apiService: ApiService\n ) {}\n\n /**\n * Create a new request model to be used for server-side verification\n * @param verification User-supplied verification data (Master Password or OTP)\n * @param requestClass The request model to create\n * @param alreadyHashed Whether the master password is already hashed\n */\n async buildRequest(\n verification: Verification,\n requestClass?: new () => T,\n alreadyHashed?: boolean\n ) {\n this.validateInput(verification);\n\n const request =\n requestClass != null ? new requestClass() : (new SecretVerificationRequest() as T);\n\n if (verification.type === VerificationType.OTP) {\n request.otp = verification.secret;\n } else {\n request.masterPasswordHash = alreadyHashed\n ? verification.secret\n : await this.cryptoService.hashPassword(verification.secret, null);\n }\n\n return request;\n }\n\n /**\n * Used to verify the Master Password client-side, or send the OTP to the server for verification (with no other data)\n * Generally used for client-side verification only.\n * @param verification User-supplied verification data (Master Password or OTP)\n */\n async verifyUser(verification: Verification): Promise {\n this.validateInput(verification);\n\n if (verification.type === VerificationType.OTP) {\n const request = new VerifyOTPRequest(verification.secret);\n try {\n await this.apiService.postAccountVerifyOTP(request);\n } catch (e) {\n throw new Error(this.i18nService.t(\"invalidVerificationCode\"));\n }\n } else {\n const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(\n verification.secret,\n null\n );\n if (!passwordValid) {\n throw new Error(this.i18nService.t(\"invalidMasterPassword\"));\n }\n }\n return true;\n }\n\n async requestOTP() {\n await this.apiService.postAccountRequestOTP();\n }\n\n private validateInput(verification: Verification) {\n if (verification?.secret == null || verification.secret === \"\") {\n if (verification.type === VerificationType.OTP) {\n throw new Error(this.i18nService.t(\"verificationCodeRequired\"));\n } else {\n throw new Error(this.i18nService.t(\"masterPassRequired\"));\n }\n }\n }\n}\n","import { ApiService } from \"../abstractions/api.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { UsernameGenerationService as BaseUsernameGenerationService } from \"../abstractions/usernameGeneration.service\";\nimport { EEFLongWordList } from \"../misc/wordlist\";\n\nconst DefaultOptions = {\n type: \"word\",\n wordCapitalize: true,\n wordIncludeNumber: true,\n subaddressType: \"random\",\n catchallType: \"random\",\n forwardedService: \"simplelogin\",\n forwardedAnonAddyDomain: \"anonaddy.me\",\n};\n\nexport class UsernameGenerationService implements BaseUsernameGenerationService {\n constructor(\n private cryptoService: CryptoService,\n private stateService: StateService,\n private apiService: ApiService\n ) {}\n\n generateUsername(options: any): Promise {\n if (options.type === \"catchall\") {\n return this.generateCatchall(options);\n } else if (options.type === \"subaddress\") {\n return this.generateSubaddress(options);\n } else if (options.type === \"forwarded\") {\n return this.generateForwarded(options);\n } else {\n return this.generateWord(options);\n }\n }\n\n async generateWord(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.wordCapitalize == null) {\n o.wordCapitalize = true;\n }\n if (o.wordIncludeNumber == null) {\n o.wordIncludeNumber = true;\n }\n\n const wordIndex = await this.cryptoService.randomNumber(0, EEFLongWordList.length - 1);\n let word = EEFLongWordList[wordIndex];\n if (o.wordCapitalize) {\n word = word.charAt(0).toUpperCase() + word.slice(1);\n }\n if (o.wordIncludeNumber) {\n const num = await this.cryptoService.randomNumber(1, 9999);\n word = word + this.zeroPad(num.toString(), 4);\n }\n return word;\n }\n\n async generateSubaddress(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n const subaddressEmail = o.subaddressEmail;\n if (subaddressEmail == null || subaddressEmail.length < 3) {\n return o.subaddressEmail;\n }\n const atIndex = subaddressEmail.indexOf(\"@\");\n if (atIndex < 1 || atIndex >= subaddressEmail.length - 1) {\n return subaddressEmail;\n }\n if (o.subaddressType == null) {\n o.subaddressType = \"random\";\n }\n\n const emailBeginning = subaddressEmail.substr(0, atIndex);\n const emailEnding = subaddressEmail.substr(atIndex + 1, subaddressEmail.length);\n\n let subaddressString = \"\";\n if (o.subaddressType === \"random\") {\n subaddressString = await this.randomString(8);\n } else if (o.subaddressType === \"website-name\") {\n subaddressString = o.website;\n }\n return emailBeginning + \"+\" + subaddressString + \"@\" + emailEnding;\n }\n\n async generateCatchall(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.catchallDomain == null || o.catchallDomain === \"\") {\n return null;\n }\n if (o.catchallType == null) {\n o.catchallType = \"random\";\n }\n\n let startString = \"\";\n if (o.catchallType === \"random\") {\n startString = await this.randomString(8);\n } else if (o.catchallType === \"website-name\") {\n startString = o.website;\n }\n return startString + \"@\" + o.catchallDomain;\n }\n\n async generateForwarded(options: any): Promise {\n const o = Object.assign({}, DefaultOptions, options);\n\n if (o.forwardedService == null) {\n return null;\n }\n\n if (o.forwardedService === \"simplelogin\") {\n if (o.forwardedSimpleLoginApiKey == null || o.forwardedSimpleLoginApiKey === \"\") {\n return null;\n }\n return this.generateSimpleLoginAlias(o.forwardedSimpleLoginApiKey, o.website);\n } else if (o.forwardedService === \"anonaddy\") {\n if (\n o.forwardedAnonAddyApiToken == null ||\n o.forwardedAnonAddyApiToken === \"\" ||\n o.forwardedAnonAddyDomain == null ||\n o.forwardedAnonAddyDomain == \"\"\n ) {\n return null;\n }\n return this.generateAnonAddyAlias(\n o.forwardedAnonAddyApiToken,\n o.forwardedAnonAddyDomain,\n o.website\n );\n } else if (o.forwardedService === \"firefoxrelay\") {\n if (o.forwardedFirefoxApiToken == null || o.forwardedFirefoxApiToken === \"\") {\n return null;\n }\n return this.generateFirefoxRelayAlias(o.forwardedFirefoxApiToken, o.website);\n }\n\n return null;\n }\n\n async getOptions(): Promise {\n let options = await this.stateService.getUsernameGenerationOptions();\n if (options == null) {\n options = Object.assign({}, DefaultOptions);\n } else {\n options = Object.assign({}, DefaultOptions, options);\n }\n await this.stateService.setUsernameGenerationOptions(options);\n return options;\n }\n\n async saveOptions(options: any) {\n await this.stateService.setUsernameGenerationOptions(options);\n }\n\n private async randomString(length: number) {\n let str = \"\";\n const charSet = \"abcdefghijklmnopqrstuvwxyz1234567890\";\n for (let i = 0; i < length; i++) {\n const randomCharIndex = await this.cryptoService.randomNumber(0, charSet.length - 1);\n str += charSet.charAt(randomCharIndex);\n }\n return str;\n }\n\n // ref: https://stackoverflow.com/a/10073788\n private zeroPad(number: string, width: number) {\n return number.length >= width\n ? number\n : new Array(width - number.length + 1).join(\"0\") + number;\n }\n\n private async generateSimpleLoginAlias(apiKey: string, website: string): Promise {\n if (apiKey == null || apiKey === \"\") {\n throw \"Invalid SimpleLogin API key.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authentication: apiKey,\n \"Content-Type\": \"application/json\",\n }),\n };\n let url = \"https://app.simplelogin.io/api/alias/random/new\";\n if (website != null) {\n url += \"?hostname=\" + website;\n }\n requestInit.body = JSON.stringify({\n note: (website != null ? \"Website: \" + website + \". \" : \"\") + \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await this.apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json.alias;\n }\n if (response.status === 401) {\n throw \"Invalid SimpleLogin API key.\";\n }\n try {\n const json = await response.json();\n if (json?.error != null) {\n throw \"SimpleLogin error:\" + json.error;\n }\n } catch {\n // Do nothing...\n }\n throw \"Unknown SimpleLogin error occurred.\";\n }\n\n private async generateAnonAddyAlias(\n apiToken: string,\n domain: string,\n websiteNote: string\n ): Promise {\n if (apiToken == null || apiToken === \"\") {\n throw \"Invalid AnonAddy API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Bearer \" + apiToken,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://app.anonaddy.com/api/v1/aliases\";\n requestInit.body = JSON.stringify({\n domain: domain,\n description:\n (websiteNote != null ? \"Website: \" + websiteNote + \". \" : \"\") + \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await this.apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.data?.email;\n }\n if (response.status === 401) {\n throw \"Invalid AnonAddy API token.\";\n }\n throw \"Unknown AnonAddy error occurred.\";\n }\n\n private async generateFirefoxRelayAlias(apiToken: string, website: string): Promise {\n if (apiToken == null || apiToken === \"\") {\n throw \"Invalid Firefox Relay API token.\";\n }\n const requestInit: RequestInit = {\n redirect: \"manual\",\n cache: \"no-store\",\n method: \"POST\",\n headers: new Headers({\n Authorization: \"Token \" + apiToken,\n \"Content-Type\": \"application/json\",\n }),\n };\n const url = \"https://relay.firefox.com/api/v1/relayaddresses/\";\n requestInit.body = JSON.stringify({\n enabled: true,\n generated_for: website,\n description: (website != null ? website + \" - \" : \"\") + \"Generated by Bitwarden.\",\n });\n const request = new Request(url, requestInit);\n const response = await this.apiService.nativeFetch(request);\n if (response.status === 200 || response.status === 201) {\n const json = await response.json();\n return json?.full_address;\n }\n if (response.status === 401) {\n throw \"Invalid Firefox Relay API token.\";\n }\n throw \"Unknown Firefox Relay error occurred.\";\n }\n}\n","import { AuthService } from \"../abstractions/auth.service\";\nimport { CipherService } from \"../abstractions/cipher.service\";\nimport { CollectionService } from \"../abstractions/collection.service\";\nimport { CryptoService } from \"../abstractions/crypto.service\";\nimport { FolderService } from \"../abstractions/folder.service\";\nimport { KeyConnectorService } from \"../abstractions/keyConnector.service\";\nimport { MessagingService } from \"../abstractions/messaging.service\";\nimport { PlatformUtilsService } from \"../abstractions/platformUtils.service\";\nimport { PolicyService } from \"../abstractions/policy.service\";\nimport { SearchService } from \"../abstractions/search.service\";\nimport { StateService } from \"../abstractions/state.service\";\nimport { TokenService } from \"../abstractions/token.service\";\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from \"../abstractions/vaultTimeout.service\";\nimport { AuthenticationStatus } from \"../enums/authenticationStatus\";\nimport { PolicyType } from \"../enums/policyType\";\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n private inited = false;\n\n constructor(\n private cipherService: CipherService,\n private folderService: FolderService,\n private collectionService: CollectionService,\n private cryptoService: CryptoService,\n protected platformUtilsService: PlatformUtilsService,\n private messagingService: MessagingService,\n private searchService: SearchService,\n private tokenService: TokenService,\n private policyService: PolicyService,\n private keyConnectorService: KeyConnectorService,\n private stateService: StateService,\n private authService: AuthService,\n private lockedCallback: (userId?: string) => Promise = null,\n private loggedOutCallback: (expired: boolean, userId?: string) => Promise = null\n ) {}\n\n init(checkOnInterval: boolean) {\n if (this.inited) {\n return;\n }\n\n this.inited = true;\n if (checkOnInterval) {\n this.startCheck();\n }\n }\n\n startCheck() {\n this.checkVaultTimeout();\n setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n }\n\n async checkVaultTimeout(): Promise {\n if (await this.platformUtilsService.isViewOpen()) {\n return;\n }\n\n for (const userId in this.stateService.accounts.getValue()) {\n if (userId != null && (await this.shouldLock(userId))) {\n await this.executeTimeoutAction(userId);\n }\n }\n }\n\n async lock(allowSoftLock = false, userId?: string): Promise {\n const authed = await this.stateService.getIsAuthenticated({ userId: userId });\n if (!authed) {\n return;\n }\n\n if (await this.keyConnectorService.getUsesKeyConnector()) {\n const pinSet = await this.isPinLockSet();\n const pinLock =\n (pinSet[0] && (await this.stateService.getDecryptedPinProtected()) != null) || pinSet[1];\n\n if (!pinLock && !(await this.isBiometricLockSet())) {\n await this.logOut(userId);\n }\n }\n\n if (userId == null || userId === (await this.stateService.getUserId())) {\n this.searchService.clearIndex();\n }\n\n await this.stateService.setEverBeenUnlocked(true, { userId: userId });\n await this.stateService.setBiometricLocked(true, { userId: userId });\n await this.stateService.setCryptoMasterKeyAuto(null, { userId: userId });\n\n await this.cryptoService.clearKey(false, userId);\n await this.cryptoService.clearOrgKeys(true, userId);\n await this.cryptoService.clearKeyPair(true, userId);\n await this.cryptoService.clearEncKey(true, userId);\n\n await this.folderService.clearCache(userId);\n await this.cipherService.clearCache(userId);\n await this.collectionService.clearCache(userId);\n\n this.messagingService.send(\"locked\", { userId: userId });\n\n if (this.lockedCallback != null) {\n await this.lockedCallback(userId);\n }\n }\n\n async logOut(userId?: string): Promise {\n if (this.loggedOutCallback != null) {\n await this.loggedOutCallback(false, userId);\n }\n }\n\n async setVaultTimeoutOptions(timeout: number, action: string): Promise {\n await this.stateService.setVaultTimeout(timeout);\n\n // We swap these tokens from being on disk for lock actions, and in memory for logout actions\n // Get them here to set them to their new location after changing the timeout action and clearing if needed\n const token = await this.tokenService.getToken();\n const refreshToken = await this.tokenService.getRefreshToken();\n const clientId = await this.tokenService.getClientId();\n const clientSecret = await this.tokenService.getClientSecret();\n\n const currentAction = await this.stateService.getVaultTimeoutAction();\n if ((timeout != null || timeout === 0) && action === \"logOut\" && action !== currentAction) {\n // if we have a vault timeout and the action is log out, reset tokens\n await this.tokenService.clearToken();\n }\n\n await this.stateService.setVaultTimeoutAction(action);\n\n await this.tokenService.setToken(token);\n await this.tokenService.setRefreshToken(refreshToken);\n await this.tokenService.setClientId(clientId);\n await this.tokenService.setClientSecret(clientSecret);\n\n await this.cryptoService.toggleKey();\n }\n\n async isPinLockSet(): Promise<[boolean, boolean]> {\n const protectedPin = await this.stateService.getProtectedPin();\n const pinProtectedKey = await this.stateService.getEncryptedPinProtected();\n return [protectedPin != null, pinProtectedKey != null];\n }\n\n async isBiometricLockSet(): Promise {\n return await this.stateService.getBiometricUnlock();\n }\n\n async getVaultTimeout(userId?: string): Promise {\n const vaultTimeout = await this.stateService.getVaultTimeout({ userId: userId });\n\n if (\n await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout, null, userId)\n ) {\n const policy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout, userId);\n // Remove negative values, and ensure it's smaller than maximum allowed value according to policy\n let timeout = Math.min(vaultTimeout, policy[0].data.minutes);\n\n if (vaultTimeout == null || timeout < 0) {\n timeout = policy[0].data.minutes;\n }\n\n // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n if (vaultTimeout !== timeout) {\n await this.stateService.setVaultTimeout(timeout, { userId: userId });\n }\n\n return timeout;\n }\n\n return vaultTimeout;\n }\n\n async clear(userId?: string): Promise {\n await this.stateService.setEverBeenUnlocked(false, { userId: userId });\n await this.stateService.setDecryptedPinProtected(null, { userId: userId });\n await this.stateService.setProtectedPin(null, { userId: userId });\n }\n\n private async shouldLock(userId: string): Promise {\n const authStatus = await this.authService.getAuthStatus(userId);\n if (\n authStatus === AuthenticationStatus.Locked ||\n authStatus === AuthenticationStatus.LoggedOut\n ) {\n return false;\n }\n\n const vaultTimeout = await this.getVaultTimeout(userId);\n if (vaultTimeout == null || vaultTimeout < 0) {\n return false;\n }\n\n const lastActive = await this.stateService.getLastActive({ userId: userId });\n if (lastActive == null) {\n return false;\n }\n\n const vaultTimeoutSeconds = vaultTimeout * 60;\n const diffSeconds = (new Date().getTime() - lastActive) / 1000;\n return diffSeconds >= vaultTimeoutSeconds;\n }\n\n private async executeTimeoutAction(userId: string): Promise {\n const timeoutAction = await this.stateService.getVaultTimeoutAction({ userId: userId });\n timeoutAction === \"logOut\" ? await this.logOut(userId) : await this.lock(true, userId);\n }\n}\n","import * as forge from \"node-forge\";\n\nimport { CryptoFunctionService } from \"../abstractions/cryptoFunction.service\";\nimport { Utils } from \"../misc/utils\";\nimport { DecryptParameters } from \"../models/domain/decryptParameters\";\nimport { SymmetricCryptoKey } from \"../models/domain/symmetricCryptoKey\";\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n private crypto: Crypto;\n private subtle: SubtleCrypto;\n\n constructor(win: Window) {\n this.crypto = typeof win.crypto !== \"undefined\" ? win.crypto : null;\n this.subtle =\n !!this.crypto && typeof win.crypto.subtle !== \"undefined\" ? win.crypto.subtle : null;\n }\n\n async pbkdf2(\n password: string | ArrayBuffer,\n salt: string | ArrayBuffer,\n algorithm: \"sha256\" | \"sha512\",\n iterations: number\n ): Promise {\n const wcLen = algorithm === \"sha256\" ? 256 : 512;\n const passwordBuf = this.toBuf(password);\n const saltBuf = this.toBuf(salt);\n\n const pbkdf2Params: Pbkdf2Params = {\n name: \"PBKDF2\",\n salt: saltBuf,\n iterations: iterations,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\n \"raw\",\n passwordBuf,\n { name: \"PBKDF2\" } as any,\n false,\n [\"deriveBits\"]\n );\n return await this.subtle.deriveBits(pbkdf2Params, impKey, wcLen);\n }\n\n async hkdf(\n ikm: ArrayBuffer,\n salt: string | ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const saltBuf = this.toBuf(salt);\n const infoBuf = this.toBuf(info);\n\n const hkdfParams: HkdfParams = {\n name: \"HKDF\",\n salt: saltBuf,\n info: infoBuf,\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", ikm, { name: \"HKDF\" } as any, false, [\n \"deriveBits\",\n ]);\n return await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n }\n\n // ref: https://tools.ietf.org/html/rfc5869\n async hkdfExpand(\n prk: ArrayBuffer,\n info: string | ArrayBuffer,\n outputByteSize: number,\n algorithm: \"sha256\" | \"sha512\"\n ): Promise {\n const hashLen = algorithm === \"sha256\" ? 32 : 64;\n if (outputByteSize > 255 * hashLen) {\n throw new Error(\"outputByteSize is too large.\");\n }\n const prkArr = new Uint8Array(prk);\n if (prkArr.length < hashLen) {\n throw new Error(\"prk is too small.\");\n }\n const infoBuf = this.toBuf(info);\n const infoArr = new Uint8Array(infoBuf);\n let runningOkmLength = 0;\n let previousT = new Uint8Array(0);\n const n = Math.ceil(outputByteSize / hashLen);\n const okm = new Uint8Array(n * hashLen);\n for (let i = 0; i < n; i++) {\n const t = new Uint8Array(previousT.length + infoArr.length + 1);\n t.set(previousT);\n t.set(infoArr, previousT.length);\n t.set([i + 1], t.length - 1);\n previousT = new Uint8Array(await this.hmac(t.buffer, prk, algorithm));\n okm.set(previousT, runningOkmLength);\n runningOkmLength += previousT.length;\n if (runningOkmLength >= outputByteSize) {\n break;\n }\n }\n return okm.slice(0, outputByteSize).buffer;\n }\n\n async hash(\n value: string | ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"\n ): Promise {\n if (algorithm === \"md5\") {\n const md = algorithm === \"md5\" ? forge.md.md5.create() : forge.md.sha1.create();\n const valueBytes = this.toByteString(value);\n md.update(valueBytes, \"raw\");\n return Utils.fromByteStringToArray(md.digest().data).buffer;\n }\n\n const valueBuf = this.toBuf(value);\n return await this.subtle.digest({ name: this.toWebCryptoAlgorithm(algorithm) }, valueBuf);\n }\n\n async hmac(\n value: ArrayBuffer,\n key: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\" | \"sha512\"\n ): Promise {\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n\n const impKey = await this.subtle.importKey(\"raw\", key, signingAlgorithm, false, [\"sign\"]);\n return await this.subtle.sign(signingAlgorithm, impKey, value);\n }\n\n // Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).\n // ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n // ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy\n async compare(a: ArrayBuffer, b: ArrayBuffer): Promise {\n const macKey = await this.randomBytes(32);\n const signingAlgorithm = {\n name: \"HMAC\",\n hash: { name: \"SHA-256\" },\n };\n const impKey = await this.subtle.importKey(\"raw\", macKey, signingAlgorithm, false, [\"sign\"]);\n const mac1 = await this.subtle.sign(signingAlgorithm, impKey, a);\n const mac2 = await this.subtle.sign(signingAlgorithm, impKey, b);\n\n if (mac1.byteLength !== mac2.byteLength) {\n return false;\n }\n\n const arr1 = new Uint8Array(mac1);\n const arr2 = new Uint8Array(mac2);\n for (let i = 0; i < arr2.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n hmacFast(value: string, key: string, algorithm: \"sha1\" | \"sha256\" | \"sha512\"): Promise {\n const hmac = forge.hmac.create();\n hmac.start(algorithm, key);\n hmac.update(value);\n const bytes = hmac.digest().getBytes();\n return Promise.resolve(bytes);\n }\n\n async compareFast(a: string, b: string): Promise {\n const rand = await this.randomBytes(32);\n const bytes = new Uint32Array(rand);\n const buffer = forge.util.createBuffer();\n for (let i = 0; i < bytes.length; i++) {\n buffer.putInt32(bytes[i]);\n }\n const macKey = buffer.getBytes();\n\n const hmac = forge.hmac.create();\n hmac.start(\"sha256\", macKey);\n hmac.update(a);\n const mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(b);\n const mac2 = hmac.digest().getBytes();\n\n const equals = mac1 === mac2;\n return equals;\n }\n\n async aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"encrypt\",\n ]);\n return await this.subtle.encrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n aesDecryptFastParameters(\n data: string,\n iv: string,\n mac: string,\n key: SymmetricCryptoKey\n ): DecryptParameters {\n const p = new DecryptParameters();\n if (key.meta != null) {\n p.encKey = key.meta.encKeyByteString;\n p.macKey = key.meta.macKeyByteString;\n }\n\n if (p.encKey == null) {\n p.encKey = forge.util.decode64(key.encKeyB64);\n }\n p.data = forge.util.decode64(data);\n p.iv = forge.util.decode64(iv);\n p.macData = p.iv + p.data;\n if (p.macKey == null && key.macKeyB64 != null) {\n p.macKey = forge.util.decode64(key.macKeyB64);\n }\n if (mac != null) {\n p.mac = forge.util.decode64(mac);\n }\n\n // cache byte string keys for later\n if (key.meta == null) {\n key.meta = {};\n }\n if (key.meta.encKeyByteString == null) {\n key.meta.encKeyByteString = p.encKey;\n }\n if (p.macKey != null && key.meta.macKeyByteString == null) {\n key.meta.macKeyByteString = p.macKey;\n }\n\n return p;\n }\n\n aesDecryptFast(parameters: DecryptParameters): Promise {\n const dataBuffer = forge.util.createBuffer(parameters.data);\n const decipher = forge.cipher.createDecipher(\"AES-CBC\", parameters.encKey);\n decipher.start({ iv: parameters.iv });\n decipher.update(dataBuffer);\n decipher.finish();\n const val = decipher.output.toString();\n return Promise.resolve(val);\n }\n\n async aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise {\n const impKey = await this.subtle.importKey(\"raw\", key, { name: \"AES-CBC\" } as any, false, [\n \"decrypt\",\n ]);\n return await this.subtle.decrypt({ name: \"AES-CBC\", iv: iv }, impKey, data);\n }\n\n async rsaEncrypt(\n data: ArrayBuffer,\n publicKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"spki\", publicKey, rsaParams, false, [\"encrypt\"]);\n return await this.subtle.encrypt(rsaParams, impKey, data);\n }\n\n async rsaDecrypt(\n data: ArrayBuffer,\n privateKey: ArrayBuffer,\n algorithm: \"sha1\" | \"sha256\"\n ): Promise {\n // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n // We cannot use the proper types here.\n const rsaParams = {\n name: \"RSA-OAEP\",\n hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n };\n const impKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, false, [\"decrypt\"]);\n return await this.subtle.decrypt(rsaParams, impKey, data);\n }\n\n async rsaExtractPublicKey(privateKey: ArrayBuffer): Promise {\n const rsaParams = {\n name: \"RSA-OAEP\",\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const impPrivateKey = await this.subtle.importKey(\"pkcs8\", privateKey, rsaParams, true, [\n \"decrypt\",\n ]);\n const jwkPrivateKey = await this.subtle.exportKey(\"jwk\", impPrivateKey);\n const jwkPublicKeyParams = {\n kty: \"RSA\",\n e: jwkPrivateKey.e,\n n: jwkPrivateKey.n,\n alg: \"RSA-OAEP\",\n ext: true,\n };\n const impPublicKey = await this.subtle.importKey(\"jwk\", jwkPublicKeyParams, rsaParams, true, [\n \"encrypt\",\n ]);\n return await this.subtle.exportKey(\"spki\", impPublicKey);\n }\n\n async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n const rsaParams = {\n name: \"RSA-OAEP\",\n modulusLength: length,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537\n // Have to specify some algorithm\n hash: { name: this.toWebCryptoAlgorithm(\"sha1\") },\n };\n const keyPair = (await this.subtle.generateKey(rsaParams, true, [\n \"encrypt\",\n \"decrypt\",\n ])) as CryptoKeyPair;\n const publicKey = await this.subtle.exportKey(\"spki\", keyPair.publicKey);\n const privateKey = await this.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n return [publicKey, privateKey];\n }\n\n randomBytes(length: number): Promise {\n const arr = new Uint8Array(length);\n this.crypto.getRandomValues(arr);\n return Promise.resolve(arr.buffer);\n }\n\n private toBuf(value: string | ArrayBuffer): ArrayBuffer {\n let buf: ArrayBuffer;\n if (typeof value === \"string\") {\n buf = Utils.fromUtf8ToArray(value).buffer;\n } else {\n buf = value;\n }\n return buf;\n }\n\n private toByteString(value: string | ArrayBuffer): string {\n let bytes: string;\n if (typeof value === \"string\") {\n bytes = forge.util.encodeUtf8(value);\n } else {\n bytes = Utils.fromBufferToByteString(value);\n }\n return bytes;\n }\n\n private toWebCryptoAlgorithm(algorithm: \"sha1\" | \"sha256\" | \"sha512\" | \"md5\"): string {\n if (algorithm === \"md5\") {\n throw new Error(\"MD5 is not supported in WebCrypto.\");\n }\n return algorithm === \"sha1\" ? \"SHA-1\" : algorithm === \"sha256\" ? \"SHA-256\" : \"SHA-512\";\n }\n}\n","import { Directive, ElementRef, HostBinding, Input } from \"@angular/core\";\n\ntype BadgeTypes = \"primary\" | \"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\";\n\nconst styles: Record = {\n primary: [\"tw-bg-primary-500\"],\n secondary: [\"tw-bg-text-muted\"],\n success: [\"tw-bg-success-500\"],\n danger: [\"tw-bg-danger-500\"],\n warning: [\"tw-bg-warning-500\"],\n info: [\"tw-bg-info-500\"],\n};\n\nconst hoverStyles: Record = {\n primary: [\"hover:tw-bg-primary-700\"],\n secondary: [\"hover:tw-bg-secondary-700\"],\n success: [\"hover:tw-bg-success-700\"],\n danger: [\"hover:tw-bg-danger-700\"],\n warning: [\"hover:tw-bg-warning-700\"],\n info: [\"hover:tw-bg-info-700\"],\n};\n\n@Directive({\n selector: \"span[bitBadge], a[bitBadge], button[bitBadge]\",\n})\nexport class BadgeDirective {\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-inline-block\",\n \"tw-py-1\",\n \"tw-px-1.5\",\n \"tw-font-bold\",\n \"tw-leading-none\",\n \"tw-text-center\",\n \"!tw-text-contrast\",\n \"tw-rounded\",\n \"tw-border-none\",\n \"tw-box-border\",\n \"tw-whitespace-no-wrap\",\n \"tw-text-xs\",\n \"hover:tw-no-underline\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n ]\n .concat(styles[this.badgeType])\n .concat(this.hasHoverEffects ? hoverStyles[this.badgeType] : []);\n }\n\n @Input() badgeType: BadgeTypes = \"primary\";\n\n private hasHoverEffects = false;\n\n constructor(el: ElementRef) {\n this.hasHoverEffects = el?.nativeElement?.nodeName != \"SPAN\";\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BadgeDirective } from \"./badge.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [BadgeDirective],\n declarations: [BadgeDirective],\n})\nexport class BadgeModule {}\n","export * from \"./badge.directive\";\nexport * from \"./badge.module\";\n","import { Component, Input, OnInit, Output, EventEmitter } from \"@angular/core\";\n\ntype BannerTypes = \"premium\" | \"info\" | \"warning\" | \"danger\";\n\nconst defaultIcon: Record = {\n premium: \"bwi-star\",\n info: \"bwi-info-circle\",\n warning: \"bwi-exclamation-triangle\",\n danger: \"bwi-error\",\n};\n\n@Component({\n selector: \"bit-banner\",\n templateUrl: \"./banner.component.html\",\n})\nexport class BannerComponent implements OnInit {\n @Input(\"bannerType\") bannerType: BannerTypes = \"info\";\n @Input() icon: string;\n @Input() useAlertRole = true;\n\n @Output() onClose = new EventEmitter();\n\n ngOnInit(): void {\n this.icon ??= defaultIcon[this.bannerType];\n }\n\n get bannerClass() {\n switch (this.bannerType) {\n case \"danger\":\n return \"tw-bg-danger-500\";\n case \"info\":\n return \"tw-bg-info-500\";\n case \"premium\":\n return \"tw-bg-success-500\";\n case \"warning\":\n return \"tw-bg-warning-500\";\n }\n }\n}\n","\n \n \n \n \n \n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BannerComponent } from \"./banner.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [BannerComponent],\n declarations: [BannerComponent],\n})\nexport class BannerModule {}\n","export * from \"./banner.component\";\nexport * from \"./banner.module\";\n","import { Input, HostBinding, Directive } from \"@angular/core\";\n\nexport type ButtonTypes = \"primary\" | \"secondary\" | \"danger\";\n\nconst buttonStyles: Record = {\n primary: [\n \"tw-border-primary-500\",\n \"tw-bg-primary-500\",\n \"!tw-text-contrast\",\n \"hover:tw-bg-primary-700\",\n \"hover:tw-border-primary-700\",\n \"focus:tw-bg-primary-700\",\n \"focus:tw-border-primary-700\",\n ],\n secondary: [\n \"tw-bg-transparent\",\n \"tw-border-text-muted\",\n \"!tw-text-muted\",\n \"hover:tw-bg-secondary-500\",\n \"hover:tw-border-secondary-500\",\n \"hover:!tw-text-contrast\",\n \"focus:tw-bg-secondary-500\",\n \"focus:tw-border-secondary-500\",\n \"focus:!tw-text-contrast\",\n ],\n danger: [\n \"tw-bg-transparent\",\n \"tw-border-danger-500\",\n \"!tw-text-danger\",\n \"hover:tw-bg-danger-500\",\n \"hover:tw-border-danger-500\",\n \"hover:!tw-text-contrast\",\n \"focus:tw-bg-danger-500\",\n \"focus:tw-border-danger-500\",\n \"focus:!tw-text-contrast\",\n ],\n};\n\n@Directive({\n selector: \"button[bitButton], a[bitButton]\",\n})\nexport class ButtonDirective {\n @HostBinding(\"class\") get classList() {\n return [\n \"tw-font-semibold\",\n \"tw-py-1.5\",\n \"tw-px-3\",\n \"tw-rounded\",\n \"tw-transition\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-text-center\",\n \"hover:tw-no-underline\",\n \"disabled:tw-bg-secondary-100\",\n \"disabled:tw-border-secondary-100\",\n \"disabled:!tw-text-main\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n \"focus:tw-z-10\",\n ]\n .concat(this.block ? [\"tw-w-full\", \"tw-block\"] : [\"tw-inline-block\"])\n .concat(buttonStyles[this.buttonType] ?? []);\n }\n\n @Input()\n buttonType: ButtonTypes = \"secondary\";\n\n @Input()\n block = false;\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { ButtonDirective } from \"./button.directive\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [ButtonDirective],\n declarations: [ButtonDirective],\n})\nexport class ButtonModule {}\n","export * from \"./button.directive\";\nexport * from \"./button.module\";\n","import { Component, Input, OnInit } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\ntype CalloutTypes = \"success\" | \"info\" | \"warning\" | \"danger\";\n\nconst defaultIcon: Record = {\n success: \"bwi-check\",\n info: \"bwi-info-circle\",\n warning: \"bwi-exclamation-triangle\",\n danger: \"bwi-error\",\n};\n\nconst defaultI18n: Partial> = {\n warning: \"warning\",\n danger: \"error\",\n};\n\n@Component({\n selector: \"bit-callout\",\n templateUrl: \"callout.component.html\",\n})\nexport class CalloutComponent implements OnInit {\n @Input() type: CalloutTypes = \"info\";\n @Input() icon: string;\n @Input() title: string;\n @Input() useAlertRole = false;\n\n constructor(private i18nService: I18nService) {}\n\n ngOnInit() {\n this.icon ??= defaultIcon[this.type];\n if (this.title == null && defaultI18n[this.type] != null) {\n this.title = this.i18nService.t(defaultI18n[this.type]);\n }\n }\n\n get calloutClass() {\n switch (this.type) {\n case \"danger\":\n return \"tw-border-l-danger-500\";\n case \"info\":\n return \"tw-border-l-info-500\";\n case \"success\":\n return \"tw-border-l-success-500\";\n case \"warning\":\n return \"tw-border-l-warning-500\";\n }\n }\n\n get headerClass() {\n switch (this.type) {\n case \"danger\":\n return \"!tw-text-danger\";\n case \"info\":\n return \"!tw-text-info\";\n case \"success\":\n return \"!tw-text-success\";\n case \"warning\":\n return \"!tw-text-warning\";\n }\n }\n}\n","\n \n \n {{ title }}\n \n \n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CalloutComponent } from \"./callout.component\";\n\n@NgModule({\n imports: [CommonModule],\n exports: [CalloutComponent],\n declarations: [CalloutComponent],\n})\nexport class CalloutModule {}\n","export * from \"./callout.module\";\nexport * from \"./callout.component\";\n","import { Component, Input } from \"@angular/core\";\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\n\n@Component({\n selector: \"bit-error-summary\",\n template: ` 0\">\n {{ \"fieldsNeedAttention\" | i18n: errorString }}\n `,\n host: {\n class: \"tw-block tw-text-danger tw-mt-2\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorSummary {\n @Input()\n formGroup: FormGroup;\n\n get errorCount(): number {\n return this.getErrorCount(this.formGroup);\n }\n\n get errorString() {\n return this.errorCount.toString();\n }\n\n private getErrorCount(form: FormGroup): number {\n return Object.values(form.controls).reduce((acc: number, control: AbstractControl) => {\n if (control instanceof FormGroup) {\n return acc + this.getErrorCount(control);\n }\n\n if (control.errors == null) {\n return acc;\n }\n\n return acc + Object.keys(control.errors).length;\n }, 0);\n }\n}\n","import { Component, HostBinding, Input } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Component({\n selector: \"bit-error\",\n template: ` {{ displayError }}`,\n host: {\n class: \"tw-block tw-mt-1 tw-text-danger\",\n \"aria-live\": \"assertive\",\n },\n})\nexport class BitErrorComponent {\n @HostBinding() id = `bit-error-${nextId++}`;\n\n @Input() error: [string, any];\n\n constructor(private i18nService: I18nService) {}\n\n get displayError() {\n switch (this.error[0]) {\n case \"required\":\n return this.i18nService.t(\"inputRequired\");\n case \"email\":\n return this.i18nService.t(\"inputEmail\");\n default:\n // Attempt to show a custom error message.\n if (this.error[1]?.message) {\n return this.error[1]?.message;\n }\n\n return this.error;\n }\n }\n}\n","import {\n AfterContentChecked,\n Component,\n ContentChild,\n ContentChildren,\n QueryList,\n ViewChild,\n} from \"@angular/core\";\n\nimport { BitInputDirective } from \"../input/input.directive\";\n\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitHintComponent } from \"./hint.component\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n@Component({\n selector: \"bit-form-field\",\n templateUrl: \"./form-field.component.html\",\n host: {\n class: \"tw-mb-6 tw-block\",\n },\n})\nexport class BitFormFieldComponent implements AfterContentChecked {\n @ContentChild(BitInputDirective) input: BitInputDirective;\n @ContentChild(BitHintComponent) hint: BitHintComponent;\n\n @ViewChild(BitErrorComponent) error: BitErrorComponent;\n\n @ContentChildren(BitPrefixDirective) prefixChildren: QueryList;\n @ContentChildren(BitSuffixDirective) suffixChildren: QueryList;\n\n ngAfterContentChecked(): void {\n this.input.hasPrefix = this.prefixChildren.length > 0;\n this.input.hasSuffix = this.suffixChildren.length > 0;\n\n this.prefixChildren.forEach((prefix) => {\n prefix.first = prefix == this.prefixChildren.first;\n });\n\n this.suffixChildren.forEach((suffix) => {\n suffix.last = suffix == this.suffixChildren.last;\n });\n\n if (this.error) {\n this.input.ariaDescribedBy = this.error.id;\n } else if (this.hint) {\n this.input.ariaDescribedBy = this.hint.id;\n } else {\n this.input.ariaDescribedBy = undefined;\n }\n }\n}\n","\n
\n
\n \n
\n \n
\n \n
\n
\n\n \n \n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule, Pipe, PipeTransform } from \"@angular/core\";\n\nimport { I18nService } from \"jslib-common/abstractions/i18n.service\";\n\nimport { BitInputDirective } from \"../input/input.directive\";\nimport { InputModule } from \"../input/input.module\";\n\nimport { BitErrorSummary } from \"./error-summary.component\";\nimport { BitErrorComponent } from \"./error.component\";\nimport { BitFormFieldComponent } from \"./form-field.component\";\nimport { BitHintComponent } from \"./hint.component\";\nimport { BitLabel } from \"./label.directive\";\nimport { BitPrefixDirective } from \"./prefix.directive\";\nimport { BitSuffixDirective } from \"./suffix.directive\";\n\n/**\n * Temporarily duplicate this pipe\n */\n@Pipe({\n name: \"i18n\",\n})\nexport class I18nPipe implements PipeTransform {\n constructor(private i18nService: I18nService) {}\n\n transform(id: string, p1?: string, p2?: string, p3?: string): string {\n return this.i18nService.t(id, p1, p2, p3);\n }\n}\n\n@NgModule({\n imports: [CommonModule, InputModule],\n exports: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitHintComponent,\n BitInputDirective,\n BitLabel,\n BitPrefixDirective,\n BitSuffixDirective,\n ],\n declarations: [\n BitErrorComponent,\n BitErrorSummary,\n BitFormFieldComponent,\n BitHintComponent,\n BitLabel,\n BitPrefixDirective,\n BitSuffixDirective,\n I18nPipe,\n ],\n})\nexport class FormFieldModule {}\n","import { Directive, HostBinding } from \"@angular/core\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"bit-hint\",\n host: {\n class: \"tw-text-muted tw-inline-block tw-mt-1\",\n },\n})\nexport class BitHintComponent {\n @HostBinding() id = `bit-hint-${nextId++}`;\n}\n","export * from \"./form-field.module\";\nexport * from \"./form-field.component\";\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\nexport const PrefixClasses = [\n \"tw-block\",\n \"tw-px-3\",\n \"tw-py-1.5\",\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-border-secondary-500\",\n \"tw-text-muted\",\n \"tw-rounded\",\n];\n\n@Directive({\n selector: \"[bitPrefix]\",\n})\nexport class BitPrefixDirective {\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\n \"tw-border-r-0\",\n \"tw-rounded-r-none\",\n !this.first ? \"tw-rounded-l-none\" : \"\",\n ]).filter((c) => c != \"\");\n }\n\n @Input() first = false;\n}\n","import { Directive, HostBinding, Input } from \"@angular/core\";\n\nimport { PrefixClasses } from \"./prefix.directive\";\n\n@Directive({\n selector: \"[bitSuffix]\",\n})\nexport class BitSuffixDirective {\n @HostBinding(\"class\") @Input() get classList() {\n return PrefixClasses.concat([\n \"tw-rounded-l-none\",\n \"tw-border-l-0\",\n !this.last ? \"tw-rounded-r-none\" : \"\",\n ]).filter((c) => c != \"\");\n }\n\n @Input() last = false;\n}\n","export * from \"./badge\";\nexport * from \"./banner\";\nexport * from \"./button\";\nexport * from \"./callout\";\nexport * from \"./form-field\";\nexport * from \"./menu\";\n","import { Directive, HostBinding, Input, Optional, Self } from \"@angular/core\";\nimport { NgControl, Validators } from \"@angular/forms\";\n\n// Increments for each instance of this component\nlet nextId = 0;\n\n@Directive({\n selector: \"input[bitInput], select[bitInput], textarea[bitInput]\",\n})\nexport class BitInputDirective {\n @HostBinding(\"class\") @Input() get classList() {\n return [\n \"tw-block\",\n \"tw-w-full\",\n \"tw-px-3\",\n \"tw-py-1.5\",\n \"tw-bg-background-alt\",\n \"tw-border\",\n \"tw-border-solid\",\n \"tw-rounded\",\n \"tw-text-main\",\n \"tw-placeholder-text-muted\",\n \"focus:tw-outline-none\",\n \"focus:tw-border-primary-700\",\n \"focus:tw-ring-1\",\n \"focus:tw-ring-primary-700\",\n \"focus:tw-z-10\",\n \"disabled:tw-bg-secondary-100\",\n this.hasPrefix ? \"tw-rounded-l-none\" : \"\",\n this.hasSuffix ? \"tw-rounded-r-none\" : \"\",\n this.hasError ? \"tw-border-danger-500\" : \"tw-border-secondary-500\",\n ].filter((s) => s != \"\");\n }\n\n @HostBinding() id = `bit-input-${nextId++}`;\n\n @HostBinding(\"attr.aria-describedby\") ariaDescribedBy: string;\n\n @HostBinding(\"attr.aria-invalid\") get ariaInvalid() {\n return this.hasError ? true : undefined;\n }\n\n @HostBinding()\n @Input()\n get required() {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n set required(value: any) {\n this._required = value != null && value !== false;\n }\n private _required: boolean;\n\n @Input() hasPrefix = false;\n @Input() hasSuffix = false;\n\n get hasError() {\n return this.ngControl?.status === \"INVALID\" && this.ngControl?.touched;\n }\n\n get error(): [string, any] {\n const key = Object.keys(this.ngControl.errors)[0];\n return [key, this.ngControl.errors[key]];\n }\n constructor(@Optional() @Self() private ngControl: NgControl) {}\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { BitInputDirective } from \"./input.directive\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BitInputDirective],\n exports: [BitInputDirective],\n})\nexport class InputModule {}\n","export * from \"./menu.module\";\nexport * from \"./menu.component\";\nexport * from \"./menu-trigger-for.directive\";\nexport * from \"./menu-item.directive\";\nexport * from \"./menu-divider.component\";\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"bit-menu-divider\",\n templateUrl: \"./menu-divider.component.html\",\n})\nexport class MenuDividerComponent {}\n","\n","import { FocusableOption } from \"@angular/cdk/a11y\";\nimport { Directive, ElementRef, HostBinding } from \"@angular/core\";\n\n@Directive({\n selector: \"[bitMenuItem]\",\n})\nexport class MenuItemDirective implements FocusableOption {\n @HostBinding(\"class\") classList = [\n \"tw-block\",\n \"tw-py-1\",\n \"tw-px-4\",\n \"!tw-text-main\",\n \"!tw-no-underline\",\n \"tw-cursor-pointer\",\n \"tw-border-none\",\n \"tw-bg-background\",\n \"tw-text-left\",\n \"hover:tw-bg-secondary-100\",\n \"focus:tw-bg-secondary-100\",\n \"focus:tw-z-50\",\n \"focus:tw-outline-none\",\n \"focus:tw-ring\",\n \"focus:tw-ring-offset-2\",\n \"focus:tw-ring-primary-700\",\n \"active:!tw-ring-0\",\n \"active:!tw-ring-offset-0\",\n ];\n @HostBinding(\"attr.role\") role = \"menuitem\";\n @HostBinding(\"tabIndex\") tabIndex = \"-1\";\n\n constructor(private elementRef: ElementRef) {}\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n}\n","import { Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n ViewContainerRef,\n} from \"@angular/core\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { filter, mergeWith } from \"rxjs/operators\";\n\nimport { MenuComponent } from \"./menu.component\";\n\n@Directive({\n selector: \"[bitMenuTriggerFor]\",\n})\nexport class MenuTriggerForDirective implements OnDestroy {\n @HostBinding(\"attr.aria-expanded\") isOpen = false;\n @HostBinding(\"attr.aria-haspopup\") hasPopup = \"menu\";\n @HostBinding(\"attr.role\") role = \"button\";\n\n @Input(\"bitMenuTriggerFor\") menu: MenuComponent;\n\n private overlayRef: OverlayRef;\n private defaultMenuConfig: OverlayConfig = {\n panelClass: \"bit-menu-panel\",\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions([\n {\n originX: \"start\",\n originY: \"bottom\",\n overlayX: \"start\",\n overlayY: \"top\",\n },\n {\n originX: \"end\",\n originY: \"bottom\",\n overlayX: \"end\",\n overlayY: \"top\",\n },\n ])\n .withLockedPosition(true)\n .withFlexibleDimensions(false)\n .withPush(false),\n };\n private closedEventsSub: Subscription;\n private keyDownEventsSub: Subscription;\n\n constructor(\n private elementRef: ElementRef,\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay\n ) {}\n\n @HostListener(\"click\") toggleMenu() {\n this.isOpen ? this.destroyMenu() : this.openMenu();\n }\n\n ngOnDestroy() {\n this.disposeAll();\n }\n\n private openMenu() {\n if (this.menu == null) {\n throw new Error(\"Cannot find bit-menu element\");\n }\n\n this.isOpen = true;\n this.overlayRef = this.overlay.create(this.defaultMenuConfig);\n\n const templatePortal = new TemplatePortal(this.menu.templateRef, this.viewContainerRef);\n this.overlayRef.attach(templatePortal);\n\n this.closedEventsSub = this.getClosedEvents().subscribe((event: KeyboardEvent | undefined) => {\n if (event?.key === \"Tab\") {\n // Required to ensure tab order resumes correctly\n this.elementRef.nativeElement.focus();\n }\n this.destroyMenu();\n });\n this.keyDownEventsSub = this.overlayRef\n .keydownEvents()\n .subscribe((event: KeyboardEvent) => this.menu.keyManager.onKeydown(event));\n }\n\n private destroyMenu() {\n if (this.overlayRef == null || !this.isOpen) {\n return;\n }\n\n this.isOpen = false;\n this.disposeAll();\n }\n\n private getClosedEvents(): Observable {\n const detachments = this.overlayRef.detachments();\n const escKey = this.overlayRef\n .keydownEvents()\n .pipe(filter((event: KeyboardEvent) => event.key === \"Escape\" || event.key === \"Tab\"));\n const backdrop = this.overlayRef.backdropClick();\n const menuClosed = this.menu.closed;\n\n return detachments.pipe(mergeWith(escKey, backdrop, menuClosed));\n }\n\n private disposeAll() {\n this.closedEventsSub?.unsubscribe();\n this.overlayRef?.dispose();\n this.keyDownEventsSub?.unsubscribe();\n }\n}\n","import { FocusKeyManager } from \"@angular/cdk/a11y\";\nimport {\n Component,\n Output,\n TemplateRef,\n ViewChild,\n EventEmitter,\n ContentChildren,\n QueryList,\n AfterContentInit,\n} from \"@angular/core\";\n\nimport { MenuItemDirective } from \"./menu-item.directive\";\n\n@Component({\n selector: \"bit-menu\",\n templateUrl: \"./menu.component.html\",\n exportAs: \"menuComponent\",\n})\nexport class MenuComponent implements AfterContentInit {\n @ViewChild(TemplateRef) templateRef: TemplateRef;\n @Output() closed = new EventEmitter();\n @ContentChildren(MenuItemDirective, { descendants: true })\n menuItems: QueryList;\n keyManager: FocusKeyManager;\n\n ngAfterContentInit() {\n this.keyManager = new FocusKeyManager(this.menuItems).withWrap();\n }\n}\n","\n \n \n \n\n","import { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { MenuDividerComponent } from \"./menu-divider.component\";\nimport { MenuItemDirective } from \"./menu-item.directive\";\nimport { MenuTriggerForDirective } from \"./menu-trigger-for.directive\";\nimport { MenuComponent } from \"./menu.component\";\n\n@NgModule({\n imports: [CommonModule, OverlayModule],\n declarations: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n exports: [MenuComponent, MenuTriggerForDirective, MenuItemDirective, MenuDividerComponent],\n})\nexport class MenuModule {}\n","// extracted by mini-css-extract-plugin\nexport default {\"darkInputColor\":\"#fff\",\"darkInputPlaceholderColor\":\"#bac0ce\",\"lightInputColor\":\"#465057\",\"lightInputPlaceholderColor\":\"#b6b8b8\"};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t148: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_bitwarden_web_vault\"] = self[\"webpackChunk_bitwarden_web_vault\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [734], () => (__webpack_require__(12366)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","StateService","AcceptEmergencyComponent","BaseAcceptComponent","constructor","router","platformUtilsService","i18nService","route","apiService","stateService","super","requiredParameters","failedShortMessage","failedMessage","authedHandler","qParams","request","EmergencyAccessAcceptRequest","token","this","actionPromise","postEmergencyAccessAccept","id","platformUtilService","showToast","t","timeout","navigate","unauthedHandler","name","replace","AcceptOrganizationComponent","cryptoService","policyService","logService","prepareAcceptRequest","then","postOrganizationUserAccept","organizationId","organizationUserId","setOrganizationInvitation","orgName","organizationName","OrganizationUserAcceptRequest","performResetPasswordAutoEnroll","response","getOrganizationKeys","Error","publicKey","Utils","fromB64ToArray","encKey","getEncKey","encryptedKey","rsaEncrypt","key","buffer","resetPasswordKey","encryptedString","policyList","policies","getPoliciesByToken","email","mapPoliciesFromToken","e","error","result","getResetPasswordPolicyOptions","autoEnrollEnabled","HintComponent","submit","LockComponent","messagingService","vaultTimeoutService","environmentService","routerService","keyConnectorService","ngZone","ngOnInit","onSuccessfulSubmit","previousUrl","getPreviousUrl","indexOf","successRoute","navigateByUrl","togglePassword","logOut","LoginComponent","authService","passwordGenerationService","cryptoFunctionService","showResetPasswordAutoEnrollWarning","onSuccessfulLogin","send","onSuccessfulLoginNavigate","goAfterLogIn","queryParams","pipe","first","subscribe","premium","setPreviousUrl","org","createUrlTree","plan","toString","sponsorshipToken","rememberEmail","getRememberEmail","invite","getOrganizationInvitation","resetPasswordPolicy","enforcedPasswordPolicyOptions","getMasterPasswordPolicyOptions","strengthResult","passwordStrength","masterPassword","getPasswordStrengthUserInput","masterPasswordScore","score","evaluateMasterPassword","policiesData","data","map","p","PolicyData","setRememberEmail","setRememberedEmail","userInput","atPosition","concat","substr","trim","toLowerCase","split","RecoverDeleteComponent","DeleteRecoverRequest","formPromise","postAccountRecoverDelete","RecoverTwoFactorComponent","TwoFactorRecoveryRequest","recoveryCode","makePreloginKey","masterPasswordHash","hashPassword","postTwoFactorRecover","RegisterComponent","showCreateOrgMessage","layout","referenceData","ReferenceEventRequest","flow","reference","document","cookie","pop","shift","Policy","enforcedPolicyOptions","updatePasswordStrength","RemovePasswordComponent","SetPasswordComponent","syncService","SsoComponent","redirectUri","window","location","origin","clientId","identifier","storedIdentifier","getSsoOrgIdentifier","setSsoOrganizationIdentifier","TwoFactorOptionsComponent","twoFactorService","recover","TwoFactorComponent","modalService","appIdService","anotherMethod","modal","openViewRef","twoFactorOptionsModal","comp","onProviderSelected","provider","close","selectedProviderType","init","onRecoverSelected","ViewContainerRef","UpdatePasswordComponent","userVerificationService","cancel","UpdateTempPasswordComponent","VerifyEmailTokenComponent","userId","postAccountVerifyEmailToken","VerifyEmailRequest","getIsAuthenticated","refreshIdentityToken","VerifyRecoverDeleteComponent","VerifyDeleteRecoverRequest","postAccountRecoverDeleteToken","BroadcasterSubscriptionId","AppComponent","broadcasterService","tokenService","folderService","settingsService","cipherService","toastrService","collectionService","sanitizer","searchService","notificationsService","eventService","policyListService","lastActivity","idleTimer","isIdle","documentElement","lang","locale","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","message","run","command","updateConnection","url","expired","lock","showDialog","launchUri","text","crypto","subtle","title","setFullWidth","events","event","NavigationEnd","modals","Array","from","querySelectorAll","jq","querySelector","undefined","addPolicies","TwoFactorAuthenticationPolicy","MasterPasswordPolicy","PasswordGeneratorPolicy","SingleOrgPolicy","RequireSsoPolicy","PersonalOwnershipPolicy","DisableSendPolicy","SendOptionsPolicy","ResetPasswordPolicy","ngOnDestroy","unsubscribe","uploadEvents","getUserId","Promise","all","clearEvents","setLastSync","Date","clearKeys","clear","clearIndex","clean","now","getTime","setLastActive","idleStateChanged","clearTimeout","setTimeout","msg","options","length","forEach","sanitize","SecurityContext","HTML","enableHtml","trustedHtml","timeOut","show","type","disconnectFromInactivity","reconnectFromActivity","getEnableFullWidth","body","classList","add","remove","DOCUMENT","AppModule","OssModule","BrowserAnimationsModule","FormsModule","ServicesModule","InfiniteScrollModule","DragDropModule","OssRoutingModule","WildcardRoutingModule","loading","authed","some","errorMessage","BaseEventsComponent","exportService","loaded","dirtyDates","defaultDates","getDefaultDateFilters","start","end","exportEvents","appApiPromiseUnfulfilled","dates","parseDates","exportPromise","export","loadEvents","clearExisting","promise","loadAndParseEvents","continuationToken","refreshPromise","morePromise","startDate","endDate","requestEvents","r","actingUserId","eventInfo","getEventInfo","user","getUserName","userName","EventView","humanReadableMessage","appIcon","appName","installationId","userEmail","date","ip","ipAddress","formatDateFilters","getEventExport","fileName","getFileName","exportFileName","saveFile","BasePeopleComponent","validationService","searchPipe","userNamePipe","statusMap","Map","users","pagedUsers","allUsers","didScroll","pageSize","pagedUsersCount","has","userStatusType","Invited","get","Accepted","Confirmed","confirmedCount","acceptedCount","load","getUsers","status","iterateEnum","set","sort","getSortFunction","u","push","filter","selectAll","resetPaging","loadMore","pagedLength","pagedSize","slice","checkUser","select","checked","filteredUsers","transform","searchText","selectCount","i","edit","deleteWarningMessage","deleteUser","removeUser","showError","reinvite","reinviteUser","confirm","confirmUser","self","mapIndex","splice","updateUser","publicKeyResponse","getUserPublicKey","autoConfirm","getAutoConfirmFingerPrints","UserConfirmComponent","confirmModalRef","onConfirmedUser","fingerprint","getFingerprint","info","join","isSearching","isSearchable","isPaging","searching","getCheckedUsers","index","NestedCheckboxComponent","onSavedUser","EventEmitter","onDeletedUser","parentChecked","checkboxes","c","every","value","pascalize","s","camelToPascalCase","OrganizationSwitcherComponent","organizationService","activeOrganization","organizations","orgs","getAll","NavigationPermissionsService","canAccessAdmin","PasswordRepromptComponent","PasswordStrengthComponent","showText","scoreWidth","color","ngOnChanges","PremiumBadgeComponent","premiumRequired","HomeGuard","canActivate","authStatus","getAuthStatus","AuthenticationStatus","LoggedOut","Locked","FooterComponent","year","getFullYear","version","getApplicationVersion","FrontendLayoutComponent","NavbarComponent","providerService","selfHosted","providers","isSelfHost","getName","getEmail","getLastSync","fullSync","buildOrganizations","UserLayoutComponent","enableProdMode","platformBrowser","bootstrapModule","preserveWhitespaces","LooseComponentsModule","SharedModule","VaultFilterModule","OrganizationBadgeModule","PipesModule","EntityUsersComponent","search","onEditedUsers","organizationUserType","OrganizationUserType","organizationUserStatusType","OrganizationUserStatusType","showSelected","selectedCount","loadUsers","searchedUsers","getOrganizationUsers","entity","getGroupUsers","entityId","getCollectionUsers","accessAll","readOnly","hidePasswords","check","selectedChanged","filterSelected","selections","putGroupUsers","SelectionReadOnlyRequest","putCollectionUsers","emit","SearchPipe","OrganizationManageModule","ScrollingModule","EnrollMasterPasswordReset","modalRef","config","organization","toastStringRef","buildRequest","verification","OrganizationUserResetPasswordEnrollmentRequest","keyString","orgKeys","putOrganizationUserResetPasswordEnrollment","OrganizationUserModule","GetOrgNameFromIdPipe","find","o","registerLocaleData","DatePipe","CommonModule","JslibModule","ReactiveFormsModule","RouterModule","BadgeModule","ButtonModule","CalloutModule","ToastrModule","MenuModule","CollectionFilterComponent","FolderFilterComponent","LinkSsoComponent","returnUri","ngAfterContentInit","OrganizationFilterComponent","displayText","OrganizationOptionsComponent","PolicyType","ResetPassword","allowEnrollmentChanges","usePolicies","useResetPassword","hasPublicAndPrivateKeys","policy","enabled","resetPasswordEnrolled","showEnrolledStatus","unlinkSso","deleteSsoUser","leave","postLeaveOrganization","toggleResetPasswordEnrollment","open","allowMultipleModals","StatusFilterComponent","TypeFilterComponent","toggleCollapse","OrganizationVaultFilterComponent","VaultFilterComponent","hideOrganizations","hideFavorites","hideFolders","initCollections","canEditAnyCollection","vaultFilterService","buildAdminCollections","buildCollections","reloadCollectionsAndFolders","collections","onSearchTextChanged","collapsedFilterNodes$","nodes","collapsedFilterNodes","searchTextChanged","VaultFilterService","_collapsedFilterNodes","BehaviorSubject","asObservable","buildCollapsedFilterNodes","next","storeCollapsedFilterNodes","ensureVaultFiltersAreExpanded","delete","collectionResponse","getCollections","collectionDomains","Collection","CollectionData","decryptMany","nestedCollections","getAllNested","DynamicTreeNode","fullList","nestedList","routes","path","component","IndividualVaultComponent","titleId","IndividualVaultRoutingModule","forChild","changeDetectorRef","vaultService","passwordRepromptService","favorites","folderId","collectionId","myVaultOnly","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","deleted","trashCleanupWarning","activeFilter","VaultFilter","getEmailVerified","navigator","userAgent","params","canAccessPremium","getCanAccessPremium","filterComponent","reloadOrganizations","hasEncKey","cipherId","getCipherIdFromParams","cipherView","CipherView","action","cloneCipher","editCipher","ciphersComponent","reload","editCipherId","itemId","queryParamsHandling","successfully","detectChanges","applyVaultFilter","vaultFilter","showAddNew","buildFilter","searchPlaceholder","calculateSearchBarLocalizationString","go","applyOrganizationFilter","orgId","resetOrganization","selectedOrganizationId","filterSearchText","cipher","cipherPassesFilter","favorite","isDeleted","cipherType","selectedFolder","selectedFolderId","selectedCollectionId","collectionIds","editCipherAttachments","maxStorageGb","madeAttachmentChanges","AttachmentsComponent","attachmentsModalRef","onUploadedAttachment","onDeletedAttachment","onReuploadedAttachment","onClosed","refresh","shareCipher","ShareComponent","shareModalRef","onSharedCipher","editCipherCollections","CollectionsComponent","collectionsModalRef","onSavedCollections","addFolder","FolderAddEditComponent","folderAddEditModalRef","onSavedFolder","editFolder","onDeletedFolder","addCipher","collection","reprompt","showPasswordPrompt","childComponent","AddEditComponent","cipherAddEditModalRef","onSavedCipher","onDeletedCipher","onRestoredCipher","onClosedPromise","cloneMode","updateKey","UpdateKeyComponent","updateKeyModalRef","relativeTo","replaceUrl","CiphersComponent","IndividualVaultModule","VaultModule","OrganizationNameBadgeComponent","onOrganizationClicked","stringToColor","profileName","toUpperCase","textColor","pickTextColorBasedOnBgColor","str","hash","charCodeAt","charAt","substring","parseInt","emitOnOrganizationClicked","OrganizationVaultComponent","OrganizationVaultRoutingModule","firstLoaded","parent","vaultFilterComponent","canViewAllCollections","viewEvents","ciphers","EntityEventsComponent","eventsModalRef","showUser","clearFilters","OrganizationVaultModule","provide","VaultService","useClass","PermissionsGuard","state","isOwner","permissions","hasAnyPermission","root","queryParamMap","OrganizationLayoutComponent","canAccessManage","canAccessTools","canAccessSettings","canAccessImportExport","canManageUsers","canViewAssignedCollections","canManageGroups","canManagePolicies","canManageSso","canAccessEventLogs","BulkConfirmComponent","publicKeys","fingerprints","statuses","done","excludedUsers","isAccepted","getPublicKeys","entry","getCryptoKey","userIdsWithKeys","postConfirmRequest","OrganizationUserBulkRequest","postOrganizationUsersPublicKey","getOrgKey","OrganizationUserBulkConfirmRequest","postOrganizationUserBulkConfirm","BulkRemoveComponent","deleteUsers","deleteManyOrganizationUsers","BulkStatusComponent","CollectionAddEditComponent","onSavedCollection","onDeletedCollection","editMode","accessGroups","groups","useGroups","groupsResponse","getGroups","orgKey","getCollectionDetails","decryptToUtf8","EncString","externalId","group","g","CollectionRequest","encrypt","putCollection","postCollection","deletePromise","deleteCollection","canCreate","pagedCollectionsCount","canCreateNewCollections","decryptCollections","d","getUserCollections","assignedCollections","pagedCollections","canEdit","canDelete","addEditModalRef","canSave","removeCollection","usersModalRef","entityName","canEditAssignedCollections","canDeleteAnyCollection","canDeleteAssignedCollections","orgUsersUserIdMap","orgUsersIdMap","providerId","getEventsProviderUser","getEventsOrganizationUser","getEventsCipher","EventsComponent","useEvents","getProviderUsers","providerName","warning","getEventsOrganization","GroupAddEditComponent","onSavedGroup","onDeletedGroup","access","groupId","loadCollections","getGroupDetails","GroupRequest","putGroup","postGroup","deleteGroup","GroupsComponent","pagedGroupsCount","pagedGroups","removeGroup","ManageComponent","accessPolicies","accessEvents","accessSso","useSso","PeopleComponent","userType","canResetPassword","orgUseResetPassword","orgHasKeys","orgResetPasswordPolicyEnabled","callingUserType","canManageUsersPassword","orgShareKey","makeKeyPair","OrganizationKeysRequest","postOrganizationKeys","privateKey","getPolicyForOrganization","deleteOrganizationUser","postOrganizationUserReinvite","OrganizationUserConfirmRequest","postOrganizationUserConfirm","allowResetPassword","orgUser","callingUserHasPermission","Owner","Admin","Custom","UserAddEditComponent","usesKeyConnector","UserGroupsComponent","groupsModalRef","bulkRemove","bulkRemoveModalRef","bulkReinvite","postManyOrganizationUserReinvite","showBulkStatus","bulkConfirm","bulkConfirmModalRef","resetPassword","ResetPasswordComponent","resetPasswordModalRef","onPasswordReset","successfullMessage","bulkStatusModalRef","onShown","keyedErrors","reduce","a","x","keyedFilteredUsers","hasOwnProperty","PoliciesComponent","policiesEnabledMap","getPolicies","policyId","policyIdFromEvents","orgPolicy","orgPolicies","op","PolicyEditComponent","editModalRef","onSavedPolicy","componentFactoryResolver","cdr","policyType","ngAfterViewInit","factory","resolveComponentFactory","policyComponent","policyFormRef","createComponent","instance","policyResponse","getPolicy","statusCode","PolicyResponse","Enabled","putPolicy","newPassword","showPassword","generatePassword","getOptions","getElementById","focus","copy","copyToClipboard","getOrganizationUserResetPasswordDetails","kdfType","kdf","kdfIterations","encryptedPrivateKey","orgSymKey","decPrivateKey","decryptToBytes","decValue","rsaDecrypt","userEncKey","SymmetricCryptoKey","newKey","makeKey","newPasswordHash","newEncKey","remakeEncKey","OrganizationUserResetPasswordRequest","newMasterPasswordHash","putOrganizationUserResetPassword","newPasswordStrengthTimeout","User","PermissionsApi","showCustom","manageAllCollectionsCheckboxes","createNewCollections","v","editAnyCollection","deleteAnyCollection","manageAssignedCollectionsCheckboxes","editAssignedCollections","deleteAssignedCollections","getOrganizationUser","setRequestPermissions","clearPermissions","Object","assign","handleDependentPermissions","manageResetPassword","manageUsers","OrganizationUserUpdateRequest","putOrganizationUser","OrganizationUserInviteRequest","emails","postOrganizationUserInvite","dontAskAgain","setAutoConfirmFingerprints","userGroups","getOrganizationUserGroups","ug","OrganizationUserUpdateGroupsRequest","groupIds","putOrganizationUserGroups","AuthGuard","getPermissions","children","pathMatch","redirectTo","loadChildren","ToolsComponent","ImportComponent","Permissions","AccessImportExport","ExportComponent","ExposedPasswordsReportComponent","AccessReports","InactiveTwoFactorReportComponent","ReusedPasswordsReportComponent","UnsecuredWebsitesReportComponent","WeakPasswordsReportComponent","CreateNewCollections","EditAnyCollection","DeleteAnyCollection","EditAssignedCollections","DeleteAssignedCollections","AccessEventLogs","ManageGroups","ManageUsers","ManageUsersPassword","ManagePolicies","SettingsComponent","AccountComponent","TwoFactorSetupComponent","OrganizationBillingComponent","ManageBilling","OrganizationSubscriptionComponent","OrganizationsRoutingModule","display","BasePolicyComponent","FormControl","setValue","loadData","patchValue","buildRequestData","PolicyRequest","resolve","BasePolicy","description","DisableSend","DisableSendPolicyComponent","MasterPassword","MasterPasswordPolicyComponent","formBuilder","minComplexity","minLength","requireUpper","requireLower","requireNumbers","requireSpecial","showKeyConnectorInfo","passwordScores","keyConnectorEnabled","PasswordGenerator","PasswordGeneratorPolicyComponent","defaultType","useUpper","useLower","useNumbers","useSpecial","minNumbers","minSpecial","minNumberWords","capitalize","includeNumber","defaultTypes","PersonalOwnership","PersonalOwnershipPolicyComponent","RequireSso","RequireSsoPolicyComponent","singleOrgEnabled","SingleOrg","ResetPasswordPolicyComponent","SendOptions","SendOptionsPolicyComponent","disableHideEmail","SingleOrgPolicyComponent","MaximumVaultTimeout","TwoFactorAuthentication","TwoFactorAuthenticationPolicyComponent","manage","ManageSso","tools","settings","ManageOrganization","values","previous","current","canManageBilling","canUseApi","getOrganization","useApi","OrganizationUpdateRequest","businessName","billingEmail","keys","putOrganization","submitTaxInfo","taxFormPromise","taxInfo","deleteOrganization","DeleteOrganizationComponent","deleteModalRef","onSuccess","purgeVault","PurgeVaultComponent","purgeModalRef","viewApiKey","ApiKeyComponent","apiKeyModalRef","keyType","postKey","postOrganizationApiKey","bind","scope","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKey","rotateApiKeyModalRef","isRotation","postOrganizationRotateApiKey","TaxInfoComponent","AdjustSubscription","seatPrice","interval","onAdjusted","limitSubscription","maxAutoscaleSeats","newSeatCount","currentSeatCount","newMaxSeats","seatAdjustment","OrganizationSubscriptionUpdateRequest","postOrganizationUpdateSubscription","limitSubscriptionChanged","BillingSyncApiKeyComponent","lastSyncDate","clientSecret","showRotateScreen","OrganizationApiKeyRequest","OrganizationApiKeyType","BillingSync","apiKey","keyRevisionDate","revisionDate","hasBillingToken","syncStatus","getSponsorshipSyncStatus","cancelRotate","rotateToken","dayDiff","date1","date2","diffTime","Math","abs","round","ChangePlanComponent","onChanged","onCanceled","defaultUpgradePlan","PlanType","FamiliesAnnually","defaultUpgradeProduct","ProductType","Families","CountBasedLocalizationKey","singular","plural","getKey","count","OrganizationContentSummaryItem","localizationKeyOptions","OrganizationContentSummary","totalItemCount","itemCountByType","deleteOrganizationRequestType","organizationContentSummary","buildOrganizationContentSummary","organizationItems","getAllFromApiForOrganization","item","deletedDate","CipherType","getOrganizationItemCountByType","getOrganizationItemLocalizationKeysByType","items","DownloadLicenseComponent","onDownloaded","getOrganizationLicense","license","licenseString","JSON","stringify","ImageSubscriptionHiddenComponent","showAdjustPayment","showAddCredit","paymentMethodType","PaymentMethodType","transactionType","TransactionType","billing","getOrganizationBilling","verifyBank","VerifyBankRequest","amount1","verifyAmount1","amount2","verifyAmount2","verifyBankPromise","postOrganizationVerifyBank","addCredit","paymentSourceInApp","closeAddCredit","changePayment","closePayment","balance","paymentSource","AppleInApp","GoogleInApp","invoices","transactions","adjustSeatsAdd","showAdjustSeats","showAdjustSeatAutoscale","adjustStorageAdd","showAdjustStorage","showUpdateLicense","showBillingSyncKey","showDownloadLicense","showChangePlan","userOrg","sub","getOrganizationSubscription","apiKeyResponse","getOrganizationApiKeyInformation","hasBillingSyncToken","getCloudCommunicationsEnabled","existingBillingSyncConnection","getOrganizationConnection","OrganizationConnectionType","CloudBillingSync","BillingSyncConfigApi","reinstate","reinstatePromise","postOrganizationReinstate","cancelPromise","postOrganizationCancel","changePlan","closeChangePlan","changed","downloadLicense","manageBillingSync","ref","setupBillingSyncModalRef","closeDownloadLicense","updateLicense","closeUpdateLicense","updated","subscriptionAdjusted","adjustStorage","closeStorage","removeSponsorship","removeSponsorshipPromise","deleteRemoveSponsorship","manageBillingSyncSelfHosted","billingSyncKeyRef","BillingSyncKeyComponent","billingSyncKeyViewContainerRef","existingConnectionId","billingSyncKey","setParentConnection","connection","expiration","subscription","cancelled","cancelAtEndDate","upcomingInvoice","storageGb","toFixed","storagePercentage","isAnnual","additionalStoragePricePerGb","seats","hasAdditionalSeatsOption","sponsoredSubscriptionItem","planType","Free","EnterpriseAnnually","EnterpriseMonthly","EnterpriseAnnually2019","EnterpriseMonthly2019","FamiliesAnnually2019","isSponsoredSubscription","access2fa","showBilling","use2fa","TwoFactorProviderType","OrganizationDuo","duoComp","openModal","duoModalRef","TwoFactorDuoComponent","onUpdated","updateStatus","getTwoFactorProviders","getTwoFactorOrganizationProviders","filterProvider","AcceptFamilySponsorshipComponent","register","FamiliesForEnterpriseSetupComponent","badToken","showNewOrganization","_selectedFamilyOrganizationId","product","acceptingSponsorship","onOrganizationCreateSuccess","postPreValidateSponsorshipToken","existingFamilyOrganizations","planProductType","selectedFamilyOrganizationId","doSubmit","OrganizationSponsorshipRedeemRequest","planSponsorshipType","PlanSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","postRedeemSponsorship","OrganizationPlansComponent","checkExportDisabled","getExportData","getOrganizationExport","format","collectEvent","auditService","manageableCiphers","checkAccess","getAllCiphers","canManageCipher","importService","successNavigate","importBlockedByPolicy","accessReports","useTotp","upgradeOrganization","totpService","originalCipher","allowOwnershipAssignment","ownershipOptions","allowPersonal","loadCipher","getCipherAdmin","CipherData","Cipher","encryptCipher","saveCipher","CipherRequest","putCipherAdmin","CipherCreateRequest","postCipherAdmin","deleteCipher","deleteCipherAdmin","putDeleteCipherAdmin","viewOnly","reupload","attachment","showFixOldAttachments","reuploadCipherAttachment","saveCipherAttachment","file","saveAttachmentWithServer","cipherDomain","deleteCipherAttachment","attachmentId","deleteCipherAttachmentAdmin","onEventsClicked","allCiphers","getAllDecrypted","indexCiphers","applyFilter","f","hasOldAttachments","allowSelectNone","loadCipherCollections","saveCollections","CipherCollectionsRequest","putCipherCollectionsAdmin","doNotSaveUrl","UnauthGuard","LockGuard","AccessComponent","SendComponent","CreateOrganizationComponent","PreferencesComponent","SecurityRoutingModule","DomainRulesComponent","SubscriptionRoutingModule","EmergencyAccessComponent","EmergencyAccessViewComponent","SponsoredFamiliesComponent","GeneratorComponent","ReportsRoutingModule","m","forRoot","useHash","paramsInheritanceStrategy","BreachReportComponent","breachedAccounts","username","checkedUsername","CipherReportComponent","requiresPaid","hasLoaded","setCiphers","selectCipher","repromptCipher","accessPremium","CipherRepromptType","None","exposedPasswordMap","exposedPasswordCiphers","promises","Login","login","password","passwordLeaked","exposedCount","services","cipherDocs","load2fa","size","inactive2faCiphers","docs","totp","hasUris","uris","uri","domain","getDomain","fetch","Request","responseJson","json","service","serviceData","documentation","additionalDomain","ReportTypes","reports","exposedPasswords","icon","requiresPremium","reusedPasswords","weakPasswords","unsecuredWebsites","inactive2fa","dataBreach","ReportCardComponent","report","hasPremium","bypassSecurityTrustHtml","click","ReportListComponent","ReportsComponent","homepage","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","unsecuredCiphers","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","getCacheKey","hasUserName","cacheKey","scoreKey","b","sendType","SendType","downloading","passwordRequired","unavailable","hideEmail","maskedText","expirationDate","creatorIdentifier","sendId","download","decKey","downloadData","getSendFileDownloadData","accessRequest","isNullOrWhitespace","cache","buf","arrayBuffer","decBuf","decryptFromBytes","copyText","toggleText","keyArray","fromUrlB64ToArray","SendAccessRequest","passwordHash","pbkdf2","SEND_KDF_ITERATIONS","fromBufferToB64","sendResponse","postSendAccess","sendAccess","SendAccess","makeSendKey","decrypt","hidden","ErrorResponse","datePipe","sendService","copyLinkToClipboard","link","EffluxDatesComponent","ControlContainer","useExisting","NgForm","addSend","disableSend","editSend","sendAddEditModalRef","onSavedSend","onDeletedSend","selectType","EventService","getMonth","getDate","setDate","toDateTimeLocalString","filterStart","filterEnd","isNaN","toISOString","ev","EventOptions","appInfo","getAppInfo","deviceType","getEventMessage","humanReadableMsg","EventType","User_LoggedIn","User_ChangedPassword","User_Updated2fa","User_Disabled2fa","User_Recovered2fa","User_FailedLogIn","User_FailedLogIn2fa","User_ClientExportedVault","User_UpdatedTempPassword","User_MigratedKeyToKeyConnector","Cipher_Created","formatCipherId","getShortId","Cipher_Updated","Cipher_Deleted","Cipher_SoftDeleted","Cipher_Restored","Cipher_AttachmentCreated","Cipher_AttachmentDeleted","Cipher_Shared","Cipher_ClientViewed","Cipher_ClientToggledPasswordVisible","Cipher_ClientToggledHiddenFieldVisible","Cipher_ClientToggledCardCodeVisible","Cipher_ClientCopiedHiddenField","Cipher_ClientCopiedPassword","Cipher_ClientCopiedCardCode","Cipher_ClientAutofilled","Cipher_UpdatedCollections","Collection_Created","formatCollectionId","Collection_Updated","Collection_Deleted","Group_Created","formatGroupId","Group_Updated","Group_Deleted","OrganizationUser_Invited","formatOrgUserId","OrganizationUser_Confirmed","OrganizationUser_Updated","OrganizationUser_Removed","OrganizationUser_UpdatedGroups","OrganizationUser_UnlinkedSso","OrganizationUser_ResetPassword_Enroll","OrganizationUser_ResetPassword_Withdraw","OrganizationUser_AdminResetPassword","OrganizationUser_ResetSsoLink","OrganizationUser_FirstSsoLogin","Organization_Updated","Organization_PurgedVault","Organization_VaultAccessed","Organization_EnabledSso","Organization_DisabledSso","Organization_EnabledKeyConnector","Organization_DisabledKeyConnector","Organization_SponsorshipsSynced","Policy_Updated","formatPolicyId","p1","ProviderUser_Invited","formatProviderUserId","providerUserId","ProviderUser_Confirmed","ProviderUser_Updated","ProviderUser_Removed","ProviderOrganization_Created","formatProviderOrganizationId","providerOrganizationId","ProviderOrganization_Added","ProviderOrganization_Removed","ProviderOrganization_VaultAccessed","DeviceType","Android","iOS","UWP","ChromeExtension","FirefoxExtension","OperaExtension","EdgeExtension","VivaldiExtension","SafariExtension","WindowsDesktop","MacOsDesktop","LinuxDesktop","ChromeBrowser","FirefoxBrowser","OperaBrowser","SafariBrowser","VivaldiBrowser","EdgeBrowser","IEBrowser","UnknownBrowser","shortId","cipherInfo","makeAnchor","setAttribute","outerHTML","createElement","innerHTML","pad","getHours","getMinutes","num","norm","floor","InitService","win","eventLoggingService","getBaseUrl","baseUrl","href","urls","base","setUrls","getLocale","htmlEl","translationLocale","onDefaultSystemThemeChange","sysTheme","getTheme","ThemeType","System","Light","Dark","ContainerService","attachToWindow","WINDOW","ModalService","applicationRef","injector","el","modalOpen","setupHandlers","onCreated","on","shown","isMobileBrowser","closed","onClose","RouterService","activatedRoute","titleService","currentUrl","child","firstChild","snapshot","rawTitle","updateUrl","newTitle","setTitle","PolicyListService","APP_INITIALIZER","useFactory","initService","deps","multi","STATE_FACTORY","useValue","StateFactory","GlobalState","Account","STATE_SERVICE_USE_CACHE","I18nService","SYSTEM_LANGUAGE","LOCALES_DIRECTORY","StorageService","HtmlStorageService","SECURE_STORAGE","MemoryStorageService","PlatformUtilsService","WebPlatformUtilsService","MessagingService","BroadcasterMessagingService","ImportService","CipherService","FolderService","ApiService","CollectionService","CryptoService","StateMigrationService","LogService","PasswordRepromptService","JslibServicesModule","showChangeEmail","getUsesKeyConnector","deauthorizeSessions","DeauthorizeSessionsComponent","deauthModalRef","deleteAccount","DeleteAccountComponent","AddCreditComponent","showOptions","method","PayPal","onAdded","ppLoading","payPalConfig","ppButtonFormAction","ppButtonBusinessId","creditAmount","ppButtonCustomField","subject","returnUrl","ppButtonFormRef","nativeElement","BitPay","req","BitPayInvoiceRequest","credit","amount","creditAmountNumber","postBitPayInvoice","bitPayUrl","formatAmount","floatAmount","parseFloat","ElementRef","AdjustPaymentComponent","PaymentRequest","paymentComponent","createPaymentToken","paymentToken","postalCode","taxInfoComponent","country","postAccountPayment","taxId","line1","line2","city","postOrganizationPayment","changeCountry","hideBank","BankAccount","Card","changeMethod","PaymentComponent","AdjustStorageComponent","storageGbPrice","storageAdjustment","StorageRequest","storageGbAdjustment","paymentFailed","postAccountStorage","postOrganizationStorage","paymentIntentClientSecret","handleStripeCardPayment","OrganizationConnectionRequest","BillingSyncConfigRequest","createOrganizationConnection","updateOrganizationConnection","deleteConnection","deleteOrganizationConnection","ChangeEmailComponent","tokenSent","showTwoFactorEmailWarning","twoFactorProviders","Email","newEmail","EmailRequest","getKdfType","getKdfIterations","postEmail","reset","EmailTokenRequest","postEmailToken","ChangeKdfComponent","KdfType","PBKDF2_SHA256","kdfOptions","recommendedKdfIterations","DEFAULT_KDF_ITERATIONS","KdfRequest","postAccountKdf","ChangePasswordComponent","rotateEncKey","rotateEncKeyClicked","setupSubmitActions","currentMasterPassword","performSubmitActions","PasswordRequest","postPassword","makeEncKey","getPrivateKey","encPrivateKey","UpdateKeyRequest","folders","folder","FolderWithIdRequest","CipherWithIdRequest","sends","cryptoKey","SendWithIdRequest","postAccountKey","updateEmergencyAccesses","updateAllResetPasswordKeys","emergencyAccess","getEmergencyAccessTrusted","allowedStatuses","EmergencyAccessStatusType","RecoveryInitiated","RecoveryApproved","filteredAccesses","includes","details","granteeId","updateRequest","EmergencyAccessUpdateRequest","waitTimeDays","keyEncrypted","putEmergencyAccess","orgPlansComponent","TeamsAnnually","Teams","Enterprise","postSecurityStamp","custom","global","getSettingsDomains","equivalentDomains","globalEquivalentDomains","domains","excluded","toggleExcluded","globalDomain","customize","UpdateDomainsRequest","excludedGlobalEquivalentDomains","d2","putSettingsDomains","indexTrackBy","obj","EmergencyAccessAddEditComponent","onSaved","onDeleted","EmergencyAccessType","View","emergencyAccessType","emergencyAccessId","waitTimes","getEmergencyAccess","waitTime","EmergencyAccessInviteRequest","postEmergencyAccessInvite","EmergencyAccessAttachmentsComponent","canAccessAttachments","EmergencyAccessConfirmComponent","onConfirmed","EmergencyAccessTakeoverComponent","onDone","getEmergencyGrantorPolicies","strongPassword","takeoverResponse","postEmergencyAccessTakeover","oldKeyBuffer","oldEncKey","EmergencyAccessPasswordRequest","postEmergencyAccessPassword","_","EmergencyAddEditComponent","postEmergencyAccessView","viewAttachments","decCiphers","cipherResponse","cipherData","getLocaleSortingFunction","emergencyAccessStatusType","isOrganizationOwner","trustedContacts","grantedContacts","getEmergencyAccessGranted","contact","postEmergencyAccessReinvite","doConfirmation","deleteEmergencyAccess","EmergencyAccessGranteeDetailsResponse","removeGrantee","removeGrantor","requestAccess","postEmergencyAccessInitiate","approve","postEmergencyAccessApprove","reject","postEmergencyAccessReject","takeover","takeoverModalRef","debug","EmergencyAccessConfirmRequest","postEmergencyAccessConfirm","showFree","showCancel","ownedBusiness","premiumAccessAddon","additionalStorage","additionalSeats","productTypes","singleOrgPolicyBlock","discount","plans","getPlans","changedOwnedBusiness","selectedPlan","validPlans","canBeUsedByBusiness","legacyYear","disabled","familyPlan","basePrice","additionalStoragePriceMonthly","seatPriceMonthly","additionalStorageTotal","hasAdditionalStorageOption","seatTotal","subTotal","hasPremiumAccessOption","premiumAccessOptionPrice","trialPeriodDays","taxComponent","taxRate","subtotal","taxCharges","freeTrial","createOrganization","selectedPlanInterval","changedProduct","selectablePlans","baseSeats","changedCountry","userHasBlockingSingleOrgPolicy","shareKey","makeShareKey","collectionCt","createSelfHosted","createCloudHosted","updateOrganization","policyAppliesToUser","OrganizationUpgradeRequest","additionalStorageGb","billingAddressCountry","billingAddressPostalCode","postOrganizationUpgrade","success","OrganizationCreateRequest","collectionName","tokenResult","includeTaxId","taxIdNumber","billingAddressLine1","billingAddressLine2","billingAddressCity","billingAddressState","providerRequest","ProviderOrganizationCreateRequest","clientOwnerEmail","providerKey","getProviderKey","organizationCreateRequest","postProviderCreateOrganization","postOrganization","files","fd","FormData","append","postOrganizationLicense","PaymentMethodComponent","getUserBillingPayment","lightInputColor","lightInputPlaceholderColor","darkInputColor","darkInputPlaceholderColor","showMethods","hidePaypal","hideCredit","bank","routing_number","account_number","account_holder_name","account_holder_type","currency","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","src","async","onload","Stripe","elements","setStripeElement","btScript","StripeElementStyle","fontFamily","fontSize","fontSmoothing","invalid","StripeElementClasses","empty","Credit","setTheme","head","appendChild","removeChild","btStylesheet","braintree","dropin","create","authorization","container","paymentOptionPriority","paypal","buttonStyle","label","shape","tagline","createErr","console","requestPaymentMethod","payload","nonce","catch","err","postSetupPayment","handleCardSetup","setupIntent","payment_method","createToken","successCallback","handleCardPayment","paymentIntent","style","classes","placeholder","mount","getEffectiveTheme","vaultTimeoutAction","vaultTimeout","vaultTimeouts","isDev","localeOptions","supportedTranslationLocales","localeNames","themeOptions","getVaultTimeout","getVaultTimeoutAction","disableIcons","getDisableFavicon","enableGravatars","getEnableGravitars","enableFullWidth","startingLocale","theme","startingTheme","valid","setVaultTimeoutOptions","setDisableFavicon","setEnableGravitars","setEnableFullWidth","effectiveTheme","setLocale","vaultTimeoutActionChanged","newValue","PremiumComponent","premiumPrice","getHasPremiumPersonally","postAccountLicense","finalizePremium","postPremium","paymentResponse","ProfileComponent","hidePasswordHint","profile","getProfile","UpdateProfileRequest","masterPasswordHint","putProfile","postPurgeCiphers","SecurityKeysComponent","showChangeKdf","viewUserApiKey","viewUserApiKeyModalRef","postUserApiKey","rotateUserApiKey","rotateUserApiKeyModalRef","postUserRotateApiKey","SecurityComponent","showChangePassword","hasFamilySponsorshipAvailable","canManageSponsorships","getHasPremiumFromOrganization","hideSubscription","availableSponsorshipOrgs","activeSponsorshipOrgs","sponsorshipForm","selectedSponsorshipOrgId","validators","Validators","required","sponsorshipEmail","asyncValidators","notAllowedValueAsync","updateOn","postCreateSponsorship","sponsoredEmail","friendlyName","resetForm","forceReload","allOrgs","familySponsorshipAvailable","familySponsorshipFriendlyName","controls","SponsoringOrgRowComponent","sponsoringOrg","isSelfHosted","sponsorshipRemoved","statusMessage","statusClass","setStatus","familySponsorshipToDelete","familySponsorshipValidUntil","familySponsorshipLastSyncDate","revokeSponsorship","revokeSponsorshipPromise","doRevokeSponsorship","resendEmail","resendEmailPromise","postResendSponsorshipOffer","deleteRevokeSponsorship","toDelete","validUntil","formatDate","SubscriptionComponent","UserSubscriptionComponent","UserBillingHistoryComponent","onCountryChanged","pristine","getOrganizationTaxInfo","getTaxInfo","taxRates","getTaxRates","localTaxRate","rate","getTaxInfoRequest","OrganizationTaxInfoUpdateRequest","TaxInfoUpdateRequest","hasChanged","putOrganizationTaxInfo","putTaxInfo","TwoFactorAuthenticatorComponent","TwoFactorBaseComponent","Authenticator","qrScript","auth","authResponse","processResponse","disable","enable","buildRequestModel","UpdateTwoFactorAuthenticatorRequest","putTwoFactorAuthenticator","QRious","element","encodeURIComponent","twoFactorProviderType","hashedSecret","secret","verificationType","enableFunction","TwoFactorProviderRequest","putTwoFactorOrganizationDisable","putTwoFactorDisable","requestClass","Duo","UpdateTwoFactorDuoRequest","integrationKey","ikey","secretKey","skey","host","putTwoFactorOrganizationDuo","putTwoFactorDuo","TwoFactorEmailComponent","sendEmail","TwoFactorEmailRequest","emailPromise","postTwoFactorEmailSetup","sentEmail","UpdateTwoFactorEmailRequest","putTwoFactorEmail","TwoFactorRecoveryComponent","print","w","write","code","onafterprint","formatString","showPolicyWarning","deviceVerificationSettings","getDeviceVerificationSettings","isDeviceVerificationSectionEnabled","enableDeviceVerification","unknownDeviceVerificationEnabled","TwoFactorProviders","p2","evaluatePolicies","authenticatorModalRef","Yubikey","yubikeyModalRef","TwoFactorYubiKeyComponent","emailModalRef","WebAuthn","webAuthnModalRef","TwoFactorWebAuthnComponent","recoveryModalRef","putDeviceVerificationSettings","DeviceVerificationRequest","TwoFactorVerifyComponent","onAuthed","VerificationType","otp","apiCall","getTwoFactorRecover","getTwoFactorOrganizationDuo","getTwoFactorDuo","getTwoFactorEmail","getTwoFactorWebAuthn","getTwoFactorAuthenticator","getTwoFactorYubiKey","keyIdAvailable","keysConfiguredCount","webAuthnResponse","UpdateTwoFactorWebAuthnRequest","deviceResponse","putTwoFactorWebAuthn","removePromise","UpdateTwoFactorWebAuthnDeleteRequest","deleteTwoFactorWebAuthn","readKey","SecretVerificationRequest","challengePromise","getTwoFactorWebAuthnChallenge","challenge","readDevice","webAuthnChallenge","log","resetWebAuthn","credentials","webAuthnListening","webAuthnError","listening","k","configured","migrated","nfc","UpdateTwoFactorYubioOtpRequest","key1","key2","key3","key4","key5","putTwoFactorYubiKey","disablePromise","existingKey","padRight","character","max","makeRequest","UpdateLicenseComponent","updatePromise","postOrganizationLicenseUpdate","getUserSubscription","usingInAppPurchase","postReinstatePremium","postCancelPremium","VaultTimeoutInputComponent","NG_VALUE_ACCESSOR","NG_VALIDATORS","VerifyEmailComponent","postAccountVerifyEmail","saved","usernameGenerationService","forwardOptions","findIndex","history","PasswordGeneratorHistoryComponent","historyModalRef","lengthChanged","minNumberChanged","minSpecialChanged","setImportOptions","importer","getImporter","fileContents","content","getFileContents","import","getFormatInstructionTitle","results","featuredImportOptions","importOptions","regularImportOptions","collator","compare","localeCompare","fire","heightAuto","buttonsStyling","iconHtml","input","inputValue","inputAttributes","readonly","titleText","showConfirmButton","confirmButtonText","onOpen","popupEl","scrollTo","extract1PuxContent","reader","FileReader","readAsText","evt","pre","DOMParser","parseFromString","target","textContent","onerror","JSZip","loadAsync","zip","AddEditCustomFieldsComponent","showRevisionDate","hasPasswordHistory","viewingPasswordHistory","passwordRevisionDisplayDate","cleanUp","organizationUseTotp","totpUpdateCode","getTimeInterval","totpTick","totpInterval","setInterval","toggleFavorite","launch","canLaunch","typeI18nKey","aType","collect","confirmed","viewHistory","clearInterval","totpCode","getCode","half","totpCodeFormatted","intervalSeconds","mod","totpSec","totpDash","totpLow","BulkActionsComponent","bulkDelete","promptPassword","selectedIds","getSelectedIds","BulkDeleteComponent","bulkDeleteModalRef","permanent","cipherIds","bulkRestore","BulkRestoreComponent","bulkRestoreModalRef","onRestored","bulkShare","selectedCiphers","getSelected","BulkShareComponent","bulkShareModalRef","onShared","bulkMove","BulkMoveComponent","bulkMoveModalRef","onMoved","deleteCiphersAdmin","deleteCiphers","deleteManyWithServer","softDeleteManyWithServer","deleteRequest","CipherBulkDeleteRequest","deleteManyCiphersAdmin","putDeleteManyCiphersAdmin","moveManyWithServer","restoreManyWithServer","nonShareableCount","shareableCiphers","writeableCollections","allCollections","filterCollections","checkedCollectionIds","shareManyWithServer","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","onOrganzationBadgeClicked","pagedCiphers","userHasPremiumAccess","pagedCiphersCount","refreshing","doSearch","indexedCiphers","searchCiphers","deletedFilter","attachments","share","clone","restore","restoreWithServer","protectedFields","displayTotpCopyButton","viewPassword","checkCipher","hasTotp","deleteWithServer","softDeleteWithServer","AccountSettings","subscriber","arg","htmlStorageLocation","HtmlStorageLocation","Session","defaultOptions","Local","localStorage","getItem","sessionStorage","parse","save","Set","setItem","removeItem","systemLanguage","localesDirectory","formattedLocale","filePath","localesResult","store","addAccount","account","getGlobals","reconcileOptions","defaultOnDiskLocalOptions","globals","saveGlobals","getEncryptedCiphers","defaultInMemoryOptions","setEncryptedCiphers","getEncryptedCollections","setEncryptedCollections","getEncryptedFolders","setEncryptedFolders","getEncryptedSends","setEncryptedSends","migrationStateFrom1To2","migrateStateFrom1To2","stateFactory","createGlobal","browserCache","prefersColorSchemeDark","matchMedia","getDevice","chrome","getDeviceString","getClientType","ClientType","Web","isFirefox","isChrome","isEdge","isOpera","isVivaldi","isSafari","isMacAppStore","isViewOpen","sameWindow","rel","blobData","blobOptions","blob","fileNameLower","doDownload","endsWith","Blob","URL","createObjectURL","position","supportsWebAuthn","PublicKeyCredential","supportsDuo","confirmText","cancelText","bodyIsHtml","iconClasses","bootstrapModal","removeAttribute","iconHtmlStr","html","showCancelButton","cancelButtonText","doc","clipboardData","setData","queryCommandSupported","textarea","copyEl","contains","execCommand","warn","readFromClipboard","supportsBiometric","authenticateBiometric","supportsSecureStorage","getDefaultSystemTheme","matches","callback","addEventListener","addListener","addFieldType","FieldType","Text","linkedFieldOptions","fieldType","eventType","addFieldTypeOptions","Hidden","Boolean","addFieldLinkedTypeOption","Linked","changes","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","fields","FieldView","newField","linkedId","removeField","field","toggleFieldValue","showValue","trackByFunction","drop","moveItemInArray","previousIndex","currentIndex","linkedFieldOption","i18nKey","onCancelled","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","onGenerateUsername","showCardNumber","showCardCode","currentDate","canUseReprompt","typeOptions","Identity","SecureNote","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","uriMatchOptions","UriMatchType","Domain","Host","StartsWith","RegularExpression","Exact","Never","autofillOnPageLoadOptions","myEmail","addEditCipherInfo","getAddEditCipherInfo","setAddEditCipherInfo","LoginView","LoginUriView","card","CardView","identity","IdentityView","secureNote","SecureNoteView","SecureNoteType","Generic","organizationChanged","previousCipherId","addUri","removeUri","editCollections","restorePromise","restoreCipher","generateUsername","toggleCardNumber","Cipher_ClientToggledCardNumberVisible","toggleCardCode","toggleUriOptions","match","loginUriMatchChanged","checkPassword","checkPasswordPromise","repromptChanged","Password","saveWithServer","deletePromises","reuploadPromises","hasUpdatedKey","fileEl","getAttachmentData","getSingleMessage","admin","saveAttachmentRawWithServer","foundAttachment","a2","deleteAttachmentWithServer","Window","AvatarComponent","charCount","fontWeight","dynamic","circle","generate","hashBytes","fromBufferToHex","chars","upperData","getFirstLetters","unicodeSafeSubstring","regexpEmojiPresentation","charObj","getCharText","svg","getSvg","svgHtml","btoa","unescape","parts","svgTag","backgroundColor","width","height","textTag","characters","CalloutComponent","useAlertRole","calloutStyle","enforcedPolicyMessage","getPasswordScoreAlertDisplay","CaptchaProtectedComponent","captchaSiteKey","captchaToken","setupCaptcha","webVaultUrl","getWebVaultUrl","captcha","CaptchaIFrame","showCaptcha","handleCaptchaRequired","masterPasswordRetype","masterPasswordStrengthTimeout","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","searchPending","searchTimeout","rightClickCipher","addCipherOptions","selectedCollectionIds","saveCollectionsWithServer","ExportScopeCalloutComponent","hasOrganizations","scopeConfig","scopeIdentifier","disabledByPolicy","exportForm","formatOptions","DisablePersonalVaultExport","warningDialog","verifyUser","downloadFile","encryptedFormat","getExport","prefix","extension","csv","FolderView","comingFromAddEdit","onSelected","usernameOptions","passwordOptions","avoidAmbiguous","usernameWebsite","passTypeOptions","usernameTypeOptions","desc","subaddressOptions","catchallOptions","passwordOptionsResponse","ambiguous","subaddressEmail","subaddressType","catchallType","website","websiteOption","generatorOptions","getGeneratorOptions","regenerateWithoutButtonPress","regenerate","typeChanged","setGeneratorOptions","regeneratePassword","regenerateUsername","sliderChanged","savePasswordOptions","addHistory","sliderInput","normalizePasswordOptions","saveOptions","saveUsernameOptions","usernameGeneratingPromise","copyOptions","toggleOptions","uppercase","lowercase","number","special","normalizeOptions","postPasswordHint","PasswordHintRequest","cardIcons","Visa","Mastercard","Amex","Discover","JCB","Maestro","UnionPay","RuPay","IconComponent","iconsUrl","getIconsUrl","image","fallbackImage","imageEnabled","setLoginIcon","setCardIcon","hostnameUri","isWebsite","getHostname","brand","pin","pinLock","webVaultHostname","invalidPinAttempts","activeAccount","failed","pinSet","makeKeyFromPin","getDecryptedPinProtected","protectedPin","getProtectedPin","setKeyAndContinue","passwordValid","getKeyHash","compareAndUpdateKeyHash","serverKeyHash","HashPurpose","ServerAuthorization","postAccountVerifyPassword","localKeyHash","LocalAuthorization","setKeyHash","decPin","pinKey","makePinKey","setDecryptedPinProtected","unlockBiometric","biometricLock","KeySuffixOptions","Biometric","doContinue","isStable","onStable","take","setKey","setBiometricLocked","setEverBeenUnlocked","disableFavicon","isPinLockSet","isBiometricLockSet","hasKeyStored","biometricText","getBiometricText","hideInput","vaultUrl","twoFactorRoute","forcePasswordResetRoute","alwaysRememberEmail","getRememberedEmail","isBrowser","isNode","focusInput","PasswordLogInCredentials","logIn","requiresTwoFactor","onSuccessfulLoginTwoFactorNavigate","forcePasswordReset","onSuccessfulLoginForceResetNavigate","launchSsoBrowser","ssoRedirectUri","numbers","ssoCodeVerifier","codeVerifierHash","codeChallenge","fromBufferToUrlB64","setSsoState","setSsoCodeVerifier","webUrl","DynamicModalComponent","cd","focusTrapFactory","loadChildComponent","childComponentType","setComponentParameters","componentRef","created","focusTrap","focusFirstTabbableElementWhenReady","componentType","componentFactory","modalContentRef","destroy","getFocus","autoFocusEl","_parentInjector","_additionalTokens","notFoundValue","flags","_onCreated","Subject","_onClose","_onClosed","_onShow","_onShown","onShow","lastResult","toPromise","getHistory","confirmMasterPassword","hint","showTerms","acceptPolicies","DEFAULT_KDF_TYPE","hashedPassword","RegisterRequest","KeysRequest","orgInvite","postRegister","confirmField","continuing","leaving","getManagingOrganization","convert","migrateUser","removeConvertAccountRequired","copyLink","emailVerified","alertShown","File","sendLinkBaseUrl","getSendUrl","accessId","urlB64Key","setDates","deletionDate","loadSend","SendView","SendFileView","SendTextView","hasPassword","encryptSend","encSend","uploadPromise","copySuccess","sendData","togglePasswordVisible","BrowserPath","DateField","DatePreset","datesChanged","datesForm","FormGroup","selectedDeletionDatePreset","selectedExpirationDatePreset","defaultDeletionDateTime","defaultExpirationDateTime","fallbackDeletionDate","fallbackDeletionTime","fallbackExpirationDate","fallbackExpirationTime","deletionDatePresets","OneHour","OneDay","TwoDays","ThreeDays","SevenDays","ThirtyDays","expirationDatePresets","Firefox","Safari","Default","formattedDeletionDate","browserPath","miliseconds","setTime","safariTimePresetOptions","DeletionDate","ExpriationDate","nextWeek","setInitialFormValues","emitDates","valueChanges","onDeletionDatePresetSelect","clearExpiration","formattedExpirationDate","initialDeletionDate","toTimeString","initialExpirationDate","twentyFourHour","noon","midnight","ams","pms","h","hour","minutes","midnightOption","twelveHour","noonOption","amOption","pmOption","validTimes","filteredSends","hasSearched","onSuccessfulLoad","applyTextSearch","removePassword","removePasswordWithServer","onSuccessfulRemovePassword","onSuccessfulDelete","clearSelections","selectedAll","selectedType","searchSends","syncLoading","resetPasswordAutoEnroll","getOrganizationAutoEnrollStatus","resetPasswordEnabled","getMasterPasswordPoliciesForInvitedUsers","SetPasswordRequest","setPassword","onSetPasswordSuccess","resetRequest","onSuccessfulChangePassword","setKdfType","setKdfIterations","setEncKey","setEncPrivateKey","form","hours","CUSTOM_VALUE","customTimeInMinutes","MIN_CUSTOM_MINUTES","vaultTimeoutPolicy","vaultTimeoutPolicyHours","vaultTimeoutPolicyMinutes","validatorChange","onChange","writeValue","registerOnChange","registerOnTouched","onTouched","setDisabledState","isDisabled","validate","control","policyError","exceedsMinimumTimout","minTimeoutError","registerOnValidatorChange","fn","shareWithServer","loggingIn","changePasswordRoute","codeVerifier","getSsoCodeVerifier","getSsoState","checkState","getOrgIdentifierFromState","includeUserIdentifier","initiateSsoFormPromise","preValidateSso","authorizeUrl","buildAuthorizeUrl","getIdentityUrl","userIdentifier","getSsoUserIdentifier","orgIdFromState","SsoLogInCredentials","sso","resetMasterPassword","onSuccessfulLoginChangePasswordNavigate","stateSplit","checkStateSplit","BitwardenToast","toastPackage","trigger","opacity","transition","animate","BitwardenToastGlobalConfig","DefaultNoComponentGlobalConfig","toastComponent","BitwardenToastModule","ngModule","TOAST_CONFIG","default","getSupportedProviders","choose","remember","webAuthnReady","webAuthnNewTab","providerType","webAuthnSupported","webAuthn","twoFactorEmail","loginRoute","authing","getProviders","needsLock","WebAuthnIFrame","getDefaultProvider","cleanupWebAuthn","providerData","authWebAuthn","DuoWebSDK","iframe","sig_request","Signature","submit_callback","sig","stop","logInTwoFactor","TokenRequestTwoFactor","doToast","deviceIdentifier","getAppId","postTwoFactorEmail","cleanup","authingWithPassword","authingWithSso","authingWithApiKey","UpdateTempPasswordRequest","putUpdateTempPassword","UserVerificationComponent","disableRequestOTP","sentCode","processChanges","requestOTP","OTP","A11yTitleDirective","renderer","hasAttribute","ApiActionDirective","appApiAction","captchaRequired","AutofocusDirective","condition","autofocus","BlurClickDirective","onClick","blur","FallbackSrcDirective","onError","appFallbackSrc","InputVerbatimDirective","disableComplete","NotPremiumDirective","templateRef","viewContainer","createEmbeddedView","SelectCopyDirective","onCopy","selection","getSelection","rangeCount","getRangeAt","stringEndPos","newLinePos","StopClickDirective","$event","preventDefault","StopPropDirective","stopPropagation","TrueFalseValueDirective","elementRef","trueValue","falseValue","propagateChange","onHostChange","setProperty","forwardRef","routerState","promptBiometric","getConvertAccountRequired","loginpage","redirectUrl","CreditCardNumberPipe","I18nPipe","UserNamePipe","maxOpened","autoDismiss","closeButton","hide","onNodeCollapseStateChange","onFilterChange","collectionsGrouping","collectionNodes","isCollapsed","node","resetFilter","onAddFolder","onEditFolder","foldersGrouping","folderNodes","organizationGrouping","displayMode","activePersonalOwnershipPolicy","activeSingleOrganizationPolicy","refreshCollectionsAndFolders","applyMyVaultFilter","clearFilter","hideTrash","cipherStatus","selectedCipherType","typesNode","cipherTypeEnum","hasId","hideCollections","isLoaded","checkForPersonalOwnershipPolicy","checkForSingleOrganizationPolicy","buildFolders","toggleFilterNodeCollapseState","pruneInvalidatedFilterSelections","pruneInvalidFolderSelection","pruneInvalidCollectionSelection","setCollapsedGroupings","getCollapsedGroupings","storedFolders","orgCiphers","oc","nestedFolders","storedCollections","ColorPasswordPipe","generateTemplate","templateGenerator","passwordArray","colorizedPassword","isSpecial","numberFormats","cardLength","blocks","Other","creditCardNumber","rules","matchingRule","chunks","total","EllipsisPipe","limit","completeWords","ellipsis","lastIndexOf","p3","prop1","prop2","prop3","BroadcasterService","InjectionToken","LOGOUT_CALLBACK","LOCKED_CALLBACK","CLIENT_TYPE","ValidationService","LOCALE_ID","language","AppIdService","AuditService","CryptoFunctionService","AuthService","TokenService","KeyConnectorService","EnvironmentService","TwoFactorService","fileUploadService","SearchService","SettingsService","FileUploadService","Injector","ConsoleLogService","TotpService","PasswordGenerationService","PolicyService","UsernameGenerationService","SyncService","SendService","OrganizationService","ProviderService","VaultTimeoutService","ExportService","NotificationsService","WebCryptoFunctionService","UserVerificationService","ModalConfig","modalList","factoryResolvers","modalCount","topModal","viewContainerRef","modalComponentRef","openInternal","insert","hostView","registerComponentFactoryResolver","attachToDom","createModalComponent","attachView","domElem","rootNodes","detachView","backdrop","modalEl","dialogEl","className","zIndex","prepend","closeElement","ModalRef","WeakMap","ModalInjector","defaultErrorMessage","errors","validationErrors","getAllMessages","valueGetter","caseInsensitive","notAllowedValue","controlValue","indexedEntityId","AuthenticationType","EncryptionType","FileUploadType","LoginLinkedId","CardLinkedId","IdentityLinkedId","LogLevelType","NotificationType","ProviderUserStatusType","ProviderUserType","SsoType","OpenIdConnectRedirectBehavior","Saml2BindingType","Saml2NameIdFormat","Saml2SigningBehavior","StateVersion","StorageLocation","accountConstructor","args","globalStateConstructor","globalStateFactory","GlobalStateFactory","accountFactory","AccountFactory","createAccount","AscendoCsvImporter","BaseImporter","ImportResult","parseCsv","initLoginCipher","notes","getValueOrDefault","val","fieldLower","passwordFieldNames","usernameFieldNames","uriFieldNames","makeUriArray","processKvp","convertToNoteIfNeeded","cleanupCipher","AvastCsvImporter","web","AvastJsonImporter","logins","custName","note","pwd","loginName","cards","cardholderName","holderName","cardNumber","cvv","getCardBrand","month","expMonth","expYear","AviraCsvImporter","nameFromUrl","secondary_username","newLineRegex","notesFieldNames","parseCsvOptions","encoding","skipEmptyLines","parseXml","header","parseOptions","splitNewLine","papa","row","parseSingleRowCsv","rowData","parsedRow","loginUri","fixUri","returnArr","hostname","startsWith","defaultValue","cardNum","re","RegExp","test","setCardExpiration","moveFoldersToCollections","folderRelationships","collectionRelationships","CollectionView","querySelectorDirectChild","parentEl","query","els","querySelectorAllDirectChild","parentNode","processFolder","folderName","folderIndex","hasFolder","processFullName","fullName","nameParts","firstName","lastName","middleName","BitwardenCsvImporter","col","addCollection","collectionIndex","delimPosition","login_totp","login_username","login_password","login_uri","BitwardenJsonImporter","passwordProtected","missingPassword","encrypted","parseEncrypted","parseDecrypted","encKeyValidation_DO_NOT_EDIT","encKeyValidation","groupingsMap","CollectionWithIdExport","toDomain","view","FolderWithIdExport","CipherWithIdExport","passwordHistory","cId","toView","BitwardenPasswordProtectedImporter","parsedData","cannotParseFile","encData","clearTextData","jdoc","salt","BlackBerryCsvImporter","grouping","fav","extra","BlurCsvImporter","OfficialProps","ButtercupCsvImporter","processingCustomFields","prop","ChromeCsvImporter","ClipperzHtmlImporter","currentVersion","property","actionType","labelLower","CodebookCsvImporter","Category","Favorite","Entry","Note","Username","TOTP","Website","Phone","PIN","_mappedCredentialsColums","_mappedPersonalInfoAsIdentiyColumns","_mappedSecureNoteColumns","DashlaneCsvImporter","parsePersonalInformationRecordAsIdentity","rowKeys","category","parseCredentialsRecord","parsePaymentRecord","parseIdRecord","parsePersonalInformationRecord","parseSecureNoteRecords","otpSecret","importUnmappedFields","account_name","mappedValues","cc_number","expiration_month","expiration_year","account_holder","licenseNumber","passportNumber","ssn","first_name","middle_name","last_name","item_name","dataRow","phone","phone_number","address1","address","HandledResults","DashlaneJsonImporter","ADDRESS","processAddress","AUTHENTIFIANT","processAuth","BANKSTATEMENT","processNote","IDCARD","PAYMENTMEANS_CREDITCARD","processCard","IDENTITY","processIdentity","credential","secondaryLogin","pseudo","addressName","addressFull","zipcode","owner","nameProperty","EncryptrCsvImporter","Label","Notes","CVV","expiry","Expiry","expParts","EnpassCsvImporter","firstRow","containsField","fieldValue","fieldName","fieldNameLower","EnpassJsonImporter","foldersMap","foldersIndexMap","folderTree","buildFolderTree","flattenFolderTree","template_type","processLogin","sensitive","uuid","parent_uuid","titlePrefix","tree","FirefoxCsvImporter","FSecureFskImporter","creditNumber","creditCvv","creditExpiry","GnomeJsonImporter","keyRing","display_name","attributes","username_value","attr","ImportError","NotesHeader","ApplicationsHeader","WebsitesHeader","Delimiter","KasperskyTxtImporter","notesData","applicationsData","websitesData","workingData","parseDataCategory","applications","websites","n","nameKey","itemComment","itemCommentKey","l","colonIndex","KeePass2XmlImporter","rootGroup","traverse","isRootNode","groupPrefixName","groupName","nameEl","cipherIndex","entryString","valueEl","keyEl","attrs","ProtectInMemory","KeePassXCsvImporter","Title","Group","KeeperCsvImporter","LastPassCsvImporter","buildBaseCipher","parseSecureNote","parseCard","parseIdentity","ccnum","cardCipher","profilename","firstname","lastname","ccname","cccsc","ccexp","ccexpParts","middlename","company","address2","address3","extraParts","processedNote","typeParts","mappedData","parseSecureNoteMapping","Number","monthString","Company","State","Country","dataObj","processingNotes","extraPart","LogMeOnceCsvImporter","MeldiumCsvImporter","DisplayName","UserName","Url","MSecureCsvImporter","mappedBaseColumns","_mappedUserAccountColumns","_mappedCreditCardColumns","_mappedIdentityColumns","_mappedIdCardColumns","_mappedTwoFaColumns","_mappedUserNoteColumns","MykiCsvImporter","nickname","additionalInfo","twofaSecret","authToken","cardName","exp_month","exp_year","firstAddressLine","secondAddressLine","zipCode","idType","idName","idCountry","idNumber","NordPassCsvImporter","record","recordType","evaluateType","cardholdername","cardnumber","cvc","expirydate","full_name","importRecord","lowerProperty","OnePassword1PifImporter","line","trashed","hmac","processStandardItem","processWinOpVaultItem","overview","URLs","parsePasswordHistory","notesPlain","parseFields","sections","section","openContents","faveIndex","typeName","secureContents","maxSize","time","ph","PasswordHistoryView","lastUsedDate","designationKey","valueKey","toUTCString","fieldDesignation","street","OnePassword1PuxImporter","accounts","vaults","vault","categoryUuid","CategoryEnum","Database","WirelessRouter","Server","API_Credential","CreditCard","SoftwareLicense","EmailAccount","MedicalRecord","DriversLicense","OutdoorLicense","Membership","Passport","RewardsProgram","SocialSecurityNumber","favIndex","processOverview","processLoginFields","processDetails","processSections","tags","inputString","loginFields","loginField","designation","LoginFieldTypeEnum","CheckBox","parseSectionFields","anyField","getFieldName","extractValue","fillLogin","fillApiCredentials","fillCreditCard","fillBankAccount","fillIdentity","fillDriversLicense","fillOutdoorLicense","fillMembership","fillPassport","fillRewardsProgram","fillSSN","email_address","guarded","monthYear","historyItems","IgnoredProperties","OnePasswordCsvImporter","loginPropertyParsers","setLoginUsername","setLoginPassword","setLoginUris","creditCardPropertyParsers","setCreditCardNumber","setCreditCardVerification","setCreditCardCardholderName","setCreditCardExpiry","identityPropertyParsers","setIdentityFirstName","setIdentityInitial","setIdentityLastName","setIdentityUserName","setIdentityEmail","setIdentityPhone","setIdentityCompany","quoteChar","escapeChar","getProp","setNotes","setCipherType","altUsername","context","CipherImportContext","setKnownLoginValue","setKnownCreditCardValue","setKnownIdentityValue","setUnknownValue","entries","agg","getPropByRegexp","regexp","matchingKeys","getPropIncluding","includesMap","func","readableDate","OnePasswordMacCsvImporter","OnePasswordWinCsvImporter","setIdentityAddress","expSplit","PadlockCsvImporter","headers","tag","PassKeepCsvImporter","getValue","PassmanJsonImporter","custom_fields","customField","field_type","PasspackCsvImporter","tagsJson","Tags","tagJson","__parsed_extra","fieldsJson","extraFields","fieldJson","PasswordAgentCsvImporter","newVersion","altFormat","PasswordBossJsonImporter","login_url","identifiers","valObj","expDate","cf","PasswordDragonXmlImporter","records","categoryText","accountName","tagName","PasswordSafeXmlImporter","passwordSafe","notesDelimiter","getAttribute","groupText","PasswordWalletTxtImporter","RememBearCsvImporter","trash","cardholder","expiryMonth","expMonthNumber","expiryYear","expYearNumber","RoboFormCsvImporter","Folder","Name","Pwd","Rf_fields","SafariCsvImporter","OTPAuth","SafeInCloudXmlImporter","labelEl","cardEl","labelIdEl","labelId","fieldEl","notesEl","candidates","choice","SaferPassCsvImporter","SecureSafeCsvImporter","Comment","SplashIdCsvImporter","parseFieldsToNotes","startIndex","StickyPasswordXmlImporter","loginNodes","loginNode","accountId","usernameText","passwordText","linkText","notesText","accountLogin","parentElement","buildGroupText","PropertiesToIgnore","TrueKeyCsvImporter","memo","kind","expiryDate","document_content","UpmCsvImporter","YotiCsvImporter","ZohoVaultCsvImporter","ChamberName","parseData","SecretData","CustomData","IFrameComponent","errorCallback","infoCallback","parsedMessage","siteKey","initComponent","createParams","iframeId","parseFunction","parseMessage","connectorLink","sendMessage","contentWindow","postMessage","base64Encode","String","fromCharCode","removeEventListener","URLSearchParams","validMessage","LinkedMetadata","propertyKey","_i18nKey","prototype","ApiLogInStrategy","LogInStrategy","tokenResponse","apiUseKeyConnector","keyConnectorUrl","getKeyConnectorUrl","getAndSetKey","tokenRequest","ApiTokenRequest","buildTwoFactor","buildDeviceRequest","startLogIn","saveAccountInformation","setApiKeyClientId","setApiKeyClientSecret","captchaBypassToken","twoFactor","captchaResponse","setTwoFactor","clearSelectedProvider","postIdentityToken","IdentityTwoFactorResponse","processTwoFactorResponse","IdentityCaptchaResponse","processCaptchaResponse","IdentityTokenResponse","processTokenResponse","appId","DeviceRequest","userProvidedTwoFactor","storedTwoFactorToken","getTwoFactorToken","Remember","accountInformation","decodeToken","accessToken","AccountProfile","hasPremiumPersonally","tokens","AccountTokens","refreshToken","AuthResult","twoFactorToken","setTwoFactorToken","createKeyPairForOldAccount","twoFactorProviders2","setProviders","postAccountKeys","PasswordLogInStrategy","localHashedPassword","PasswordTokenRequest","SsoLogInStrategy","newSsoUser","convertNewSsoUserToKeyConnector","SsoTokenRequest","descriptor","originalMethod","caches","getCache","argsCacheKey","onFinally","apply","ServiceUtils","nodeTree","partIndex","delimiter","partName","TreeNode","nestedTraverse","newPartName","getTreeNodeObject","throttleKey","allThrottles","throttles","getThrottles","argsThrottleKey","queue","exec","nodeURL","inited","process","release","isMobile","isAppleMobileBrowser","isAppleMobile","Uint8Array","Buffer","binaryString","atob","bytes","fromUrlB64ToB64","strUtf8","arr","binary","byteLength","fromB64toUrlB64","b64Str","encodedString","decodeURIComponent","escape","call","urlB64Str","output","fromB64ToUtf8","utfStr","fromUtf8ToArray","random","uriString","getUrl","httpUrl","tldEndingRegex","getUrlObject","tldjs","isValid","validIpAddress","urlDomain","pair","source","ipString","mobile","vendor","opera","hasProtocol","anchor","btnText","allow","EEFLongWordList","BaseResponse","getResponseProperty","CardApi","FieldApi","IdentityApi","LoginApi","passwordRevisionDate","autofillOnPageLoad","LoginUriApi","accessEventLogs","accessImportExport","manageAllCollections","manageAssignedCollections","manageCiphers","manageGroups","manageSso","managePolicies","SecureNoteApi","SendFileApi","sizeName","SendTextApi","SsoConfigApi","configType","authority","metadataAddress","redirectBehavior","getClaimsFromUserInfoEndpoint","additionalScopes","additionalUserIdClaimTypes","additionalEmailClaimTypes","additionalNameClaimTypes","acrValues","expectedReturnAcrValue","spNameIdFormat","spOutboundSigningAlgorithm","spSigningBehavior","spMinIncomingSigningAlgorithm","spWantAssertionsSigned","spValidateCertificates","idpEntityId","idpBindingType","idpSingleSignOnServiceUrl","idpSingleLogoutServiceUrl","idpX509PublicCert","idpOutboundSigningAlgorithm","idpAllowUnsolicitedAuthnResponse","idpDisableOutboundLogoutRequests","idpWantAuthnRequestsSigned","api","OpenIdConnect","openId","Saml2","saml","idpAllowOutboundLogoutRequests","LoginData","SecureNoteData","CardData","IdentityData","FieldData","AttachmentData","PasswordHistoryData","LoginUriData","useDirectory","useKeyConnector","selfHost","usersGetPremium","maxCollections","ssoBound","maxAccessCount","accessCount","SendTextData","SendFileData","EncryptionPair","DataEncryptionPair","AccountData","passwordGenerationHistory","AccountKeys","cryptoSymmetricKey","organizationKeys","providerKeys","environmentUrls","EnvironmentUrls","pinProtected","Attachment","buildDomainModel","decryptObj","AttachmentView","containerService","bitwardenContainerService","getCryptoService","toAttachmentData","buildDataModel","toCardData","localData","Field","model","decAttachment","decField","decPh","toCipherData","toLoginData","toSecureNoteData","toIdentityData","toFieldData","toPasswordHistoryData","notEncList","objProp","notEncStringList","viewModel","theProp","mapProp","encryptedStringOrType","iv","mac","encType","encryptionType","headerPieces","encPieces","AesCbc128_HmacSha256_B64","AesCbc256_B64","AesCbc256_HmacSha256_B64","Rsa2048_OaepSha256_B64","Rsa2048_OaepSha1_B64","decryptedValue","icons","notifications","webVault","keyConnector","WindowState","stateVersion","One","Sso","Api","LoginUri","toLoginUriData","MasterPasswordPolicyOptions","isProviderUser","Manager","isAdmin","isManager","canAccessReports","hasProvider","PasswordGeneratorPolicyOptions","useUppercase","useLowercase","numberCount","specialCount","inEffect","isProviderAdmin","ProviderAdmin","ResetPasswordPolicyOptions","Send","SendText","SendFile","SendAccessView","comparator","sortedCiphersByUrl","timeouts","isCached","addCiphers","Ciphers","resetTimer","getLastUsed","getLastLaunched","getNext","updateLastUsedIndex","lastUsedIndex","lastLaunched","y","valueOf","getNextIndex","authenticatedAccounts","accountActivity","macKey","keyB64","encKeyB64","macKeyB64","CardExport","CipherExport","FieldExport","LoginExport","SecureNoteExport","IdentityExport","build","CollectionExport","FolderExport","LoginUriExport","orgIdentifier","ids","lastKnownRevisionDate","attachments2","attachmentRequest","AttachmentRequest","pushToken","FolderRequest","TokenRequest","device","toIdentityToken","grant_type","client_secret","alterIdentityTokenHeaders","fromUtf8ToUrlB64","code_verifier","redirect_uri","client_id","deviceName","twoFactorProvider","twoFactorRemember","fileLength","SendRequest","culture","ApiKeyResponse","AttachmentResponse","AttachmentUploadDataResponse","fileUploadType","cipherMiniResponse","CipherResponse","propertyName","exactName","otherCasePropertyName","BillingHistoryResponse","BillingTransactionResponse","BillingInvoiceResponse","BillingPaymentResponse","BillingSourceResponse","BillingResponse","cardBrand","needsVerification","pdfUrl","paid","createdDate","refunded","partiallyRefunded","refundedAmount","BreachAccountResponse","addedDate","breachDate","dataClasses","isActive","isVerified","logoPath","modifiedDate","pwnCount","PasswordHistoryResponse","CollectionResponse","SelectionReadOnlyResponse","DeviceVerificationResponse","DomainsResponse","GlobalDomainResponse","creationDate","EmergencyAccessGrantorDetailsResponse","grantorId","EmergencyAccessTakeoverResponse","EmergencyAccessViewResponse","identityResponse","errorModel","responseErrorModel","HCaptcha_SiteKey","messages","lastSep","EventResponse","FolderResponse","GroupResponse","access_token","expiresIn","expires_in","refresh_token","tokenType","token_type","KeyConnectorUserKeyResponse","KeysResponse","ListResponse","dr","NotificationResponse","contextId","SyncCipherCreate","SyncCipherDelete","SyncCipherUpdate","SyncLoginDelete","SyncCipherNotification","SyncFolderCreate","SyncFolderDelete","SyncFolderUpdate","SyncFolderNotification","SyncVault","SyncCiphers","SyncOrgKeys","SyncSettings","LogOut","UserNotification","SyncSendCreate","SyncSendUpdate","SyncSendDelete","SyncSendNotification","OrganizationSsoResponse","SsoUrls","callbackPath","signedOutCallbackPath","spEntityId","spMetadataUrl","spAcsUrl","OrganizationApiKeyInformationResponse","OrganizationAutoEnrollStatusResponse","OrganizationConnectionResponse","rawConfig","OrganizationKeysResponse","OrganizationResponse","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","PlanResponse","OrganizationSponsorshipSyncStatusResponse","OrganizationSubscriptionResponse","storageName","BillingSubscriptionResponse","BillingSubscriptionUpcomingInvoiceResponse","OrganizationUserBulkPublicKeyResponse","OrganizationUserBulkResponse","OrganizationUserResponse","twoFactorEnabled","OrganizationUserResetPasswordDetailsReponse","PaymentResponse","userProfile","ProfileResponse","nameLocalizationKey","descriptionLocalizationKey","baseStorageGb","maxUsers","maxAdditionalSeats","maxAdditionalStorage","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","has2fa","hasApi","hasSso","hasResetPassword","upgradeSortOrder","displaySortOrder","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","PreloginResponse","ProfileOrganizationResponse","familySponsorshipLastSyncDateString","familySponsorshipValidUntilString","ProfileProviderOrganizationResponse","ProfileProviderResponse","providerOrganizations","premiumPersonally","premiumFromOrganization","securityStamp","ProviderOrganizationResponse","ProviderResponse","ProviderUserBulkPublicKeyResponse","ProviderUserBulkResponse","ProviderUserResponse","SendAccessResponse","SendFileDownloadDataResponse","SendFileUploadDataResponse","SendResponse","SsoPreValidateResponse","SubscriptionResponse","trialEndDate","periodStartDate","periodEndDate","cancelledDate","BillingSubscriptionItemResponse","quantity","SyncResponse","CollectionDetailsResponse","TaxInfoResponse","taxIdType","TaxRateResponse","TwoFactorAuthenticatorResponse","TwoFactorDuoResponse","TwoFactorEmailResponse","TwoFactorProviderResponse","TwoFactorRecoverResponse","TwoFactorWebAuthnResponse","KeyResponse","ChallengeResponse","attestation","authenticatorSelection","excludeCredentials","extensions","pubKeyCredParams","rp","TwoFactorYubiKeyResponse","UserKeyResponse","ItemView","_brand","_number","_subTitle","repeat","exp","formatYear","CardholderName","ExpMonth","ExpYear","Code","Brand","subTitle","hasAttachments","linkedFieldValue","linkedFieldI18nKey","showCount","_firstName","_lastName","addressPart2","MiddleName","Address1","Address2","Address3","City","PostalCode","Ssn","PassportNumber","LicenseNumber","FirstName","LastName","FullName","CanLaunchWhitelist","_uri","_domain","_hostname","_host","_canLaunch","getHost","logoutCallback","customUserAgent","isWebClient","isDesktopClient","Headers","Accept","identityToken","qsStringify","getCredentials","isJsonResponse","TwoFactorProviders2","clearTwoFactorToken","doAuthRefresh","postPrelogin","getApiUrl","postSetKeyConnectorKey","getAccountRevisionDate","postIapCheck","postAccountRequestOTP","postAccountVerifyOTP","postConvertToKeyConnector","getUserBillingHistory","getFolder","postFolder","putFolder","deleteFolder","getSend","apiUrl","getSends","postSend","postFileTypeSend","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","getCiphersOrganization","postCipher","postCipherCreate","putCipher","deleteManyCiphers","putMoveCiphers","putShareCipher","putShareCiphers","putCipherCollections","postImportCiphers","postImportOrganizationCiphers","putDeleteCipher","putDeleteManyCiphers","putRestoreCipher","putRestoreCipherAdmin","putRestoreManyCiphers","postCipherAttachment","postCipherAttachmentLegacy","postCipherAttachmentAdminLegacy","postShareCipherAttachment","renewAttachmentUploadUrl","postAttachmentFile","CollectionGroupDetailsResponse","deleteCollectionUser","GroupDetailsResponse","deleteGroupUser","getPoliciesByInvitedUser","OrganizationUserDetailsResponse","OrganizationUserUserDetailsResponse","postImportDirectory","postPublicImportDirectory","getSync","rawId","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","organizationConnectionId","getOrganizationSso","postOrganizationSso","postOrganizationSeat","postProviderSetup","getProvider","putProvider","ProviderUserUserDetailsResponse","getProviderUser","postProviderUserInvite","postProviderUserReinvite","postManyProviderUserReinvite","postProviderUserBulkConfirm","deleteManyProviderUsers","postProviderUserAccept","postProviderUserConfirm","postProviderUsersPublicKey","putProviderUser","deleteProviderUser","getProviderClients","ProviderOrganizationOrganizationDetailsResponse","postProviderAddOrganization","deleteProviderOrganization","getEvents","addEventParameters","getEventsProvider","postEventsCollect","authHeader","getActiveBearerToken","Authorization","getEventsUrl","getHibpBreach","getUserKeyFromKeyConnector","handleError","postUserKeyToKeyConnector","getKeyConnectorAlive","getToken","tokenNeedsRefresh","nativeFetch","sponsoredOrgId","sponsoringOrganizationId","sponsoringOrgId","getRefreshToken","doRefreshToken","getClientId","getClientSecret","doApiTokenRefresh","decodedToken","setTokens","deviceRequest","setToken","hasResponse","alterHeaders","requestUrl","requestInit","tokenError","isTextResponse","Message","hasBaseUrl","typeHeader","storageService","makeAndGetAppId","getAnonymousAppId","existingId","guid","newGuid","hashStart","hashEnding","throttle","logInStrategy","strategy","clearState","saveState","requiresCaptcha","Auto","getEverBeenUnlocked","hasKeyInMemory","Unlocked","preloginResponse","PreloginRequest","startSessionTimeout","clearSessionTimeout","sessionTimeout","upload","renewalCallback","azureUploadBlob","azureUploadBlocks","urlObject","searchParams","blobResponse","blockSize","getMaxBlockSize","blockIndex","numBlocks","ceil","blocksStaged","renewUrlIfNecessary","blockUrl","blockId","encodedBlockId","blockData","blockHeaders","blockRequest","blockResponse","blockListUrl","blockListXml","utfBlockId","fromUtf8ToB64","blockIdList","xml","Version","day","compareTo","encryptedFileName","encryptedFileData","filepath","contentType","subscribers","messageCallback","DomainMatchBlacklist","sortedCiphersCache","SortedCiphersCache","sortCiphersByLastUsed","getDecryptedCipherCache","getDecryptedCiphers","setDecryptedCipherCache","setDecryptedCiphers","clearCache","clearDecryptedCiphersState","existingCipher","hasFields","existingHiddenFields","hiddenFields","ef","matchedField","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","encAttachments","fieldsModel","encFields","encField","encryptField","fieldModel","phModels","encPhs","encPh","encryptPasswordHistory","phModel","getLocalData","hasKey","getAllDecryptedForGrouping","groupingId","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","getEquivalentDomains","eqDomains","eqDomain","matchingDomains","getDefaultUriMatch","domainUrlHost","urlHost","getLastUsedForUrl","getCipherForUrl","getLastLaunchedForUrl","getNextCipherForUrl","updateLastUsedIndexForUrl","updateLastUsedDate","ciphersLocalData","setLocalData","decryptedCipherCache","cached","updateLastLaunchedDate","saveNeverDomain","getNeverDomains","setNeverDomains","upsert","attachmentPromises","shareAttachmentWithServer","encCipher","CipherShareRequest","encCiphers","CipherBulkShareRequest","unencryptedFile","readAsArrayBuffer","cData","filename","encFileName","dataEncKey","encryptToBytes","fileSize","adminRequest","uploadDataResponse","uploadCipherAttachment","legacyServerAttachmentFileUpload","clearEncryptedCiphersState","CipherBulkMoveRequest","deleteAttachment","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","softDelete","setDeletedDate","clearDeletedDate","CipherBulkRestoreRequest","restores","attachmentView","attachmentResponse","theObj","modelProp","lastUsed","autofillOnPageLoadDefault","getAutoFillOnPageLoadDefault","clearSortedCiphers","sequentialize","setDecryptedCollections","decCollections","decryptedCollections","getDecryptedCollections","collectionCopy","getNested","timersMap","Debug","Info","Warning","level","hrtime","timeEnd","elapsed","attachToGlobal","setCryptoMasterKey","storeKey","keyHash","setDecryptedCryptoSymmetricKey","setEncryptedCryptoSymmetricKey","setDecryptedPrivateKey","setEncryptedPrivateKey","setOrgKeys","providerOrgs","providerOrg","setDecryptedOrganizationKeys","setEncryptedOrganizationKeys","setProviderKeys","setDecryptedProviderKeys","setEncryptedProviderKeys","keySuffix","inMemoryKey","getCryptoMasterKey","symmetricKey","getKeyFromStorage","retrieveKeyFromStorage","validateKey","clearSecretKeyStore","storedKeyHash","getEncKeyHelper","getPublicKey","inMemoryPublicKey","rsaExtractPublicKey","setPublicKey","decryptedPrivateKey","getDecryptedPrivateKey","getEncryptedPrivateKey","keyFingerprint","userFingerprint","hkdfExpand","hashPhrase","getOrgKeys","decryptedOrganizationKeys","getDecryptedOrganizationKeys","encOrgKeys","getEncryptedOrganizationKeys","getProviderKeys","decryptedProviderKeys","getDecryptedProviderKeys","encProviderKeys","getEncryptedProviderKeys","getCryptoMasterKeyAuto","hasCryptoMasterKeyBiometric","getEncryptedCryptoSymmetricKey","clearKey","clearSecretStorage","setLegacyEtmKey","clearStoredKey","setCryptoMasterKeyAuto","setCryptoMasterKeyBiometric","clearKeyHash","clearEncKey","memoryOnly","clearKeyPair","keysToClear","clearOrgKeys","clearProviderKeys","clearPinProtectedKey","setEncryptedPinProtected","toggleKey","protectedKeyCs","pinProtectedKey","getEncryptedPinProtected","randomBytes","keyPair","rsaGenerateKeyPair","stretchKey","keyMaterial","sendKey","hkdf","hashPurpose","iterations","theKey","getKeyForEncryption","buildEncKey","plainValue","plainBuf","encObj","aesEncrypt","encValue","macLen","encBytes","EncArrayBuffer","privateKeyValue","Rsa2048_OaepSha256_HmacSha256_B64","Rsa2048_OaepSha1_HmacSha256_B64","alg","encString","decipher","aesDecryptToBytes","aesDecryptToUtf8","encBuf","ctBytes","ivBytes","macBytes","randomNumber","min","rval","range","bitsNeeded","log2","bytesNeeded","mask","pow","byteArray","shouldStoreKey","getBiometricUnlock","getCryptoMasterKeyBiometric","EncryptedObject","macData","keyForEnc","resolveLegacyKey","fastParams","aesDecryptFastParameters","computedMac","hmacFast","compareFast","aesDecryptFast","aesDecrypt","legacyKey","getLegacyEtmKey","minimumEntropy","entropyPerWord","numWords","hashArr","phrase","hashNumber","bigInt","fromArray","remainder","divide","encKeyEnc","getDecryptedCryptoSymmetricKey","decEncKey","encKeyCipher","symmetricCryptoKey","urlsSubject","setUrlsFromStorage","getNotificationsUrl","notificationsUrl","identityUrl","eventsUrl","getEnvironmentUrls","envUrls","formatUrl","setEnvironmentUrls","getUrls","checkOnInterval","uploadImmediately","orgIds","eventCollection","getEventCollection","EventData","setEventCollection","EventRequest","getEncryptedExport","getDecryptedExport","getPasswordProtectedExport","clearText","encText","jsonDoc","getOrganizationEncryptedExport","getOrganizationDecryptedExport","unparse","EventExport","padNumber","getSeconds","decFolders","exportCiphers","buildCommonCipher","collectionPromises","decCol","cipherPromises","decCipher","collectionsMap","padCharacter","numString","azureFileUploadService","AzureFileUploadService","bitwardenFileUploadService","BitwardenFileUploadService","uploadSendFile","uploadData","Direct","Azure","setDecryptedFolders","decryptedFolders","getDecryptedFolders","noneFolder","folderCopy","FolderData","updates","getLocalesJson","defaultMessages","localeMessages","Intl","Collator","numeric","sensitivity","loadMessages","translate","messagesObj","locales","placeholders","placeProp","replaceToken","replaceContent","getImportOptions","importResult","halfway","last","badData","postImport","errorResponse","handleServerError","getImporterInstance","ImportCiphersRequest","KvpRequest","ImportOrganizationCiphersRequest","itemType","setUsesKeyConnector","userNeedsMigration","loggedInUsingSso","getIsExternal","requiredByOrganization","userIsNotUsingKeyConnector","keyConnectorRequest","KeyConnectorUserKeyRequest","handleKeyConnectorError","userKeyResponse","keyArr","pubKey","privKey","setPasswordRequest","SetKeyConnectorKeyRequest","setConvertAccountRequired","setConvertAccountToKeyConnector","getConvertAccountToKeyConnector","connected","inactive","reconnectTimer","signalrConnection","off","signalR","HubConnectionBuilder","withUrl","accessTokenFactory","skipNegotiation","transport","HttpTransportType","WebSockets","withHubProtocol","signalRMsgPack","MessagePackHubProtocol","processNotification","onclose","reconnect","isAuthedAndUnlocked","sync","notification","isAuthenticated","payloadUserId","UserId","myUserId","syncUpsertCipher","syncDeleteCipher","syncUpsertFolder","syncDeleteFolder","syncUpsertSend","syncDeleteSend","getOrganizations","Organization","getByIdentifier","setOrganizations","DefaultOptions","minNumber","minUppercase","minLowercase","wordSeparator","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","getPasswordGenerationOptions","setPasswordGenerationOptions","enforcedOptions","enforcePasswordGeneratorPoliciesOnOptions","getPasswordGeneratorPolicyOptions","currentPolicy","getDecryptedPasswordGenerationHistory","getEncryptedPasswordGenerationHistory","decrypted","decryptHistory","setDecryptedPasswordGenerationHistory","currentHistory","matchesPrevious","unshift","GeneratedPasswordHistory","newHistory","encryptHistory","setEncryptedPasswordGenerationHistory","userInputs","globalUserInputs","finalUserInputs","zxcvbn","array","j","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","setDecryptedPolicies","decryptedPolicies","getDecryptedPolicies","diskPolicies","getEncryptedPolicies","setEncryptedPolicies","toLocaleLowerCase","toLocaleUpperCase","resetPasswordPolicyOptions","policiesResponse","policyFilter","filteredPolicies","policySet","isExcemptFromPolicies","isExemptFromPolicies","Provider","indexing","searchableMinLength","lunr","Pipeline","registerFunction","normalizeAccentsPipelineFunction","normalizeSearchQuery","builder","Builder","pipeline","boost","extractor","uriExtractor","fieldExtractor","attachmentExtractor","isArray","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","soWild","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","sendsMatched","lowPriorityMatched","joined","protocolIndex","queryIndex","searchableFields","metadata","normalize","setDecryptedSends","fileData","ArrayBuffer","encryptFileData","parseFile","decSends","getDecryptedSends","legacyServerSendFileUpload","SendData","Keys","setSettings","getSettingsKey","setEquivalentDomains","setSettingsKey","getSettings","partialKeys","secureStorageService","stateMigrationService","useAccountCache","createGlobals","hasBeenInited","accountDiskCache","needsMigration","migrate","initAccountState","syncAccountFromDisk","storedActiveUser","activeUserId","pushAccounts","diskAccount","getAccountFromDisk","setAccountEnvironmentUrls","scaffoldNewAccountStorage","setActiveUser","clearDecryptedDataForActiveUser","deAuthenticateAccount","dynamicallySetActiveUser","removeAccountFromDisk","removeAccountFromMemory","getAccessToken","getTimeoutBasedStorageOptions","getAccount","setAccessToken","saveAccount","getAlwaysShowDock","defaultOnDiskOptions","alwaysShowDock","setAlwaysShowDock","getApiKeyClientId","apiKeyClientId","getApiKeyClientSecret","apiKeyClientSecret","autoConfirmFingerPrints","autoFillOnPageLoadDefault","setAutoFillOnPageLoadDefault","getBiometricAwaitingAcceptance","biometricAwaitingAcceptance","setBiometricAwaitingAcceptance","getBiometricFingerprintValidated","biometricFingerprintValidated","setBiometricFingerprintValidated","getBiometricLocked","biometricLocked","setBiometricText","biometricUnlock","setBiometricUnlock","setHasPremiumPersonally","hasPremiumFromOrganization","setHasPremiumFromOrganization","getClearClipboard","clearClipboard","setClearClipboard","collapsedGroupings","convertAccountToKeyConnector","cryptoMasterKey","defaultSecureStorageOptions","saveSecureStorageKey","getCryptoMasterKeyB64","setCryptoMasterKeyB64","getDecodedToken","setDecodedToken","defaultUriMatch","setDefaultUriMatch","getDisableAddLoginNotification","disableAddLoginNotification","setDisableAddLoginNotification","getDisableAutoBiometricsPrompt","disableAutoBiometricsPrompt","setDisableAutoBiometricsPrompt","getDisableAutoTotpCopy","disableAutoTotpCopy","setDisableAutoTotpCopy","getDisableBadgeCounter","disableBadgeCounter","setDisableBadgeCounter","getDisableChangedPasswordNotification","disableChangedPasswordNotification","setDisableChangedPasswordNotification","getDisableContextMenuItem","disableContextMenuItem","setDisableContextMenuItem","getDisableGa","disableGa","setDisableGa","getDontShowCardsCurrentTab","dontShowCardsCurrentTab","setDontShowCardsCurrentTab","getDontShowIdentitiesCurrentTab","dontShowIdentitiesCurrentTab","setDontShowIdentitiesCurrentTab","setEmail","setEmailVerified","getEnableAlwaysOnTop","accountPreference","enableAlwaysOnTop","globalPreference","setEnableAlwaysOnTop","getEnableAutoFillOnPageLoad","enableAutoFillOnPageLoad","setEnableAutoFillOnPageLoad","getEnableBiometric","enableBiometrics","setEnableBiometric","getEnableBrowserIntegration","enableBrowserIntegration","setEnableBrowserIntegration","getEnableBrowserIntegrationFingerprint","enableBrowserIntegrationFingerprint","setEnableBrowserIntegrationFingerprint","getEnableCloseToTray","enableCloseToTray","setEnableCloseToTray","enableGravitars","getEnableMinimizeToTray","enableMinimizeToTray","setEnableMinimizeToTray","getEnableStartToTray","enableStartToTray","setEnableStartToTray","getEnableTray","enableTray","setEnableTray","defaultOnDiskMemoryOptions","getEntityId","setEntityId","getEntityType","entityType","setEntityType","getGlobalEnvironmentUrls","everBeenUnlocked","getForcePasswordReset","setForcePasswordReset","getInstalledVersion","installedVersion","setInstalledVersion","getLastActive","lastSync","legacyEtmKey","getMainWindowSize","mainWindowSize","setMainWindowSize","getMinimizeOnCopyToClipboard","minimizeOnCopyToClipboard","setMinimizeOnCopyToClipboard","neverDomains","getNoAutoPromptBiometrics","noAutoPromptBiometrics","setNoAutoPromptBiometrics","getNoAutoPromptBiometricsText","noAutoPromptBiometricsText","setNoAutoPromptBiometricsText","getOpenAtLogin","openAtLogin","setOpenAtLogin","organizationInvitation","passwordGenerationOptions","getUsernameGenerationOptions","usernameGenerationOptions","setUsernameGenerationOptions","setProtectedPin","setRefreshToken","rememberedEmail","getSecurityStamp","setSecurityStamp","ssoOrganizationIdentifier","ssoState","setVaultTimeout","accountVaultTimeoutAction","globalVaultTimeoutAction","setVaultTimeoutAction","getStateVersion","setStateVersion","getWindow","setWindow","useMemory","storageLocation","getGlobalsFromMemory","useDisk","getGlobalsFromDisk","saveGlobalsToMemory","saveGlobalsToDisk","useSecureStorage","getAccountFromMemory","getUserIdFromMemory","cachedAccount","Memory","Both","Disk","saveAccountToMemory","saveAccountToDisk","deepClone","scaffoldNewAccountLocalStorage","scaffoldNewAccountSessionStorage","scaffoldNewAccountMemoryStorage","storedAccount","pruneInMemoryAccounts","requestedOptions","getActiveUserIdFromStorage","removeAccountFromLocalStorage","resetAccount","removeAccountFromSessionStorage","removeAccountFromSecureStorage","persistentAccountInformation","timeoutAction","v1Keys","autoConfirmFingerprints","enableBiometric","encPrivate","lastActive","ssoIdentifier","stamp","usesConnector","v1KeyPrefixes","currentStateVersion","getCurrentStateVersion","Latest","Two","migrateStateFrom2To3","Three","migrateStateFrom3To4","clearV1Keys","clearingUserId","keyPrefix","defaultAccount","accountSettings","cryptoMasterKeyAuto","cryptoMasterKeyB64","cryptoMasterKeyBiometric","authenticationStatus","authenticatedUserIds","Four","syncInProgress","toJSON","forceSync","allowThrowOnError","syncStarted","syncCompleted","needsSync","needsSyncing","syncProfile","syncFolders","syncCollections","syncCiphers","syncSends","syncSettings","syncPolicies","isEdit","localFolder","remoteFolder","shouldUpdate","localCipher","checkCollections","remoteCipher","localSend","remoteSend","OrganizationData","ProviderData","decoded","fromUrlB64ToUtf8","clientIdClientSecret","setClientId","setClientSecret","clearToken","storedToken","getTokenExpirationDate","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","email_verified","getIssuer","iss","amr","B32Chars","SteamChars","period","digits","keyB32","isOtpAuth","isSteamAuth","getQueryParams","digitParams","periodParam","algParam","epoch","timeHex","leftPad","decToHex","timeBytes","fromHexToArray","keyBytes","b32ToBytes","sign","offset","fullCode","trunc","isAutoCopyEnabled","b32ToHex","cleanedInput","bits","hex","byteIndex","chunk","signature","priority","selectedTwoFactorProviderType","twoFactorProvidersData","providerPriority","_value","setSelectedProvider","clearProviders","alreadyHashed","validateInput","VerifyOTPRequest","wordCapitalize","wordIncludeNumber","forwardedService","forwardedAnonAddyDomain","generateCatchall","generateSubaddress","generateForwarded","generateWord","word","zeroPad","atIndex","emailBeginning","emailEnding","subaddressString","randomString","catchallDomain","startString","forwardedSimpleLoginApiKey","generateSimpleLoginAlias","forwardedAnonAddyApiToken","generateAnonAddyAlias","forwardedFirefoxApiToken","generateFirefoxRelayAlias","charSet","redirect","Authentication","alias","apiToken","websiteNote","generated_for","full_address","lockedCallback","loggedOutCallback","startCheck","checkVaultTimeout","shouldLock","executeTimeoutAction","allowSoftLock","currentAction","vaultTimeoutSeconds","algorithm","wcLen","passwordBuf","toBuf","pbkdf2Params","toWebCryptoAlgorithm","impKey","importKey","deriveBits","ikm","outputByteSize","hkdfParams","prk","hashLen","infoBuf","infoArr","runningOkmLength","previousT","okm","md","forge","md5","sha1","valueBytes","toByteString","update","fromByteStringToArray","digest","valueBuf","signingAlgorithm","mac1","mac2","arr1","arr2","getBytes","rand","Uint32Array","util","createBuffer","putInt32","DecryptParameters","meta","encKeyByteString","macKeyByteString","decode64","parameters","dataBuffer","createDecipher","finish","rsaParams","impPrivateKey","jwkPrivateKey","exportKey","jwkPublicKeyParams","kty","ext","impPublicKey","modulusLength","publicExponent","generateKey","getRandomValues","encodeUtf8","fromBufferToByteString","styles","primary","secondary","danger","hoverStyles","BadgeDirective","badgeType","hasHoverEffects","nodeName","defaultIcon","BannerComponent","bannerType","BannerModule","buttonStyles","ButtonDirective","buttonType","block","defaultI18n","BitErrorSummary","getErrorCount","formGroup","errorCount","acc","nextId","BitErrorComponent","BitFormFieldComponent","ngAfterContentChecked","hasPrefix","prefixChildren","hasSuffix","suffixChildren","suffix","ariaDescribedBy","BitInputDirective","BitHintComponent","BitPrefixDirective","BitSuffixDirective","FormFieldModule","InputModule","PrefixClasses","ngControl","hasError","_required","hasValidator","touched","MenuDividerComponent","MenuItemDirective","role","tabIndex","MenuTriggerForDirective","overlay","isOpen","hasPopup","defaultMenuConfig","panelClass","hasBackdrop","backdropClass","scrollStrategy","scrollStrategies","reposition","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","withLockedPosition","withFlexibleDimensions","withPush","toggleMenu","destroyMenu","openMenu","disposeAll","menu","overlayRef","templatePortal","TemplatePortal","attach","closedEventsSub","getClosedEvents","keyDownEventsSub","keydownEvents","keyManager","onKeydown","detachments","escKey","backdropClick","menuClosed","mergeWith","dispose","MenuComponent","FocusKeyManager","menuItems","withWrap","TemplateRef","OverlayModule","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","O","chunkIds","notFulfilled","Infinity","fulfilled","getter","__esModule","definition","defineProperty","enumerable","globalThis","Function","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}