{"version":3,"file":"bootstrap.231d5fdd.chunk.js","mappings":"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A,cACA,YACA,qBACA,aACA,cACA,aACA,aACH,CAVD,CAAYA,IAAAA,EAAe,KAmB3B,SAAYC,GAER,gBACA,2BACA,iBACA,kBACA,aACA,eACA,gBACA,cACA,eACA,wCACA,wCACA,cACA,cACA,sBACA,aACA,gBACA,kBACA,YACA,wBACA,eACA,gBACA,0BACA,eACA,mBACA,qBACA,eACA,kBACA,iBACA,cACA,aACA,gBACA,kCACA,eACA,kBACA,cACA,kBACA,iBACA,cACA,gBACA,YACA,mBACA,wBACA,6BACA,mBACA,oBACA,iCACA,wCACA,iCACA,gBACA,2BACA,gCACA,2CACA,qBACA,eACA,iBACA,gCACA,6BAEA,mBACA,qBACA,eACA,eACA,eACA,cACA,eACA,eACA,kBACA,eACA,eACA,eACA,aACA,8BACA,gBACA,qBACA,gBACA,oBACA,eACA,gBACA,kBACA,gCACA,YACA,eACA,0CACA,aACA,qBACA,eACA,cACA,sBACA,eACA,gBACA,aACA,yBACA,eACA,eACA,gBACA,wBACA,qBACA,eACA,aACA,cACA,eACA,eACA,aACA,iBACA,cACA,iBACA,gBACA,cACA,qBACA,oBACA,eACA,eACA,YACA,YACA,eACA,mBACA,cACA,aACA,sCACA,cACA,aACA,cACA,kBACA,aACA,+CACA,2BACA,cACA,kBACA,cACA,eACA,eACA,eACA,aACA,qBACA,iBACA,kBACA,iBACA,kBACA,cACA,YACA,aACA,kBACA,iBACA,eACA,eACA,cACA,kBACA,eACA,kBACA,eACA,mBACA,aACA,eACA,cACA,YACA,iBACA,cACA,gBACA,aACA,eACA,eACA,cACA,cACA,oBACA,kBACA,6BACA,oBACA,eACA,cACA,kBACA,oBACA,gBACA,gBACA,eACA,oBACA,oDACA,aACA,aACA,gBACA,iBACA,cACA,mBACA,aACA,gBACA,YACA,eACA,cACA,cACA,kBACA,gBACA,oBACA,cACA,kBACA,eACA,4BACA,sBACA,sBACA,aACA,cACA,gBAEA,iBACA,mBACA,sBACA,oBACA,YACA,qCACA,YACA,gBACA,wBACA,gCACA,qBACA,sBACA,aACA,YACA,wBACA,wBACA,gBACA,aACA,uBACA,eACA,aACA,cACA,4CACA,eACA,yBACA,aAEA,aAEA,aACH,CAzOD,CAAYA,IAAAA,EAAO,KA2OZ,MAAMC,EAAwB,CACjC,CAAE1L,KAAM,cAAetH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC1E,CAAEtK,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC5E,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACtE,CAAE5L,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MACzF,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,IAC5C,CAAE3L,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACzE,CAAE5L,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACtE,CAAE5L,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,cAAetB,OAAQmB,EAAgBlB,MACjF,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,yBAA0BtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrF,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC5E,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC3E,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,2BAA4BtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvF,CAAEtK,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACnE,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBK,IACpE,CAAE7L,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,qCAAsCtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACjG,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC5E,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,iBAAkBtH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MAChG,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACvF,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,oBAAqBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAChF,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACvF,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,mBAAoBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC/E,CAAEtK,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC5E,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACvF,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBM,IACrE,CAAE9L,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MACzF,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACxE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACtF,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACxE,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC5E,CAAEtK,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC3E,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MACzF,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACnE,CAAEtK,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACnE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,cAAetB,OAAQmB,EAAgBlB,MACjF,CAAEtK,KAAM,cAAetH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC1E,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACrF,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBO,IACpE,CAAE/L,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,0CAA2CtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtG,CAAEtK,KAAM,sBAAuBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAClF,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACzE,CAAE5L,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACtF,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC5E,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACzF,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MAC5F,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACxE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACnE,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACxE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACtE,CAAE5L,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,cAAetH,KAAM,KAAMiT,UAAW,cAAetB,OAAQmB,EAAgBlB,MACrF,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACtF,CAAEtK,KAAM,cAAetH,KAAM,KAAMiT,UAAW,IAC9C,CAAE3L,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACnE,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACxE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MACxF,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACxF,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBQ,IACrE,CAAEhM,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC3E,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,wBAAyBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpF,CAAEtK,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC3E,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACzE,CAAEtK,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC3E,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MAC1F,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MAC1F,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC3E,CAAEtK,KAAM,+CAAgDtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC3G,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACrF,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,YAAatH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACxE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,oBAAqBtB,OAAQmB,EAAgBlB,MACtF,CAAEtK,KAAM,cAAetH,KAAM,KAAMiT,UAAW,sBAAuBtB,OAAQmB,EAAgBlB,MAC7F,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACnE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACtE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACzE,CAAE5L,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IAC3E,CAAE5L,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACtE,CAAE5L,KAAM,aAActH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBI,IACzE,CAAE5L,KAAM,uBAAwBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACnF,CAAEtK,KAAM,iBAAkBtH,KAAM,KAAMiT,UAAW,cAAetB,OAAQmB,EAAgBlB,MACxF,CAAEtK,KAAM,iBAAkBtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MAC7E,CAAEtK,KAAM,QAAStH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACpE,CAAEtK,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACrE,CAAEtK,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,GAAItB,OAAQmB,EAAgBlB,MACvE,CAAEtK,KAAM,iBAAkBtH,KAAM,KAAMiT,UAAW,IACjD,CAAE3L,KAAM,eAAgBtH,KAAM,KAAMiT,UAAW,IAC/C,CAAE3L,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,IACvC,CAAE3L,KAAM,gCAAiCtH,KAAM,KAAMiT,UAAW,IAChE,CAAE3L,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,IACvC,CAAE3L,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,IAC3C,CAAE3L,KAAM,mBAAoBtH,KAAM,KAAMiT,UAAW,IACnD,CAAE3L,KAAM,2BAA4BtH,KAAM,KAAMiT,UAAW,IAC3D,CAAE3L,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAW,IAChD,CAAE3L,KAAM,iBAAkBtH,KAAM,KAAMiT,UAAW,IACjD,CAAE3L,KAAM,QAAStH,KAAM,KAAMiT,UAAW,IACxC,CAAE3L,KAAM,OAAQtH,KAAM,KAAMiT,UAAW,IACvC,CAAE3L,KAAM,mBAAoBtH,KAAM,KAAMiT,UAAW,IACnD,CAAE3L,KAAM,mBAAoBtH,KAAM,KAAMiT,UAAW,IACnD,CAAE3L,KAAM,WAAYtH,KAAM,KAAMiT,UAAW,IAC3C,CAAE3L,KAAM,QAAStH,KAAM,KAAMiT,UAAW,IACxC,CAAE3L,KAAM,kBAAmBtH,KAAM,KAAMiT,UAAW,IAClD,CAAE3L,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,IAC1C,CAAE3L,KAAM,QAAStH,KAAM,KAAMiT,UAAW,IACxC,CAAE3L,KAAM,SAAUtH,KAAM,KAAMiT,UAAW,IACzC,CAAE3L,KAAM,uCAAwCtH,KAAM,KAAMiT,UAAW,IACvE,CAAE3L,KAAM,UAAWtH,KAAM,KAAMiT,UAAW,IAC1C,CAAE3L,KAAM,oBAAqBtH,KAAM,KAAMiT,UAAW,IACpD,CAAE3L,KAAM,QAAStH,KAAM,KAAMiT,UAAW,IACxC,CAAE3L,KAAM,gBAAiBtH,KAAM,KAAMiT,UAAWH,EAAgBf,MAChE,CAAEzK,KAAM,SAAUtH,KAAM,KAAMiT,UAAWH,EAAgBf,MACzD,CAAEzK,KAAM,SAAUtH,KAAM,KAAMiT,UAAWH,EAAgBf,MACzD,CAAEzK,KAAM,SAAUtH,KAAM,KAAMiT,UAAWH,EAAgBf,OAGhDwB,EAAoD,CAC7D,CAACT,EAAgBf,MAAO,CACpBgB,EAAQS,GACRT,EAAQU,GACRV,EAAQW,GACRX,EAAQY,GACRZ,EAAQa,GACRb,EAAQc,GACRd,EAAQe,GACRf,EAAQgB,GACRhB,EAAQiB,GACRjB,EAAQkB,GACRlB,EAAQmB,GACRnB,EAAQoB,GACRpB,EAAQqB,GACRrB,EAAQsB,GACRtB,EAAQuB,GACRvB,EAAQwB,GACRxB,EAAQyB,GACRzB,EAAQ0B,GACR1B,EAAQ2B,GACR3B,EAAQ4B,GACR5B,EAAQ6B,GACR7B,EAAQ8B,GACR9B,EAAQ+B,GACR/B,EAAQgC,GACRhC,EAAQiC,GACRjC,EAAQkC,GACRlC,EAAQmC,GACRnC,EAAQoC,GACRpC,EAAQqC,GACRrC,EAAQsC,GACRtC,EAAQuC,GACRvC,EAAQwC,GACRxC,EAAQyC,GACRzC,EAAQ0C,GACR1C,EAAQ2C,GACR3C,EAAQ4C,GACR5C,EAAQ6C,GACR7C,EAAQ8C,GACR9C,EAAQ+C,GACR/C,EAAQgD,GACRhD,EAAQiD,GACRjD,EAAQkD,GACRlD,EAAQmD,GACRnD,EAAQoD,GACRpD,EAAQqD,GACRrD,EAAQsD,GACRtD,EAAQuD,GACRvD,EAAQwD,GACRxD,EAAQyD,GACRzD,EAAQ0D,GACR1D,EAAQ2D,GACR3D,EAAQ4D,GACR5D,EAAQ6D,IAEZ,CAAC9D,EAAgBlB,MAAO,CACpBmB,EAAQ8D,GACR9D,EAAQ+D,GACR/D,EAAQgE,GACRhE,EAAQiE,GACRjE,EAAQkE,GACRlE,EAAQmE,GACRnE,EAAQoE,GACRpE,EAAQqE,GACRrE,EAAQsE,GACRtE,EAAQuE,GACRvE,EAAQwE,GACRxE,EAAQyE,GACRzE,EAAQ0E,GACR1E,EAAQ2E,GACR3E,EAAQ4E,GACR5E,EAAQ6E,GACR7E,EAAQ8E,GACR9E,EAAQ+E,GACR/E,EAAQgF,GACRhF,EAAQiF,GACRjF,EAAQkF,GACRlF,EAAQmF,GACRnF,EAAQoF,GACRpF,EAAQqF,GACRrF,EAAQsF,GACRtF,EAAQuF,GACRvF,EAAQwF,GACRxF,EAAQyF,GACRzF,EAAQ0F,GACR1F,EAAQ2F,GACR3F,EAAQ4F,GACR5F,EAAQ6F,GACR7F,EAAQG,GACRH,EAAQ8F,GACR9F,EAAQ+F,GACR/F,EAAQgG,GACRhG,EAAQiG,GACRjG,EAAQkG,GACRlG,EAAQmG,GACRnG,EAAQoG,GACRpG,EAAQqG,GACRrG,EAAQsG,GACRtG,EAAQuG,GACRvG,EAAQwG,GACRxG,EAAQyG,GACRzG,EAAQ0G,GACR1G,EAAQ2G,GACR3G,EAAQ4G,GACR5G,EAAQ6G,GACR7G,EAAQ8G,GACR9G,EAAQ+G,GACR/G,EAAQgH,GACRhH,EAAQiH,GACRjH,EAAQkH,GACRlH,EAAQmH,GACRnH,EAAQoH,GACRpH,EAAQqH,GACRrH,EAAQsH,GACRtH,EAAQuH,GACRvH,EAAQwH,GACRxH,EAAQyH,GACRzH,EAAQ0H,GACR1H,EAAQ2H,GACR3H,EAAQ4H,GACR5H,EAAQ6H,GACR7H,EAAQ8H,GACR9H,EAAQ+H,GACR/H,EAAQgI,GACRhI,EAAQiI,GACRjI,EAAQkI,GACRlI,EAAQmI,GACRnI,EAAQoI,GACRpI,EAAQqI,GACRrI,EAAQsI,GACRtI,EAAQuI,GACRvI,EAAQwI,GACRxI,EAAQyI,GACRzI,EAAQ0I,GACR1I,EAAQ2I,GACR3I,EAAQ4I,GACR5I,EAAQ6I,GACR7I,EAAQ8I,GACR9I,EAAQ+I,GACR/I,EAAQgJ,GACRhJ,EAAQiJ,GACRjJ,EAAQkJ,GACRlJ,EAAQmJ,GACRnJ,EAAQoJ,GACRpJ,EAAQqJ,GACRrJ,EAAQsJ,GACRtJ,EAAQuJ,GACRvJ,EAAQwJ,GACRxJ,EAAQyJ,GACRzJ,EAAQ0J,GACR1J,EAAQ2J,GACR3J,EAAQ4J,GACR5J,EAAQ6J,GACR7J,EAAQ8J,GACR9J,EAAQ+J,GACR/J,EAAQgK,GACRhK,EAAQiK,GACRjK,EAAQkK,GACRlK,EAAQmK,GACRnK,EAAQoK,GACRpK,EAAQqK,GACRrK,EAAQsK,GACRtK,EAAQuK,GACRvK,EAAQwK,GACRxK,EAAQyK,GACRzK,EAAQ0K,GACR1K,EAAQ2K,GACR3K,EAAQ4K,GACR5K,EAAQ6K,GACR7K,EAAQ8K,GACR9K,EAAQ+K,GACR/K,EAAQgL,GACRhL,EAAQiL,GACRjL,EAAQkL,GACRlL,EAAQmL,GACRnL,EAAQoL,GACRpL,EAAQqL,GACRrL,EAAQsL,GACRtL,EAAQuL,GACRvL,EAAQwL,GACRxL,EAAQyL,GACRzL,EAAQ0L,GACR1L,EAAQ2L,GACR3L,EAAQ4L,GACR5L,EAAQ6L,IAEZ,CAAC9L,EAAgB+L,MAAO,CACpB9L,EAAQqE,GACRrE,EAAQuF,GACRvF,EAAQ2F,GACR3F,EAAQgH,GACRhH,EAAQiH,GACRjH,EAAQoH,GACRpH,EAAQuH,GACRvH,EAAQ4H,GACR5H,EAAQ8H,GACR9H,EAAQsJ,IAEZ,CAACvJ,EAAgBgM,KAAM,CACnB/L,EAAQgM,GACRhM,EAAQiM,GACRjM,EAAQkM,GACRlM,EAAQmM,GACRnM,EAAQoM,GACRpM,EAAQqM,GACRrM,EAAQsM,GACRtM,EAAQuM,GACRvM,EAAQwM,GACRxM,EAAQyM,GACRzM,EAAQ0M,GACR1M,EAAQ2M,GACR3M,EAAQ4M,GACR5M,EAAQ6M,GACR7M,EAAQ8M,GACR9M,EAAQ+M,GACR/M,EAAQgN,GACRhN,EAAQiN,GACRjN,EAAQkN,GACRlN,EAAQmN,GACRnN,EAAQoN,GACRpN,EAAQqN,GACRrN,EAAQsN,GACRtN,EAAQuN,GACRvN,EAAQwN,GACRxN,EAAQyN,IAEZ,CAAC1N,EAAgBI,IAAK,CAClBH,EAAQ0N,GACR1N,EAAQ2N,GACR3N,EAAQ4N,GACR5N,EAAQ6N,GACR7N,EAAQ8N,GACR9N,EAAQ+N,GACR/N,EAAQgO,GACRhO,EAAQiO,GACRjO,EAAQkO,IAEZ,CAACnO,EAAgBO,IAAK,CAACN,EAAQM,IAC/B,CAACP,EAAgBQ,IAAK,CAACP,EAAQO,IAC/B,CAACR,EAAgBK,IAAK,CAACJ,EAAQI,IAC/B,CAACL,EAAgBM,IAAK,CAACL,EAAQK,KAGtB8N,EAAsD,CAC/DC,UAAW,CACPpO,EAAQ2J,GACR3J,EAAQiC,GACRjC,EAAQ+D,GACR/D,EAAQqO,GACRrO,EAAQ4N,GACR5N,EAAQsO,GACRtO,EAAQ0E,GACR1E,EAAQuO,GACRvO,EAAQkM,GACRlM,EAAQgG,GACRhG,EAAQwO,GACRxO,EAAQsG,GACRtG,EAAQuG,GACRvG,EAAQyG,GACRzG,EAAQ0G,GACR1G,EAAQyO,GACRzO,EAAQsH,GACRtH,EAAQwH,GACRxH,EAAQsM,GACRtM,EAAQ8N,GACR9N,EAAQuM,GACRvM,EAAQuC,GACRvC,EAAQ4I,GACR5I,EAAQoM,GACRpM,EAAQ+N,GACR/N,EAAQ4M,GACR5M,EAAQiN,GACRjN,EAAQuJ,GACRvJ,EAAQgN,GACRhN,EAAQ8J,GACR9J,EAAQkD,GACRlD,EAAQmD,GACRnD,EAAQyN,GACRzN,EAAQ6K,GACR7K,EAAQgO,GACRhO,EAAQmN,GACRnN,EAAQoN,GACRpN,EAAQiO,GACRjO,EAAQ0N,GACR1N,EAAQkO,GACRlO,EAAQwN,GACRxN,EAAQqL,GACRrL,EAAQI,GACRJ,EAAQM,GACRN,EAAQ2H,GACR3H,EAAQO,GACRP,EAAQ2N,GACR3N,EAAQ6N,GACR7N,EAAQmH,GACRnH,EAAQkB,KAIuB,+BAChCV,GACA2N,iCC3tBA,SAASO,EAAMC,GAClB,OAAO,IAAInd,SAAQpE,GAAWwhB,WAAWxhB,EAASuhB,IACtD,0GCAYE,cAAZ,SAAYA,GACR,gBACA,eACH,CAHD,CAAYA,IAAAA,EAAO,KAKZ,MAAMC,EAAwB,CACjC,CAAC,IAAInU,KAAM,yCACX,CAAC,IAAII,MAAO,sCAGHgU,EAAsB,CAC/B,CAAC,IAAIpU,KAAM,2BACX,CAAC,IAAII,MAAO,wBAGHiU,EAA4B,CACrC,CAAC,IAAIrU,KAAM,+BACX,CAAC,IAAII,MAAO,4BAGHkU,EAAwB,CACjC,CAACJ,EAAQK,OAAQ,CACb,CAAC,IAAIvU,KAAM,2CACX,CAAC,IAAII,MAAO,wCAEhB,CAAC8T,EAAQM,OAAQ,CACb,CAAC,IAAIxU,KAAM,0CACX,CAAC,IAAII,MAAO,wCCpBPqU,EAA0B,EACnCC,UACAC,SACAC,kBAMA,IAAIC,EAAWH,EAMf,GAwBG,SAAgBA,GAMnB,QALoB,CAChB,CAAC,IAAItU,MAAO,IAAIA,KAChB,CAAC,IAAID,SAAU,IAAIA,SAGJuU,EACvB,CAnCQI,CAAOJ,KACPG,EAAW,IAAIzU,MAGfwU,EAAa,CACb,MAAM3Q,EAAS8Q,EAAaH,GAC5B,OAAOD,EAAO1Q,GAAQ4Q,IAAaF,EAAO1Q,GAAQ,IAAIjE,KAG1D,OAAO2U,EAAOE,IAAaF,EAAO,IAAI3U,IAAI,EAGjCgV,EAA0BN,GAC5BD,EAAwB,CAAEC,UAASC,OAAQR,IAGzCc,EAAwBP,GAC1BD,EAAwB,CAAEC,UAASC,OAAQP,IAGzCc,EAA8BR,GAChCD,EAAwB,CAAEC,UAASC,OAAQN,IAGzCc,EAAyB,CAACT,EAAiBE,IAC7CH,EAAwB,CAAEC,UAASE,cAAaD,OAAQL,IAY5D,MAAMS,EAAgBH,GAEL,OAAhBA,EACOV,EAAQM,MAGZN,EAAQK,iQC7DZ,MAAMa,EAAcC,GAA0B,CAACC,EAAiBD,IAC5DC,EAGEC,EAAa,SCJb,EAAcF,GAAgC,CAACC,EAAuBD,IACxEC,EAGE,EAAa,eCJb,EAAa,CAACD,EAAmC,CAAC,IAAM,CAACC,EAA4BD,IACvFC,EAGE,EAAa,gHCWnB,MAAME,EAAyB,CAACC,EAAqBC,KACxD,MAAMC,EAA2B,CAAC,KAC5BC,GAAiB,EAAAC,EAAA,KAEjBC,GAAc,QAAgBL,GAEpC,IAAIM,EAAmB,KAEnB,KAAiBC,cACjBL,EAAW5Z,MACP,IAAAka,cAAa,CACTC,WAAW,KAKnB,KAAiBC,kBACjBJ,EAAmBK,OAA6C,sCAAK,MAGzE,MAAMC,GAAQ,QAAYP,EAAaC,GAAiB,WAAmBJ,EAAYC,KAGvF,OAFAA,EAAeU,KAAI,EAAAC,EAAA,MAAgBb,IAE5BW,CAAK,EC/BD,MAAMG,EAQjB,WAAAC,CAAYC,GALJ,KAAAC,SAAmB,EAGnB,KAAAC,KAAoB,KAMrB,KAAAC,QAAU,KACblhB,KAAK0gB,MAAQ,KACb1gB,KAAKghB,SAAU,EAEXhhB,KAAKihB,OACLjhB,KAAKihB,KAAKC,UACVlhB,KAAKmhB,WAAa,OAIlB,KAAAC,aAAe,EAAGC,oBAAmBC,mBAAkBC,sBAG3D,MAAMC,EAAOxhB,KACb,MAAO,CAACyhB,EAAmBC,KACvB,GAAIF,EAAKR,QACL,MAAM,IAAItkB,MAAM,+BAGpB8kB,EAAKR,SAAU,EACfQ,EAAKL,WAAaM,EAClBD,EAAKd,MAAQb,EAAuB0B,EAAiBD,GACrD,MAAML,GAAO,OAAWO,EAAKL,YAC7BK,EAAKP,KAAOA,EACZA,EAAKU,OACD,gBAAC,KAAQ,CAACjB,MAAOc,EAAKd,OAClB,gCAAGW,KAGPK,GACAA,IAEP,EAnCD1hB,KAAK4hB,MAAQ5hB,KAAKohB,aAAaL,EACnC,0ZCDG,MAqBDc,EAAuBC,GAA4C,OAAD,mCACpE,IAAIC,EAAsB,CAAC,EAC3B,IACIA,QAA4BC,MAA2C,QAArC,EAAAF,EAAOG,aAAa,YAAiB,QAAI,YAE3E,IAAYC,KAAK,CACbxhB,IAAKohB,EAAO/C,QACZgD,wBAGZ,IAQMI,EAAkCC,IANlB,IAACC,EAOnB,IAAsBC,UAAU,CAC5BD,qBAReA,EAQoBD,EAAgBC,oBAPhD,EAAAE,oBACD,KAAgBC,wBAChBH,IAMJ,moBC9CN,MAAQzC,WAAY6C,EAAkBhD,WAAYiD,GAAqB,GAC/D9C,WAAY+C,EAAwBlD,WAAYmD,GAA2B,GAC3EhD,WAAYiD,EAA6BpD,WAAYqD,GAAgC,EAsCvFC,EAAiCjB,GAA+C,oCAClF,MAAMkB,EAAqC,CAAClB,EAAOmB,YAAY/mB,KAAK+H,IAChE,MAAMif,EAA0B,KAAcjf,GAAMif,WACpD,OAAO,SAEiC,KAAcA,eACrD,IAGCC,QAAkCjiB,QAAQ2E,IAAImd,GAC9CI,EAAgCD,EAAQjnB,KAAKa,GACxCA,EAAOsmB,gBAAgBvB,EAAOmB,cAIzC,aAFM/hB,QAAQ2E,IAAIud,GAEXD,CACX,ICpEA,EDgB8B,CAC1Bf,EACAkB,EAAsC,CAAC,IACd,oCACzB,MAAM,aAAErB,GAAuCG,EAAtBmB,EAAiB,EAAKnB,EAAzC,kBACAoB,IAA2BF,EAAiBG,YAElD,IAAIC,EAA0B,CAC1B,CAACjB,GAAmBC,EAAiBa,GACrC,CAACZ,GAAyBC,EAAuBX,GACjD,CAACY,GAA8BC,EAA4BQ,EAAiBK,oBAGhF,MAAMR,QAAkCJ,EAAwBQ,QDbnC,EAC7BnB,EACAoB,IACgB,OAAD,6BACf,IAAqBlB,UAAU,CAAEsB,QAASJ,EAAeK,KAAMzB,EAAgByB,OAE3EL,IACA,IAAsB1iB,yBAChB,IAAkBA,yBAClB,KAAsBA,yBACtB,IAA0BA,mBAChC,IAAYgjB,YAAW,IAG3B3B,EAA+BC,SACzBP,EAAcO,EACxB,ICFU2B,CAAkB3B,EAAiBoB,GAGzC,MAAMnC,EAAmC8B,EAAQjnB,KAAI,CAACa,EAAQwF,IAAQ,gBAACxF,EAAOinB,UAAS,CAACzhB,IAAKA,MACvF+e,EAAmB6B,EAAQjnB,KAAI,EAAG+nB,cAAeA,IACjD1C,EAA6B4B,EAC9BjnB,KAAI,EAAGgoB,WAAUC,kBAAoBX,EAAgBW,EAAeD,IACpElhB,QAAO,CAAC8c,EAAUsE,IACR,OAAP,wBACOtE,GACAsE,IAERV,GAEP,OAAO,IAAI7C,EAAa,CACpBQ,oBACAC,mBACAC,mBAER,kIEhDO,MAAM8C,EAA+B,CACxCC,SAAU,YAGd,IAAYC,GAAZ,SAAYA,GACR,qBACH,CAFD,CAAYA,IAAAA,EAAsC,KAI3C,MAAMC,EAAsF,CAC/F,CAACD,EAAuCE,UAAW,CAC/C,CAAC,KAAellB,MAAO,IAAuB,KAAeA,MAC7D,CAAC,KAAeC,KAAM,IAAuB,KAAeA,qBCR7D,MAIMklB,EAA+B,EAAEzgB,EAAM0gB,MAChD,MAAMC,EAAeJ,EAAkCvgB,GAEvD,GAAI2gB,EAAc,CAGd,MAAO,CAAC3gB,EAFW0gB,EAAME,MAAM,MACE3oB,KAAI4oB,IAAM,MAAC,OAAiB,QAAjB,EAAAF,EAAaE,UAAI,QAAIA,CAAG,IAAEC,KAAK,OAG/E,MAAO,CAAC9gB,EAAM0gB,EAAM,kVCGjB,MAAMK,EAAY,CACrBC,EAA8B,KAC9BllB,IAC6BmlB,IAE7B,SAASC,EAAaC,GAClB,MAAM,GAA0BA,EAAlBC,EAAa,EAAKD,EAA1B,OACN,OAAO,gBACHF,EAAW,OAAF,wBACFG,GAAa,CAEhBC,qBAAsBC,EACtB,4BAAAC,CAA6BjjB,EAAwBkjB,GACjD,MAAMC,ED5Be,EAACD,EAAuC,CAAC,KACvE,IAAAE,OAAMF,EAAoBpB,GC2BqBuB,CAA0BH,GAC1DI,GAAoB,IAAAC,YACtB,IAAAC,SAAQL,GACHxpB,IAAIwoB,GACJxoB,KAAK8pB,GAAS,CAACA,EAAK,GAAIT,EAAES,EAAK,QAExC,OACI,wBACIC,UAAU,wBACVC,wBAAyB,CAAEC,OAAQZ,EAAEhjB,EAAKsjB,KAGtD,IAGZ,CAGA,OAFAV,EAAavc,YAAcsc,EAAUtc,aAE9B,QAAcqc,EAAYllB,EAA1B,CAAmColB,EAAoE,mFClD3G,MAAMiB,EAAwB,CACjC,IAAwBC,aACxB,IAAwBC,uBAGfC,EAAa,CACtBC,mBAAoB,oBACpBC,qBAAsB,8BACtBC,0BAA2B,2BAC3BC,sBAAuB,uBACvBC,mCAAoC,oCACpCC,yCAA0C,2CAGjCC,EAAoB,CAC7BC,IAAK,eACLC,OAAQ,sEClBL,MAAMC,EAA2B,wFCEjC,MAAMC,EAAyB,WACzBC,EAAoB,KAGpBC,EAAkB,CAAC,KAAe/nB,GAAI,KAAeyJ,uFCD3D,MAAMue,EAAsD,CAC/D,CAAC,KAAehoB,IAAK,qBACrB,CAAC,KAAeE,MAAO,WACvB,CAAC,KAAeD,KAAM,gBACtB,CAAC,KAAeI,QAAS,kBACzB,CAAC,KAAeyJ,KAAM,MACtB,CAAC,KAAeC,QAAS,SACzB,CAAC,KAAeH,KAAM,MACtB,CAAC,KAAeC,SAAU,UAC1B,CAAC,KAAeG,UAAW,YAC3B,CAAC,KAAeC,SAAU,WAC1B,CAAC,KAAege,OAAQ,QACxB,CAAC,KAAe3nB,QAAS,gBACzB,CAAC,KAAemJ,MAAO,mBACvB,CAAC,KAAetJ,KAAM,oBACtB,CAAC,KAAeC,KAAM,gBACtB,CAAC,KAAesJ,MAAO,cACvB,CAAC,KAAeQ,QAAS,mBAGhBge,EAAkE,CAC3E,CAAC,KAAeloB,IAAK,CACjB4E,KAAMojB,EAAuB,KAAehoB,IAC5CmoB,YAAY,EACZC,UAAW,KAA+BC,OAE9C,CAAC,KAAenoB,MAAO,CACnB0E,KAAMojB,EAAuB,KAAe9nB,MAC5CooB,YAAa,wCACbH,YAAY,EACZC,UAAW,KAA+BG,KAE9C,CAAC,KAAetoB,KAAM,CAClB2E,KAAMojB,EAAuB,KAAe/nB,KAC5CqoB,YAAa,uCACbH,YAAY,EACZC,UAAW,KAA+BI,KAE9C,CAAC,KAAenoB,QAAS,CACrBuE,KAAMojB,EAAuB,KAAe3nB,QAC5C8nB,YAAY,EACZC,UAAW,KAA+B/nB,QAE9C,CAAC,KAAeyJ,KAAM,CAClBlF,KAAMojB,EAAuB,KAAele,KAC5Cqe,YAAY,EACZC,UAAW,KAA+Bte,KAE9C,CAAC,KAAeC,QAAS,CACrBnF,KAAMojB,EAAuB,KAAeje,QAC5Coe,YAAY,EACZC,UAAW,KAA+Bre,QAE9C,CAAC,KAAeH,KAAM,CAClBhF,KAAMojB,EAAuB,KAAepe,KAC5Cue,YAAY,EACZC,UAAW,KAA+Bxe,KAE9C,CAAC,KAAeC,SAAU,CACtBjF,KAAMojB,EAAuB,KAAene,SAC5Cse,YAAY,EACZC,UAAW,KAA+Bve,SAE9C,CAAC,KAAeG,UAAW,CACvBpF,KAAMojB,EAAuB,KAAehe,UAC5Cme,YAAY,EACZC,UAAW,KAA+Bpe,UAE9C,CAAC,KAAeie,OAAQ,CACpBrjB,KAAMojB,EAAuB,KAAeC,OAC5CE,YAAY,EACZC,UAAWK,OAAO,KAAeR,OAAOS,eAE5C,CAAC,KAAeze,SAAU,CACtBrF,KAAMojB,EAAuB,KAAe/d,SAC5Cke,YAAY,EACZC,UAAW,KAA+Bne,SAE9C,CAAC,KAAe3J,QAAS,CACrBsE,KAAMojB,EAAuB,KAAe1nB,QAC5C6nB,YAAY,EACZC,UAAWK,OAAO,KAAenoB,QAAQooB,eAE7C,CAAC,KAAejf,MAAO,CACnB7E,KAAMojB,EAAuB,KAAeve,MAC5C0e,YAAY,EACZC,UAAW,KAA+B3e,MAE9C,CAAC,KAAetJ,KAAM,CAClByE,KAAMojB,EAAuB,KAAe7nB,KAC5CgoB,YAAY,EACZG,YAAa,wCACbF,UAAWK,OAAO,KAAetoB,KAAKuoB,eAE1C,CAAC,KAAetoB,KAAM,CAClBwE,KAAMojB,EAAuB,KAAe5nB,KAC5C+nB,YAAY,EACZG,YAAa,uCACbF,UAAWK,OAAO,KAAeroB,KAAKsoB,eAE1C,CAAC,KAAehf,MAAO,CACnB9E,KAAMojB,EAAuB,KAAete,MAC5Cye,YAAY,EACZC,UAAWK,OAAO,KAAe/e,MAAMgf,eAE3C,CAAC,KAAexe,QAAS,CACrBtF,KAAMojB,EAAuB,KAAe9d,QAC5Cie,YAAY,EACZC,UAAWK,OAAO,KAAeve,QAAQwe,gEC9G1C,MAAMC,EAAkC,CAC3CnjB,cAAM,GAAWojB,UACjBC,UAAW,uCACXC,+BAA+B,EAC/BC,sBAAuB,CACnBC,GAAI,cACJ5gB,OAAQ,KACR6gB,IAAK,2CACLC,KAAM,CACFC,UAAW,uCACXloB,OAAQ,uCACRmoB,aAAc,QACdC,aAAc,uCACdC,eAAgB,eAGxBC,uBAAwB,CACpB,CACIJ,UAAW,uCACXloB,OAAQ,uCACRmoB,aAAc,QACdC,aAAc,uCACdC,eAAgB,cAEpB,CACIH,UAAW,uCACXloB,OAAQ,uCACRmoB,aAAc,MACdC,aAAc,sBACdC,eAAgB,kBAEpB,CACIH,UAAW,uCACXloB,OAAQ,uCACRmoB,aAAc,SACdC,aAAc,YACdC,eAAgB,mBAEpB,CACIH,UAAW,QACXloB,OAAQ,QACRmoB,aAAc,gBACdC,aAAc,YACdC,eAAgB,UAGxBE,qBAAsB,iHAoBIb,EAAiBa,sICpD/C,MAAMC,EAAmBC,IAA+C,CACpEC,YAAcC,GAAkC,OAAD,wBACxCA,GAAQ,CACXC,MAAOH,EAAsB,UAAY,8BAE7CI,KAAOF,GAAkC,OAAD,wBACjCA,GAAQ,CACXG,WAAYL,EAAsB,UAAY,qCAC9CM,OAAQ,sBAEZC,QAAUL,GAAkC,OAAD,wBACpCA,GAAQ,CACXM,gBAAiB,cACjBC,aAAc,EACdC,UAAW,OACXP,MAAOH,EAAsB,UAAY,4BACzCW,YAAa,UACb,SAAU,OAAF,wBACDT,EAAS,WAAS,CACrBS,YAAa,cAGrBC,OAAQ,CAACV,EAA8BtJ,IAAW,OAAD,wBAC1CsJ,GAAQ,CACXC,MAAOH,EAAsB,OAAS,4BACtCQ,gBAAiB5J,EAAMiK,WACjB,UACAb,EAAsB,UAAY,qCACxC,SAAU,OAAF,wBACDE,EAAS,WAAS,CACrBM,gBAAiB,gBAKtB,MAAMM,UAAsB,gBAAnC,kCAoCY,KAAAC,cAAiBH,IAIrB3pB,KAAKolB,MAAM2E,MAAMC,SAASL,EAAOhF,MAAM,CAwB/C,CA/DW,MAAAhD,GACH,MAAM,oBACFoH,EAAmB,KACnBkB,EACAzE,6BAA8B0E,EAAY,gBAC1CC,GACAnqB,KAAKolB,MAEHgF,GAAoB,QAAa,mBAAoBrB,GACrDsB,EAAoBH,EAAalqB,KAAKsqB,eACtCC,EAAmBN,EAAKroB,OAASqoB,EAAKO,aACtChjB,EAAe+iB,EAAmBL,EAAa,GAAGC,IAAkBF,EAAKroB,MAAM2F,WAAa,GAC5F0e,EAAoBsE,EACpB,GAAGH,aAA6BA,yBAChC,GAAGA,YAET,OACI,uBAAKnE,UAAWmE,GACZ,uBAAKnE,UAAW,GAAGmE,YAA6BC,GAChD,uBAAKpE,UAAW,GAAGmE,gBACf,gBAAC,KAAM,CACHK,YAAY,GACZC,mBAAiB,EACjB3qB,QAASC,KAAK2qB,iBACdX,SAAUhqB,KAAK8pB,cACfc,gBAAgB,mBAChB3E,UAAWA,EACX4E,OAAQ/B,EAAgBC,KAE5B,uBAAK9C,UAAW,GAAGmE,YAA6B5iB,IAIhE,CASQ,WAAA8iB,GACJ,MAAM,MAAEP,EAAK,gBAAEI,GAAoBnqB,KAAKolB,MACxC,MAAO,GAAG+E,IAAkBJ,EAAM9lB,MACtC,CAEQ,cAAA0mB,GACJ,MAAM,WACFG,EAAU,sBACVC,EACAvF,6BAA8B0E,GAC9BlqB,KAAKolB,MACT,OAAO0F,EAAW5uB,KACd,CAACgH,EAAcsM,KAKJ,CAAEmV,MAAOzhB,EAAM8nB,MAJAd,EAClB,GAAGlqB,KAAKsqB,iBAAiBS,IAAwBvb,EAAQ,IACzD,CAAEyb,aAAc/nB,OAKhC,EAGJ,SAAe,QAAf,CAA2B2mB,GChHpB,MAAMqB,UAAoB,YACtB,MAAAvJ,GACH,MAAM,oBACFoH,EAAmB,KACnBkB,EAAI,MACJF,EAAK,gBACLI,EACA3E,6BAA8B0E,GAC9BlqB,KAAKolB,MAEHa,GAAY,QAAa,uBAAwB8C,GACjDsB,EAAYH,EAAalqB,KAAKsqB,eAE9B9iB,EADYyiB,EAAKroB,OAASqoB,EAAKO,aAE/BN,EAAa,GAAGC,IAAkBF,EAAKroB,MAAM2F,UAAW,OAAF,UAAO0iB,EAAKroB,MAAMJ,OAAQsF,WAChF,GAEN,OACI,uBAAKmf,UAAWA,GACZ,uBAAKA,UAAW,GAAGA,YAAqBoE,GACxC,uBAAKpE,UAAW,GAAGA,gBACf,yCACQ8D,EAAK,CACTllB,KAAK,OACLohB,UAAW,GAAGA,cAElB,uBAAKA,UAAW,GAAGA,YAAqBze,IAIxD,CAEQ,WAAA8iB,GACJ,MAAM,MAAEP,EAAK,gBAAEI,GAAoBnqB,KAAKolB,MACxC,MAAO,GAAG+E,IAAkBJ,EAAM9lB,MACtC,EAGJ,SAAe,QAAf,CAA2BinB,GCZ3B,GAAe,QAAf,EA3BsD9F,IAClD,MAAM,oBACF2D,EAAmB,KACnBkB,EAAI,MACJF,EAAK,gBACLI,EACA3E,6BAA8B0E,GAC9B9E,EAEEa,GAAY,QAAa,oBAAqB8C,GAC9CsB,EAAYH,EAAa,GAAGC,IAAkBJ,EAAM9lB,QAEpDuD,EADYyiB,EAAKroB,OAASqoB,EAAKO,aAE/BN,EAAa,GAAGC,IAAkBF,EAAKroB,MAAM2F,UAAW0iB,EAAKroB,MAAMJ,MAAMsF,WACzE,GAEN,OACI,uBAAKmf,UAAWA,GACZ,uBAAKA,UAAW,GAAGA,YAAqBoE,GACxC,uBAAKpE,UAAW,GAAGA,gBACf,yCAAW8D,EAAK,CAAEllB,KAAK,OAAOohB,UAAW,GAAGA,cAC5C,uBAAKA,UAAW,GAAGA,YAAqBze,IAGnD,yDC3BL,IAAY2jB,GAAZ,SAAYA,GACR,wBACA,uBACH,CAHD,CAAYA,IAAAA,EAAW,KCQhB,MAAMC,UAAkB,YAA/B,kCAKY,KAAAC,kBAAqB7pB,IACzB,IAAKA,EACD,OAGJ,MAAM8pB,EAAO9pB,EAAK+pB,cACZpjB,EAAO3G,EAAKgqB,UACZvd,EAAQzM,EAAKiqB,WAAa,EAEhCzrB,KAAKgqB,SAASsB,EAAMrd,EAAO9F,EAAK,EAQ5B,KAAAujB,aAAe,KACnB,MAAM,mBAAEC,GAAuB3rB,KAAKolB,MACpC,MDlCqB,UCkCduG,EAA+BR,EAAYS,SAAWT,EAAYU,QAAQ,CAqCzF,CA5DY,QAAA7B,CAASsB,EAAuBrd,EAAwB9F,GAC5DnI,KAAKolB,MAAM2E,MAAMC,SAAS,GAAGsB,KAAQrd,KAAS9F,IAClD,CAcQ,WAAAmiB,GACJ,MAAM,gBAAEH,EAAe,MAAEJ,GAAU/pB,KAAKolB,MACxC,MAAO,GAAG+E,IAAkBJ,EAAM9lB,MACtC,CAOO,MAAA0d,GACH,MACI6D,6BAA8B0E,EAAY,gBAC1CC,EACAJ,OAAO,MAAEpF,GAAO,KAChBsF,EAAI,oBACJlB,GACA/oB,KAAKolB,MAEHiF,EAAYH,EAAalqB,KAAKsqB,eAE9B9iB,EADYyiB,EAAKroB,OAASqoB,EAAKO,aACJN,EAAa,GAAGC,IAAkBF,EAAKroB,MAAM2F,WAAa,GACrF0e,GAAY,QAAa,sBAAuB8C,GAEtD,OACI,uBAAK9C,UAAWA,GACZ,uBAAKA,UAAW,GAAGA,YAAqBoE,GACxC,uBAAKpE,UAAW,GAAGA,gBACf,gBAAC,IAAU,CACP6F,WAAY9rB,KAAK0rB,eACjBK,SAAUpH,EAAQ,IAAIqH,KAAKrH,GAAS,KACpCsH,YACI,gBAAC,IAAS,CACNC,gBAAc,EACdC,KAAK,aACLC,gBAAiBpsB,KAAK0rB,eAAeW,gBAG7CrC,SAAW7hB,GAASnI,KAAKqrB,kBAAkBljB,KAC/C,uBAAK8d,UAAW,GAAGA,YAAqBze,IAIxD,EAGJ,SAAe,QAAf,CAA2B4jB,GCtEdkB,EAAgB,CACzBC,eAAgB,+BAChBC,iBAAkB,wBAClBC,iBAAkB,wBAClBC,iBAAkB,2BAClBC,iBAAkB,2BAClBC,oBAAqB,4BACrBC,kBAAmB,4BACnBC,OAAQ,iBAGZ,IAAYC,GAAZ,SAAYA,GACR,YACA,cACA,kBACA,qBACH,CALD,CAAYA,IAAAA,EAAgB,KAOrB,MAAMC,EAAwD,CACjE,CAACD,EAAiBE,KAAM,EACxB,CAACF,EAAiBG,MAAO,EACzB,CAACH,EAAiBI,QAAS,EAC3B,CAACJ,EAAiBK,UAAW,0ICvB1B,MAAMC,EAAuB,CAChC,CAAC,IAAIhjB,KAAM,2EACX,CAAC,IAAII,MAAO,6EAGH6iB,EAAgB,kBAChBC,EAAsB,UACtBC,EAAgB,iBAChBC,EAAwB,eAErC,IAAYC,GAAZ,SAAYA,GACR,yBACA,yBACA,2BACA,2BACA,8BACH,CAND,CAAYA,IAAAA,EAAgB,KAQrB,MAAMC,EAAuB,CAChCC,SAAU,QACVC,OAAQ,CAEJC,SAAU,YACVC,UAAW,aAGXC,UAAW,aACXC,WAAY,gBAIPC,EAAmB,OAEhC,IAAYC,GAAZ,SAAYA,GACR,oBACA,kBACA,2BACH,CAJD,CAAYA,IAAAA,EAAQ,yXCpBb,MAAMC,EAA6C,IAAI,EAAAC,QAEjDC,EAAQ,IAAI,EAAAC,iBAAgB,UAE5BC,EAA4B,IAC9B,CAACC,EAAS/N,IAAU4N,EAAMI,MAAK,IAAAC,WAASC,GAAQA,EAAKH,EAAS/N,EAAO,CAAC,MAGpEmO,EAA2BC,IACpCA,EAAc/tB,MAAKguB,IACfT,EAAMU,KAAKD,EAAeE,QAAQ,GACpC,EAGOC,EAAuB,CAChCC,EACAzN,IACC,CACD+M,EAEAW,IAEAX,EACKY,UAAUF,GACVT,MACG,IAAAxyB,MAAI2xB,IACAnM,EAASmM,EAAQuB,EAAO,KAG/BV,MAAK,IAAAY,mBAEDC,EAAeC,GACxBN,EACIM,GACC3B,IACG,MAAM4B,GAAW,IAAAC,KAAI7B,EAAQ,mBAAoB,IAC3C8B,GAAU,IAAAD,KAAI7B,EAAQ,kBAAmB,IAE/C,IAAiB+B,qBAAqB,CAClCH,WACAE,UACA1Q,YAAa0Q,EAAQ5H,eACvB,IAID8H,EAAwBL,GACjCN,EACIM,GACC3B,IACG,MAAMvtB,GAAS,IAAAovB,KAAI7B,EAAQ,6CAE3B,IAAiB+B,qBAAqB,CAClCE,UAAW,GACXC,UAAWzvB,GACb,IAKD0vB,EAA2BR,GACpCN,EACIM,GACA,KACI,IAAiBI,qBAAqB,CAClCE,UAAW,GACXC,UAAW,IACb,IAIDE,EAAwBT,GACjCN,EACIM,GACC3B,IACG,MAAMqC,GAAmB,IAAAR,KAAI7B,EAAQ,oBAErC,IAAiB+B,qBAAqB,CAClCO,kBAAmBD,EAAiB7D,cACpCyD,UAAW,IACb,oICgLd,MAEA,EAFyB,IAhPzB,oBACW,KAAAM,qBAAsB,EACrB,KAAAC,WAAY,EACZ,KAAAC,wBAAyB,EACzB,KAAAC,SAAmB,GACnB,KAAAC,SAAmB,GACnB,KAAAC,WAAqB,GACtB,KAAAN,kBAA4B,GAE3B,KAAAO,qBAAyC,GAE1C,KAAAC,cAAiB7O,cACpB,GAAKA,EAAO8O,mBAuBZ,OAnBA5wB,KAAKqwB,UAAYvO,EAAO8O,mBACxB5wB,KAAK6wB,qBAAuB/O,EAAO/C,QACnC/e,KAAKywB,WAAahQ,OAAOqQ,SAASC,UAAY,GAC9C/wB,KAAKuwB,SAA0B,QAAf,EAAAzO,EAAOyO,gBAAQ,QAAI,GAEnC9P,OAAOuQ,iBAAiB,WAAYC,IAC5B,OAA0BA,EAAMzvB,OAChCxB,KAAKswB,wBAAyB,EAC9BtwB,KAAKkxB,gCAIRpP,EAAOqP,SAIRnxB,KAAKswB,uBAAwE,QAA/C,EAAqB,QAArB,EAAA7P,OAAO,aAAc,eAAEqB,OAAOsP,yBAAiB,UAH7EpxB,KAAKqxB,kBAAkBvP,GACvB9hB,KAAKsxB,sBAAsBxP,EAAO/C,UAK/B,EAAAqP,yBAAyBY,KAAKlN,EAAO8O,mBAAmB,EAG5D,KAAAW,cAAiB/vB,IACpBxB,KAAK4vB,qBAAqBpuB,GAE1B,MAAMgwB,EAA8B/Q,OAAO,MAE3C,IAAKzgB,KAAKqwB,YAAcmB,EACpB,OAGJ,MAAMC,EAAgB,eAClBC,MAAOF,EAAYE,MACnBC,MAAOH,EAAYG,MACnBhC,QAAS6B,EAAY7B,QACrB1Q,YAAauS,EAAYvS,YACzB2S,YAAaJ,EAAYI,YACzBC,KAAML,EAAYK,KAClBC,SAAUN,EAAYM,SACtBrC,SAAU+B,EAAY/B,SACtBnhB,OAAQkjB,EAAYljB,OACpByjB,SAAUP,EAAYO,SACtBC,SAAUR,EAAYQ,SACtBC,SAAUT,EAAYS,SACtBC,YAAa,KACbC,eAAgBX,EAAYW,eAC5BpC,UAAWyB,EAAYzB,WACpBvuB,GAGP,OAAOxB,KAAKoyB,MAAM,KAAiBC,WAAYZ,EAAc,EAG1D,KAAAa,iBAAoB9wB,IACvB,MAAMgwB,EAA8B/Q,OAAO,MAEtC+Q,GAAgBxxB,KAAKqwB,WAI1BrwB,KAAKoyB,MAAM,KAAiBG,cAAe,OAAF,wBAClC/wB,GAAI,CACPqsB,OAAQ,CACJ2D,EAAYQ,SACZ,KAAqBpE,SACrBpsB,EAAKqsB,QACP9I,KAAK,OACPgL,UAAWyB,EAAYzB,YACzB,EAGC,KAAAyC,cAAiBhxB,YACpB,MAAMgwB,EAA8B/Q,OAAO,MAEvCjf,EAAK2uB,mBAAqBnwB,KAAKmwB,oBAAsB3uB,EAAK2uB,oBAC1DnwB,KAAKmwB,kBAAoB3uB,EAAK2uB,mBAG9B3uB,EAAKgvB,UAAYxwB,KAAKwwB,WAAahvB,EAAKgvB,WACxCxwB,KAAKwwB,SAAWhvB,EAAKgvB,UAGzB,MAAMD,EAAwB,QAAb,EAAAvwB,KAAKuwB,gBAAQ,QAAIiB,aAAW,EAAXA,EAAajB,SACzCkC,EAAS,+BACRjxB,GAAI,CACP+uB,WACAmC,eAAgBnC,EAChBO,SAAUtvB,EAAKsvB,UAAY,KAC3BN,SAAwB,QAAd,EAAAhvB,aAAI,EAAJA,EAAMgvB,gBAAQ,QAAIxwB,KAAKwwB,SACjCL,kBAAmBnwB,KAAKmwB,oBAAqBqB,aAAW,EAAXA,EAAarB,oBAAqB,GAC/EM,WAAYzwB,KAAKywB,aAGrBzwB,KAAKoyB,MAAM,KAAiBO,WAAYF,EAAU,EAG/C,KAAAxC,qBAAuB,CAAChuB,EAAmB,MAC9CjC,KAAKmwB,kBAAoBluB,CAAQ,EAG7B,KAAA2wB,uBAA0BC,IAC9B7yB,KAAK0wB,qBAAqBtqB,KAAKysB,EAAc,EAGzC,KAAA3B,0BAA4B,KAChClxB,KAAK0wB,qBAAqBx0B,KAAI22B,GAAiB7yB,KAAKoyB,MAAMS,EAAcC,UAAWD,EAAcrxB,QACjGxB,KAAK0wB,qBAAuB,EAAE,EAG3B,KAAAd,qBAAwBpuB,IACvBif,OAAO,QACPA,OAAO,MAAuB,OAAH,wBACpBA,OAAO,OACPjf,KA6BP,KAAA6vB,kBAAqB0B,UACzB,MAAMpD,GAAU,QAAwB,CAAEqD,QAAQ,IAC5CvD,GAAW,QAAqB,CAAEuD,QAAQ,IAC1C1kB,GAAgD,QAAvC,OAAU2kB,MAAKC,GAAKA,EAAEv2B,OAASgzB,WAAQ,eAAErhB,SAAU,GAElEmS,OAAO,MAAuB,CAC1B0S,aAAc,KACdzB,MAAOqB,EAAWK,cAClBzB,MAAOoB,EAAWM,gBAAkB,GACpC1D,UACA1Q,YAAa0Q,EAAQ5H,cACrB6J,YAAa5xB,KAAK6wB,qBAClBgB,KAAMkB,EAAWO,eAAiB,GAClCxB,SAAUiB,EAAWjB,UAAY,GACjCrC,WACAnhB,SACA2jB,SAAU,KACVD,SAAUe,EAAWQ,mBAAqB,GAC1CC,SAAUT,EAAWU,qBAAuB,GAC5CC,iBAAkBX,EAAWY,2BAA6B,GAC1D7D,UAAW,GACXiC,SAAU,GACVI,eAAgB,GAChBD,YAAa,GACb/B,kBAAmB,GACnBJ,UAAW,GACXQ,SAAUwC,EAAWxC,SACrBC,SAAU,GACVoD,WAAY,aACG,EAGf,KAAAtC,sBAAyBvS,IAC7B,MAAM8U,EAA4BC,SAASC,cAAc,UACzDF,EAAOG,aAAa,OAAQ,mBAC5BH,EAAOG,aAAa,QAAS,QAE7BH,EAAOI,OAAS,KACZ,IACQxT,OAAO,QAAkB,IAAAyT,YAAWzT,OAAO,MAAeyB,OAC1DzB,OAAO,MAAeyB,KAAKzB,OAAO,OAExC,MAAO0T,GACLC,QAAQxyB,MAAM,qDAAsDuyB,KAI5EN,EAAOG,aAAa,OAAO,QAAwB,CAAEjV,UAASC,OAAQ,QAEtE8U,SAASO,KAAKC,YAAYT,EAAO,EAG9B,KAAAU,aAAe,KAClB,IACQ9T,OAAO,QAAkB,IAAAyT,YAAWzT,OAAO,MAAe8T,eAC1D9T,OAAO,MAAe8T,eAE5B,MAAOJ,GACLC,QAAQxyB,MAAM,6DAA8DuyB,IAsBxF,CAxGY,KAAA/B,CAAMU,EAA6BtxB,GACvC,IAAKxB,KAAKswB,uBACN,OAAOtwB,KAAK4yB,uBAAuB,CAAEE,YAAWtxB,SAGpD,IACQif,OAAO,QAAkB,IAAAyT,YAAWzT,OAAO,MAAe2R,QAC1D3R,OAAO,MAAe2R,MAAMU,EAAWtxB,GAE7C,MAAO2yB,GACLC,QAAQxyB,MAAM,sDAAuDuyB,GAE7E,CAEO,kBAAAK,GACH,IACQ/T,OAAO,QAAkB,IAAAyT,YAAWzT,OAAO,MAAe+T,qBAC1D/T,OAAO,MAAe+T,qBAE5B,MAAOL,GACLC,QAAQxyB,MAAM,uDAAwDuyB,GAE9E,CAgEO,wBAAAM,EAAyB,OAAEn0B,EAAS,GAAE,gBAAEo0B,IAI3C,MAAMC,EAAuB,KAAqB9G,OAElD7tB,KAAKuxB,cAAc,CAAEQ,SAAU,OAAQI,eAAgB,GAAIrC,UAAW,KACtExvB,GAAUN,KAAK4vB,qBAAqB,CAAEG,UAAWzvB,EAAQwvB,UAAW,KACpE9vB,KAAKsyB,iBAAiB,CAClBzE,OAAQ6G,EACFC,EAAqB7G,SACrB6G,EAAqB5G,UAC3B6G,SAAUF,EAAgB5tB,WAC1B+tB,YAAaH,GAAiB5tB,aAGlC9G,KAAKowB,oBAAsBsE,CAC/B,0IC7PG,MAAMI,UAA0B,YAC5B,iBAAAC,GACH,MAAM,OAAEjT,GAAW9hB,KAAKolB,MAClBmL,EAAWzO,EAAOkT,oBAAqB,IAAAtF,KACzC,KACA,GAAG5N,EAAOmB,4BACV,IAEEgS,EAA4C,CAC9C7B,cAAetR,EAAOsR,cACtBnQ,WAAYnB,EAAOmB,WACnB2N,mBAAoB9O,EAAO8O,mBAC3ByC,eAAgBvR,EAAOuR,eACvBC,cAAexR,EAAOwR,cACtBG,oBAAqB3R,EAAO2R,oBAC5BE,0BAA2B7R,EAAO6R,0BAClCJ,kBAAmBzR,EAAOyR,kBAC1BzB,SAAUhQ,EAAOgQ,SACjB/S,QAAS+C,EAAO/C,QAChBwR,WACAY,SAAWrP,EAAO+B,OAAS,IAAaqR,UAE5C,IAAiBvE,cAAcsE,EACnC,CAEO,MAAAtT,GACH,OAAO,IACX,EAGJ,oCCtCA,yDCPO,MAAMwT,EAA0B,CACnC9O,aAAc,eACdC,sBAAuB,ucC4JpB,MAAM8O,EAAc,IAvI3B,oBAIY,KAAAC,UAAoB,CAiIhC,CA/HiB,IAAAnT,CAAKniB,4CACd,MAAM,oBAAEgiB,GAAwBhiB,EAEhCC,KAAKs1B,aACLt1B,KAAKu1B,gBAAkB,OACvBv1B,KAAK+hB,oBAAsBA,QACrB/hB,KAAKu1B,gBAAgBC,IAAI,MAAkBtT,KAAK,CAGlDuT,UAAW,CACP,CAAC,KAAmB,CAChB,CAAC,IAAwBpP,cAAetE,EACxC,CAAC,IAAwBuE,uBAAwBvE,IAGzD2T,GAAI,CACA,IAAwBrP,aACxB,IAAwBC,uBAE5BqP,WAAY,CACR,IAAwBtP,aACxB,IAAwBC,uBAE5BsP,OAAO,EACPC,MAAO,CACHC,aAAa,EACbC,OAAQ,YAEZC,aAAa,EACbC,kBAAmB,IAAIC,KAGfn2B,EAAQW,MAAQ,IAAI2J,KACpB+pB,QAAQ+B,KAAK,cAAeD,MAIxCl2B,KAAKu1B,gBAAgBa,eAAe,IACxC,IAEa,cAAAA,CAAer2B,4CACxB,MAAM,aAAEsO,EAAY,iBAAEgoB,EAAgB,yBAAEC,GAA6Bv2B,EAErEC,KAAKu2B,gBAAgBloB,GAErB,MAAMmoB,EAAyBH,GACzB,OAAcA,EAAkBr2B,KAAKq1B,UAAUt0B,MAAKQ,GAAYA,EAASC,OACzEN,QAAQu1B,SAERC,EAAwD,KAGtD12B,KAAK22B,oBACEz1B,QAAQpE,QAAQkD,KAAK22B,qBACpBL,GAGD,OAAcA,GAA0Bv1B,MAAKQ,IAChDvB,KAAK22B,oBAAsBp1B,EAASC,KAC7BD,EAASC,QAJbN,QAAQu1B,SANuC,GAkB9D,OAAO,IAAIv1B,SAAgB,CAACpE,EAAS25B,KACjCv1B,QAAQ2E,IAA0B,CAC9B2wB,EAAuB70B,OAAM,KACzByyB,QAAQ+B,KAAK,iCAAiCE,KAAoB,IAEtEK,EAA+B/0B,OAAM,KACjCyyB,QAAQ+B,KAAK,0CAA0CG,KAA4B,MAExFv1B,MACC,EAAE61B,EAAcC,MAER72B,KAAK+hB,qBAAuB6U,GAAgBC,GAGxCA,GACA72B,KAAKu1B,gBAAgBuB,kBACjBzoB,EACA,IAAwBiY,sBACxBuQ,GAGJD,GACA52B,KAAKu1B,gBAAgBuB,kBAAkBzoB,EAAc,IAAwBgY,aAAcuQ,GAE/F52B,KAAKu1B,gBAAgBa,eAAe/nB,GACpCvR,EAAQuR,IAERooB,MAGX,GAET,IAUO,UAAA3S,CAAWuR,GAAoB,GAClCr1B,KAAKq1B,SAAWA,CACpB,CAEQ,eAAAkB,CAAgBhnB,EAAiB,KACrC,SAAcA,EAClB,CAEQ,UAAA+lB,GAEJ,eAAoB,QAAS,CAAEyB,aAAc,OAC7C,eAAoB,QAAS,CAAEA,aAAc,MACjD,CAEO,iBAAAC,CAAkBz0B,GAErB,OAD0BvC,KAAKu1B,gBAAgB0B,UAAU,IAClDD,CAAkBz0B,EAC7B,GAKJ,8FC7JA,MAAM20B,GAAc,IAAAC,SAAQ,SACfC,EAAgB,CAACC,EAAcC,GAAuB,IAC/DA,EAAcJ,EAAYG,GAAQ,QAAUA,GAEnCE,EAAuBC,IAChC,MAAMC,EAAwBhX,OAAOqQ,SAAS4G,SAASC,YAAYH,GAEnE,GAAmB,MAAfA,GAAwBC,EAAwB,EAE7C,CAEH,MAAMG,EAAiBH,EAAwBD,EAAW/xB,OAE1D,OAAOgb,OAAOqQ,SAAS4G,SAASG,UAAU,EAAGD,GAL7C,MAAO,qHCPR,MAAME,EAA8B,gBAC9BC,EAA2B,IAC3BC,EAA8B,IAE9BC,EAAoB,YAcpBC,EAAoE,CAE7EC,GAAI,CACA1I,SAAU,KAAO/iB,MACjB0rB,QAAS,CACL,QAAS,KAAO5rB,MAChB,QAAS,KAAOA,MAChB,QAAS,KAAOC,MAChB,QAAS,KAAOE,MAChB,CAACsrB,GAAYA,IAKrBI,GAAI,CACA5I,SAAU,KAAOziB,MACjBorB,QAAS,CACL,QAAS,KAAOrrB,QAKxBurB,GAAI,CACA7I,SAAU,KAAO7iB,MACjB2rB,SAAU,CACN,CAAEC,MAAO,kBAAmBjpB,OAAQ,KAAO3C,OAC3C,CAAE4rB,MAAO,gBAAiBjpB,OAAQ,KAAO1C,SAGjD4rB,GAAI,CAAEhJ,SAAU,KAAO7iB,OAGvB8rB,GAAI,CACAjJ,SAAU,KAAO/hB,MACjB0qB,QAAS,CACL,QAAS,KAAO3qB,QAKxBkrB,GAAI,CACAlJ,SAAU,KAAOzhB,MACjBuqB,SAAU,CACN,CAAEC,MAAO,gCAAiCjpB,OAAQ,KAAOrB,SAKjE0qB,GAAI,CAAEnJ,SAAU,KAAOpiB,OACvBwrB,GAAI,CAAEpJ,SAAU,KAAOpiB,OAGvByrB,GAAI,CAAErJ,SAAU,KAAOnjB,OACvBysB,GAAI,CAAEtJ,SAAU,KAAOljB,OACvBysB,GAAI,CAAEvJ,SAAU,KAAO3iB,OACvBmsB,GAAI,CAAExJ,SAAU,KAAOxiB,OACvBisB,GAAI,CAAEzJ,SAAU,KAAOviB,OACvBisB,GAAI,CAAE1J,SAAU,KAAOniB,OACvB8rB,GAAI,CAAE3J,SAAU,KAAOjiB,OACvB6rB,GAAI,CAAE5J,SAAU,KAAO9hB,OACvB2rB,GAAI,CAAE7J,SAAU,KAAO7hB,OACvB2rB,GAAI,CAAE9J,SAAU,KAAO3hB,OACvB0rB,GAAI,CAAE/J,SAAU,KAAO1hB,OACvB0rB,GAAI,CAAEhK,SAAU,KAAOtjB,OACvButB,GAAI,CAAEjK,SAAU,KAAOtiB,OACvBwsB,GAAI,CAAElK,SAAU,KAAOriB,OACvBwsB,GAAI,CAAEnK,SAAU,KAAO5hB,OACvBgsB,GAAI,CAAEpK,SAAU,KAAOpjB,OACvBytB,GAAI,CAAErK,SAAU,KAAOliB,QAGdwsB,EAAkB,CAC3BC,2BAA4B,qEC/EzB,SAASC,EAAcl6B,EAAiC,CAAC,GAC5D,IAAIwP,EAKJ,GAJIxP,EAAQizB,SACRzjB,EA2BD,WACH,MAAM2qB,EAmEH,WACH,MAAMC,EAAmB1Z,OAAOqQ,SAAS4G,SAAS7S,MAAMmT,GAAqBrzB,QAAQkzB,GAA8BA,IAC7GtoB,EAAiB4qB,EAAOA,EAAO10B,OAAS,GAC9C,OAAO,QAAc8J,IAAU,QAAkBA,QAAU6qB,CAC/D,CAvEsCC,GAClC,IAAKH,EACD,OAEJ,OAAO,KAAcA,GAAmBA,EAAQ,GACpD,CAjCiBI,IAGTv6B,EAAQ0vB,SACR,IACIlgB,EAASgrB,EAAsBx6B,EAAQ0vB,UACzC,SACElgB,OAAS6qB,EAajB,OARK7qB,GAAUxP,EAAQy6B,qBACnBjrB,EAyFD,WACH,IACI,OAAOgrB,EAAsB9Z,OAAOga,UAAUhL,UAChD,SACE,OAER,CA/FiBiL,IAGTnrB,GAAUxP,EAAQ46B,sBAClBprB,EAiGD,SAAkCxP,GACrC,MAAMuO,EAA0B,KAAuBvO,EAAQwP,QAC/D,IAAKjB,EACD,OAGJ,MAAMiB,EAA6BxP,EAAQ66B,iBAAiBtsB,GAAQ2kB,MAAM/vB,GAA0BA,IAASnD,EAAQwP,SACrH,GAAIA,EACA,OAAOA,EAGX,OAAO,IAA2BjB,EACtC,CA7GiBusB,CAAyB,CAAEtrB,SAAQqrB,iBAAkB76B,EAAQ46B,uBAGnEprB,GAAU,GACrB,CAeO,SAASgrB,EAAsBxQ,GAClC,MAAM0F,EAAmB1F,EAAMhC,cACzB1Z,EAAuBohB,EAAS5K,MAAMkT,GAAkB,GAG9D,IAAK1pB,IAAiBypB,EAAoBgD,KAAKzsB,GAC3C,MAAM,IAAI3R,MAAMq9B,EAAgBC,4BAIpC,IAAK9B,EAA2B7pB,GAC5B,OAAO,IAIX,MAAM0sB,EAA6B7C,EAA2B7pB,GAAcohB,SAC5E,GAAIqI,EAAoBgD,KAAKrL,GACzB,OAAOsL,EAGX,MAAMC,EAeH,SAA0BvL,EAAkB9yB,GAC/C,MAAMiI,EAAqBszB,EAA2Bv7B,GACtD,OAAOiI,EAAKwzB,SAAWxzB,EAAKwzB,QAAQ3I,GAAY7qB,EAAKwzB,QAAQ3I,QAAY2K,CAC7E,CAlB+Ca,CAAiBxL,EAAUphB,GACtE,GAAI2sB,EACA,OAAOA,EAGX,MAAME,EAgBH,SAA2BzL,EAAkB9yB,GAChD,MACM47B,EADqBL,EAA2Bv7B,GACd47B,UAAY,GAEpD,IAAK,IAAI4C,EAAY,EAAGA,EAAI5C,EAAS9yB,OAAQ01B,IAAK,CAC9C,MAAMC,EAA0B7C,EAAS4C,GACzC,GAAIC,EAAQ5C,MAAMsC,KAAKrL,GACnB,OAAO2L,EAAQ7rB,OAIvB,MACJ,CA5BkD8rB,CAAkB5L,EAAUphB,GAC1E,OAAI6sB,GAKGH,CACX,CC7EO,SAASO,EAAqBv7B,GACjC,MAAM,SAAE0vB,EAAQ,OAAEuD,GAAYjzB,EAE9B,OAAOk6B,EAAc,CAAExK,WAAUuD,SAAQwH,oBAAoB,IACxD3V,MAAMkT,GAAkB,GACxBhQ,aACT,CAGO,SAASwT,EAAuBx7B,GACnC,MAAM,SAAE0vB,EAAQ,OAAEuD,GAAYjzB,EAE9B,OAAOk6B,EAAc,CAAExK,WAAUuD,SAAQwH,oBAAoB,IACxD3V,MAAMkT,GAAkB,GACxB1L,aACT,8JCtBO,MACMmP,EAAe,eACfC,EAAgB,gBAEhBC,EAAqB,qBACrBC,EAAsB,sBAEtBC,EAAoB,oBACpBC,EAAuB,uBAEvBC,EAAkB,kBAE/B,IAAYC,GAAZ,SAAYA,GAER,wBAEA,oCAEA,qCACH,CAPD,CAAYA,IAAAA,EAAU,KASf,MAAMC,EAAS,CAClBC,QAAS,sBAGAC,EAAY,CACrBC,aAAc,iBAGLC,EAAoD,CAC7D5L,SAAU,SAGd,IAAY6L,GAAZ,SAAYA,GACR,uBACA,gBACH,CAHD,CAAYA,IAAAA,EAAkB,2bCRvB,MAAMC,EAMF,gBAAOha,CAAUviB,GACpB,MAAMI,EAAkB,CACpB,YAAaJ,EAAQ2xB,OAGzB1xB,KAAKS,IAAMV,EAAQW,IACnBV,KAAKC,eAAiB,WAAa,CAAEE,YACjCJ,EAAQw8B,SACRv8B,KAAKF,iBAAiBC,EAAQw8B,QAEtC,CAEO,uBAAOz8B,CAAiBy8B,GAC3Bv8B,KAAKu8B,QAAUA,EACfv8B,KAAKC,eAAeu8B,aAAap7B,QAAQo0B,KAAK1T,IACtC9hB,KAAKu8B,UACLza,EAAO3hB,QAAQ,iBAAmBH,KAAKu8B,QAAQrU,UAC/CpG,EAAO3hB,QAAuB,cAAI,YAAYH,KAAKu8B,QAAQn8B,UAExD0hB,IAEf,CAEO,uBAAOhhB,GAEV,OAAO,gCAAgDC,MAAMhE,IACzDiD,KAAKy8B,cAAgB1/B,EAAO0/B,cAC5Bz8B,KAAK08B,iBAAmB3/B,EAAO2/B,iBAC/B18B,KAAK28B,cAAgB5/B,EAAO4/B,aAAa,GAEjD,CAGO,oBAAaF,4CAChB,MAAM71B,GAAe,QAAuB5G,KAAKS,KAC3CyB,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQ,MAAsB3E,OAEhE,aADmDpC,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,SAC/Du6B,OACpB,IAGO,oBAAaC,CAAc98B,4CAK9B,MAAM6G,GAAe,QAAuB5G,KAAKS,KAC3CuG,EAAiB,CAAE1G,OAAQP,EAAQO,QACnCuG,EAAmB,WAAY,KAA4BG,GAAQF,WACnE5E,EAAc,IAAI,IAAJ,CAAQ0E,GACvBG,QAAQF,GACRnE,SAAS,CAAEo6B,QAAS/8B,EAAQ+8B,QAASC,SAAUh9B,EAAQg9B,WACvD36B,OAECb,QAAyBvB,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,QAE3D,OAAO,IAAA26B,WAAUz7B,EAAS07B,OAAO,CAACC,EAAaC,IAAUD,EAAKvY,OAClE,IAEO,uBAAa+X,CAAiB38B,4CACjC,MAAM6G,GAAe,QAAuB5G,KAAKS,KAC3CyB,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQ,MAAyBA,QAAQhH,EAAQq9B,cAAch7B,OACjG,aAAapC,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,OAC7C,IAEO,kBAAag7B,4CAChB,MAAMz2B,GAAe,QAAuB5G,KAAKS,KAC3CyB,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQ,MAAsB3E,OAChE,aAAapC,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,OAC7C,IAEO,oBAAas6B,4CAChB,MAAM/1B,GAAe,QAAuB5G,KAAKS,KAC3CyB,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQ,MAAiB3E,OAC3D,aAAapC,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,OAC7C,IAGQ,cAAOjB,CAAWrB,GACtB,OAAOC,KAAKC,eAAemB,QAAQ,OAAD,wBAAMrB,GAAO,CAAEuB,aAAc,UAC1DP,MAAMQ,GACIA,EAASC,OACjBG,OAAOlF,IACN,MAAMA,EAAE8E,SAAUkG,MAAM,GAEpC,+FCtHG,MAAM61B,EAA+B,0BAC/BC,EAAkC,eAClCC,EAAqC,8BACrCC,EAA+B,eAC/BC,EAAkB,6BAE/B,IAAYC,GAAZ,SAAYA,GACR,mBACA,yCACH,CAHD,CAAYA,IAAAA,EAAkB,0ICDlBC,oCAAZ,SAAYA,GACR,gBACA,YACA,YACA,kBACA,YACA,kBACA,YACA,oBACA,sBACA,oBACA,wBACA,cACA,aACH,CAdD,CAAYA,IAAAA,EAA8B,KAgBnC,MAAMC,EAAyC,CAClD,CAAC,KAAex+B,IAAKu+B,EAA+BlW,MACpD,CAAC,KAAenoB,MAAOq+B,EAA+BhW,IACtD,CAAC,KAAetoB,KAAMs+B,EAA+B/V,IACrD,CAAC,KAAenoB,QAASk+B,EAA+Bl+B,OACxD,CAAC,KAAeC,QAASi+B,EAA+Bj+B,OACxD,CAAC,KAAeH,KAAMo+B,EAA+BhW,IACrD,CAAC,KAAenoB,KAAMm+B,EAA+B/V,IACrD,CAAC,KAAe9e,MAAO60B,EAA+B70B,MAK7C+0B,IAFyC,IAAAz/B,QAAOw/B,GAEZ,CAC7C,CAAC,KAAex+B,IAAK,QACrB,CAAC,KAAeE,MAAO,gBACvB,CAAC,KAAeC,KAAM,gBACtB,CAAC,KAAeF,KAAM,eACtB,CAAC,KAAeG,KAAM,iBAKbs+B,EAAyB,CAClCC,QAAS,QACTC,KAAM,gBACNpW,IAAK,eACLqW,OAAQ,mBAGCC,EAA4B,gBAC5BC,EAAuB,WACvBC,EAAuB,uBAEvBC,EAAyB,CAClC,CAAC,IAAIj0B,KAAM,kCACX,CAAC,IAAII,MAAO,+BAQH8zB,GAJR,IAAIl0B,IACJ,IAAII,KAGqB,kBACjB+zB,EAAW,2IC5CjB,MAAMC,EAAb,cAEW,KAAAC,YAA+B,IAAI,KAoClC,KAAAC,mCAAsC1N,IAC1C,MAAM2N,EAAiB5+B,KAAK4+B,eAAe3N,GACrC4N,EAAuB7+B,KAAK6+B,qBAAqB5N,GAEvD,OAAI2N,GACA,KAAsBE,SACf9+B,KAAK++B,iBAGZF,EACO7+B,KAAK0+B,YAAY1P,KAAK6P,QADjC,GAKI,KAAAG,cAAiBld,GACd,OAAP,wBACOA,GAAM,CACTmd,QAASC,mBAAmBl/B,KAAKm/B,cAAcrd,EAAOmd,YAItD,KAAAE,cAAiBF,GACd,IAAI,IAAJ,CAAQR,EAAsBpc,qBAAqB+c,SAASH,GAAS78B,OAGxE,KAAAi9B,uBAA0BC,GACvBA,EACDt/B,KAAK8hB,OAAOmd,QACZ,IAAG,QAAmBj/B,KAAK8hB,OAAO/C,YAAY,cAC5C/e,KAAK8hB,OAAOsR,0BACHpzB,KAAK8hB,OAAOgQ,sBAO1B,KAAAyN,cAAgB,CAACC,EAAuBnxB,EAAuBjH,KAClE,MAAMq4B,EAA4B3L,SAASC,cAAc,UAEzD0L,EAAOC,QAAQC,IACX,oBACA,cACA,iCACA,eACA,iBAEJ,MAAMz9B,EAAM,IAAI,IAAJ,EAAQ,QAAmBlC,KAAK8hB,OAAO/C,UAC9ChY,QAAQ,CACLy4B,IAEHI,MAAM,CACHlO,MAAO1xB,KAAK8hB,OAAOsR,cACnBtB,SAAU9xB,KAAK8hB,OAAOgQ,SACtB+N,KAAMxxB,GAAgBrO,KAAK8hB,OAAO+d,KAClCZ,QAASC,mBAAmBl/B,KAAK8hB,OAAOmd,WAE3C78B,OAOL,OALAq9B,EAAOzL,aAAa,MAAO9xB,GAE3Bu9B,EAAOK,UAAUH,IAAI,UACrBF,EAAOzL,aAAa,QAAS5sB,GAAQA,EAAK24B,MAAQ34B,EAAK24B,MAAQ,OAC/DN,EAAOzL,aAAa,SAAU5sB,GAAQA,EAAK44B,OAAS54B,EAAK44B,OAAS,OAC3DP,CAAM,CAyBrB,CAnHW,IAAAvd,CAAKJ,GACR9hB,KAAK8hB,OAAS9hB,KAAKg/B,cAAcld,GAEjCrB,OAAOuQ,iBAAiB,UAAWhxB,KAAK2+B,oCAAoC,EAChF,CAEQ,cAAAC,CAAe3N,GACnB,MAAMgP,EAAoBhP,EAAMzvB,KAAKswB,WAAa9xB,KAAK8hB,OAAOgQ,SACxDoO,EAAiBjP,EAAMzvB,KAAK2+B,QAAUngC,KAAK8hB,OAAOse,mBAClDC,EAAyBpP,EAAMzvB,KAAK4xB,gBAAkBpzB,KAAK8hB,OAAOsR,cAExE,OAAO6M,GAAqBC,GAAkBG,CAClD,CAEQ,oBAAAxB,CAAqB5N,GACzB,IAAIzvB,EAEJ,IACIA,EAAO8+B,KAAKC,MAAMtP,EAAMzvB,MAC1B,MAAOI,GACL,OAAO,EAGX,SAAQJ,EAAKg/B,eAAgBh/B,EAAKi/B,eAAgBj/B,EAAKi/B,YAC3D,CAmCO,qBAAAC,CAAsB3B,GACzB/+B,KAAK++B,cAAgBA,CACzB,CAgCO,cAAA4B,CACHtyB,EACAmxB,EACAoB,EACAtB,GAAyB,GAEzB,MAAMuB,EAAyB7gC,KAAKq/B,uBAAuBC,GAErDp9B,EAAM,IAAI4+B,IAAI,IAAG,QAAmB9gC,KAAK8hB,OAAO/C,YAAYygB,KAClEt9B,EAAI6+B,aAAaC,IAAI,QAAShhC,KAAK8hB,OAAOsR,eAC1ClxB,EAAI6+B,aAAaC,IAAI,WAAYhhC,KAAK8hB,OAAOgQ,UAC7C5vB,EAAI6+B,aAAaC,IAAI,OAAQ3yB,GAAgBrO,KAAK8hB,OAAO+d,MACzD39B,EAAI6+B,aAAaC,IAAI,UAAWH,GAEhC,MACMI,GAAY,QAAmBL,GAC/BM,EAAW,SAASD,EAAUlB,gBAAgBkB,EAAUjB,eAAeiB,EAAUE,YACnFF,EAAUG,2BAGd,OAAO3gB,OAAO4gB,KAAKn/B,EAAI4E,WANR,kBAM4Bo6B,EAC/C,EAxHc,EAAA5e,UAAY,EAAGD,0BAGzBoc,EAAsBpc,oBAAsBA,CAAmB,EAwHvE,MAEA,EAF8B,IAAIoc,2HCrG3B,MAAM6C,EAAmB,CAAClO,EAAuBtB,IAC7C,IAAI,IAAJ,CAAQ,IACV/qB,QAAQ,CAAC,OACTw6B,OAAO,CACJ,CAAC,MAA4BnO,EAC7B,CAAC,MAAuBtB,IAE3B1vB,OAGIo/B,EAAsBZ,IAI/B,GAAc,WAAVA,EAAoB,CAEpB,MAAMa,OAA8C,IAAtBhhB,OAAOihB,WAA6BjhB,OAAOihB,WAAajhB,OAAOkhB,QACvFC,OAA4C,IAArBnhB,OAAOohB,UAA4BphB,OAAOohB,UAAYphB,OAAOqhB,QACpF/B,EAAQtf,OAAOshB,WACfthB,OAAOshB,WACPjO,SAASkO,gBAAiBC,YACtBnO,SAASkO,gBAAiBC,YAC1BC,OAAOnC,MASjB,MAAO,CACHqB,KATW3gB,OAAO0hB,YAChB1hB,OAAO0hB,YACPrO,SAASkO,gBAAiBI,aACtBtO,SAASkO,gBAAiBI,aAC1BF,OAAOlC,QACI,EAAIqC,IAAyBT,EAK9CT,KAJSpB,EAAQ,EAAIuC,IAAwBb,EAK7C1B,MAvBkB,IAwBlBC,OAvBmB,KA0BvB,MAAO,CACHoB,IAAK,EACLD,KAAM,EACNpB,MA9BkB,IA+BlBC,OA9BmB,MAmClBuC,EAAsBxjB,IACxB,QAAwB,CAAEA,UAASC,OAAQ,OAOzCwjB,EAAgC,oBAAd/H,WAA6B,sBAAsBK,KAAKL,UAAUgI,8GCvG1F,MAAMC,EAAuB,CAChC,CAAC,IAAIr4B,KAAM,wEACX,CAAC,IAAII,MAAO,qEAGHk4B,EAAgB,KAEhBC,EAA4B,4BAC5BC,EAA+B,+BAE/BC,EAA6B,gICP1C,QAAe,EAAe,ybCAvB,MAIMC,EAAqB,CAC9BC,EACAC,EAEAC,EAAsB,KAEtB,SAAeC,EAAQxe,EAAgB,4CACnC,MAAMye,EAAiB3iB,OAA8B2iB,eAAiB,CAAC,EACjEC,EAAqB5iB,OAA8B4iB,kBAEzD,OAAI1e,IAAUue,GAEV9O,QAAQxyB,MAAM,MACPohC,KAGPI,EAAcE,gBAAkBD,EACzBJ,WAGL,OAAM,UAEZE,IAAUxe,GACd,IAEOwe,mUC1BJ,MAAMI,EAGF,WAAOrhB,GAAQ,CACf,aAAO4c,GAAU,CACjB,qBAAO0E,GAAkB,CACzB,mBAAOC,CAAal0B,GACvB,OAAOA,CACX,CAEO,6BAAam0B,CAAuBhiB,4CACvC,OAAOA,GAAYA,GACvB,IAEO,oBAAaiiB,CAAcC,EAA6BliB,4CAC3D,OAAOA,GAAYA,GACvB,IAEO,0BAAamiB,4CAChB,OAAO,CACX,IAEO,gBAAaC,4CAChB,MAAO,CACH5b,UAAW,uCACX9nB,OAAQ,wDACRE,OAAQ,uCAEhB,IAEO,kBAAayjC,4CAChB,MAAO,CACHC,QAAS,CACLC,UAAU,IAAAC,WAAU,KAAiBtb,yBAGjD,KAnCc,EAAA0a,gBAAiB,4SC2B5B,MAAMa,EAAb,cAMW,KAAAC,2BAAiD,IAAI/V,EAAA,GACrD,KAAAgW,4BAAkD,IAAIhW,EAAA,GAEtD,KAAAiW,QAAU,EAASzgB,OAAM9E,WAI5BkkB,EACAsB,IACC,kCAID,OAHA9jB,OAAOuQ,iBAAiB,UAAWhxB,KAAKwkC,8BAA8B,GACtExkC,KAAKykC,eAAiBF,GAEf,QAAW1gB,SACN7jB,KAAK0kC,iBAAiBzB,EAAWsB,SACjCJ,EAAsBQ,cAAc5lB,EAASkkB,EAC7D,IA8FO,KAAAuB,6BAAgCvT,IACnC,GAAKjxB,KAAK4kC,WAIV,OAAI5kC,KAAK6kC,aAAa5T,GACXjxB,KAAKokC,2BAA2BpV,OAGvChvB,KAAK8kC,cAAc7T,GACZjxB,KAAKqkC,4BAA4BrV,YAD5C,GAoDG,KAAA+V,oBAAsB,CAAOjoC,EAAmB25B,IAAqB,kCACxE,IAAIuO,GAAc,EAClB,MAAMC,EAAY3mB,YAAW,WACzB,IAAK0mB,EAED,OADA5Q,QAAQ+B,KAAK,2CACNM,GAEf,GAAG,KAEH,IACI,MAAM,OAAEr2B,EAAM,OAAEE,EAAM,UAAE4nB,SAAoBloB,KAAK8jC,YAEjD,OAAO9jC,KAAKqjC,kBACPU,YAAY3jC,EAAQ8nB,EAAW5nB,GAC/B4kC,WAAWC,IACRH,GAAc,EACdI,aAAaH,GACNnoC,EAAQqoC,MAEzB,SACE,OAAO1O,IAEf,IAuCO,KAAA31B,iBAAmB,KACtBqjC,EAAsBV,aAAeF,EAAmBE,aAExDzjC,KAAKkiB,KAAOqhB,EAAmBrhB,KAC/BliB,KAAK8+B,OAASyE,EAAmBzE,OACjC9+B,KAAK8jC,UAAYP,EAAmBO,UACpC9jC,KAAK+jC,YAAcR,EAAmBQ,YACtC/jC,KAAK2jC,cAAgBJ,EAAmBI,cACxC3jC,KAAKwjC,eAAiBD,EAAmBC,eACzCxjC,KAAK6jC,oBAAsBN,EAAmBM,oBAC9C7jC,KAAK0jC,uBAAyBH,EAAmBG,sBAAsB,CAE/E,CAlOW,IAAAxhB,CAAKmjB,GACR,IAAKA,EACD,OAGJ,MAAM,cAAEjC,GAAkB3iB,OAC1BzgB,KAAK4kC,WAAaxB,EAElB,MAAMrjC,EAAU,OAAH,wBACNC,KAAK8hB,QAAM,CACdwjB,UAAW,IAAID,MAGnB,OAAOrlC,KAAK4kC,WAAW1iB,KAAKniB,EAChC,CAEO,gBAAA2kC,CAAiBa,EAAyBhB,GAC7C,OAAO,IAAIrjC,SAAQ,CAACpE,EAASkmC,IAUlBD,EAAmBC,GATR,KACd,MAAM,cAAEI,EAAa,kBAAEC,GAAsB5iB,OAK7C,OAJAzgB,KAAK4kC,WAAaxB,EAClBpjC,KAAKqjC,kBAAoBA,EACzBkC,IACAhB,IACOznC,GAAS,KAK5B,CAEO,SAAAwlB,CAAUR,GACb9hB,KAAK8hB,OAAS,CACV4P,MAAO5P,EAAO4P,MACdI,SAAUhQ,EAAOgQ,SACjBviB,OAAQuS,EAAOvS,OACfi2B,UAAW,QACXxF,OAAQ,KACRyF,eAAgB,UAChBC,UAAW,CAAC7X,EAAgBtsB,KACxB,GAAe,SAAXssB,EAAmB,CACnB,MAAMvtB,GAAS,IAAAovB,KAAInuB,EAAU,kBACvBmzB,EAAkBiR,QAA4B,OAApBpkC,EAASkG,QAAmBnH,GAO5D,GALA,KAAiBm0B,yBAAyB,CAAEn0B,SAAQo0B,oBAEpD10B,KAAKqjC,kBAAqB5iB,OAA8B4iB,kBACxDrjC,KAAKykC,iBAED/P,EACA,OAAO10B,KAAKokC,2BAA2BpV,SAK3D,CAEO,SAAA4W,GACH,OAAO5lC,KAAK8hB,MAChB,CAEO,MAAAgd,GACC9+B,KAAK4kC,YACL5kC,KAAK4kC,WAAW9F,QAExB,CAEO,mBAAO2E,CAAal0B,GACvB,MAAM,cAAE6zB,GAAkB3iB,OAC1B,IAAK,IAAAiP,KAAI0T,EAAe,kBAAkB,GAI1C,OAAOA,EAAcK,aAAal0B,EACtC,CAEO,oBAAOo1B,CAAc5lB,EAAiB2C,GACzC,OAAO,IAAIxgB,SAAcpE,IACrB,GAAK2jB,OAA8B2iB,cAC/B,OAAOtmC,EAAQ4kB,KAGnB,MAAMmkB,EAAW,aACXC,EF1ImB,CAAC/mB,IAC3B,QAAwB,CAAEA,UAASC,OAAQ,OEyIxB+mB,CAAsBhnB,GAExC,IAAQ+mB,EAAWD,GACnB,UAAcA,GAAU,WACpB,OAAO/oC,EAAQ4kB,IACnB,GAAE,GAEV,CAgBO,YAAAmjB,CAAa5T,GAChB,OAAOA,EAAMzvB,KAAK2+B,QAAU,IAChC,CAEO,aAAA2E,CAAc7T,GACjB,OAAOA,EAAMzvB,KAAK2+B,QAAU,IAChC,CAEO,cAAAqD,GACH,OAAOxjC,KAAK4kC,WAAWoB,OAC3B,CAEO,SAAAlC,GACH,OAAO,IAAI5iC,SAIR,CAACpE,EAAS25B,IACJz2B,KAAK4kC,WAAWtB,eAIdtjC,KAAK4kC,WAAWd,WAAWmC,IAC9B,GAAiC,OAA7BA,EAAkBx+B,OAClB,OAAOgvB,IAGX,MAAQuN,SAAS,OAAE5jC,EAAM,OAAEE,EAAM,UAAE4nB,IAAgB+d,EACnD,OAAOnpC,EAAQ,CAAEsD,SAAQE,SAAQ4nB,aAAY,IATtCuO,KAYnB,CAEO,WAAAsN,GACH,OAAO,IAAI7iC,SAA8B,CAACpE,EAAS25B,IACxCz2B,KAAK4kC,WAAWb,aAAaoB,GACG,OAA/BA,EAAoB19B,OACbzH,KAAKqjC,kBACNrjC,KAAK+kC,oBAAoBjoC,EAAS25B,GAClCA,IAGH35B,EAAQqoC,MAG3B,CA0BO,sBAAAzB,CAAuBhiB,GAC1B,OAAO1hB,KAAK4kC,WAAWlB,uBAAuBhiB,EAClD,CAEO,aAAAiiB,CAAcuC,EAA4BxkB,GAC7C,OAAO1hB,KAAK4kC,WAAWjB,eAAepiC,GAAyD,OAApBA,EAASkG,OAC9Eia,EAASngB,GACTvB,KAAKqjC,kBAAkBM,cAAcuC,EAAS9lC,OAAQ8lC,EAAShe,UAAWge,EAAS5lC,QAAQ4kC,UAAUxjB,IAC/G,CAEO,mBAAAmiB,GACH,OAAO,IAAI3iC,SAAiB,CAACpE,EAAS25B,KAClC,IAAI0P,GAAS,EACb,MAAMlB,EAAY3mB,YAAW,WACzB,IAAK6nB,EAED,OADA/R,QAAQ+B,KAAK,kDACNM,GAEf,GAAG,KAEH,OAAOz2B,KAAKqjC,kBAAkBQ,sBACzBqB,WAAWkB,IACRD,GAAS,EACTf,aAAaH,GAENnoC,EAA+C,OAAvCspC,EAA4B3+B,UAC7C,GAEd,CAEO,MAAA4+B,CAAOjmC,EAAgB8nB,GAC1B,OAAO,IAAIhnB,SAAc,CAACpE,EAASwpC,KAC/BtmC,KAAKqjC,kBAAkBgD,OAAOjmC,EAAQ8nB,GAC/BprB,MAEf,EAgBJ,MAEA,EAF8B,IAAIqnC,mFC9R3B,MAAMoC,EAAoBC,IAC7B,MAAM7hB,EAAgB8hB,iBAAiB3S,SAASO,MAAMqS,iBAAiBF,GAEvE,QAAS7hB,IAAUA,EAAMgiB,SAAS,OAAO,EAGhCC,EAAe,CAAC3gB,EAAmB8C,IAC5C,GAAG9C,IAAY8C,EAAsB,YAAc,KAE1C8d,EAAa,CAAChjB,EAAqB,IAAaijB,aAAgBjjB,IAAS,IAAaqR,4GCP5F,MAAM6R,EAAeC,IACxB,MAAMz3B,EAAS03B,EAAkBD,EAAWz3B,UACtC23B,EAAa,KAAoB33B,GAAQnD,KAE/C,OAAO46B,EAAWG,OAAOD,EAAW,EAG3BE,EAAgBJ,IACzB,MAAMz3B,EAAS03B,EAAkBD,EAAWz3B,UACtCuc,EAAa,KAAoBvc,GAAQpH,KAE/C,OAAO6+B,EAAWG,OAAOrb,EAAW,EAS3Bub,EAAiBL,IAC1B,MAAMz3B,EAAS03B,EAAkBD,EAAWz3B,WACtC,wBAAEJ,EAAuB,MAAElB,GAAU,KAAoBsB,GAE/D,OAAIJ,EACO63B,EAAWG,OAAO,KAAKl5B,KAAS4W,MAAM,KAAK,GAG/CmiB,EAAWG,OAAOl5B,EAAM,EAG5B,SAASg5B,EAAkB13B,GAC9B,IAAK+3B,EAAQC,EAAS,IAAMh4B,EAAOsV,MAAM,KAGzC,OAFA0iB,EAASA,EAAS,IAAIA,EAAOlb,gBAAkB,GAExC,GAAGib,IAASC,GACvB,CAEO,SAASC,EAAcj4B,GAC1B,OAAOk4B,OAAO,uCAAuC3M,KAAKvrB,EAC9D,iDC5CA,YAAsC,IAAIm4B,gBAAgBjnB,OAAOqQ,SAASyQ,0FCKnE,MAAMoG,EAGF,gBAAOrlB,CAAUviB,GACpB,MAAM6nC,EAAiC7nC,EAAQ6jB,UAAW,QAAW7jB,EAAQ8jB,MAC7E8jB,EAAqBE,eAAiBD,CAC1C,CAEO,gBAAOE,CAAUC,EAAkB1Q,GACtC,IAAKsQ,EAAqBE,cACtB,OAGJ,MAAM3lC,EAAc,IAAI,IAAJ,CAAQue,OAAOqQ,SAASkX,QACvCjhC,QAAQ,CAACghC,EAAU1Q,IACnBkK,OAAO9gB,OAAOqQ,SAASyQ,QACvBn/B,OACLqe,OAAOwnB,QAAQH,UAAU,CAAC,EAAG,GAAI5lC,EACrC,EAjBe,EAAA2lC,eAAyB,iLCc5C,IAAYK,EASAC,GATZ,SAAYD,GACR,oCACA,sDACA,wCACA,4CACA,4DACA,qCACH,CAPD,CAAYA,IAAAA,EAAc,KAS1B,SAAYC,GACR,kBACA,0BACA,+BACH,CAJD,CAAYA,IAAAA,EAAU,KAMf,MAAMC,EAAmE,CAC5E,CAAC,KAAe/oC,IAAK,EACrB,CAAC,KAAegpC,KAAM,EACtB,CAAC,KAAe/oC,KAAM,EACtB,CAAC,KAAeC,MAAO,EACvB,CAAC,KAAe+oC,MAAO,EACvB,CAAC,KAAeC,MAAO,EACvB,CAAC,KAAep/B,KAAM,EACtB,CAAC,KAAeC,QAAS,EACzB,CAAC,KAAeH,KAAM,EACtB,CAAC,KAAeC,SAAU,GAC1B,CAAC,KAAeG,UAAW,GAC3B,CAAC,KAAeC,SAAU,GAC1B,CAAC,KAAe5J,QAAS,GACzB,CAAC,KAAeC,QAAS,GACzB,CAAC,KAAemJ,MAAO,GACvB,CAAC,KAAerJ,KAAM,GACtB,CAAC,KAAeD,KAAM,GACtB,CAAC,KAAeuJ,MAAO,GACvB,CAAC,KAAeQ,QAAS,IAGhBi/B,EACPC,EAAOpqC,OAAO+pC,GAEPM,EAA8B,CACvC,KAAeppC,IACf,KAAeG,IACf,KAAeF,KACf,KAAeC,oBC5DnB,MAmBampC,EAA2BC,GAC7BA,EACFjkC,QAAOkkC,GAASA,EAAMC,4BACtBC,MAAK,CAACC,EAAGC,IAAMD,EAAEE,YAAcD,EAAEC,cACjChtC,KAAI2sC,IACD,MAAM/d,GAxBKqe,EAwBsBN,GAvBrBO,MACZC,MAAMC,QAAQH,EAAgBC,MAAMvkB,MAAM,MACnCskB,EAAgBC,MAAMvkB,MAAM,KAE5BskB,EAAgBC,MAGxB,KARW,IAACD,EAyBX,MAAMI,EAdG,CAACJ,GACdA,EAAgBC,OAASC,MAAMC,QAAQH,EAAgBC,MAAMvkB,MAAM,MAC5D,KAAiBuI,SAGrB,KAAiBD,OASEqc,CAAaX,GAC/B,MAAO,CACH5kC,KAAM4kC,EAAMY,KACZ9kB,MAAOmG,EACPG,aAAc4d,EAAMa,aACpBC,WAAYd,EAAMe,YAClB/kC,KAAM0kC,EACT,yTC+BN,MAAMM,EAIF,gBAAOvnB,CAAUviB,GACpB,MAAMI,EAAkB,CACpB,YAAaJ,EAAQ2xB,MACrB,eAAgB3xB,EAAQ+xB,SACxB,aAAc/xB,EAAQK,OACtB,gBAAiBL,EAAQmoB,WAG7BloB,KAAKC,eAAiB,WAAa,CAAEE,WACzC,CAEO,uBAAOW,GAEV,OAAO,gCAAqDC,MAAMhE,IAC9DiD,KAAK8pC,qBAAuB/sC,EAAO+sC,qBACnC9pC,KAAK+pC,kBAAoBhtC,EAAOgtC,kBAChC/pC,KAAKgqC,mBAAqBjtC,EAAOitC,mBACjChqC,KAAKiqC,kBAAoBltC,EAAOktC,iBAAiB,GAEzD,CAGO,uBAAaC,CAAiBnqC,4CACjC,MAAMmC,EAAclC,KAAKmqC,oBAAoBpqC,GAASqC,OAChDb,QAA4CvB,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,QAE9E,OAAOrC,KAAKoqC,6BAA6B7oC,EAC7C,IAEO,sBAAa8oC,CAAgBtqC,4CAChC,MAAMmC,EAAclC,KAAKsqC,mBAAmBvqC,GAASqC,OAC/Cb,QAA4CvB,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,QAC9E,OAAOrC,KAAKuqC,4BAA4BhpC,EAC5C,IAEO,8BAAaipC,CAAwBzqC,4CACxC,MAAMmC,EAAWlC,KAAKyqC,2BAA2B1qC,GAC3CwB,QAAgDvB,KAAKoB,QAAQ,CAAEc,IAAKA,EAAIE,OAAQC,OAAQ,QAE9F,OAAOrC,KAAK0qC,oCAAoC,CAC5CC,OAAQppC,EAASqpC,aACjBC,IAAK9qC,EAAQ8qC,IACb5nB,WAAYljB,EAAQkjB,YAE5B,IAGO,2BAAa6nB,CAAqB/qC,4CACrC,MAAMmC,EAAWlC,KAAKmqC,oBAAoBpqC,GACrC6/B,MAAM,CAAEz8B,WAAYilC,EAA6BroC,EAAQkC,UAAU6E,aAEpE/G,EAAQgrC,aAAehrC,EAAQirC,0BAA4BjrC,EAAQkC,WAAalC,EAAQgrC,aACxF7oC,EAAI+oC,SAAS,CAAEC,cAAe9C,EAA6BroC,EAAQgrC,eAIvE,MAAM1oC,EAAiBtC,EAAQirC,yBAA2B,MAAQ,OAC5DxpC,EAAexB,KAAKmrC,uBAAuBprC,GAE3CwB,QAA4CvB,KAAKoB,QAAQ,CAAEc,IAAKA,EAAIE,OAAQC,SAAQb,SAC1F,OAAOxB,KAAKoqC,6BAA6B7oC,EAC7C,IAGO,+BAAa6pC,CAAyBrrC,4CACzC,MAAMmC,EAAWlC,KAAKqrC,sBAAsBtrC,GAEtCsC,EAAiBtC,EAAQirC,yBAA2B,MAAQ,OAC5DxpC,EAAexB,KAAKmrC,uBAAuBprC,GAE3CwB,QAA4CvB,KAAKoB,QAAQ,CAAEc,IAAKA,EAAIE,OAAQC,SAAQb,SAC1F,OAAOxB,KAAKoqC,6BAA6B7oC,EAC7C,IAGO,yBAAayoC,CAAmBjqC,4CACnC,MAAMmC,EAAWlC,KAAKsrC,wBAAwBvrC,GACxCyB,EAA6B,CAAE+pC,QAAS,IAC9C,IAAK,MAAMC,KAAUzrC,EAAQ68B,QACzBp7B,EAAK+pC,QAAQnlC,KAAK,CAAEqlC,SAAUD,IAGlC,OAAOxrC,KAAKoB,QAAQ,CAAEc,IAAKA,EAAIE,OAAQC,OAAQ,OAAQb,QAC3D,IAGO,wBAAayoC,CAAkBlqC,4CAClC,MAAMmC,EAAWlC,KAAKsrC,wBAAwBvrC,GAE9C,aAD6CC,KAAKoB,QAAQ,CAAEc,IAAKA,EAAIE,OAAQC,OAAQ,SACrEkpC,OACpB,IAGO,wBAAaxB,CAAkBhqC,4CAClC,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CACnBrK,KAAMoD,EAAQpD,KACd+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,WACzBxG,OAAQP,EAAQO,QAEduG,EAAmB,WFhKW,uDEgKuBG,GAAQF,WAC7D5E,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQF,GAAUzE,OAE9Cb,QAA6CvB,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,QACzEY,EAAqB,GAE3B,IAAK,MAAMV,KAAOhB,EAASoqC,WACvB1oC,EAAOmD,KAAK,CACR7D,IAAKA,EAAIqpC,UACTzoC,WAAYqlC,EAA6BjmC,EAAIspC,YAC7CC,cAAevpC,EAAIwpC,gBAI3B,OAAO9oC,CACX,IAGO,2BAAa6mC,CAAqB/pC,4CAErC,OAAOA,EAAQisC,aAAavmC,OF/KiB,GEgLvCzF,KAAKisC,6BAA6BlsC,GAClCC,KAAKksC,4BAA4BnsC,EAC3C,IAGO,wBAAaosC,CAAkBpsC,4CAClC,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CAAErK,KAAMoD,EAAQpD,KAAM+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,WAAYxG,OAAQP,EAAQO,QAC5FuG,EAAmB,WF3LU,8DE2LuBG,GAAQF,WAC5D5E,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQF,GAAU+4B,MAAM,CAAEwM,WAAYrsC,EAAQqsC,aAAchqC,OAG9F,aADwCpC,KAAKoB,QAAQ,CAAEc,OAE3D,IAEO,uBAAaM,CAAiBzC,4CACjC,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CAAErK,KAAMoD,EAAQpD,KAAM+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,WAAYxG,OAAQP,EAAQO,QAC5FuG,EAAmB,WFpMY,gEEoMuBG,GAAQF,WAC9D5E,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQF,GAAU+4B,MAAM,CAAEwM,WAAYrsC,EAAQqsC,aAAchqC,OAE9F,aADkDpC,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,QAElF,IAGQ,kCAAa6pC,CAA4BnsC,4CAC7C,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CAAErK,KAAMoD,EAAQpD,KAAM+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,YAChED,EAAmB,WFlNgB,yCEkNuBG,GAAQF,WAClE5E,EAAc,IAAI,IAAJ,CAAQ0E,GAAMG,QAAQF,GAAUzE,OAGpD,aAD6CpC,KAAKoB,QAAQ,CAAEc,MAAKG,OAAQ,OAAQb,KAAMzB,EAAQisC,gBAC/ET,OACpB,IAGQ,mCAAaU,CAA6BlsC,4CAC9C,MAAM2F,EAAqC,GACrC2mC,GAAiC,IAAA1mC,OAAM5F,EAAQisC,aFtNR,IEwN7C,IAAIM,EAAgB,EAGpB,IAAK,MAAMN,KAAgBK,EAAoB,CF1NG,IE2N1CC,UACM,OF3NkC,KE4NxCA,EAAgB,GAEpB,MAAMlrC,EAAkCpB,KAAKksC,4BAA4B,OAAD,wBACjEnsC,GAAO,CACVisC,kBAEJM,GAAiB,EACjB5mC,EAASU,KAAKhF,GAElB,MAAM6B,QAAgC/B,QAAQ2E,IAAIH,GAClD,OAAO,IAAA6mC,SAAQtpC,EACnB,IAGQ,6BAAOkoC,CAAuBprC,GAMlC,MAAMyB,EAAgC,CAClCgrC,iBAAkB,CACdC,WAAY,CACRC,IAAK1sC,KAAK2sC,sBAAsB5sC,EAAQ6sC,QAmBpD,OAdI7sC,EAAQ8sC,oBACRrrC,EAAKgrC,iBAAiBC,WAAWK,IAAM,QAGvC/sC,EAAQgtC,UACRvrC,EAAKgrC,iBAAiBC,WAAWO,QAAUjtC,EAAQgtC,SAGnDhtC,EAAQktC,qBAAsB,IAAAhoC,SAAQlF,EAAQktC,oBAC9CltC,EAAQktC,kBAAkBlhC,SAAQ88B,IAC9BrnC,EAAKgrC,iBAAiBC,WAAW5D,EAAMtmC,KAAOsmC,EAAMlkB,KAAK,IAI1DnjB,CACX,CAEO,4BAAOmrC,CAAsBC,GAChC,GAAIA,EACA,OAAOA,EAGX,MAAMM,GAAa,SAAYxd,IF5RE,UE8RjC,OAAOyd,oBACH,WAA+BD,EAAa,IAAIA,IAAe,KAC1DE,OACArlB,cAEb,CAGQ,0BAAOoiB,CAAoBpqC,GAC/B,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CAAErK,KAAMoD,EAAQpD,KAAM+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,WAAYxG,OAAQP,EAAQO,QAC5FuG,EAAmB,WFvSS,mDEuSuBG,GAAQF,WACjE,OAAO,IAAI,IAAJ,CAAQF,GAAMG,QAAQF,EACjC,CAEQ,yBAAOyjC,CAAmBvqC,GAC9B,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CAAErK,KAAMoD,EAAQpD,KAAM+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,YAChED,EAAmB,WFxSQ,iCEwSuBG,GAAQF,WAChE,OAAO,IAAI,IAAJ,CAAQF,GAAMG,QAAQF,EACjC,CAGQ,8BAAOykC,CAAwBvrC,GACnC,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CAAErK,KAAMoD,EAAQpD,KAAM+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,WAAYxG,OAAQP,EAAQO,QAC5FuG,EAAmB,WFnTe,0DEmTuBG,GAAQF,WAEjE84B,EAAuB7/B,EAAgB,SAAI,CAAEoD,WAAYilC,EAA6BroC,EAAQkC,UAAU6E,YAAe,CAAC,EAC9H,OAAO,IAAI,IAAJ,CAAQF,GAAMG,QAAQF,GAAU+4B,MAAMA,EACjD,CAEQ,4BAAOyL,CAAsBtrC,GACjC,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CACnBrK,KAAMoD,EAAQpD,KACd+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,WACzBxG,OAAQP,EAAQO,OAChBwrC,cAAe/rC,EAAQ+rC,eAErBjlC,EAAmB,WFnUY,gFEmUuBG,GAAQF,WACpE,OAAO,IAAI,IAAJ,CAAQF,GAAMG,QAAQF,EACjC,CAEQ,iCAAO4jC,CAA2B1qC,GACtC,MAAM6G,GAAe,QAAqB7G,EAAQW,KAC5CsG,EAAiB,CAAErK,KAAMoD,EAAQpD,KAAM+uC,QAAS3rC,EAAQ2rC,QAAQ5kC,YAChED,EAAmB,WFzUiB,+CEyUuBG,GAAQF,WACzE,OAAO,IAAI,IAAJ,CAAQF,GAAMG,QAAQF,EACjC,CAEQ,kCAAO0jC,CAA4BhpC,GACvC,OAAIA,EAAS8rC,gBAAiB,IAAApoC,SAAQ1D,EAAS8rC,cACpC1E,EAAwBpnC,EAAS8rC,cAGrC,EACX,CAGQ,mCAAOjD,CAA6B7oC,GACxC,MAAMopC,EAAyB,GAC/B,IAAK,MAAM2C,KAAS/rC,EAASqpC,aACzBD,EAAOvkC,KAAK,CACR/J,GAAIixC,EAAMvB,cACVwB,SAAUD,EAAME,WAChBvrC,SAAUumC,EAA6B8E,EAAMzB,YAC7C4B,aAAcH,EAAMI,kBAI5B,MAAO,CACHptC,OAAQiB,EAASosC,OACjBC,OAAQrsC,EAASssC,aACjBlD,SACAmD,IAAK9tC,KAAK+tC,aAAaxsC,GACvBqrC,IAAK5sC,KAAKguC,OAAOzsC,GACjB6qC,WAAY7qC,EAAS0sC,WAE7B,CAwEQ,mBAAOF,CAAaxsC,WACxB,MAAM+rC,EAA8B/rC,EAASqpC,aAAa,GAC1D,OAA2C,QAAnC,EAAuB,QAAvB,EAAA0C,aAAK,EAALA,EAAOd,wBAAgB,eAAEC,kBAAU,eAAEK,KAC7C,IAAK,OACD,OAAO3E,EAAW+F,OACtB,IAAK,QACD,OAAO/F,EAAWgG,WAEtB,QACI,OAAOhG,EAAWiG,cAE1B,CAEQ,aAAOJ,CAAOzsC,aAClB,MAAM+rC,EAA8B/rC,EAASqpC,aAAa,GAC1D,OAA+C,QAAxC,EAAmC,QAAnC,EAAuB,QAAvB,EAAA0C,aAAK,EAALA,EAAOd,wBAAgB,eAAEC,kBAAU,eAAEC,WAAG,QAAI,IACvD,CAGQ,+BAAO2B,CAAyBzsC,GACpC,MAAMqB,EAAwBrB,EAAML,SAAUC,KAC9C,MAAO,CACH7E,KAAMsG,EAAOqrC,UACbC,YAAatrC,EAAOurC,iBACpBjnC,QAAStE,EAAOwrC,aAExB,CAEQ,cAAOrtC,CAAWrB,GACtB,OAAOC,KAAKC,eAAemB,QAAQ,OAAD,wBAAMrB,GAAO,CAAEuB,aAAc,UAC1DP,MAAMQ,GACIA,EAASC,OACjBG,OAAOlF,IACN,MAAMuD,KAAKquC,yBAAyB5xC,EAAE,GAElD,EAzGc,EAAAiuC,oCAA4E,EACtFC,SACAE,IAAK6D,EACLzrB,iBAEA,IAAI0rB,EAAmC,CAAC,EAiBxC,MAAMC,GAAmB,IAAAC,SAAQlE,GAAS2C,GAAUA,EAAMzB,aA4C1D,OA1CAhvC,OAAOkS,QAAQ6/B,GAAkB7iC,SAAQ,EAAE+iC,EAAgBC,MAEvD,MAAM5rC,EAAaqlC,EAA6BsG,GAChD,IAAIE,EAAiDD,EACjDE,EAA2C,IAA1BD,EAAevpC,OAEpC,GAAIwd,GAAcA,IAAe,KAAYpY,eAAiBokC,EAC1D,OAAON,EAAUxrC,GAAc6rC,EAAe,GAAGjD,cAIrD,KAAK,IAAA9mC,SAAQypC,GAAgB,CAIzBM,EAHyBD,EAAuBpqC,QAAQ2oC,GAC7CA,EAAM4B,MAAQ5B,EAAM4B,KAAKrqB,MAAM,KAAK8hB,SAAS+H,KAGxDO,EAA2C,IAA1BD,EAAevpC,OAOpC,IADsCijC,EAA4B/B,SAASxjC,IAEnE8rC,EACA,OAAON,EAAUxrC,GAAc6rC,EAAe,GAAGjD,cAQzD,MAAMoD,EAAsBH,EAAerqC,QAAQ2oC,GAAUA,EAAM8B,cAEnE,OADmE,IAA/BD,EAAoB1pC,OAE7CkpC,EAAUxrC,GAAcgsC,EAAoB,GAAGpD,mBAD1D,CAIM,IAGH4C,CAAS,mBCrbxB,MAAM,mBAAEU,GAAuB,EAAQ,QAGjC,iBAAEC,GAAqB,0BAEvBC,IAA0BD,GAAoBD,EAKpDtyC,EAAOC,QAAQ,GAAmB,CAC9BwyC,YAAaD,EACb/uB,gBAAiB+uB,EACjBlvB,aAAckvB,cCZlB,MAIME,EAAa,aAEbjlC,EAAU,gBAEVklC,EAAc,cAGdC,EAAc,cAapB5yC,EAAOC,QAAU,CACbsN,GAvBO,KAwBPC,IA1BQ,MA2BRklC,aACAjlC,UACAklC,cACAE,UAhBcD,MAiBdE,WAfeF,MAgBfG,kBAdsBH,MAetBI,eAbmBJ,MAcnBN,mBAZuBM,KAavBA,gCCpCJ,MAAM,kBAAEK,GAAsB,EAAQ,OAEhCC,EAAW,QACXC,EAAO,YAEPC,EAAe,GAAGF,OAAcC,QAChCE,EAA0B,kBAC1B5tB,EAA0B,GAAGytB,wCAE7BI,EAA0B,CAC5BC,cAAe,oBACfC,eAAgB,qBAChBC,yBAA0B,gCAG9BzzC,EAAOC,QAAQ,GAAkB,CAC7BkzC,OACAO,KAbS,IAcTR,WACAE,eACAC,0BACA5tB,2BAMyC8d,KAAKoQ,UAAUV,EAAkBW,gBACtBrQ,KAAKoQ,UAAUN,oBC5BvE,IAAIl0C,EAAM,CACT,iCAAkC,CACjC,IACA,KACA,KACA,KACA,KAED,4BAA6B,CAC5B,MACA,KACA,MAED,gCAAiC,CAChC,MACA,KACA,KACA,KACA,MAED,sBAAuB,CACtB,MACA,KACA,KACA,OAGF,SAAS00C,EAAoBx0C,GAC5B,IAAIG,EAAoBC,EAAEN,EAAKE,GAC9B,OAAO8E,QAAQpE,UAAUiE,MAAK,KAC7B,IAAItE,EAAI,IAAIC,MAAM,uBAAyBN,EAAM,KAEjD,MADAK,EAAEE,KAAO,mBACHF,CAAC,IAIT,IAAI6G,EAAMpH,EAAIE,GAAMC,EAAKiH,EAAI,GAC7B,OAAOpC,QAAQ2E,IAAIvC,EAAIutC,MAAM,GAAG30C,IAAIK,EAAoBE,IAAIsE,MAAK,IACzDxE,EAAoBF,IAE7B,CACAu0C,EAAoBh0C,KAAO,IAAOC,OAAOD,KAAKV,GAC9C00C,EAAoBv0C,GAAK,MACzBU,EAAOC,QAAU4zC","sources":["webpack://SiteGen.CoreLoader.2.21.2/../../node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/classes/friends-referral-api/friends-referral-api.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/classes/friends-referral-api/friends-referral-api.service.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/classes/friends-referral-api/friends-referral-api.utils.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/constants/config.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/constants/environments.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/constants/platforms.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/constants/website-flow.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/constants/website.domains.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/constants/website.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/localization/moment.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/localization/index.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/localization/language-regions.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/localization/locales.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/localization/locations.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/utils/timer.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/constants/ubi-services.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-common/utils/ubi-services.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/reducers/config.reducer.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/reducers/dictionaries.reducer.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/reducers/optional-config.reducer.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/store-config/store.config.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/bootstrap-api.service.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/bootstrap-configure.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/bootstrap.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/bootstrap/index.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/components/translate-hoc/translate-hoc.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/components/translate-hoc/translate-hoc.utils.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/components/translate-hoc/translate.hoc.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/constants/app.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/constants/locales.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/constants/platform.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/constants/platforms-display-props.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/__mocks__/login-session.mock.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/additional-info-common/fields/dropdown.component.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/additional-info-common/fields/string.component.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/additional-info-common/fields/int.component.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/additional-info-common/fields/fields.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/additional-info-common/fields/date.component.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/additional-info-common/additional-info.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/analytics-provider/analytics-provider.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/analytics-provider/analytics-provider.epic.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/analytics-provider/analytics-provider.service.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/analytics-provider/analytics-provider.component.tsx","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/analytics-provider/index.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/language-provider/i18n.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/language-provider/i18n.service.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/language-provider/language-provider.utils.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/language-provider/locale/locale.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/language-provider/locale/locale.service.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/language-provider/locale/locale.utils.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/login/login.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-api/ubisoft-api.service.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-api/ubisoft-api.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-connect-service/constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-connect-service/service.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-connect-service/utils.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-overlay-service/constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-overlay-service/index.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-overlay-service/utils.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-overlay-service/service.mock.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/modules/ubisoft-overlay-service/service.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/utils/css.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/utils/localizeTime.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/utils/url-params.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/utils/window-history.service.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/widgets/beta-registration/modules/beta-manager/beta-manager-api/beta-manager-api.constants.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/widgets/beta-registration/modules/beta-manager/beta-manager-api/beta-custom-fields.adapter.ts","webpack://SiteGen.CoreLoader.2.21.2/./src/widgets/beta-registration/modules/beta-manager/beta-manager-api/beta-manager-api.service.ts","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-build/config/env/dev-tools.js","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-build/config/env/sitegen.js","webpack://SiteGen.CoreLoader.2.21.2/../sitegen-build/config/fo.js","webpack://SiteGen.CoreLoader.2.21.2/./src/widgets/ lazy ^\\.\\/.*\\/root\\/index$ exclude: promotab chunkName: [request] namespace object"],"sourcesContent":["var map = {\n\t\"./af\": 95191,\n\t\"./af.js\": 95191,\n\t\"./ar\": 54358,\n\t\"./ar-dz\": 71727,\n\t\"./ar-dz.js\": 71727,\n\t\"./ar-kw\": 98279,\n\t\"./ar-kw.js\": 98279,\n\t\"./ar-ly\": 87895,\n\t\"./ar-ly.js\": 87895,\n\t\"./ar-ma\": 11987,\n\t\"./ar-ma.js\": 11987,\n\t\"./ar-sa\": 52796,\n\t\"./ar-sa.js\": 52796,\n\t\"./ar-tn\": 12386,\n\t\"./ar-tn.js\": 12386,\n\t\"./ar.js\": 54358,\n\t\"./az\": 57452,\n\t\"./az.js\": 57452,\n\t\"./be\": 79053,\n\t\"./be.js\": 79053,\n\t\"./bg\": 65428,\n\t\"./bg.js\": 65428,\n\t\"./bm\": 21569,\n\t\"./bm.js\": 21569,\n\t\"./bn\": 56212,\n\t\"./bn-bd\": 24635,\n\t\"./bn-bd.js\": 24635,\n\t\"./bn.js\": 56212,\n\t\"./bo\": 13667,\n\t\"./bo.js\": 13667,\n\t\"./br\": 192,\n\t\"./br.js\": 192,\n\t\"./bs\": 51802,\n\t\"./bs.js\": 51802,\n\t\"./ca\": 19118,\n\t\"./ca.js\": 19118,\n\t\"./cs\": 39990,\n\t\"./cs.js\": 39990,\n\t\"./cv\": 30557,\n\t\"./cv.js\": 30557,\n\t\"./cy\": 4227,\n\t\"./cy.js\": 4227,\n\t\"./da\": 95406,\n\t\"./da.js\": 95406,\n\t\"./de\": 87994,\n\t\"./de-at\": 44139,\n\t\"./de-at.js\": 44139,\n\t\"./de-ch\": 86591,\n\t\"./de-ch.js\": 86591,\n\t\"./de.js\": 87994,\n\t\"./dv\": 94649,\n\t\"./dv.js\": 94649,\n\t\"./el\": 14453,\n\t\"./el.js\": 14453,\n\t\"./en-au\": 48428,\n\t\"./en-au.js\": 48428,\n\t\"./en-ca\": 36972,\n\t\"./en-ca.js\": 36972,\n\t\"./en-gb\": 13224,\n\t\"./en-gb.js\": 13224,\n\t\"./en-ie\": 18843,\n\t\"./en-ie.js\": 18843,\n\t\"./en-il\": 32732,\n\t\"./en-il.js\": 32732,\n\t\"./en-in\": 76579,\n\t\"./en-in.js\": 76579,\n\t\"./en-nz\": 29851,\n\t\"./en-nz.js\": 29851,\n\t\"./en-sg\": 70442,\n\t\"./en-sg.js\": 70442,\n\t\"./eo\": 10654,\n\t\"./eo.js\": 10654,\n\t\"./es\": 63621,\n\t\"./es-do\": 68791,\n\t\"./es-do.js\": 68791,\n\t\"./es-mx\": 67278,\n\t\"./es-mx.js\": 67278,\n\t\"./es-us\": 60717,\n\t\"./es-us.js\": 60717,\n\t\"./es.js\": 63621,\n\t\"./et\": 72404,\n\t\"./et.js\": 72404,\n\t\"./eu\": 62944,\n\t\"./eu.js\": 62944,\n\t\"./fa\": 30496,\n\t\"./fa.js\": 30496,\n\t\"./fi\": 98137,\n\t\"./fi.js\": 98137,\n\t\"./fil\": 32872,\n\t\"./fil.js\": 32872,\n\t\"./fo\": 6545,\n\t\"./fo.js\": 6545,\n\t\"./fr\": 49090,\n\t\"./fr-ca\": 13049,\n\t\"./fr-ca.js\": 13049,\n\t\"./fr-ch\": 12338,\n\t\"./fr-ch.js\": 12338,\n\t\"./fr.js\": 49090,\n\t\"./fy\": 95088,\n\t\"./fy.js\": 95088,\n\t\"./ga\": 77812,\n\t\"./ga.js\": 77812,\n\t\"./gd\": 8374,\n\t\"./gd.js\": 8374,\n\t\"./gl\": 63649,\n\t\"./gl.js\": 63649,\n\t\"./gom-deva\": 52674,\n\t\"./gom-deva.js\": 52674,\n\t\"./gom-latn\": 44948,\n\t\"./gom-latn.js\": 44948,\n\t\"./gu\": 24033,\n\t\"./gu.js\": 24033,\n\t\"./he\": 10175,\n\t\"./he.js\": 10175,\n\t\"./hi\": 58055,\n\t\"./hi.js\": 58055,\n\t\"./hr\": 41678,\n\t\"./hr.js\": 41678,\n\t\"./hu\": 85111,\n\t\"./hu.js\": 85111,\n\t\"./hy-am\": 26530,\n\t\"./hy-am.js\": 26530,\n\t\"./id\": 19126,\n\t\"./id.js\": 19126,\n\t\"./is\": 11696,\n\t\"./is.js\": 11696,\n\t\"./it\": 98710,\n\t\"./it-ch\": 38821,\n\t\"./it-ch.js\": 38821,\n\t\"./it.js\": 98710,\n\t\"./ja\": 93974,\n\t\"./ja.js\": 93974,\n\t\"./jv\": 70648,\n\t\"./jv.js\": 70648,\n\t\"./ka\": 54731,\n\t\"./ka.js\": 54731,\n\t\"./kk\": 43501,\n\t\"./kk.js\": 43501,\n\t\"./km\": 84398,\n\t\"./km.js\": 84398,\n\t\"./kn\": 91825,\n\t\"./kn.js\": 91825,\n\t\"./ko\": 13729,\n\t\"./ko.js\": 13729,\n\t\"./ku\": 19670,\n\t\"./ku.js\": 19670,\n\t\"./ky\": 78797,\n\t\"./ky.js\": 78797,\n\t\"./lb\": 50627,\n\t\"./lb.js\": 50627,\n\t\"./lo\": 65859,\n\t\"./lo.js\": 65859,\n\t\"./lt\": 80355,\n\t\"./lt.js\": 80355,\n\t\"./lv\": 16594,\n\t\"./lv.js\": 16594,\n\t\"./me\": 45324,\n\t\"./me.js\": 45324,\n\t\"./mi\": 11689,\n\t\"./mi.js\": 11689,\n\t\"./mk\": 61308,\n\t\"./mk.js\": 61308,\n\t\"./ml\": 85241,\n\t\"./ml.js\": 85241,\n\t\"./mn\": 76320,\n\t\"./mn.js\": 76320,\n\t\"./mr\": 96771,\n\t\"./mr.js\": 96771,\n\t\"./ms\": 20503,\n\t\"./ms-my\": 77748,\n\t\"./ms-my.js\": 77748,\n\t\"./ms.js\": 20503,\n\t\"./mt\": 55534,\n\t\"./mt.js\": 55534,\n\t\"./my\": 62727,\n\t\"./my.js\": 62727,\n\t\"./nb\": 7550,\n\t\"./nb.js\": 7550,\n\t\"./ne\": 49899,\n\t\"./ne.js\": 49899,\n\t\"./nl\": 41228,\n\t\"./nl-be\": 31225,\n\t\"./nl-be.js\": 31225,\n\t\"./nl.js\": 41228,\n\t\"./nn\": 97130,\n\t\"./nn.js\": 97130,\n\t\"./oc-lnc\": 93130,\n\t\"./oc-lnc.js\": 93130,\n\t\"./pa-in\": 91282,\n\t\"./pa-in.js\": 91282,\n\t\"./pl\": 28190,\n\t\"./pl.js\": 28190,\n\t\"./pt\": 41549,\n\t\"./pt-br\": 78135,\n\t\"./pt-br.js\": 78135,\n\t\"./pt.js\": 41549,\n\t\"./ro\": 307,\n\t\"./ro.js\": 307,\n\t\"./ru\": 89272,\n\t\"./ru.js\": 89272,\n\t\"./sd\": 79248,\n\t\"./sd.js\": 79248,\n\t\"./se\": 74969,\n\t\"./se.js\": 74969,\n\t\"./si\": 65522,\n\t\"./si.js\": 65522,\n\t\"./sk\": 61581,\n\t\"./sk.js\": 61581,\n\t\"./sl\": 56428,\n\t\"./sl.js\": 56428,\n\t\"./sq\": 34611,\n\t\"./sq.js\": 34611,\n\t\"./sr\": 19821,\n\t\"./sr-cyrl\": 20185,\n\t\"./sr-cyrl.js\": 20185,\n\t\"./sr.js\": 19821,\n\t\"./ss\": 35029,\n\t\"./ss.js\": 35029,\n\t\"./sv\": 80939,\n\t\"./sv.js\": 80939,\n\t\"./sw\": 73107,\n\t\"./sw.js\": 73107,\n\t\"./ta\": 72304,\n\t\"./ta.js\": 72304,\n\t\"./te\": 72550,\n\t\"./te.js\": 72550,\n\t\"./tet\": 99717,\n\t\"./tet.js\": 99717,\n\t\"./tg\": 87669,\n\t\"./tg.js\": 87669,\n\t\"./th\": 94959,\n\t\"./th.js\": 94959,\n\t\"./tk\": 92661,\n\t\"./tk.js\": 92661,\n\t\"./tl-ph\": 52234,\n\t\"./tl-ph.js\": 52234,\n\t\"./tlh\": 94120,\n\t\"./tlh.js\": 94120,\n\t\"./tr\": 81111,\n\t\"./tr.js\": 81111,\n\t\"./tzl\": 53080,\n\t\"./tzl.js\": 53080,\n\t\"./tzm\": 88246,\n\t\"./tzm-latn\": 25385,\n\t\"./tzm-latn.js\": 25385,\n\t\"./tzm.js\": 88246,\n\t\"./ug-cn\": 48777,\n\t\"./ug-cn.js\": 48777,\n\t\"./uk\": 2014,\n\t\"./uk.js\": 2014,\n\t\"./ur\": 45953,\n\t\"./ur.js\": 45953,\n\t\"./uz\": 89716,\n\t\"./uz-latn\": 87791,\n\t\"./uz-latn.js\": 87791,\n\t\"./uz.js\": 89716,\n\t\"./vi\": 99816,\n\t\"./vi.js\": 99816,\n\t\"./x-pseudo\": 94450,\n\t\"./x-pseudo.js\": 94450,\n\t\"./yo\": 22556,\n\t\"./yo.js\": 22556,\n\t\"./zh-cn\": 7414,\n\t\"./zh-cn.js\": 7414,\n\t\"./zh-hk\": 50824,\n\t\"./zh-hk.js\": 50824,\n\t\"./zh-mo\": 88589,\n\t\"./zh-mo.js\": 88589,\n\t\"./zh-tw\": 63285,\n\t\"./zh-tw.js\": 63285\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 96616;","import { invert } from 'lodash';\nimport { PLATFORM_TYPES } from '../../constants/platforms';\n\nexport const CHECK_REFERRER_ELIGIBILITY_URL = '/api/v1/{campaignId}/players/{userId}/referrer_eligibility';\nexport const FRIEND_INVITEES_URL = '/api/v1/{campaignId}/players/{userId}/invitees';\nexport const REGISTER_PLAYER_URL = '/api/v1/{campaignId}/players/{userId}/{platformId}';\nexport const GET_CAMPAIGN_INFO_URL = '/api/v1/{campaignId}';\nexport const GET_INVITE_INFO_URL = '/api/v1/{campaignId}/players/{userId}/invite_info';\nexport const ACCEPT_INVITATION_URL = '/api/v1/{campaignId}/players/{userId}/accept_invite';\nexport const GET_REWARDS_INFO_URL = '/api/v1/{campaignId}/rewards';\nexport const GET_CAMPAIGN_STATUS_URL = '/api/v1/{campaignId}/status';\nexport const GET_PLAYERS_ELIGIBILITY_URL = '/api/v1/{campaignId}/players/invitee_eligibility';\nexport const GET_PLAYERS_URL = '/api/v1/{campaignId}/players';\nexport const GET_INVITEE_CONVERSION_STATUS: string = '/api/v1/{campaignId}/players/{userId}/conversion_status';\n\nexport enum GRANT_TYPES {\n BOTH = 'both',\n REFERRER = 'referrer',\n INVITEE = 'invitee',\n}\n\nexport enum TYPES {\n TRIAL = 'trial',\n RETENTION = 'retention',\n}\n\nexport enum CONJUNCTION_TYPES {\n AND = 'AND',\n OR = 'OR'\n}\n\nexport enum CONVERSION_RULES_TYPES {\n STAT_NOTIFICATION = 'STAT_NOTIFICATION',\n STAT_MATCH_NOTIFICATION = 'STAT_MATCH_NOTIFICATION',\n STAT_API_CALL = 'STAT_API_CALL'\n}\n\nexport const CONVERSION_RULES_TYPES_ID: { readonly [key: string]: number } = {\n [CONVERSION_RULES_TYPES.STAT_API_CALL]: 1,\n [CONVERSION_RULES_TYPES.STAT_NOTIFICATION]: 3,\n [CONVERSION_RULES_TYPES.STAT_MATCH_NOTIFICATION]: 5,\n};\n\nexport const CONVERSION_RULES_ID_TO_TYPES: { readonly [key: string]: CONVERSION_RULES_TYPES }\n = invert(CONVERSION_RULES_TYPES_ID) as { readonly [key: string]: CONVERSION_RULES_TYPES };\n\nexport const CONJUNCTION_TYPES_ID: { readonly [key: string]: number } = {\n [CONJUNCTION_TYPES.AND]: 1,\n [CONJUNCTION_TYPES.OR]: 2\n};\n\nexport const CONJUNCTION_ID_TO_TYPES: { readonly [key: string]: CONJUNCTION_TYPES }\n = invert(CONJUNCTION_TYPES_ID) as { readonly [key: string]: CONJUNCTION_TYPES };\n\nexport const GRANT_TYPES_ID: { readonly [key: string]: number } = {\n [GRANT_TYPES.BOTH]: 1,\n [GRANT_TYPES.REFERRER]: 2,\n [GRANT_TYPES.INVITEE]: 3,\n};\n\nexport const TYPES_ID: { readonly [key: string]: number } = {\n [TYPES.TRIAL]: 1,\n [TYPES.RETENTION]: 3,\n};\n\nexport enum ERROR_TYPE {\n NETWORK_ERROR,\n API_ERROR\n}\n\nexport const PLAYER_ERRORS_CODES = {\n PLAYER_IS_NOT_REGISTERED: 2004\n};\n\nexport const PLATFORM_TO_REFERRAL_PLATFORM_ID: { readonly [key: string]: number } = {\n [PLATFORM_TYPES.PC]: 1,\n [PLATFORM_TYPES.PS4]: 2,\n [PLATFORM_TYPES.XONE]: 3,\n [PLATFORM_TYPES.XSX]: 4,\n [PLATFORM_TYPES.PS5]: 5,\n [PLATFORM_TYPES.SWITCH]: 6,\n [PLATFORM_TYPES.STADIA]: 7\n};\n\nexport const REFERRAL_PLATFORM_ID_TO_PLATFORM: { readonly [key: string]: PLATFORM_TYPES }\n = invert(PLATFORM_TO_REFERRAL_PLATFORM_ID) as { readonly [key: string]: PLATFORM_TYPES };\n","import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport URI from 'urijs';\nimport 'urijs/src/URITemplate';\nimport { isEmpty, chunk } from 'lodash';\n\nimport { getFriendsReferralEndpoint } from '../../utils/ubi-services';\n\nimport {\n ACCEPT_INVITATION_URL,\n ERROR_TYPE,\n FRIEND_INVITEES_URL,\n GET_CAMPAIGN_INFO_URL,\n GET_CAMPAIGN_STATUS_URL,\n GET_INVITE_INFO_URL,\n GET_PLAYERS_URL,\n GET_REWARDS_INFO_URL,\n PLATFORM_TO_REFERRAL_PLATFORM_ID,\n PLAYER_ERRORS_CODES,\n REFERRAL_PLATFORM_ID_TO_PLATFORM,\n REGISTER_PLAYER_URL,\n GET_PLAYERS_ELIGIBILITY_URL,\n CHECK_REFERRER_ELIGIBILITY_URL,\n CONVERSION_RULES_ID_TO_TYPES,\n GET_INVITEE_CONVERSION_STATUS\n} from './friends-referral-api.constants';\n\nimport {\n ICampaignStatus,\n ICampaignInfo,\n ICampaignInfoResponse,\n IConfigureFriendsReferralServiceApiOptions,\n IConfigureFriendsReferralServiceSessionOptions,\n IFriendsReferralAPIError,\n IFriendsReferralError,\n IFriendsReferralResponse,\n IFRInviteeData,\n IGetInviteInfo,\n IGetPlayerInfo,\n IGetRewardsResponseItem,\n IRewardsResponseList,\n IGetInviteesResponse,\n IRegisterReferrerResult,\n IPlayersEligibilityResponse,\n IPlatformsEligibility,\n IGetEligibilityResponse,\n IGetConversionStatus\n} from './friends-referral-api.types';\nimport { PLATFORM_TYPES } from '../../constants/platforms';\nimport { isBeforeExpiration, checkRewardEligible } from './friends-referral-api.utils';\n\nconst FR_API_QUERY_LIMIT = 50;\n\nexport class FriendsReferralApiService {\n private static AXIOS_INSTANCE: AxiosInstance;\n private static ENV: string;\n private static CAMPAIGN_ID: string;\n private static USER_ID: string;\n\n private static API_CONFIGURED = false;\n private static SESSION_CONFIGURED = false;\n\n /** Provide headers and other options to each request */\n public static configureSession(options: IConfigureFriendsReferralServiceSessionOptions) {\n this.AXIOS_INSTANCE.defaults.headers = {\n 'Authorization': `Bearer ${options.ticket}`\n };\n this.USER_ID = options.userId;\n\n this.SESSION_CONFIGURED = true;\n }\n\n public static configureAPI(options: IConfigureFriendsReferralServiceApiOptions) {\n this.AXIOS_INSTANCE = axios.create();\n this.ENV = options.env;\n this.CAMPAIGN_ID = options.campaignId;\n\n this.API_CONFIGURED = true;\n }\n\n public static configureFakeAPI(): Promise {\n /* eslint-disable-next-line*/\n return import('./__mocks__/friend-referral-api.service.mocks').then((module: any): void => {\n this.getInvitees = module.getInvitees;\n this.inviteFriends = (): Promise => Promise.resolve();\n this.getRewardsInfo = module.getRewardsInfo;\n });\n }\n\n public static request(options: AxiosRequestConfig): Promise {\n this.checkIfApiConfigured();\n\n return this.AXIOS_INSTANCE.request({ ...options, responseType: 'json' })\n .then((response: AxiosResponse): T => {\n const error = !response.data.isSuccessful;\n if (error) {\n throw response.data;\n }\n return response.data.success!;\n }).catch((error: AxiosError | IFriendsReferralResponse): never => {\n if ((error as AxiosError).response) {\n throw this.getNetworkErrorFromResponse(error as AxiosError);\n } else {\n throw this.getFriendsReferralErrorFromResponse((error as IFriendsReferralResponse).failure!);\n }\n });\n }\n\n public static register(platform: PLATFORM_TYPES): Promise {\n const url: string = this.getRegisterURL(PLATFORM_TO_REFERRAL_PLATFORM_ID[platform]).href();\n\n return this.request({ url, method: 'POST' });\n }\n\n public static getPrivateKey(key: string) {\n return this[key];\n }\n\n public static acceptInvitation(options: { invitationId: string }): Promise {\n const url: string = this.getAcceptInvitationUrl().setQuery({ invitationId: options.invitationId }).href();\n return this.request({ url, method: 'POST' }).then();\n }\n\n public static getEligibilityInfo(): Promise {\n const url: string = this.getReferrerEligibilityURL().href();\n\n return this.request({ url, method: 'GET' }).then(eligibilityResponse => {\n return eligibilityResponse.platformEligibility.reduce(\n (result, item) => {\n const platformType = REFERRAL_PLATFORM_ID_TO_PLATFORM[item.platformId];\n result[platformType] = item.isEligible;\n return result;\n },\n {});\n });\n }\n\n public static getPlayersEligibility(ids: string[]): Promise {\n this.checkIfSessionConfigured();\n\n const url = this.getPlayersEligibilityUrl().href();\n\n return this.request({\n url,\n method: 'POST',\n headers: {\n ...this.AXIOS_INSTANCE.defaults.headers,\n 'Ubi-UserId': this.USER_ID\n },\n data: ids\n });\n }\n\n public static getPlayers(ids: string[]): Promise {\n this.checkIfSessionConfigured();\n\n const url = this.getPlayersUrl().href();\n\n return this.request({\n url,\n method: 'POST',\n headers: {\n ...this.AXIOS_INSTANCE.defaults.headers,\n 'Ubi-UserId': this.USER_ID\n },\n data: ids\n });\n }\n\n public static getCampaignInfo(): Promise {\n const url: string = this.getCampaignInfoURL().href();\n return this.request({ url, method: 'GET' })\n .then(({\n campaignSpaces,\n conversionConfig: { conjunction, rules },\n name,\n crossPlatform,\n softClosingDate,\n endDate,\n platformLock\n }: ICampaignInfoResponse) => {\n const spaces = campaignSpaces.reduce((acc, space) => {\n acc[REFERRAL_PLATFORM_ID_TO_PLATFORM[space.platformId]] = space.spaceIdStats;\n return acc;\n }, {});\n const availableRules = rules.filter(rule => CONVERSION_RULES_ID_TO_TYPES[rule.type]);\n\n return {\n spaces,\n conversion: { conjunction, rules: availableRules },\n name,\n crossPlatform,\n endDate,\n platformLock,\n softCloseMode: !isBeforeExpiration(softClosingDate)\n } as ICampaignInfo;\n });\n }\n\n public static getPlayerInfo(userId: string): Promise {\n return this.getPlayers([userId])\n .then(playerInfos => {\n if (isEmpty(playerInfos)) {\n return {\n isReferrer: false // is always 'false' if API responds with 'PLAYER_IS_NOT_REGISTERED' error\n };\n }\n\n const [{\n invitationId,\n referrerUbiAccountId,\n referrerId,\n platformId,\n isConverted\n }] = playerInfos;\n\n return {\n isReferrer: true, // is always 'true' if API responds with any info\n invitationId,\n referrerUbiAccountId,\n referrerId,\n isConverted,\n platformId: platformId ? REFERRAL_PLATFORM_ID_TO_PLATFORM[platformId] : null\n };\n })\n .catch(error => {\n if (\n ERROR_TYPE.API_ERROR === error.type\n && PLAYER_ERRORS_CODES.PLAYER_IS_NOT_REGISTERED === error.code\n ) {\n return {\n isReferrer: false // is always 'false' if API responds with 'PLAYER_IS_NOT_REGISTERED' error\n };\n }\n return error;\n });\n }\n\n public static getInvitees(options: { page: number, size?: number }): Promise {\n const url: string = this.getInviteesURL(options).href();\n return this.request({ url, method: 'GET' });\n }\n\n public static inviteFriends(ubiIdList: string[]): Promise {\n const url: string = this.getInviteesURL({}).href();\n\n if (ubiIdList.length <= FR_API_QUERY_LIMIT) {\n return this.request({ url, method: 'POST', data: ubiIdList }).then((): void => undefined);\n }\n\n // Split into multiple calls if id list exceeds API query limit\n const chunkedIds = chunk(ubiIdList, FR_API_QUERY_LIMIT);\n const requests = chunkedIds.map(idsChunk => this.request({\n url,\n method: 'POST',\n data: idsChunk\n }));\n\n return Promise.all(requests).then((): void => undefined);\n }\n\n public static getRewardsInfo(): Promise {\n const url: string = this.getRewardsInfoURL().href();\n return this.request({\n url,\n headers: {\n 'Authorization': null\n },\n method: 'GET'\n }).then(rewardsResponse => {\n /* We group all rewards into tiers by 'levelNumber' which become an 'id' of tier */\n return rewardsResponse.reduce((result, rewardItem) => {\n const isEligibleReward = checkRewardEligible(rewardItem);\n\n if (!isEligibleReward) {\n return result;\n }\n\n if (isEmpty(result[rewardItem.levelNumber])) {\n result[rewardItem.levelNumber] = { rewardsIds: [] };\n } else {\n if (result[rewardItem.levelNumber].levelLimit !== rewardItem.levelLimit) {\n throw 'Misconfiguration: items with different \"levelNumbers\" can\\'t be grouped';\n }\n }\n result[rewardItem.levelNumber].levelLimit = rewardItem.levelLimit;\n result[rewardItem.levelNumber].rewardsIds.push(rewardItem.id);\n result[rewardItem.levelNumber].levelRepeat = rewardItem.levelRepeat;\n return result;\n }, {});\n });\n }\n\n public static async getCampaignStatus(): Promise {\n this.checkIfApiConfigured();\n const url = this.getCampaignStatusUrl().href();\n const options = {\n url,\n headers: {\n 'Authorization': null\n },\n method: 'GET',\n responseType: 'json'\n };\n\n try {\n const response = await this.AXIOS_INSTANCE.request(options);\n return (response.data as ICampaignStatus);\n } catch (error) {\n throw this.getNetworkErrorFromResponse(error as AxiosError);\n }\n }\n\n public static getInviteInfo(options: { invitationId: string }): Promise {\n const url: string = this.getInviteInfoUrl()\n .setQuery({ invitationId: options.invitationId }).href();\n return this.request({ url, method: 'GET' })\n .then(invitationInfo => ({\n ...invitationInfo,\n platformId: REFERRAL_PLATFORM_ID_TO_PLATFORM[invitationInfo.platformId]\n }));\n }\n\n public static async getInviteeConversionStatus(options: {\n readonly campaignId: string,\n readonly userId: string\n }): Promise {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const template: string = URI.expand!(GET_INVITEE_CONVERSION_STATUS, options).toString();\n const url: string = new URI(host)\n .segment(template)\n .href();\n return await this.request({ url, method: 'GET' });\n }\n\n private static getRegisterURL(platformId: number): URI {\n this.checkIfSessionConfigured();\n\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID, platformId };\n const template: string = URI.expand!(REGISTER_PLAYER_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getInviteesURL(options: { page?: number, size?: number }): URI {\n this.checkIfSessionConfigured();\n\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(FRIEND_INVITEES_URL, values).toString();\n return new URI(host)\n .segment(template)\n .setQuery({ pageIndex: options.page, pageSize: options.size });\n }\n\n private static getReferrerEligibilityURL(): URI {\n this.checkIfSessionConfigured();\n\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(CHECK_REFERRER_ELIGIBILITY_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getRewardsInfoURL(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID };\n const template: string = URI.expand!(GET_REWARDS_INFO_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getCampaignInfoURL(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID };\n const template: string = URI.expand!(GET_CAMPAIGN_INFO_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getInviteInfoUrl(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(GET_INVITE_INFO_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getAcceptInvitationUrl(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(ACCEPT_INVITATION_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getPlayersEligibilityUrl(): URI {\n const host = getFriendsReferralEndpoint(this.ENV);\n const values = { campaignId: this.CAMPAIGN_ID };\n const template = URI.expand!(GET_PLAYERS_ELIGIBILITY_URL, values).toString();\n\n return new URI(host).segment(template);\n }\n\n private static getPlayersUrl(): URI {\n const host = getFriendsReferralEndpoint(this.ENV);\n const values = { campaignId: this.CAMPAIGN_ID };\n const template = URI.expand!(GET_PLAYERS_URL, values).toString();\n\n return new URI(host).segment(template);\n }\n\n private static getCampaignStatusUrl(): URI {\n const host = getFriendsReferralEndpoint(this.ENV);\n const values = { campaignId: this.CAMPAIGN_ID };\n const template = URI.expand!(GET_CAMPAIGN_STATUS_URL, values).toString();\n\n return new URI(host).segment(template);\n }\n\n /** Convert Friends Referral API error to application-specific error */\n private static getFriendsReferralErrorFromResponse(error: IFriendsReferralAPIError): IFriendsReferralError {\n return {\n code: parseInt(error.errorCode, 10),\n message: error.errorMessage,\n type: ERROR_TYPE.API_ERROR\n };\n }\n\n /** Convert network error to application-specific error */\n private static getNetworkErrorFromResponse(error: AxiosError): IFriendsReferralError {\n return {\n code: error.response!.status,\n message: error.message,\n type: ERROR_TYPE.NETWORK_ERROR\n };\n }\n\n private static checkIfApiConfigured() {\n if (!this.API_CONFIGURED) {\n throw new Error('API configuration is required, please check if config method is executed');\n }\n }\n\n private static checkIfSessionConfigured() {\n if (!this.SESSION_CONFIGURED) {\n throw new Error('Session configuration is required, please check if config methods is executed');\n }\n }\n}\n","import moment from 'moment';\n\nimport { GRANT_TYPES, GRANT_TYPES_ID, TYPES, TYPES_ID } from './friends-referral-api.constants';\nimport { IGetRewardsResponseItem } from './friends-referral-api.types';\n\nexport const checkRewardEligible = (rewardItem: IGetRewardsResponseItem) => {\n /* we only want to display referrer/both and not the invitee reward */\n const isInviteeGrantType = rewardItem.grantType === GRANT_TYPES_ID[GRANT_TYPES.INVITEE];\n const isActive = rewardItem.active;\n const isTrialType = rewardItem.type === TYPES_ID[TYPES.TRIAL];\n const isRetentionType = rewardItem.type === TYPES_ID[TYPES.RETENTION];\n return !isInviteeGrantType && isActive && !isTrialType && !isRetentionType;\n};\n\n/**\n * Dates received from server do not contain timezone information and should be considered as UTC.\n * Dates received from admin tool (beta flow only) have information about timezone, so moment.utc(...) will still work\n */\nexport const isBeforeExpiration = (date?: string | null) => {\n const expirationTime: moment.Moment = moment.utc(date);\n\n if (!date || !expirationTime.isValid()) {\n return true;\n }\n\n const localTime: moment.Moment = moment();\n return localTime.isBefore(expirationTime);\n};\n","import IDictionaries from '../localization/dictionaries';\nimport { LANGUAGE_REGION } from '../localization/language-regions';\nimport { ENV } from './environments';\nimport { WIDGET_NAME } from './widgets';\nimport { IContentPackItem } from '../types/content-packs';\nimport { PLAYER_SOURCE_TYPE } from './player-sources';\nimport { IRedeemCodeFormat } from '../types/redemption.types';\nimport { PLATFORM_TYPES } from './platforms';\nimport { IRewardTierItem } from '../types/rewards-tiers';\nimport { ICategory } from '../types/faq';\nimport { IAgeRatings } from './age-ratings';\nimport { IDataFormat } from '../classes/friends-referral-api';\nimport { IEntitlement } from '../types/entitlements';\n\nexport enum WEBSITE_MODE {\n EMBEDDED = 'embedded',\n STANDALONE = 'standalone'\n}\n\ninterface IConfig {\n envName: ENV;\n applicationId: string;\n genomeId: string;\n microId?: boolean;\n twitchOfferID: string;\n urlPath: string;\n shouldInheritStyles: boolean;\n mode: WEBSITE_MODE;\n widgetName: WIDGET_NAME;\n maintenanceMode: boolean;\n platformSelection: Array;\n isAnalyticsEnabled: boolean;\n analyticsFlowType?: string;\n analyticsBrand: string;\n analyticsGame: string;\n analyticsMDMBrandId: string;\n analyticsMDMInstallmentId: string;\n analyticsSiteName: string;\n contentPath: string;\n links: {\n faq: string\n };\n RSCodeFormat: IRedeemCodeFormat;\n eventCode: string;\n ageRatings: IAgeRatings;\n availableLanguages: { [key in LANGUAGE_REGION]: string[] };\n readonly selectedPackItemId: string;\n readonly contentPackItems?: IContentPackItem[];\n datesSettings?: IDatesSettings;\n styles: IStyles;\n websiteAbsolutePath: string;\n readonly betaRegistration?: IBetaRegistration;\n readonly freeContent?: IFreeContent;\n readonly rewardsTiers?: IRewardTierItem[];\n readonly friendsReferral?: IFriendsReferral;\n readonly entitlements?: IEntitlement[];\n}\n\nexport interface IWebsiteSettings {\n readonly contentPackItems?: IContentPackItem[];\n readonly friendsReferral?: IFriendsReferral;\n}\n\nexport interface IFreeContent {\n readonly useBrandedInstallerUrl: boolean;\n readonly brandedInstallerUrl: string;\n}\n\nexport interface IFriendsReferral {\n readonly showGameLogo: boolean;\n readonly campaignId: string;\n readonly rewardsImageSrc?: string;\n readonly inviteeRewardImageSrc?: string;\n readonly dataFormat: IDataFormat[];\n readonly faq: Array;\n}\n\nexport interface IBetaRegistration {\n readonly code: string;\n readonly phaseId: number;\n readonly nda: boolean;\n readonly ndaContent?: string;\n readonly autoPush: {\n readonly enabled: boolean,\n readonly tag: string\n };\n readonly multiplePlatform: boolean;\n readonly restrictedPlayerSources: PLAYER_SOURCE_TYPE[];\n readonly isPlatformChangeAllowed: boolean;\n readonly friendInvite: {\n readonly enabled: boolean,\n readonly number: number\n };\n readonly friendsInviteFriends?: {\n readonly enabled: boolean\n };\n readonly excludedCountries?: string[];\n}\n\nexport interface IDatesSettings {\n readonly startDate?: string;\n readonly endDate?: string;\n readonly shouldDisplayInUTC?: boolean;\n}\n\nexport interface IStyles {\n areStylesAlreadyApplied: false;\n custom: string;\n default: string[];\n assets: string;\n /** Colors and styling is provided as CSS content rather then link */\n readonly colorsAndStylingContent?: string;\n}\n\nexport interface IBootstrapConfig extends IConfig {\n dictionaries: IDictionaries;\n}\n\nexport interface IEmbeddedAppConfig {\n readonly initialLanguage?: string;\n}\n\nexport default IConfig;\n","export enum ENV {\n QC = 'QC',\n UAT = 'UAT',\n DEV = 'DEV',\n PREPROD = 'PREPROD',\n PROD = 'PROD'\n}\n","import { keyBy } from 'lodash';\nimport { WEBSITE_FLOW } from './website-flow';\n\nexport interface IPlatform {\n id: string;\n displayName: string;\n}\n\n/* TODO: Delete PS3, X360 and Wii U after ~2.7.2 */\nexport enum PLATFORM_TYPES {\n PC = 'PC',\n PS4 = 'PS4',\n XONE = 'XONE',\n SWITCH = 'SWITCH',\n PS3 = 'PS3',\n X360 = 'X360',\n WIIU = 'WIIU',\n WEB = 'WEB',\n MOBILE = 'MOBILE',\n IOS = 'IOS',\n ANDROID = 'ANDROID',\n OCULUSVR = 'OCULUSVR',\n STEAMVR = 'STEAMVR',\n STEAM = 'STEAM',\n EPIC = 'EPIC',\n STADIA = 'STADIA',\n PS5 = 'PS5',\n XSX = 'XSX',\n LUNA = 'LUNA',\n AMAZON = 'AMAZON'\n}\n\nexport const LINKABLE_PLATFORMS = [PLATFORM_TYPES.PS4, PLATFORM_TYPES.XONE];\n\nexport const PLATFORM_XBOX_ONE = 'XboxOne';\nexport const PLATFORM_XBOX_SERIES = 'XboxSeriesX';\n\nconst PLATFORMS: Array = [\n {\n id: PLATFORM_TYPES.PC,\n displayName: PLATFORM_TYPES.PC\n },\n {\n id: PLATFORM_TYPES.PS4,\n displayName: PLATFORM_TYPES.PS4\n },\n {\n id: PLATFORM_TYPES.XONE,\n displayName: PLATFORM_TYPES.XONE\n },\n {\n id: PLATFORM_TYPES.SWITCH,\n displayName: PLATFORM_TYPES.SWITCH\n },\n {\n id: PLATFORM_TYPES.XSX,\n displayName: PLATFORM_TYPES.XSX\n },\n {\n id: PLATFORM_TYPES.PS5,\n displayName: PLATFORM_TYPES.PS5\n }\n];\n\nconst REDEEM_PLATFORMS: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.EPIC,\n displayName: PLATFORM_TYPES.EPIC\n },\n {\n id: PLATFORM_TYPES.STADIA,\n displayName: PLATFORM_TYPES.STADIA\n },\n {\n id: PLATFORM_TYPES.LUNA,\n displayName: PLATFORM_TYPES.LUNA\n }\n];\n\nconst REDEEM_PLATFORMS_V1: Array = [\n ...REDEEM_PLATFORMS,\n {\n id: PLATFORM_TYPES.IOS,\n displayName: PLATFORM_TYPES.IOS\n },\n {\n id: PLATFORM_TYPES.ANDROID,\n displayName: PLATFORM_TYPES.ANDROID\n }\n];\n\nconst PYC_REDEEM_PLATFORMS: Array = [\n {\n id: PLATFORM_TYPES.PC,\n displayName: PLATFORM_TYPES.PC\n },\n {\n id: PLATFORM_TYPES.EPIC,\n displayName: PLATFORM_TYPES.EPIC\n }\n];\n\nexport const BETA_PLATFORMS: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.LUNA,\n displayName: PLATFORM_TYPES.LUNA\n },\n {\n id: PLATFORM_TYPES.WEB,\n displayName: PLATFORM_TYPES.WEB\n },\n {\n id: PLATFORM_TYPES.MOBILE,\n displayName: PLATFORM_TYPES.MOBILE\n },\n {\n id: PLATFORM_TYPES.IOS,\n displayName: PLATFORM_TYPES.IOS\n },\n {\n id: PLATFORM_TYPES.ANDROID,\n displayName: PLATFORM_TYPES.ANDROID\n },\n {\n id: PLATFORM_TYPES.OCULUSVR,\n displayName: PLATFORM_TYPES.OCULUSVR\n },\n {\n id: PLATFORM_TYPES.STEAMVR,\n displayName: PLATFORM_TYPES.STEAMVR\n },\n {\n id: PLATFORM_TYPES.EPIC,\n displayName: PLATFORM_TYPES.EPIC\n },\n {\n id: PLATFORM_TYPES.STADIA,\n displayName: PLATFORM_TYPES.STADIA\n },\n {\n id: PLATFORM_TYPES.AMAZON,\n displayName: PLATFORM_TYPES.AMAZON\n }\n];\n\nconst FRIENDS_REFERRAL_PLATFORMS: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.STADIA,\n displayName: PLATFORM_TYPES.STADIA\n }\n];\n\nconst DEFAULT_PLATFORMS: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.LUNA,\n displayName: PLATFORM_TYPES.LUNA\n }\n];\n\nexport const PLATFORMS_BY_WEBSITE_FLOW = (flow?: WEBSITE_FLOW): Array => {\n switch (flow) {\n case WEBSITE_FLOW.BETA_APPROVAL:\n case WEBSITE_FLOW.BETA_REGISTRATION:\n return BETA_PLATFORMS;\n case WEBSITE_FLOW.ULC_REDEEM:\n case WEBSITE_FLOW.CF_REDEEM:\n return REDEEM_PLATFORMS_V1;\n case WEBSITE_FLOW.CF_REDEEM_V2:\n return REDEEM_PLATFORMS;\n case WEBSITE_FLOW.PYC_REDEEM:\n return PYC_REDEEM_PLATFORMS;\n case WEBSITE_FLOW.FRIENDS_REFERRAL:\n return FRIENDS_REFERRAL_PLATFORMS;\n default:\n return DEFAULT_PLATFORMS;\n }\n};\n\nexport const DEFAULT_WEBSITE_PLATFORM_SELECTION_ENUM = [\n PLATFORM_TYPES.PC,\n PLATFORM_TYPES.PS4,\n PLATFORM_TYPES.XONE\n];\n\nexport const DEFAULT_PYC_REDEEM_PLATFORM_SELECTION_ENUM = [ PLATFORM_TYPES.PC ];\n\nexport const DEFAULT_CF_REDDEM_PLATFORM_SELECTION_ENUM = [\n ...DEFAULT_WEBSITE_PLATFORM_SELECTION_ENUM,\n PLATFORM_TYPES.STADIA,\n PLATFORM_TYPES.PS5,\n PLATFORM_TYPES.XSX\n];\nexport const WEBSITE_PLATFORM_SELECTION_ENUM = DEFAULT_PLATFORMS.map(({ id }) => id);\nexport const PLATFORMS_BY_PLATFORM_ID: { [id: string]: IPlatform } = keyBy(BETA_PLATFORMS, 'id');\n\n/* It's Used as attribute on Platform selection screen */\nexport const DATA_PLATFORMS_AMOUNT = 'data-platforms-amount';\n","/** Available types of event flows in all application */\nexport enum WEBSITE_FLOW {\n BETA_REGISTRATION = 'BETA_REGISTRATION',\n BETA_APPROVAL = 'BETA_APPROVAL',\n OPEN_BETA = 'OPEN_BETA',\n ULC_REDEEM = 'ULC_REDEEM',\n CF_REDEEM = 'CF_REDEEM',\n CF_REDEEM_V2 = 'CF_REDEEM_V2',\n PYC_REDEEM = 'PYC_REDEEM',\n TWITCH_PRIME = 'TWITCH_PRIME',\n STANDARD_REGISTRATION = 'STANDARD_REGISTRATION',\n FREE_WEEKEND = 'FREE_WEEKEND',\n TRIALS = 'TRIALS',\n DEMO = 'DEMO',\n FRIENDS_REFERRAL = 'FRIENDS_REFERRAL',\n GIVEAWAY = 'GIVEAWAY',\n PROMOTAB = 'PROMOTAB'\n}\n","import { IWebsiteSubdomain } from '../types';\nimport { ENV } from './environments';\n\nexport const REGISTER_DOMAIN = 'register';\nexport const FREE_WEEKEND_DOMAIN = 'freeweekend';\nexport const TWITCH_PRIME_DOMAIN = 'twitchprime';\nexport const REDEEM_DOMAIN = 'redeem';\nexport const PC_PROMO = 'pc-promo';\nexport const STANDARD_REGISTRATION_DOMAIN = 'standard-registration';\nexport const FRIENDS_REFERRAL_DOMAIN = 'referral';\n\nexport type IWebsiteDomain = typeof REGISTER_DOMAIN\n | typeof FREE_WEEKEND_DOMAIN\n | typeof TWITCH_PRIME_DOMAIN\n | typeof REDEEM_DOMAIN\n | typeof PC_PROMO\n | typeof STANDARD_REGISTRATION_DOMAIN\n | typeof FRIENDS_REFERRAL_DOMAIN;\n\nexport const formWebsiteSubdomain = (subdomain: IWebsiteDomain): IWebsiteSubdomain => ({\n [ENV.DEV]: `https://dev-${subdomain}.ubisoft.com`,\n [ENV.QC]: `https://qc-${subdomain}.ubisoft.com`,\n [ENV.UAT]: `https://uat-${subdomain}.ubisoft.com`,\n [ENV.PREPROD]: `https://preprod-${subdomain}.ubisoft.com`,\n [ENV.PROD]: `https://${subdomain}.ubisoft.com`\n});\n\nexport const DEFAULT_CDN_URL = 'https://static-live.ubisoft.com/';\n\nexport const formWebsiteCDNUrl = ({ env, flow = null }: { env: ENV, flow?: IWebsiteDomain | null}): string => {\n let result = `${DEFAULT_CDN_URL}sitegen/${env}/FO/`;\n if (flow) {\n result = `${result}${flow}`;\n }\n return result;\n};\n\nexport const formCDNCachedTranslationFileUrl = ({ flow }: { flow: string }): string => {\n let result = `${DEFAULT_CDN_URL}sitegen/oasis/translations/${flow}.json`;\n return result;\n};\n","import { IWebsiteSubdomain } from '../types';\nimport {\n formWebsiteSubdomain,\n FREE_WEEKEND_DOMAIN,\n FRIENDS_REFERRAL_DOMAIN,\n IWebsiteDomain,\n PC_PROMO,\n REDEEM_DOMAIN,\n REGISTER_DOMAIN,\n STANDARD_REGISTRATION_DOMAIN,\n TWITCH_PRIME_DOMAIN\n} from './website.domains';\nimport { WEBSITE_FLOW } from './website-flow';\nimport { WIDGET_NAME } from './widgets';\n\nexport const WEBSITE_DEFAULT_ANALYTIC_NAME = 'site gen';\n\n/**\n * flow id: the name of a directory where a website is deployed during publication\n */\nexport const WEBSITES_FLOW_SUFFIX: { [key: string]: IWebsiteDomain } = {\n [WEBSITE_FLOW.BETA_REGISTRATION]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.BETA_APPROVAL]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.OPEN_BETA]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.ULC_REDEEM]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.CF_REDEEM]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.CF_REDEEM_V2]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.PYC_REDEEM]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.TWITCH_PRIME]: TWITCH_PRIME_DOMAIN,\n [WEBSITE_FLOW.STANDARD_REGISTRATION]: STANDARD_REGISTRATION_DOMAIN,\n [WEBSITE_FLOW.FREE_WEEKEND]: FREE_WEEKEND_DOMAIN,\n [WEBSITE_FLOW.TRIALS]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.DEMO]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.FRIENDS_REFERRAL]: FRIENDS_REFERRAL_DOMAIN,\n [WEBSITE_FLOW.GIVEAWAY]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.PROMOTAB]: PC_PROMO\n};\n\n/**\n * flow id: widget directory in the CORE package\n */\nexport const WEBSITES_WIDGET_NAME_BY_FLOW_ID: { [key: string]: WIDGET_NAME } = {\n [WEBSITE_FLOW.BETA_REGISTRATION]: WIDGET_NAME.BETA_REGISTRATION,\n [WEBSITE_FLOW.BETA_APPROVAL]: WIDGET_NAME.BETA_APPROVAL,\n [WEBSITE_FLOW.OPEN_BETA]: WIDGET_NAME.OPEN_BETA,\n [WEBSITE_FLOW.ULC_REDEEM]: WIDGET_NAME.ULC_REDEEM,\n [WEBSITE_FLOW.CF_REDEEM]: WIDGET_NAME.CF_REDEEM,\n [WEBSITE_FLOW.CF_REDEEM_V2]: WIDGET_NAME.CF_REDEEM_V2,\n [WEBSITE_FLOW.PYC_REDEEM]: WIDGET_NAME.PYC_REDEEM,\n [WEBSITE_FLOW.TWITCH_PRIME]: WIDGET_NAME.TWITCH_PRIME,\n [WEBSITE_FLOW.STANDARD_REGISTRATION]: WIDGET_NAME.STANDARD_REGISTRATION,\n [WEBSITE_FLOW.FREE_WEEKEND]: WIDGET_NAME.FREE_WEEKEND,\n [WEBSITE_FLOW.TRIALS]: WIDGET_NAME.TRIALS,\n [WEBSITE_FLOW.DEMO]: WIDGET_NAME.DEMO,\n [WEBSITE_FLOW.FRIENDS_REFERRAL]: WIDGET_NAME.FRIENDS_REFERRAL,\n [WEBSITE_FLOW.GIVEAWAY]: WIDGET_NAME.GIVEAWAY,\n [WEBSITE_FLOW.PROMOTAB]: WIDGET_NAME.PROMOTAB\n};\n\nexport const WEBSITES_FLOW_ID_BY_WIDGET_NAME: { [key: string]: WEBSITE_FLOW } = {\n [WIDGET_NAME.BETA_REGISTRATION]: WEBSITE_FLOW.BETA_REGISTRATION,\n [WIDGET_NAME.BETA_APPROVAL]: WEBSITE_FLOW.BETA_APPROVAL,\n [WIDGET_NAME.OPEN_BETA]: WEBSITE_FLOW.OPEN_BETA,\n [WIDGET_NAME.ULC_REDEEM]: WEBSITE_FLOW.ULC_REDEEM,\n [WIDGET_NAME.CF_REDEEM]: WEBSITE_FLOW.CF_REDEEM,\n [WIDGET_NAME.CF_REDEEM_V2]: WEBSITE_FLOW.CF_REDEEM_V2,\n [WIDGET_NAME.PYC_REDEEM]: WEBSITE_FLOW.PYC_REDEEM,\n [WIDGET_NAME.TWITCH_PRIME]: WEBSITE_FLOW.TWITCH_PRIME,\n [WIDGET_NAME.STANDARD_REGISTRATION]: WEBSITE_FLOW.STANDARD_REGISTRATION,\n [WIDGET_NAME.FREE_WEEKEND]: WEBSITE_FLOW.FREE_WEEKEND,\n [WIDGET_NAME.TRIALS]: WEBSITE_FLOW.TRIALS,\n [WIDGET_NAME.DEMO]: WEBSITE_FLOW.DEMO,\n [WIDGET_NAME.FRIENDS_REFERRAL]: WEBSITE_FLOW.FRIENDS_REFERRAL,\n [WIDGET_NAME.GIVEAWAY]: WEBSITE_FLOW.GIVEAWAY,\n [WIDGET_NAME.PROMOTAB]: WEBSITE_FLOW.PROMOTAB\n};\n\n/**\n * flow id: website display name\n */\nexport const WEBSITE_DISPLAY_NAME_BY_FLOW_ID: { [key: string]: string } = {\n [WEBSITE_FLOW.BETA_REGISTRATION]: 'Beta registration',\n [WEBSITE_FLOW.BETA_APPROVAL]: 'Beta approval',\n [WEBSITE_FLOW.OPEN_BETA]: 'Open Beta',\n [WEBSITE_FLOW.ULC_REDEEM]: 'Platform-first Redeem',\n [WEBSITE_FLOW.CF_REDEEM]: 'Code-first Redeem',\n [WEBSITE_FLOW.CF_REDEEM_V2]: 'Code-first Redeem v2',\n [WEBSITE_FLOW.PYC_REDEEM]: 'Pick-Your-Content Redeem',\n [WEBSITE_FLOW.TWITCH_PRIME]: 'Twitch Prime',\n [WEBSITE_FLOW.STANDARD_REGISTRATION]: 'Standard registration',\n [WEBSITE_FLOW.FREE_WEEKEND]: 'Free week-end',\n [WEBSITE_FLOW.TRIALS]: 'Free trial',\n [WEBSITE_FLOW.DEMO]: 'Demo',\n [WEBSITE_FLOW.FRIENDS_REFERRAL]: 'Friends Referral',\n [WEBSITE_FLOW.GIVEAWAY]: 'Giveaway',\n [WEBSITE_FLOW.PROMOTAB]: 'Promo Tab'\n};\n\n/**\n * widget name: website display name\n */\nconst WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME: { [key: string]: string } = {};\nObject.values(WEBSITE_FLOW).forEach((flowId: WEBSITE_FLOW) => {\n const widgetName: WIDGET_NAME = WEBSITES_WIDGET_NAME_BY_FLOW_ID[flowId];\n WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME[widgetName] = WEBSITE_DISPLAY_NAME_BY_FLOW_ID[flowId];\n});\n\n/**\n * widget name: flow suffix\n */\nconst WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME: { [key: string]: string } = {};\nObject.values(WEBSITE_FLOW).forEach((flowId: WEBSITE_FLOW) => {\n const widgetName: WIDGET_NAME = WEBSITES_WIDGET_NAME_BY_FLOW_ID[flowId];\n WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME[widgetName] = WEBSITES_FLOW_SUFFIX[flowId];\n});\n\nexport { WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME, WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME };\n\nexport const WEBSITE_FLOW_SUBDOMAIN: { [key: string]: IWebsiteSubdomain } = {\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.TWITCH_PRIME]]: formWebsiteSubdomain(TWITCH_PRIME_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.ULC_REDEEM]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.CF_REDEEM]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.CF_REDEEM_V2]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.PYC_REDEEM]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.FREE_WEEKEND]]: formWebsiteSubdomain(FREE_WEEKEND_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.GIVEAWAY]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.OPEN_BETA]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.TRIALS]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.DEMO]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.BETA_REGISTRATION]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.BETA_APPROVAL]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.PROMOTAB]]: formWebsiteSubdomain(PC_PROMO),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.FRIENDS_REFERRAL]]: formWebsiteSubdomain(FRIENDS_REFERRAL_DOMAIN)\n};\n","import { LOCALE } from './locales';\n\nexport interface IMomentSettings {\n date: string;\n time: string;\n month?: string;\n isMonthDeclensionNeeded?: boolean;\n}\n\nexport const DEFAULT_MOMENT_MONTH_FORMAT = 'MMMM';\nexport const DEFAULT_MONTH_DECLENSION = true;\n\nexport const LANGUAGES_MOMENT_FORMAT: {[key: string]: IMomentSettings} = {\n [LOCALE.AR_AE]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.CS_CZ]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.DA_DK]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.DE_DE]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.EN_AU]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.EN_CA]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.EN_GB]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.EN_US]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.ES_ES]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.ES_MX]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.FI_FI]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.FR_CA]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.FR_FR]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.HU_HU]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.IT_IT]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.JA_JP]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.KO_KR]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.NB_NO]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.NL_NL]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.NN_NO]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.PL_PL]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.PT_BR]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.PT_PT]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.RU_RU]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.SV_SE]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.TH_TH]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.TR_TR]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.UK_UA]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.ZH_CN]: {\n date: 'Do',\n time: 'HH:mm',\n month: 'MMM'\n },\n [LOCALE.ZH_TW]: {\n date: 'Do',\n time: 'HH:mm',\n month: 'MMM'\n }\n};\n","import { isUndefined } from 'lodash';\n\nimport {\n DEFAULT_MOMENT_MONTH_FORMAT,\n DEFAULT_MONTH_DECLENSION,\n IMomentSettings,\n LANGUAGES_MOMENT_FORMAT\n} from './moment';\n\nimport { LOCALE } from './locales';\nimport { IAvailableLanguages, LANGUAGE_REGION, LANGUAGE_REGION as REGION } from './language-regions';\n\n// TODO: in case of extending, consider to use https://www.npmjs.com/package/language-tags or other data libs\n/* eslint-disable max-len */\nexport const LANGUAGES_DATA = [\n { languageVariantTag: LOCALE.AR_AE, languageCode: 'ar', region: REGION.EMEA, languageVariantCode: 'ARA', languageName: 'عربى' },\n { languageVariantTag: LOCALE.CS_CZ, languageCode: 'cs', region: REGION.EMEA, languageVariantCode: 'CZE', languageName: 'Česky' },\n { languageVariantTag: LOCALE.DA_DK, languageCode: 'da', region: REGION.EMEA, languageVariantCode: 'DAN', languageName: 'Dansk' },\n { languageVariantTag: LOCALE.DE_DE, languageCode: 'de', region: REGION.EMEA, languageVariantCode: 'GER', languageName: 'Deutsch' },\n { languageVariantTag: LOCALE.EN_AU, languageCode: 'en', region: REGION.EMEA, languageVariantCode: 'AUS', languageName: 'English (Australia)' },\n { languageVariantTag: LOCALE.EN_CA, languageCode: 'en', region: REGION.NCSA, languageVariantCode: 'CAE', languageName: 'English (Canada)' },\n { languageVariantTag: LOCALE.EN_GB, languageCode: 'en', region: REGION.EMEA, languageVariantCode: 'ENG', languageName: 'English' },\n { languageVariantTag: LOCALE.EN_US, languageCode: 'en', region: REGION.NCSA, languageVariantCode: 'AME', languageName: 'English (US)' },\n { languageVariantTag: LOCALE.ES_ES, languageCode: 'es', region: REGION.EMEA, languageVariantCode: 'SPA', languageName: 'Español' },\n { languageVariantTag: LOCALE.ES_MX, languageCode: 'es', region: REGION.NCSA, languageVariantCode: 'MEX', languageName: 'Español (México)' },\n { languageVariantTag: LOCALE.FI_FI, languageCode: 'fi', region: REGION.EMEA, languageVariantCode: 'FIN', languageName: 'Suomi' },\n { languageVariantTag: LOCALE.FR_CA, languageCode: 'fr', region: REGION.NCSA, languageVariantCode: 'CAF', languageName: 'Français (Canada)' },\n { languageVariantTag: LOCALE.FR_FR, languageCode: 'fr', region: REGION.EMEA, languageVariantCode: 'FRE', languageName: 'Français' },\n { languageVariantTag: LOCALE.HU_HU, languageCode: 'hu', region: REGION.EMEA, languageVariantCode: 'HUN', languageName: 'Magyar' },\n { languageVariantTag: LOCALE.IT_IT, languageCode: 'it', region: REGION.EMEA, languageVariantCode: 'ITA', languageName: 'Italiano' },\n { languageVariantTag: LOCALE.JA_JP, languageCode: 'ja', region: REGION.EMEA, languageVariantCode: 'JPN', languageName: '日本語' },\n { languageVariantTag: LOCALE.KO_KR, languageCode: 'ko', region: REGION.EMEA, languageVariantCode: 'KOR', languageName: '한국어' },\n { languageVariantTag: LOCALE.NB_NO, languageCode: 'nb', region: REGION.EMEA, languageVariantCode: 'NBO', languageName: 'Norsk (Bokmål)' },\n { languageVariantTag: LOCALE.NL_NL, languageCode: 'nl', region: REGION.EMEA, languageVariantCode: 'DUT', languageName: 'Nederlands' },\n { languageVariantTag: LOCALE.NN_NO, languageCode: 'nn', region: REGION.EMEA, languageVariantCode: 'NNO', languageName: 'Norsk (Nynorsk)' },\n { languageVariantTag: LOCALE.PL_PL, languageCode: 'pl', region: REGION.EMEA, languageVariantCode: 'POL', languageName: 'Polski' },\n { languageVariantTag: LOCALE.PT_BR, languageCode: 'pt', region: REGION.NCSA, languageVariantCode: 'BRA', languageName: 'Português (Brasil)' },\n { languageVariantTag: LOCALE.PT_PT, languageCode: 'pt', region: REGION.EMEA, languageVariantCode: 'POR', languageName: 'Português' },\n { languageVariantTag: LOCALE.RU_RU, languageCode: 'ru', region: REGION.EMEA, languageVariantCode: 'RUS', languageName: 'Pусский' },\n { languageVariantTag: LOCALE.SV_SE, languageCode: 'sv', region: REGION.EMEA, languageVariantCode: 'SWE', languageName: 'Svenska' },\n { languageVariantTag: LOCALE.TH_TH, languageCode: 'th', region: REGION.EMEA, languageVariantCode: 'THA', languageName: 'ไทย' },\n { languageVariantTag: LOCALE.TR_TR, languageCode: 'tr', region: REGION.EMEA, languageVariantCode: 'TUR', languageName: 'Türkçe' },\n { languageVariantTag: LOCALE.UK_UA, languageCode: 'uk', region: REGION.EMEA, languageVariantCode: 'UKR', languageName: 'Українська' },\n { languageVariantTag: LOCALE.ZH_CN, languageCode: 'zh', region: REGION.EMEA, languageVariantCode: 'CHS', languageName: '简体中文' },\n { languageVariantTag: LOCALE.ZH_TW, languageCode: 'zh', region: REGION.EMEA, languageVariantCode: 'CHT', languageName: '繁體中文' }\n];\n\n/** Promo tabs have different available sets locales per region */\nexport const PROMOTAB_LANGUAGES = {\n [REGION.NCSA]: [LOCALE.EN_CA, LOCALE.EN_US, LOCALE.ES_MX, LOCALE.PT_BR],\n [REGION.EMEA]: [\n LOCALE.CS_CZ, LOCALE.DA_DK, LOCALE.DE_DE, LOCALE.EN_GB, LOCALE.ES_ES, LOCALE.FI_FI, LOCALE.FR_FR, LOCALE.HU_HU, LOCALE.IT_IT,\n LOCALE.JA_JP, LOCALE.KO_KR, LOCALE.NB_NO, LOCALE.NL_NL, LOCALE.PL_PL, LOCALE.PT_PT, LOCALE.RU_RU, LOCALE.SV_SE, LOCALE.TR_TR,\n LOCALE.ZH_CN, LOCALE.ZH_TW, LOCALE.TH_TH\n ]\n};\n\n/** Friends Referral sites have different initial locales */\nexport const FRIENDS_REFERRAL_DEFAULT_LANGUAGES: IAvailableLanguages = {\n [REGION.NCSA]: [LOCALE.EN_US, LOCALE.FR_CA, LOCALE.ES_MX, LOCALE.PT_BR],\n [REGION.EMEA]: [\n LOCALE.AR_AE, LOCALE.DE_DE, LOCALE.EN_GB, LOCALE.ES_ES, LOCALE.FR_FR, LOCALE.IT_IT,\n LOCALE.JA_JP, LOCALE.KO_KR, LOCALE.PL_PL, LOCALE.RU_RU, LOCALE.ZH_TW,\n ]\n};\n\n/*\n * 'ubisoft language variant code' : 'language variant tag'\n */\nexport const UBISOFT_LANGUAGES_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantCode] = item.languageVariantTag;\n return result;\n}, {});\n\n/*\n * 'language variant tag': 'language code (iso 639-1)'\n */\nexport const LANGUAGES_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantTag] = item.languageCode;\n return result;\n}, {});\n\n/*\n * 'language variant tag': 'language name (human readable)'\n */\nexport const LANGUAGE_NAMES_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantTag] = item.languageName;\n return result;\n}, {});\n\n/*\n * 'language variant tag': 'language region'\n */\nexport const LANGUAGE_TO_REGION_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantTag] = item.region;\n return result;\n}, {});\n\nexport const getRegionLanguageTags = (region: LANGUAGE_REGION): string[] => {\n return LANGUAGES_DATA.filter(language => language.region === region).map(language => language.languageVariantTag);\n};\n\n/*\n * In case Moment doesn't understand locales in the format such as 'en-GB',\n * it will get the locale format by 'language code', such as 'en'.\n *\n * @returns\n * 'language code': 'moment format'\n * 'locale': 'moment format'\n * */\nexport const LANGUAGE_FORMAT_MAP: {[key: string]: IMomentSettings} = Object.entries(LANGUAGES_MOMENT_FORMAT)\n .reduce((result, [localeKey, momentFormat]) => {\n if (!momentFormat.month) {\n momentFormat.month = DEFAULT_MOMENT_MONTH_FORMAT;\n }\n\n if (isUndefined(momentFormat.isMonthDeclensionNeeded)) {\n momentFormat.isMonthDeclensionNeeded = DEFAULT_MONTH_DECLENSION;\n }\n\n const languageCode = LANGUAGES_MAP[localeKey];\n result[localeKey] = result[languageCode] = momentFormat;\n return result;\n }, {});\n\nexport default LANGUAGES_DATA;\n","import { LOCALE } from './locales';\n\nexport enum LANGUAGE_REGION {\n EMEA = 'EMEA',\n NCSA = 'NCSA'\n}\n\nexport const REGION_TO_DEFAULT_LANGUAGE = {\n [LANGUAGE_REGION.EMEA]: LOCALE.EN_GB,\n [LANGUAGE_REGION.NCSA]: LOCALE.EN_US\n};\n\nexport type IAvailableLanguages = { [key in LANGUAGE_REGION]: string[] };\n","export enum LOCALE {\n EN_GB = 'en-GB',\n EN_CA = 'en-CA',\n EN_AU = 'en-AU',\n EN_US = 'en-US',\n FR_FR = 'fr-FR',\n FR_CA = 'fr-CA',\n ES_ES = 'es-ES',\n ES_MX = 'es-MX',\n PT_PT = 'pt-PT',\n PT_BR = 'pt-BR',\n ZH_CN = 'zh-CN',\n ZH_TW = 'zh-TW',\n NB_NO = 'nb-NO',\n DA_DK = 'da-DK',\n DE_DE = 'de-DE',\n FI_FI = 'fi-FI',\n HU_HU = 'hu-HU',\n IT_IT = 'it-IT',\n NL_NL = 'nl-NL',\n PL_PL = 'pl-PL',\n RU_RU = 'ru-RU',\n SV_SE = 'sv-SE',\n TR_TR = 'tr-TR',\n UK_UA = 'uk-UA',\n AR_AE = 'ar-AE',\n JA_JP = 'ja-JP',\n KO_KR = 'ko-KR',\n TH_TH = 'th-TH',\n CS_CZ = 'cs-CZ',\n NN_NO = 'nn-NO'\n}\n\n/** Locale order for operations like \"Text Export\" */\nexport const LOCALE_ORDER: { readonly [locale: string]: number } = [\n LOCALE.EN_GB, LOCALE.EN_US, LOCALE.EN_CA, LOCALE.EN_AU, LOCALE.FR_FR, LOCALE.FR_CA, LOCALE.ES_ES,\n LOCALE.ES_MX, LOCALE.PT_PT, LOCALE.PT_BR, LOCALE.DE_DE, LOCALE.IT_IT, LOCALE.NL_NL, LOCALE.PL_PL,\n LOCALE.RU_RU, LOCALE.CS_CZ, LOCALE.HU_HU, LOCALE.DA_DK, LOCALE.SV_SE, LOCALE.FI_FI, LOCALE.NB_NO,\n LOCALE.NN_NO, LOCALE.TR_TR, LOCALE.UK_UA, LOCALE.JA_JP, LOCALE.KO_KR, LOCALE.ZH_CN, LOCALE.ZH_TW,\n LOCALE.TH_TH, LOCALE.AR_AE\n].reduce((result: object, locale: LOCALE, index: number): object => ({ ...result, [locale]: index }), {});\n\n/** Sort output of operations like \"Text Export\" based on \"Text Import\" spec */\nexport const sortLocalesByOrder = (locales: LOCALE[]): LOCALE[] => {\n const byOrder = (a: LOCALE, b: LOCALE): number => {\n return LOCALE_ORDER[a] - LOCALE_ORDER[b];\n };\n\n return locales.sort(byOrder);\n};\n","export enum LOCATION_REGION {\n EMEA = 'EMEA',\n NCSA = 'NCSA',\n MENA = 'MENA',\n ANZ = 'ANZ',\n EE = 'easternEurope',\n CN = 'china',\n RU = 'russia',\n JP = 'japan',\n FR = 'france'\n}\n\nexport interface ICountry {\n code: string;\n name: string;\n region?: string;\n subregion?: string;\n}\n\nexport enum COUNTRY {\n // --- NCSA Region ---\n AI = 'Anguilla',\n AG = 'Antigua and Barbuda',\n AR = 'Argentina',\n AQ = 'Antarctica',\n AW = 'Aruba',\n BS = 'Bahamas',\n BB = 'Barbados',\n BZ = 'Belize',\n BM = 'Bermuda',\n BO = 'Bolivia (Plurinational State of)',\n BQ = 'Bonaire, Sint Eustatius and Saba',\n BR = 'Brazil',\n CA = 'Canada',\n KY = 'Cayman Islands',\n CL = 'Chile',\n CO = 'Colombia',\n CR = 'Costa Rica',\n CU = 'Cuba',\n CX = 'Christmas Island',\n CW = 'Curaçao',\n DM = 'Dominica',\n DO = 'Dominican Republic',\n EC = 'Ecuador',\n SV = 'El Salvador',\n GF = 'French Guiana',\n GD = 'Grenada',\n GP = 'Guadeloupe',\n GT = 'Guatemala',\n GY = 'Guyana',\n HT = 'Haiti',\n HN = 'Honduras',\n HM = 'Heard and McDonald Islands',\n JM = 'Jamaica',\n MQ = 'Martinique',\n MX = 'Mexico',\n MS = 'Montserrat',\n NI = 'Nicaragua',\n PA = 'Panama',\n PY = 'Paraguay',\n PE = 'Peru',\n PR = 'Puerto Rico',\n BL = 'Saint Barthélemy',\n KN = 'Saint Kitts And Nevis',\n LC = 'Saint Lucia',\n MF = 'Saint Martin',\n PM = 'Saint Pierre and Miquelon',\n VC = 'Saint Vincent and The Grenadines',\n SX = 'Sint Maarten (Dutch part)',\n SR = 'Suriname',\n TT = 'Trinidad and Tobago',\n TC = 'Turks and Caicos Islands',\n TF = 'French Southern and Antarctic Lands',\n US = 'United States',\n UY = 'Uruguay',\n VE = 'Venezuela',\n VG = 'Virgin Islands (British)',\n VI = 'Virgin Islands (U.S.)',\n // --- EMEA Region ---\n AF = 'Afghanistan',\n AX = 'Åland Islands',\n AL = 'Albania',\n DZ = 'Algeria',\n AD = 'Andorra',\n AO = 'Angola',\n AM = 'Armenia',\n AT = 'Austria',\n AZ = 'Azerbaijan',\n BH = 'Bahrain',\n BY = 'Belarus',\n BE = 'Belgium',\n BJ = 'Benin',\n BA = 'Bosnia and Herzegovina',\n BW = 'Botswana',\n BV = 'Bouvet Island',\n BG = 'Bulgaria',\n BF = 'Burkina Faso',\n BI = 'Burundi',\n CM = 'Cameroon',\n CV = 'Cabo Verde',\n CF = 'Central African Republic',\n TD = 'Chad',\n KM = 'Comoros',\n CD = 'Congo (Democratic Republic of the)',\n CG = 'Congo',\n CI = 'Côte d’Ivoire',\n HR = 'Croatia',\n CY = 'Cyprus',\n CZ = 'Czech Republic',\n DK = 'Denmark',\n DJ = 'Djibouti',\n EG = 'Egypt',\n GQ = 'Equatorial Guinea',\n ER = 'Eritrea',\n EE = 'Estonia',\n ET = 'Ethiopia',\n FK = 'Falkland Islands',\n FO = 'Faroe Islands',\n FI = 'Finland',\n GA = 'Gabon',\n GM = 'Gambia',\n GE = 'Georgia',\n DE = 'Germany',\n GH = 'Ghana',\n GI = 'Gibraltar',\n GR = 'Greece',\n GL = 'Greenland',\n GG = 'Guernsey',\n GN = 'Guinea',\n GW = 'Guinea-Bissau',\n VA = 'Vatican City',\n HU = 'Hungary',\n IS = 'Iceland',\n IR = 'Iran',\n IQ = 'Iraq',\n IE = 'Ireland',\n IM = 'Isle of Man',\n IL = 'Israel',\n IT = 'Italy',\n IO = 'British Indian Ocean Territory',\n JE = 'Jersey',\n JP = 'Japan',\n JO = 'Jordan',\n KZ = 'Kazakhstan',\n KE = 'Kenya',\n KV = 'Korea (Democratic People’s Republic of)',\n KR = 'Korea (Republic of)',\n KW = 'Kuwait',\n KG = 'Kyrgyzstan',\n LV = 'Latvia',\n LB = 'Lebanon',\n LS = 'Lesotho',\n LR = 'Liberia',\n LY = 'Libya',\n LI = 'Liechtenstein',\n LT = 'Lithuania',\n LU = 'Luxembourg',\n MK = 'Macedonia',\n MG = 'Madagascar',\n MW = 'Malawi',\n ML = 'Mali',\n MT = 'Malta',\n MR = 'Mauritania',\n MU = 'Mauritius',\n YT = 'Mayotte',\n MD = 'Moldova',\n MC = 'Monaco',\n ME = 'Montenegro',\n MA = 'Morocco',\n MZ = 'Mozambique',\n NA = 'Namibia',\n NL = 'Netherlands',\n NE = 'Niger',\n NG = 'Nigeria',\n NO = 'Norway',\n OM = 'Oman',\n PS = 'Palestine',\n PL = 'Poland',\n PT = 'Portugal',\n QA = 'Qatar',\n RE = 'Réunion',\n RO = 'Romania',\n RU = 'Russia',\n RW = 'Rwanda',\n SH = 'Saint Helena',\n SM = 'San Marino',\n ST = 'Sao Tome and Principe',\n SA = 'Saudi Arabia',\n SN = 'Senegal',\n RS = 'Serbia',\n SC = 'Seychelles',\n SL = 'Sierra Leone',\n SK = 'Slovakia',\n SI = 'Slovenia',\n SO = 'Somalia',\n ZA = 'South Africa',\n GS = 'South Georgia and the South Sandwich Islands',\n ES = 'Spain',\n SD = 'Sudan',\n SJ = 'Svalbard',\n SZ = 'Swaziland',\n SE = 'Sweden',\n CH = 'Switzerland',\n SY = 'Syria',\n TZ = 'Tanzania',\n TG = 'Togo',\n TN = 'Tunisia',\n TR = 'Turkey',\n TW = 'Taiwan',\n TJ = 'Tajikistan',\n TH = 'Thailand',\n TM = 'Turkmenistan',\n UG = 'Uganda',\n UZ = 'Uzbekistan',\n UA = 'Ukraine',\n AE = 'United Arab Emirates',\n GB = 'United Kingdom',\n EH = 'Western Sahara',\n YE = 'Yemen',\n ZM = 'Zambia',\n ZW = 'Zimbabwe',\n // --- ANZ (Australia + New Zealand) Region ---\n AU = 'Australia',\n NZ = 'New Zealand',\n AS = 'American Samoa',\n CK = 'Cook Islands',\n FJ = 'Fiji',\n FM = 'Micronesia, Federal States of',\n GU = 'Guam',\n KI = 'Kiribati',\n MH = 'Marshall Islands',\n MP = 'Northern Mariana Islands',\n NC = 'New Caledonia',\n NF = 'Norfolk Island',\n NR = 'Nauru',\n NU = 'Niue',\n PF = 'French Polynesia',\n PG = 'Papua New Guinea',\n PN = 'Pitcairn',\n PW = 'Palau',\n SB = 'Solomon Islands',\n TK = 'Tokelau',\n TO = 'Tonga',\n TV = 'Tuvalu',\n UM = 'United States Minor Outlying Islands',\n VU = 'Vanuatu',\n WF = 'Wallis and Futuna',\n WS = 'Samoa',\n // --- CN (China) Region ---\n CN = 'China',\n // --- FR (France) Region ---\n FR = 'France'\n}\n\nexport const COUNTRIES: ICountry[] = [\n { name: 'Afghanistan', code: 'AF', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Åland Islands', code: 'AX', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Albania', code: 'AL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Algeria', code: 'DZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Andorra', code: 'AD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Angola', code: 'AO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Armenia', code: 'AM', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Austria', code: 'AT', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Australia', code: 'AU', subregion: '' },\n { name: 'Azerbaijan', code: 'AZ', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Bahrain', code: 'BH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Belarus', code: 'BY', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Belgium', code: 'BE', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Benin', code: 'BJ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Bosnia and Herzegovina', code: 'BA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Botswana', code: 'BW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Bouvet Island', code: 'BV', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Bulgaria', code: 'BG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Burkina Faso', code: 'BF', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Burundi', code: 'BI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Cameroon', code: 'CM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Cabo Verde', code: 'CV', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Central African Republic', code: 'CF', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Chad', code: 'TD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'China', code: 'CN', subregion: '', region: LOCATION_REGION.CN },\n { name: 'Comoros', code: 'KM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Congo (Democratic Republic of the)', code: 'CD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Congo', code: 'CG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Côte d’Ivoire', code: 'CI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Croatia', code: 'HR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Cyprus', code: 'CY', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Czech Republic', code: 'CZ', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Denmark', code: 'DK', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Djibouti', code: 'DJ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Egypt', code: 'EG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Equatorial Guinea', code: 'GQ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Eritrea', code: 'ER', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Estonia', code: 'EE', subregion: 'North East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Ethiopia', code: 'ET', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Falkland Islands', code: 'FK', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Faroe Islands', code: 'FO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Finland', code: 'FI', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'France', code: 'FR', subregion: '', region: LOCATION_REGION.FR },\n { name: 'Gabon', code: 'GA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Gambia', code: 'GM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Georgia', code: 'GE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Germany', code: 'DE', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Ghana', code: 'GH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Gibraltar', code: 'GI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Greece', code: 'GR', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Greenland', code: 'GL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Guernsey', code: 'GG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Guinea', code: 'GN', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Guinea-Bissau', code: 'GW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Vatican City', code: 'VA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Hungary', code: 'HU', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Iceland', code: 'IS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Iran', code: 'IR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Iraq', code: 'IQ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Ireland', code: 'IE', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Isle of Man', code: 'IM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Israel', code: 'IL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Italy', code: 'IT', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Jersey', code: 'JE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Jordan', code: 'JO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Japan', code: 'JP', subregion: '', region: LOCATION_REGION.JP },\n { name: 'Kazakhstan', code: 'KZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Kenya', code: 'KE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Korea (Democratic People’s Republic of)', code: 'KV', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Korea (Republic of)', code: 'KR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Kuwait', code: 'KW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Kyrgyzstan', code: 'KG', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Latvia', code: 'LV', subregion: 'North East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Lebanon', code: 'LB', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Lesotho', code: 'LS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Liberia', code: 'LR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Libya', code: 'LY', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Liechtenstein', code: 'LI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Lithuania', code: 'LT', subregion: 'North East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Luxembourg', code: 'LU', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Macedonia', code: 'MK', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Madagascar', code: 'MG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Malawi', code: 'MW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mali', code: 'ML', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Malta', code: 'MT', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mauritania', code: 'MR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mauritius', code: 'MU', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mayotte', code: 'YT', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Moldova', code: 'MD', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Monaco', code: 'MC', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Montenegro', code: 'ME', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Morocco', code: 'MA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mozambique', code: 'MZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Namibia', code: 'NA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Netherlands', code: 'NL', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Niger', code: 'NE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Nigeria', code: 'NG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Norway', code: 'NO', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'New Zealand', code: 'NZ', subregion: '' },\n { name: 'Oman', code: 'OM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Palestine', code: 'PS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Poland', code: 'PL', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Portugal', code: 'PT', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Qatar', code: 'QA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Réunion', code: 'RE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Romania', code: 'RO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Russia', code: 'RU', subregion: '', region: LOCATION_REGION.RU },\n { name: 'Rwanda', code: 'RW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Saint Helena', code: 'SH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'San Marino', code: 'SM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Sao Tome and Principe', code: 'ST', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Saudi Arabia', code: 'SA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Senegal', code: 'SN', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Serbia', code: 'RS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Seychelles', code: 'SC', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Sierra Leone', code: 'SL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Slovakia', code: 'SK', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Slovenia', code: 'SI', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Somalia', code: 'SO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'South Africa', code: 'ZA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'South Georgia and the South Sandwich Islands', code: 'GS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Spain', code: 'ES', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Sudan', code: 'SD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Svalbard', code: 'SJ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Swaziland', code: 'SZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Sweden', code: 'SE', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Switzerland', code: 'CH', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Syria', code: 'SY', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Tanzania', code: 'TZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Taiwan', code: 'TW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Togo', code: 'TG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Tunisia', code: 'TN', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Turkey', code: 'TR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Thailand', code: 'TH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Tajikistan', code: 'TJ', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Turkmenistan', code: 'TM', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Uganda', code: 'UG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Ukraine', code: 'UA', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Uzbekistan', code: 'UZ', subregion: '', region: LOCATION_REGION.EE },\n { name: 'United Arab Emirates', code: 'AE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'United Kingdom', code: 'GB', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Western Sahara', code: 'EH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Yemen', code: 'YE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Zambia', code: 'ZM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Zimbabwe', code: 'ZW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'American Samoa', code: 'AS', subregion: '' },\n { name: 'Cook Islands', code: 'CK', subregion: '' },\n { name: 'Fiji', code: 'FJ', subregion: '' },\n { name: 'Micronesia, Federal States of', code: 'FM', subregion: '' },\n { name: 'Guam', code: 'GU', subregion: '' },\n { name: 'Kiribati', code: 'KI', subregion: '' },\n { name: 'Marshall Islands', code: 'MH', subregion: '' },\n { name: 'Northern Mariana Islands', code: 'MP', subregion: '' },\n { name: 'New Caledonia', code: 'NC', subregion: '' },\n { name: 'Norfolk Island', code: 'NF', subregion: '' },\n { name: 'Nauru', code: 'NR', subregion: '' },\n { name: 'Niue', code: 'NU', subregion: '' },\n { name: 'French Polynesia', code: 'PF', subregion: '' },\n { name: 'Papua New Guinea', code: 'PG', subregion: '' },\n { name: 'Pitcairn', code: 'PN', subregion: '' },\n { name: 'Palau', code: 'PW', subregion: '' },\n { name: 'Solomon Islands', code: 'SB', subregion: '' },\n { name: 'Tokelau', code: 'TK', subregion: '' },\n { name: 'Tonga', code: 'TO', subregion: '' },\n { name: 'Tuvalu', code: 'TV', subregion: '' },\n { name: 'United States Minor Outlying Islands', code: 'UM', subregion: '' },\n { name: 'Vanuatu', code: 'VU', subregion: '' },\n { name: 'Wallis and Futuna', code: 'WF', subregion: '' },\n { name: 'Samoa', code: 'WS', subregion: '' },\n { name: 'United States', code: 'US', subregion: LOCATION_REGION.NCSA },\n { name: 'Canada', code: 'CA', subregion: LOCATION_REGION.NCSA },\n { name: 'Brazil', code: 'BR', subregion: LOCATION_REGION.NCSA },\n { name: 'Mexico', code: 'MX', subregion: LOCATION_REGION.NCSA }\n];\n\nexport const COUNTRIES_BY_REGION: { [key: string]: COUNTRY[] } = {\n [LOCATION_REGION.NCSA]: [\n COUNTRY.AI,\n COUNTRY.AG,\n COUNTRY.AR,\n COUNTRY.AW,\n COUNTRY.BS,\n COUNTRY.BB,\n COUNTRY.BZ,\n COUNTRY.BM,\n COUNTRY.BO,\n COUNTRY.BQ,\n COUNTRY.BR,\n COUNTRY.CA,\n COUNTRY.KY,\n COUNTRY.CL,\n COUNTRY.CO,\n COUNTRY.CR,\n COUNTRY.CU,\n COUNTRY.CW,\n COUNTRY.DM,\n COUNTRY.DO,\n COUNTRY.EC,\n COUNTRY.SV,\n COUNTRY.GF,\n COUNTRY.GD,\n COUNTRY.GP,\n COUNTRY.GT,\n COUNTRY.GY,\n COUNTRY.HT,\n COUNTRY.HN,\n COUNTRY.JM,\n COUNTRY.MQ,\n COUNTRY.MX,\n COUNTRY.MS,\n COUNTRY.NI,\n COUNTRY.PA,\n COUNTRY.PY,\n COUNTRY.PE,\n COUNTRY.PR,\n COUNTRY.BL,\n COUNTRY.KN,\n COUNTRY.LC,\n COUNTRY.MF,\n COUNTRY.PM,\n COUNTRY.VC,\n COUNTRY.SX,\n COUNTRY.SR,\n COUNTRY.TT,\n COUNTRY.TC,\n COUNTRY.US,\n COUNTRY.UY,\n COUNTRY.VE,\n COUNTRY.VG,\n COUNTRY.VI,\n ],\n [LOCATION_REGION.EMEA]: [\n COUNTRY.AF,\n COUNTRY.AX,\n COUNTRY.AL,\n COUNTRY.DZ,\n COUNTRY.AD,\n COUNTRY.AO,\n COUNTRY.AT,\n COUNTRY.BH,\n COUNTRY.BE,\n COUNTRY.BJ,\n COUNTRY.BA,\n COUNTRY.BW,\n COUNTRY.BV,\n COUNTRY.BG,\n COUNTRY.BF,\n COUNTRY.BI,\n COUNTRY.CM,\n COUNTRY.CV,\n COUNTRY.CF,\n COUNTRY.TD,\n COUNTRY.KM,\n COUNTRY.CD,\n COUNTRY.CG,\n COUNTRY.CI,\n COUNTRY.HR,\n COUNTRY.CY,\n COUNTRY.CZ,\n COUNTRY.DK,\n COUNTRY.DJ,\n COUNTRY.EG,\n COUNTRY.GQ,\n COUNTRY.ER,\n COUNTRY.EE,\n COUNTRY.ET,\n COUNTRY.FK,\n COUNTRY.FO,\n COUNTRY.FI,\n COUNTRY.GA,\n COUNTRY.GM,\n COUNTRY.GE,\n COUNTRY.DE,\n COUNTRY.GH,\n COUNTRY.GI,\n COUNTRY.GR,\n COUNTRY.GL,\n COUNTRY.GG,\n COUNTRY.GN,\n COUNTRY.GW,\n COUNTRY.VA,\n COUNTRY.HU,\n COUNTRY.IS,\n COUNTRY.IR,\n COUNTRY.IQ,\n COUNTRY.IE,\n COUNTRY.IM,\n COUNTRY.IL,\n COUNTRY.IT,\n COUNTRY.JE,\n COUNTRY.JO,\n COUNTRY.KZ,\n COUNTRY.KE,\n COUNTRY.KV,\n COUNTRY.KR,\n COUNTRY.KW,\n COUNTRY.LV,\n COUNTRY.LB,\n COUNTRY.LS,\n COUNTRY.LR,\n COUNTRY.LY,\n COUNTRY.LI,\n COUNTRY.LT,\n COUNTRY.LU,\n COUNTRY.MK,\n COUNTRY.MG,\n COUNTRY.MW,\n COUNTRY.ML,\n COUNTRY.MT,\n COUNTRY.MR,\n COUNTRY.MU,\n COUNTRY.YT,\n COUNTRY.MC,\n COUNTRY.ME,\n COUNTRY.MA,\n COUNTRY.MZ,\n COUNTRY.NA,\n COUNTRY.NL,\n COUNTRY.NE,\n COUNTRY.NG,\n COUNTRY.NO,\n COUNTRY.OM,\n COUNTRY.PS,\n COUNTRY.PL,\n COUNTRY.PT,\n COUNTRY.QA,\n COUNTRY.RE,\n COUNTRY.RO,\n COUNTRY.RW,\n COUNTRY.SH,\n COUNTRY.SM,\n COUNTRY.ST,\n COUNTRY.SA,\n COUNTRY.SN,\n COUNTRY.RS,\n COUNTRY.SC,\n COUNTRY.SL,\n COUNTRY.SK,\n COUNTRY.SI,\n COUNTRY.SO,\n COUNTRY.ZA,\n COUNTRY.GS,\n COUNTRY.ES,\n COUNTRY.SD,\n COUNTRY.SJ,\n COUNTRY.SZ,\n COUNTRY.SE,\n COUNTRY.CH,\n COUNTRY.SY,\n COUNTRY.TZ,\n COUNTRY.TG,\n COUNTRY.TN,\n COUNTRY.TR,\n COUNTRY.TH,\n COUNTRY.UG,\n COUNTRY.AE,\n COUNTRY.GB,\n COUNTRY.EH,\n COUNTRY.YE,\n COUNTRY.ZM,\n COUNTRY.ZW,\n ],\n [LOCATION_REGION.MENA]: [\n COUNTRY.BH,\n COUNTRY.CY,\n COUNTRY.EG,\n COUNTRY.IR,\n COUNTRY.IQ,\n COUNTRY.IL,\n COUNTRY.JO,\n COUNTRY.KW,\n COUNTRY.LB,\n COUNTRY.OM,\n ],\n [LOCATION_REGION.ANZ]: [\n COUNTRY.AS,\n COUNTRY.AU,\n COUNTRY.CK,\n COUNTRY.FJ,\n COUNTRY.FM,\n COUNTRY.GU,\n COUNTRY.KI,\n COUNTRY.MH,\n COUNTRY.MP,\n COUNTRY.NC,\n COUNTRY.NF,\n COUNTRY.NR,\n COUNTRY.NU,\n COUNTRY.NZ,\n COUNTRY.PF,\n COUNTRY.PG,\n COUNTRY.PN,\n COUNTRY.PW,\n COUNTRY.SB,\n COUNTRY.TK,\n COUNTRY.TO,\n COUNTRY.TV,\n COUNTRY.UM,\n COUNTRY.VU,\n COUNTRY.WF,\n COUNTRY.WS\n ],\n [LOCATION_REGION.EE]: [\n COUNTRY.UA,\n COUNTRY.AM,\n COUNTRY.AZ,\n COUNTRY.BY,\n COUNTRY.KG,\n COUNTRY.MD,\n COUNTRY.TJ,\n COUNTRY.TM,\n COUNTRY.UZ\n ],\n [LOCATION_REGION.JP]: [COUNTRY.JP],\n [LOCATION_REGION.RU]: [COUNTRY.RU],\n [LOCATION_REGION.CN]: [COUNTRY.CN],\n [LOCATION_REGION.FR]: [COUNTRY.FR]\n};\n\nexport const COUNTRIES_BY_UBI_PLUS: { [key: string]: COUNTRY[] } = {\n noUbiPlus: [\n COUNTRY.RE,\n COUNTRY.GP,\n COUNTRY.AX,\n COUNTRY.AQ,\n COUNTRY.AZ,\n COUNTRY.IO,\n COUNTRY.BV,\n COUNTRY.CX,\n COUNTRY.CK,\n COUNTRY.FO,\n COUNTRY.TF,\n COUNTRY.GH,\n COUNTRY.GI,\n COUNTRY.GL,\n COUNTRY.GG,\n COUNTRY.HM,\n COUNTRY.JE,\n COUNTRY.KZ,\n COUNTRY.KI,\n COUNTRY.KG,\n COUNTRY.MH,\n COUNTRY.MQ,\n COUNTRY.YT,\n COUNTRY.FM,\n COUNTRY.MD,\n COUNTRY.NU,\n COUNTRY.PW,\n COUNTRY.PS,\n COUNTRY.PN,\n COUNTRY.SH,\n COUNTRY.MF,\n COUNTRY.PM,\n COUNTRY.WS,\n COUNTRY.SJ,\n COUNTRY.TJ,\n COUNTRY.TK,\n COUNTRY.TO,\n COUNTRY.TM,\n COUNTRY.UA,\n COUNTRY.UZ,\n COUNTRY.WF,\n COUNTRY.TR,\n COUNTRY.CN,\n COUNTRY.JP,\n COUNTRY.KR,\n COUNTRY.RU,\n COUNTRY.AM,\n COUNTRY.BY,\n COUNTRY.IM,\n COUNTRY.BQ\n ]\n};\n\nexport const COUNTRIES_BY_AUDIENCE_TYPE: { [key: string]: COUNTRY[] } = {\n ...COUNTRIES_BY_REGION,\n ...COUNTRIES_BY_UBI_PLUS\n};\n\nexport const NO_UBI_PLUS_COUNTRIES_CODES = [\n 'RE', 'GP', 'AX', 'AQ', 'AZ', 'IO',\n 'BV', 'CX', 'CK', 'FO', 'TF', 'GH',\n 'GI', 'GL', 'GG', 'HM', 'JE', 'KZ',\n 'KI', 'KG', 'MH', 'MQ', 'YT', 'FM',\n 'MD', 'NU', 'PW', 'PS', 'PN', 'SH',\n 'MF', 'PM', 'WS', 'SJ', 'TJ', 'TK',\n 'TO', 'TM', 'UA', 'UZ', 'WF', 'TR',\n 'CN', 'JP', 'KR', 'RU', 'AM', 'BY',\n 'IM', 'BQ'\n];\n\nexport const ANZ_COUNTRIES_CODES = [\n 'AU', 'NZ', 'AS', 'CK', 'FJ',\n 'FM', 'GU', 'KI', 'MH', 'MP',\n 'NC', 'NF', 'NR', 'NU', 'PF',\n 'PG', 'PN', 'PW', 'SB', 'TK',\n 'TO', 'TV', 'UM', 'VU', 'WF', 'WS'\n];\n\nexport const EE_COUNTRIES_CODES = [\n 'UA', 'AM', 'AZ', 'BY', 'KG',\n 'MD', 'TJ', 'TM', 'UZ'\n];\n","export function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n","import { ENV } from './environments';\n\nexport enum Regions {\n WORLD = 'WORLD',\n CHINA = 'CHINA'\n}\n\nexport const UBI_SERVICES_ENDPOINT = {\n [ENV.DEV]: 'https://uat-public-ubiservices.ubi.com',\n [ENV.PROD]: 'https://public-ubiservices.ubi.com'\n};\n\nexport const UBI_EVENTS_ENDPOINT = {\n [ENV.DEV]: 'https://uat-beta.ubi.com',\n [ENV.PROD]: 'https://beta.ubi.com'\n};\n\nexport const FRIENDS_REFERRAL_ENDPOINT = {\n [ENV.DEV]: 'https://uat-referral.ubi.com',\n [ENV.PROD]: 'https://referral.ubi.com'\n};\n\nexport const UPLAY_CLIENT_ENDPOINT = {\n [Regions.WORLD]: {\n [ENV.DEV]: 'https://uat-redeemstarter-public.ubi.com',\n [ENV.PROD]: 'https://redeemstarter-public.ubi.com'\n },\n [Regions.CHINA]: {\n [ENV.DEV]: 'https://uat-redeemstarter-public.ubi.cn',\n [ENV.PROD]: 'https://redeemstarter-public.ubi.cn'\n }\n};\n","import { ENV } from '../constants/environments';\nimport {\n UBI_EVENTS_ENDPOINT,\n UBI_SERVICES_ENDPOINT,\n FRIENDS_REFERRAL_ENDPOINT,\n UPLAY_CLIENT_ENDPOINT,\n Regions\n} from '../constants/ubi-services.constants';\n\nexport const getEnvDependentEndpoint = ({\n envName,\n source,\n countryCode\n}: {\n envName: string,\n source: Object,\n countryCode?: string\n}): string => {\n let instance = envName;\n\n if (isProd(envName)) {\n instance = ENV.PROD; // should use stable instance of API services on PROD & PREPROD\n }\n\n if (countryCode) {\n const region = checkRegions(countryCode);\n return source[region][instance] || source[region][ENV.DEV];\n }\n\n return source[instance] || source[ENV.DEV];\n};\n\nexport const getUbiServicesEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: UBI_SERVICES_ENDPOINT });\n};\n\nexport const getUbiEventsEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: UBI_EVENTS_ENDPOINT });\n};\n\nexport const getFriendsReferralEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: FRIENDS_REFERRAL_ENDPOINT });\n};\n\nexport const getUplayClientEndpoint = (envName: string, countryCode: string): string => {\n return getEnvDependentEndpoint({ envName, countryCode, source: UPLAY_CLIENT_ENDPOINT });\n};\n\nexport function isProd(envName: string): boolean {\n const prodOptions = {\n [ENV.PROD]: ENV.PROD,\n [ENV.PREPROD]: ENV.PREPROD\n };\n\n return prodOptions[envName] ? true : false;\n}\n\nexport const checkRegions = (countryCode: string) => {\n // check for china region\n if (countryCode === 'CN') {\n return Regions.CHINA;\n }\n\n return Regions.WORLD;\n};\n","import IConfig from '@sitegen/common/constants/config';\n\nexport const reducerHOF = (initialState: IConfig) => (state: IConfig = initialState): IConfig => {\n return state;\n};\n\nexport const reducerKey = 'config';\n\nexport default reducerHOF;\n","import IDictionaries from '@sitegen/common/localization/dictionaries';\n\nexport const reducerHOF = (initialState: IDictionaries) => (state: IDictionaries = initialState): IDictionaries => {\n return state;\n};\n\nexport const reducerKey = 'dictionaries';\n\nexport default reducerHOF;\n","import { IEmbeddedAppConfig } from '@sitegen/common/constants/config';\n\nexport const reducerHOF = (initialState: IEmbeddedAppConfig = {}) => (state: IEmbeddedAppConfig = initialState): IEmbeddedAppConfig => {\n return state;\n};\n\nexport const reducerKey = 'embeddedAppConfig';\n\nexport default reducerHOF;\n","import thunk from 'redux-thunk';\nimport { createLogger } from 'redux-logger';\nimport { combineEpics, createEpicMiddleware } from 'redux-observable';\nimport {\n createStore,\n applyMiddleware,\n combineReducers,\n compose,\n Middleware,\n Store,\n Reducer\n} from 'redux';\n\n// constants\nimport { DEV_TOOLS_CONFIG } from '@sitegen/build/config/env/dev-tools';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const createApplicationStore = (reducers: Reducer[], rootEpics: any[]): Store => {\n const middleware: Middleware[] = [thunk];\n const epicMiddleware = createEpicMiddleware();\n\n const rootReducer = combineReducers(reducers);\n\n let composeEnhancers = compose;\n\n if (DEV_TOOLS_CONFIG.REDUX_LOGGER) {\n middleware.push(\n createLogger({\n collapsed: true\n })\n );\n }\n\n if (DEV_TOOLS_CONFIG.REDUX_EXTENTION) {\n composeEnhancers = window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__'] || compose;\n }\n\n const store = createStore(rootReducer, composeEnhancers(applyMiddleware(...middleware, epicMiddleware)));\n epicMiddleware.run(combineEpics(...rootEpics));\n\n return store;\n};\n\nexport default createApplicationStore;\n","import * as React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport { Provider } from 'react-redux';\nimport { Store, Reducer } from 'redux';\n// types\nimport { IBootstrapAPI } from '@sitegen/common/types';\n// configs\nimport { createApplicationStore } from './store-config/store.config';\n\nexport default class BootstrapAPI implements IBootstrapAPI {\n public store: Store | null;\n public mount: (node: HTMLElement, callback?: () => void) => void;\n private mounted: boolean = false;\n\n private targetNode: HTMLElement | null;\n private root: Root | null = null;\n\n constructor(widgetConfig: IWidgetConfig) {\n this.mount = this.prepareMount(widgetConfig);\n }\n\n public unmount = () => {\n this.store = null;\n this.mounted = false;\n\n if (this.root) {\n this.root.unmount();\n this.targetNode = null;\n }\n };\n\n private prepareMount = ({ widgetsComponents, widgetsRootEpics, widgetsReducers }: IWidgetConfig) => {\n // TODO: looks like after transpiling&minification Edge v<17 loses context in resulting code making 'this'='undefined'\n // TODO: not reproducible for Edge 18, so should be deprecated in future\n const self = this;\n return (node: HTMLElement, callback?: () => void): void => {\n if (self.mounted) {\n throw new Error('Website is already mounted!');\n }\n\n self.mounted = true;\n self.targetNode = node;\n self.store = createApplicationStore(widgetsReducers, widgetsRootEpics);\n const root = createRoot(self.targetNode);\n self.root = root;\n root.render(\n \n <>{widgetsComponents}\n \n );\n if (callback) {\n callback();\n }\n };\n };\n}\n\ninterface IWidgetConfig {\n readonly widgetsComponents: JSX.Element[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly widgetsRootEpics: any[];\n readonly widgetsReducers: Reducer[];\n}\n","// constants\nimport { IS_DEVELOPMENT_MODE } from '@sitegen/build/config/env/node';\nimport { LOCAL_FO_CONFIG } from '@sitegen/build/config/fo';\n// types\nimport { IBootstrapConfig } from '@sitegen/common/constants/config';\n// services\nimport { WindowHistoryService } from 'utils/window-history.service';\nimport i18nService from 'modules/language-provider/i18n.service';\nimport { UbisoftConnectService } from 'modules/ubisoft-connect-service/service';\nimport ubisoftOverlayService from 'modules/ubisoft-overlay-service/service';\nimport { UbisoftAPIService } from 'modules/ubisoft-api';\nimport { BetaManagerAPIService } from '../widgets/beta-registration/modules/beta-manager/beta-manager-api';\nimport { FriendsReferralApiService } from '@sitegen/common/classes/friends-referral-api';\nimport { DEFAULT_LANGUAGE } from 'constants/locales';\n\n/**\n * A function to configure common-to-all-widgets services\n */\nexport const configureServices = async (\n bootstrapConfig: IBootstrapConfig,\n isPreviewMode: boolean\n): Promise => {\n WindowHistoryService.configure({ preview: isPreviewMode, mode: bootstrapConfig.mode });\n /* Return mock data from services when in preview mode. Components should not be aware of these changes */\n if (isPreviewMode) {\n ubisoftOverlayService.configureFakeAPI();\n await UbisoftAPIService.configureFakeAPI();\n await BetaManagerAPIService.configureFakeAPI();\n await FriendsReferralApiService.configureFakeAPI();\n i18nService.setCaching(false);\n }\n\n configureUbisoftConnectService(bootstrapConfig);\n await configureI18n(bootstrapConfig);\n};\n\n/**\n * Configure the i18nService based on the provided widget\n */\nconst configureI18n = async (config: IBootstrapConfig): Promise => {\n let initialTranslations = {};\n try {\n initialTranslations = await fetch(config.dictionaries[DEFAULT_LANGUAGE] ?? '');\n } finally {\n i18nService.init({\n env: config.envName,\n initialTranslations\n });\n }\n};\n\nconst getWebsiteURL = (websiteAbsolutePath: string): string => {\n return IS_DEVELOPMENT_MODE\n ? LOCAL_FO_CONFIG.WHITE_LIST_LOCAL_DOMAIN\n : websiteAbsolutePath;\n};\n\nconst configureUbisoftConnectService = (bootstrapConfig: IBootstrapConfig) => {\n UbisoftConnectService.configure({\n websiteAbsolutePath: getWebsiteURL(bootstrapConfig.websiteAbsolutePath)\n });\n};\n","import * as React from 'react';\nimport { Reducer } from 'redux';\n// reducers\nimport { ConfigReducer, DictionariesReducer, EmbeddedAppConfigReducer } from './reducers';\n// types\nimport IConfig, { IBootstrapConfig } from '@sitegen/common/constants/config';\nimport { IBootstrap, IBootstrapAPI, IBootstrapOptions } from '@sitegen/common/types';\nimport { IWidgetExports } from 'types/widgets';\n// services\nimport BootstrapAPI from './bootstrap-api.service';\nimport { configureServices } from './bootstrap-configure';\n\nimport { WIDGET_NAME, WIDGET_CONFIG, WIDGET_TYPE } from '@sitegen/common/constants';\n\nconst { reducerKey: configReducerKey, reducerHOF: configReducerHOF } = ConfigReducer;\nconst { reducerKey: dictionariesReducerKey, reducerHOF: dictionariesReducerHOF } = DictionariesReducer;\nconst { reducerKey: embeddedAppConfigReducerKey, reducerHOF: embeddedAppConfigReducerHOF } = EmbeddedAppConfigReducer;\n\nconst bootstrap: IBootstrap = async (\n bootstrapConfig: IBootstrapConfig,\n bootstrapOptions: IBootstrapOptions = {}\n): Promise => {\n const { dictionaries, ...applicationConfig } = bootstrapConfig;\n const isPreviewMode: boolean = !!bootstrapOptions.previewMode;\n\n let initialReducers: object = {\n [configReducerKey]: configReducerHOF(applicationConfig),\n [dictionariesReducerKey]: dictionariesReducerHOF(dictionaries),\n [embeddedAppConfigReducerKey]: embeddedAppConfigReducerHOF(bootstrapOptions.embeddedAppConfig)\n };\n\n const modules: IWidgetExports[] = await loadAndConfigureWidgets(applicationConfig);\n await configureServices(bootstrapConfig, isPreviewMode);\n\n /* Preparing widgets components, epics and reducers */\n const widgetsComponents: JSX.Element[] = modules.map((module, key) => );\n const widgetsRootEpics = modules.map(({ RootEpic }) => RootEpic);\n const widgetsReducers: Reducer[] = modules\n .map(({ Reducers, ReducersMock }) => (isPreviewMode ? ReducersMock : Reducers))\n .reduce((reducers, widgetReducers) => {\n return {\n ...reducers,\n ...widgetReducers\n };\n }, initialReducers) as Reducer[];\n\n return new BootstrapAPI({\n widgetsComponents,\n widgetsRootEpics,\n widgetsReducers\n });\n};\n\n/** Load widget code and perform basic configuration */\nconst loadAndConfigureWidgets = async (config: IConfig): Promise => {\n const widgets: Promise[] = [config.widgetName].map((name: WIDGET_NAME): Promise => {\n const widgetType: WIDGET_TYPE = WIDGET_CONFIG[name].widgetType;\n return import(\n /* webpackExclude: /promotab/ */\n /* webpackChunkName: \"[request]\" */ `../widgets/${widgetType}/root/index`\n );\n });\n\n const modules: IWidgetExports[] = await Promise.all(widgets);\n const configureAll: Promise[] = modules.map((module: IWidgetExports): Promise => {\n return module.configureWidget(config.widgetName);\n });\n await Promise.all(configureAll);\n\n return modules;\n};\n\nexport default bootstrap;\n","import bootstrap from './bootstrap';\n\nexport default bootstrap;\n","import { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\nimport { PLATFORM_DISPLAY_NAMES } from 'constants/platforms-display-props';\n\nexport const defaultTranslationKeyOptions = {\n gameName: 'gameName'\n};\n\nexport enum MODIFIED_TRANSLATION_KEYS_OPTION_NAMES {\n PLATFORM = 'platform'\n}\n\nexport const MODIFIED_TRANSLATION_KEYS_OPTIONS: { [key in string]: { [key2 in string]: string }} = {\n [MODIFIED_TRANSLATION_KEYS_OPTION_NAMES.PLATFORM]: {\n [PLATFORM_TYPES.XONE]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XONE],\n [PLATFORM_TYPES.XSX]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XSX]\n }\n};\n","import { TOptions } from 'i18next';\nimport { merge } from 'lodash';\nimport { defaultTranslationKeyOptions } from './translate-hoc.constants';\nimport { DELIMITER } from 'constants/platform';\nimport { MODIFIED_TRANSLATION_KEYS_OPTIONS } from './translate-hoc.constants';\n\nexport const addDefaultTextKeysOptions = (translationOptions: TOptions = {}) => {\n return merge(translationOptions, defaultTranslationKeyOptions);\n};\n\nexport const modifyTranslationKeysOptions = ([name, value]: [string, string]): string[] => {\n const modifiedList = MODIFIED_TRANSLATION_KEYS_OPTIONS[name];\n\n if (modifiedList) {\n const valuesList = value.split(DELIMITER);\n const modifiedValue = valuesList.map(val => modifiedList[val] ?? val).join(DELIMITER);\n return [name, modifiedValue];\n }\n return [name, value];\n};\n","import * as React from 'react';\nimport { ReactElement } from 'react';\nimport { toPairs, fromPairs } from 'lodash';\nimport {\n withTranslation as i18nTranslate,\n WithTranslation,\n} from 'react-i18next';\nimport { TOptions } from 'i18next';\nimport { translationNameSpaces } from 'constants/app.constants';\nimport { ITranslationProps } from 'types/translation';\n\nimport './translate.styles.less';\nimport { addDefaultTextKeysOptions } from './translate-hoc.utils';\nimport { modifyTranslationKeysOptions } from './translate-hoc.utils';\n\n// Custom Subtract type\ntype Subtract = Omit;\n\n// Custom Namespace type (you can adjust this based on your needs)\ntype CustomNamespace = string | string[];\n\nexport const translate = (\n namespaces: CustomNamespace = translationNameSpaces,\n options?: TOptions & { withRef?: boolean | undefined; keyPrefix?: undefined; }\n) =>

(Component: React.ComponentType

):\nReact.ComponentType> => {\n function translateHOC(props: P) {\n const { t, ...propsWithoutT } = props;\n return React.createElement>>(\n Component, {\n ...propsWithoutT,\n /* We still might require original translation methods, when JSX element can't be used, like placeholders */\n originalTranslateKey: t,\n dangerouslyTranslateWithHTML(key: string | string[], translationOptions?: TOptions): ReactElement {\n const translationOptionsWithDefault = addDefaultTextKeysOptions(translationOptions);\n const translatedOptions = fromPairs(\n toPairs(translationOptionsWithDefault)\n .map(modifyTranslationKeysOptions)\n .map((pair) => [pair[0], t(pair[1])])\n );\n return (\n \n );\n }\n }\n );\n }\n translateHOC.displayName = Component.displayName;\n\n return i18nTranslate(namespaces, options)(translateHOC) as React.ComponentType>;\n};\n","import { TRANSLATION_NAME_SPACES } from 'modules/language-provider/i18n.constants';\n\nexport const translationNameSpaces = [\n TRANSLATION_NAME_SPACES.TRANSLATIONS,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS\n];\n\nexport const ERROR_KEYS = {\n WIDGET_ERROR_TITLE: 'error-page__title',\n WIDGET_ERROR_MESSAGE: 'error-page__something-wrong',\n WIDGET_ERROR_NOT_ELIGIBLE: 'error-page__not-eligible',\n WIDGET_ERROR_UNDERAGE: 'error-page__underage',\n WIDGET_ERROR_INVITE_EXCEEDED_TITLE: 'error-page__invite_exceeded_title',\n WIDGET_ERROR_INVITE_EXCEEDED_DESCRIPTION: 'error-page__invite_exceeded_description'\n};\n\nexport const SUPPORT_TEXT_KEYS = {\n FAQ: 'support-text',\n NO_FAQ: 'support-text-no-faq'\n};\n","export const DEFAULT_LANGUAGE: string = 'en-GB';\n","import { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nexport const PLATFORM_URL_PARAMETER = 'platform';\nexport const DELIMITER: string = ', ';\n\n// this platforms should be first in the list of platforms \nexport const PLATFORMS_ORDER = [PLATFORM_TYPES.PC, PLATFORM_TYPES.EPIC];\n","import { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nimport { UBISOFT_CONNECT_PLATFORM_TYPES } from 'modules/ubisoft-connect-service/constants';\nimport { IPlatformDisplayProps } from 'types/platforms';\n\nexport const PLATFORM_DISPLAY_NAMES: { [key in string]: string } = {\n [PLATFORM_TYPES.PC]: 'Ubisoft Connect PC',\n [PLATFORM_TYPES.XONE]: 'Xbox One',\n [PLATFORM_TYPES.PS4]: 'PlayStation 4',\n [PLATFORM_TYPES.SWITCH]: 'Nintendo Switch',\n [PLATFORM_TYPES.WEB]: 'Web',\n [PLATFORM_TYPES.MOBILE]: 'Mobile',\n [PLATFORM_TYPES.IOS]: 'iOS',\n [PLATFORM_TYPES.ANDROID]: 'Android',\n [PLATFORM_TYPES.OCULUSVR]: 'Oculus VR',\n [PLATFORM_TYPES.STEAMVR]: 'Steam VR',\n [PLATFORM_TYPES.STEAM]: 'Steam',\n [PLATFORM_TYPES.STADIA]: 'Google Stadia',\n [PLATFORM_TYPES.EPIC]: 'Epic Games Store',\n [PLATFORM_TYPES.XSX]: 'Xbox Series X | S',\n [PLATFORM_TYPES.PS5]: 'PlayStation 5',\n [PLATFORM_TYPES.LUNA]: 'Amazon Luna',\n [PLATFORM_TYPES.AMAZON]: 'Amazon AppStore'\n};\n\nexport const PLATFORM_DISPLAY_PROPS: { [key: string]: IPlatformDisplayProps} = {\n [PLATFORM_TYPES.PC]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PC],\n isLinkable: true,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.UPLAY\n },\n [PLATFORM_TYPES.XONE]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XONE],\n linkAppText: 'platform-selection__link-xbox-account',\n isLinkable: true,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.XBL\n },\n [PLATFORM_TYPES.PS4]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PS4],\n linkAppText: 'platform-selection__link-psn-account',\n isLinkable: true,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.PSN\n },\n [PLATFORM_TYPES.SWITCH]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.SWITCH],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.SWITCH\n },\n [PLATFORM_TYPES.WEB]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.WEB],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.WEB\n },\n [PLATFORM_TYPES.MOBILE]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.MOBILE],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.MOBILE\n },\n [PLATFORM_TYPES.IOS]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.IOS],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.IOS\n },\n [PLATFORM_TYPES.ANDROID]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.ANDROID],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.ANDROID\n },\n [PLATFORM_TYPES.OCULUSVR]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.OCULUSVR],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.OCULUSVR\n },\n [PLATFORM_TYPES.STEAM]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STEAM],\n isLinkable: false,\n iconClass: String(PLATFORM_TYPES.STEAM).toLowerCase()\n },\n [PLATFORM_TYPES.STEAMVR]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STEAMVR],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.STEAMVR\n },\n [PLATFORM_TYPES.STADIA]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STADIA],\n isLinkable: true,\n iconClass: String(PLATFORM_TYPES.STADIA).toLowerCase()\n },\n [PLATFORM_TYPES.EPIC]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.EPIC],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.EPIC\n },\n [PLATFORM_TYPES.XSX]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XSX],\n isLinkable: true,\n linkAppText: 'platform-selection__link-xbox-account',\n iconClass: String(PLATFORM_TYPES.XSX).toLowerCase()\n },\n [PLATFORM_TYPES.PS5]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PS5],\n isLinkable: true,\n linkAppText: 'platform-selection__link-psn-account',\n iconClass: String(PLATFORM_TYPES.PS5).toLowerCase()\n },\n [PLATFORM_TYPES.LUNA]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.LUNA],\n isLinkable: false,\n iconClass: String(PLATFORM_TYPES.LUNA).toLowerCase()\n },\n [PLATFORM_TYPES.AMAZON]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.AMAZON],\n isLinkable: false,\n iconClass: String(PLATFORM_TYPES.AMAZON).toLowerCase()\n }\n};\n","import { ILoginSession } from 'types/session';\nimport { LOGIN_TYPE } from 'modules/login/login.constants';\n\nexport const loginSessionMock: ILoginSession = {\n type: LOGIN_TYPE.NEW_LOGIN,\n sessionId: '740ab387-b4a5-45fd-bfae-bd61b8dbccdc',\n isUbisoftConnectAuthenticated: true,\n UbisoftConnectProfile: {\n op: 'getProfiles',\n status: 'OK',\n ref: '12f7f27b-e4ef-4a29-9fe3-a9712d0db247_530',\n user: {\n profileId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'uplay',\n idOnPlatform: '9D7DAB4D-0403-4838-9AED-10B9B77591B5',\n nameOnPlatform: 'ulgui-ubi4'\n }\n },\n UbisoftConnectProfiles: [\n {\n profileId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'uplay',\n idOnPlatform: '9D7DAB4D-0403-4838-9AED-10B9B77591B5',\n nameOnPlatform: 'ulgui-ubi4'\n },\n {\n profileId: '2b204df2-75e3-400b-bbd4-0ba28c8eae77',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'psn',\n idOnPlatform: '6808430300154271139',\n nameOnPlatform: 'qwerty12345qaz'\n },\n {\n profileId: 'ba6f9c51-3a7d-4d59-9a8a-259d8f336048',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'twitch',\n idOnPlatform: '145698663',\n nameOnPlatform: 'ubitestaccount2'\n },\n {\n profileId: '-----',\n userId: '-----',\n platformType: 'wrongPlatform',\n idOnPlatform: '145698663',\n nameOnPlatform: '-----'\n }\n ],\n UbisoftConnectTicket: 'ew0KICAidmVyIjogIjEiLA0KICAiYWlkIjogIjEyZjdmMjdiLWU0ZWYtNGEyOS05ZmUzLWE5NzEyZDBkYjI0NyIsDQogICJlbnYiOiAiVUFUI'\n};\n\nexport const rawUbisoftConnectProfilesMock = {\n op: 'getProfiles',\n status: 'OK',\n ref: '12******-e***-****-****-************_***',\n user: {\n profiles: [\n {\n profileId: '********-****-****-****-************',\n userId: '********-****-****-****-************',\n platformType: 'uplay',\n idOnPlatform: '********-****-****-****-************',\n nameOnPlatform: 'd*******'\n }\n ]\n }\n};\n\nexport const userTicketMock = loginSessionMock.UbisoftConnectTicket;\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\n\nimport Select, { CSSObjectWithLabel, StylesConfig } from 'react-select';\n\nimport { ITranslationProps } from 'types/translation';\nimport { getModeClass } from 'utils/css';\n\nimport { IDropdownField } from './fields.types';\n\ntype IDropdownFieldProps = IDropdownField & ITranslationProps;\n\ninterface IOption {\n value: string;\n label: string;\n}\n\nconst getCustomStyles = (shouldInheritStyles: boolean): StylesConfig => ({\n singleValue: (provided: CSSObjectWithLabel) => ({\n ...provided,\n color: shouldInheritStyles ? 'inherit' : 'var(--content-text-color)'\n }),\n menu: (provided: CSSObjectWithLabel) => ({\n ...provided,\n background: shouldInheritStyles ? '#1a1a1a' : 'var(--subcontent-background-color)',\n border: '1px solid #606060'\n }),\n control: (provided: CSSObjectWithLabel) => ({\n ...provided,\n backgroundColor: 'transparent',\n borderRadius: 0,\n boxShadow: 'none',\n color: shouldInheritStyles ? 'inherit' : 'var(--content-text-color)',\n borderColor: '#606060',\n ':hover': {\n ...provided[':hover'],\n borderColor: '#606060'\n }\n }),\n option: (provided: CSSObjectWithLabel, state) => ({\n ...provided,\n color: shouldInheritStyles ? '#fff' : 'var(--content-text-color)',\n backgroundColor: state.isSelected\n ? '#606060'\n : shouldInheritStyles ? '#1a1a1a' : 'var(--subcontent-background-color)',\n ':hover': {\n ...provided[':hover'],\n backgroundColor: '#606060'\n }\n })\n});\n\nexport class DropdownField extends React.PureComponent {\n public render(): JSX.Element {\n const {\n shouldInheritStyles,\n meta,\n dangerouslyTranslateWithHTML: translateKey,\n translatePrefix\n } = this.props;\n\n const dropdownClassName = getModeClass('sitegen-dropdown', shouldInheritStyles);\n const labelText: string = translateKey(this.getLabelKey());\n const isWarningVisible = meta.error && meta.submitFailed;\n const errorMessage = isWarningVisible ? translateKey(`${translatePrefix}${meta.error.message}`) : '';\n const className: string = isWarningVisible\n ? `${dropdownClassName}__select ${dropdownClassName}__select_has-warnings`\n : `${dropdownClassName}__select`;\n\n return (\n
\n
{labelText}
\n
\n \n
{errorMessage}
\n
\n
\n );\n }\n\n private setFieldInput = (option: IOption): void => {\n // @ts-ignore\n // TODO: remove ignore once issue with typings is resolved:\n // https://github.com/final-form/react-final-form/issues/441\n this.props.input.onChange(option.value);\n };\n\n private getLabelKey(): string {\n const { input, translatePrefix } = this.props;\n return `${translatePrefix}${input.name}`;\n }\n\n private getViewOptions(): IOption[] {\n const {\n fieldValue,\n optionTranslatePrefix,\n dangerouslyTranslateWithHTML: translateKey\n } = this.props;\n return fieldValue.map(\n (item: string, index: number): IOption => {\n const localizedItem = translateKey(\n `${this.getLabelKey()} ${optionTranslatePrefix}${index + 1}`,\n { defaultValue: item }\n );\n return { value: item, label: localizedItem };\n }\n );\n }\n}\n\nexport default translate()(DropdownField) as typeof DropdownField;\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\n\nimport { getModeClass } from 'utils/css';\nimport { ICommonFieldProps } from './fields.types';\n\nexport class StringField extends React.Component {\n public render(): JSX.Element {\n const {\n shouldInheritStyles,\n meta,\n input,\n translatePrefix,\n dangerouslyTranslateWithHTML: translateKey\n } = this.props;\n\n const className = getModeClass('sitegen-string-field', shouldInheritStyles);\n const labelText = translateKey(this.getLabelKey());\n const isWarning = meta.error && meta.submitFailed;\n const errorMessage = isWarning\n ? translateKey(`${translatePrefix}${meta.error.message}`, { ...meta.error.data }).toString()\n : '';\n\n return (\n
\n
{labelText}
\n
\n \n
{errorMessage}
\n
\n
\n );\n }\n\n private getLabelKey(): string {\n const { input, translatePrefix } = this.props;\n return `${translatePrefix}${input.name}`;\n }\n}\n\nexport default translate()(StringField);\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\nimport { ICommonFieldProps } from './fields.types';\nimport { getModeClass } from 'utils/css';\n\nexport const IntField: React.FC = (props: ICommonFieldProps) => {\n const {\n shouldInheritStyles,\n meta,\n input,\n translatePrefix,\n dangerouslyTranslateWithHTML: translateKey\n } = props;\n\n const className = getModeClass('sitegen-int-field', shouldInheritStyles);\n const labelText = translateKey(`${translatePrefix}${input.name}`);\n const isWarning = meta.error && meta.submitFailed;\n const errorMessage = isWarning\n ? translateKey(`${translatePrefix}${meta.error.message}`, meta.error.data).toString()\n : '';\n\n return (\n
\n
{labelText}
\n
\n \n
{errorMessage}
\n
\n
\n );\n};\n\nexport default translate()(IntField);\n","export const EN_US: string = 'en-US';\n\nexport enum DateFormats {\n DDMMYYYY = 'dd/MM/yyyy',\n MMDDYYYY = 'MM/dd/yyyy'\n}\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\nimport DatePicker from 'react-datepicker';\nimport InputMask from 'react-input-mask';\nimport 'react-datepicker/dist/react-datepicker.css';\n\nimport { getModeClass } from 'utils/css';\nimport { ICommonFieldProps } from './fields.types';\nimport { DateFormats, EN_US } from './fields.constants';\n\nexport class DateField extends React.Component {\n private onChange(year: string | number, month: string | number, date: string | number): void {\n this.props.input.onChange(`${year}-${month}-${date}`);\n }\n\n private handleInputChange = (data: Date | null): void => {\n if (!data) {\n return;\n }\n\n const year = data.getFullYear();\n const date = data.getDate();\n const month = data.getMonth() + 1;\n\n this.onChange(year, month, date);\n };\n\n private getLabelKey(): string {\n const { translatePrefix, input } = this.props;\n return `${translatePrefix}${input.name}`;\n }\n\n private getInputMask = () => {\n const { activeLanguageCode } = this.props;\n return activeLanguageCode === EN_US ? DateFormats.MMDDYYYY : DateFormats.DDMMYYYY;\n }\n\n public render(): JSX.Element {\n const {\n dangerouslyTranslateWithHTML: translateKey,\n translatePrefix,\n input: { value },\n meta,\n shouldInheritStyles\n } = this.props;\n\n const labelText = translateKey(this.getLabelKey());\n const isWarning = meta.error && meta.submitFailed;\n const errorMessage = isWarning ? translateKey(`${translatePrefix}${meta.error.message}`) : '';\n const className = getModeClass('sitegen-date-picker', shouldInheritStyles);\n\n return (\n
\n
{labelText}
\n
\n \n }\n onChange={(date) => this.handleInputChange(date)} />\n
{errorMessage}
\n
\n
\n );\n }\n}\n\nexport default translate()(DateField);\n","import { DateField, DropdownField, IntField, StringField } from './fields';\nimport { IFieldTypes } from './additional-info.types';\n\nexport const TEXT_SUB_KEYS = {\n REQUIRED_ERROR: 'invalid-value-field-required',\n NUMBER_MIN_ERROR: 'invalid-value-min-int',\n NUMBER_MAX_ERROR: 'invalid-value-max-int',\n LENGTH_MIN_ERROR: 'invalid-value-length-min',\n LENGTH_MAX_ERROR: 'invalid-value-length-max',\n IS_NOT_NUMBER_ERROR: 'invalid-value-type-number',\n IS_NOT_DATE_ERROR: 'invalid-value-date-format',\n SUBMIT: 'submit-button'\n};\n\nexport enum FIELD_VIEW_TYPES {\n INT = 'int',\n DATE = 'date',\n STRING = 'string',\n DROPDOWN = 'dropdown'\n}\n\nexport const FIELD_VIEW_COMPONENTS: { [key: string]: IFieldTypes } = {\n [FIELD_VIEW_TYPES.INT]: IntField,\n [FIELD_VIEW_TYPES.DATE]: DateField,\n [FIELD_VIEW_TYPES.STRING]: StringField,\n [FIELD_VIEW_TYPES.DROPDOWN]: DropdownField\n};\n","import { ENV } from '@sitegen/common/constants/environments';\n\nexport const ANALYTICS_SCRIPT_URL = {\n [ENV.DEV]: 'https://ubistatic-a.ubisoft.com/0106/uat/global/tracking/analyticssdk.js',\n [ENV.PROD]: 'https://ubistatic-a.ubisoft.com/0106/prod/global/tracking/analyticssdk.js'\n};\n\nexport const SITE_CATEGORY = 'Responsive Site';\nexport const ANALYTICS_GLOBAL_NS = 'wa_data';\nexport const ANALYTICS_SDK = 'adobeAnalytics';\nexport const ANALYTICS_READY_EVENT = 'S_CODE_READY';\n\nexport enum ANALYTICS_EVENTS {\n FLOW_EVENT = 'flowevent',\n PAGE_EVENT = 'pageevent',\n CLICK_EVENT = 'clickevent',\n ERROR_EVENT = 'clickevent',\n ACCOUNT_EVENT = 'accountevent',\n}\n\nexport const ANALYTICS_ATTRIBUTES = {\n category: 'login',\n action: {\n // when user lands on a page\n signedIn: 'signed in',\n signedOut: 'signed out',\n\n // when login/log out calls\n signingIn: 'signing in',\n signingOut: 'signing out'\n }\n};\n\nexport const DEFAULT_LOCATION = 'page' as const;\n\nexport enum CATEGORY {\n DISPLAY = 'display',\n ACTION = 'action',\n INTERACTION = 'interaction'\n}\n","import { get } from 'lodash';\nimport { ActionsObservable, combineEpics, StateObservable } from 'redux-observable';\nimport { Subject } from 'rxjs/Subject';\nimport { ignoreElements, map, mergeMap } from 'rxjs/operators';\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\n\n// services\nimport AnalyticsService from './analytics-provider.service';\n\n// types\nimport { IEpicCreatorCallback } from 'types/analytics';\nimport { IEpic } from 'types/epic';\nimport { IAction } from 'types/action';\nimport { IModule } from '@sitegen/common/types';\n\nexport const initAnalyticsObservable$: Subject = new Subject();\n\nexport const epic$ = new BehaviorSubject(combineEpics(...[]));\n\nexport const createEmptyAnalyticsEpics = (): IEpic => {\n return (action$, store) => epic$.pipe(mergeMap(epic => epic(action$, store, {})));\n};\n\nexport const loadAnalyticsEpicsAsync = (importPromise: Promise): void => {\n importPromise.then(analyticsEpics => {\n epic$.next(analyticsEpics.default);\n });\n};\n\nexport const analyticsEpicCreator = (\n types: string[],\n callback: IEpicCreatorCallback\n) => (\n action$: ActionsObservable,\n /* eslint-disable-next-line*/\n store$: StateObservable\n) =>\n action$\n .ofType(...types)\n .pipe(\n map(action => {\n callback(action, store$);\n })\n )\n .pipe(ignoreElements());\n\nexport const setLanguage = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (action: IAction): void => {\n const language = get(action, 'payload.language', '');\n const country = get(action, 'payload.country', '');\n\n AnalyticsService.updateAnalyticalData({\n language,\n country,\n countryCode: country.toLowerCase()\n });\n }\n );\n\nexport const setUserAnalyticsData = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (action: IAction): void => {\n const userId = get(action, 'payload.UbisoftConnectProfile.user.userId');\n\n AnalyticsService.updateAnalyticalData({\n errorType: '',\n ubisoftId: userId,\n });\n }\n );\n\n// TODO: merge with analyticLogoutEpic\nexport const cleanLoginAnalyticsData = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (): void => {\n AnalyticsService.updateAnalyticalData({\n errorType: '',\n ubisoftId: '',\n });\n }\n );\n\nexport const setPlatformSelection = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (action: IAction): void => {\n const selectedPlatform = get(action, 'payload.platform');\n\n AnalyticsService.updateAnalyticalData({\n platformSelection: selectedPlatform.toUpperCase(),\n errorType: ''\n });\n }\n );\n","import { isFunction } from 'lodash';\n// services\nimport { getCountryFromLanguage, getShortLanguageCode } from 'modules/language-provider/locale';\n// epics\nimport { initAnalyticsObservable$ } from './analytics-provider.epic';\n// utils\nimport { getEnvDependentEndpoint } from '@sitegen/common/utils/ubi-services';\n// constants\nimport {\n ANALYTICS_EVENTS,\n ANALYTICS_GLOBAL_NS,\n ANALYTICS_READY_EVENT,\n ANALYTICS_SCRIPT_URL,\n ANALYTICS_SDK,\n SITE_CATEGORY,\n ANALYTICS_ATTRIBUTES,\n DEFAULT_LOCATION\n} from './analytics-provider.constants';\nimport { COUNTRIES } from '@sitegen/common/localization/locations';\nimport { WEBSITE_DEFAULT_ANALYTIC_NAME } from '@sitegen/common/constants/website';\n// types\nimport {\n IAccountEventData,\n IAnalyticsConfigData,\n IAnalyticsData,\n IFlowEventData,\n IPageEventData,\n ITrackingData,\n ITrackingEvent\n} from 'types/analytics';\n\nclass Analytics {\n public isAuthenticatedUser = false;\n private isEnabled = false;\n private hasUserAllowedTracking = false;\n private flowType: string = '';\n private flowStep: string = '';\n private hostDomain: string = '';\n public platformSelection: string = '';\n private analyticsEnvironment: string;\n private trackingEventsBuffer: ITrackingEvent[] = [];\n\n public initAnalytics = (config: IAnalyticsConfigData): void => {\n if (!config.isAnalyticsEnabled) {\n return;\n }\n\n this.isEnabled = config.isAnalyticsEnabled;\n this.analyticsEnvironment = config.envName;\n this.hostDomain = window.location.hostname || '';\n this.flowType = config.flowType ?? '';\n\n window.addEventListener('message', (event: MessageEvent) => {\n if (ANALYTICS_READY_EVENT === event.data) {\n this.hasUserAllowedTracking = true;\n this.flushTrackingEventsBuffer();\n }\n });\n\n if (!config.embedded) {\n this.assignInitialData(config);\n this.injectAnalyticsScript(config.envName);\n } else {\n this.hasUserAllowedTracking = window[ANALYTICS_SDK]?.config.analyticsAccepted ?? false;\n }\n\n return initAnalyticsObservable$.next(config.isAnalyticsEnabled);\n };\n\n public sendPageEvent = (data: IAnalyticsData) => {\n this.updateAnalyticalData(data);\n\n const websiteData: IAnalyticsData = window[ANALYTICS_GLOBAL_NS];\n\n if (!this.isEnabled || !websiteData) {\n return;\n }\n\n const pageEventData = {\n appId: websiteData.appId,\n brand: websiteData.brand,\n country: websiteData.country,\n countryCode: websiteData.countryCode,\n environment: websiteData.environment,\n game: websiteData.game,\n genomeId: websiteData.genomeId,\n language: websiteData.language,\n region: websiteData.region,\n pageName: websiteData.pageName,\n siteName: websiteData.siteName,\n siteType: websiteData.siteType,\n siteSection: WEBSITE_DEFAULT_ANALYTIC_NAME,\n siteSubSection: websiteData.siteSubSection,\n ubisoftId: websiteData.ubisoftId,\n ...data\n } as IPageEventData;\n\n return this.track(ANALYTICS_EVENTS.PAGE_EVENT, pageEventData);\n };\n\n public sendAccountEvent = (data: IAccountEventData) => {\n const websiteData: IAnalyticsData = window[ANALYTICS_GLOBAL_NS];\n\n if (!websiteData || !this.isEnabled) {\n return;\n }\n\n this.track(ANALYTICS_EVENTS.ACCOUNT_EVENT, {\n ...data,\n action: [\n websiteData.siteName,\n ANALYTICS_ATTRIBUTES.category,\n data.action\n ].join(' - '),\n ubisoftId: websiteData.ubisoftId,\n });\n };\n\n public sendFlowEvent = (data: Omit): void => {\n const websiteData: IAnalyticsData = window[ANALYTICS_GLOBAL_NS];\n\n if (data.platformSelection && this.platformSelection !== data.platformSelection) {\n this.platformSelection = data.platformSelection;\n }\n\n if (data.flowStep && this.flowStep !== data.flowStep) {\n this.flowStep = data.flowStep;\n }\n\n const flowType = this.flowType ?? websiteData?.flowType;\n const flowEvent: IFlowEventData = {\n ...data,\n flowType,\n locationDetail: flowType,\n location: data.location || DEFAULT_LOCATION,\n flowStep: data?.flowStep ?? this.flowStep,\n platformSelection: this.platformSelection || websiteData?.platformSelection || '',\n hostDomain: this.hostDomain,\n };\n\n this.track(ANALYTICS_EVENTS.FLOW_EVENT, flowEvent);\n };\n\n public setPlatformSelection = (platform: string = '') => {\n this.platformSelection = platform;\n };\n\n private bufferizeTrackingEvent = (trackingEvent: ITrackingEvent): void => {\n this.trackingEventsBuffer.push(trackingEvent);\n };\n\n private flushTrackingEventsBuffer = (): void => {\n this.trackingEventsBuffer.map(trackingEvent => this.track(trackingEvent.eventName, trackingEvent.data));\n this.trackingEventsBuffer = [];\n };\n\n public updateAnalyticalData = (data: IAnalyticsData): void => {\n if (window[ANALYTICS_GLOBAL_NS]) {\n window[ANALYTICS_GLOBAL_NS] = {\n ...window[ANALYTICS_GLOBAL_NS],\n ...data\n };\n }\n };\n\n private track(eventName: ANALYTICS_EVENTS, data: ITrackingData): void {\n if (!this.hasUserAllowedTracking) {\n return this.bufferizeTrackingEvent({ eventName, data });\n }\n\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].track)) {\n window[ANALYTICS_SDK].track(eventName, data);\n }\n } catch (err) {\n console.error('Analytics script failed to handle track method call', err); // eslint-disable-line no-console\n }\n }\n\n public initPrivacyOptions(): void {\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].initPrivacyOptions)) {\n window[ANALYTICS_SDK].initPrivacyOptions();\n }\n } catch (err) {\n console.error('Analytics script failed to initialize privacy center', err); // eslint-disable-line no-console\n }\n }\n\n private assignInitialData = (configData: IAnalyticsConfigData): void => {\n const country = getCountryFromLanguage( { useUrl: true });\n const language = getShortLanguageCode({ useUrl: true });\n const region = COUNTRIES.find(c => c.code === country)?.region || '';\n\n window[ANALYTICS_GLOBAL_NS] = {\n siteCategory: SITE_CATEGORY,\n appId: configData.applicationId,\n brand: configData.analyticsBrand || '',\n country,\n countryCode: country.toLowerCase(),\n environment: this.analyticsEnvironment,\n game: configData.analyticsGame || '',\n genomeId: configData.genomeId || '',\n language,\n region,\n siteType: WEBSITE_DEFAULT_ANALYTIC_NAME,\n siteName: configData.analyticsSiteName || '',\n mdmBrand: configData.analyticsMDMBrandId || '',\n mdmInstallmentId: configData.analyticsMDMInstallmentId || '',\n errorType: '',\n pageName: '',\n siteSubSection: '',\n siteSection: '',\n platformSelection: '',\n ubisoftId: '',\n flowType: configData.flowType,\n flowStep: '',\n doNotTrack: 'NOT_ACTIVE',\n } as IAnalyticsData;\n };\n\n private injectAnalyticsScript = (envName: string): void => {\n const script: HTMLScriptElement = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('async', 'true');\n\n script.onload = () => {\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].init)) {\n window[ANALYTICS_SDK].init(window[ANALYTICS_GLOBAL_NS]);\n }\n } catch (err) {\n console.error('Analytics script failed to handle init method call', err); // eslint-disable-line no-console\n }\n };\n\n script.setAttribute('src', getEnvDependentEndpoint({ envName, source: ANALYTICS_SCRIPT_URL }));\n\n document.body.appendChild(script);\n };\n\n public triggerOptIn = () => {\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].triggerOptIn)) {\n window[ANALYTICS_SDK].triggerOptIn();\n }\n } catch (err) {\n console.error('Analytics script failed to handle triggerOptIn method call', err); // eslint-disable-line no-console\n }\n };\n\n public triggerInitialPageEvents({ userId = '', hasLoginSession }: {\n hasLoginSession: boolean,\n userId: string\n }) {\n const analyticsLoginAction = ANALYTICS_ATTRIBUTES.action;\n\n this.sendPageEvent({ pageName: 'main', siteSubSection: '', errorType: '' } as IAnalyticsData);\n userId && this.updateAnalyticalData({ ubisoftId: userId, errorType: '' });\n this.sendAccountEvent({\n action: hasLoginSession\n ? analyticsLoginAction.signedIn\n : analyticsLoginAction.signedOut,\n loggedIn: hasLoginSession.toString(),\n loggedOut: (!hasLoginSession).toString()\n });\n\n this.isAuthenticatedUser = hasLoginSession;\n }\n}\n\nconst analyticsService = new Analytics();\n\nexport default analyticsService;\n","import { get } from 'lodash';\nimport * as React from 'react';\n\n// services\nimport AnalyticsService from 'modules/analytics-provider/analytics-provider.service';\n\n// types\nimport IConfig, { WEBSITE_MODE } from '@sitegen/common/constants/config';\nimport { IAnalyticsConfigData } from 'types/analytics';\nimport { WIDGET_CONFIG } from '@sitegen/common/constants';\n\ninterface IAnalyticsProps {\n config: IConfig;\n}\n\nexport class AnalyticsProvider extends React.Component {\n public componentDidMount() {\n const { config } = this.props;\n const flowType = config.analyticsFlowType || get(\n WIDGET_CONFIG,\n `${config.widgetName}.widgetFlowType`,\n ''\n ) as string;\n const analyticsConfigData: IAnalyticsConfigData = {\n applicationId: config.applicationId,\n widgetName: config.widgetName,\n isAnalyticsEnabled: config.isAnalyticsEnabled,\n analyticsBrand: config.analyticsBrand,\n analyticsGame: config.analyticsGame,\n analyticsMDMBrandId: config.analyticsMDMBrandId,\n analyticsMDMInstallmentId: config.analyticsMDMInstallmentId,\n analyticsSiteName: config.analyticsSiteName,\n genomeId: config.genomeId,\n envName: config.envName,\n flowType,\n embedded: (config.mode === WEBSITE_MODE.EMBEDDED)\n };\n AnalyticsService.initAnalytics(analyticsConfigData);\n }\n\n public render() {\n return null;\n }\n}\n\nexport default AnalyticsProvider;\n","import AnalyticsProvider from './analytics-provider.component';\nimport Service from './analytics-provider.service';\nimport * as Constants from './analytics-provider.constants';\nimport * as Epics from './analytics-provider.epic';\n\nexport { AnalyticsProvider, Service, Constants, Epics };\n\nexport default AnalyticsProvider;\n","export const TRANSLATION_NAME_SPACES = {\n TRANSLATIONS: 'translations',\n FALLBACK_TRANSLATIONS: 'fallback-translations',\n};\n","import * as i18next from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport * as moment from 'moment';\nimport { fetchLanguage } from './language-provider.utils';\n// constants\nimport { DEFAULT_LANGUAGE } from 'constants/locales';\nimport { TRANSLATION_NAME_SPACES } from './i18n.constants';\nimport { ENV } from '@sitegen/common/constants/environments';\n\n// types\nimport { IPromisedTranslation, ITranslation } from 'types/translation';\n\ninterface IChangeLanguage {\n languageCode: string;\n translationsPath: string | null;\n fallbackTranslationsPath: string | null;\n}\n\ninterface IInitOptions {\n readonly env: ENV;\n readonly initialTranslations: ITranslation;\n}\n\nclass I18nService {\n private i18nextInstance: i18next.i18n;\n private initialTranslations: ITranslation;\n private fallbackTranslation: ITranslation;\n private useCache: boolean = true;\n\n public async init(options: IInitOptions): Promise {\n const { initialTranslations } = options;\n\n this.initMoment();\n this.i18nextInstance = i18next.createInstance();\n this.initialTranslations = initialTranslations;\n await this.i18nextInstance.use(initReactI18next).init({\n // fallbackLng: 'en-GB', - we changed i18n strategy to fallbackNS change comment below.\n // the issue discussion https://github.com/i18next/i18next-gitbook/issues/49\n resources: {\n [DEFAULT_LANGUAGE]: {\n [TRANSLATION_NAME_SPACES.TRANSLATIONS]: initialTranslations,\n [TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS]: initialTranslations\n }\n },\n ns: [\n TRANSLATION_NAME_SPACES.TRANSLATIONS,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS\n ],\n fallbackNS: [\n TRANSLATION_NAME_SPACES.TRANSLATIONS,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS\n ],\n debug: false,\n react: {\n useSuspense: true,\n nsMode: 'fallback'\n },\n saveMissing: true,\n missingKeyHandler: (...args: any) => {\n /* Most of the time missing keys are either analytics attributes, or custom item names.\n Shouldn't be displayed in production-like environments */\n if (options.env === ENV.DEV) {\n console.warn('MISSING KEY', args);\n }\n }\n });\n this.i18nextInstance.changeLanguage(DEFAULT_LANGUAGE);\n }\n\n public async changeLanguage(options: IChangeLanguage): Promise {\n const { languageCode, translationsPath, fallbackTranslationsPath } = options;\n\n this.configureMoment(languageCode);\n\n const getTranslationsPromise = translationsPath\n ? fetchLanguage(translationsPath, this.useCache).then(response => response.data)\n : Promise.reject();\n\n const getFallbackTranslationsPromise: Promise = (() => {\n // Caching the data, in order to re-use it as custom fallback for other languages\n // The custom fallback language is the same for any language\n if (this.fallbackTranslation) {\n return Promise.resolve(this.fallbackTranslation);\n } else if (!fallbackTranslationsPath) {\n return Promise.reject();\n } else {\n return fetchLanguage(fallbackTranslationsPath).then(response => {\n this.fallbackTranslation = response.data;\n return response.data;\n });\n }\n })();\n\n /*\n * This Promise will be resolved even if all Promises was rejected.\n * */\n return new Promise((resolve, reject) => {\n Promise.all([\n getTranslationsPromise.catch(() => {\n console.warn(`Can't load translations from '${translationsPath}'`);\n }),\n getFallbackTranslationsPromise.catch(() => {\n console.warn(`Can't load fallback translations from '${fallbackTranslationsPath}'`);\n })\n ]).then(\n ([translations, fallbackTranslations]: Array): void => {\n const translationLoadedSuccessful =\n this.initialTranslations || translations || fallbackTranslations;\n\n if (translationLoadedSuccessful) {\n if (fallbackTranslations) {\n this.i18nextInstance.addResourceBundle(\n languageCode,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS,\n fallbackTranslations\n );\n }\n if (translations) {\n this.i18nextInstance.addResourceBundle(languageCode, TRANSLATION_NAME_SPACES.TRANSLATIONS, translations);\n }\n this.i18nextInstance.changeLanguage(languageCode);\n resolve(languageCode);\n } else {\n reject();\n }\n }\n );\n });\n }\n\n /**\n * {@link https://mdc-tomcat-jira35.ubisoft.org/jira/browse/GEN-1824}\n * Configures cache mode for translation's fetching:\n * true (default) - fetch request fires only once for particular locale avoiding redundant downloads on production\n * false - cache's not used; ideal for Preview Mode when translations can be periodically refreshed\n * @access public\n * @param {boolean} useCache @default true\n */\n public setCaching(useCache: boolean = true): void {\n this.useCache = useCache;\n }\n\n private configureMoment(locale: string = DEFAULT_LANGUAGE): void {\n moment.locale(locale);\n }\n\n private initMoment(): void {\n // Determine locale, because we have different rules for them.\n moment.defineLocale('es-MX', { parentLocale: 'es' });\n moment.defineLocale('es-ES', { parentLocale: 'es' });\n }\n\n public getAnalyticsLabel(key: string): string {\n const getAnalyticsLabel = this.i18nextInstance.getFixedT(DEFAULT_LANGUAGE);\n return getAnalyticsLabel(key);\n }\n}\n\nexport const i18nService = new I18nService();\n\nexport default i18nService;\n","import axios, { AxiosResponse } from 'axios';\nimport { memoize } from 'lodash';\n\nconst memoizedGET = memoize(axios.get);\nexport const fetchLanguage = (path: string, cacheResult: boolean = true): Promise =>\n cacheResult ? memoizedGET(path) : axios.get(path);\n\nexport const resolveBasePathname = (configPath: string): string => {\n const lastIndexOfConfigPath = window.location.pathname.lastIndexOf(configPath);\n\n if (configPath === '/' || !(lastIndexOfConfigPath + 1)) {\n return '';\n } else {\n // find index of the end of last entry of configPath\n const substringIndex = lastIndexOfConfigPath + configPath.length;\n // get first part of url, for example: if configPath = 'dist', window.location.pathname = '/dist/en-GB' result will be '/dist'\n return window.location.pathname.substring(0, substringIndex);\n }\n};\n","import { LOCALE } from '@sitegen/common/localization/locales';\n\nimport { ILocaleRules } from './locale.types';\n\nexport const LANGUAGE_CODE_REGEX: RegExp = /^[a-zA-Z]{2}$/;\nexport const LOCALE_SEPARATOR: string = '-';\nexport const URL_PARAM_SEPARATOR: string = '/';\n/* Unique locale that is not supported by our application, has to be supported by Ubisoft */\nexport const EN_NORDIC: string = 'EN_NORDIC';\n\n/**\n * If language short code is present in this mapping we can guarantee complete locale from \"language\" field\n * Example: fr-guinea => fr-FR\n *\n * If there is a special language-to-locale mapping present in \"locales\" field, this is the result\n * Example: en-nz => en-AU\n *\n * If language pattern is successful for some language, first match is the result\n * Example zh-hans-hk => zh-HK\n *\n * If no special locale or pattern is found, locale from \"language\" field is a guaranteed result\n */\nexport const LANGUAGE_TO_LOCALE_MAPPING: { [langugage: string]: ILocaleRules } = {\n /* English */\n en: {\n language: LOCALE.EN_GB,\n locales: {\n 'en-au': LOCALE.EN_AU,\n 'en-nz': LOCALE.EN_AU,\n 'en-ca': LOCALE.EN_CA,\n 'en-us': LOCALE.EN_US,\n [EN_NORDIC]: EN_NORDIC\n }\n },\n\n /* French */\n fr: {\n language: LOCALE.FR_FR,\n locales: {\n 'fr-ca': LOCALE.FR_CA\n }\n },\n\n /* Spanish */\n es: {\n language: LOCALE.ES_ES,\n patterns: [\n { regex: /es-es[a-zA-Z]?/g, locale: LOCALE.ES_ES },\n { regex: /es-[a-zA-Z]+/g, locale: LOCALE.ES_MX }\n ]\n },\n ca: { language: LOCALE.ES_ES },\n\n /* Portuguese */\n pt: {\n language: LOCALE.PT_PT,\n locales: {\n 'pt-br': LOCALE.PT_BR\n }\n },\n\n /* Chinese */\n zh: {\n language: LOCALE.ZH_CN,\n patterns: [\n { regex: /zh-[a-zA-Z]*[-]?tw[a-zA-Z_]*/g, locale: LOCALE.ZH_TW },\n ]\n },\n\n /* Nordic */\n no: { language: LOCALE.NB_NO },\n nb: { language: LOCALE.NB_NO },\n\n /* Other Languages */\n da: { language: LOCALE.DA_DK },\n de: { language: LOCALE.DE_DE },\n fi: { language: LOCALE.FI_FI },\n hu: { language: LOCALE.HU_HU },\n it: { language: LOCALE.IT_IT },\n nl: { language: LOCALE.NL_NL },\n pl: { language: LOCALE.PL_PL },\n ru: { language: LOCALE.RU_RU },\n sv: { language: LOCALE.SV_SE },\n tr: { language: LOCALE.TR_TR },\n uk: { language: LOCALE.UK_UA },\n ar: { language: LOCALE.AR_AE },\n ja: { language: LOCALE.JA_JP },\n ko: { language: LOCALE.KO_KR },\n th: { language: LOCALE.TH_TH },\n cs: { language: LOCALE.CS_CZ },\n nn: { language: LOCALE.NN_NO }\n};\n\nexport const GET_LOCALE_TEXT = {\n LANGUAGE_CODE_LENGTH_ERROR: 'Error: Language Code Should Consist of Two Letters'\n};\n","import { IAvailableLanguages, LANGUAGE_REGION, REGION_TO_DEFAULT_LANGUAGE } from '@sitegen/common/localization/language-regions';\nimport { LANGUAGE_TO_REGION_MAP, LANGUAGES_MAP } from '@sitegen/common/localization';\n\nimport { IGetSafeLocaleOptions, ILocalePattern, ILocaleRules } from './locale.types';\nimport { isLocaleValid, standardizeLocale } from 'utils/localizeTime';\nimport {\n GET_LOCALE_TEXT,\n LANGUAGE_CODE_REGEX,\n LANGUAGE_TO_LOCALE_MAPPING,\n LOCALE_SEPARATOR,\n URL_PARAM_SEPARATOR\n} from './locale.constants';\nimport { DEFAULT_LANGUAGE } from 'constants/locales';\n\n/** Get safe locale based on URL, user input or browser language */\nexport function getSafeLocale(options: IGetSafeLocaleOptions = {}): string {\n let locale: string | undefined;\n if (options.useUrl) {\n locale = getLocaleFromUrl();\n }\n\n if (options.language) {\n try {\n locale = getLocaleFromLanguage(options.language);\n } catch {\n locale = undefined;\n }\n }\n\n /* Use fallback when locale has not been determined */\n if (!locale && options.useBrowserFallback) {\n locale = getLocaleFromBrowserLanguage();\n }\n\n if (locale && options.useAvailableLocales) {\n locale = filterByAvailableLocales({ locale, availableLocales: options.useAvailableLocales });\n }\n\n return locale || DEFAULT_LANGUAGE;\n}\n\n/**\n * Check if locale is present in URL and is valid\n * If locale is not valid => undefined, if valid but not present in list => DEFAULT_LANGUAGE\n */\nexport function getLocaleFromUrl(): string | undefined {\n const param: string | undefined = getUnsafeLocaleFromUrlParam();\n if (!param) {\n return;\n }\n return LANGUAGES_MAP[param as string] ? param : DEFAULT_LANGUAGE;\n}\n\n/** Get complete locale based on any input, like \"en-US\", or \"de-DE\", always return safe value or throw exception */\nexport function getLocaleFromLanguage(input: string): string {\n const language: string = input.toLowerCase();\n const languageCode: string = language.split(LOCALE_SEPARATOR)[0];\n\n /* Input string should start with 2 letters with optional info after hyphen */\n if (!languageCode || !LANGUAGE_CODE_REGEX.test(languageCode)) {\n throw new Error(GET_LOCALE_TEXT.LANGUAGE_CODE_LENGTH_ERROR);\n }\n\n /* If no mapping is provided for given language code, use English */\n if (!LANGUAGE_TO_LOCALE_MAPPING[languageCode]) {\n return DEFAULT_LANGUAGE;\n }\n\n /* If no optional info is provided use basic language mapping */\n const localeFromLanguage: string = LANGUAGE_TO_LOCALE_MAPPING[languageCode].language;\n if (LANGUAGE_CODE_REGEX.test(language)) {\n return localeFromLanguage;\n }\n\n const localeFromRule: string | undefined = checkLocaleRules(language, languageCode);\n if (localeFromRule) {\n return localeFromRule;\n }\n\n const localeFromPattern: string | undefined = checkPatternRules(language, languageCode);\n if (localeFromPattern) {\n return localeFromPattern;\n }\n\n /* Basic language mapping should always be present */\n return localeFromLanguage;\n}\n\n/** If direct locale mapping is present (case-insensitive), use it instantly */\nexport function checkLocaleRules(language: string, code: string): string | undefined {\n const rule: ILocaleRules = LANGUAGE_TO_LOCALE_MAPPING[code];\n return rule.locales && rule.locales[language] ? rule.locales[language] : undefined;\n}\n\n/** Run pattern checks in order, return locale on first match or undefined, if no matches found */\nexport function checkPatternRules(language: string, code: string): string | undefined {\n const rule: ILocaleRules = LANGUAGE_TO_LOCALE_MAPPING[code];\n const patterns: ILocalePattern[] = rule.patterns || [];\n\n for (let i: number = 0; i < patterns.length; i++) {\n const pattern: ILocalePattern = patterns[i];\n if (pattern.regex.test(language)) {\n return pattern.locale;\n }\n }\n\n return;\n}\n\n/**\n * Get valid locale param (possibly non-present in list) from URL or undefined\n * TODO: https://gitlab-ncsa.ubisoft.org/Sitegen/sitegen-main/issues/68\n */\nexport function getUnsafeLocaleFromUrlParam(): string | undefined {\n const params: string[] = window.location.pathname.split(URL_PARAM_SEPARATOR).filter((substring: string): string => substring);\n const locale: string = params[params.length - 1];\n return isLocaleValid(locale) ? standardizeLocale(locale) : undefined;\n}\n\n/** Try to get locale from browser settings */\nexport function getLocaleFromBrowserLanguage(): string | undefined {\n try {\n return getLocaleFromLanguage(window.navigator.language);\n } catch {\n return;\n }\n}\n\n/**\n * Check if locale is listed in available languages\n * If locale is valid, but not listed, use region default language\n */\nexport function filterByAvailableLocales(options: { locale: string, availableLocales: IAvailableLanguages }): string | undefined {\n const region: LANGUAGE_REGION = LANGUAGE_TO_REGION_MAP[options.locale];\n if (!region) {\n return;\n }\n\n const locale: string | undefined = options.availableLocales[region].find((item: string): boolean => item === options.locale);\n if (locale) {\n return locale;\n }\n\n return REGION_TO_DEFAULT_LANGUAGE[region];\n}\n","import { getSafeLocale } from './locale.service';\nimport { LOCALE_SEPARATOR } from './locale.constants';\n\ninterface ILocaleUtilOptions {\n language?: string;\n useUrl?: boolean;\n}\n\n/** Return language code in lower case, like \"en\" or \"de\" */\nexport function getShortLanguageCode(options: ILocaleUtilOptions): string {\n const { language, useUrl } = options;\n\n return getSafeLocale({ language, useUrl, useBrowserFallback: true })\n .split(LOCALE_SEPARATOR)[0]\n .toLowerCase();\n}\n\n/** Return country code in upper case, like \"EN\" or \"ES\" */\nexport function getCountryFromLanguage(options: ILocaleUtilOptions): string {\n const { language, useUrl } = options;\n\n return getSafeLocale({ language, useUrl, useBrowserFallback: true })\n .split(LOCALE_SEPARATOR)[1]\n .toUpperCase();\n}\n","import { IFlowEventData } from 'types/analytics';\n\nexport const LOG_OUT = 'LOG_OUT';\nexport const LOG_OUT_DONE = 'LOG_OUT_DONE';\nexport const LOG_OUT_ERROR = 'LOG_OUT_ERROR';\n\nexport const SET_LOGIN_FETCHING = 'SET_LOGIN_FETCHING' as const;\nexport const HAS_SESSION_ALREADY = 'HAS_SESSION_ALREADY' as const;\n\nexport const SET_LOGIN_SESSION = 'SET_LOGIN_SESSION' as const;\nexport const REMOVE_LOGIN_SESSION = 'REMOVE_LOGIN_SESSION' as const;\n\nexport const SET_TPC_ENABLED = 'SET_TPC_ENABLED' as const;\n\nexport enum LOGIN_TYPE {\n /* User was not logged in before */\n NEW_LOGIN = 'NEW_LOGIN',\n /* User was logged in and confirmed his account */\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n /* User was logged in as account A, but chose account B during Connect phase */\n RESELECT_ACCOUNT = 'RESELECT_ACCOUNT'\n}\n\nexport const STYLES = {\n CONTENT: 'sitegen-login-page'\n};\n\nexport const TEXT_KEYS = {\n BUTTON_LOGIN: 'header__login'\n};\n\nexport const LOGIN_FLOW_STEP: Pick = {\n flowStep: 'login'\n};\n\nexport enum LOGIN_FLOW_ACTIONS {\n DISPLAY = 'login page',\n LOGIN = 'log in'\n}\n","import URI from 'urijs';\nimport 'urijs/src/URITemplate';\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { mapValues } from 'lodash';\n\nimport { getUbiServicesEndpoint } from '@sitegen/common/utils/ubi-services';\nimport {\n IConfigureUbisoftAPIServiceOptions,\n ISessionHeadersOptions,\n IStat,\n IStats,\n IUserFriend,\n ICountryCode\n} from './ubisoft-api.types';\nimport {\n USER_FRIEND_LIST_URL,\n USER_FRIEND_PROFILE_URL,\n USER_PROFILE_STAT_TEMPLATE,\n USER_DETAIL_INFO_URL,\n IP_LOCATION_URL,\n} from './ubisoft-api.constants';\n\nimport { IProfilePlatform, IUserDetailInfo } from 'types/profiles';\n\n/**\n * Provides collection of requests to Ubisoft Services API http://doc-ubiservices.ubisoft.org/public-docs/\n */\nexport class UbisoftAPIService {\n private static AXIOS_INSTANCE: AxiosInstance;\n private static ENV: string;\n private static session: ISessionHeadersOptions;\n\n /** Provide headers and other options to each request */\n public static configure(options: IConfigureUbisoftAPIServiceOptions): void {\n const headers: object = {\n 'Ubi-AppId': options.appId\n };\n\n this.ENV = options.env;\n this.AXIOS_INSTANCE = axios.create({ headers });\n if (options.session) {\n this.configureSession(options.session);\n }\n }\n\n public static configureSession(session: ISessionHeadersOptions): void {\n this.session = session;\n this.AXIOS_INSTANCE.interceptors.request.use((config: AxiosRequestConfig) => {\n if (this.session) {\n config.headers['Ubi-SessionId'] = this.session.sessionId;\n config.headers['Authorization'] = `ubi_v1 t=${this.session.ticket}`;\n }\n return config;\n });\n }\n\n public static configureFakeAPI(): Promise {\n /* eslint-disable-next-line*/\n return import('./__mocks__/ubisoft-api.service.mocks').then((module: any): void => {\n this.getFriendList = module.getFriendList;\n this.getFriendProfile = module.getFriendProfile;\n this.getIPLocation = module.getIPLocation;\n });\n }\n\n /** Return list of user's friends as map */\n public static async getFriendList(): Promise {\n const host: string = getUbiServicesEndpoint(this.ENV);\n const url: string = new URI(host).segment(USER_FRIEND_LIST_URL).href();\n const response: { friends: IUserFriend[] } = await this.request({ url, method: 'GET' });\n return response.friends;\n }\n\n /** Return stat value by its name */\n public static async getStatByName(options: {\n readonly userId: string,\n readonly spaceId: string,\n readonly statName: string\n }): Promise<{[name: string]: string}> {\n const host: string = getUbiServicesEndpoint(this.ENV);\n const values: object = { userId: options.userId };\n const template: string = URI.expand!(USER_PROFILE_STAT_TEMPLATE, values).toString();\n const url: string = new URI(host)\n .segment(template)\n .setQuery({ spaceId: options.spaceId, statName: options.statName })\n .href();\n\n const response: IStats = await this.request({ url, method: 'GET' });\n\n return mapValues(response.stats, (stat: IStat, _name) => stat.value );\n }\n\n public static async getFriendProfile(options: { readonly UbiAccountId: string }): Promise {\n const host: string = getUbiServicesEndpoint(this.ENV);\n const url: string = new URI(host).segment(USER_FRIEND_PROFILE_URL).segment(options.UbiAccountId).href();\n return await this.request({ url, method: 'GET' });\n }\n\n public static async getUserInfo(): Promise {\n const host: string = getUbiServicesEndpoint(this.ENV);\n const url: string = new URI(host).segment(USER_DETAIL_INFO_URL).href();\n return await this.request({ url, method: 'GET' });\n }\n\n public static async getIPLocation(): Promise {\n const host: string = getUbiServicesEndpoint(this.ENV);\n const url: string = new URI(host).segment(IP_LOCATION_URL).href();\n return await this.request({ url, method: 'GET' });\n }\n\n /** Throw status code as a number because no particular error handling is available */\n private static request(options: AxiosRequestConfig): Promise {\n return this.AXIOS_INSTANCE.request({ ...options, responseType: 'json' })\n .then((response: AxiosResponse): T => {\n return response.data;\n }).catch((e: AxiosError): never => {\n throw e.response!.status;\n });\n }\n}\n","export const USER_FRIEND_LIST_URL: string = '/v2/profiles/me/friends';\nexport const USER_FRIEND_PROFILE_URL: string = '/v2/profiles';\nexport const USER_PROFILE_STAT_TEMPLATE: string = '/v1/profiles/{userId}/stats';\nexport const USER_DETAIL_INFO_URL: string = '/v3/users/me';\nexport const IP_LOCATION_URL = '/v2/profiles/me/iplocation';\n\nexport enum USER_FRIEND_STATUS {\n FRIEND = 'Friends',\n PENDING_SENT_INVITE = 'PendingSentInvite',\n}\n","import { invert } from 'lodash';\n\nimport { ENV } from '@sitegen/common/constants/environments';\nimport { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nexport enum UBISOFT_CONNECT_PLATFORM_TYPES {\n UPLAY = 'uplay',\n XBL = 'xbl',\n PSN = 'psn',\n SWITCH = 'switch',\n WEB = 'web',\n MOBILE = 'mobile',\n IOS = 'ios',\n ANDROID = 'android',\n OCULUSVR = 'oculusvr',\n STEAMVR = 'steamvr',\n STADIA = 'googlestream',\n EPIC = 'epic',\n LUNA = 'luna'\n}\n\nexport const PLATFORMS_TO_UBISOFT_PROFILE_PLATFORMS = {\n [PLATFORM_TYPES.PC]: UBISOFT_CONNECT_PLATFORM_TYPES.UPLAY,\n [PLATFORM_TYPES.XONE]: UBISOFT_CONNECT_PLATFORM_TYPES.XBL,\n [PLATFORM_TYPES.PS4]: UBISOFT_CONNECT_PLATFORM_TYPES.PSN,\n [PLATFORM_TYPES.SWITCH]: UBISOFT_CONNECT_PLATFORM_TYPES.SWITCH,\n [PLATFORM_TYPES.STADIA]: UBISOFT_CONNECT_PLATFORM_TYPES.STADIA,\n [PLATFORM_TYPES.XSX]: UBISOFT_CONNECT_PLATFORM_TYPES.XBL,\n [PLATFORM_TYPES.PS5]: UBISOFT_CONNECT_PLATFORM_TYPES.PSN,\n [PLATFORM_TYPES.LUNA]: UBISOFT_CONNECT_PLATFORM_TYPES.LUNA\n};\n\nexport const UBISOFT_PROFILE_PLATFORMS_TO_PLATFORMS = invert(PLATFORMS_TO_UBISOFT_PROFILE_PLATFORMS);\n\nexport const PLATFORM_TO_EXTERNAL_LOGIN_OPTION = {\n [PLATFORM_TYPES.PC]: 'login',\n [PLATFORM_TYPES.XONE]: 'xbox-external',\n [PLATFORM_TYPES.XSX]: 'xbox-external',\n [PLATFORM_TYPES.PS4]: 'psn-external',\n [PLATFORM_TYPES.PS5]: 'psn-external'\n};\n\nexport type externalLoginOptionType = 'login' | 'xbox' | 'psn' | 'twitch';\n\nexport const EXTERNAL_LOGIN_OPTIONS = {\n UBISOFT: 'login',\n XBOX: 'xbox-external',\n PSN: 'psn-external',\n TWITCH: 'twitch-external'\n};\n\nexport const APPLICATION_ID_PARAM_NAME = 'applicationId';\nexport const GENOME_ID_PARAM_NAME = 'genomeId';\nexport const UBICONNECT_LOGGED_IN = 'UBICONNECT_LOGGED_IN';\n\nexport const CONNECT_LOGIN_LOCATION = {\n [ENV.DEV]: 'https://uat-connect.ubisoft.com',\n [ENV.PROD]: 'https://connect.ubisoft.com'\n};\n\nexport const CONNECT_SDK_LOCATION = {\n [ENV.DEV]: 'https://ubistatic2-a.akamaihd.net/uplay-connect/v3/uat/default/sdk/connectSdkPublic.js',\n [ENV.PROD]: 'https://ubistatic2-a.akamaihd.net/uplay-connect/v3/prod/default/sdk/connectSdkPublic.js'\n};\n\nexport const AUTH_URL_POPUP = 'logged-in.html';\nexport const AUTH_URL = 'auth-url.html';\n","import { Subject } from 'rxjs';\nimport URI from 'urijs';\n\n// types\nimport {\n IUbiConnectConfig,\n IUbisoftConnectService\n} from './types';\n\n// constants\nimport { externalLoginOptionType, AUTH_URL_POPUP } from './constants';\n\n// utils\nimport {\n calculatePopupSize,\n getConnectEndpoint,\n} from './utils';\n\n// service\nimport ubisoftOverlayService from 'modules/ubisoft-overlay-service';\n\n\nexport class UbisoftConnectService implements IUbisoftConnectService {\n private static websiteAbsolutePath: string;\n public sizeSubject: Subject = new Subject();\n private config: IUbiConnectConfig;\n private loginCallback: () => void;\n\n public static configure = ({ websiteAbsolutePath }: {\n websiteAbsolutePath: string\n }): void => {\n UbisoftConnectService.websiteAbsolutePath = websiteAbsolutePath;\n };\n\n public init(config: IUbiConnectConfig) {\n this.config = this.prepareConfig(config);\n\n window.addEventListener('message', this.receiveUbisoftConnectIframeMessage, false);\n }\n\n private isLoginMessage(event: MessageEvent): boolean {\n const isCorrectGenomeId = event.data.genomeId === this.config.genomeId;\n const isCorrectTopic = event.data.topic === this.config.topicOfPostMessage;\n const isCorrectApplicationId = event.data.applicationId === this.config.applicationId;\n\n return isCorrectGenomeId && isCorrectTopic && isCorrectApplicationId;\n }\n\n private isSizeChangedMessage(event: MessageEvent): number | false {\n let data: { connectRoute: string, windowHeight: number };\n\n try {\n data = JSON.parse(event.data);\n } catch (error) {\n return false;\n }\n\n return (data.connectRoute && data.windowHeight) ? data.windowHeight : false;\n }\n\n private receiveUbisoftConnectIframeMessage = (event: MessageEvent) => {\n const isLoginMessage = this.isLoginMessage(event);\n const isSizeChangedMessage = this.isSizeChangedMessage(event);\n\n if (isLoginMessage) {\n ubisoftOverlayService.reInit();\n return this.loginCallback();\n }\n\n if (isSizeChangedMessage) {\n return this.sizeSubject.next(isSizeChangedMessage);\n }\n };\n\n private prepareConfig = (config: IUbiConnectConfig): IUbiConnectConfig => {\n return {\n ...config,\n nextUrl: decodeURIComponent(this.createNextURL(config.nextUrl))\n };\n };\n\n private createNextURL = (nextUrl: string) => {\n return new URI(UbisoftConnectService.websiteAbsolutePath).filename(nextUrl).href();\n };\n\n private generateConnectNextUrl = (hasTPCEnabled: boolean) => {\n return hasTPCEnabled\n ? this.config.nextUrl\n : `${getConnectEndpoint(this.config.envName)}/${AUTH_URL_POPUP}?appId=${\n this.config.applicationId\n }&genomeId=${this.config.genomeId}&lang=en-GB`;\n };\n\n public registerLoginCallback(loginCallback: () => void) {\n this.loginCallback = loginCallback;\n }\n\n public getLoginPopIn = (externalLogin: string, languageCode?: string, size?: { width?: string, height?: string }) => {\n const iframe: HTMLIFrameElement = document.createElement('iframe');\n\n iframe.sandbox.add(\n 'allow-same-origin',\n 'allow-forms',\n 'allow-popups-to-escape-sandbox',\n 'allow-popups',\n 'allow-scripts');\n\n const url = new URI(getConnectEndpoint(this.config.envName))\n .segment([\n externalLogin\n ])\n .query({\n appId: this.config.applicationId,\n genomeId: this.config.genomeId,\n lang: languageCode || this.config.lang,\n nextUrl: decodeURIComponent(this.config.nextUrl)\n })\n .href();\n\n iframe.setAttribute('src', url);\n\n iframe.classList.add('iFrame');\n iframe.setAttribute('width', size && size.width ? size.width : '480');\n iframe.setAttribute('height', size && size.height ? size.height : '720');\n return iframe;\n };\n\n public openLoginPopUp(\n languageCode: string,\n externalLogin: externalLoginOptionType,\n align?: string,\n hasTPCEnabled: boolean = true\n ) {\n const connectNextUrl: string = this.generateConnectNextUrl(hasTPCEnabled);\n\n const url = new URL(`${getConnectEndpoint(this.config.envName)}/${externalLogin}`);\n url.searchParams.set('appId', this.config.applicationId);\n url.searchParams.set('genomeId', this.config.genomeId);\n url.searchParams.set('lang', languageCode || this.config.lang);\n url.searchParams.set('nextUrl', connectNextUrl);\n\n const target = 'Ubisoft Connect';\n const popupSize = calculatePopupSize(align);\n const features = `width=${popupSize.width},height=${popupSize.height},left=${popupSize.left},top=${\n popupSize.top\n },toolbar=no,status=no`;\n\n return window.open(url.toString(), target, features);\n }\n}\n\nconst ubisoftConnectService = new UbisoftConnectService();\n\nexport default ubisoftConnectService;\n","import URI from 'urijs';\nimport {\n APPLICATION_ID_PARAM_NAME,\n CONNECT_LOGIN_LOCATION,\n CONNECT_SDK_LOCATION,\n GENOME_ID_PARAM_NAME,\n AUTH_URL,\n} from './constants';\nimport { getEnvDependentEndpoint } from '@sitegen/common/utils/ubi-services';\nimport { delay } from '@sitegen/common/utils/timer';\nimport { IWindowWithConnect } from './types';\n\nexport function transitionNextUrl(applicationId: string, genomeId: string, topicOfPostMessage: string) {\n if (window.opener) {\n window.opener.postMessage(\n {\n topic: topicOfPostMessage,\n applicationId: applicationId,\n genomeId: genomeId,\n payload: ''\n },\n '*'\n );\n }\n if (window.parent.parent) {\n window.parent.parent.postMessage(\n {\n topic: topicOfPostMessage,\n applicationId: applicationId,\n genomeId: genomeId,\n payload: ''\n },\n '*'\n );\n }\n if (window.parent) {\n window.parent.postMessage(\n {\n topic: topicOfPostMessage,\n applicationId: applicationId,\n genomeId: genomeId,\n payload: ''\n },\n '*'\n );\n }\n}\n\n// SUCCESS_NEXT_URL: should be the function,\n// because window location href can be changed by router (which invoke re-render), so we need to recalculate this value\nexport const SUCCESS_NEXT_URL = (applicationId: string, genomeId: string) => {\n return new URI('')\n .segment([AUTH_URL])\n .search({\n [APPLICATION_ID_PARAM_NAME]: applicationId,\n [GENOME_ID_PARAM_NAME]: genomeId,\n })\n .href();\n};\n\nexport const calculatePopupSize = (align?: string) => {\n const defaultPopupWidth = 400;\n const defaultPopupHeight = 600;\n\n if (align === 'center') {\n // handle case when several monitors\n const dualScreenLeft = typeof window.screenLeft !== 'undefined' ? window.screenLeft : window.screenX;\n const dualScreenTop = typeof window.screenTop !== 'undefined' ? window.screenTop : window.screenY;\n const width = window.innerWidth\n ? window.innerWidth\n : document.documentElement!.clientWidth\n ? document.documentElement!.clientWidth\n : screen.width;\n const height = window.innerHeight\n ? window.innerHeight\n : document.documentElement!.clientHeight\n ? document.documentElement!.clientHeight\n : screen.height;\n const top = height / 2 - defaultPopupHeight / 2 + dualScreenTop;\n const left = width / 2 - defaultPopupWidth / 2 + dualScreenLeft;\n\n return {\n top,\n left,\n width: defaultPopupWidth,\n height: defaultPopupHeight\n };\n } else {\n return {\n top: 0,\n left: 0,\n width: defaultPopupWidth,\n height: defaultPopupHeight\n };\n }\n};\n\nexport const getConnectEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: CONNECT_LOGIN_LOCATION });\n};\n\nexport const getSDKEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: CONNECT_SDK_LOCATION });\n};\n\nexport const isSafari = typeof navigator !== 'undefined' && /.*Version.*Safari.*/.test(navigator.userAgent);\n\nexport const fallbackConnectInit = (subscriber: Function, maxAttempts: number = 10) => {\n async function reserve(value: number = 0) {\n const overlayConnectSDK = (window as IWindowWithConnect).overlayConnectSDK;\n\n if (value === maxAttempts) {\n return Promise.reject('Connect couldn\\'t be initialized!');\n }\n\n if (overlayConnectSDK) {\n return subscriber(overlayConnectSDK);\n }\n\n await delay(1000);\n\n reserve(++value);\n };\n\n return reserve();\n};\n","import { ENV } from '@sitegen/common/constants/environments';\n\nexport const OVERLAY_SDK_LOCATION = {\n [ENV.DEV]: 'https://uat-overlay.ubisoft.com/overlay-connect-integration/widget.js',\n [ENV.PROD]: 'https://overlay.ubisoft.com/overlay-connect-integration/widget.js'\n};\n\nexport const HEADER_HEIGHT = 51.7;\n\nexport const INTEGRATOR_TRIGGER_LOGOUT = 'INTEGRATOR_TRIGGER_LOGOUT';\nexport const INTEGRATOR_TRIGGER_USER_DATA = 'INTEGRATOR_TRIGGER_USER_DATA';\n\nexport const OVERLAY_INIT_ERROR_MESSAGE = '[UbisoftOverlayService] [ERR] Couldn\\'t found Overlay!';\n","import * as Service from './service';\nimport * as Constants from './constants';\n\nexport { Service, Constants };\n\nexport default Service.default;\n","import { getEnvDependentEndpoint } from '@sitegen/common/utils/ubi-services';\nimport { delay } from '@sitegen/common/utils/timer';\nimport { OVERLAY_SDK_LOCATION, OVERLAY_INIT_ERROR_MESSAGE } from './constants';\nimport { IWindowWithOverlay } from './types';\n\nexport const getOverlaySDKEndpoint = (envName: string) => {\n return getEnvDependentEndpoint({ envName, source: OVERLAY_SDK_LOCATION });\n};\n\nexport const getEmbeddedOverlay = (\n onError: Function,\n onSuccess: Function,\n // for Safari case the overlay initializing can be more than 10 seconds\n maxAttempts: number = 20\n) => {\n async function reserve(value: number = 0) {\n const overlayWidget = (window as IWindowWithOverlay).overlayWidget || {};\n const overlayConnectSDK = (window as IWindowWithOverlay).overlayConnectSDK;\n\n if (value === maxAttempts) {\n // eslint-disable-next-line no-console\n console.error(OVERLAY_INIT_ERROR_MESSAGE);\n return onError();\n }\n\n if (overlayWidget.hasInitialized && overlayConnectSDK) {\n return onSuccess();\n }\n\n await delay(1000);\n\n reserve(++value);\n };\n\n return reserve();\n};","import { cloneDeep } from 'lodash';\nimport { loginSessionMock } from 'modules/__mocks__/login-session.mock';\n\nimport {\n IGeneralUserData,\n IGetProfilesResponse,\n} from 'modules/ubisoft-connect-service/types';\n\nexport class OverlayServiceMock {\n public static hasInitialized = true;\n\n public static init() {}\n public static reInit() {}\n public static openLoginPopup() {}\n public static changeLocale(locale: string) {\n return locale;\n }\n \n public static async triggerEmailActivation(callback: Function) {\n return callback && callback();\n }\n\n public static async getUserStatus(_userData: IGeneralUserData, callback: Function) {\n return callback && callback();\n }\n\n public static async getThirdPartyStatus() {\n return true;\n }\n\n public static async getTicket() {\n return {\n sessionId: '87942374-****-418c-****-edf0ecb3556e',\n ticket: '****.LONP2H-ESqR-A6meV1s_Ud9RIjYen3Ewa-_L_fWjRNA.****',\n userId: '****b2b9-0ba7-41f2-adca-e62d136e****',\n };\n }\n\n public static async getProfiles() {\n return {\n payload: {\n profiles: cloneDeep(loginSessionMock.UbisoftConnectProfiles)\n }\n } as IGetProfilesResponse;\n } \n}\n\n","import $script from 'loadjs';\nimport { Subject } from 'rxjs';\nimport { get } from 'lodash';\n\n// services\nimport { Service as AnalyticsService } from 'modules/analytics-provider';\n\n// constants\nimport {\n HEADER_HEIGHT,\n INTEGRATOR_TRIGGER_USER_DATA,\n INTEGRATOR_TRIGGER_LOGOUT\n} from './constants';\n\n// utils\nimport { getEmbeddedOverlay, getOverlaySDKEndpoint } from './utils';\nimport { isEmbedded } from 'utils/css';\nimport { OverlayServiceMock } from './service.mock';\n\n// types\nimport {\n IConnectSDK,\n IGetProfilesResponse,\n IGetTicketResponse,\n IGetThirdPartyStatusResponse,\n IGetUserStatusResponse,\n IGeneralUserData\n} from 'modules/ubisoft-connect-service/types';\nimport {\n IUbiOverlayServiceConfig,\n IUbiOverlayWidget,\n IUbiOverlayWidgetConfig,\n IWindowWithOverlay\n} from 'modules/ubisoft-overlay-service/types';\nimport { WEBSITE_MODE } from '@sitegen/common/constants/config';\n\nexport class UbisoftOverlayService {\n public overlaySDK: IUbiOverlayWidget;\n private overlayConnectSDK: IConnectSDK;\n private config: IUbiOverlayWidgetConfig;\n private onInitCallback: Function;\n\n public overlayLoginTriggerSubject: Subject = new Subject();\n public overlayLogoutTriggerSubject: Subject = new Subject();\n\n public install = async ({ mode, envName }: {\n mode: WEBSITE_MODE,\n envName: string\n },\n onSuccess: Function,\n onInitDone: Function,\n ) => {\n window.addEventListener('message', this.receiveUbisoftOverlayMessage, false);\n this.onInitCallback = onInitDone;\n\n return isEmbedded(mode)\n ? await this.initEmbeddedFlow(onSuccess, onInitDone)\n : await UbisoftOverlayService.loadSDKScript(envName, onSuccess);\n };\n\n public init(containerSelector: string) {\n if (!containerSelector) {\n return;\n }\n\n const { overlayWidget } = window as IWindowWithOverlay;\n this.overlaySDK = overlayWidget;\n\n const options = {\n ...this.config,\n container: `#${containerSelector}`,\n };\n\n return this.overlaySDK.init(options);\n }\n\n public initEmbeddedFlow(onInstallDone: Function, onInitDone: Function): Promise {\n return new Promise((resolve, onError) => {\n const onSuccess = () => {\n const { overlayWidget, overlayConnectSDK } = window as IWindowWithOverlay;\n this.overlaySDK = overlayWidget;\n this.overlayConnectSDK = overlayConnectSDK;\n onInstallDone();\n onInitDone();\n return resolve();\n };\n\n return getEmbeddedOverlay(onError, onSuccess);\n });\n }\n\n public configure(config: IUbiOverlayServiceConfig) {\n this.config = {\n appId: config.appId,\n genomeId: config.genomeId,\n locale: config.locale,\n loginType: 'modal',\n height: HEADER_HEIGHT,\n showSignInText: 'DEFAULT',\n onConnect: (action: string, response: IGetProfilesResponse) => {\n if (action === 'init') {\n const userId = get(response, 'payload.userId') as unknown as string;\n const hasLoginSession = Boolean(response.status === 'ok' && userId);\n\n AnalyticsService.triggerInitialPageEvents({ userId, hasLoginSession });\n\n this.overlayConnectSDK = (window as IWindowWithOverlay).overlayConnectSDK;\n this.onInitCallback();\n\n if (hasLoginSession) {\n return this.overlayLoginTriggerSubject.next();\n }\n }\n }\n };\n }\n\n public getConfig() {\n return this.config;\n }\n\n public reInit() {\n if (this.overlaySDK) {\n this.overlaySDK.reInit();\n }\n }\n\n public static changeLocale(locale: string) {\n const { overlayWidget } = window as IWindowWithOverlay;\n if (!get(overlayWidget, 'hasInitialized', false)) {\n return;\n }\n\n return overlayWidget.changeLocale(locale);\n }\n\n public static loadSDKScript(envName: string, callback: Function): Promise {\n return new Promise(resolve => {\n if ((window as IWindowWithOverlay).overlayWidget) {\n return resolve(callback());\n }\n\n const scriptId = 'overlaySDK';\n const scriptUrl = getOverlaySDKEndpoint(envName);\n\n $script(scriptUrl, scriptId);\n $script.ready(scriptId, function () {\n return resolve(callback());\n });\n });\n }\n\n public receiveUbisoftOverlayMessage = (event: MessageEvent) => {\n if (!this.overlaySDK) {\n return;\n }\n\n if (this.isLoginEvent(event)) {\n return this.overlayLoginTriggerSubject.next();\n }\n\n if (this.isLogoutEvent(event)) {\n return this.overlayLogoutTriggerSubject.next();\n }\n };\n\n public isLoginEvent(event: MessageEvent) {\n return event.data.topic === INTEGRATOR_TRIGGER_USER_DATA;\n }\n\n public isLogoutEvent(event: MessageEvent) {\n return event.data.topic === INTEGRATOR_TRIGGER_LOGOUT;\n }\n\n public openLoginPopup() {\n return this.overlaySDK.login();\n }\n\n public getTicket() {\n return new Promise<{\n ticket: string,\n sessionId: string,\n userId: string\n }>((resolve, reject) => {\n if (!this.overlaySDK.hasInitialized) {\n return reject();\n }\n\n return this.overlaySDK.getTicket((getTicketResponse: IGetTicketResponse) => {\n if (getTicketResponse.status !== 'ok') {\n return reject();\n }\n\n const { payload: { ticket, userId, sessionId } } = getTicketResponse;\n return resolve({ ticket, userId, sessionId });\n });\n });\n }\n\n public getProfiles() {\n return new Promise((resolve, reject) => {\n return this.overlaySDK.getProfiles((getProfilesResponse: IGetProfilesResponse) => {\n if (getProfilesResponse.status !== 'ok') {\n return this.overlayConnectSDK\n ? this.getProfilesFallback(resolve, reject)\n : reject();\n }\n\n return resolve(getProfilesResponse);\n });\n });\n }\n\n public getProfilesFallback = async (resolve: Function, reject: Function) => {\n let gotProfiles = false;\n const timeoutId = setTimeout(function() {\n if (!gotProfiles) {\n console.warn('[Ubisoft Overlay] Get profiles timeout.');\n return reject();\n }\n }, 10 * 1000);\n\n try {\n const { ticket, userId, sessionId } = await this.getTicket();\n\n return this.overlayConnectSDK\n .getProfiles(ticket, sessionId, userId)\n .subscribe((getProfilesResponse: IGetProfilesResponse) => {\n gotProfiles = true;\n clearTimeout(timeoutId);\n return resolve(getProfilesResponse);\n });\n } catch {\n return reject();\n }\n };\n\n public triggerEmailActivation(callback: Function) {\n return this.overlaySDK.triggerEmailActivation(callback);\n }\n\n public getUserStatus(userData: IGeneralUserData, callback: Function) {\n return this.overlaySDK.getUserStatus((response: IGetUserStatusResponse) => response.status === 'ok'\n ? callback(response)\n : this.overlayConnectSDK.getUserStatus(userData.ticket, userData.sessionId, userData.userId).subscribe(callback));\n }\n\n public getThirdPartyStatus() {\n return new Promise((resolve, reject) => {\n let gotTPS = false;\n const timeoutId = setTimeout(function() {\n if (!gotTPS) {\n console.warn('[Ubisoft Overlay] getthirdPartyStatus timeout.');\n return reject();\n }\n }, 10 * 1000);\n\n return this.overlayConnectSDK.getThirdPartyStatus()\n .subscribe((getThirdPartyStatusResponse: IGetThirdPartyStatusResponse) => {\n gotTPS = true;\n clearTimeout(timeoutId);\n\n return resolve(getThirdPartyStatusResponse.status === 'ok');\n });\n });\n }\n\n public logout(ticket: string, sessionId: string) {\n return new Promise((resolve, _reject) => {\n this.overlayConnectSDK.logout(ticket, sessionId);\n return resolve();\n });\n }\n\n public configureFakeAPI = () => {\n UbisoftOverlayService.changeLocale = OverlayServiceMock.changeLocale;\n\n this.init = OverlayServiceMock.init;\n this.reInit = OverlayServiceMock.reInit;\n this.getTicket = OverlayServiceMock.getTicket;\n this.getProfiles = OverlayServiceMock.getProfiles;\n this.getUserStatus = OverlayServiceMock.getUserStatus;\n this.openLoginPopup = OverlayServiceMock.openLoginPopup;\n this.getThirdPartyStatus = OverlayServiceMock.getThirdPartyStatus;\n this.triggerEmailActivation = OverlayServiceMock.triggerEmailActivation;\n };\n}\n\nconst ubisoftOverlayService = new UbisoftOverlayService();\n\nexport default ubisoftOverlayService;\n","import { WEBSITE_MODE } from '@sitegen/common/constants';\n\nexport const isCSSVariableSet = (variable: string): boolean => {\n const value: string = getComputedStyle(document.body).getPropertyValue(variable);\n /* There can be extra spaces in variable value */\n return !!value && !value.includes('none');\n};\n\nexport const getModeClass = (className: string, shouldInheritStyles?: boolean) =>\n `${className}${shouldInheritStyles ? '-embedded' : ''}`;\n\nexport const isEmbedded = (mode: WEBSITE_MODE = WEBSITE_MODE.STANDALONE) => (mode === WEBSITE_MODE.EMBEDDED);\n","import * as moment from 'moment';\n\nimport { LANGUAGE_FORMAT_MAP } from '@sitegen/common/localization';\n\nexport const formatHours = (timeMoment: moment.Moment): string => {\n const locale = standardizeLocale(timeMoment.locale());\n const timeFormat = LANGUAGE_FORMAT_MAP[locale].time;\n\n return timeMoment.format(timeFormat);\n};\n\nexport const localizeDate = (timeMoment: moment.Moment): string => {\n const locale = standardizeLocale(timeMoment.locale());\n const dateFormat = LANGUAGE_FORMAT_MAP[locale].date;\n\n return timeMoment.format(dateFormat);\n};\n\n/**\n * The function formats a month depending on the format settings specified for a locale. For example, given the date\n * '01/01/2019' and 'ru-RU' locale and 'MMMM' format, the return value is either 'январь' (the base form of the word)\n * or 'января' (the declined form of the word) depending on the declension flag in the settings.\n * @param timeMoment - a moment.js object\n */\nexport const localizeMonth = (timeMoment: moment.Moment): string => {\n const locale = standardizeLocale(timeMoment.locale());\n const { isMonthDeclensionNeeded, month } = LANGUAGE_FORMAT_MAP[locale];\n\n if (isMonthDeclensionNeeded) {\n return timeMoment.format(`D ${month}`).split(' ')[1];\n }\n\n return timeMoment.format(month);\n};\n\nexport function standardizeLocale(locale: string): string {\n let [prefix, suffix = ''] = locale.split('-');\n suffix = suffix ? `-${suffix.toUpperCase()}` : '';\n\n return `${prefix}${suffix}`;\n}\n\nexport function isLocaleValid(locale: string) {\n return RegExp(/[a-z]{2}[-]{1}([a-z]{2}|[A-Z]{2})$/g).test(locale);\n}\n","export default (): URLSearchParams => new URLSearchParams(window.location.search);\n","import URI from 'urijs';\nimport { WEBSITE_MODE } from '@sitegen/common/constants';\nimport { isEmbedded } from './css';\n\n/** Window history should behave differently in certain application modes, like \"Preview\" */\nexport class WindowHistoryService {\n private static updateHistory: boolean = true;\n\n public static configure(options: { preview?: boolean, mode?: WEBSITE_MODE }): void {\n const disableHistoryUpdates: boolean = options.preview || isEmbedded(options.mode);\n WindowHistoryService.updateHistory = !disableHistoryUpdates;\n }\n\n public static pushState(basePath: string, path: string): void {\n if (!WindowHistoryService.updateHistory) {\n return; \n }\n\n const url: string = new URI(window.location.origin)\n .segment([basePath, path])\n .search(window.location.search)\n .href();\n window.history.pushState({}, '', url);\n }\n}\n","import * as lodash from 'lodash';\nimport { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nexport const SITEGEN_CTA_DEFAULT_VALUE = 'sitegen';\nexport const SITEGEN_CTA_URL_PARAMETER = 'source';\n\nexport const PLAYER_PROFILE_URL: string = '/api/v1/{code}/phases/{phaseId}/players/{userId}';\nexport const PLAYER_BETA_GROUP_URL: string = '/api/v1/{code}/phases/{phaseId}/players/{userId}/playerGroups/{playerGroupId}';\nexport const PLATFORM_PLAYER_GROUPS_URL: string = '/api/v1/{code}/phases/{phaseId}/playergroups';\nexport const PLAYER_INVITE_FRIEND_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/friends';\nexport const PLAYER_FRIENDS_STATUS_URL: string = 'api/v1/{code}/phases/{phaseId}/friends';\nexport const PLAYER_BETA_KEYS_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/keys';\nexport const CUSTOM_FIELDS_URL: string = 'api/v1/{code}/phases/{phaseId}';\nexport const INVITATION_INFO_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/invite_info';\nexport const ACCEPT_INVITATION_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/accept_invite';\n\nexport const IN_BETA_FRIENDS_REQUEST_LIMIT: number = 50;\nexport const IN_BETA_FRIENDS_REQUESTS_API_LIMIT: number = 9;\nexport const IN_BETA_FRIENDS_REQUESTS_TIMEOUT: number = 1000;\n\nexport enum BETA_API_ERROR {\n INVALID_REQUEST = 'INVALID_REQUEST',\n INVALID_INTEGRATION_TYPE = 'INVALID_INTEGRATION_TYPE',\n INVALID_AUTH_INFO = 'INVALID_AUTH_INFO',\n INVALID_CREDENTIALS = 'INVALID_CREDENTIALS',\n INVALID_PLAYER_GROUP_PLAYER = 'INVALID_PLAYER_GROUP_PLAYER',\n UNEXPECTED_ERROR = 'UNEXPECTED_ERROR'\n}\n\nexport enum NDA_STATUS {\n SIGNED = 'SIGNED',\n NOT_SIGNED = 'NOT_SIGNED',\n NOT_SPECIFIED = 'NOT_SPECIFIED'\n}\n\nexport const PLATFORM_TO_BETA_PLATFORM_ID: { readonly [key: string]: number } = {\n [PLATFORM_TYPES.PC]: 1,\n [PLATFORM_TYPES.PS3]: 2,\n [PLATFORM_TYPES.PS4]: 3,\n [PLATFORM_TYPES.XONE]: 4,\n [PLATFORM_TYPES.X360]: 5,\n [PLATFORM_TYPES.WIIU]: 6,\n [PLATFORM_TYPES.WEB]: 7,\n [PLATFORM_TYPES.MOBILE]: 8,\n [PLATFORM_TYPES.IOS]: 9,\n [PLATFORM_TYPES.ANDROID]: 10,\n [PLATFORM_TYPES.OCULUSVR]: 11,\n [PLATFORM_TYPES.STEAMVR]: 12,\n [PLATFORM_TYPES.SWITCH]: 13,\n [PLATFORM_TYPES.STADIA]: 15,\n [PLATFORM_TYPES.EPIC]: 16,\n [PLATFORM_TYPES.PS5]: 17,\n [PLATFORM_TYPES.XSX]: 18,\n [PLATFORM_TYPES.LUNA]: 19,\n [PLATFORM_TYPES.AMAZON]: 20\n};\n\nexport const BETA_PLATFORM_ID_TO_PLATFORM: { readonly [key: string]: PLATFORM_TYPES }\n = lodash.invert(PLATFORM_TO_BETA_PLATFORM_ID) as { readonly [key: string]: PLATFORM_TYPES };\n\nexport const REGION_MATCH_ONLY_PLATFORMS = [\n PLATFORM_TYPES.PS4,\n PLATFORM_TYPES.PS5,\n PLATFORM_TYPES.XONE,\n PLATFORM_TYPES.XSX\n];\n","import { IBetaPhaseSystemField } from './beta-manager-api.types';\nimport { IFieldRenderParams } from 'modules/additional-info-common/fields/fields.types';\nimport { FIELD_VIEW_TYPES } from 'modules/additional-info-common/additional-info.constants';\n\nconst getFieldValue = (fieldDefinition: IBetaPhaseSystemField): string | string[] | null => {\n if (fieldDefinition.Value) {\n if (Array.isArray(fieldDefinition.Value.split(','))) {\n return fieldDefinition.Value.split(',');\n } else {\n return fieldDefinition.Value;\n }\n }\n return null;\n};\n\nconst getFieldType = (fieldDefinition: IBetaPhaseSystemField): FIELD_VIEW_TYPES => {\n if (fieldDefinition.Value && Array.isArray(fieldDefinition.Value.split(','))) {\n return FIELD_VIEW_TYPES.DROPDOWN;\n }\n\n return FIELD_VIEW_TYPES.STRING;\n};\n\nexport const betaCustomFieldsAdapter = (customFields: IBetaPhaseSystemField[]): IFieldRenderParams[] => {\n return customFields\n .filter(field => field.UsedForPlayerRegistration)\n .sort((a, b) => a.OrderNumber - b.OrderNumber)\n .map(field => {\n const fieldValue = getFieldValue(field);\n const fieldType = getFieldType(field);\n return {\n name: field.Name,\n value: fieldValue,\n defaultValue: field.DefaultValue,\n isRequired: field.IsMandatory,\n type: fieldType,\n };\n });\n};\n","import { isEmpty, groupBy, flatten, chunk } from 'lodash';\nimport URI from 'urijs';\nimport { QueryDataMap } from 'urijs';\nimport 'urijs/src/URITemplate';\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\n\nimport { getUbiEventsEndpoint } from '@sitegen/common/utils/ubi-services';\nimport { delay } from '@sitegen/common/utils/timer';\nimport URLParams from 'utils/url-params';\n\nimport {\n IBetaAPIError,\n IBetaCustomFieldsResponse,\n IBetaError,\n IBetaFriend,\n IBetaFriendsResponse,\n IBetaKey,\n IConfigureBetaManagerServiceOptions,\n IGetBetaCustomFieldsOptions,\n IGetFriendListForBetaOptions,\n IGetPlatformPlayerGroupsOptions,\n IGetPlayerBetaKeysResponse,\n IGetPlayerProfileOptions,\n IGetPlayerProfileResponse,\n IInviteFriendToBetaOptions,\n IPlatformPlayerGroupResponse,\n IPlatformPlayerGroups,\n IPlatformPlayerGroupsResponse,\n IPlayerBetaFriendsOptions,\n IPlayerGroupResponse,\n IPlayerProfile,\n IRegisterForBetaRequest,\n IRegisterPlayerForBetaOptions,\n IRegisterPlayerInBetaGroupOptions,\n IGetPlatformPlayerGroupsFromResponse,\n IPlayerGroup,\n IPlayerInvitationInfoOptions,\n IInvitationInfo,\n IAcceptInvitationResponse\n} from './beta-manager-api.types';\nimport {\n BETA_PLATFORM_ID_TO_PLATFORM,\n CUSTOM_FIELDS_URL,\n NDA_STATUS,\n PLATFORM_PLAYER_GROUPS_URL,\n PLATFORM_TO_BETA_PLATFORM_ID,\n PLAYER_BETA_GROUP_URL,\n PLAYER_BETA_KEYS_URL,\n PLAYER_FRIENDS_STATUS_URL,\n PLAYER_INVITE_FRIEND_URL,\n PLAYER_PROFILE_URL,\n SITEGEN_CTA_DEFAULT_VALUE,\n SITEGEN_CTA_URL_PARAMETER,\n REGION_MATCH_ONLY_PLATFORMS,\n IN_BETA_FRIENDS_REQUEST_LIMIT,\n IN_BETA_FRIENDS_REQUESTS_API_LIMIT,\n IN_BETA_FRIENDS_REQUESTS_TIMEOUT,\n INVITATION_INFO_URL,\n ACCEPT_INVITATION_URL,\n} from './beta-manager-api.constants';\nimport { IBetaPhaseSystemFieldValue } from '../beta-manager-store';\nimport { IFieldRenderParams } from 'modules/additional-info-common/fields/fields.types';\nimport { betaCustomFieldsAdapter } from './beta-custom-fields.adapter';\nimport { WIDGET_NAME } from '@sitegen/common/constants';\n/**\n * Collection of requests to \"beta.ubi.com\"\n */\nexport class BetaManagerAPIService {\n private static AXIOS_INSTANCE: AxiosInstance;\n\n /** Provide headers and other options to each request */\n public static configure(options: IConfigureBetaManagerServiceOptions): void {\n const headers: object = {\n 'Ubi-AppId': options.appId,\n 'Ubi-GenomeId': options.genomeId,\n 'Ubi-Ticket': options.ticket,\n 'Ubi-SessionId': options.sessionId\n };\n\n this.AXIOS_INSTANCE = axios.create({ headers });\n }\n\n public static configureFakeAPI(): Promise {\n /* eslint-disable-next-line*/\n return import('./__mocks__/beta-manager-api.service.mocks').then((module: any): void => {\n this.getFriendListForBeta = module.getFriendListForBeta;\n this.getPlayerBetaKeys = module.getPlayerBetaKeys;\n this.inviteFriendToBeta = module.inviteFriendToBeta;\n this.getInvitedFriends = module.getInvitedFriends;\n });\n }\n\n /** Get information about player registration in given beta phase */\n public static async getPlayerProfile(options: IGetPlayerProfileOptions): Promise {\n const url: string = this.getPlayerProfileURL(options).href();\n const response: IGetPlayerProfileResponse = await this.request({ url, method: 'GET' });\n\n return this.getPlayerProfileFromResponse(response);\n }\n\n public static async getCustomFields(options: IGetBetaCustomFieldsOptions): Promise {\n const url: string = this.getCustomFieldsURL(options).href();\n const response: IBetaCustomFieldsResponse = await this.request({ url, method: 'GET' });\n return this.getCustomFieldsFromResponse(response);\n }\n\n public static async getPlatformPlayerGroups(options: IGetPlatformPlayerGroupsOptions): Promise {\n const url: URI = this.getPlatformPlayerGroupsURL(options);\n const response: IPlatformPlayerGroupsResponse = await this.request({ url: url.href(), method: 'GET' });\n\n return this.getPlatformPlayerGroupsFromResponse({\n groups: response.PlayerGroups,\n tag: options.tag,\n widgetName: options.widgetName\n });\n }\n\n /** Try to sign up player for beta on given platform. Response should contain new information about player groups */\n public static async setPlayerBetaProfile(options: IRegisterPlayerForBetaOptions): Promise {\n const url: URI = this.getPlayerProfileURL(options)\n .query({ platformId: PLATFORM_TO_BETA_PLATFORM_ID[options.platform].toString() });\n\n if (options.newPlatform && options.alreadyRegisteredForBeta && options.platform !== options.newPlatform) {\n url.addQuery({ newPlatformId: PLATFORM_TO_BETA_PLATFORM_ID[options.newPlatform] });\n }\n\n /* Send PUT request with updated NDA value or new platform if user is already registered */\n const method: string = options.alreadyRegisteredForBeta ? 'PUT' : 'POST';\n const data: object = this.getRegisterForBetaInfo(options);\n\n const response: IGetPlayerProfileResponse = await this.request({ url: url.href(), method, data });\n return this.getPlayerProfileFromResponse(response);\n }\n\n /** Register a new player for a given beta/player group or update it if user is already registered */\n public static async setPlayerActiveBetaGroup(options: IRegisterPlayerInBetaGroupOptions): Promise {\n const url: URI = this.setPlayerBetaGroupURL(options);\n\n const method: string = options.alreadyRegisteredForBeta ? 'PUT' : 'POST';\n const data: object = this.getRegisterForBetaInfo(options);\n\n const response: IGetPlayerProfileResponse = await this.request({ url: url.href(), method, data });\n return this.getPlayerProfileFromResponse(response);\n }\n\n /** Invite friends to Beta for given platform (platform ID is required for this method) */\n public static async inviteFriendToBeta(options: IInviteFriendToBetaOptions): Promise {\n const url: URI = this.getFriendListForBetaURL(options);\n const data: IBetaFriendsResponse = { Friends: [] };\n for (const friend of options.friends) {\n data.Friends.push({ FriendId: friend });\n }\n\n return this.request({ url: url.href(), method: 'POST', data });\n }\n\n /** Get list of friends invited by the current player */\n public static async getInvitedFriends(options: IGetPlayerProfileOptions): Promise {\n const url: URI = this.getFriendListForBetaURL(options);\n const response: IBetaFriendsResponse = await this.request({ url: url.href(), method: 'GET' });\n return response.Friends;\n }\n\n /** Get beta keys available for player, for all platforms */\n public static async getPlayerBetaKeys(options: IGetPlayerProfileOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = {\n code: options.code,\n phaseId: options.phaseId.toString(),\n userId: options.userId\n };\n const template: string = URI.expand!(PLAYER_BETA_KEYS_URL, values).toString();\n const url: string = new URI(host).segment(template).href();\n\n const response: IGetPlayerBetaKeysResponse = await this.request({ url, method: 'GET' });\n const result: IBetaKey[] = [];\n\n for (const key of response.PlayerKeys) {\n result.push({\n key: key.PlayerKey,\n platformId: BETA_PLATFORM_ID_TO_PLATFORM[key.PlatformId],\n playerGroupId: key.PlayerGroupId\n });\n }\n\n return result;\n }\n\n /** Get list of friend objects already invited to beta */\n public static async getFriendListForBeta(options: IGetFriendListForBetaOptions): Promise {\n // We have to request beta status list in chunks due to API limitations\n return options.friendIdList.length > IN_BETA_FRIENDS_REQUEST_LIMIT\n ? this.getFriendListForBetaInChunks(options)\n : this.getFriendListForBetaRequest(options);\n }\n\n /** Gets information for a given invitation code */\n public static async getInvitationInfo(options: IPlayerInvitationInfoOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(INVITATION_INFO_URL, values).toString();\n const url: string = new URI(host).segment(template).query({ invitation: options.invitation }).href();\n\n const response: IInvitationInfo = await this.request({ url });\n return response;\n }\n\n public static async acceptInvitation(options: IPlayerInvitationInfoOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(ACCEPT_INVITATION_URL, values).toString();\n const url: string = new URI(host).segment(template).query({ invitation: options.invitation }).href();\n const response: IAcceptInvitationResponse = await this.request({ url, method: 'POST' });\n return response;\n }\n\n /** API Request to get list of friend objects already invited to beta */\n private static async getFriendListForBetaRequest(options: IGetFriendListForBetaOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString() };\n const template: string = URI.expand!(PLAYER_FRIENDS_STATUS_URL, values).toString();\n const url: string = new URI(host).segment(template).href();\n\n const response: IBetaFriendsResponse = await this.request({ url, method: 'POST', data: options.friendIdList });\n return response.Friends;\n }\n\n /** Method to split getting list of friend objects invited to beta due to API limitations */\n private static async getFriendListForBetaInChunks(options: IGetFriendListForBetaOptions): Promise {\n const requests: Promise[] = [];\n const friendIdListChunks: string[][] = chunk(options.friendIdList, IN_BETA_FRIENDS_REQUEST_LIMIT);\n\n let requestsFired = 0;\n // We send requests until we reach API limit per second.\n // Then we wait required time and continue sending requests.\n for (const friendIdList of friendIdListChunks) {\n if (requestsFired === IN_BETA_FRIENDS_REQUESTS_API_LIMIT) {\n await delay(IN_BETA_FRIENDS_REQUESTS_TIMEOUT);\n requestsFired = 0;\n }\n const request: Promise = this.getFriendListForBetaRequest({\n ...options,\n friendIdList\n });\n requestsFired += 1;\n requests.push(request);\n }\n const result: IBetaFriend[][] = await Promise.all(requests);\n return flatten(result);\n }\n\n /** Data that is send to RS API when registering user */\n private static getRegisterForBetaInfo(options: {\n isNDASignedByUser: boolean,\n ubiMail?: string,\n customFieldValues?: IBetaPhaseSystemFieldValue[],\n cta: string | null\n }): IRegisterForBetaRequest {\n const data: IRegisterForBetaRequest = {\n PlayerSystemInfo: {\n Components: {\n CTA: this.getRegisterForBetaCTA(options.cta)\n }\n }\n };\n\n if (options.isNDASignedByUser) {\n data.PlayerSystemInfo.Components.NDA = 'true';\n }\n\n if (options.ubiMail) {\n data.PlayerSystemInfo.Components.Ubimail = options.ubiMail;\n }\n\n if (options.customFieldValues && !isEmpty(options.customFieldValues)) {\n options.customFieldValues.forEach(field => {\n data.PlayerSystemInfo.Components[field.key] = field.value;\n });\n }\n\n return data;\n }\n\n public static getRegisterForBetaCTA(cta: string | null) {\n if (cta) {\n return cta;\n }\n\n const ctaFromUrl = URLParams().get(SITEGEN_CTA_URL_PARAMETER);\n\n return encodeURIComponent(\n `${SITEGEN_CTA_DEFAULT_VALUE}${ctaFromUrl ? `-${ctaFromUrl}` : ''}`\n .trim()\n .toLowerCase()\n );\n }\n\n /** Get URL for retrieving player profile as well as sign player for beta */\n private static getPlayerProfileURL(options: IGetPlayerProfileOptions): URI {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(PLAYER_PROFILE_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getCustomFieldsURL(options: IGetBetaCustomFieldsOptions): URI {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString() };\n const template: string = URI.expand!(CUSTOM_FIELDS_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n /** Get URL for retrieving or updating friend invitations to beta */\n private static getFriendListForBetaURL(options: IPlayerBetaFriendsOptions): URI {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(PLAYER_INVITE_FRIEND_URL, values).toString();\n\n const query: QueryDataMap = (options.platform) ? { platformId: PLATFORM_TO_BETA_PLATFORM_ID[options.platform].toString() } : {};\n return new URI(host).segment(template).query(query);\n }\n\n private static setPlayerBetaGroupURL(options: IRegisterPlayerInBetaGroupOptions) {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = {\n code: options.code,\n phaseId: options.phaseId.toString(),\n userId: options.userId,\n playerGroupId: options.playerGroupId\n };\n const template: string = URI.expand!(PLAYER_BETA_GROUP_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getPlatformPlayerGroupsURL(options: IGetPlatformPlayerGroupsOptions) {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString() };\n const template: string = URI.expand!(PLATFORM_PLAYER_GROUPS_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getCustomFieldsFromResponse(response: IBetaCustomFieldsResponse): IFieldRenderParams[] {\n if (response.SystemFields && !isEmpty(response.SystemFields)) {\n return betaCustomFieldsAdapter(response.SystemFields);\n }\n\n return [];\n }\n\n /** Convert response to object used in application */\n private static getPlayerProfileFromResponse(response: IGetPlayerProfileResponse): IPlayerProfile {\n const groups: IPlayerGroup[] = [];\n for (const group of response.PlayerGroups) {\n groups.push({\n id: group.PlayerGroupId,\n approved: group.IsApproved,\n platform: BETA_PLATFORM_ID_TO_PLATFORM[group.PlatformId],\n sourceIdList: group.PlayerSourceIds\n });\n }\n\n return {\n userId: response.UserId,\n banned: response.BannedInBeta,\n groups,\n nda: this.getNDAStatus(response),\n cta: this.getCTA(response),\n invitation: response.Invitation\n };\n }\n\n public static getPlatformPlayerGroupsFromResponse: IGetPlatformPlayerGroupsFromResponse = ({\n groups,\n tag: tagFromConfig,\n widgetName\n }) => {\n let platforms: IPlatformPlayerGroups = {};\n /**\n * A group is eligible if, for a specific Beta:\n * - only one group exists for a given platform\n * OR\n * - only one group with a \"regionMatch\": true if multiple groups exists for a same platform.\n * The \"regionMatch\" is a exclusive for consoles (PS4, PS5, XSX, XONE), all other platforms normally return an empty value.\n *\n * If no or multiple groups exists for a given platform (without exactly one of these groups having a\n * regionMatch: true property), it is considered this Beta has no eligible group for this platform.\n *\n * If, from the admin, a tag has been configured for the auto-push feature, the group eligibility criteria changes :\n * it is no longer a unique group for a platform, but the group for a platform matching the tag.\n * If no or multiple groups (or more than one group with regionMatch: true)\n * match the tag for a same platform - it is considered this Beta has no eligible group for this platform.\n */\n // We need to define one eligible group per platform, so grouping them for further processing\n const groupsByPlatform = groupBy(groups, (group) => group.PlatformId);\n\n Object.entries(groupsByPlatform).forEach(([betaPlatformId, responsePlatformGroups]) => {\n // Transform Beta API ids into internal Sitegen platformId\n const platformId = BETA_PLATFORM_ID_TO_PLATFORM[betaPlatformId];\n let platformGroups: IPlatformPlayerGroupResponse[] = responsePlatformGroups;\n let isOnlyOneGroup = platformGroups.length === 1;\n\n if (widgetName && widgetName === WIDGET_NAME.BETA_APPROVAL && isOnlyOneGroup) {\n return platforms[platformId] = platformGroups[0].PlayerGroupId;\n }\n\n // Filter groups by tag name if provided\n if (!isEmpty(tagFromConfig)) {\n const tagMatchedGroups = responsePlatformGroups.filter((group) => {\n return group.Tags && group.Tags.split(',').includes(tagFromConfig as string);\n });\n platformGroups = tagMatchedGroups;\n isOnlyOneGroup = platformGroups.length === 1;\n }\n /**\n * For the \"non region match only\" platforms, the group is eligible if it is the only\n * available group for the platform\n */\n const isNonRegionMatchOnlyPlatform = !REGION_MATCH_ONLY_PLATFORMS.includes(platformId);\n if (isNonRegionMatchOnlyPlatform) {\n if (isOnlyOneGroup) {\n return platforms[platformId] = platformGroups[0].PlayerGroupId;\n }\n }\n /**\n * For the case when multiple groups available for the platform,\n * the only single group with regionMatch: true is considered as eligible.\n * In case if several groups has regionMatch: true, it is considered there is no eligible groups at all.\n */\n const regionMatchedGroups = platformGroups.filter((group) => group.RegionMatch);\n const isOnlyOneRegionMatchedGroup = regionMatchedGroups.length === 1;\n if (isOnlyOneRegionMatchedGroup) {\n return platforms[platformId] = regionMatchedGroups[0].PlayerGroupId;\n }\n\n return;\n });\n\n return platforms;\n };\n\n /** At the moment we consider that response can have only one group */\n private static getNDAStatus(response: IGetPlayerProfileResponse): NDA_STATUS {\n const group: IPlayerGroupResponse = response.PlayerGroups[0];\n switch (group?.PlayerSystemInfo?.Components?.NDA) {\n case 'true':\n return NDA_STATUS.SIGNED;\n case 'false':\n return NDA_STATUS.NOT_SIGNED;\n case '':\n default:\n return NDA_STATUS.NOT_SPECIFIED;\n }\n }\n\n private static getCTA(response: IGetPlayerProfileResponse): string | null {\n const group: IPlayerGroupResponse = response.PlayerGroups[0];\n return group?.PlayerSystemInfo?.Components?.CTA ?? null;\n }\n\n /** Convert Beta API error to application-specific error */\n private static getBetaErrorFromResponse(error: AxiosError): IBetaError {\n const result: IBetaAPIError = error.response!.data as IBetaAPIError;\n return {\n code: result.ErrorCode,\n description: result.ErrorDescription,\n message: result.ErrorMessage\n };\n }\n\n private static request(options: AxiosRequestConfig): Promise {\n return this.AXIOS_INSTANCE.request({ ...options, responseType: 'json' })\n .then((response: AxiosResponse): T => {\n return response.data;\n }).catch((e: AxiosError): never => {\n throw this.getBetaErrorFromResponse(e);\n });\n }\n}\n","const { IS_DEVELOPMENT_ENV } = require('./sitegen');\n\n/** @type {string} */\nconst { ENABLE_DEV_TOOLS } = process.env;\n/** @type {boolean} */\nconst ARE_DEV_TOOLS_ENABLED = !!ENABLE_DEV_TOOLS || IS_DEVELOPMENT_ENV;\n\nmodule.exports.ARE_DEV_TOOLS_ENABLED = ARE_DEV_TOOLS_ENABLED;\n\n// This object can be adjusted in the future for fine-grained control over development tools in different SiteGen environments\nmodule.exports.DEV_TOOLS_CONFIG = {\n SOURCE_MAPS: ARE_DEV_TOOLS_ENABLED,\n REDUX_EXTENTION: ARE_DEV_TOOLS_ENABLED,\n REDUX_LOGGER: ARE_DEV_TOOLS_ENABLED\n};\n\nmodule.exports.ENABLE_DEV_TOOLS = ENABLE_DEV_TOOLS;\n","/** @type {string} */\nconst UAT = 'uat';\n/** @type {string} */\nconst QC = 'qc';\n/** @type {string} */\nconst PRODUCTION = 'production';\n/** @type {string} */\nconst PREPROD = 'preproduction';\n/** @type {string} */\nconst DEVELOPMENT = 'development';\n\n/** @type {string} */\nconst SITEGEN_ENV = process.env.SITEGEN_ENV || DEVELOPMENT;\n\n/** @type {boolean} */\nconst IS_QC_ENV = SITEGEN_ENV === QC;\n/** @type {boolean} */\nconst IS_UAT_ENV = SITEGEN_ENV === UAT;\n/** @type {boolean} */\nconst IS_PRODUCTION_ENV = SITEGEN_ENV === PRODUCTION;\n/** @type {boolean} */\nconst IS_PREPROD_ENV = SITEGEN_ENV === PREPROD;\n/** @type {boolean} */\nconst IS_DEVELOPMENT_ENV = SITEGEN_ENV === DEVELOPMENT;\n\nmodule.exports = {\n QC,\n UAT,\n PRODUCTION,\n PREPROD,\n DEVELOPMENT,\n IS_QC_ENV,\n IS_UAT_ENV,\n IS_PRODUCTION_ENV,\n IS_PREPROD_ENV,\n IS_DEVELOPMENT_ENV,\n SITEGEN_ENV\n};\n","const { LOCAL_CORE_CONFIG } = require('./core');\n\nconst PROTOCOL = 'https';\nconst HOST = 'localhost';\nconst PORT = 443;\nconst LOCAL_FO_URL = `${PROTOCOL}://${HOST}:${PORT}`;\nconst WIDGET_ENTRY_POINT_NAME = 'getBootstrapAPI';\nconst WHITE_LIST_LOCAL_DOMAIN = `${PROTOCOL}://spark-ubisoft-connect.ubi.com:${PORT}`;\n\nconst EMBEDDED_MODE_CONSTANTS = {\n CORE_CDN_PATH: '__CORE_CDN_PATH__',\n WEBSITE_CONFIG: '__WEBSITE_CONFIG__',\n WEBSITE_ENTRY_POINT_NAME: '__WEBSITE_ENTRY_POINT_NAME__'\n};\n\nmodule.exports.LOCAL_FO_CONFIG = {\n HOST,\n PORT,\n PROTOCOL,\n LOCAL_FO_URL,\n WIDGET_ENTRY_POINT_NAME,\n WHITE_LIST_LOCAL_DOMAIN\n};\n\nmodule.exports.EMBEDDED_MODE_CONSTANTS = EMBEDDED_MODE_CONSTANTS;\n\nmodule.exports.embeddedModeVariables = {\n [EMBEDDED_MODE_CONSTANTS.CORE_CDN_PATH]: JSON.stringify(LOCAL_CORE_CONFIG.LOCAL_CORE_URL),\n [EMBEDDED_MODE_CONSTANTS.WEBSITE_ENTRY_POINT_NAME]: JSON.stringify(WIDGET_ENTRY_POINT_NAME)\n};\n","var map = {\n\t\"./beta-registration/root/index\": [\n\t\t562,\n\t\t5269,\n\t\t1752,\n\t\t3356,\n\t\t967\n\t],\n\t\"./free-content/root/index\": [\n\t\t71730,\n\t\t5269,\n\t\t4418\n\t],\n\t\"./friends-referral/root/index\": [\n\t\t59922,\n\t\t5269,\n\t\t1752,\n\t\t7504,\n\t\t2740\n\t],\n\t\"./redeem/root/index\": [\n\t\t41829,\n\t\t5269,\n\t\t3356,\n\t\t3178\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 43502;\nmodule.exports = webpackAsyncContext;"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","CHECK_REFERRER_ELIGIBILITY_URL","FRIEND_INVITEES_URL","REGISTER_PLAYER_URL","GET_CAMPAIGN_INFO_URL","GET_INVITE_INFO_URL","ACCEPT_INVITATION_URL","GET_REWARDS_INFO_URL","GET_CAMPAIGN_STATUS_URL","GET_PLAYERS_ELIGIBILITY_URL","GET_PLAYERS_URL","GET_INVITEE_CONVERSION_STATUS","GRANT_TYPES","TYPES","CONJUNCTION_TYPES","CONVERSION_RULES_TYPES","CONVERSION_RULES_TYPES_ID","STAT_API_CALL","STAT_NOTIFICATION","STAT_MATCH_NOTIFICATION","CONVERSION_RULES_ID_TO_TYPES","invert","CONJUNCTION_TYPES_ID","AND","OR","CONJUNCTION_ID_TO_TYPES","GRANT_TYPES_ID","BOTH","REFERRER","INVITEE","TYPES_ID","TRIAL","RETENTION","ERROR_TYPE","PLAYER_ERRORS_CODES","PLAYER_IS_NOT_REGISTERED","PLATFORM_TO_REFERRAL_PLATFORM_ID","PC","PS4","XONE","XSX","PS5","SWITCH","STADIA","REFERRAL_PLATFORM_ID_TO_PLATFORM","FriendsReferralApiService","configureSession","options","this","AXIOS_INSTANCE","defaults","headers","ticket","USER_ID","userId","SESSION_CONFIGURED","configureAPI","ENV","env","CAMPAIGN_ID","campaignId","API_CONFIGURED","configureFakeAPI","then","getInvitees","inviteFriends","Promise","getRewardsInfo","request","checkIfApiConfigured","responseType","response","data","isSuccessful","success","catch","error","getNetworkErrorFromResponse","getFriendsReferralErrorFromResponse","failure","register","platform","url","getRegisterURL","href","method","getPrivateKey","key","acceptInvitation","getAcceptInvitationUrl","setQuery","invitationId","getEligibilityInfo","getReferrerEligibilityURL","eligibilityResponse","platformEligibility","reduce","result","item","platformId","isEligible","getPlayersEligibility","ids","checkIfSessionConfigured","getPlayersEligibilityUrl","getPlayers","getPlayersUrl","getCampaignInfo","getCampaignInfoURL","campaignSpaces","conversionConfig","conjunction","rules","name","crossPlatform","softClosingDate","endDate","platformLock","spaces","acc","space","spaceIdStats","conversion","filter","rule","type","softCloseMode","getPlayerInfo","playerInfos","isEmpty","isReferrer","referrerUbiAccountId","referrerId","isConverted","API_ERROR","getInviteesURL","ubiIdList","length","requests","chunk","idsChunk","all","getRewardsInfoURL","rewardsResponse","rewardItem","levelNumber","rewardsIds","levelLimit","push","levelRepeat","getCampaignStatus","getCampaignStatusUrl","getInviteInfo","getInviteInfoUrl","invitationInfo","getInviteeConversionStatus","host","template","toString","segment","values","pageIndex","page","pageSize","size","parseInt","errorCode","message","errorMessage","status","NETWORK_ERROR","checkRewardEligible","isInviteeGrantType","grantType","isActive","active","isTrialType","isRetentionType","isBeforeExpiration","date","expirationTime","isValid","isBefore","WEBSITE_MODE","PLATFORM_TYPES","PLATFORM_XBOX_ONE","PLATFORM_XBOX_SERIES","PLATFORMS","displayName","REDEEM_PLATFORMS","EPIC","LUNA","BETA_PLATFORMS","IOS","ANDROID","WEB","MOBILE","OCULUSVR","STEAMVR","AMAZON","DEFAULT_PLATFORMS","DEFAULT_WEBSITE_PLATFORM_SELECTION_ENUM","DATA_PLATFORMS_AMOUNT","keyBy","WEBSITE_FLOW","REGISTER_DOMAIN","FREE_WEEKEND_DOMAIN","TWITCH_PRIME_DOMAIN","REDEEM_DOMAIN","PC_PROMO","FRIENDS_REFERRAL_DOMAIN","formWebsiteSubdomain","subdomain","DEV","QC","UAT","PREPROD","PROD","WEBSITE_DEFAULT_ANALYTIC_NAME","WEBSITES_FLOW_SUFFIX","BETA_REGISTRATION","BETA_APPROVAL","OPEN_BETA","ULC_REDEEM","CF_REDEEM","CF_REDEEM_V2","PYC_REDEEM","TWITCH_PRIME","STANDARD_REGISTRATION","FREE_WEEKEND","TRIALS","DEMO","FRIENDS_REFERRAL","GIVEAWAY","PROMOTAB","WEBSITES_WIDGET_NAME_BY_FLOW_ID","WEBSITES_FLOW_ID_BY_WIDGET_NAME","WEBSITE_DISPLAY_NAME_BY_FLOW_ID","WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME","forEach","flowId","WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME","LANGUAGES_MOMENT_FORMAT","AR_AE","time","CS_CZ","DA_DK","DE_DE","EN_AU","EN_CA","EN_GB","EN_US","ES_ES","ES_MX","FI_FI","FR_CA","FR_FR","HU_HU","IT_IT","JA_JP","KO_KR","NB_NO","NL_NL","NN_NO","PL_PL","PT_BR","PT_PT","RU_RU","SV_SE","TH_TH","TR_TR","UK_UA","ZH_CN","month","ZH_TW","LANGUAGES_DATA","languageVariantTag","languageCode","region","EMEA","languageVariantCode","languageName","NCSA","LANGUAGES_MAP","LANGUAGE_NAMES_MAP","LANGUAGE_TO_REGION_MAP","LANGUAGE_FORMAT_MAP","entries","localeKey","momentFormat","isUndefined","isMonthDeclensionNeeded","LANGUAGE_REGION","REGION_TO_DEFAULT_LANGUAGE","LOCALE","locale","index","LOCATION_REGION","COUNTRY","COUNTRIES","subregion","EE","CN","FR","JP","RU","COUNTRIES_BY_REGION","AI","AG","AR","AW","BS","BB","BZ","BM","BO","BQ","BR","CA","KY","CL","CO","CR","CU","CW","DM","DO","EC","SV","GF","GD","GP","GT","GY","HT","HN","JM","MQ","MX","MS","NI","PA","PY","PE","PR","BL","KN","LC","MF","PM","VC","SX","SR","TT","TC","US","UY","VE","VG","VI","AF","AX","AL","DZ","AD","AO","AT","BH","BE","BJ","BA","BW","BV","BG","BF","BI","CM","CV","CF","TD","KM","CD","CG","CI","HR","CY","CZ","DK","DJ","EG","GQ","ER","ET","FK","FO","FI","GA","GM","GE","DE","GH","GI","GR","GL","GG","GN","GW","VA","HU","IS","IR","IQ","IE","IM","IL","IT","JE","JO","KZ","KE","KV","KR","KW","LV","LB","LS","LR","LY","LI","LT","LU","MK","MG","MW","ML","MT","MR","MU","YT","MC","ME","MA","MZ","NA","NL","NE","NG","NO","OM","PS","PL","PT","QA","RE","RO","RW","SH","SM","ST","SA","SN","RS","SC","SL","SK","SI","SO","ZA","GS","ES","SD","SJ","SZ","SE","CH","SY","TZ","TG","TN","TR","TH","UG","AE","GB","EH","YE","ZM","ZW","MENA","ANZ","AS","AU","CK","FJ","FM","GU","KI","MH","MP","NC","NF","NR","NU","NZ","PF","PG","PN","PW","SB","TK","TO","TV","UM","VU","WF","WS","UA","AM","AZ","BY","KG","MD","TJ","TM","UZ","COUNTRIES_BY_UBI_PLUS","noUbiPlus","AQ","IO","CX","TF","HM","delay","ms","setTimeout","Regions","UBI_SERVICES_ENDPOINT","UBI_EVENTS_ENDPOINT","FRIENDS_REFERRAL_ENDPOINT","UPLAY_CLIENT_ENDPOINT","WORLD","CHINA","getEnvDependentEndpoint","envName","source","countryCode","instance","isProd","checkRegions","getUbiServicesEndpoint","getUbiEventsEndpoint","getFriendsReferralEndpoint","getUplayClientEndpoint","reducerHOF","initialState","state","reducerKey","createApplicationStore","reducers","rootEpics","middleware","epicMiddleware","createEpicMiddleware","rootReducer","composeEnhancers","REDUX_LOGGER","createLogger","collapsed","REDUX_EXTENTION","window","store","run","combineEpics","BootstrapAPI","constructor","widgetConfig","mounted","root","unmount","targetNode","prepareMount","widgetsComponents","widgetsRootEpics","widgetsReducers","self","node","callback","render","mount","configureI18n","config","initialTranslations","fetch","dictionaries","init","configureUbisoftConnectService","bootstrapConfig","websiteAbsolutePath","configure","IS_DEVELOPMENT_MODE","WHITE_LIST_LOCAL_DOMAIN","configReducerKey","configReducerHOF","dictionariesReducerKey","dictionariesReducerHOF","embeddedAppConfigReducerKey","embeddedAppConfigReducerHOF","loadAndConfigureWidgets","widgets","widgetName","widgetType","modules","configureAll","configureWidget","bootstrapOptions","applicationConfig","isPreviewMode","previewMode","initialReducers","embeddedAppConfig","preview","mode","setCaching","configureServices","Container","RootEpic","Reducers","ReducersMock","widgetReducers","defaultTranslationKeyOptions","gameName","MODIFIED_TRANSLATION_KEYS_OPTION_NAMES","MODIFIED_TRANSLATION_KEYS_OPTIONS","PLATFORM","modifyTranslationKeysOptions","value","modifiedList","split","val","join","translate","namespaces","Component","translateHOC","props","propsWithoutT","originalTranslateKey","t","dangerouslyTranslateWithHTML","translationOptions","translationOptionsWithDefault","merge","addDefaultTextKeysOptions","translatedOptions","fromPairs","toPairs","pair","className","dangerouslySetInnerHTML","__html","translationNameSpaces","TRANSLATIONS","FALLBACK_TRANSLATIONS","ERROR_KEYS","WIDGET_ERROR_TITLE","WIDGET_ERROR_MESSAGE","WIDGET_ERROR_NOT_ELIGIBLE","WIDGET_ERROR_UNDERAGE","WIDGET_ERROR_INVITE_EXCEEDED_TITLE","WIDGET_ERROR_INVITE_EXCEEDED_DESCRIPTION","SUPPORT_TEXT_KEYS","FAQ","NO_FAQ","DEFAULT_LANGUAGE","PLATFORM_URL_PARAMETER","DELIMITER","PLATFORMS_ORDER","PLATFORM_DISPLAY_NAMES","STEAM","PLATFORM_DISPLAY_PROPS","isLinkable","iconClass","UPLAY","linkAppText","XBL","PSN","String","toLowerCase","loginSessionMock","NEW_LOGIN","sessionId","isUbisoftConnectAuthenticated","UbisoftConnectProfile","op","ref","user","profileId","platformType","idOnPlatform","nameOnPlatform","UbisoftConnectProfiles","UbisoftConnectTicket","getCustomStyles","shouldInheritStyles","singleValue","provided","color","menu","background","border","control","backgroundColor","borderRadius","boxShadow","borderColor","option","isSelected","DropdownField","setFieldInput","input","onChange","meta","translateKey","translatePrefix","dropdownClassName","labelText","getLabelKey","isWarningVisible","submitFailed","placeholder","closeMenuOnSelect","getViewOptions","classNamePrefix","styles","fieldValue","optionTranslatePrefix","label","defaultValue","StringField","DateFormats","DateField","handleInputChange","year","getFullYear","getDate","getMonth","getInputMask","activeLanguageCode","MMDDYYYY","DDMMYYYY","dateFormat","selected","Date","customInput","alwaysShowMask","mask","maskPlaceholder","toUpperCase","TEXT_SUB_KEYS","REQUIRED_ERROR","NUMBER_MIN_ERROR","NUMBER_MAX_ERROR","LENGTH_MIN_ERROR","LENGTH_MAX_ERROR","IS_NOT_NUMBER_ERROR","IS_NOT_DATE_ERROR","SUBMIT","FIELD_VIEW_TYPES","FIELD_VIEW_COMPONENTS","INT","DATE","STRING","DROPDOWN","ANALYTICS_SCRIPT_URL","SITE_CATEGORY","ANALYTICS_GLOBAL_NS","ANALYTICS_SDK","ANALYTICS_READY_EVENT","ANALYTICS_EVENTS","ANALYTICS_ATTRIBUTES","category","action","signedIn","signedOut","signingIn","signingOut","DEFAULT_LOCATION","CATEGORY","initAnalyticsObservable$","Subject","epic$","BehaviorSubject","createEmptyAnalyticsEpics","action$","pipe","mergeMap","epic","loadAnalyticsEpicsAsync","importPromise","analyticsEpics","next","default","analyticsEpicCreator","types","store$","ofType","ignoreElements","setLanguage","actionTypes","language","get","country","updateAnalyticalData","setUserAnalyticsData","errorType","ubisoftId","cleanLoginAnalyticsData","setPlatformSelection","selectedPlatform","platformSelection","isAuthenticatedUser","isEnabled","hasUserAllowedTracking","flowType","flowStep","hostDomain","trackingEventsBuffer","initAnalytics","isAnalyticsEnabled","analyticsEnvironment","location","hostname","addEventListener","event","flushTrackingEventsBuffer","embedded","analyticsAccepted","assignInitialData","injectAnalyticsScript","sendPageEvent","websiteData","pageEventData","appId","brand","environment","game","genomeId","pageName","siteName","siteType","siteSection","siteSubSection","track","PAGE_EVENT","sendAccountEvent","ACCOUNT_EVENT","sendFlowEvent","flowEvent","locationDetail","FLOW_EVENT","bufferizeTrackingEvent","trackingEvent","eventName","configData","useUrl","find","c","siteCategory","applicationId","analyticsBrand","analyticsGame","analyticsSiteName","mdmBrand","analyticsMDMBrandId","mdmInstallmentId","analyticsMDMInstallmentId","doNotTrack","script","document","createElement","setAttribute","onload","isFunction","err","console","body","appendChild","triggerOptIn","initPrivacyOptions","triggerInitialPageEvents","hasLoginSession","analyticsLoginAction","loggedIn","loggedOut","AnalyticsProvider","componentDidMount","analyticsFlowType","analyticsConfigData","EMBEDDED","TRANSLATION_NAME_SPACES","i18nService","useCache","initMoment","i18nextInstance","use","resources","ns","fallbackNS","debug","react","useSuspense","nsMode","saveMissing","missingKeyHandler","args","warn","changeLanguage","translationsPath","fallbackTranslationsPath","configureMoment","getTranslationsPromise","reject","getFallbackTranslationsPromise","fallbackTranslation","translations","fallbackTranslations","addResourceBundle","parentLocale","getAnalyticsLabel","getFixedT","memoizedGET","memoize","fetchLanguage","path","cacheResult","resolveBasePathname","configPath","lastIndexOfConfigPath","pathname","lastIndexOf","substringIndex","substring","LANGUAGE_CODE_REGEX","LOCALE_SEPARATOR","URL_PARAM_SEPARATOR","EN_NORDIC","LANGUAGE_TO_LOCALE_MAPPING","en","locales","fr","es","patterns","regex","ca","pt","zh","no","nb","da","de","fi","hu","it","nl","pl","ru","sv","tr","uk","ar","ja","ko","th","cs","nn","GET_LOCALE_TEXT","LANGUAGE_CODE_LENGTH_ERROR","getSafeLocale","param","params","undefined","getUnsafeLocaleFromUrlParam","getLocaleFromUrl","getLocaleFromLanguage","useBrowserFallback","navigator","getLocaleFromBrowserLanguage","useAvailableLocales","availableLocales","filterByAvailableLocales","test","localeFromLanguage","localeFromRule","checkLocaleRules","localeFromPattern","i","pattern","checkPatternRules","getShortLanguageCode","getCountryFromLanguage","LOG_OUT_DONE","LOG_OUT_ERROR","SET_LOGIN_FETCHING","HAS_SESSION_ALREADY","SET_LOGIN_SESSION","REMOVE_LOGIN_SESSION","SET_TPC_ENABLED","LOGIN_TYPE","STYLES","CONTENT","TEXT_KEYS","BUTTON_LOGIN","LOGIN_FLOW_STEP","LOGIN_FLOW_ACTIONS","UbisoftAPIService","session","interceptors","getFriendList","getFriendProfile","getIPLocation","friends","getStatByName","spaceId","statName","mapValues","stats","stat","_name","UbiAccountId","getUserInfo","USER_FRIEND_LIST_URL","USER_FRIEND_PROFILE_URL","USER_PROFILE_STAT_TEMPLATE","USER_DETAIL_INFO_URL","IP_LOCATION_URL","USER_FRIEND_STATUS","UBISOFT_CONNECT_PLATFORM_TYPES","PLATFORMS_TO_UBISOFT_PROFILE_PLATFORMS","PLATFORM_TO_EXTERNAL_LOGIN_OPTION","EXTERNAL_LOGIN_OPTIONS","UBISOFT","XBOX","TWITCH","APPLICATION_ID_PARAM_NAME","GENOME_ID_PARAM_NAME","UBICONNECT_LOGGED_IN","CONNECT_LOGIN_LOCATION","AUTH_URL_POPUP","AUTH_URL","UbisoftConnectService","sizeSubject","receiveUbisoftConnectIframeMessage","isLoginMessage","isSizeChangedMessage","reInit","loginCallback","prepareConfig","nextUrl","decodeURIComponent","createNextURL","filename","generateConnectNextUrl","hasTPCEnabled","getLoginPopIn","externalLogin","iframe","sandbox","add","query","lang","classList","width","height","isCorrectGenomeId","isCorrectTopic","topic","topicOfPostMessage","isCorrectApplicationId","JSON","parse","connectRoute","windowHeight","registerLoginCallback","openLoginPopUp","align","connectNextUrl","URL","searchParams","set","popupSize","features","left","top","open","SUCCESS_NEXT_URL","search","calculatePopupSize","dualScreenLeft","screenLeft","screenX","dualScreenTop","screenTop","screenY","innerWidth","documentElement","clientWidth","screen","innerHeight","clientHeight","defaultPopupHeight","defaultPopupWidth","getConnectEndpoint","isSafari","userAgent","OVERLAY_SDK_LOCATION","HEADER_HEIGHT","INTEGRATOR_TRIGGER_LOGOUT","INTEGRATOR_TRIGGER_USER_DATA","OVERLAY_INIT_ERROR_MESSAGE","getEmbeddedOverlay","onError","onSuccess","maxAttempts","reserve","overlayWidget","overlayConnectSDK","hasInitialized","OverlayServiceMock","openLoginPopup","changeLocale","triggerEmailActivation","getUserStatus","_userData","getThirdPartyStatus","getTicket","getProfiles","payload","profiles","cloneDeep","UbisoftOverlayService","overlayLoginTriggerSubject","overlayLogoutTriggerSubject","install","onInitDone","receiveUbisoftOverlayMessage","onInitCallback","initEmbeddedFlow","loadSDKScript","overlaySDK","isLoginEvent","isLogoutEvent","getProfilesFallback","gotProfiles","timeoutId","subscribe","getProfilesResponse","clearTimeout","containerSelector","container","onInstallDone","loginType","showSignInText","onConnect","Boolean","getConfig","scriptId","scriptUrl","getOverlaySDKEndpoint","login","getTicketResponse","userData","gotTPS","getThirdPartyStatusResponse","logout","_reject","isCSSVariableSet","variable","getComputedStyle","getPropertyValue","includes","getModeClass","isEmbedded","STANDALONE","formatHours","timeMoment","standardizeLocale","timeFormat","format","localizeDate","localizeMonth","prefix","suffix","isLocaleValid","RegExp","URLSearchParams","WindowHistoryService","disableHistoryUpdates","updateHistory","pushState","basePath","origin","history","BETA_API_ERROR","NDA_STATUS","PLATFORM_TO_BETA_PLATFORM_ID","PS3","X360","WIIU","BETA_PLATFORM_ID_TO_PLATFORM","lodash","REGION_MATCH_ONLY_PLATFORMS","betaCustomFieldsAdapter","customFields","field","UsedForPlayerRegistration","sort","a","b","OrderNumber","fieldDefinition","Value","Array","isArray","fieldType","getFieldType","Name","DefaultValue","isRequired","IsMandatory","BetaManagerAPIService","getFriendListForBeta","getPlayerBetaKeys","inviteFriendToBeta","getInvitedFriends","getPlayerProfile","getPlayerProfileURL","getPlayerProfileFromResponse","getCustomFields","getCustomFieldsURL","getCustomFieldsFromResponse","getPlatformPlayerGroups","getPlatformPlayerGroupsURL","getPlatformPlayerGroupsFromResponse","groups","PlayerGroups","tag","setPlayerBetaProfile","newPlatform","alreadyRegisteredForBeta","addQuery","newPlatformId","getRegisterForBetaInfo","setPlayerActiveBetaGroup","setPlayerBetaGroupURL","getFriendListForBetaURL","Friends","friend","FriendId","phaseId","PlayerKeys","PlayerKey","PlatformId","playerGroupId","PlayerGroupId","friendIdList","getFriendListForBetaInChunks","getFriendListForBetaRequest","getInvitationInfo","invitation","friendIdListChunks","requestsFired","flatten","PlayerSystemInfo","Components","CTA","getRegisterForBetaCTA","cta","isNDASignedByUser","NDA","ubiMail","Ubimail","customFieldValues","ctaFromUrl","encodeURIComponent","trim","SystemFields","group","approved","IsApproved","sourceIdList","PlayerSourceIds","UserId","banned","BannedInBeta","nda","getNDAStatus","getCTA","Invitation","SIGNED","NOT_SIGNED","NOT_SPECIFIED","getBetaErrorFromResponse","ErrorCode","description","ErrorDescription","ErrorMessage","tagFromConfig","platforms","groupsByPlatform","groupBy","betaPlatformId","responsePlatformGroups","platformGroups","isOnlyOneGroup","Tags","regionMatchedGroups","RegionMatch","IS_DEVELOPMENT_ENV","ENABLE_DEV_TOOLS","ARE_DEV_TOOLS_ENABLED","SOURCE_MAPS","PRODUCTION","DEVELOPMENT","SITEGEN_ENV","IS_QC_ENV","IS_UAT_ENV","IS_PRODUCTION_ENV","IS_PREPROD_ENV","LOCAL_CORE_CONFIG","PROTOCOL","HOST","LOCAL_FO_URL","WIDGET_ENTRY_POINT_NAME","EMBEDDED_MODE_CONSTANTS","CORE_CDN_PATH","WEBSITE_CONFIG","WEBSITE_ENTRY_POINT_NAME","PORT","stringify","LOCAL_CORE_URL","webpackAsyncContext","slice"],"sourceRoot":""}