{"version":3,"file":"8461.9c674369b81874d0b807.js","mappings":"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AAG,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,6BAA6B,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,QAAQ,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,aAAa,KAAK,CAAC,4BAA4B,KAAK,CAAC,4BAA4B,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,mBAAmB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,uBAAuB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,CAAC,mBAAmB,KAAK,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CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,uBAAuB,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,YAAY,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,CAAC,YAAY,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,aAAa,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,CAAC,YAAY,KAAK,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,QAAQ,KAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,YAAY,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,aAAa,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,aAAa,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,iBAAiB,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,MAAM,CAAC,YAAY,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,QAAQ,MAAM,CAAC,aAAa,MAAM,CAAC,wBAAwB,MAAM,CAAC,4BAA4B,MAAM,CAAC,uBAAuB,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,4CAA4C,MAAM,CAAC,4CAA4C,MAAM,CAAC,4CAA4C,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,KAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,KAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,0CAA0C,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,yBAAyB,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,6BAA6B,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,cAAc,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,4BAA4B,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,MAAM,CAAC,aAAa,QAEl71Ek7D,EAAgB,CAAC,SAAS,kBAAkB,cAAc,iBAAiB,aAAa,gBAAgB,aAAa,UAAU,UAAU,QAAQ,UAIxJC,GAF4B,IAAIn7D,IAAI,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,SAAS,CAAC,SAEzte,IAAIA,IAAI,CAAC,CAAC,UAAW,IAAIA,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAU,CAAC,QAAS,IAAIA,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,UAAW,CAAC,QAAS,IAAIA,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,UAAW,CAAC,QAAS,IAAIA,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,UAAW,CAAC,QAAS,IAAIA,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,UAAW,CAAC,QAAS,IAAIA,IAAI,CAAC,CAAC,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,aACxpRo7D,EAA+B,IAAIp7D,IAAI,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,CAAC,SAAS,CAAC,SAKh4N,SAASq7D,EAAqB9lF,GAC1B,MAAM5C,EAAS,IAAIqtB,IACnB,IAAK,MAAMs7D,KAAOJ,EAAe,CAC7B,MAAMK,EAAU,GACVC,GAAWL,EAA8B7kF,IAAIf,IAAS,IAAIyqB,KAAO1pB,IAAIglF,IAAQ,GACnFC,EAAQzoF,QAASsoF,EAA6B9kF,IAAIglF,IAAQ,IAC1DC,EAAQzoF,QAAQ0oF,GAEhB7oF,EAAOutB,IAAIo7D,EAAKC,EACpB,CACA,OAAO5oF,CACX,EAE6B8oF,EAAAA,EAAAA,GAAQJ,GAArC,MACaK,EAAyB,IAAI17D,IAAI,CAAC,CAAC,UAAWq7D,EAAqB,YAAa,CAAC,QAASA,EAAqB,UAAW,CAAC,QAASA,EAAqB,UAAW,CAAC,QAASA,EAAqB,UAAW,CAAC,QAASA,EAAqB,UAAW,CAAC,QAASA,EAAqB,W,gFCjCrR,MAAMnR,EAIjB1iE,WAAAA,CAAY++D,GACRl4C,KAAKk4C,aAAeA,EAGpBl4C,KAAKstD,kBAAoB,IAAIpV,EACjC,CAEAjtE,GAAAA,CAAI5H,GACA,OAAOsH,EAAAA,GAAoBM,IAAI5H,IAAS28B,KAAKk4C,aAAajtE,IAAI5H,EAClE,CAEAkqF,cAAAA,CAAelqF,GACX,OAAOsH,EAAAA,GAAoBM,IAAI5H,EACnC,CAEAmqF,UAAAA,CAAWC,GACP,OAAOb,EAAAA,GAAsB3hF,IAAIwiF,EACrC,CAEAxlF,GAAAA,CAAI5E,GACA,OAAIsH,EAAAA,GAAoBM,IAAI5H,GACjBk5E,EAAAA,GAAO5xE,EAAAA,GAAoB1C,IAAI5E,IAGnC28B,KAAKk4C,aAAajwE,IAAI5E,EACjC,CAEAqqF,UAAAA,CAAWD,GACP,OAAOlR,EAAAA,GAAOqQ,EAAAA,GAAsB3kF,IAAIwlF,GAC5C,CAEA,CAACE,OAAOC,YACJ,MAAMN,EAAoBttD,KAAKstD,kBAE/B,IAAIO,EAAc,EACdC,EAAc,EAElB,MAAO,CACHC,IAAAA,GAEI,GAAIF,EAActR,EAAAA,GAAO9xE,OAAQ,CAC7B,MAAM6xE,EAAcC,EAAAA,GAAOsR,GAI3B,OAFAA,GAAe,EAER,CAACvqF,MAAO,CAACg5E,EAAYvE,YAAY,GAAIuE,GAChD,CAGA,GAAIwR,EAAcR,EAAkB7iF,OAAQ,CACxC,MAAMilE,EAAc4d,EAAkBQ,GAAa,GAInD,OAFAA,GAAe,EAER,CAACxqF,MAAO,CAACosE,EAAYrsE,KAAMqsE,GACtC,CAGA,MAAO,CAACse,MAAM,EAAM1qF,WAAOwc,EAC/B,EAER,E,2NCjEJ,MAAMmuE,EAAcA,CAACC,EAAeC,EAAetlF,EAAeC,IACtC,WAApBD,EAAO3F,UAA6C,WAApB4F,EAAO5F,SAChC,EACoB,WAApB4F,EAAO5F,UAA6C,WAApB2F,EAAO3F,UACtC,EAGLgrF,EAAMre,cAAcse,GAGzBC,EAAkBC,GACF,aAAdA,GAA0C,OAAdA,EACrB,EAEJ,EAGLC,EAAgBD,GACA,eAAdA,GAA4C,OAAdA,GACtB,EAEL,EAGLE,EAA6D,CAC/DC,WAAYJ,EACZ,KAAMA,EACNK,SAAUH,EACV,KAAMA,GAGJpmF,EAAeA,CAACF,EAAc0mF,IAO3B1mF,EAKD0mF,GAAgB,gBAAiB1mF,EAC1BA,EAAM+vE,YAAYttD,MAAMljB,GAAkBA,EAAMgyE,WAAWmV,MAAkB1mF,EAAMiwE,WAGvF,eAAgBjwE,EAAQA,EAAMiwE,WAAajwE,EAAM3E,KAR7C,GAWR,SAASsrF,EAAc9lF,EAAeC,EAAe4lF,GACxD,MAAMR,EAAQhmF,EAAaW,EAAQ6lF,GAC7BP,EAAQjmF,EAAaY,EAAQ4lF,GAG7BE,EAAUV,EAAM3U,WAAWmV,GAGjC,OAAIE,IAFYT,EAAM5U,WAAWmV,GAGzBR,KAASK,GACFA,EAAYL,GAAOC,IAGvBF,EAAYC,EAAOC,EAAOtlF,EAAQC,GAClC8lF,GACC,EAGL,CACX,CAGO,SAASC,EAAWt+E,GACvB,MAAMu+E,EAAQ,GAEd,IAAIC,EAAY,EAGhB,IAAK,MAAM3+B,KAAS7/C,EAAKy+E,UAASC,EAAAA,EAAAA,MAAe,CAC7C,MAAMjnF,EAAQooD,EAAM,GACd5wC,EAAQ4wC,EAAM5wC,MAEhB4wC,EAAM5wC,QAAUuvE,GAChBD,EAAMrqF,KAAK8L,EAAK4L,UAAU4yE,EAAWvvE,IAGzCsvE,EAAMrqF,KACFoT,IAAAA,cAAA,QACI1F,IAAKqN,EACL0hB,UAAU,SAETl5B,IAKT+mF,EAAYvvE,EAAQxX,EAAMyC,MAC9B,CAOA,OALIskF,EAAYx+E,EAAK9F,QACjBqkF,EAAMrqF,KAAK8L,EAAK4L,UAAU4yE,IAIN,IAAjBD,EAAMrkF,OAAeqkF,EAAM,GAAKA,CAC3C,CAGO,SAASrS,EAAqBz0E,EAAoBknF,GAAkC,IAAAC,EACvF,IAAIC,EAAa,GAEjB,IAAKpnF,EAAMqnF,QAAUrnF,EAAMsnF,gBAEvB,OAAOtnF,EAGX,GAAIA,EAAMqnF,OAASrnF,EAAMqnF,MAAM5kF,OAAS,EAEpC,OAAOzC,EAMX,GAAwB,YAHAunF,EAAQvnF,GAGG,CAG/B,MAAMwnF,EAAYpkF,OAAOC,KAAKrD,aAAK,EAALA,EAAOsnF,iBAAiB7kE,MAAMglE,GAAkBA,EAAcr9E,SAAS88E,KAIrGE,EAAaI,EAAYxnF,EAAMsnF,gBAAgBE,GAAW3X,QAAU7vE,EAAM6vE,OAC9E,MAEIuX,EAFuB,YAAhBF,EAEMlnF,EAAM6vE,QAAQ6X,WAAW,oCAAqC,IAG9D1nF,EAAM6vE,QAAQ6X,WAAW,mCAAoCR,GAG9E,IAAI7S,EAAauQ,EAAAA,GAAsB3kF,IAAImnF,EAAWtX,eAClD6X,EAAWpT,EAAAA,GAAOF,GAStB,OAPKsT,IAGDtT,EAAauQ,EAAAA,GAAsB3kF,IAAImnF,EAAWtX,cAAgB,SAClE6X,EAAWpT,EAAAA,GAAOF,IAGP,QAAf8S,EAAOQ,SAAQ,IAAAR,EAAAA,EAAInnF,CACvB,CAMO,SAASunF,EAAQvnF,GACpB,GAAI,oBAAqBA,EACrB,MAAO,UAEX,GAAI,UAAWA,EAAO,KAAA4nF,EAAAC,EAClB,MAAM3oF,EAAwB,QAApB0oF,EAAG5nF,SAAY,QAAP6nF,EAAL7nF,EAAOqnF,aAAK,IAAAQ,OAAP,EAALA,EAAe,UAAE,IAAAD,EAAAA,EAAI,GAElC,GAAoB,IAAhB1oF,EAAKuD,OACL,OAAOvD,CAEf,CACA,OAAO,IACX,CAEO,SAAS4oF,EAAiB9jF,GAC7B,OAAOA,EAAUutE,WAAW,MAAQvtE,EAAU2e,SAAS,KAAO3e,EAAUtD,MAAM,GAAI,GAAKsD,CAC3F,CAEO,SAAS+jF,EAAiB/nF,EAAcd,GAC3C,MAAM8oF,EAAYT,EAAQvnF,GAC1B,OAAQgoF,GAAaA,IAAc9oF,CACvC,C,iJCtLO,MAAM+oF,EAA8C,CACvDC,sBAAuB,uBACvBC,KAAM,uBACNC,WAAY,qBACZC,OAAQ,sBACRC,MAAO,sBACPC,MAAO,uBACPC,6BAA8B,sBAC9BC,iBAAkB,uBAClBC,KAAM,yBACNC,uBAAwB,uBACxBC,IAAK,+CACLC,SAAU,uBACVC,WAAY,uBACZC,aAAc,uBACdC,QAAS,uBACTC,KAAM,sBACNC,MAAO,0BACPC,aAAc,+BAGLC,EAAgB,yBAEtB,SAASn1E,EAAe1L,GAC3B,MAAM8gF,GAAsBt/E,EAAAA,EAAAA,IAAmBxB,EAAM,IAAI+gF,EAAAA,GACzD,IAAI9mF,EAA0B6mF,EAAoBjhC,MAAMghC,GAExD,IAAK,MAAM/tF,KAAQ+H,OAAOC,KAAK4kF,GAAmB,CAC9C,MAAM59E,EAAU49E,EAAiB5sF,GAE3BkuF,EAAUF,EAAoBjhC,MAAM/9C,GACtCk/E,IAEI/mF,EADAA,EACSA,EAAOoG,OAAO2gF,GAEdA,EAGrB,CAEA,OAAO/mF,CACX,CAEO,SAASgnF,EACZjhF,EACAkhF,GAEA,IAAIC,EAASnhF,EAEb,SAASohF,EACLC,EACAxX,EACAyX,EACAxuF,GAEA,MAAMmc,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,eAAHqJ,OAAkB4O,EAAK,KAOlC,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAOwuF,EAAYzuF,EAAMwuF,GACzBE,aAAcH,IAGXxX,EAAS7yE,CACpB,CAGAmqF,EAASA,EAAOjhE,QACZ2gE,GACA,CAACQ,EAAmBC,EAAmBxuF,IACnCsuF,EAAyBC,EAAW,GAAIC,EAAWxuF,KAI3D,IAAK,MAAMA,KAAQ+H,OAAOC,KAAK4kF,GAAmB,CAC9C,MAAM59E,EAAU49E,EAAiB5sF,GAIjCquF,EAASA,EAAOjhE,QAAQpe,GAAS,CAACu/E,EAAWxX,EAAQyX,IAAcF,EAAyBC,EAAWxX,EAAQyX,EAAWxuF,IAC9H,CAEA,OAAOquF,CACX,CAEO,SAASI,EAAYzuF,EAAcwuF,GACtC,MAAO,wBAAPjhF,OAA+BvN,EAAKy0E,cAAa,MAAAlnE,OAAKihF,EAAS,UACnE,C,iFCvFO,SAASG,EAAiB7gF,GAA0D,IAAlB8gF,EAAQpyE,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,IAAAA,UAAA,GAC7E,MAAMqyE,EAAQC,EAAAA,KAEd,OAAIF,EACQC,GAAS/gF,EAAEihF,UAAcF,GAAS/gF,EAAEkhF,QAExCH,GAAS/gF,EAAEihF,UAAcF,GAAS/gF,EAAEkhF,UAAYlhF,EAAEmhF,MAC9D,CAEO,SAASC,EAAa/rE,EAA4CrU,GAKrE,OAAIqU,EAAMgsE,UAAYxtF,EAAAA,GAAUytF,SAASC,UAAU,UAK1B,IAAdlsE,EAAMrU,KAAqC,iBAAdqU,EAAMrU,KAAwC,SAAdqU,EAAMrU,MAClDqU,EAAMrU,MAAQA,EAAI,IAAMqU,EAAMrU,MAAQA,EAAI,GAAGwgF,gBAOlEnsE,EAAMgsE,UAAYrgF,EAAI,GACjC,C,2JCnBA,MAAMygF,EAAiB,IAAIC,EAAAA,EAEpB,SAASC,EAAOviF,GAAiD,IAAnCgM,EAAOsD,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGhY,EAAmBgY,UAAApV,OAAA,EAAAoV,UAAA,QAAAC,EAClE,OAAO/N,EAAmBxB,EAAM,IAAIwiF,EAAAA,EAAS,CAAC,EAAGx2E,EAAS1U,GAC9D,CAEO,SAASkK,EAAmBxB,EAAcyiF,GAC7C,MAAMn9E,GAASC,EAAAA,EAAAA,IAAUsQ,EAAAA,QAAM/jB,YAEzB4wF,EAAkB,CACpBD,WACAE,UAAU,EACVC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,YAAoC,SAAvBz9E,EAAO09E,aAAuD,SAA7B19E,EAAO29E,mBAGzD,OAAOC,IAAOljF,EAAM0iF,GAAiB97D,MACzC,CAEO,SAASpgB,EAAcxG,GAC1B,MAAoB,iBAATA,GAAqBA,EAAK9F,OAAS,GACnCipF,EAAAA,EAAAA,IACH3hF,EAAmBxB,EAAMqiF,IAC3Bz7D,OAGC5mB,CACX,C,2FCpCe,MAAMyB,UAA4Bs/E,EAAAA,EACtC/gF,IAAAA,CAAKA,GAER,OAAOA,EAAKkgB,QAAQ2gE,EAAAA,GAAe,GACvC,E,wECNW,MAAME,UAAsBmC,IAAAA,SAChCnnB,IAAAA,GAEH,MAAO,IACX,CAEOqnB,UAAAA,CAAWpjF,GACd,OAAOA,EAAO,IAClB,CAEOqjF,OAAAA,CAAQrjF,GACX,OAAOA,EAAO,IAClB,CAEOg3B,EAAAA,GACH,MAAO,IACX,CAEO3Y,IAAAA,CAAKvb,GACR,OAAOA,EAAO,IAClB,CAEOwgF,QAAAA,CAAStjF,GACZ,OAAOA,EAAO,IAClB,CAEOujF,SAAAA,CAAUvjF,GACb,OAAOA,EAAO,IAClB,CAEOwjF,KAAAA,CAAMC,EAAgB3gF,GACzB,OAAO2gF,EAAS,KAAO3gF,CAC3B,CAEO4gF,QAAAA,CAASC,GACZ,OAAOA,CACX,CAEOC,SAAAA,CAAUD,GACb,OAAOA,EAAU,IACrB,CAEOE,MAAAA,CAAO7jF,GACV,MAAO,IAAMA,EAAO,GACxB,CAEO8jF,EAAAA,CAAG9jF,GACN,MAAO,IAAMA,EAAO,GACxB,CAEO+jF,QAAAA,GAEH,MAAO,GACX,CAEOluD,EAAAA,GACH,MAAO,IACX,CAEOmuD,GAAAA,CAAIhkF,GACP,MAAO,IAAMA,EAAO,GACxB,CAEOyH,IAAAA,CAAKI,EAAcrH,EAAeR,GACrC,MAAO,IAAMA,EAAO,GACxB,CAEOmG,KAAAA,CAAM0B,EAAcrH,EAAeR,GACtC,MAAO,IAAMA,EAAO,GACxB,CAEOA,IAAAA,CAAKA,GACR,OAAOA,CACX,E,oGCxEW,MAAMsiF,UAAuBY,IAAAA,SACjCnnB,IAAAA,CAAK/7D,GAGR,OAAOikF,EAAAA,GAA0BjkF,GAAMkgB,QAAQ,MAAO,IAC1D,CAEOkjE,UAAAA,CAAWpjF,GACd,OAAOA,EAAKkgB,QAAQ,MAAO,IAC/B,CAEOmjE,OAAAA,CAAQrjF,GACX,OAAOA,EAAO,GAClB,CAEOg3B,EAAAA,GACH,MAAO,EACX,CAEO3Y,IAAAA,CAAKvb,GACR,OAAOA,CACX,CAEOwgF,QAAAA,CAAStjF,GACZ,OAAOA,EAAO,GAClB,CAEOujF,SAAAA,CAAUvjF,GACb,OAAOA,EAAO,GAClB,CAEOwjF,KAAAA,GACH,MAAO,EACX,CAEOE,QAAAA,GACH,MAAO,EACX,CAEOE,SAAAA,GACH,MAAO,EACX,CAEOC,MAAAA,CAAO7jF,GACV,OAAOA,CACX,CAEO8jF,EAAAA,CAAG9jF,GACN,OAAOA,CACX,CAEO+jF,QAAAA,CAAS/jF,GACZ,OAAOA,EAAKkgB,QAAQ,MAAO,IAC/B,CAEO2V,EAAAA,GACH,MAAO,GACX,CAEOmuD,GAAAA,CAAIhkF,GACP,OAAOA,CACX,CAEOyH,IAAAA,CAAKI,EAAcrH,EAAeR,GACrC,OAAOA,CACX,CAEOmG,KAAAA,CAAM0B,EAAcrH,EAAeR,GACtC,OAAOA,CACX,CAEOA,IAAAA,CAAKA,GACR,OAAOA,EAAKkgB,QAAQ,KAAM,IAC9B,E,mMCnEW,MAAMsiE,UAAiBU,IAAAA,SAG3Bt6E,WAAAA,CACHoD,EACAk4E,GAEF,IADE5sF,EAAQgY,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAAIg8D,EAAAA,EAAS,IAAIlqD,KAE5BmO,MAAMvjB,GAENyjB,KAAK4zD,QAAU5zD,KAAK4zD,QAAQc,KAAK10D,MACjCA,KAAK8zD,UAAY9zD,KAAK8zD,UAAUY,KAAK10D,MACrCA,KAAKzvB,KAAOyvB,KAAKzvB,KAAKmkF,KAAK10D,MAC3BA,KAAKn4B,SAAWA,EAEhBm4B,KAAKy0D,kBAAoBA,CAC7B,CAEOnoB,IAAAA,CAAKA,EAAcqoB,GACtB,IAAIC,EAAeD,GAAY,GAG/B,GAFAC,EAAeA,EAAa9c,cAEP,QAAjB8c,GAA2C,UAAjBA,EAC1B,MAAO,oBAAPhkF,OAA2B4jF,EAAAA,GAA0BloB,GAAK,YAG9D,IAAIuoB,EAAkB,GAEtB,GAAI70D,KAAKy0D,kBAAkBK,eACvB,IACI,MAAMrD,EAAS,IAAI+C,EAAAA,GAEnB,IAAIO,EAAWP,EAAAA,GAA4BloB,GAC3CyoB,EAAWP,EAAAA,GACPO,EACAtD,EACAzxD,KAAKy0D,kBAAkBK,gBAGvBrD,EAAOjiE,KAAO,IACdulE,EAAWP,EAAAA,GAA6BO,EAAUtD,GAElDoD,EACI,+CACIE,EACJ,SAGZ,CAAE,MAAOxwF,GACL,IAAKiwF,EAAAA,GAAuCjwF,GACxC,MAAMA,CAEd,CAGJ,MAAO,6BAA+BiwF,EAAAA,GAA0BloB,GAAzD,8BACmCkoB,EAAAA,GAA0BI,GAD7D,qCAE0CJ,EAAAA,GAA0BK,GAAmB,UAClG,CAEOP,QAAAA,CAAS/jF,GACZ,IAAImhF,EAASnhF,EAEb,GAAIyvB,KAAKy0D,kBAAkBK,eACvB,IACI,MAAMrD,EAAS,IAAI+C,EAAAA,GACnB9C,EAAS8C,EAAAA,GACL9C,EACAD,EACAzxD,KAAKy0D,kBAAkBK,gBAE3BpD,EAAS8C,EAAAA,GAA6B9C,EAAQD,EAClD,CAAE,MAAOltF,GACL,IAAKiwF,EAAAA,GAAuCjwF,GACxC,MAAMA,EAEVmtF,EAASnhF,CACb,CAGJ,MACI,0CAEQmhF,EAFR,gBAMR,CAEOtrD,EAAAA,GACH,OAAIpG,KAAKy0D,kBAAkBO,WAChB,IAGJl1D,MAAMsG,IACjB,CAEO1vB,KAAAA,CAAM0B,EAAcrH,EAAeR,GACtC,MAAM0kF,ECxGP,SAA8BC,GACjC,MAAM9kC,EAAS,sBAAuBC,KAAK6kC,GAC3C,IAAK9kC,EACD,MAAO,CACHh4C,KAAM88E,EACNC,OAAQ,GACR7/D,MAAO,IAIf,IAAIA,EAAQ86B,EAAM,GACd+kC,EAAS/kC,EAAM,GACnB,OAAK96B,GAAU6/D,GAQX7/D,IAAU6/D,EACVA,EAAS,OACFA,IAAW7/D,IAClBA,EAAQ,QAGL,CACHld,KAAM88E,EAAM/4E,UAAU,EAAG+4E,EAAMzqF,OAAS2lD,EAAM,GAAG3lD,QACjD0qF,SACA7/D,UAhBO,CACHld,KAAM88E,EACNC,OAAQ,GACR7/D,MAAO,GAenB,CDyE2B8/D,CAAqBh9E,GAExC,IAAIi9E,EAAMJ,EAAW78E,KACrBi9E,EAAMC,EAAAA,GAAsBD,EAAKr1D,KAAKy0D,kBAAkBc,aAExD,IAAIvrD,EAAM,aAAHp5B,OAAgBykF,EAAG,WAAAzkF,OAAUL,EAAI,KAYxC,OAXIQ,IACAi5B,GAAO,WAAJp5B,OAAeG,EAAK,MAEvBkkF,EAAW3/D,QACX0U,GAAO,WAAJp5B,OAAeqkF,EAAW3/D,MAAK,MAElC2/D,EAAWE,SACXnrD,GAAO,YAAJp5B,OAAgBqkF,EAAWE,OAAM,MAExCnrD,GAAO,+BACPA,GAAOhK,KAAKzjB,QAAQi5E,MAAQ,KAAO,IAC5BxrD,CACX,CAEO4pD,OAAAA,CAAQrjF,EAAcklF,GACzB,MAAO,KAAP7kF,OAAY6kF,EAAK,+BAAA7kF,OAA8BL,EAAI,OAAAK,OAAM6kF,EAAK,IAClE,CAEOz9E,IAAAA,CAAKI,EAAcrH,EAAeR,GAA6B,IAAfmlF,EAAK71E,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,IAAAA,UAAA,GACpD81E,EAAUv9E,EAEd,GAAI4nB,KAAKy0D,kBAAkBmB,cAAeC,EAAAA,EAAAA,IAA4Bz9E,EAAM4nB,KAAKy0D,kBAAkBqB,SAC/F,OAAIvlF,IAAS6H,EACF7H,EAEJA,EAAO,MAAQ6H,EAG1B,IAAKA,EAAKmhE,WAAW,KAAM,CACvB,MAAMwc,GAASC,EAAAA,EAAAA,IAAU59E,GACzB,GAAK29E,GAEE,GAAIL,GAAS11D,KAAKy0D,kBAAkBwB,uBAItC,IAFPj2D,KAAKy0D,kBAAkBwB,qBAAqBrjF,QACxCmjF,EAAOje,eAID,OAAOvnE,OARXolF,EAAU,UAAH/kF,OAAa+kF,EAW5B,CAEA,KAAKO,EAAAA,EAAAA,IAAUC,EAAqB/9E,IAChC,OAAO7H,EAGX,IAAImhF,EAAS,iCAEb,GAAI1xD,KAAKy0D,kBAAkBK,eACvB,IAAK,MAAMziF,KAAW2tB,KAAKy0D,kBAAkBK,eACzC,GAAIziF,EAAQA,QAAQI,KAAK2F,GAAO,CAC5Bs5E,GAAU,oBACV,KACJ,CAwBR,OApBAA,GAAU,WAAJ9gF,OAAe+kF,EAAO,uBAEPS,EAAAA,EAAAA,IAAmBT,EAAS31D,KAAKy0D,kBAAkBqB,QAAS91D,KAAKy0D,kBAAkB4B,wBAEnFr2D,KAAKy0D,kBAAkBqB,QACxCpE,GAAU,mBAEVA,GAAU,eAAJ9gF,OAAmB+kF,EAAQllE,QAC7BuP,KAAKy0D,kBAAkBqB,QACvB,IACH,KAGD/kF,IACA2gF,GAAU,WAAJ9gF,OAAeG,EAAK,MAI9B2gF,GAAU,IAAMnhF,EAAKkgB,QAAQ,eAAgB,IAAM,OAE5CihE,CACX,CAEOoC,SAAAA,CAAUvjF,GACb,GAAIyvB,KAAKy0D,kBAAkBO,WAAY,CACnC,IAAI1wF,EAUJ,OAJIA,EALAiM,EAAK6B,SAAS,+BAKL,4CAAHxB,OAA+CL,EAAI,WAEhD,yCAAHK,OAA4CL,EAAI,QAEnDjM,CACX,CAEA,OAAOw7B,MAAMg0D,UAAUvjF,EAC3B,CAEOwjF,KAAAA,CAAMC,EAAgB3gF,GACzB,MAAO,uEAAPzC,OAA8EojF,EAAM,mBAAApjF,OAAkByC,EAAI,yBAC9G,CAEO4gF,QAAAA,CAASC,GACZ,MAAO,OAAPtjF,OAAcsjF,EAAO,QACzB,CAEOC,SAAAA,CACHD,EACA5hF,GAKA,OAAOmhF,IAAAA,SAAgB6C,UAAUnC,UAAUD,EAAS5hF,GAAO6kB,MAC/D,CAEOvI,IAAAA,CAAKslE,EAAiBqC,EAAkBC,GAC3C,MAAM5yF,EAAO2yF,EAAU,KAAO,KAE9B,IAAI7E,EAAS,IAAH9gF,OAAOhN,EAAI,+BAQrB,OAPI2yF,QAAqBz2E,IAAV02E,IAGX9E,GAAU,+BAAJ9gF,OAAmC4lF,EAAQ,EAAC,MAEtD9E,GAAU,IAAJ9gF,OAAQsjF,EAAO,MAAAtjF,OAAKhN,EAAI,KAEvB8tF,CACX,CAEOmC,QAAAA,CAAStjF,GACZ,MAAMkmF,EAAc,gBACdC,EAAaD,EAAYpmC,KAAK9/C,GAEpC,OAAImmF,EACO,oCAAP9lF,OAA2C,+CAC5B,MAAlB8lF,EAAW,GAAa,GAAK,sBAC9B,OAAK9lF,OAAGL,EAAKkgB,QAAQgmE,EAAa,IAAG,SAK9B,aAAP7lF,OAAoBL,EAAI,eAC5B,CAEOA,IAAAA,CAAKomF,GACR,OAAOnC,EAAAA,GACHmC,EACA32D,KAAKy0D,kBACLz0D,KAAKn4B,SAEb,EAKG,SAASsuF,EAAqBS,GACjC,OAAOA,EAAKnmE,QAAQ,eAAe,CAAC2hD,EAAGjV,KACnC,MAAM05B,EAAI15B,EAAE2a,cACZ,MAAU,UAAN+e,EACO,IACgB,MAAhBA,EAAEC,OAAO,GACO,MAAhBD,EAAEC,OAAO,GAAa5hF,OAAO6hF,aAAa/iD,SAAS6iD,EAAE16E,UAAU,GAAI,KAAOjH,OAAO6hF,aAAa/4E,OAAO64E,EAAE16E,UAAU,KAErH,EAAE,GAEjB,C,snBEtQO,MAAM5H,EAA4B,CACrCrE,QAAS,UACTsE,KAAM,OACNwiF,QAAS,UACTC,KAAM,OACNC,MAAO,QACPC,OAAQ,SACRC,SAAU,YAGDC,EAAqB,IAAI1lE,IAAoB,CACtD,CAACpd,EAA0BC,KAAM8iF,GACjC,CAAC/iF,EAA0ByiF,QAASO,GACpC,CAAChjF,EAA0B0iF,KAAMO,GACjC,CAACjjF,EAA0B2iF,MAAOO,GAClC,CAACljF,EAA0B4iF,OAAQO,GACnC,CAACnjF,EAA0B6iF,SAAUO,KAG5BC,EAAwB7tF,MAAMC,KAAKqtF,EAAmBhsF,QAEtDwsF,EAAqFD,EAAsB7rF,KAAKkI,GACrHA,IAAcM,EAA0BC,KACjC,CACHlR,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,iEACHgS,eAAe,UAIpBxB,IAAcM,EAA0ByiF,QACxC,CACH1zF,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,oEACHgS,eAAe,aAIpBxB,IAAcM,EAA0B0iF,KACxC,CACH3zF,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,iEACHgS,eAAe,UAIpBxB,IAAcM,EAA0B2iF,MACxC,CACH5zF,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,kEACHgS,eAAe,WAIpBxB,IAAcM,EAA0B4iF,OACxC,CACH7zF,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,mEACHgS,eAAe,YAIpBxB,IAAcM,EAA0B6iF,SACxC,CACH9zF,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,qEACHgS,eAAe,cAKxB,CACHnS,MAAO,GACP+0E,MAAO,MAIR,SAASyf,EAAmC7jF,GAC/C,MAAM8jF,EAAcF,EAAyCptE,MAAMyY,GAAWA,EAAO5/B,QAAU2Q,IAE/F,GAAK8jF,EAIL,OAAOA,CACX,CAEO,MAAMC,EAA0B,IAAIrmE,IAAI,CAC3C,CAAC,UAAWsmE,GACZ,CAAC,OAAQC,GACT,CAAC,SAAUC,GACX,CAAC,WAAYC,KAGJC,EAA4BtuF,MAAMC,KAAKguF,EAAwB3sF,QAE/DitF,EAA8ED,EAA0BtsF,KAAKkI,GACpG,YAAdA,EACO,CACH3Q,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,oEACHgS,eAAe,aAIN,SAAdxB,EACA,CACH3Q,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,iEACHgS,eAAe,UAIN,WAAdxB,EACA,CACH3Q,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,mEACHgS,eAAe,YAIN,aAAdxB,EACA,CACH3Q,MAAO2Q,EACPokE,MACIxgE,IAAAA,cAACC,EAAAA,iBAAgB,CACbrU,GAAG,qEACHgS,eAAe,cAKxB,CACHnS,MAAO,GACP+0E,MAAO,MAIR,SAASkgB,EAAmCtkF,GAC/C,MAAM8jF,EAAcO,EAAkC7tE,MAAMyY,GAAWA,EAAO5/B,QAAU2Q,IAExF,GAAK8jF,EAIL,OAAOA,CACX,CAEA,IAAIS,GAAU,EACP,SAASjjF,EAAKlS,GACbo1F,KAAqBD,IACrBE,EAAqBr1F,GACrBm1F,GAAU,EACV5vE,YAAW,KACP4vE,GAAU,CAAI,GACf,KAEX,CAEO,SAASE,EAAqBr1F,GAAc,IAAAs1F,EACjC,IAAIC,MAAkC,QAA7BD,EAACtB,EAAmBpvF,IAAI5E,UAAK,IAAAs1F,EAAAA,EAAItB,EAAmBpvF,IAAI,SACzE4wF,MACV,CAEA,IAAIC,EAAuC,KACpC,SAASC,EAAK11F,GACZo1F,MAGLO,IAEAF,EAAcG,EAAqB51F,GACnCy1F,EAAYI,iBAAiB,SAAS,KAClCF,GAAU,IAElB,CAEO,SAASA,IACRF,IACAA,EAAYK,QACZL,EAAYzD,IAAM,GAClByD,EAAYM,SACZN,EAAc,KAEtB,CAEA,IACIO,EADAC,EAA0C,KAEvC,SAASC,EAAoBl2F,GAC3Bo1F,MAGLe,IACAlzC,aAAa+yC,GAEbC,EAAiBL,EAAqB51F,GACtCi2F,EAAeJ,iBAAiB,SAAS,KACrCM,GAAyB,IAG7BH,EAAezwE,YAAW,KACtB4wE,GAAyB,GAC1B,KACP,CAEO,SAASA,IACRF,IACAA,EAAeH,QACfG,EAAejE,IAAM,GACrBiE,EAAeF,SACfE,EAAiB,KAEzB,CAEO,SAASL,EAAqB51F,GAAc,IAAAo2F,EAC/C,MAAMC,EAAQ,IAAId,MAAuC,QAAlCa,EAACzB,EAAwB/vF,IAAI5E,UAAK,IAAAo2F,EAAAA,EAAIzB,EAAwB/vF,IAAI,SAGzF,OAFAyxF,EAAMC,MAAO,EACbD,EAAMb,OACCa,CACX,CAEO,SAASjB,IACZ,OAAStG,EAAAA,IACb,CAMO,SAASyH,EAA+CC,GAC3D,OAAIA,GAAqD,UAA3BA,EACnB/lF,EAAAA,GAAaC,IAGjBD,EAAAA,GAAalC,EACxB,C,iLCrQA,IAAIkoF,EAAkCnrF,QAAQ,iBAAkB2I,QAAsC,YAA5ByiF,aAAaC,YAiBhF,SAAS7iF,IAayD,IAZrE,MACIpG,EAAK,KACLsC,EAAI,mBACJ+D,EAAkB,OAClBzC,EAAM,QACN0C,GACqBwI,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,CACxB9O,MAAO,GACPsC,KAAM,GACN+D,oBAAoB,EACpBzC,QAAQ,GAGZ,OAAOxS,UACH,IAAI83F,EAAOC,EAKX,GAJI/H,EAAAA,OACA8H,EAAOE,IAGNC,IACD,MAAM,IAAI38E,MAAM,qCAGpB,GAAgC,YAA5Bs8E,aAAaC,WAA0B,CACvC,GAAIF,EAEA,MAAO,CAAC3qF,OAAQ,WAAYC,OAAQ,6CAA8CrL,KAAMg2F,aAAaC,WAAYziB,SAAUA,QAG/HuiB,GAAkC,EAElC,IAAIE,QAAmBD,aAAaM,oBAQpC,QAP0B,IAAfL,IAEPA,QAAmB,IAAI5sE,SAAS6sB,IAC5B8/C,aAAaM,kBAAkBpgD,EAAQ,KAI5B,YAAf+/C,EAEA,MAAO,CAAC7qF,OAAQ,WAAYC,OAAQ,kCAAmCrL,KAAMi2F,EAAYziB,SAAUA,OAE3G,CAEA,MAAM+iB,EAAe,IAAIP,aAAahpF,EAAO,CACzCsC,OACAknF,IAAKlnF,EACL4mF,OACA7iF,qBACAzC,WAWJ,OARI0C,IACAijF,EAAaE,QAAUnjF,GAG3BijF,EAAaG,QAAU,KACnB,MAAM,IAAIh9E,MAAM,+BAA+B,EAG5C,CACHtO,OAAQ,UACRooE,SAAUA,KACN+iB,EAAaI,OAAO,EAE3B,CAET,CAEO,SAASN,IACZ,MAAQ,iBAAkB9iF,QAAsD,mBAAnCyiF,aAAaM,iBAC9D,CAEO,SAASM,IACZ,OAAKP,IAIEL,aAAaC,WAHT,IAIf,CAEO73F,eAAey4F,IAClB,IAAKR,IACD,OAAO,KAGX,IAEI,aADqCL,aAAaM,mBAEtD,CAAE,MAAO91F,GACL,OAAO,IACX,CACJ,CAEO,MAAMs2F,EAAqC,UAErCC,EAA+B,Q,kEC/HrC,IAAW5/D,EAAI,SAAJA,GAAI,OAAJA,EAAI,8CAAJA,EAAI,mDAAJA,EAAI,oCAAJA,EAAI,qCAAJA,EAAI,iCAAJA,CAAI,MAQJqC,EAAO,SAAPA,GAAO,OAAPA,EAAO,+BAAPA,EAAO,wCAAPA,EAAO,qBAAPA,EAAO,YAAPA,EAAO,YAAPA,EAAO,6BAAPA,EAAO,iCAAPA,EAAO,mBAAPA,EAAO,yBAAPA,CAAO,MA2BlB,SAASD,EAAgBxW,GAYG,IAZF,KAC7BzjB,EAAI,UACJo6B,EAAS,QACTs9D,EAAO,OACPC,EAAM,QACNt9D,GAAU,GAOb5W,EACG,MAAMvK,EAAqC,CACvCi6E,MAAO/4D,EACPw9D,IAAKF,EACLG,OAAQ,CACJF,SACAG,QAAQ,IAIhB,IACI,OAAO/zE,YAAYg0E,QAAQ/3F,EAAMkZ,EACrC,CAAE,MAAOpL,GAML,YALKusB,GAEDtsB,QAAQ7M,MAAM,qBAAuBlB,EAAM8N,GAInD,CACJ,C,2zBCnBA,MAAMkqF,EAA2C,IAE1C,SAAShsF,EAAgB9D,GAC5B,OAAOoD,QAAQpD,EAAK3H,MAAoE,IAA3D2H,EAAK3H,KAAK2mB,YAAYvlB,EAAAA,GAAUs2F,uBACjE,CAEO,SAASC,EAAkBhwF,GAC9B,OAAOoD,QAAQpD,EAAK3H,MAAS2H,EAAK3H,OAASoB,EAAAA,GAAUw2F,eACzD,CAEO,SAASjhF,EAAchP,GAAqB,IAAAoC,EAC/C,MAAoC,UAAnB,QAAVA,EAAApC,EAAKqD,aAAK,IAAAjB,OAAA,EAAVA,EAAYuB,aACvB,CAEO,SAASusF,EAAUlwF,GACtB,OAAOA,EAAKqD,OAAiC,SAAxBrD,EAAKqD,MAAM8sF,QACpC,CAEO,SAASC,EAAYr5F,EAAoBiJ,GAC5C,OAAO/I,EAAAA,EAAAA,IAAiBF,KAAWiJ,EAAKpH,OAC5C,CAEO,SAAS+gC,EAAU35B,GACtB,MAAI,YAAaA,GACW,KAAjBA,EAAKkD,SAAkC,MAAhBlD,EAAKkD,OAG3C,CAEO,SAASmtF,EAASrwF,GACrB,OAAOA,EAAKswF,QAAU,CAC1B,CAEO,SAASC,EAAYzG,GAA4C,IAA/B0G,EAAal8E,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,IAAAA,UAAA,GAClD,IAAKw1E,EACD,OAAOA,EAGX,MAAM2G,EAAWvkF,EAAAA,GAAQwkF,eAAiB,cAE1C,OAAIF,IAAkB1G,EAAI9b,WAAWyiB,GAC1BA,EAAWE,mBAAmB7G,GAGlCA,CACX,CAEO,SAAS8G,EAAc75F,EAAoBiJ,EAAY5I,GAC1D,OAAI4I,EAAK3H,OAASoB,EAAAA,GAAAA,UAAoBw7E,uBAIlC79E,GAAiC,IAAtBA,EAAQoD,aAInB41F,EAAYr5F,EAAOiJ,IACZsgF,EAAAA,EAAAA,IAAuBvpF,EAAOK,GAAWA,EAAQiL,QAASrC,EAAKuC,WAAYg+E,EAAAA,GAAYsQ,cAE3FvQ,EAAAA,EAAAA,IAAuBvpF,EAAOK,GAAWA,EAAQiL,QAASrC,EAAKuC,WAAYg+E,EAAAA,GAAYuQ,qBAClG,CAEO,SAAS17E,EACZre,EACAiJ,EACAmV,EACA7K,EACAlT,EACAT,GACO,IAAAo6F,EAAAC,EACP,OAAOC,EAAAA,EAAAA,IAAiBl6F,EAAOuT,EAAQ6K,EAAyB,QAAlB47E,EAAE35F,aAAO,EAAPA,EAASiL,eAAO,IAAA0uF,EAAAA,EAAI,GAAe,QAAbC,EAAE55F,aAAO,EAAPA,EAASc,UAAE,IAAA84F,EAAAA,EAAI,GAAIr6F,QAAAA,EAAU,GAAIqJ,EAC7G,CAEO,SAASkxF,EAAkBn6F,EAAoBiJ,EAAY5I,GAC9D,QAAI4I,GAAQA,EAAKjJ,QAAUynD,EAAAA,GAAMjB,gBAI7BmxB,EAAAA,EAAAA,IAAgB33E,IAIf+M,EAAgB9D,KAIjB4wF,EAAc75F,EAAOiJ,EAAM5I,KAI3Bge,EAAYre,EAAOiJ,GAK3B,CAEO,SAASmxF,EAAsBp6F,EAAoBiJ,GAGtD,QADiD,UADlCuK,EAAAA,EAAAA,IAAUxT,GACKq6F,gBAK1BttF,EAAgB9D,GAKxB,CAEO,SAASqxF,EAAkBrsF,EAAcgM,GAE5C,IAAKhM,GAAQA,EAAKgpE,WAAW,KACzB,OAAO,EAGX,IAAIsjB,EAEAA,EADAtgF,SAAAA,EAASugF,iBACO,IAAIpqF,OAAO1N,EAAAA,GAAU+3F,wBAErB,IAAIrqF,OAAO1N,EAAAA,GAAUg4F,4BAGzC,MAAMlrF,GAAkBC,EAAAA,EAAAA,IAAmBxB,EAAM,IAAIyB,EAAAA,GACrD,OAAO6qF,EAAcpqF,KAAKX,EAC9B,CAEO,SAASmrF,EAAsB1sF,GAClC,MAAMV,EAAW,CACbwd,KAAK,EACL1qB,SAAS,EACTu6F,MAAM,GAIV,IAAK3sF,GAAQA,EAAKgpE,WAAW,KACzB,OAAO1pE,EAGX,MAAMiC,GAAkBC,EAAAA,EAAAA,IAAmBxB,EAAM,IAAIyB,EAAAA,GAMrD,OAJAnC,EAASwd,IAAM,IAAI3a,OAAO1N,EAAAA,GAAUm4F,mBAAmB1qF,KAAKX,GAC5DjC,EAASlN,QAAU,IAAI+P,OAAO1N,EAAAA,GAAUo4F,uBAAuB3qF,KAAKX,GACpEjC,EAASqtF,KAAO,IAAIxqF,OAAO1N,EAAAA,GAAUq4F,oBAAoB5qF,KAAKX,GAEvDjC,CACX,CAEO,MAAMytF,EAAwBA,CAAC/sF,EAAcqwC,KAEhD,IAAKrwC,GAAQA,EAAKgpE,WAAW,KACzB,MAAO,GAGX,IAAK34B,EACD,MAAO,GAGX,MAAM9uC,GAAkBC,EAAAA,EAAAA,IAAmBxB,EAAM,IAAIyB,EAAAA,GAC/CnC,GAAW0tF,EAAAA,EAAAA,IAAczrF,GAEzB0rF,EAAe,GACrB,IAAK,MAAMtrF,KAAWrC,EAAU,CAC5B,MAAMs0C,EAAQvD,EAAO34C,IAAIiK,GAErBiyC,GACAq5C,EAAI/4F,KAAK0/C,EAEjB,CACA,OAAOq5C,CAAG,EAGP,SAASC,EAAuBtsF,EAAwCusF,GAC3E,QAAKvsF,OAMAusF,GADiB,CAAC,WAAY,SACCtrF,SAASsrF,EAAcC,eAKvDC,EAAAA,EAA0BzsF,KAAMysF,EAAAA,EAAsBzsF,EAAGnM,EAAAA,GAAUytF,SAASoL,OAK5E1sF,EAAEkhF,SAAWlhF,EAAEihF,SAAWjhF,EAAEmhF,UAKnB,MAATnhF,EAAEgB,QAKe,IAAjBhB,EAAEgB,IAAI1H,SAAiB0G,EAAEgB,IAAIi+C,MAAM,SAMnCwtC,EAAAA,EAAsBzsF,EAAGnM,EAAAA,GAAUytF,SAASqL,SADrB,CAAC,SAAU,KACuC1rF,SAASsrF,EAAcC,aAKxG,CAiBO,SAASI,EAAkBjxF,EAAiBkxF,GAC/C,MAAM5tC,EAAQtjD,EAAQqP,UAAU,EAAG6hF,GAAe5tC,MAAMprD,EAAAA,GAAUi5F,wCAElE,OAAOtvF,QAAQyhD,GAASA,EAAM3lD,OAAS,GAAM,EACjD,CAEA,SAASyzF,EAAgBpxF,EAAiBqxF,EAA+BC,EAAmCJ,GACxG,MAAMK,EAAcN,EAAkBjxF,EAASkxF,GAC/C,OAAII,GAA4BD,IAAyBE,EAC9C,CAACC,cAAc,GACdF,GAA6BC,EAE9BF,GAAwBE,EA3BvC,SAAwCvxF,GACpC,MAAMyxF,EAAezxF,EAAQ6c,MAAM,MAAM7jB,QAAQ04F,GAAyB,KAAhBA,EAAKrnE,SACzDsnE,EAAWF,EAAaA,EAAa9zF,OAAS,GAEpD,OAAI8zF,EAAa9zF,OAAS,IAAMg0F,EAASrsF,SAAS,OACvC,CACHksF,cAAc,EACdxxF,QAASA,EAAQ6d,SAAS,MAAQ7d,EAAQ8D,OAAO,OAAS9D,EAAQ8D,OAAO,SACzE8tF,qBAAqB,GAItB,CAACJ,cAAc,EAC1B,CAeeK,CAA+B7xF,GAGnC,CAACwxF,cAAc,GALX,CAACA,cAAc,EAM9B,CAEO,SAASM,EACZp4E,EACA1Z,EACA+xF,EACAC,GAIkG,IAHlG/7F,EAAG8c,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,EACNk/E,EAAmBl/E,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,EACtBm+E,EAAan+E,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,EAEhB,IAAK2G,EACD,MAAO,CAAC83E,cAAc,GAI1B,IAAIU,EAAAA,EAAAA,MACA,MAAO,CAACV,cAAc,GAI1B,IAAKV,EAAAA,EAAsBp3E,EAAOxhB,EAAAA,GAAUytF,SAASwM,QAAUz4E,EAAM04E,UAAY14E,EAAM8rE,OACnF,MAAO,CAACgM,cAAc,GAI1B,GAAIS,EAAsB,GAAKh8F,EAAM,GAAKA,EAAMg8F,GAAuB1D,EACnE,MAAO,CAACiD,cAAc,EAAOa,gBAAgB,GAGjD,GACuB,KAAnBryF,EAAQqqB,SACN0nE,IAA0BC,EAE5B,MAAO,CAACR,cAAc,GAG1B,MAAMH,EAAuB33E,EAAM6rE,SAAW7rE,EAAM4rE,QAEpD,OAAIyM,EACOX,EAAgBpxF,EAASqxF,GAAsB,EAAMH,GACrDc,EACAZ,EAAgBpxF,EAASqxF,GAAsB,EAAOH,GAG1D,CAACM,cAAc,EAC1B,CAEO,SAASc,EAAc15F,GAC1B,OAAOiJ,QAAQjJ,GAAsB,iBAARA,GAAoB,oBAAqBA,EAC1E,CAEO,SAAS25F,GAA2B96F,GACvC,SAAIA,IAASA,EAAMoB,kBACkB,oDAA1BpB,EAAMoB,eAIrB,CAEO,SAAS25F,GAAYh0F,GACxB,OACIi0F,EAAAA,GAAmCj0F,IACnCi0F,EAAAA,GAAyBj0F,IACzBA,KAAUk0F,EAAAA,EAElB,CAIO,SAASC,GAAgBthD,GAC5B,IAAK,IAAI/5B,EAAI+5B,EAAQ1zC,OAAS,EAAG2Z,GAAK,EAAGA,IAAK,CAC1C,MAAM0uD,EAAO30B,EAAQ/5B,GAErB,IAAIk7E,GAAYxsB,GAAhB,CAKA,GAAIysB,EAAAA,GAAyCzsB,GAAO,CAEhD,MAAM4sB,EAAcH,EAAAA,GAAoDzsB,GAExE,OAAO4sB,EAAYA,EAAYj1F,OAAS,EAC5C,CAGA,OAAOqoE,CAVP,CAWJ,CAEA,MAAO,EACX,CAEO,SAAS6sB,GAAkBxhD,EAAmByhD,GACjD,IAAK,IAAIx7E,EAAIw7E,EAAa,EAAGx7E,EAAI+5B,EAAQ1zC,OAAQ2Z,IAAK,CAClD,MAAMy7E,EAAS1hD,EAAQ/5B,GAEvB,IAAIk7E,GAAYO,GAKhB,OAAIN,EAAAA,GAAyCM,GAErBN,EAAAA,GAAoDM,GAErD,GAIhBA,CACX,CAEA,MAAO,EACX,CAIO,SAASC,GAAgB3hD,GAC5B,IAAK,IAAI/5B,EAAI,EAAGA,EAAI+5B,EAAQ1zC,OAAQ2Z,IAAK,CACrC,MAAM0uD,EAAO30B,EAAQ/5B,GAErB,IAAIk7E,GAAYxsB,GAKhB,OAAIysB,EAAAA,GAAyCzsB,GAErBysB,EAAAA,GAAoDzsB,GAErD,GAIhBA,CACX,CAEA,MAAO,EACX,CAEO,SAASitB,KACZ,OAAOtwB,EAAAA,EAAAA,IACH,0BACA,CAACntE,EAAoBiJ,IAAeA,IACnCjJ,IAAuB4tD,EAAAA,EAAAA,IAAmB5tD,KAC3C,CAACiJ,EAAM2Y,KACH,MAAMrU,EAAwC,CAAC,EACzCmwF,EAAgBz0F,EAAKuB,QAAQsjD,MAAMprD,EAAAA,GAAUi7F,iBAAmB,GACtE,IAAK,IAAI77E,EAAI,EAAGA,EAAI47E,EAAcv1F,OAAQ2Z,IAAK,CAC3C,MAAMlS,EAAU8tF,EAAc57E,GACxBjW,EAAO+xF,GAAkBh8E,EAAOhS,EAAQiK,UAAU,IAEpDhO,IACA0B,EAASqC,GAAW/D,EAE5B,CAEA,OAAO0B,CAAQ,GAG3B,CAEO,SAASswF,GAAiB50F,GAC7B,MAAM60F,GAAOC,EAAAA,EAAAA,WAEPC,GAAiBvhE,EAAAA,EAAAA,SAAQwhE,EAAAA,GAAoB,IAC7CC,GAAsBzhE,EAAAA,EAAAA,SAAQ0hE,EAAAA,GAAyB,IACvDC,GAAyB3hE,EAAAA,EAAAA,SAAQghE,GAA4B,IAE7DY,GAA0Bld,EAAAA,EAAAA,IAAcmd,IAE9C,OAAOniE,EAAAA,EAAAA,cAAan8B,IAChB,IAAKiJ,EACD,MAAO,GAGX,MAAMs1F,EAAoBP,EAAeh+F,EAAOiJ,EAAKpH,SAC/C28F,EAAYN,EAAoBl+F,EAAOiJ,EAAK9H,IAC5Cs9F,GAAYC,EAAAA,EAAAA,IAAc1+F,EAAOiJ,EAAK9H,IACtCoE,GAAWC,EAAAA,EAAAA,IAAYxF,GACvBuN,EAAW6wF,EAAuBp+F,EAAOiJ,GACzC01F,GAA6B3qF,EAAAA,EAAAA,IAA8BhU,GAEjE,OAAOq+F,EACHp1F,EACAs1F,EACAE,EACAD,EACAV,EACAv4F,EACAgI,EACAoxF,EACH,GAET,CAEO,SAASL,GAAuBr1F,EAAY21F,EAAgBH,EAAoBD,EAAiDV,EAAiBv4F,EAAoBgI,EAAuCoxF,GAA4C,IAAAE,EAC5P,MAAM,cAACC,EAAa,WAAEC,EAAU,WAAEC,GAAclB,EAEhD,IAIIhwC,EAsBAmxC,EA1BAz0F,EAAUvB,EAAKjJ,QAAUynD,EAAAA,GAAMjB,aAAes4C,EAAc,CAC5D39F,GAAI,oBACJgS,eAAgB,sBACflK,EAAKuB,SAAW,GAIrB,IAAK,MAAMzJ,KAAQ+H,OAAOC,KAAKm2F,EAAAA,IAA6B,CACxD,MAAMnvF,EAAUmvF,EAAAA,GAA2Bn+F,GAC3CyJ,EAAUA,EAAQ2jB,QAAQpe,EAAS,IAAFzB,OAAMvN,EAAI,KAC/C,CAEA,KAA2D,QAAnD+sD,EAAQoxC,EAAAA,GAAwBnxC,KAAKvjD,KACrCjF,EAASoD,IAAImlD,EAAM,MACnBtjD,EAAUA,EAAQ2jB,QAAQ2/B,EAAM,GAAI,GAAFx/C,OAAKw/C,EAAM,GAAG3/B,QAAQ,KAAM,KAAI,YAK1E,IAAK,MAAMve,KAAW9G,OAAOC,KAAKwE,GAAW,CACzC,MAAM1B,EAAO0B,EAASqC,GAClB/D,IACArB,EAAUA,EAAQ2jB,QAAQve,EAAS,IAAFtB,QAAMyF,EAAAA,EAAAA,IAAgBlI,EAAM8yF,KAErE,CAIIM,EADAh2F,EAAKkD,QACO2yF,EAAc,CACtB39F,GAAI,8BACJgS,eAAgB,qDAEpB,CACIgsF,WAAYP,EACZQ,KAAML,EAAW91F,EAAK8P,WACtBsmF,KAAML,EAAW/1F,EAAK8P,UAAW,CAACumF,QAAS,OAAQC,MAAO,OAAQC,IAAK,YACvEh1F,YAGQs0F,EAAc,CACtB39F,GAAI,yBACJgS,eAAgB,mDAEpB,CACIgsF,WAAYP,EACZQ,KAAML,EAAW91F,EAAK8P,WACtBsmF,KAAML,EAAW/1F,EAAK8P,UAAW,CAACumF,QAAS,OAAQC,MAAO,OAAQC,IAAK,YACvEh1F,YAIR,IAAIi1F,EAAkB,EAyBtB,IAxBIvxF,EAAAA,EAAAA,GAAmC,QAAX2wF,EAAC51F,EAAKqD,aAAK,IAAAuyF,OAAA,EAAVA,EAAY1wF,eACrCsxF,GAAmBx2F,EAAKqD,MAAM6B,YAAYhG,QAE1Cc,EAAKgV,WACLwhF,GAAmBx2F,EAAKgV,SAAS9V,QAGjCs3F,IAEIR,GADAQ,EAAkB,EACLX,EAAc,CACvB39F,GAAI,oCACJgS,eAAgB,mCAEpB,CACIssF,oBAGSX,EAAc,CACvB39F,GAAI,4BACJgS,eAAgB,oBAKxBqrF,EAAW,CACX,MAAMkB,EAAa,GACnB,IAAK,MAAMp2C,KAAYxgD,OAAO2M,OAAO+oF,GAAY,CAC7C,MAAM90F,EAAY4/C,EAASI,WAEvBg2C,EAAWpvF,QAAQ5G,GAAa,GAChCg2F,EAAWv9F,KAAKuH,EAExB,CAEIg2F,EAAWv3F,OAAS,EACpB82F,GAAaH,EAAc,CACvB39F,GAAI,kCACJgS,eAAgB,+BAEpB,CACIwsF,cAAeD,EAAWv3F,SAED,IAAtBu3F,EAAWv3F,SAClB82F,GAAaH,EAAc,CACvB39F,GAAI,0BACJgS,eAAgB,iBAG5B,CAqBA,OAnBIsrF,EACIx1F,EAAKklD,UACL8wC,GAAaH,EAAc,CACvB39F,GAAI,2CACJgS,eAAgB,kCAGpB8rF,GAAaH,EAAc,CACvB39F,GAAI,kCACJgS,eAAgB,wBAGhBsrF,GAAax1F,EAAKklD,YAC1B8wC,GAAaH,EAAc,CACvB39F,GAAI,iCACJgS,eAAgB,yBAIjB8rF,CACX,CAGO,SAASW,GAAiClE,EAAuBlxF,GAGpE,MAAO,CAACq1F,WAFWr1F,EAAQqP,UAAU,EAAG6hF,GAEpBoE,UADFt1F,EAAQqP,UAAU6hF,EAAelxF,EAAQrC,QAE/D,CAEO,SAAS43F,GAAiCC,EAAwBC,EAAsBz1F,GAG3F,MAAO,CAACq1F,WAFWr1F,EAAQqP,UAAU,EAAGmmF,GAEpBF,UADFt1F,EAAQqP,UAAUomF,EAAcz1F,EAAQrC,QAE9D,CAEO,SAAS+3F,GAA8Bj3F,EAAYk3F,GACtD,SAAMl3F,IAAQk3F,KAGPl3F,EAAKpH,UAAYs+F,EAAat+F,SACjCoH,EAAK8P,UAAYonF,EAAapnF,WAAa0uC,EAAAA,GAAM24C,wBAC/Cn3F,EAAKqD,OAASrD,EAAKqD,MAAMM,cAAmBuzF,EAAa7zF,OAAS6zF,EAAa7zF,MAAMM,cACtFG,EAAgB9D,IAAU8D,EAAgBozF,GACnD,CASO,SAASj9D,GAAWljC,EAAoBiJ,GAC3C,MAAM5I,GAAUoC,EAAAA,EAAAA,GAAWzC,EAAOiJ,EAAKuC,YACvC,IAAKnL,EACD,MAAO,GAEX,MAAMJ,GAAgBC,EAAAA,EAAAA,IAAiBF,GACjCmjB,GAAO0f,EAAAA,EAAAA,IAAQ7iC,EAAOK,EAAQiL,UAAW9I,EAAAA,EAAAA,IAAiBxC,IAChE,IAAKmjB,EACD,MAAO,GAGX,MAAMk9E,GAAUn0F,EAAAA,EAAAA,IAA0BlM,IAAU4iC,EAAU35B,GAAQ,GAAK,IAAHqF,OAAOrF,EAAK9H,IAEpF,OAAQd,EAAQiB,MAChB,KAAKoB,EAAAA,GAAUC,WAAY,CACvB,MAAM/C,GAAS8iC,EAAAA,EAAAA,IAAyBziC,EAAeI,EAAQU,MACzD8K,GAAO6H,EAAAA,EAAAA,IAAQ1T,EAAOJ,GAC5B,MAAO,IAAP0O,OAAW6U,EAAKpiB,KAAI,eAAAuN,OAAczC,EAAKwH,UAAQ/E,OAAG+xF,EACtD,CACA,KAAK39F,EAAAA,GAAUG,WACX,MAAO,IAAPyL,OAAW6U,EAAKpiB,KAAI,cAAAuN,OAAajO,EAAQU,MAAIuN,OAAG+xF,GACpD,QACI,MAAO,IAAP/xF,OAAW6U,EAAKpiB,KAAI,cAAAuN,OAAajO,EAAQU,MAAIuN,OAAG+xF,GAExD,CAEO,SAASC,GAA4CttB,EACxDutB,GACA,IAAIC,GAAc,EAClB,IAAK,MAAMC,KAAcztB,EAErB,GAD2ButB,EAAmBzwF,SAAS2wF,EAAW5wF,KAC1C,CACpB2wF,GAAc,EACd,KACJ,CAEJ,OAAOA,CACX,CAKO,SAASE,KACZ,MAAMxC,GAAsBC,EAAAA,EAAAA,MAE5B,OAAOhxB,EAAAA,EAAAA,IACH,gCACA,CAACntE,EAAoBgJ,IAAmBk1F,EAAoBl+F,EAAOgJ,IACnExD,EAAAA,IACA,CAACg5F,EAAWj5F,KACR,IAAKi5F,EACD,OAAO,KAGX,MAAMmC,EAA6C,CAAC,EAQpD,OANA73F,OAAOyb,QAAQi6E,GAAWn3F,SAAQmd,IAAqC,IAAnCo8E,EAAgBC,GAAcr8E,EAC1Djf,EAASI,IAAIk7F,EAAcn3C,cAC3Bi3C,EAAiBC,GAAkBC,EACvC,IAGGF,CAAgB,GAGnC,CAEO,SAASplF,KACZ,MAAM2iF,GAAsBC,EAAAA,EAAAA,MAE5B,OAAOhxB,EAAAA,EAAAA,IACH,sCACA,CAACntE,EAAoBgJ,IAAmBk1F,EAAoBl+F,EAAOgJ,IACnExD,EAAAA,IACA,CAACg5F,EAAWj5F,KACR,IAAKi5F,EACD,OAAO,KAGX,MAAMkB,EAAuB,GAQ7B,OANA52F,OAAO2M,OAAO+oF,GAAWn3F,SAASiiD,IAC1B/jD,EAASI,IAAI2jD,EAASI,cAAgBg2C,EAAW5vF,SAASw5C,EAASI,aACnEg2C,EAAWv9F,KAAKmnD,EAASI,WAC7B,IAGGg2C,CAAU,GAG7B,CAEO,SAASzkF,KACZ,MAAM6lF,EAA2BJ,KAEjC,OAAOvzB,EAAAA,EAAAA,IACH,uCACA,CAACntE,EAAoBgJ,IAAmB83F,EAAyB9gG,EAAOgJ,IACxE9I,EAAAA,IACA,CAACF,EAAoBgJ,EAAgBU,IAAsBA,IAC3D,CAAC80F,EAAWv+F,EAAeyJ,KACvB,MAAMi3F,EAAmBnC,GAAa,CAAC,EAIvC,OAFqC11F,OAAO2M,OAAOkrF,GAAkB/kF,MAAM0tC,GAAaA,EAASznD,UAAY5B,GAAiBqpD,EAASI,aAAehgD,GAEnH,GAG/C,CASO,SAASq3F,GAA4BC,GACxC,IAAIC,EAAyBD,EAAYxrB,cAEzC,MAAM0rB,EAAoB,CAACD,GAG3B,KAAOA,EAAuB94F,OAAS,GAAM,SAAUgI,KAAK8wF,IACxDA,EAAyBA,EAAuBpnF,UAAU,EAAGonF,EAAuB94F,OAAS,GAE7F+4F,EAAkB/+F,KAAK8+F,GAG3B,OAAOC,CACX,CAEO,SAAStD,GAAiDuD,EAAmCH,GAChG,IAAK,MAAMI,KAAoBL,GAA4BC,GACvD,GAAIl4F,OAAOs7D,OAAO+8B,EAAgBC,GAC9B,OAAOD,EAAeC,EAKlC,CAEO,SAASC,GACZL,EACAp/E,EACA08B,EACAgjD,GAEsB,IADtBC,EAAUhkF,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAGqgF,GAEb,MAAM/xF,EAAO01F,EAAW3/E,EAAOo/E,GAG/B,IAAKn1F,IAASy1F,EAAgB,CAC1B,MAAMz/C,EAAQ0/C,EAAWjjD,EAAQ0iD,GACjC,OAAIn/C,IAAUA,EAAMwtB,gBACT,MAAC7xD,OAAWA,GAGhB,MAACA,EAAWqkC,EACvB,CAEA,MAAO,CAACh2C,OAAM2R,EAClB,CAEO,SAASgkF,GAAmCh3F,GAC/C,MAAMwE,EAAcxE,EAAQsjD,MAAMprD,EAAAA,GAAUi7F,iBAAmB,GACzDpwF,EAAW,GACjB,IAAK,IAAIuU,EAAI,EAAGA,EAAI9S,EAAY7G,OAAQ2Z,IAAK,CACzC,MAAMlS,EAAUZ,EAAY8S,GACvBpf,EAAAA,GAAU+3F,uBAAuBtqF,KAAKP,IACvCrC,EAASpL,KAAKyN,EAAQiK,UAAU,GAAGgb,OAE3C,CAEA,OAAOtnB,CACX,CAEO,SAASk0F,KACZ,OAAOt0B,EAAAA,EAAAA,IACH,yCACA,CAAC0O,EAAqBrxE,IAA6BA,GACnDojD,EAAAA,GACAokB,EAAAA,IACA,CAACxnE,EAASoX,EAAO08B,KACb,IAAI/1B,EAAQ,EACZ,MAAMwmE,GAAsBt/E,EAAAA,EAAAA,IAAmBjF,EAAS,IAAIkF,EAAAA,GAW5D,OAViB,IAAItI,IAAI2nF,EAAoBjhC,MAAMprD,EAAAA,GAAUi7F,iBAAmB,IACvEt2F,SAASuI,IACd,MAAO/D,EAAMg2C,GAASw/C,GAA8BzxF,EAAQiK,UAAU,GAAI+H,EAAO08B,GAE7EzyC,EACA0c,IACOs5B,IACPt5B,GAASs5B,EAAM6/C,aACnB,IAEGn5E,CAAK,GAGxB,CAEO,SAASo5E,GAAoCppF,GAChD,OACIA,aAAQ,EAARA,EAAUA,YAAaqpF,EAAAA,EAAaC,SACpCtpF,aAAQ,EAARA,EAAUupF,yBAElB,C,mVCt0BA,MAAMC,EAAmB,8lSACnBC,EAAqB,gCACrBC,GAAsBtV,EAAAA,EAAAA,KACtBuV,EAAmB,oJAGnBC,EAA2B,mCAE1B,SAASC,EAAwBngG,GACpC,OAAOoK,QAAQpK,GAA0B,iBAAVA,GAAsB,YAAaA,GAAUA,EAAiCuI,UAAY23F,EAC7H,CAYO,SAASE,EAAkBC,GAC9B,OAAOC,EAAAA,EAAAA,YAAWD,GAAIzzF,GACD,iBAANA,KAIM,iBAANA,IAAmBA,IAIxB,iBAAkBA,GAAgC,iBAAnBA,EAAEnD,iBAInC,cAAemD,IAA4B,iBAAhBA,EAAE2zF,YAMzC,CAgLO,MAAMC,UAAepzE,IACxBE,GAAAA,CAAI1f,EAAa7O,GAEb,GADAw8B,MAAMjO,IAAI1f,EAAK7O,GACX08B,KAAKxQ,KAxNU,IAyNf,MAAM,IAAI/R,MAAMgnF,GAEpB,OAAOzkE,IACX,EAGJ,MAAMglE,EAAyC,CAC3CC,kBAAkB,EAClBC,uBAAuB,EACvBlQ,YAAY,EACZmQ,WAAW,EACXC,UAAU,EACVC,YAAY,EACZC,wBAAwB,EACxBC,gBAAgB,EAChBC,qBAAsB,EACtBjQ,aAAa,EACbkQ,SAAU,EACVn6F,OAAQ,GACRsqF,aAAa,GAqBJpjF,EAAc,8KAEpB,SAASkzF,EACZn1F,GAGM,IAFNo1F,EAAmC9lF,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAGmlF,EACtCn9F,EAAkBgY,UAAApV,OAAA,EAAAoV,UAAA,QAAAC,EAElB,IAAKvP,EACD,MAAO,GAGX,IAAImhF,EAASnhF,EACb,MAAMgM,EAAUnR,OAAOw3B,OAAO,CAAC,EAAG+iE,GAC5BC,EAAc,YAAanzF,KAAK8J,EAAQspF,YAAc,IAU5D,GARItpF,EAAQupF,gBAAkBF,EAC1BrpF,EAAQu4E,eAAiBv4E,EAAQupF,cAAc/5F,IAAIg6F,GAEnDxpF,EAAQu4E,eAimBT,SAA0B+Q,GAC7B,IAAI9wE,EAAQ,GAERixE,EAAaH,EAEjB,KAAOG,GAAY,CACf,IAAIC,EAIJ,GADAA,EAAY,aAAc51C,KAAK21C,GAC3BC,EACAD,EAAaA,EAAW7pF,UAAU8pF,EAAS,GAAGx7F,QAE1Cw7F,EAAS,GAAGx7F,OAAS,GACrBsqB,EAAMtwB,KAAKwhG,EAAS,SAO5B,GADAA,EAAY,+CAAgD51C,KAAK21C,GAC7DC,EACAD,EAAaA,EAAW7pF,UAAU8pF,EAAS,GAAGx7F,aAMlD,GADAw7F,EAAY,mBAAoB51C,KAAK21C,GACjCC,EACAD,EAAaA,EAAW7pF,UAAU8pF,EAAS,GAAGx7F,QAE9CsqB,EAAMtwB,KAAKwhG,EAAS,QAHxB,CASA,GADAA,EAAY,kEAAmE51C,KAAK21C,IAChFC,EAWJ,MAAM,IAAIxoF,MACN,0CAA4CuoF,EAAa,KAXzDA,EAAaA,EAAW7pF,UAAU8pF,EAAS,GAAGx7F,QAG9CsqB,EAAMtwB,QACCwhG,EAAS,GAAGt8E,MAAM,cAAc7jB,QAAQP,GAASoJ,QAAQpJ,KATpE,CAkBJ,CAWA,OARAwvB,EAAQA,EAAMhpB,KAAKxG,IACfA,EAAKkrB,QAAQy1E,EAAW,IACa,MAAjC3gG,EAAKuxF,OAAOvxF,EAAKkF,OAAS,IAC1BlF,EAAKkrB,QAAQ01E,EAAS,IAEnB5gG,KAGJwvB,CACX,CAhqBiCqxE,CAAiB7pF,EAAQspF,YAAc,IAAI95F,IAAIg6F,GAA0Bn9F,MAAK,CAACsW,EAAGC,IAChGA,EAAE5Z,KAAKkF,OAASyU,EAAE3Z,KAAKkF,SAIlC8R,EAAQy2E,SACRtB,GAAS3/E,EAAAA,EAAAA,IAAmB2/E,EAAQn1E,EAAQy2E,UAC5CtB,EAAS2U,EAAa3U,EAAQn1E,EAAS1U,QACpC,KAAM,aAAc0U,IAAYA,EAAQ6oF,UAG3C,GADA1T,EAAS4U,EAAAA,GAAgB5U,EAAQn1E,EAAS1U,GACtC6pF,EAAOt/E,SAAS,+BAAgC,CAChD,MAAMm0F,EAAYn2C,GAKG,QAAVA,EAAkB,+CAAiD,SAa9EshC,EAASA,EAAOjhE,QAAQ,iDAAkD2/B,GAClEA,EAAMh+C,SAAS,uBACRg+C,EAGJ,UAQXshC,EAASA,EAAOjhE,QAAQ,aAAc81E,EAC1C,OAEA7U,EAAS8U,EAAa9U,GACtBA,EAAS2U,EAAa3U,EAAQn1E,EAAS1U,GAsB3C,OAlBI0U,EAAQy4E,aACRtD,EA+tBR,SAAyBnhF,GACrB,OAAOA,EAAKkgB,QAAQ,MAAO,IAC/B,CAjuBiBg2E,CAAgB/U,IAGzB8S,EAAiB/xF,KAAKi/E,EAAOv6D,UAC7Bu6D,EAAS,2BAAH9gF,OAA8B8gF,EAAOv6D,OAAM,YAGjD5a,EAAQjR,SAGJomF,EAAO/mE,SAAS,QAChB+mE,EAAS,GAAH9gF,OAAM8gF,EAAOhpF,MAAM,GAAI,GAAE,+BAAAkI,OAA8B2L,EAAQjR,OAAM,iBAE3EomF,GAAU,8BAAJ9gF,OAAkC2L,EAAQjR,OAAM,cAIvDomF,CACX,CAGO,SAAS2U,EAAa91F,EAAcgM,EAAgC1U,GACvE,IAAI6pF,EAASnhF,EAEb,MAAMkhF,EAAS,IAAIsT,EAEnB,IAgDI,OA9CIxoF,EAAQ8oF,aACR3T,EA2IL,SAA4BnhF,EAAckhF,GAC7C,SAASiV,EAA0B9U,EAAmBj8E,GAClD,IAAIo8E,EAAeH,EAGnB,KAA2B,MAApBG,EAAa,IAChBA,EAAeA,EAAa51E,UAAU,GAG1C,MAAMqD,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,gBAAHqJ,OAAmB4O,EAAK,KAOnC,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,uBAAFsN,OAAyB+E,EAAQ,OAAA/E,OAAM+E,EAAQ,WACpDo8E,iBAGGxqF,CACX,CAEA,IAAImqF,EAASnhF,EAGbmhF,EAASA,EAAOjhE,QACZzrB,EAAAA,GAAU+3F,uBACV2J,GAIJ,IAAIt2C,EAAQshC,EAAOthC,MAAMk0C,GACzB,KAAOl0C,GAASA,EAAM3lD,OAAS,GAC3BinF,EAASA,EAAOjhE,QAAQ6zE,EAAoBoC,GAC5Ct2C,EAAQshC,EAAOthC,MAAMk0C,GAGzB,OAAO5S,CACX,CA/KqBiV,CAAmBjV,EAAQD,IAGpCl1E,EAAQ+oF,yBACR5T,EA2FL,SAAsCnhF,EAAckhF,GAavD,IAAIC,EAASnhF,EAMb,OALAmhF,EAASA,EAAOjhE,QACZzrB,EAAAA,GAAU4hG,8BAdd,SAA6ChV,GACzC,MAAMpyE,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,0BAAHqJ,OAA6B4O,EAAK,KAO7C,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,sCAAFsN,OAAwCghF,EAAS,MAAAhhF,OAAKghF,EAAS,WACpEG,aAAcH,IAGXrqF,CACX,IAQOmqF,CACX,CA/GqBmV,CAA6BnV,EAAQD,IAG9Cl1E,EAAQgpF,iBACR7T,EA6GL,SAA0BnhF,EAAckhF,GAa3C,IAAIC,EAASnhF,EAMb,OALAmhF,EAASA,EAAOjhE,QACZzrB,EAAAA,GAAU8hG,eAdd,SAAqClV,GACjC,MAAMpyE,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,kBAAHqJ,OAAqB4O,EAAK,KAOrC,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,4BAAFsN,OAA8BghF,EAAS,MAAAhhF,OAAKghF,EAAS,WAC1DG,aAAcH,IAGXrqF,CACX,IAQOmqF,CACX,CAjIqBqV,CAAiBrV,EAAQD,IAGlCl1E,EAAQyqF,kBACRtV,EAyKL,SACHnhF,EACAkhF,EACAuV,EACAvhF,GAEA,SAASwhF,EAAqB7mB,GAC1B,OAAOh1E,OAAOs7D,OAAOsgC,EAAiB5mB,EAC1C,CACA,SAAS8mB,EAASzkG,EAAqB8uC,EAAkBr/B,EAAiBw8B,GACtE,MAAMlvB,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,qBAAHqJ,OAAwB4O,EAAK,KACxC,IAAIpH,EAAO,IAiBX,OAhBIm5B,GAEAn5B,GAASd,OAAe6vF,UAAY,IAAM,IAAM51D,EAAW,aAAe9uC,EAC1EgvF,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,iCAAFsN,OAAmCwH,EAAI,iCAAAxH,OAAgC2gC,EAAQ,4BAAA3gC,OAA2BnO,EAAW,OAAAmO,OAAM89B,EAAW,QAC3IqjD,aAAc7/E,KAEXuT,IAEPrN,GAASd,OAAe6vF,UAAY,IAAM,IAAM1hF,EAAKpiB,KAAO,aAAeZ,EAC3EgvF,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,iCAAFsN,OAAmCwH,EAAI,4BAAAxH,OAA2BnO,EAAW,OAAAmO,OAAM89B,EAAW,QACnGqjD,aAAc7/E,KAIf3K,CACX,CAoEA,IAAImqF,EAASnhF,EAMb,OALAmhF,EAASA,EAAOjhE,QACZ,0BApEJ,SACImhE,EACA1/E,EACAzP,GAEA,IAAI2kG,EAAmB3kG,EAAYq1E,cAEnC,GAAImvB,EAAqBG,GAAmB,CAExC,IAAI14D,EAAc,GACd6C,EAAW,GAEf,MAAM81D,EAAeL,EAAgBI,GAQrC,MAP4B,iBAAjBC,GACP34D,EAAc24D,EAAar5F,aAC3BujC,EAAW81D,EAAavC,WAAa,IAErCp2D,EAAc24D,EAGXH,EACHE,EACA71D,EACAr/B,EACAo1F,EAAW54D,GAEnB,CAGA,MAAM64D,EAAsBH,EAE5B,IAAK,IAAIhnB,EAAIgnB,EAAiB38F,OAAQ21E,EAAI,GAClCikB,EAAiB5xF,KAAK20F,EAAiBhnB,EAAI,IADNA,IAIrC,GAFAgnB,EAAmBA,EAAiBjrF,UAAU,EAAGikE,EAAI,GAEjD6mB,EAAqBG,GAAmB,CACxC,MAAMI,EAASD,EAAoBE,OAAOrnB,EAAI,GAE9C,IAAI1xC,EAAc,GACd6C,EAAW,GAEf,MAAM81D,EAAeL,EAAgBI,GAcrC,MAb4B,iBAAjBC,GACP34D,EAAc24D,EAAar5F,aAC3BujC,EAAW81D,EAAavC,WAAa,IAErCp2D,EAAc24D,EAGJH,EACVE,EACA71D,EACA,IAAM61D,EACNE,EAAW54D,IAEA84D,CACnB,CAOR,OAAO5V,CACX,IAQOF,CACX,CAlRqBgW,CACLhW,EACAD,EACAl1E,EAAQyqF,gBACRzqF,EAAQkJ,OAIhBisE,EAqDR,SAAwBnhF,EAAckhF,GAmBlC,OAAOlhF,EAAKkgB,QAAQk3E,GAlBpB,SACI/V,GAEF,QAAAzrC,EAAAtmC,UAAApV,OADKsC,EAAI,IAAAhD,MAAAo8C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJr5C,EAAIq5C,EAAA,GAAAvmC,UAAAumC,GAEP,MAAMg0B,EAASrtE,EAAK,GACdm7D,EAAQn7D,EAAK,GAEbyS,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,YAAHqJ,OAAe4O,EAAK,KAO/B,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,iCAAFsN,OAAmCs3D,EAAK,uCAAAt3D,OAAsCs3D,EAAK,QACxF6pB,aAAc7pB,IAGXkS,EAAS7yE,CACpB,GAGJ,CAzEiBqgG,CAAelW,EAAQD,GAChCC,EA+bR,SACInhF,EACAkhF,GAEF,IADE+T,EAAoB3lF,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,EAEnB6xE,EAASnhF,EAEb,MAAMs3F,EAAY,IAAIl2E,IACtB,IAAK,MAAOpqB,EAAOyd,KAAUysE,EACzB,GAA+C,IAA3CzsE,EAAM+sE,aAAaxnE,YAAY,IAAK,GAAU,CAC9C,MAAM/K,EAAQiyE,EAAOjiE,KAAOq4E,EAAUr4E,KAChCs4E,EAAW,cAAHl3F,OAAiB4O,EAAK,KAEpCqoF,EAAUh2E,IAAIi2E,EAAU,CACpBxkG,MAAO,kDAAFsN,OAAoDoU,EAAM+sE,aAAY,MAAAnhF,OAAKoU,EAAM+sE,aAAY,QAClGA,aAAc/sE,EAAM+sE,aACpBgW,QAAS/iF,EAAM+sE,aAAa51E,UAAU,KAG1Cu1E,EAASA,EAAOjhE,QAAQlpB,EAAOugG,EACnC,CAIJ,IAAK,MAAME,KAAYH,EACnBpW,EAAO5/D,IAAIm2E,EAAS,GAAIA,EAAS,IA0BrC,OAAOtW,EAAOjhE,QACVw3E,GAvBJ,SACIrW,EACAxX,EACA2X,GAEA,MAAMvyE,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,cAAHqJ,OAAiB4O,EAAK,KAEjC,OAAIuyE,EAAatnF,OAAS+6F,EAAuB,EAEtC5T,GAGXH,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,kDAAFsN,OAAoDmhF,EAAY,MAAAnhF,OAAKmhF,EAAY,QACtFA,eACAgW,QAAShW,EAAa51E,UAAU,KAG7Bi+D,EAAS7yE,EACpB,GAMJ,CAtfiB2gG,CAAiBxW,EAAQD,EAAQl1E,EAAQipF,sBAE5C,cAAejpF,IAAYA,EAAQ4oF,YACrCzT,EAAS8P,EAAAA,GAA0B9P,EAAQD,IAG3Cl1E,EAAQu4E,iBACRpD,EAASyW,EAAqBzW,EAAQD,EAAQl1E,EAAQu4E,iBAGpD,qBAAsBv4E,IAAYA,EAAQ0oF,mBAC5CvT,EAgSL,SACHnhF,EACAkhF,GAEF,IADE2W,EAAyBvoF,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAExB6xE,EAASnhF,EAGb,MAAMs3F,EAAY,IAAIl2E,IACtB,IAAK,MAAOpqB,EAAOyd,KAAUysE,EAAQ,CACjC,MAAM4W,EAAiBrjF,EAAM+sE,aAAaja,cAE1C,IAAkF,IAA9EswB,EAAYhgG,WAAW+J,GAAQA,EAAIA,IAAI2lE,gBAAkBuwB,IAAwB,CACjF,MAAM7oF,EAAQiyE,EAAOjiE,KAAOq4E,EAAUr4E,KAChCs4E,EAAW,kBAAHl3F,OAAqB4O,EAAK,KAExCqoF,EAAUh2E,IAAIi2E,EAAU,CACpBxkG,MAAO,oCAAFsN,OAAsCrJ,EAAK,WAChDwqF,aAAc/sE,EAAM+sE,eAExBL,EAASA,EAAOjhE,QAAQlpB,EAAOugG,EACnC,CACJ,CAGA,IAAK,MAAME,KAAYH,EACnBpW,EAAO5/D,IAAIm2E,EAAS,GAAIA,EAAS,IAIrC,SAASM,EACL1W,EACAxX,EACAloE,GAEF,IADEs1F,EAAM3nF,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAET,MAAML,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,kBAAHqJ,OAAqB4O,EAAK,KAOrC,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,oCAAFsN,OAAsCsB,EAAO,WAClD6/E,aAAc7/E,IAGXkoE,EAAS7yE,EAAQigG,CAC5B,CAEA,IAAK,MAAMt1F,KAAWk2F,EAAa,CAC/B,IAAKl2F,IAAYA,EAAQC,IACrB,SAGJ,IAKIE,EALAC,EAAQ,IACPJ,EAAQK,gBACTD,GAAS,KAMTD,EAFAG,EAAYC,KAAKP,EAAQC,KAEf,IAAIO,OAAO,MAAD9B,OAAO+B,EAAYT,EAAQC,KAAI,OAAOG,GAEhD,IAAII,OAAO,WAAD9B,OACL+B,EAAYT,EAAQC,KAAI,gBACnCG,GAGRo/E,EAASA,EAAOjhE,QAAQpe,EAASi2F,EACrC,CAEA,OAAO5W,CACX,CAvWqB6W,CAAyB7W,EAAQD,EAAQl1E,EAAQ6rF,cAG1D7rF,EAAQisF,eAAiBjsF,EAAQisF,cAAc/9F,OAAS,IACxDinF,EAqWL,SACHnhF,EACAkhF,GAEF,IADE+W,EAAgD3oF,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAE/C6xE,EAASnhF,EAGb,MAAMs3F,EAAY,IAAIl2E,IAwBtB,SAAS82E,EACLr2B,EACAgI,EACAsuB,GAEF,IADElB,EAAM3nF,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAET,MAAML,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,uBAAHqJ,OAA0B4O,EAAK,KAQ1C,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,4CAAFsN,OAA8C83F,EAAY,WAC/D3W,aAAc2W,IAGXtuB,EAAS7yE,EAAQigG,CAC5B,CAsBA,OA3DA/V,EAAO9nF,SAAQ,CAACqb,EAAOzd,KACnB,MAAMohG,EAAoB3jF,EAAM+sE,aAAaja,cAE7C,IAAyG,IAArG0wB,EAAcpgG,WAAWsgG,GAAiBA,EAAav2F,IAAI2lE,gBAAkB6wB,IAA2B,CACxG,MAAM17D,EAAWwkD,EAAOjiE,KAAOq4E,EAAUr4E,KACnCs4E,EAAW,uBAAHl3F,OAA0Bq8B,EAAQ,KAEhD46D,EAAUh2E,IAAIi2E,EAAU,CACpBxkG,MAAO,4CAAFsN,OAA8CrJ,EAAK,WACxDwqF,aAAc/sE,EAAM+sE,eAExBL,EAASA,EAAOjhE,QAAQlpB,EAAOugG,EACnC,KAIJD,EAAUl+F,SAAQ,CAACq+F,EAAUF,KACzBrW,EAAO5/D,IAAIi2E,EAAUE,EAAS,IAsBlCQ,EACI5/F,MAAK,CAACsW,EAAGC,IAAMA,EAAEhN,IAAI1H,OAASyU,EAAE/M,IAAI1H,SACpCd,SAAQmd,IAAW,IAKXzU,GALC,IAACF,GAAI2U,EACL3U,IAODE,EAFAG,EAAYC,KAAKN,GAEP,IAAIO,OAAO,MAAD9B,OAAO+B,EAAYR,GAAI,OAAO,MAGxC,IAAIO,OAAO,WAAD9B,OAAY+B,EAAYR,GAAI,gBAAgB,MAIpEu/E,EAASA,EAAOjhE,QAAQpe,EAASo2F,GAAkC,IAGpE/W,CACX,CA5aqBkX,CAAqClX,EAAQD,EAAQl1E,EAAQisF,gBAGpE,cAAejsF,IAAYA,EAAQ4oF,YACrCzT,EA8pBL,SAA4BnhF,EAAc1I,EAAoBghG,GACjE,IAAInX,EAASnhF,EAiCb,OA9BAmhF,EAASA,EAAOjhE,QAAQo4E,GAAgBC,IAEpC,MAAMC,EAAa,CAACC,EAAgBF,EAAY,IAEhD,GAAIA,EAAWr+F,OAAS,EACpB,IAAK,IAAI2Z,EAAI,EAAGA,EAAI0kF,EAAWr+F,OAAQ2Z,IAAK,CACxC,MAAM6kF,EAAYD,EAAgBF,EAAY1kF,IAC3B,IAAf6kF,GAKJF,EAAWtkG,KAAKwkG,EACpB,CAGJ,MAAMC,EAAYH,EAAWh9F,KAAKk9F,GAAcA,EAAUvlG,SAAS,MAAKqiB,KAAK,KAG7E,GAAIle,GAAYA,EAAS2lF,WAAW0b,GAAY,CAE5C,MAAMlhG,EAAQH,EAAS6lF,WAAWwb,GAElC,OAAO1H,EAAAA,GAAsBx5F,EAAM+vE,YAAY,GAAI+wB,EACvD,CAGA,MAAO,4CAAPl4F,OAAmDk4F,EAAU,cAG1DpX,CACX,CAjsBqByX,CAAmBzX,EAAQ7pF,EAAU08F,IAIlD7S,EAAS0X,EAAc1X,EAAQD,IAAWlhF,EACnCmhF,CACX,CAAE,MAAOntF,GACL,GAAImgG,EAAwBngG,GACxB,OAAOgM,EAGX,MAAMhM,CACV,CACJ,CAEO,SAASiiG,EAAaj2F,GACzB,IAAImhF,EAASnhF,EASb,OANAmhF,EAASA,EAAOjhE,QAAQ,KAAM,SAC9BihE,EAASA,EAAOjhE,QAAQ,KAAM,QAC9BihE,EAASA,EAAOjhE,QAAQ,KAAM,QAC9BihE,EAASA,EAAOjhE,QAAQ,KAAM,UAC9BihE,EAASA,EAAOjhE,QAAQ,KAAM,UAEvBihE,CACX,CAIA,MAAMiW,EAAa,gykEA2GZ,SAASpK,EAAchtF,GAC1B,OAAOA,EAAK6/C,MAAMprD,EAAAA,GAAU+3F,wBAA0BuH,IAAuB,EACjF,CA6GO,SAAS3xF,EAAYpC,GACxB,OAAOA,aAAI,EAAJA,EAAMkgB,QAAQ,wBAAyB,UAAW,EAC7D,CAEO,SAAS44E,EAA6B94F,GACzC,OAAOA,aAAI,EAAJA,EAAMkgB,QAAQ,OAAQ,UAAW,EAC5C,CAEA,MAAM64E,EAAe,CACjB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UAGF,SAAShC,EAAW/2F,GACvB,OAAOA,EAAKkgB,QACR,YACC2/B,GAAkBk5C,EAAal5C,IAExC,CAEO,SAASsjC,EAAyBnjF,GACrC,OAAOA,EACHkgB,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KACjBA,QAAQ,SAAU,KAClBA,QAAQ,UAAW,KACnBA,QAAQ,SAAU,IAC1B,CAoJA,MAAMw3E,EAAe,8x2BA2Df/B,EAAY,+oSACZC,EAAU,8oSAmEhB,SAASJ,EAAyBxgG,GAC9B,IAAI8M,EAcJ,OAVIA,EAFAG,EAAYC,KAAKlN,GAEP,MAAQoN,EAAYpN,EAAKkrB,QAAQ,MAAO,KAAO,IACjD,YAAahe,KAAKlN,GAChB,SAAWoN,EAAYpN,EAAK4W,UAAU,EAAG5W,EAAKkF,OAAS,IAAM,IAChElF,EAAKg0E,WAAW,MAAQh0E,EAAKg0E,WAAW,KAErC,WAAa5mE,EAAYpN,GAAQ,OAEjC,SAAWoN,EAAYpN,GAAQ,OAGtC,CACH8M,QAAS,IAAIK,OAAOL,EAAS,MAC7B9M,OAER,CAEO,SAAS4iG,EACZ53F,EACAkhF,EACAqD,GAEA,IAAKA,GAA4C,IAA1BA,EAAerqF,OAClC,OAAO8F,EAGX,IAAImhF,EAASnhF,EAEb,SAASg5F,EACLn5C,EACAgqB,EACAovB,GAEA,MAAMhqF,EAAQiyE,EAAOjiE,KACfjoB,EAAQ,iBAAHqJ,OAAoB4O,EAAK,KAOpC,OALAiyE,EAAO5/D,IAAItqB,EAAO,CACdjE,MAAO,kCAAFsN,OAAoC44F,EAAI,WAC7CzX,aAAcyX,IAGXpvB,EAAS7yE,CACpB,CAEA,IAAK,MAAM8K,KAAWyiF,EAAgB,CAElC,MAAM+S,EAAY,IAAIl2E,IACtB,IAAK,MAAOpqB,EAAOyd,KAAUysE,EAAQ,CACjC,GAAIp/E,EAAQA,QAAQI,KAAKuS,EAAM+sE,cAAe,CAE1C,IAAIA,EAAe/sE,EAAM+sE,aACrBA,EAAaxY,WAAW,OACxBwY,EAAeA,EAAa0V,OAAO,IAEvC,IAAIliG,EAAO8M,EAAQ9M,KAKnB,GAJIA,EAAKg0E,WAAW,OAChBh0E,EAAOA,EAAKkiG,OAAO,IAInBlgG,EAAMgyE,WAAW,gBAC3BhyE,EAAMojB,SAAS,MACfonE,EAAaja,gBAAkBvyE,EAAKuyE,cAE1B,SAGJ,MAAMt4D,EAAQiyE,EAAOjiE,KAAOq4E,EAAUr4E,KAChCs4E,EAAW,iBAAHl3F,OAAoB4O,EAAK,KAEvCqoF,EAAUh2E,IAAIi2E,EAAU,CACpBxkG,MAAO,kCAAFsN,OAAoCrJ,EAAK,WAC9CwqF,aAAc/sE,EAAM+sE,eAGxBL,EAASA,EAAOjhE,QAAQlpB,EAAOugG,EACnC,CAKAz1F,EAAQA,QAAQ08E,UAAY,CAChC,CAGA,IAAK,MAAMiZ,KAAYH,EACnBpW,EAAO5/D,IAAIm2E,EAAS,GAAIA,EAAS,IAGrCtW,EAASA,EAAOjhE,QAAQpe,EAAQA,QAASk3F,EAC7C,CAEA,OAAO7X,CACX,CAEO,SAAS0X,EAAc74F,EAAckhF,GACxC,IAAIC,EAASnhF,EAGb,MAAM7I,EAAU,IAAI+pF,EAAOpmF,QAC3B,IAAK,IAAI+Y,EAAI1c,EAAQ+C,OAAS,EAAG2Z,GAAK,EAAGA,IAAK,CAC1C,MAAM7c,EAAQG,EAAQ0c,GAChBY,EAAQysE,EAAOxpF,IAAIV,GACzBmqF,EAASA,EAAOjhE,QAAQlpB,EAAO8hG,GAA6BrkF,aAAK,EAALA,EAAO1hB,QAAS,IAChF,CAEA,OAAOouF,CACX,CA6CA,SAASsX,EAAgBS,GAAsB,IAAThxB,EAAG54D,UAAApV,OAAA,QAAAqV,IAAAD,UAAA,GAAAA,UAAA,GAAG,EAGxC,MAAMysD,EAAOm9B,EAAIC,WAAWjxB,GAI5B,GAAInM,GAAQ,OAAUA,GAAQ,MAAQ,CAClC,MAAMhlC,EAAKglC,EACLq9B,EAAMF,EAAIC,WAAWjxB,EAAM,GAMjC,OAJImxB,MAAMD,IACNv4F,QAAQC,IAAI,qEAGQ,MAAfi2B,EAAK,QAAoBqiE,EAAM,OAAU,KACtD,CAEA,OAAIr9B,GAAQ,OAAUA,GAAQ,OAGlB,EAGLA,CACX,C,+HC3nCO,SAASu9B,IACZ,OAAO5jB,IAAAA,GAAU6jB,OACrB,CAEO,SAASlyE,IACZ,OAAOquD,MAASgC,WACpB,CAEO,SAAStwD,EAAwB89C,GACpC,OAAOwQ,IAAAA,GAAUxQ,GAAUwS,WAC/B,CAEO,SAAS8hB,EAA0Bt0B,GACtC,MAAMu0B,EAAS/jB,MAASgkB,GAAGx0B,GAC3B,OAAO,IAAIzyE,KAAKgnG,EAAOE,OAAQF,EAAOnI,QAASmI,EAAOrI,OAC1D,CAEO,SAASwI,EAA8B10B,GAC1C,MAAMu0B,EAAS/jB,MAASgkB,GAAGx0B,GAC3B,OAAO,IAAIzyE,KAAKgnG,EAAOE,OAAQF,EAAOnI,QAASmI,EAAOrI,OAAQqI,EAAOI,OAAQJ,EAAOK,SAAUL,EAAO99E,SACzG,CAEO,SAASi6D,EAA4B1Q,GACxC,OAAOA,EAAWwQ,IAAAA,GAAUxQ,GAAYwQ,KAC5C,CAEO,SAASqkB,EAAaC,EAAmBC,GAC5C,MAAMtrF,EAAIqrF,EAAUE,QAAQ54E,IAAI,CAACq4E,KAAM,EAAGrI,MAAO,EAAGF,KAAM,IACpDxiF,EAAIqrF,EAAUC,QAAQ54E,IAAI,CAACq4E,KAAM,EAAGrI,MAAO,EAAGF,KAAM,IAE1D,OAAOziF,EAAEwrF,SAASvrF,EACtB,C,gUClCA,MAAMwrF,EAAsC,CACxCC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KAGHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAIHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAKHC,EAAG,KAKHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAIHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,KAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAQHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KAsBHC,EAAG,IACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,IACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAQHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KAGHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAOHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAIHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,KAGHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAQHC,EAAG,KAQHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAIHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAIHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAKHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAEHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IAGHC,EAAG,IAC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","sources":["webpack://mattermost-webapp/./src/actions/channel_actions.ts","webpack://mattermost-webapp/./src/actions/emoji_actions.js","webpack://mattermost-webapp/./src/actions/hooks.ts","webpack://mattermost-webapp/./src/actions/notification_actions.tsx","webpack://mattermost-webapp/./src/components/reaction_limit_reached_modal.tsx","webpack://mattermost-webapp/./src/actions/post_actions.ts","webpack://mattermost-webapp/./src/actions/new_post.ts","webpack://mattermost-webapp/./src/actions/status_actions.ts","webpack://mattermost-webapp/./src/actions/team_actions.ts","webpack://mattermost-webapp/./src/actions/telemetry_actions.jsx","webpack://mattermost-webapp/./src/actions/user_actions.ts","webpack://mattermost-webapp/./src/actions/views/drafts.ts","webpack://mattermost-webapp/./src/actions/views/modals.ts","webpack://mattermost-webapp/./src/actions/views/rhs.ts","webpack://mattermost-webapp/./src/actions/views/threads.ts","webpack://mattermost-webapp/./src/client/web_websocket_client.tsx","webpack://mattermost-webapp/./src/components/common/hooks/use_external_link.ts","webpack://mattermost-webapp/./src/components/confirm_modal.tsx","webpack://mattermost-webapp/./src/components/external_link/index.tsx","webpack://mattermost-webapp/./src/components/permalink_view/actions.ts","webpack://mattermost-webapp/./src/i18n/imports.ts","webpack://mattermost-webapp/./src/i18n/i18n.jsx","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/channel_categories.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/channels.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/emojis.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/errors.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/files.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/general.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/groups.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/helpers.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/limits.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/preferences.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/roles.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/scheduled_posts.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/search.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/status_profile_polling.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/teams.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/threads.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/actions/users.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/client/index.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/emojis.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/files.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/groups.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/search.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/selectors/entities/timezone.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/data_loader.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/emoji_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/event_emitter.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/file_utils.ts","webpack://mattermost-webapp/./src/packages/mattermost-redux/src/utils/group_utils.ts","webpack://mattermost-webapp/./src/selectors/drafts.ts","webpack://mattermost-webapp/./src/selectors/emojis.ts","webpack://mattermost-webapp/./src/selectors/i18n.ts","webpack://mattermost-webapp/./src/selectors/posts.ts","webpack://mattermost-webapp/./src/selectors/preferences.ts","webpack://mattermost-webapp/./src/selectors/rhs.ts","webpack://mattermost-webapp/./src/selectors/storage.ts","webpack://mattermost-webapp/./src/selectors/urls.ts","webpack://mattermost-webapp/./src/selectors/views/browser.ts","webpack://mattermost-webapp/./src/selectors/views/channel_sidebar.ts","webpack://mattermost-webapp/./src/selectors/views/custom_status.ts","webpack://mattermost-webapp/./src/selectors/views/threads.ts","webpack://mattermost-webapp/./src/stores/local_storage_store.ts","webpack://mattermost-webapp/./src/components/join_private_channel_modal.tsx","webpack://mattermost-webapp/./src/utils/channel_utils.tsx","webpack://mattermost-webapp/./src/utils/emoji.ts","webpack://mattermost-webapp/./src/utils/emoji_map.ts","webpack://mattermost-webapp/./src/utils/emoji_utils.tsx","webpack://mattermost-webapp/./src/utils/emoticons.tsx","webpack://mattermost-webapp/./src/utils/keyboard.ts","webpack://mattermost-webapp/./src/utils/markdown/index.ts","webpack://mattermost-webapp/./src/utils/markdown/mentionable_renderer.tsx","webpack://mattermost-webapp/./src/utils/markdown/plain_renderer.ts","webpack://mattermost-webapp/./src/utils/markdown/remove_markdown.ts","webpack://mattermost-webapp/./src/utils/markdown/renderer.tsx","webpack://mattermost-webapp/./src/utils/markdown/helpers.ts","webpack://mattermost-webapp/./src/utils/notification_sounds.tsx","webpack://mattermost-webapp/./src/utils/notifications.ts","webpack://mattermost-webapp/./src/utils/performance_telemetry/index.ts","webpack://mattermost-webapp/./src/utils/post_utils.ts","webpack://mattermost-webapp/./src/utils/text_formatting.tsx","webpack://mattermost-webapp/./src/utils/timezone.ts","webpack://mattermost-webapp/./src/utils/latinise.tsx","webpack://mattermost-webapp/./src/utils/url.tsx","webpack://mattermost-webapp/./src/utils/utils.tsx","webpack://mattermost-webapp/../src/generic_modal/generic_modal.tsx","webpack://mattermost-webapp/../src/footer_pagination/footer_pagination.tsx","webpack://mattermost-webapp/../src/skeleton_loader/index.tsx","webpack://mattermost-webapp/../src/tour_tip/tour_tip_backdrop.tsx","webpack://mattermost-webapp/../src/pulsating_dot/index.tsx","webpack://mattermost-webapp/../src/tour_tip/tour_tip.tsx","webpack://mattermost-webapp/../src/common/hooks/useMeasurePunchouts.ts","webpack://mattermost-webapp/../src/common/hooks/useElementAvailable.ts","webpack://mattermost-webapp/../src/common/hooks/useFollowElementDimensions.ts","webpack://mattermost-webapp/../platform/types/lib/client4.js","webpack://mattermost-webapp/../platform/types/lib/groups.js","webpack://mattermost-webapp/../platform/types/lib/integration_actions.js","webpack://mattermost-webapp/../platform/types/lib/message_attachments.js","webpack://mattermost-webapp/../platform/types/lib/posts.js","webpack://mattermost-webapp/../node_modules/date-fns/locale/ sync ^\\.\\/.*\\/index\\.js$"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {PreferenceTypes} from 'mattermost-redux/action_types';\nimport * as ChannelActions from 'mattermost-redux/actions/channels';\nimport {savePreferences} from 'mattermost-redux/actions/preferences';\nimport {getChannelByName, getUnreadChannelIds, getChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentTeamUrl, getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {trackEvent} from 'actions/telemetry_actions.jsx';\nimport {loadNewDMIfNeeded, loadNewGMIfNeeded, loadProfilesForSidebar} from 'actions/user_actions';\n\nimport {getHistory} from 'utils/browser_history';\nimport {Constants, Preferences, NotificationLevels} from 'utils/constants';\nimport {getDirectChannelName} from 'utils/utils';\n\nimport type {ActionFuncAsync} from 'types/store';\n\nexport function openDirectChannelToUserId(userId: UserProfile['id']): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const channelName = getDirectChannelName(currentUserId, userId);\n const channel = getChannelByName(state, channelName);\n\n if (!channel) {\n return dispatch(ChannelActions.createDirectChannel(currentUserId, userId));\n }\n\n trackEvent('api', 'api_channels_join_direct');\n const now = Date.now();\n const prefDirect = {\n category: Preferences.CATEGORY_DIRECT_CHANNEL_SHOW,\n name: userId,\n value: 'true',\n };\n const prefOpenTime = {\n category: Preferences.CATEGORY_CHANNEL_OPEN_TIME,\n name: channel.id,\n value: now.toString(),\n };\n const actions = [{\n type: PreferenceTypes.RECEIVED_PREFERENCES,\n data: [prefDirect],\n }, {\n type: PreferenceTypes.RECEIVED_PREFERENCES,\n data: [prefOpenTime],\n }];\n dispatch(batchActions(actions));\n\n dispatch(savePreferences(currentUserId, [\n {user_id: currentUserId, ...prefDirect},\n {user_id: currentUserId, ...prefOpenTime},\n ]));\n\n return {data: channel};\n };\n}\n\nexport function openGroupChannelToUserIds(userIds: Array): ActionFuncAsync {\n return async (dispatch, getState) => {\n const result = await dispatch(ChannelActions.createGroupChannel(userIds));\n\n if (result.error) {\n getHistory().push(getCurrentTeamUrl(getState()));\n }\n\n return result;\n };\n}\n\nexport function loadChannelsForCurrentUser(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const unreads = getUnreadChannelIds(state);\n\n await dispatch(ChannelActions.fetchChannelsAndMembers(getCurrentTeamId(state)));\n for (const id of unreads) {\n const channel = getChannel(state, id);\n if (channel && channel.type === Constants.DM_CHANNEL) {\n dispatch(loadNewDMIfNeeded(channel.id));\n } else if (channel && channel.type === Constants.GM_CHANNEL) {\n dispatch(loadNewGMIfNeeded(channel.id));\n }\n }\n\n loadProfilesForSidebar();\n return {data: true};\n };\n}\n\nexport function autocompleteChannels(term: string, success: (channels: Channel[]) => void, error?: (err: ServerError) => void): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const teamId = getCurrentTeamId(state);\n if (!teamId) {\n return {data: false};\n }\n\n const {data, error: err} = await dispatch(ChannelActions.autocompleteChannels(teamId, term));\n if (data && success) {\n success(data);\n } else if (err && error) {\n error({id: err.server_error_id, ...err});\n }\n\n return {data: true};\n };\n}\n\nexport function autocompleteActiveChannels(term: string, success: (channels: Channel[]) => void, error?: (err: ServerError) => void): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const teamId = getCurrentTeamId(state);\n if (!teamId) {\n return {data: false};\n }\n\n const {data, error: err} = await dispatch(ChannelActions.autocompleteChannels(teamId, term));\n if (data && success) {\n const activeChannels = data.filter((channel: Channel) => channel.delete_at === 0);\n success(activeChannels);\n } else if (err && error) {\n error({id: err.server_error_id, ...err});\n }\n\n return {data: true};\n };\n}\n\nexport function autocompleteChannelsForSearch(term: string, success?: (channels: Channel[]) => void, error?: (err: ServerError) => void): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const teamId = getCurrentTeamId(state);\n\n if (!teamId) {\n return {data: false};\n }\n\n const {data, error: err} = await dispatch(ChannelActions.autocompleteChannelsForSearch(teamId, term));\n if (data && success) {\n success(data);\n } else if (err && error) {\n error({id: err.server_error_id, ...err});\n }\n return {data: true};\n };\n}\n\nexport function addUsersToChannel(channelId: Channel['id'], userIds: Array): ActionFuncAsync {\n return async (dispatch) => {\n const error = await dispatch(ChannelActions.addChannelMembers(channelId, userIds));\n if (error) {\n return error;\n }\n return {data: true};\n };\n}\n\nexport function unmuteChannel(userId: UserProfile['id'], channelId: Channel['id']) {\n return ChannelActions.updateChannelNotifyProps(userId, channelId, {\n mark_unread: NotificationLevels.ALL,\n });\n}\n\nexport function muteChannel(userId: UserProfile['id'], channelId: Channel['id']) {\n return ChannelActions.updateChannelNotifyProps(userId, channelId, {\n mark_unread: NotificationLevels.MENTION,\n });\n}\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport * as EmojiActions from 'mattermost-redux/actions/emojis';\nimport {savePreferences} from 'mattermost-redux/actions/preferences';\nimport {Preferences as ReduxPreferences} from 'mattermost-redux/constants';\nimport {getCustomEmojisByName as selectCustomEmojisByName, getCustomEmojisEnabled} from 'mattermost-redux/selectors/entities/emojis';\nimport {get} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport {getEmojiName} from 'mattermost-redux/utils/emoji_utils';\n\nimport {getEmojiMap, getRecentEmojisData, getRecentEmojisNames, isCustomEmojiEnabled} from 'selectors/emojis';\nimport {isCustomStatusEnabled, makeGetCustomStatus} from 'selectors/views/custom_status';\nimport LocalStorageStore from 'stores/local_storage_store';\n\nimport Constants, {ActionTypes, Preferences} from 'utils/constants';\nimport {EmojiIndicesByAlias} from 'utils/emoji';\n\nexport function loadRecentlyUsedCustomEmojis() {\n return (dispatch, getState) => {\n const state = getState();\n\n if (!getCustomEmojisEnabled(state)) {\n return {data: true};\n }\n\n const recentEmojiNames = getRecentEmojisNames(state);\n\n return dispatch(EmojiActions.getCustomEmojisByName(recentEmojiNames));\n };\n}\n\nexport function incrementEmojiPickerPage() {\n return async (dispatch) => {\n dispatch({\n type: ActionTypes.INCREMENT_EMOJI_PICKER_PAGE,\n });\n\n return {data: true};\n };\n}\n\nexport function setUserSkinTone(skin) {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const skinTonePreference = [{\n user_id: currentUserId,\n name: Preferences.EMOJI_SKINTONE,\n category: Preferences.CATEGORY_EMOJI,\n value: skin,\n }];\n dispatch(savePreferences(currentUserId, skinTonePreference));\n };\n}\n\nexport function addRecentEmoji(alias) {\n return addRecentEmojis([alias]);\n}\n\nexport const MAXIMUM_RECENT_EMOJI = 27;\n\nexport function addRecentEmojis(aliases) {\n return (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const recentEmojis = getRecentEmojisData(state);\n const emojiMap = getEmojiMap(state);\n\n let updatedRecentEmojis = [...recentEmojis];\n for (const alias of aliases) {\n const emoji = emojiMap.get(alias);\n if (!emoji) {\n continue;\n }\n\n const name = getEmojiName(emoji);\n\n const currentEmojiIndexInRecentList = updatedRecentEmojis.findIndex((recentEmoji) => recentEmoji.name === name);\n if (currentEmojiIndexInRecentList > -1) {\n const currentEmojiInRecentList = updatedRecentEmojis[currentEmojiIndexInRecentList];\n\n // If the emoji is already in the recent list, remove it and add it to the front with updated usage count\n const updatedCurrentEmojiData = {\n name,\n usageCount: currentEmojiInRecentList.usageCount + 1,\n };\n updatedRecentEmojis.splice(currentEmojiIndexInRecentList, 1);\n updatedRecentEmojis = [...updatedRecentEmojis, updatedCurrentEmojiData].slice(-MAXIMUM_RECENT_EMOJI);\n } else {\n const currentEmojiData = {\n name,\n usageCount: 1,\n };\n updatedRecentEmojis = [...updatedRecentEmojis, currentEmojiData].slice(-MAXIMUM_RECENT_EMOJI);\n }\n }\n\n // sort emojis by count in the ascending order\n updatedRecentEmojis.sort(\n (emojiA, emojiB) => emojiA.usageCount - emojiB.usageCount,\n );\n\n dispatch(savePreferences(currentUserId, [{category: Constants.Preferences.RECENT_EMOJIS, name: currentUserId, user_id: currentUserId, value: JSON.stringify(updatedRecentEmojis)}]));\n\n return {data: true};\n };\n}\n\nexport function loadCustomEmojisForCustomStatusesByUserIds(userIds) {\n const getCustomStatus = makeGetCustomStatus();\n return (dispatch, getState) => {\n const state = getState();\n const customEmojiEnabled = isCustomEmojiEnabled(state);\n const customStatusEnabled = isCustomStatusEnabled(state);\n if (!customEmojiEnabled || !customStatusEnabled) {\n return {data: false};\n }\n\n const emojisToLoad = new Set();\n\n userIds.forEach((userId) => {\n const customStatus = getCustomStatus(state, userId);\n if (!customStatus || !customStatus.emoji) {\n return;\n }\n\n emojisToLoad.add(customStatus.emoji);\n });\n\n return dispatch(loadCustomEmojisIfNeeded(Array.from(emojisToLoad)));\n };\n}\n\nexport function loadCustomEmojisForRecentCustomStatuses() {\n return (dispatch, getState) => {\n const state = getState();\n const customEmojiEnabled = isCustomEmojiEnabled(state);\n const customStatusEnabled = isCustomStatusEnabled(state);\n if (!customEmojiEnabled || !customStatusEnabled) {\n return {data: false};\n }\n\n const recentCustomStatusesValue = get(state, ReduxPreferences.CATEGORY_CUSTOM_STATUS, ReduxPreferences.NAME_RECENT_CUSTOM_STATUSES);\n if (!recentCustomStatusesValue) {\n return {data: false};\n }\n\n const recentCustomStatuses = JSON.parse(recentCustomStatusesValue);\n const emojisToLoad = new Set();\n\n for (const customStatus of recentCustomStatuses) {\n if (!customStatus || !customStatus.emoji) {\n continue;\n }\n\n emojisToLoad.add(customStatus.emoji);\n }\n\n return dispatch(loadCustomEmojisIfNeeded(Array.from(emojisToLoad)));\n };\n}\n\nexport function loadCustomEmojisIfNeeded(emojis) {\n return (dispatch, getState) => {\n if (!emojis || emojis.length === 0) {\n return {data: false};\n }\n\n const state = getState();\n const customEmojiEnabled = isCustomEmojiEnabled(state);\n if (!customEmojiEnabled) {\n return {data: false};\n }\n\n const systemEmojis = EmojiIndicesByAlias;\n const customEmojisByName = selectCustomEmojisByName(state);\n const nonExistentCustomEmoji = state.entities.emojis.nonExistentEmoji;\n const emojisToLoad = [];\n\n emojis.forEach((emoji) => {\n if (!emoji) {\n return;\n }\n\n if (systemEmojis.has(emoji)) {\n // It's a system emoji, no need to fetch\n return;\n }\n\n if (nonExistentCustomEmoji.has(emoji)) {\n // We've previously confirmed this is not a custom emoji\n return;\n }\n\n if (customEmojisByName.has(emoji)) {\n // We have the emoji, no need to fetch\n return;\n }\n\n emojisToLoad.push(emoji);\n });\n\n return dispatch(EmojiActions.getCustomEmojisByName(emojisToLoad));\n };\n}\n\nexport function loadCustomStatusEmojisForPostList(posts) {\n return (dispatch) => {\n if (!posts || posts.length === 0) {\n return {data: false};\n }\n\n const userIds = new Set();\n Object.keys(posts).forEach((postId) => {\n const post = posts[postId];\n if (post.user_id) {\n userIds.add(post.user_id);\n }\n });\n return dispatch(loadCustomEmojisForCustomStatusesByUserIds(userIds));\n };\n}\n\nexport function migrateRecentEmojis() {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const recentEmojisFromPreference = getRecentEmojisData(state);\n if (recentEmojisFromPreference.length === 0) {\n const recentEmojisFromLocalStorage = LocalStorageStore.getRecentEmojis(currentUserId);\n if (recentEmojisFromLocalStorage) {\n const parsedRecentEmojisFromLocalStorage = JSON.parse(recentEmojisFromLocalStorage);\n const toSetRecentEmojiData = parsedRecentEmojisFromLocalStorage.map((emojiName) => ({name: emojiName, usageCount: 1}));\n if (toSetRecentEmojiData.length > 0) {\n dispatch(savePreferences(currentUserId, [{category: Constants.Preferences.RECENT_EMOJIS, name: currentUserId, user_id: currentUserId, value: JSON.stringify(toSetRecentEmojiData)}]));\n }\n return {data: parsedRecentEmojisFromLocalStorage};\n }\n }\n return {data: recentEmojisFromPreference};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {CommandArgs} from '@mattermost/types/integrations';\nimport type {Post} from '@mattermost/types/posts';\n\nimport type {ActionFuncAsync} from 'types/store';\nimport type {DesktopNotificationArgs} from 'types/store/plugins';\n\nimport type {NewPostMessageProps} from './new_post';\n\n/**\n * @param {Post} originalPost\n * @returns {ActionFuncAsync}\n */\nexport function runMessageWillBePostedHooks(originalPost: Post): ActionFuncAsync {\n return async (dispatch, getState) => {\n const hooks = getState().plugins.components.MessageWillBePosted;\n if (!hooks || hooks.length === 0) {\n return {data: originalPost};\n }\n\n let post = originalPost;\n\n for (const hook of hooks) {\n const result = await hook.hook?.(post); // eslint-disable-line no-await-in-loop\n\n if (result) {\n if ('error' in result) {\n return {\n error: result.error,\n };\n }\n\n post = result.post;\n }\n }\n\n return {data: post};\n };\n}\n\nexport function runSlashCommandWillBePostedHooks(originalMessage: string, originalArgs: CommandArgs): ActionFuncAsync<{message: string; args: CommandArgs}> {\n return async (dispatch, getState) => {\n const hooks = getState().plugins.components.SlashCommandWillBePosted;\n if (!hooks || hooks.length === 0) {\n return {data: {message: originalMessage, args: originalArgs}};\n }\n\n let message = originalMessage;\n let args = originalArgs;\n\n for (const hook of hooks) {\n const result = await hook.hook?.(message, args); // eslint-disable-line no-await-in-loop\n\n if (result) {\n if ('error' in result) {\n return {\n error: result.error,\n };\n }\n\n message = result.message;\n args = result.args;\n\n // The first plugin to consume the slash command by returning an empty object\n // should terminate the processing by subsequent plugins.\n if (Object.keys(result).length === 0) {\n break;\n }\n }\n }\n\n return {data: {message, args}};\n };\n}\n\nexport function runMessageWillBeUpdatedHooks(newPost: Partial, oldPost: Post): ActionFuncAsync> {\n return async (dispatch, getState) => {\n const hooks = getState().plugins.components.MessageWillBeUpdated;\n if (!hooks || hooks.length === 0) {\n return {data: newPost};\n }\n\n let post = newPost;\n\n for (const hook of hooks) {\n const result = await hook.hook?.(post, oldPost); // eslint-disable-line no-await-in-loop\n\n if (result) {\n if ('error' in result) {\n return {\n error: result.error,\n };\n }\n\n post = result.post;\n }\n }\n\n return {data: post};\n };\n}\n\nexport function runDesktopNotificationHooks(post: Post, msgProps: NewPostMessageProps, channel: Channel, teamId: string, args: DesktopNotificationArgs): ActionFuncAsync {\n return async (dispatch, getState) => {\n const hooks = getState().plugins.components.DesktopNotificationHooks;\n if (!hooks || hooks.length === 0) {\n return {data: args};\n }\n\n let nextArgs = args;\n for (const hook of hooks) {\n const result = await hook.hook(post, msgProps, channel, teamId, nextArgs); // eslint-disable-line no-await-in-loop\n\n if (result) {\n if (result.error) {\n return {error: result.error};\n }\n\n if (!result.args) {\n return {error: 'returned empty args'};\n }\n\n nextArgs = result.args;\n }\n }\n\n return {data: nextArgs};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel, ChannelMembership} from '@mattermost/types/channels';\nimport type {ServerError} from '@mattermost/types/errors';\nimport {isMessageAttachmentArray} from '@mattermost/types/message_attachments';\nimport type {Post} from '@mattermost/types/posts';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {logError} from 'mattermost-redux/actions/errors';\nimport {Client4} from 'mattermost-redux/client';\nimport {getCurrentChannel, getMyChannelMember, makeGetChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {\n getTeammateNameDisplaySetting,\n isCollapsedThreadsEnabled,\n} from 'mattermost-redux/selectors/entities/preferences';\nimport {getAllUserMentionKeys} from 'mattermost-redux/selectors/entities/search';\nimport {getCurrentUserId, getCurrentUser, getStatusForUserId, getUser} from 'mattermost-redux/selectors/entities/users';\nimport {isChannelMuted} from 'mattermost-redux/utils/channel_utils';\nimport {ensureString, isSystemMessage, isUserAddedInChannel} from 'mattermost-redux/utils/post_utils';\nimport {displayUsername} from 'mattermost-redux/utils/user_utils';\n\nimport {getChannelURL, getPermalinkURL} from 'selectors/urls';\nimport {isThreadOpen} from 'selectors/views/threads';\n\nimport {getHistory} from 'utils/browser_history';\nimport Constants, {NotificationLevels, UserStatuses, IgnoreChannelMentions, DesktopSound} from 'utils/constants';\nimport DesktopApp from 'utils/desktop_api';\nimport {stripMarkdown, formatWithRenderer} from 'utils/markdown';\nimport MentionableRenderer from 'utils/markdown/mentionable_renderer';\nimport {DesktopNotificationSounds, ding} from 'utils/notification_sounds';\nimport {showNotification} from 'utils/notifications';\nimport {cjkrPattern, escapeRegex} from 'utils/text_formatting';\nimport {isDesktopApp, isMobileApp} from 'utils/user_agent';\nimport * as Utils from 'utils/utils';\n\nimport type {ActionFuncAsync, GlobalState} from 'types/store';\n\nimport {runDesktopNotificationHooks} from './hooks';\nimport type {NewPostMessageProps} from './new_post';\n\ntype NotificationResult = {\n status: string;\n reason?: string;\n data?: string;\n}\n\ntype NotificationHooksArgs = {\n title: string;\n body: string;\n silent: boolean;\n soundName: string;\n url: string;\n notify: boolean;\n}\n\n/**\n * This function is used to determine if the desktop sound is enabled.\n * It checks if desktop sound is defined in the channel member and if not, it checks if it's defined in the user preferences.\n */\nexport function isDesktopSoundEnabled(channelMember: ChannelMembership | undefined, user: UserProfile | undefined) {\n const soundInChannelMemberNotifyProps = channelMember?.notify_props?.desktop_sound;\n const soundInUserNotifyProps = user?.notify_props?.desktop_sound;\n\n if (soundInChannelMemberNotifyProps === DesktopSound.ON) {\n return true;\n }\n\n if (soundInChannelMemberNotifyProps === DesktopSound.OFF) {\n return false;\n }\n\n if (soundInChannelMemberNotifyProps === DesktopSound.DEFAULT) {\n return soundInUserNotifyProps ? soundInUserNotifyProps === 'true' : true;\n }\n\n if (soundInUserNotifyProps) {\n return soundInUserNotifyProps === 'true';\n }\n\n return true;\n}\n\n/**\n * This function returns the desktop notification sound from the channel member and user.\n * It checks if desktop notification sound is defined in the channel member and if not, it checks if it's defined in the user preferences.\n * If neither is defined, it returns the default sound 'BING'.\n */\nexport function getDesktopNotificationSound(channelMember: ChannelMembership | undefined, user: UserProfile | undefined) {\n const notificationSoundInChannelMember = channelMember?.notify_props?.desktop_notification_sound;\n const notificationSoundInUser = user?.notify_props?.desktop_notification_sound;\n\n if (notificationSoundInChannelMember && notificationSoundInChannelMember !== DesktopNotificationSounds.DEFAULT) {\n return notificationSoundInChannelMember;\n }\n\n if (notificationSoundInUser && notificationSoundInUser !== DesktopNotificationSounds.DEFAULT) {\n return notificationSoundInUser;\n }\n\n return DesktopNotificationSounds.BING;\n}\n\nexport function sendDesktopNotification(post: Post, msgProps: NewPostMessageProps): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n\n const teamId = msgProps.team_id;\n\n const channel = makeGetChannel()(state, post.channel_id) || {\n id: post.channel_id,\n name: msgProps.channel_name,\n display_name: msgProps.channel_display_name,\n type: msgProps.channel_type,\n };\n const user = getCurrentUser(state);\n const member = getMyChannelMember(state, post.channel_id);\n const isCrtReply = isCollapsedThreadsEnabled(state) && post.root_id !== '';\n const forceNotification = Boolean(post.props?.force_notification);\n\n const skipNotificationReason = shouldSkipNotification(\n state,\n post,\n msgProps,\n user,\n channel,\n member,\n forceNotification,\n isCrtReply,\n );\n if (skipNotificationReason) {\n return {data: skipNotificationReason};\n }\n\n const title = getNotificationTitle(channel, msgProps, isCrtReply);\n const body = getNotificationBody(state, post, msgProps);\n\n //Play a sound if explicitly set in settings\n const desktopSoundEnabled = isDesktopSoundEnabled(member, user);\n const soundName = getDesktopNotificationSound(member, user);\n\n const updatedState = getState();\n const url = isCrtReply ? getPermalinkURL(updatedState, teamId, post.id) : getChannelURL(updatedState, channel, teamId);\n\n // Allow plugins to change the notification, or re-enable a notification\n const args: NotificationHooksArgs = {title, body, silent: !desktopSoundEnabled, soundName, url, notify: true};\n\n // TODO verify the type of the desktop hook.\n // The channel may not be complete at this moment\n // and may cause crashes down the line if not\n // properly typed.\n const hookResult = await dispatch(runDesktopNotificationHooks(post, msgProps, channel as any, teamId, args));\n if (hookResult.error) {\n dispatch(logError(hookResult.error as ServerError));\n return {data: {status: 'error', reason: 'desktop_notification_hook', data: String(hookResult.error)}};\n }\n\n const argsAfterHooks = hookResult.data!;\n\n if (!argsAfterHooks.notify && !forceNotification) {\n return {data: {status: 'not_sent', reason: 'desktop_notification_hook', data: String(hookResult)}};\n }\n\n const result = dispatch(notifyMe(argsAfterHooks.title, argsAfterHooks.body, channel.id, teamId, argsAfterHooks.silent, argsAfterHooks.soundName, argsAfterHooks.url));\n\n //Don't add extra sounds on native desktop clients\n if (desktopSoundEnabled && !isDesktopApp() && !isMobileApp()) {\n ding(soundName);\n }\n\n return result;\n };\n}\n\nconst getNotificationTitle = (channel: Pick, msgProps: NewPostMessageProps, isCrtReply: boolean) => {\n let title = Utils.localizeMessage({id: 'channel_loader.posted', defaultMessage: 'Posted'});\n if (channel.type === Constants.DM_CHANNEL) {\n title = Utils.localizeMessage({id: 'notification.dm', defaultMessage: 'Direct Message'});\n } else {\n title = channel.display_name;\n }\n\n if (title === '') {\n if (msgProps.channel_type === Constants.DM_CHANNEL) {\n title = Utils.localizeMessage({id: 'notification.dm', defaultMessage: 'Direct Message'});\n } else {\n title = msgProps.channel_display_name;\n }\n }\n\n if (isCrtReply) {\n title = Utils.localizeAndFormatMessage({id: 'notification.crt', defaultMessage: 'Reply in {title}'}, {title});\n }\n\n return title;\n};\n\nconst getNotificationUsername = (state: GlobalState, post: Post, msgProps: NewPostMessageProps): string => {\n const config = getConfig(state);\n const userFromPost = getUser(state, post.user_id);\n\n const overrideUsername = ensureString(post.props.override_username);\n if (overrideUsername && config.EnablePostUsernameOverride === 'true') {\n return overrideUsername;\n }\n if (userFromPost) {\n return displayUsername(userFromPost, getTeammateNameDisplaySetting(state), false);\n }\n if (msgProps.sender_name) {\n return msgProps.sender_name;\n }\n return Utils.localizeMessage({id: 'channel_loader.someone', defaultMessage: 'Someone'});\n};\n\nconst getNotificationBody = (state: GlobalState, post: Post, msgProps: NewPostMessageProps) => {\n const username = getNotificationUsername(state, post, msgProps);\n\n let notifyText = post.message;\n\n const msgPropsPost: Post = JSON.parse(msgProps.post);\n const attachments = isMessageAttachmentArray(msgPropsPost?.props?.attachments) ? msgPropsPost.props.attachments : [];\n let image = false;\n attachments.forEach((attachment) => {\n if (notifyText.length === 0) {\n notifyText = attachment.fallback ||\n attachment.pretext ||\n attachment.text || '';\n }\n image = Boolean(image || (attachment.image_url?.length));\n });\n\n const strippedMarkdownNotifyText = stripMarkdown(notifyText);\n\n let body = `@${username}`;\n if (strippedMarkdownNotifyText.length === 0) {\n if (msgProps.image) {\n body += Utils.localizeMessage({id: 'channel_loader.uploadedImage', defaultMessage: ' uploaded an image'});\n } else if (msgProps.otherFile) {\n body += Utils.localizeMessage({id: 'channel_loader.uploadedFile', defaultMessage: ' uploaded a file'});\n } else if (image) {\n body += Utils.localizeMessage({id: 'channel_loader.postedImage', defaultMessage: ' posted an image'});\n } else {\n body += Utils.localizeMessage({id: 'channel_loader.something', defaultMessage: ' did something new'});\n }\n } else {\n body += `: ${strippedMarkdownNotifyText}`;\n }\n\n return body;\n};\n\nfunction shouldSkipNotification(\n state: GlobalState,\n post: Post,\n msgProps: NewPostMessageProps,\n user: UserProfile,\n channel: Pick,\n member: ChannelMembership | undefined,\n skipChecks: boolean,\n isCrtReply: boolean,\n) {\n const currentUserId = getCurrentUserId(state);\n if ((currentUserId === post.user_id && post.props.from_webhook !== 'true')) {\n return {status: 'not_sent', reason: 'own_post'};\n }\n\n if (isSystemMessage(post) && !isUserAddedInChannel(post, currentUserId)) {\n return {status: 'not_sent', reason: 'system_message'};\n }\n\n if (!member) {\n return {status: 'error', reason: 'no_member'};\n }\n\n if (skipChecks) {\n return undefined;\n }\n\n if (isChannelMuted(member)) {\n return {status: 'not_sent', reason: 'channel_muted'};\n }\n\n const userStatus = getStatusForUserId(state, user.id);\n if ((userStatus === UserStatuses.DND || userStatus === UserStatuses.OUT_OF_OFFICE)) {\n return {status: 'not_sent', reason: 'user_status', data: userStatus};\n }\n\n let mentions = [];\n if (msgProps.mentions) {\n mentions = JSON.parse(msgProps.mentions);\n }\n\n let followers = [];\n if (msgProps.followers) {\n followers = JSON.parse(msgProps.followers);\n mentions = [...new Set([...followers, ...mentions])];\n }\n\n const channelNotifyProp = member?.notify_props?.desktop || NotificationLevels.DEFAULT;\n let notifyLevel = channelNotifyProp;\n\n if (notifyLevel === NotificationLevels.DEFAULT) {\n notifyLevel = user?.notify_props?.desktop || NotificationLevels.ALL;\n }\n\n if (channel?.type === 'G' && channelNotifyProp === NotificationLevels.DEFAULT && user?.notify_props?.desktop === NotificationLevels.MENTION) {\n notifyLevel = NotificationLevels.ALL;\n }\n\n if (notifyLevel === NotificationLevels.NONE) {\n return {status: 'not_sent', reason: 'notify_level_none'};\n } else if (channel?.type === 'G' && notifyLevel === NotificationLevels.MENTION) {\n // Compose the whole text in the message, including interactive messages.\n let text = post.message;\n\n // We do this on a try catch block to avoid errors from malformed props\n try {\n if (isMessageAttachmentArray(post.props.attachments)) {\n const attachments = post.props.attachments;\n function appendText(toAppend?: string) {\n if (toAppend) {\n text += `\\n${toAppend}`;\n }\n }\n for (const attachment of attachments) {\n appendText(attachment.pretext);\n appendText(attachment.title);\n appendText(attachment.text);\n appendText(attachment.footer);\n if (attachment.fields) {\n for (const field of attachment.fields) {\n appendText(field.title);\n appendText(field.value);\n }\n }\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log('Could not process the whole attachment for mentions', e);\n }\n\n const allMentions = getAllUserMentionKeys(state);\n\n const ignoreChannelMentionProp = member?.notify_props?.ignore_channel_mentions || IgnoreChannelMentions.DEFAULT;\n let ignoreChannelMention = ignoreChannelMentionProp === IgnoreChannelMentions.ON;\n if (ignoreChannelMentionProp === IgnoreChannelMentions.DEFAULT) {\n ignoreChannelMention = user?.notify_props?.channel === 'false';\n }\n\n const mentionableText = formatWithRenderer(text, new MentionableRenderer());\n let isExplicitlyMentioned = false;\n for (const mention of allMentions) {\n if (!mention || !mention.key) {\n continue;\n }\n\n if (ignoreChannelMention && ['@all', '@here', '@channel'].includes(mention.key)) {\n continue;\n }\n\n let flags = 'g';\n if (!mention.caseSensitive) {\n flags += 'i';\n }\n\n let pattern;\n if (cjkrPattern.test(mention.key)) {\n // In the case of CJK mention key, even if there's no delimiters (such as spaces) at both ends of a word, it is recognized as a mention key\n pattern = new RegExp(`()(${escapeRegex(mention.key)})()`, flags);\n } else {\n pattern = new RegExp(\n `(^|\\\\W)(${escapeRegex(mention.key)})(\\\\b|_+\\\\b)`,\n flags,\n );\n }\n\n if (pattern.test(mentionableText)) {\n isExplicitlyMentioned = true;\n break;\n }\n }\n\n if (!isExplicitlyMentioned) {\n return {status: 'not_sent', reason: 'not_explicitly_mentioned', data: mentionableText};\n }\n } else if (notifyLevel === NotificationLevels.MENTION && mentions.indexOf(user.id) === -1 && msgProps.channel_type !== Constants.DM_CHANNEL) {\n return {status: 'not_sent', reason: 'not_mentioned'};\n } else if (isCrtReply && notifyLevel === NotificationLevels.ALL && followers.indexOf(currentUserId) === -1) {\n // if user is not following the thread don't notify\n return {status: 'not_sent', reason: 'not_following_thread'};\n }\n\n // Notify if you're not looking in the right channel or when\n // the window itself is not active\n const activeChannel = getCurrentChannel(state);\n const channelId = channel ? channel.id : null;\n\n if (state.views.browser.focused) {\n if (isCrtReply) {\n if (isThreadOpen(state, post.root_id)) {\n return {status: 'not_sent', reason: 'thread_is_open', data: post.root_id};\n }\n } else if (activeChannel && activeChannel.id === channelId) {\n return {status: 'not_sent', reason: 'channel_is_open', data: activeChannel?.id};\n }\n }\n\n return undefined;\n}\n\nexport function notifyMe(title: string, body: string, channelId: string, teamId: string, silent: boolean, soundName: string, url: string): ActionFuncAsync {\n return async (dispatch) => {\n // handle notifications in desktop app\n if (isDesktopApp()) {\n const result = await DesktopApp.dispatchNotification(title, body, channelId, teamId, silent, soundName, url);\n return {data: result};\n }\n\n try {\n const result = await dispatch(showNotification({\n title,\n body,\n requireInteraction: false,\n silent,\n onClick: () => {\n window.focus();\n getHistory().push(url);\n },\n }));\n return {data: result};\n } catch (error) {\n dispatch(logError(error));\n return {data: {status: 'error', reason: 'notification_api', data: String(error)}};\n }\n };\n}\n\nexport const sendTestNotification = async () => {\n try {\n const result = await Client4.sendTestNotificaiton();\n return result;\n } catch (error) {\n return error;\n }\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {Link} from 'react-router-dom';\n\nimport {GenericModal} from '@mattermost/components';\n\nimport ExternalLink from 'components/external_link';\n\nexport default function ReactionLimitReachedModal(props: {isAdmin: boolean; onExited: () => void}) {\n const body = props.isAdmin ? (\n set a limit to keep things running smoothly on your server. As a system administrator, you can adjust this limit from the system console.\"\n values={{\n link: (msg: React.ReactNode) => (\n \n {msg}\n \n ),\n linkAdmin: (msg: React.ReactNode) => (\n \n {msg}\n \n ),\n }}\n />\n ) : (\n \n );\n\n return (\n \n }\n compassDesign={true}\n confirmButtonText={\n \n }\n onExited={props.onExited}\n handleConfirm={props.onExited}\n >\n {body}\n \n );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {FileInfo} from '@mattermost/types/files';\nimport type {GroupChannel} from '@mattermost/types/groups';\nimport type {Post} from '@mattermost/types/posts';\nimport type {ScheduledPost} from '@mattermost/types/schedule_post';\n\nimport {SearchTypes} from 'mattermost-redux/action_types';\nimport {getMyChannelMember} from 'mattermost-redux/actions/channels';\nimport * as PostActions from 'mattermost-redux/actions/posts';\nimport {createSchedulePost} from 'mattermost-redux/actions/scheduled_posts';\nimport * as ThreadActions from 'mattermost-redux/actions/threads';\nimport {getChannel, getMyChannelMember as getMyChannelMemberSelector} from 'mattermost-redux/selectors/entities/channels';\nimport {makeGetFilesForPost} from 'mattermost-redux/selectors/entities/files';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport * as PostSelectors from 'mattermost-redux/selectors/entities/posts';\nimport {isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserId, isCurrentUserSystemAdmin} from 'mattermost-redux/selectors/entities/users';\nimport {canEditPost, comparePosts} from 'mattermost-redux/utils/post_utils';\n\nimport {addRecentEmoji, addRecentEmojis} from 'actions/emoji_actions';\nimport {setGlobalItem} from 'actions/storage';\nimport * as StorageActions from 'actions/storage';\nimport {loadNewDMIfNeeded, loadNewGMIfNeeded} from 'actions/user_actions';\nimport {removeDraft} from 'actions/views/drafts';\nimport {closeModal, openModal} from 'actions/views/modals';\nimport * as RhsActions from 'actions/views/rhs';\nimport {manuallyMarkThreadAsUnread} from 'actions/views/threads';\nimport {getConnectionId} from 'selectors/general';\nimport {isEmbedVisible, isInlineImageVisible} from 'selectors/posts';\nimport {getSelectedPostId, getSelectedPostCardId, getRhsState} from 'selectors/rhs';\nimport {getGlobalItem} from 'selectors/storage';\n\nimport ReactionLimitReachedModal from 'components/reaction_limit_reached_modal';\n\nimport {\n ActionTypes,\n Constants,\n ModalIdentifiers,\n RHSStates,\n StoragePrefixes,\n} from 'utils/constants';\nimport {matchEmoticons} from 'utils/emoticons';\nimport {makeGetIsReactionAlreadyAddedToPost, makeGetUniqueEmojiNameReactionsForPost} from 'utils/post_utils';\n\nimport type {\n GlobalState,\n DispatchFunc,\n ActionFunc,\n ActionFuncAsync,\n ThunkActionFunc,\n} from 'types/store';\nimport type {PostDraft} from 'types/store/draft';\nimport type {StorageItem} from 'types/store/storage';\n\nimport type {NewPostMessageProps} from './new_post';\nimport {completePostReceive} from './new_post';\nimport type {OnSubmitOptions, SubmitPostReturnType} from './views/create_comment';\n\nexport type CreatePostOptions = {\n keepDraft?: boolean;\n ignorePostError?: boolean;\n}\n\nexport function handleNewPost(post: Post, msg?: {data?: NewPostMessageProps & GroupChannel}): ActionFuncAsync {\n return async (dispatch, getState) => {\n let websocketMessageProps = {};\n const state = getState();\n if (msg) {\n websocketMessageProps = msg.data!;\n }\n\n const myChannelMember = getMyChannelMemberSelector(state, post.channel_id);\n const myChannelMemberDoesntExist = !myChannelMember || (Object.keys(myChannelMember).length === 0 && myChannelMember.constructor === Object);\n\n if (myChannelMemberDoesntExist) {\n await dispatch(getMyChannelMember(post.channel_id));\n }\n\n dispatch(completePostReceive(post, websocketMessageProps as NewPostMessageProps, myChannelMemberDoesntExist));\n\n if (msg && msg.data) {\n if (msg.data.channel_type === Constants.DM_CHANNEL) {\n dispatch(loadNewDMIfNeeded(post.channel_id));\n } else if (msg.data.channel_type === Constants.GM_CHANNEL) {\n dispatch(loadNewGMIfNeeded(post.channel_id));\n }\n }\n\n return {data: true};\n };\n}\n\nconst getPostsForIds = PostSelectors.makeGetPostsForIds();\n\nexport function flagPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n await dispatch(PostActions.flagPost(postId));\n const state = getState();\n const rhsState = getRhsState(state);\n\n if (rhsState === RHSStates.FLAG) {\n dispatch(addPostToSearchResults(postId));\n }\n\n return {data: true};\n };\n}\n\nexport function unflagPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n await dispatch(PostActions.unflagPost(postId));\n const state = getState();\n const rhsState = getRhsState(state);\n\n if (rhsState === RHSStates.FLAG) {\n removePostFromSearchResults(postId, state, dispatch);\n }\n\n return {data: true};\n };\n}\n\nfunction addRecentEmojisForMessage(message: string): ActionFunc {\n return (dispatch) => {\n // parse message and emit emoji event\n const emojis = matchEmoticons(message);\n if (emojis) {\n const trimmedEmojis = emojis.map((emoji) => emoji.substring(1, emoji.length - 1));\n dispatch(addRecentEmojis(trimmedEmojis));\n }\n return {data: true};\n };\n}\n\nexport function createPost(\n post: Post,\n files: FileInfo[],\n afterSubmit?: (response: SubmitPostReturnType) => void,\n options?: OnSubmitOptions,\n): ActionFuncAsync {\n return async (dispatch) => {\n dispatch(addRecentEmojisForMessage(post.message));\n\n const result = await dispatch(PostActions.createPost(post, files, afterSubmit));\n\n if (!options?.keepDraft) {\n if (post.root_id) {\n dispatch(storeCommentDraft(post.root_id, null));\n } else {\n dispatch(storeDraft(post.channel_id, null));\n }\n }\n\n options?.afterOptimisticSubmit?.();\n return result;\n };\n}\n\nexport function createSchedulePostFromDraft(scheduledPost: ScheduledPost): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch(addRecentEmojisForMessage(scheduledPost.message));\n\n const state = getState();\n const connectionId = getConnectionId(state);\n const channel = state.entities.channels.channels[scheduledPost.channel_id];\n const result = await dispatch(createSchedulePost(scheduledPost, channel.team_id, connectionId));\n\n return {\n created: !result.error && result.data,\n error: result.error,\n };\n };\n}\n\nfunction storeDraft(channelId: string, draft: null): ActionFunc {\n return (dispatch) => {\n dispatch(StorageActions.setGlobalItem('draft_' + channelId, draft));\n return {data: true};\n };\n}\n\nfunction storeCommentDraft(rootPostId: string, draft: null): ActionFunc {\n return (dispatch) => {\n dispatch(StorageActions.setGlobalItem('comment_draft_' + rootPostId, draft));\n return {data: true};\n };\n}\n\nexport function submitReaction(postId: string, action: string, emojiName: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const getIsReactionAlreadyAddedToPost = makeGetIsReactionAlreadyAddedToPost();\n\n const isReactionAlreadyAddedToPost = getIsReactionAlreadyAddedToPost(state, postId, emojiName);\n\n if (action === '+' && !isReactionAlreadyAddedToPost) {\n return dispatch(addReaction(postId, emojiName));\n } else if (action === '-' && isReactionAlreadyAddedToPost) {\n return dispatch(PostActions.removeReaction(postId, emojiName));\n }\n return {error: new Error(`unknown action ${action}`)};\n };\n}\n\nexport function toggleReaction(postId: string, emojiName: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const getIsReactionAlreadyAddedToPost = makeGetIsReactionAlreadyAddedToPost();\n\n const isReactionAlreadyAddedToPost = getIsReactionAlreadyAddedToPost(state, postId, emojiName);\n\n if (isReactionAlreadyAddedToPost) {\n return dispatch(PostActions.removeReaction(postId, emojiName));\n }\n return dispatch(addReaction(postId, emojiName));\n };\n}\n\nexport function addReaction(postId: string, emojiName: string): ActionFuncAsync {\n const getUniqueEmojiNameReactionsForPost = makeGetUniqueEmojiNameReactionsForPost();\n return async (dispatch, getState) => {\n const state = getState();\n const config = getConfig(state);\n const uniqueEmojiNames = getUniqueEmojiNameReactionsForPost(state, postId) ?? [];\n\n // If we're adding a new reaction but we're already at or over the limit, stop\n if (uniqueEmojiNames.length >= Number(config.UniqueEmojiReactionLimitPerPost) && !uniqueEmojiNames.some((name) => name === emojiName)) {\n dispatch(openModal({\n modalId: ModalIdentifiers.REACTION_LIMIT_REACHED,\n dialogType: ReactionLimitReachedModal,\n dialogProps: {\n isAdmin: isCurrentUserSystemAdmin(state),\n onExited: () => closeModal(ModalIdentifiers.REACTION_LIMIT_REACHED),\n },\n }));\n return {error: new Error('reached reaction limit')};\n }\n\n dispatch(addRecentEmoji(emojiName));\n const result = await dispatch(PostActions.addReaction(postId, emojiName));\n return result;\n };\n}\n\nexport function searchForTerm(term: string): ActionFunc {\n return (dispatch) => {\n dispatch(RhsActions.updateSearchTerms(term));\n dispatch(RhsActions.showSearchResults());\n return {data: true};\n };\n}\n\nfunction addPostToSearchResults(postId: string): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const results = state.entities.search.results;\n const index = results.indexOf(postId);\n if (index === -1) {\n const newPost = PostSelectors.getPost(state, postId);\n const posts = getPostsForIds(state, results).reduce((acc, post) => {\n acc[post.id] = post;\n return acc;\n }, {} as Record);\n posts[newPost.id] = newPost;\n\n const newResults = [...results, postId];\n newResults.sort((a, b) => comparePosts(posts[a], posts[b]));\n\n dispatch({\n type: SearchTypes.RECEIVED_SEARCH_POSTS,\n data: {posts, order: newResults},\n });\n }\n return {data: true};\n };\n}\n\nfunction removePostFromSearchResults(postId: string, state: GlobalState, dispatch: DispatchFunc) {\n let results = state.entities.search.results;\n const index = results.indexOf(postId);\n if (index > -1) {\n results = [...results];\n results.splice(index, 1);\n\n const posts = getPostsForIds(state, results);\n\n dispatch({\n type: SearchTypes.RECEIVED_SEARCH_POSTS,\n data: {posts, order: results},\n });\n }\n}\n\nexport function pinPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n await dispatch(PostActions.pinPost(postId));\n const state = getState();\n const rhsState = getRhsState(state);\n\n if (rhsState === RHSStates.PIN) {\n dispatch(addPostToSearchResults(postId));\n }\n return {data: true};\n };\n}\n\nexport function unpinPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n await dispatch(PostActions.unpinPost(postId));\n const state = getState();\n const rhsState = getRhsState(state);\n\n if (rhsState === RHSStates.PIN) {\n removePostFromSearchResults(postId, state, dispatch);\n }\n return {data: true};\n };\n}\n\nexport function setEditingPost(postId = '', refocusId = '', isRHS = false): ActionFunc {\n const getFilesForPost = makeGetFilesForPost();\n\n return (dispatch, getState) => {\n const state = getState();\n let post = PostSelectors.getPost(state, postId);\n\n // getPost selectors doesn't include post's file metadata, so we need to add it manually\n if (post.file_ids?.length) {\n // if the post has files, get their metadata and insert it into the post object\n const files = getFilesForPost(state, postId);\n post = {...post, metadata: {...post.metadata, files}};\n }\n\n if (!post || post.pending_post_id === postId) {\n return {data: false};\n }\n\n const config = state.entities.general.config;\n const license = state.entities.general.license;\n const userId = getCurrentUserId(state);\n const channel = getChannel(state, post.channel_id);\n const teamId = channel?.team_id || '';\n\n const canEdit = canEditPost(state, config, license, teamId, post.channel_id, userId, post);\n\n if (!canEdit) {\n return {data: false};\n }\n\n const storageKey = `${StoragePrefixes.EDIT_DRAFT}${post.id}`;\n\n const actions: AnyAction[] = [{\n type: ActionTypes.TOGGLE_EDITING_POST,\n data: {postId, refocusId, isRHS, show: true},\n }];\n\n // We need to see if post's draft is already in store, if it is, we don't need to set it again\n const editDraftInStore = getGlobalItem(state, storageKey, null) as StorageItem['value'] | null;\n\n if (\n !editDraftInStore ||\n (editDraftInStore &&\n editDraftInStore?.message?.length === 0 &&\n editDraftInStore?.fileInfos?.length === 0 &&\n editDraftInStore?.uploadsInProgress?.length === 0\n )\n ) {\n actions.push(setGlobalItem(storageKey, post));\n }\n\n dispatch(batchActions(actions));\n\n return {data: true};\n };\n}\n\nexport function unsetEditingPost(): ActionFunc {\n return (dispatch, getState) => {\n const editingPostId = getState().views.posts.editingPost.postId;\n\n const actions: AnyAction[] = [{\n type: ActionTypes.TOGGLE_EDITING_POST,\n data: {\n show: false,\n },\n }];\n\n if (editingPostId) {\n const storageKey = `${StoragePrefixes.EDIT_DRAFT}${editingPostId}`;\n actions.push(StorageActions.removeGlobalItem(storageKey));\n }\n\n dispatch(batchActions(actions));\n\n return {data: true};\n };\n}\n\nexport function markPostAsUnread(post: Post, location?: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const userId = getCurrentUserId(state);\n const currentTeamId = getCurrentTeamId(state);\n\n // if CRT:ON and this is from within ThreadViewer (e.g. post dot-menu), mark the thread as unread and followed\n if (isCollapsedThreadsEnabled(state) && (location === 'RHS_ROOT' || location === 'RHS_COMMENT')) {\n const threadId = post.root_id || post.id;\n ThreadActions.handleFollowChanged(dispatch, threadId, currentTeamId, true);\n dispatch(manuallyMarkThreadAsUnread(threadId, post.create_at - 1));\n await dispatch(ThreadActions.markThreadAsUnread(userId, currentTeamId, threadId, post.id));\n } else {\n // use normal channel unread system\n await dispatch(PostActions.setUnreadPost(userId, post.id));\n }\n\n return {data: true};\n };\n}\n\nexport function markMostRecentPostInChannelAsUnread(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let state = getState();\n let postId = PostSelectors.getMostRecentPostIdInChannel(state, channelId);\n if (!postId) {\n await dispatch(PostActions.getPosts(channelId));\n state = getState();\n postId = PostSelectors.getMostRecentPostIdInChannel(state, channelId);\n }\n if (postId) {\n const lastPost = PostSelectors.getPost(state, postId);\n dispatch(markPostAsUnread(lastPost, 'CENTER'));\n }\n return {data: true};\n };\n}\n\n// Action called by DeletePostModal when the post is deleted\nexport function deleteAndRemovePost(post: Post): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {error} = await dispatch(PostActions.deletePost(post));\n if (error) {\n return {error};\n }\n\n if (post.id === getSelectedPostId(getState())) {\n dispatch({\n type: ActionTypes.SELECT_POST,\n postId: '',\n channelId: '',\n timestamp: 0,\n });\n }\n\n if (post.id === getSelectedPostCardId(getState())) {\n dispatch({\n type: ActionTypes.SELECT_POST_CARD,\n postId: '',\n channelId: '',\n });\n }\n\n if (post.root_id === '') {\n const key = StoragePrefixes.COMMENT_DRAFT + post.id;\n if (getGlobalItem(getState(), key, null)) {\n dispatch(removeDraft(key, post.channel_id, post.id));\n }\n }\n\n dispatch(PostActions.removePost(post));\n\n return {data: true};\n };\n}\n\nexport function toggleEmbedVisibility(postId: string): ThunkActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const visible = isEmbedVisible(state, postId);\n\n dispatch(StorageActions.setGlobalItem(StoragePrefixes.EMBED_VISIBLE + currentUserId + '_' + postId, !visible));\n };\n}\n\nexport function resetEmbedVisibility() {\n return StorageActions.actionOnGlobalItemsWithPrefix(StoragePrefixes.EMBED_VISIBLE, () => null);\n}\n\nexport function toggleInlineImageVisibility(postId: string, imageKey: string): ThunkActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const visible = isInlineImageVisible(state, postId, imageKey);\n\n dispatch(StorageActions.setGlobalItem(StoragePrefixes.INLINE_IMAGE_VISIBLE + currentUserId + '_' + postId + '_' + imageKey, !visible));\n };\n}\n\nexport function resetInlineImageVisibility() {\n return StorageActions.actionOnGlobalItemsWithPrefix(StoragePrefixes.INLINE_IMAGE_VISIBLE, () => null);\n}\n\n/*\n * It is called from either center or rhs text input when shortcut for react to last message is pressed\n *\n * @param {string} emittedFrom - It can be either \"CENTER\", \"RHS_ROOT\" or \"NO_WHERE\"\n */\nexport function emitShortcutReactToLastPostFrom(emittedFrom: keyof typeof Constants.Locations) {\n return {\n type: ActionTypes.EMITTED_SHORTCUT_REACT_TO_LAST_POST,\n payload: emittedFrom,\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {ChannelType} from '@mattermost/types/channels';\nimport type {Post} from '@mattermost/types/posts';\n\nimport {\n actionsToMarkChannelAsRead,\n actionsToMarkChannelAsUnread,\n markChannelAsViewedOnServer,\n} from 'mattermost-redux/actions/channels';\nimport * as PostActions from 'mattermost-redux/actions/posts';\nimport {getCurrentChannelId, isManuallyUnread} from 'mattermost-redux/selectors/entities/channels';\nimport * as PostSelectors from 'mattermost-redux/selectors/entities/posts';\nimport {isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getThread} from 'mattermost-redux/selectors/entities/threads';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport {\n isFromWebhook,\n isSystemMessage,\n shouldIgnorePost,\n} from 'mattermost-redux/utils/post_utils';\n\nimport {sendDesktopNotification} from 'actions/notification_actions';\nimport {updateThreadLastOpened} from 'actions/views/threads';\nimport {isThreadOpen, makeGetThreadLastViewedAt} from 'selectors/views/threads';\n\nimport WebSocketClient from 'client/web_websocket_client';\nimport {ActionTypes} from 'utils/constants';\n\nimport type {DispatchFunc, GetStateFunc, ActionFunc, ActionFuncAsync} from 'types/store';\n\nexport type NewPostMessageProps = {\n channel_type: ChannelType;\n channel_display_name: string;\n channel_name: string;\n sender_name: string;\n set_online: boolean;\n mentions?: string;\n followers?: string;\n team_id: string;\n should_ack: boolean;\n otherFile?: 'true';\n image?: 'true';\n post: string;\n}\n\nexport function completePostReceive(post: Post, websocketMessageProps: NewPostMessageProps, fetchedChannelMember?: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const rootPost = PostSelectors.getPost(state, post.root_id);\n const isPostFromCurrentChannel = post.channel_id === getCurrentChannelId(state);\n\n if (post.root_id && !rootPost && isPostFromCurrentChannel) {\n const result = await dispatch(PostActions.getPostThread(post.root_id));\n\n if ('error' in result) {\n if (websocketMessageProps.should_ack) {\n WebSocketClient.acknowledgePostedNotification(post.id, 'error', 'missing_root_post', result.error);\n }\n return {error: result.error};\n }\n }\n const actions: AnyAction[] = [];\n\n if (isPostFromCurrentChannel) {\n actions.push({\n type: ActionTypes.INCREASE_POST_VISIBILITY,\n data: post.channel_id,\n amount: 1,\n });\n }\n\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(state);\n const isCRTReply = collapsedThreadsEnabled && post.root_id;\n\n actions.push(\n PostActions.receivedNewPost(post, collapsedThreadsEnabled),\n );\n\n const currentUserId = getCurrentUserId(state);\n const isCRTReplyByCurrentUser = isCRTReply && post.user_id === currentUserId;\n if (!isCRTReplyByCurrentUser) {\n actions.push(\n ...setChannelReadAndViewed(dispatch, getState, post as Post, websocketMessageProps, fetchedChannelMember),\n );\n }\n dispatch(batchActions(actions));\n\n if (isCRTReply) {\n dispatch(setThreadRead(post));\n }\n\n const {status, reason, data} = (await dispatch(sendDesktopNotification(post, websocketMessageProps))).data!;\n\n // Only ACK for posts that require it\n if (websocketMessageProps.should_ack) {\n WebSocketClient.acknowledgePostedNotification(post.id, status, reason, data);\n }\n\n return {data: true};\n };\n}\n\n// setChannelReadAndViewed returns an array of actions to mark the channel read and viewed, and it dispatches an action\n// to asynchronously mark the channel as read on the server if necessary.\nexport function setChannelReadAndViewed(dispatch: DispatchFunc, getState: GetStateFunc, post: Post, websocketMessageProps: NewPostMessageProps, fetchedChannelMember?: boolean): AnyAction[] {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n\n // ignore system message posts, except when added to a team\n if (shouldIgnorePost(post, currentUserId)) {\n return [];\n }\n\n let markAsRead = false;\n let markAsReadOnServer = false;\n\n // Skip marking a channel as read (when the user is viewing a channel)\n // if they have manually marked it as unread.\n if (!isManuallyUnread(getState(), post.channel_id)) {\n if (\n post.user_id === getCurrentUserId(state) &&\n !isSystemMessage(post) &&\n !isFromWebhook(post)\n ) {\n markAsRead = true;\n markAsReadOnServer = false;\n } else if (\n post.channel_id === getCurrentChannelId(state) &&\n window.isActive\n ) {\n markAsRead = true;\n markAsReadOnServer = true;\n }\n }\n\n if (markAsRead) {\n if (markAsReadOnServer) {\n dispatch(markChannelAsViewedOnServer(post.channel_id));\n }\n\n return actionsToMarkChannelAsRead(getState, post.channel_id);\n }\n\n return actionsToMarkChannelAsUnread(getState, websocketMessageProps.team_id, post.channel_id, websocketMessageProps.mentions || '', fetchedChannelMember, post.root_id === '', post?.metadata?.priority?.priority);\n}\n\nexport function setThreadRead(post: Post): ActionFunc {\n const getThreadLastViewedAt = makeGetThreadLastViewedAt();\n return (dispatch, getState) => {\n const state = getState();\n\n const thread = getThread(state, post.root_id);\n\n // mark a thread as read (when the user is viewing the thread)\n if (thread && isThreadOpen(state, thread.id) && window.isActive) {\n // update the new messages line (when there are no previous unreads)\n if (thread.last_reply_at < getThreadLastViewedAt(state, thread.id)) {\n dispatch(updateThreadLastOpened(thread.id, post.create_at));\n }\n }\n\n return {data: true};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {addUserIdsForStatusFetchingPoll} from 'mattermost-redux/actions/status_profile_polling';\nimport {getStatusesByIds} from 'mattermost-redux/actions/users';\nimport {getCurrentChannelId} from 'mattermost-redux/selectors/entities/channels';\nimport {getIsUserStatusesConfigEnabled} from 'mattermost-redux/selectors/entities/common';\nimport {getPostsInCurrentChannel} from 'mattermost-redux/selectors/entities/posts';\nimport {getDirectShowPreferences} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {loadCustomEmojisForCustomStatusesByUserIds} from 'actions/emoji_actions';\n\nimport type {ActionFunc} from 'types/store';\n\n/**\n * Adds the following users to the status pool for fetching their statuses:\n * - All users of current channel with recent posts.\n * - All users who have DMs open with the current user.\n * - The current user.\n */\nexport function addVisibleUsersInCurrentChannelAndSelfToStatusPoll(): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const currentChannelId = getCurrentChannelId(state);\n const postsInChannel = getPostsInCurrentChannel(state);\n const numberOfPostsVisibleInCurrentChannel = state.views.channel.postVisibility[currentChannelId] || 0;\n\n const userIdsToFetchStatusFor = new Set();\n\n // We fetch for users who have recently posted in the current channel\n if (postsInChannel && numberOfPostsVisibleInCurrentChannel > 0) {\n const posts = postsInChannel.slice(0, numberOfPostsVisibleInCurrentChannel);\n for (const post of posts) {\n if (post.user_id && post.user_id !== currentUserId) {\n userIdsToFetchStatusFor.add(post.user_id);\n }\n }\n }\n\n // We also fetch for users who have DMs open with the current user\n const directShowPreferences = getDirectShowPreferences(state);\n for (const directShowPreference of directShowPreferences) {\n if (directShowPreference.value === 'true') {\n // This is the other user's id in the DM\n userIdsToFetchStatusFor.add(directShowPreference.name);\n }\n }\n\n // Add current user to the list to fetch status for\n userIdsToFetchStatusFor.add(currentUserId);\n\n // Both the users in the DM list and recent posts constitute for all the visible users in the current channel\n const userIdsForStatus = Array.from(userIdsToFetchStatusFor);\n if (userIdsForStatus.length > 0) {\n dispatch(addUserIdsForStatusFetchingPoll(userIdsForStatus));\n }\n\n return {data: true};\n };\n}\n\nexport function loadStatusesForProfilesList(users: UserProfile[] | null): ActionFunc {\n return (dispatch) => {\n if (users == null) {\n return {data: false};\n }\n\n const statusesToLoad = [];\n for (let i = 0; i < users.length; i++) {\n statusesToLoad.push(users[i].id);\n }\n\n dispatch(loadStatusesByIds(statusesToLoad));\n\n return {data: true};\n };\n}\n\nexport function loadStatusesForProfilesMap(users: Record | UserProfile[] | null): ActionFunc {\n return (dispatch) => {\n if (users == null) {\n return {data: false};\n }\n\n const statusesToLoad = [];\n for (const userId in users) {\n if (Object.hasOwn(users, userId)) {\n statusesToLoad.push(userId);\n }\n }\n\n dispatch(loadStatusesByIds(statusesToLoad));\n\n return {data: true};\n };\n}\n\nexport function loadStatusesByIds(userIds: string[]): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const enabledUserStatuses = getIsUserStatusesConfigEnabled(state);\n\n if (userIds.length === 0 || !enabledUserStatuses) {\n return {data: false};\n }\n\n dispatch(getStatusesByIds(userIds));\n dispatch(loadCustomEmojisForCustomStatusesByUserIds(userIds));\n return {data: true};\n };\n}\n\nexport function loadProfilesMissingStatus(users: UserProfile[]): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const enabledUserStatuses = getIsUserStatusesConfigEnabled(state);\n\n const statuses = state.entities.users.statuses;\n\n const missingStatusByIds = users.\n filter((user) => !statuses[user.id]).\n map((user) => user.id);\n\n if (missingStatusByIds.length === 0 || !enabledUserStatuses) {\n return {data: false};\n }\n\n dispatch(getStatusesByIds(missingStatusByIds));\n dispatch(loadCustomEmojisForCustomStatusesByUserIds(missingStatusByIds));\n return {data: true};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {Team, TeamMemberWithError} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {TeamTypes} from 'mattermost-redux/action_types';\nimport {getChannelStats} from 'mattermost-redux/actions/channels';\nimport {logError} from 'mattermost-redux/actions/errors';\nimport {savePreferences} from 'mattermost-redux/actions/preferences';\nimport * as TeamActions from 'mattermost-redux/actions/teams';\nimport {selectTeam} from 'mattermost-redux/actions/teams';\nimport {getUser} from 'mattermost-redux/actions/users';\nimport {Client4} from 'mattermost-redux/client';\nimport {getCurrentChannelId} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {getHistory} from 'utils/browser_history';\nimport {Preferences} from 'utils/constants';\n\nimport type {ActionFuncAsync, ThunkActionFunc} from 'types/store';\n\nexport function removeUserFromTeamAndGetStats(teamId: Team['id'], userId: UserProfile['id']): ActionFuncAsync {\n return async (dispatch, getState) => {\n const response = await dispatch(TeamActions.removeUserFromTeam(teamId, userId));\n dispatch(getUser(userId));\n dispatch(TeamActions.getTeamStats(teamId));\n dispatch(getChannelStats(getCurrentChannelId(getState())));\n return response;\n };\n}\n\nexport function addUserToTeamFromInvite(token: string, inviteId: string): ActionFuncAsync {\n return async (dispatch) => {\n const {data: member, error} = await dispatch(TeamActions.addUserToTeamFromInvite(token, inviteId));\n if (member) {\n const {data} = await dispatch(TeamActions.getTeam(member.team_id));\n\n dispatch({\n type: TeamTypes.RECEIVED_MY_TEAM_MEMBER,\n data: {\n ...member,\n delete_at: 0,\n msg_count: 0,\n mention_count: 0,\n },\n });\n\n return {data};\n }\n return {error};\n };\n}\n\nexport function addUserToTeam(teamId: Team['id'], userId: UserProfile['id']): ActionFuncAsync {\n return async (dispatch) => {\n const {data: member, error} = await dispatch(TeamActions.addUserToTeam(teamId, userId));\n if (member) {\n const {data} = await dispatch(TeamActions.getTeam(member.team_id));\n\n dispatch({\n type: TeamTypes.RECEIVED_MY_TEAM_MEMBER,\n data: {\n ...member,\n delete_at: 0,\n msg_count: 0,\n mention_count: 0,\n },\n });\n\n return {data};\n }\n return {error};\n };\n}\n\nexport function addUsersToTeam(teamId: Team['id'], userIds: Array): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {data, error} = await dispatch(TeamActions.addUsersToTeamGracefully(teamId, userIds));\n\n if (error) {\n return {error};\n }\n\n dispatch(getChannelStats(getCurrentChannelId(getState())));\n\n return {data};\n };\n}\n\nexport function switchTeam(url: string, team?: Team): ThunkActionFunc {\n return (dispatch) => {\n // In Channels, the team argument is undefined, and team switching is done by pushing a URL onto history.\n // In other products, a team is passed instead of a URL because the current team isn't tied to the page URL.\n //\n // Note that url may also be a non-team URL since this is called when switching to the Create Team page\n // from the team sidebar as well.\n if (team) {\n dispatch(selectTeam(team));\n } else {\n getHistory().push(url);\n }\n };\n}\n\nexport function updateTeamsOrderForUser(teamIds: Array): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const teamOrderPreferences = [{\n user_id: currentUserId,\n name: '',\n category: Preferences.TEAMS_ORDER,\n value: teamIds.join(','),\n }];\n return dispatch(savePreferences(currentUserId, teamOrderPreferences));\n };\n}\n\nexport function getGroupMessageMembersCommonTeams(channelId: string): ActionFuncAsync {\n return async (dispatch) => {\n let teams: Team[];\n\n try {\n const response = await Client4.getGroupMessageMembersCommonTeams(channelId);\n teams = response.data;\n } catch (error) {\n dispatch(logError(error as ServerError));\n return {error: error as ServerError};\n }\n\n return {data: teams};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Client4} from 'mattermost-redux/client';\nimport {Preferences} from 'mattermost-redux/constants';\nimport {getSortedTrackedSelectors} from 'mattermost-redux/selectors/create_selector';\nimport {getConfig, isPerformanceDebuggingEnabled} from 'mattermost-redux/selectors/entities/general';\nimport {getBool} from 'mattermost-redux/selectors/entities/preferences';\n\nimport {isDevModeEnabled} from 'selectors/general';\nimport store from 'stores/redux_store';\n\nconst HEADER_X_PAGE_LOAD_CONTEXT = 'X-Page-Load-Context';\n\nexport function isTelemetryEnabled(state) {\n const config = getConfig(state);\n return config.DiagnosticsEnabled === 'true';\n}\n\nexport function shouldTrackPerformance(state = store.getState()) {\n return isDevModeEnabled(state) || isTelemetryEnabled(state);\n}\n\nexport function trackEvent(category, event, props = {}) {\n const state = store.getState();\n if (\n isPerformanceDebuggingEnabled(state) &&\n getBool(state, Preferences.CATEGORY_PERFORMANCE_DEBUGGING, Preferences.NAME_DISABLE_TELEMETRY)\n ) {\n return;\n }\n\n Client4.trackEvent(category, event, props);\n\n if (isDevModeEnabled(state) && category === 'performance' && props) {\n // eslint-disable-next-line no-console\n console.log(event + ' - ' + Object.entries(props).map(([key, value]) => `${key}: ${value}`).join(', '));\n }\n}\n\nexport function trackFeatureEvent(featureName, event, props = {}) {\n Client4.trackFeatureEvent(featureName, event, props);\n}\n\nexport function pageVisited(category, name) {\n Client4.pageVisited(category, name);\n}\n\n/**\n * Takes an array of string names of performance markers and invokes\n * performance.clearMarkers on each.\n * @param {array} names of markers to clear\n *\n */\nexport function clearMarks(names) {\n names.forEach((name) => performance.clearMarks(name));\n}\n\nexport function mark(name) {\n performance.mark(name);\n\n if (!shouldTrackPerformance()) {\n return;\n }\n\n initRequestCountingIfNecessary();\n updateRequestCountAtMark(name);\n}\n\n/**\n * Takes the names of two markers and returns the number of requests sent between them.\n *\n * @param {string} name1 the first marker\n * @param {string} name2 the second marker\n *\n * @returns {number} Returns a request count of -1 if performance isn't being tracked\n *\n */\nexport function countRequestsBetween(name1, name2) {\n if (!shouldTrackPerformance()) {\n return -1;\n }\n\n const requestCount = getRequestCountAtMark(name2) - getRequestCountAtMark(name1);\n\n return requestCount;\n}\n\n/**\n * Measures the time and number of requests on first page load.\n */\nexport function measurePageLoadTelemetry() {\n if (!isSupported([\n performance,\n performance.timing.loadEventEnd,\n performance.timing.navigationStart,\n performance.getEntriesByType('resource'),\n ])) {\n return;\n }\n\n // Must be wrapped in setTimeout because loadEventEnd property is 0\n // until onload is complete, also time added because analytics\n // code isn't loaded until a subsequent window event has fired.\n const tenSeconds = 10000;\n setTimeout(() => {\n const {loadEventEnd, navigationStart} = window.performance.timing;\n const pageLoadTime = loadEventEnd - navigationStart;\n\n let numOfRequest = 0;\n let maxAPIResourceSize = 0; // in Bytes\n let longestAPIResource = '';\n let longestAPIResourceDuration = 0;\n performance.getEntriesByType('resource').forEach((resourceTimingEntry) => {\n if (resourceTimingEntry.initiatorType === 'xmlhttprequest' || resourceTimingEntry.initiatorType === 'fetch') {\n numOfRequest++;\n maxAPIResourceSize = Math.max(maxAPIResourceSize, resourceTimingEntry.encodedBodySize);\n\n if (resourceTimingEntry.responseEnd - resourceTimingEntry.startTime > longestAPIResourceDuration) {\n longestAPIResourceDuration = resourceTimingEntry.responseEnd - resourceTimingEntry.startTime;\n longestAPIResource = resourceTimingEntry.name?.split('/api/')?.[1] ?? '';\n }\n }\n });\n\n trackEvent('performance', 'page_load', {duration: pageLoadTime, numOfRequest, maxAPIResourceSize, longestAPIResource, longestAPIResourceDuration});\n }, tenSeconds);\n}\n\nfunction isSupported(checks) {\n for (let i = 0, len = checks.length; i < len; i++) {\n const item = checks[i];\n if (typeof item === 'undefined') {\n return false;\n }\n }\n return true;\n}\n\nexport function trackPluginInitialization(plugins) {\n if (!shouldTrackPerformance()) {\n return;\n }\n\n const resourceEntries = performance.getEntriesByType('resource');\n\n let startTime = Infinity;\n let endTime = 0;\n let totalDuration = 0;\n let totalSize = 0;\n\n for (const plugin of plugins) {\n const filename = plugin.webapp.bundle_path.substring(plugin.webapp.bundle_path.lastIndexOf('/'));\n const resource = resourceEntries.find((r) => r.name.endsWith(filename));\n\n if (!resource) {\n // This should never happen, but handle it just in case\n continue;\n }\n\n startTime = Math.min(resource.startTime, startTime);\n endTime = Math.max(resource.startTime + resource.duration, endTime);\n totalDuration += resource.duration;\n totalSize += resource.encodedBodySize;\n }\n\n trackEvent('performance', 'plugins_load', {\n count: plugins.length,\n duration: endTime - startTime,\n totalDuration,\n totalSize,\n });\n}\n\nexport function trackSelectorMetrics() {\n setTimeout(() => {\n if (!shouldTrackPerformance()) {\n return;\n }\n\n const selectors = getSortedTrackedSelectors();\n const filteredSelectors = selectors.filter((selector) => selector.calls > 5);\n\n trackEvent('performance', 'least_effective_selectors', {\n after: 'one_minute',\n first: filteredSelectors[0]?.name || '',\n first_effectiveness: filteredSelectors[0]?.effectiveness,\n first_recomputations: filteredSelectors[0]?.recomputations,\n second: filteredSelectors[1]?.name || '',\n second_effectiveness: filteredSelectors[1]?.effectiveness,\n second_recomputations: filteredSelectors[1]?.recomputations,\n third: filteredSelectors[2]?.name || '',\n third_effectiveness: filteredSelectors[2]?.effectiveness,\n third_recomputations: filteredSelectors[2]?.recomputations,\n });\n }, 60000);\n}\n\nlet requestCount = 0;\nconst requestCountAtMark = {};\nlet requestObserver;\n\nfunction initRequestCountingIfNecessary() {\n if (requestObserver) {\n return;\n }\n\n requestObserver = new PerformanceObserver((entries) => {\n for (const entry of entries.getEntries()) {\n const url = entry.name;\n\n if (!url.includes('/api/v4/')) {\n // Don't count requests made outside of the MM server's API\n continue;\n }\n\n if (entry.initiatorType !== 'fetch' && entry.initiatorType !== 'xmlhttprequest') {\n // Only look for API requests made by code and ignore things like attachments thumbnails\n continue;\n }\n\n requestCount += 1;\n }\n });\n requestObserver.observe({type: 'resource', buffered: true});\n}\n\nfunction updateRequestCountAtMark(name) {\n requestCountAtMark[name] = requestCount;\n window.requestCountAtMark = requestCountAtMark;\n}\n\nfunction getRequestCountAtMark(name) {\n return requestCountAtMark[name] ?? 0;\n}\n\n/**\n * This allows the server to know that a given HTTP request occurred during page load or reconnect.\n * The server then uses this information to store metrics fields based on the request context.\n * The setTimeout approach is a \"best effort\" approach that will produce false positives.\n * A more accurate approach will result in more obtrusive code, which would add risk and maintenance cost.\n */\nexport const temporarilySetPageLoadContext = (pageLoadContext) => {\n Client4.setHeader(HEADER_X_PAGE_LOAD_CONTEXT, pageLoadContext);\n setTimeout(() => {\n Client4.removeHeader(HEADER_X_PAGE_LOAD_CONTEXT);\n }, 5000);\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {UserAutocomplete} from '@mattermost/types/autocomplete';\nimport type {Channel} from '@mattermost/types/channels';\nimport type {UserProfile, UserStatus} from '@mattermost/types/users';\n\nimport {getChannelAndMyMember, getChannelMembersByIds} from 'mattermost-redux/actions/channels';\nimport {savePreferences} from 'mattermost-redux/actions/preferences';\nimport {getTeamMembersByIds} from 'mattermost-redux/actions/teams';\nimport * as UserActions from 'mattermost-redux/actions/users';\nimport {Preferences as PreferencesRedux, General} from 'mattermost-redux/constants';\nimport {\n getChannel,\n getChannelMembersInChannels,\n getChannelMessageCount,\n getCurrentChannelId,\n getMyChannelMember,\n getMyChannels,\n} from 'mattermost-redux/selectors/entities/channels';\nimport {getIsUserStatusesConfigEnabled} from 'mattermost-redux/selectors/entities/common';\nimport {getBool, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentTeamId, getTeamMember} from 'mattermost-redux/selectors/entities/teams';\nimport * as Selectors from 'mattermost-redux/selectors/entities/users';\nimport type {ActionResult} from 'mattermost-redux/types/actions';\nimport {calculateUnreadCount} from 'mattermost-redux/utils/channel_utils';\n\nimport {loadCustomEmojisForCustomStatusesByUserIds} from 'actions/emoji_actions';\nimport {loadStatusesForProfilesList, loadStatusesForProfilesMap} from 'actions/status_actions';\nimport {getDisplayedChannels} from 'selectors/views/channel_sidebar';\nimport store from 'stores/redux_store';\n\nimport {Constants, Preferences, UserStatuses} from 'utils/constants';\nimport * as Utils from 'utils/utils';\n\nimport type {ActionFunc, ActionFuncAsync, ThunkActionFunc, GlobalState} from 'types/store';\n\nconst dispatch = store.dispatch;\nconst getState = store.getState;\n\nexport function loadProfilesAndReloadTeamMembers(page: number, perPage: number, teamId: string, options = {}): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const newTeamId = teamId || getCurrentTeamId(doGetState());\n const {data} = await doDispatch(UserActions.getProfilesInTeam(newTeamId, page, perPage, '', options));\n if (data) {\n await Promise.all([\n doDispatch(loadTeamMembersForProfilesList(data, newTeamId, true)),\n doDispatch(loadStatusesForProfilesList(data)),\n ]);\n }\n\n return {data: true};\n };\n}\n\nexport function loadProfilesAndReloadChannelMembers(page: number, perPage?: number, channelId?: string, sort = '', options = {}): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const newChannelId = channelId || getCurrentChannelId(doGetState());\n const {data} = await doDispatch(UserActions.getProfilesInChannel(newChannelId, page, perPage, sort, options));\n if (data) {\n await Promise.all([\n doDispatch(loadChannelMembersForProfilesList(data, newChannelId, true)),\n doDispatch(loadStatusesForProfilesList(data)),\n ]);\n }\n\n return {data: true};\n };\n}\n\nexport function loadProfilesAndTeamMembers(page: number, perPage: number, teamId: string, options?: Record): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const newTeamId = teamId || getCurrentTeamId(doGetState());\n const {data} = await doDispatch(UserActions.getProfilesInTeam(newTeamId, page, perPage, '', options));\n if (data) {\n doDispatch(loadTeamMembersForProfilesList(data, newTeamId));\n doDispatch(loadStatusesForProfilesList(data));\n }\n\n return {data: true};\n };\n}\n\nexport function searchProfilesAndTeamMembers(term = '', options: Record = {}): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const newTeamId = options.team_id || getCurrentTeamId(doGetState());\n const {data} = await doDispatch(UserActions.searchProfiles(term, options));\n if (data) {\n await Promise.all([\n doDispatch(loadTeamMembersForProfilesList(data, newTeamId)),\n doDispatch(loadStatusesForProfilesList(data)),\n ]);\n }\n\n return {data: true};\n };\n}\n\nexport function searchProfilesAndChannelMembers(term: string, options: Record = {}): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const newChannelId = options.in_channel_id || getCurrentChannelId(doGetState());\n const {data} = await doDispatch(UserActions.searchProfiles(term, options));\n if (data) {\n await Promise.all([\n doDispatch(loadChannelMembersForProfilesList(data, newChannelId)),\n doDispatch(loadStatusesForProfilesList(data)),\n ]);\n }\n\n return {data: true};\n };\n}\n\nexport function loadProfilesAndTeamMembersAndChannelMembers(page: number, perPage: number, teamId: string, channelId: string, options?: {active?: boolean}): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const state = doGetState();\n const teamIdParam = teamId || getCurrentTeamId(state);\n const channelIdParam = channelId || getCurrentChannelId(state);\n const {data} = await doDispatch(UserActions.getProfilesInChannel(channelIdParam, page, perPage, '', options));\n if (data) {\n const {data: listData} = await doDispatch(loadTeamMembersForProfilesList(data, teamIdParam));\n if (listData) {\n doDispatch(loadChannelMembersForProfilesList(data, channelIdParam));\n doDispatch(loadStatusesForProfilesList(data));\n }\n }\n\n return {data: true};\n };\n}\n\nexport function loadTeamMembersForProfilesList(profiles: UserProfile[], teamId: string, reloadAllMembers = false): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const state = doGetState();\n const teamIdParam = teamId || getCurrentTeamId(state);\n const membersToLoad: Record = {};\n for (let i = 0; i < profiles.length; i++) {\n const pid = profiles[i].id;\n\n if (reloadAllMembers === true || !getTeamMember(state, teamIdParam, pid)) {\n membersToLoad[pid] = true;\n }\n }\n\n const userIdsToLoad = Object.keys(membersToLoad);\n if (userIdsToLoad.length === 0) {\n return {data: true};\n }\n\n await doDispatch(getTeamMembersByIds(teamIdParam, userIdsToLoad));\n\n return {data: true};\n };\n}\n\nexport function loadProfilesWithoutTeam(page: number, perPage: number, options?: Record): ActionFuncAsync {\n return async (doDispatch) => {\n const {data} = await doDispatch(UserActions.getProfilesWithoutTeam(page, perPage, options));\n\n doDispatch(loadStatusesForProfilesMap(data!));\n\n return {data};\n };\n}\n\nexport function loadTeamMembersAndChannelMembersForProfilesList(profiles: UserProfile[], teamId: string, channelId: string): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const state = doGetState();\n const teamIdParam = teamId || getCurrentTeamId(state);\n const channelIdParam = channelId || getCurrentChannelId(state);\n const {data} = await doDispatch(loadTeamMembersForProfilesList(profiles, teamIdParam));\n if (data) {\n doDispatch(loadChannelMembersForProfilesList(profiles, channelIdParam));\n }\n\n return {data: true};\n };\n}\n\nexport function loadChannelMembersForProfilesList(profiles: UserProfile[], channelId: string, reloadAllMembers = false): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const state = doGetState();\n const channelIdParam = channelId || getCurrentChannelId(state);\n const membersToLoad: Record = {};\n for (let i = 0; i < profiles.length; i++) {\n const pid = profiles[i].id;\n\n const members = getChannelMembersInChannels(state)[channelIdParam];\n if (reloadAllMembers === true || !members || !members[pid]) {\n membersToLoad[pid] = true;\n }\n }\n\n const list = Object.keys(membersToLoad);\n if (list.length === 0) {\n return {data: true};\n }\n\n await doDispatch(getChannelMembersByIds(channelIdParam, list));\n return {data: true};\n };\n}\n\nexport function loadNewDMIfNeeded(channelId: string): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const state = doGetState();\n const currentUserId = Selectors.getCurrentUserId(state);\n\n function checkPreference(channel: Channel) {\n const userId = Utils.getUserIdFromChannelName(channel);\n\n if (!userId) {\n return {data: false};\n }\n\n const pref = getBool(state, Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, userId, false);\n if (pref === false) {\n const now = Utils.getTimestamp();\n doDispatch(savePreferences(currentUserId, [\n {user_id: currentUserId, category: Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, name: userId, value: 'true'},\n {user_id: currentUserId, category: Preferences.CATEGORY_CHANNEL_OPEN_TIME, name: channelId, value: now.toString()},\n ]));\n loadProfilesForDM();\n return {data: true};\n }\n return {data: false};\n }\n\n let result = {data: false} as ActionResult;\n\n const channel = getChannel(doGetState(), channelId);\n if (channel) {\n result = checkPreference(channel);\n } else {\n result = await doDispatch(getChannelAndMyMember(channelId));\n if (result.data) {\n result = checkPreference(result.data.channel);\n }\n }\n return result;\n };\n}\n\nexport function loadNewGMIfNeeded(channelId: string): ActionFuncAsync {\n return async (doDispatch, doGetState) => {\n const state = doGetState();\n const currentUserId = Selectors.getCurrentUserId(state);\n\n function checkPreference() {\n const pref = getBool(state, Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channelId, false);\n if (pref === false) {\n dispatch(savePreferences(currentUserId, [{user_id: currentUserId, category: Preferences.CATEGORY_GROUP_CHANNEL_SHOW, name: channelId, value: 'true'}]));\n loadProfilesForGM();\n return {data: true};\n }\n return {data: false};\n }\n\n const channel = getChannel(state, channelId);\n if (!channel) {\n await doDispatch(getChannelAndMyMember(channelId));\n }\n return checkPreference();\n };\n}\n\nexport function loadProfilesForGroupChannels(groupChannels: Channel[]): ActionFunc {\n return (doDispatch, doGetState) => {\n const state = doGetState();\n const userIdsInChannels = Selectors.getUserIdsInChannels(state);\n\n const groupChannelsToFetch = groupChannels.reduce((acc, {id}) => {\n const userIdsInGroupChannel = (userIdsInChannels[id] || new Set());\n\n if (userIdsInGroupChannel.size === 0) {\n acc.push(id);\n }\n return acc;\n }, ([] as string[]));\n\n if (groupChannelsToFetch.length > 0) {\n doDispatch(UserActions.getProfilesInGroupChannels(groupChannelsToFetch));\n return {data: true};\n }\n\n return {data: false};\n };\n}\n\nexport async function loadProfilesForSidebar() {\n await Promise.all([loadProfilesForDM(), loadProfilesForGM()]);\n}\n\nexport const getGMsForLoading = (state: GlobalState) => {\n // Get all channels visible on the current team which doesn't include hidden GMs/DMs\n let channels = getDisplayedChannels(state);\n\n // Make sure we only have GMs\n channels = channels.filter((channel) => channel.type === General.GM_CHANNEL);\n\n return channels;\n};\n\nexport async function loadProfilesForGM() {\n const state = getState();\n const newPreferences = [];\n const userIdsInChannels = Selectors.getUserIdsInChannels(state);\n const currentUserId = Selectors.getCurrentUserId(state);\n const collapsedThreads = isCollapsedThreadsEnabled(state);\n\n const userIdsForLoadingCustomEmojis = new Set();\n const channelUsersToLoad: string[] = [];\n for (const channel of getGMsForLoading(state)) {\n const userIds = userIdsInChannels[channel.id] || new Set();\n userIds.forEach((userId) => userIdsForLoadingCustomEmojis.add(userId));\n\n if (userIds.size >= Constants.MIN_USERS_IN_GM) {\n continue;\n }\n\n const isVisible = getBool(state, Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channel.id);\n\n if (!isVisible) {\n const messageCount = getChannelMessageCount(state, channel.id);\n const member = getMyChannelMember(state, channel.id);\n\n const unreadCount = calculateUnreadCount(messageCount, member, collapsedThreads);\n\n if (!unreadCount.showUnread) {\n continue;\n }\n\n newPreferences.push({\n user_id: currentUserId,\n category: Preferences.CATEGORY_GROUP_CHANNEL_SHOW,\n name: channel.id,\n value: 'true',\n });\n }\n if (userIds.size === 0) {\n channelUsersToLoad.push(channel.id);\n }\n }\n\n if (channelUsersToLoad.length > 0) {\n await dispatch(UserActions.getProfilesInGroupChannels(channelUsersToLoad));\n }\n\n if (userIdsForLoadingCustomEmojis.size > 0) {\n dispatch(loadCustomEmojisForCustomStatusesByUserIds(userIdsForLoadingCustomEmojis));\n }\n if (newPreferences.length > 0) {\n dispatch(savePreferences(currentUserId, newPreferences));\n }\n}\n\nexport async function loadProfilesForDM() {\n const state = getState();\n const channels = getMyChannels(state);\n const newPreferences = [];\n const profilesToLoad = [];\n const profileIds = [];\n const currentUserId = Selectors.getCurrentUserId(state);\n const collapsedThreads = isCollapsedThreadsEnabled(state);\n\n for (let i = 0; i < channels.length; i++) {\n const channel = channels[i];\n if (channel.type !== Constants.DM_CHANNEL) {\n continue;\n }\n\n const teammateId = channel.name.replace(currentUserId, '').replace('__', '');\n const isVisible = getBool(state, Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, teammateId);\n\n if (!isVisible) {\n const member = getMyChannelMember(state, channel.id);\n const messageCount = getChannelMessageCount(state, channel.id);\n\n const unreadCount = calculateUnreadCount(messageCount, member, collapsedThreads);\n\n if (!member || !unreadCount.showUnread) {\n continue;\n }\n\n newPreferences.push({\n user_id: currentUserId,\n category: Preferences.CATEGORY_DIRECT_CHANNEL_SHOW,\n name: teammateId,\n value: 'true',\n });\n }\n\n if (!Selectors.getUser(state, teammateId)) {\n profilesToLoad.push(teammateId);\n }\n profileIds.push(teammateId);\n }\n\n if (newPreferences.length > 0) {\n dispatch(savePreferences(currentUserId, newPreferences));\n }\n\n if (profilesToLoad.length > 0) {\n await dispatch(UserActions.getProfilesByIds(profilesToLoad));\n }\n await dispatch(loadCustomEmojisForCustomStatusesByUserIds(profileIds));\n}\n\nexport function autocompleteUsersInTeam(username: string): ThunkActionFunc> {\n return async (doDispatch, doGetState) => {\n const currentTeamId = getCurrentTeamId(doGetState());\n const {data} = await doDispatch(UserActions.autocompleteUsers(username, currentTeamId));\n return data!;\n };\n}\n\nexport function autocompleteUsers(username: string): ThunkActionFunc> {\n return async (doDispatch) => {\n const {data} = await doDispatch(UserActions.autocompleteUsers(username));\n return data!;\n };\n}\n\nexport function autoResetStatus(): ActionFuncAsync {\n return async (doDispatch) => {\n const state = getState();\n const enabledUserStatuses = getIsUserStatusesConfigEnabled(state);\n\n if (!enabledUserStatuses) {\n return {data: undefined};\n }\n\n const {currentUserId} = state.entities.users;\n const {data} = await doDispatch(UserActions.getStatusesByIds([currentUserId]));\n const userStatus = data?.[0];\n\n if (userStatus?.status === UserStatuses.OUT_OF_OFFICE || !userStatus?.manual) {\n return {data: userStatus};\n }\n\n const autoReset = getBool(getState(), PreferencesRedux.CATEGORY_AUTO_RESET_MANUAL_STATUS, currentUserId, false);\n\n if (autoReset) {\n doDispatch(UserActions.setStatus({user_id: currentUserId, status: 'online'}));\n return {data: userStatus};\n }\n\n return {data: userStatus};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {Draft as ServerDraft} from '@mattermost/types/drafts';\nimport type {FileInfo} from '@mattermost/types/files';\nimport type {PostMetadata, PostPriorityMetadata} from '@mattermost/types/posts';\nimport type {PreferenceType} from '@mattermost/types/preferences';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {savePreferences} from 'mattermost-redux/actions/preferences';\nimport {Client4} from 'mattermost-redux/client';\nimport Preferences from 'mattermost-redux/constants/preferences';\nimport {syncedDraftsAreAllowedAndEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {setGlobalItem} from 'actions/storage';\nimport {makeGetDrafts} from 'selectors/drafts';\nimport {getConnectionId} from 'selectors/general';\nimport {getGlobalItem} from 'selectors/storage';\n\nimport {ActionTypes, StoragePrefixes} from 'utils/constants';\n\nimport type {ActionFunc, ActionFuncAsync, GlobalState} from 'types/store';\nimport type {PostDraft} from 'types/store/draft';\n\ntype Draft = {\n key: keyof GlobalState['storage']['storage'];\n value: PostDraft;\n timestamp: Date;\n}\n\n/**\n * Gets drafts stored on the server and reconciles them with any locally stored drafts.\n * @param teamId Only drafts for the given teamId will be fetched.\n */\nexport function getDrafts(teamId: string): ActionFuncAsync {\n const getLocalDrafts = makeGetDrafts(false);\n\n return async (dispatch, getState) => {\n const state = getState();\n\n let serverDrafts: Draft[] = [];\n try {\n serverDrafts = (await Client4.getUserDrafts(teamId)).map((draft) => transformServerDraft(draft));\n } catch (error) {\n return {data: false, error};\n }\n\n const localDrafts = getLocalDrafts(state);\n const drafts = [...serverDrafts, ...localDrafts];\n\n // Reconcile drafts and only keep the latest version of a draft.\n const draftsMap = new Map(drafts.map((draft) => [draft.key, draft]));\n drafts.forEach((draft) => {\n const currentDraft = draftsMap.get(draft.key);\n if (currentDraft && draft.timestamp > currentDraft.timestamp) {\n draftsMap.set(draft.key, draft);\n }\n });\n\n const actions = Array.from(draftsMap).map(([key, draft]) => {\n return setGlobalItem(key, draft.value);\n });\n\n dispatch(batchActions(actions));\n return {data: true};\n };\n}\n\nexport function removeDraft(key: string, channelId: string, rootId = ''): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n\n dispatch(setGlobalItem(key, {message: '', fileInfos: [], uploadsInProgress: [], metadata: {}}));\n\n if (syncedDraftsAreAllowedAndEnabled(state)) {\n const connectionId = getConnectionId(getState());\n try {\n await Client4.deleteDraft(channelId, rootId, connectionId);\n } catch (error) {\n return {\n data: false,\n error,\n };\n }\n }\n return {data: true};\n };\n}\n\nexport function updateDraft(key: string, value: PostDraft|null, rootId = '', save = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n let updatedValue: PostDraft|null = null;\n if (value) {\n const timestamp = new Date().getTime();\n const data = getGlobalItem>(state, key, {});\n updatedValue = {\n ...value,\n createAt: data.createAt || timestamp,\n updateAt: timestamp,\n };\n }\n\n dispatch(setGlobalDraft(key, updatedValue, false));\n\n if (syncedDraftsAreAllowedAndEnabled(state) && save && updatedValue) {\n const connectionId = getConnectionId(state);\n const userId = getCurrentUserId(state);\n try {\n await upsertDraft(updatedValue, userId, rootId, connectionId);\n } catch (error) {\n return {data: false, error};\n }\n }\n return {data: true};\n };\n}\n\nfunction upsertDraft(draft: PostDraft, userId: UserProfile['id'], rootId = '', connectionId: string) {\n const fileIds = draft.fileInfos.map((file) => file.id);\n const newDraft = {\n create_at: draft.createAt || 0,\n update_at: draft.updateAt || 0,\n delete_at: 0,\n user_id: userId,\n channel_id: draft.channelId,\n root_id: draft.rootId || rootId,\n message: draft.message,\n props: draft.props,\n file_ids: fileIds,\n priority: draft.metadata?.priority as PostPriorityMetadata,\n };\n\n return Client4.upsertDraft(newDraft, connectionId);\n}\n\nexport function setDraftsTourTipPreference(initializationState: Record): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const preference: PreferenceType = {\n user_id: currentUserId,\n category: Preferences.CATEGORY_DRAFTS,\n name: Preferences.DRAFTS_TOUR_TIP_SHOWED,\n value: JSON.stringify(initializationState),\n };\n await dispatch(savePreferences(currentUserId, [preference]));\n return {data: true};\n };\n}\n\nexport function setGlobalDraft(key: string, value: PostDraft|null, isRemote: boolean): ActionFunc {\n return (dispatch) => {\n dispatch(setGlobalItem(key, value));\n dispatch(setGlobalDraftSource(key, isRemote));\n return {data: true};\n };\n}\n\nexport function setGlobalDraftSource(key: string, isRemote: boolean) {\n return {\n type: ActionTypes.SET_DRAFT_SOURCE,\n data: {\n key,\n isRemote,\n },\n };\n}\n\nexport function transformServerDraft(draft: ServerDraft): Draft {\n let key: Draft['key'] = `${StoragePrefixes.DRAFT}${draft.channel_id}`;\n\n if (draft.root_id !== '') {\n key = `${StoragePrefixes.COMMENT_DRAFT}${draft.root_id}`;\n }\n\n let fileInfos: FileInfo[] = [];\n if (draft.metadata?.files) {\n fileInfos = draft.metadata.files;\n }\n\n const metadata = (draft.metadata || {}) as PostMetadata;\n if (draft.priority) {\n metadata.priority = draft.priority;\n }\n\n return {\n key,\n timestamp: new Date(draft.update_at),\n value: {\n message: draft.message,\n fileInfos,\n props: draft.props,\n uploadsInProgress: [],\n channelId: draft.channel_id,\n rootId: draft.root_id,\n createAt: draft.create_at,\n updateAt: draft.update_at,\n metadata,\n show: true,\n },\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {ActionTypes} from 'utils/constants';\n\nimport type {ModalData} from 'types/actions';\n\nexport function openModal

(modalData: ModalData

) {\n return {\n type: ActionTypes.MODAL_OPEN,\n modalId: modalData.modalId,\n dialogProps: modalData.dialogProps,\n dialogType: modalData.dialogType,\n };\n}\n\nexport type CloseModalType = {\n type: string;\n modalId: string;\n}\n\nexport function closeModal(modalId: string) {\n return {\n type: ActionTypes.MODAL_CLOSE,\n modalId,\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport debounce from 'lodash/debounce';\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {Post} from '@mattermost/types/posts';\n\nimport {SearchTypes} from 'mattermost-redux/action_types';\nimport {getChannel} from 'mattermost-redux/actions/channels';\nimport {getPostsByIds, getPost as fetchPost} from 'mattermost-redux/actions/posts';\nimport {\n clearSearch,\n getFlaggedPosts,\n getPinnedPosts,\n searchPostsWithParams,\n searchFilesWithParams,\n} from 'mattermost-redux/actions/search';\nimport {getCurrentChannelId, getCurrentChannelNameForSearchShortcut, getChannel as getChannelSelector} from 'mattermost-redux/selectors/entities/channels';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getLatestInteractablePostId, getPost} from 'mattermost-redux/selectors/entities/posts';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentTimezone} from 'mattermost-redux/selectors/entities/timezone';\nimport {getCurrentUser, getCurrentUserMentionKeys} from 'mattermost-redux/selectors/entities/users';\n\nimport {trackEvent} from 'actions/telemetry_actions.jsx';\nimport {\n getSearchType,\n getSearchTerms,\n getRhsState,\n getPluggableId,\n getFilesSearchExtFilter,\n getPreviousRhsState,\n getSearchTeam,\n} from 'selectors/rhs';\n\nimport {SidebarSize} from 'components/resizable_sidebar/constants';\n\nimport {ActionTypes, RHSStates, Constants} from 'utils/constants';\nimport {Mark, Measure, measureAndReport} from 'utils/performance_telemetry';\nimport {getBrowserUtcOffset, getUtcOffsetForTimeZone} from 'utils/timezone';\n\nimport type {ActionFunc, ActionFuncAsync, ThunkActionFunc} from 'types/store';\nimport type {RhsState} from 'types/store/rhs';\n\nfunction selectPostWithPreviousState(post: Post, previousRhsState?: RhsState): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n\n dispatch(selectPost(post, previousRhsState || getRhsState(state)));\n\n return {data: true};\n };\n}\n\nfunction selectPostCardFromRightHandSideSearchWithPreviousState(post: Post, previousRhsState?: RhsState): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n\n dispatch({\n type: ActionTypes.SELECT_POST_CARD,\n postId: post.id,\n channelId: post.channel_id,\n previousRhsState: previousRhsState || getRhsState(state),\n });\n\n return {data: true};\n };\n}\n\nexport function updateRhsState(rhsState: string, channelId?: string, previousRhsState?: RhsState): ActionFunc {\n return (dispatch, getState) => {\n const action: AnyAction = {\n type: ActionTypes.UPDATE_RHS_STATE,\n state: rhsState,\n };\n\n if ([\n RHSStates.PIN,\n RHSStates.CHANNEL_FILES,\n RHSStates.CHANNEL_INFO,\n RHSStates.CHANNEL_MEMBERS,\n ].includes(rhsState)) {\n action.channelId = channelId || getCurrentChannelId(getState());\n }\n if (previousRhsState) {\n action.previousRhsState = previousRhsState;\n }\n\n dispatch(action);\n\n return {data: true};\n };\n}\n\nexport function openShowEditHistory(post: Post) {\n return {\n type: ActionTypes.UPDATE_RHS_STATE,\n state: RHSStates.EDIT_HISTORY,\n postId: post.id,\n channelId: post.channel_id,\n timestamp: Date.now(),\n };\n}\n\nexport function goBack(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const prevState = getPreviousRhsState(getState());\n const defaultTab = 'channel-info';\n\n dispatch({\n type: ActionTypes.RHS_GO_BACK,\n state: prevState || defaultTab,\n });\n\n return {data: true};\n };\n}\n\nexport function selectPostFromRightHandSideSearch(post: Post) {\n return selectPostWithPreviousState(post);\n}\n\nexport function selectPostFromRightHandSideSearchByPostId(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const post = getPost(getState(), postId);\n return dispatch(selectPostFromRightHandSideSearch(post));\n };\n}\n\nexport function replyToLatestPostInChannel(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const postId = getLatestInteractablePostId(state, channelId);\n return dispatch(selectPostFromRightHandSideSearchByPostId(postId));\n };\n}\n\nexport function updateSearchTerms(terms: string) {\n return {\n type: ActionTypes.UPDATE_RHS_SEARCH_TERMS,\n terms,\n };\n}\n\nexport function updateSearchTeam(teamId: string | null) {\n return {\n type: ActionTypes.UPDATE_RHS_SEARCH_TEAM,\n teamId,\n };\n}\n\nexport function setRhsSize(rhsSize?: SidebarSize) {\n let newSidebarSize = rhsSize;\n if (!newSidebarSize) {\n const width = window.innerWidth;\n\n switch (true) {\n case width <= Constants.SMALL_SIDEBAR_BREAKPOINT: {\n newSidebarSize = SidebarSize.SMALL;\n break;\n }\n case width > Constants.SMALL_SIDEBAR_BREAKPOINT && width <= Constants.MEDIUM_SIDEBAR_BREAKPOINT: {\n newSidebarSize = SidebarSize.MEDIUM;\n break;\n }\n case width > Constants.MEDIUM_SIDEBAR_BREAKPOINT && width <= Constants.LARGE_SIDEBAR_BREAKPOINT: {\n newSidebarSize = SidebarSize.LARGE;\n break;\n }\n default: {\n newSidebarSize = SidebarSize.XLARGE;\n }\n }\n }\n return {\n type: ActionTypes.SET_RHS_SIZE,\n size: newSidebarSize,\n };\n}\n\nexport function updateSearchTermsForShortcut(): ThunkActionFunc {\n return (dispatch, getState) => {\n const currentChannelName = getCurrentChannelNameForSearchShortcut(getState());\n return dispatch(updateSearchTerms(`in:${currentChannelName} `));\n };\n}\n\nexport function updateSearchType(searchType: string) {\n return {\n type: ActionTypes.UPDATE_RHS_SEARCH_TYPE,\n searchType,\n };\n}\n\nfunction updateSearchResultsTerms(terms: string) {\n return {\n type: ActionTypes.UPDATE_RHS_SEARCH_RESULTS_TERMS,\n terms,\n };\n}\n\nfunction updateSearchResultsType(searchType: string) {\n return {\n type: ActionTypes.UPDATE_RHS_SEARCH_RESULTS_TYPE,\n searchType,\n };\n}\n\nexport function performSearch(terms: string, teamId: string, isMentionSearch?: boolean): ThunkActionFunc {\n return (dispatch, getState) => {\n let searchTerms = terms;\n const config = getConfig(getState());\n const viewArchivedChannels = config.ExperimentalViewArchivedChannels === 'true';\n const extensionsFilters = getFilesSearchExtFilter(getState());\n\n const extensions = extensionsFilters?.map((ext) => `ext:${ext}`).join(' ');\n let termsWithExtensionsFilters = searchTerms;\n if (extensions?.trim().length > 0) {\n termsWithExtensionsFilters += ` ${extensions}`;\n }\n\n if (isMentionSearch) {\n // Username and FirstName should be quoted to allow specific search\n // in case the name is made with multiple words splitted by dashes or other symbols.\n const user = getCurrentUser(getState());\n const termsArr = searchTerms.split(' ').filter((t) => Boolean(t && t.trim()));\n const atUsername = '@' + user.username;\n for (let i = 0; i < termsArr.length; i++) {\n if (termsArr[i] === atUsername) {\n termsArr[i] = `\"${atUsername}\"`;\n } else if (termsArr[i] === user.username) {\n termsArr[i] = `\"${user.username}\"`;\n } else if (termsArr[i] === user.first_name) {\n termsArr[i] = `\"${user.first_name}\"`;\n }\n }\n searchTerms = termsArr.join(' ');\n }\n\n // timezone offset in seconds\n const userCurrentTimezone = getCurrentTimezone(getState());\n const timezoneOffset = ((userCurrentTimezone && (userCurrentTimezone.length > 0)) ? getUtcOffsetForTimeZone(userCurrentTimezone) : getBrowserUtcOffset()) * 60;\n const messagesPromise = dispatch(searchPostsWithParams(teamId, {terms: searchTerms, is_or_search: Boolean(isMentionSearch), include_deleted_channels: viewArchivedChannels, time_zone_offset: timezoneOffset, page: 0, per_page: 20}));\n const filesPromise = dispatch(searchFilesWithParams(teamId, {terms: termsWithExtensionsFilters, is_or_search: Boolean(isMentionSearch), include_deleted_channels: viewArchivedChannels, time_zone_offset: timezoneOffset, page: 0, per_page: 20}));\n return Promise.all([filesPromise, messagesPromise]);\n };\n}\n\nexport function filterFilesSearchByExt(extensions: string[]) {\n return {\n type: ActionTypes.SET_FILES_FILTER_BY_EXT,\n data: extensions,\n };\n}\n\nexport function showSearchResults(isMentionSearch = false): ThunkActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n\n const searchTerms = getSearchTerms(state);\n let teamId = getSearchTeam(state);\n const searchType = getSearchType(state);\n\n if (isMentionSearch) {\n dispatch(updateRhsState(RHSStates.MENTION));\n teamId = '';\n } else {\n dispatch(updateRhsState(RHSStates.SEARCH));\n }\n dispatch(updateSearchResultsTerms(searchTerms));\n dispatch(updateSearchResultsType(searchType));\n\n return dispatch(performSearch(searchTerms, teamId));\n };\n}\n\nexport function showRHSPlugin(pluggableId: string) {\n return {\n type: ActionTypes.UPDATE_RHS_STATE,\n state: RHSStates.PLUGIN,\n pluggableId,\n };\n}\n\nexport function showChannelMembers(channelId: string, inEditingMode = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n\n if (inEditingMode) {\n await dispatch(setEditChannelMembers(true));\n }\n\n let previousRhsState = getRhsState(state);\n if (previousRhsState === RHSStates.CHANNEL_MEMBERS) {\n previousRhsState = getPreviousRhsState(state);\n }\n dispatch({\n type: ActionTypes.UPDATE_RHS_STATE,\n channelId,\n state: RHSStates.CHANNEL_MEMBERS,\n previousRhsState,\n });\n\n return {data: true};\n };\n}\n\nexport function hideRHSPlugin(pluggableId: string): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n\n if (getPluggableId(state) === pluggableId) {\n dispatch(closeRightHandSide());\n }\n\n return {data: true};\n };\n}\n\nexport function toggleRHSPlugin(pluggableId: string): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n\n if (getPluggableId(state) === pluggableId) {\n dispatch(hideRHSPlugin(pluggableId));\n return {data: false};\n }\n\n dispatch(showRHSPlugin(pluggableId));\n return {data: true};\n };\n}\n\nexport function showFlaggedPosts(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const teamId = getCurrentTeamId(state);\n\n dispatch({\n type: ActionTypes.UPDATE_RHS_STATE,\n state: RHSStates.FLAG,\n });\n\n const results = await dispatch(getFlaggedPosts());\n let data;\n if ('data' in results) {\n data = results.data;\n }\n\n dispatch(batchActions([\n {\n type: SearchTypes.RECEIVED_SEARCH_POSTS,\n data,\n },\n {\n type: SearchTypes.RECEIVED_SEARCH_TERM,\n data: {\n teamId,\n terms: null,\n isOrSearch: false,\n },\n },\n ]));\n\n return {data: true};\n };\n}\n\nexport function showPinnedPosts(channelId?: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentChannelId = getCurrentChannelId(state);\n const teamId = getCurrentTeamId(state);\n\n let previousRhsState = getRhsState(state);\n if (previousRhsState === RHSStates.PIN) {\n previousRhsState = getPreviousRhsState(state);\n }\n dispatch({\n type: ActionTypes.UPDATE_RHS_STATE,\n channelId: channelId || currentChannelId,\n state: RHSStates.PIN,\n previousRhsState,\n });\n\n const results = await dispatch(getPinnedPosts(channelId || currentChannelId));\n\n let data;\n if ('data' in results) {\n data = results.data;\n }\n\n dispatch(batchActions([\n {\n type: SearchTypes.RECEIVED_SEARCH_POSTS,\n data,\n },\n {\n type: SearchTypes.RECEIVED_SEARCH_TERM,\n data: {\n teamId,\n terms: null,\n isOrSearch: false,\n },\n },\n ]));\n\n return {data: true};\n };\n}\n\nexport function showChannelFiles(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const teamId = getSearchTeam(state);\n\n let previousRhsState = getRhsState(state);\n if (previousRhsState === RHSStates.CHANNEL_FILES) {\n previousRhsState = getPreviousRhsState(state);\n }\n dispatch({\n type: ActionTypes.UPDATE_RHS_STATE,\n channelId,\n state: RHSStates.CHANNEL_FILES,\n previousRhsState,\n });\n dispatch(updateSearchType('files'));\n\n const results = await dispatch(performSearch('channel:' + channelId, teamId));\n const fileData = results instanceof Array ? results[0].data : null;\n const missingPostIds: string[] = [];\n\n if (fileData) {\n Object.values(fileData.file_infos).forEach((file: any) => {\n const postId = file?.post_id;\n\n if (postId && !getPost(state, postId)) {\n missingPostIds.push(postId);\n }\n });\n }\n if (missingPostIds.length > 0) {\n await dispatch(getPostsByIds(missingPostIds));\n }\n\n let data: any;\n if (results && results instanceof Array && results.length === 2 && 'data' in results[1]) {\n data = results[1].data;\n }\n\n dispatch(batchActions([\n {\n type: SearchTypes.RECEIVED_SEARCH_POSTS,\n data,\n },\n {\n type: SearchTypes.RECEIVED_SEARCH_TERM,\n data: {\n teamId,\n terms: null,\n isOrSearch: false,\n },\n },\n ]));\n\n return {data: true};\n };\n}\n\nexport function showMentions(): ActionFunc {\n return (dispatch, getState) => {\n const termKeys = getCurrentUserMentionKeys(getState()).filter(({key}) => {\n return key !== '@channel' && key !== '@all' && key !== '@here';\n });\n\n const terms = termKeys.map(({key}) => key).join(' ').trim() + ' ';\n\n trackEvent('api', 'api_posts_search_mention');\n\n dispatch(performSearch(terms, '', true));\n dispatch(batchActions([\n {\n type: ActionTypes.UPDATE_RHS_SEARCH_TERMS,\n terms,\n },\n {\n type: ActionTypes.UPDATE_RHS_STATE,\n state: RHSStates.MENTION,\n },\n ]));\n\n return {data: true};\n };\n}\n\nexport function showChannelInfo(channelId: string) {\n return {\n type: ActionTypes.UPDATE_RHS_STATE,\n channelId,\n state: RHSStates.CHANNEL_INFO,\n };\n}\n\nexport function closeRightHandSide(): ActionFunc {\n return (dispatch) => {\n const actionsBatch: AnyAction[] = [\n {\n type: ActionTypes.UPDATE_RHS_STATE,\n state: null,\n },\n {\n type: ActionTypes.SELECT_POST,\n postId: '',\n channelId: '',\n timestamp: 0,\n },\n ];\n\n dispatch(batchActions(actionsBatch));\n return {data: true};\n };\n}\n\nexport const toggleMenu = (): ThunkActionFunc => (dispatch) => dispatch({\n type: ActionTypes.TOGGLE_RHS_MENU,\n});\n\nexport const openMenu = (): ThunkActionFunc => (dispatch) => dispatch({\n type: ActionTypes.OPEN_RHS_MENU,\n});\n\nexport const closeMenu = (): ThunkActionFunc => (dispatch) => dispatch({\n type: ActionTypes.CLOSE_RHS_MENU,\n});\n\nexport function setRhsExpanded(expanded: boolean) {\n return {\n type: ActionTypes.SET_RHS_EXPANDED,\n expanded,\n };\n}\n\nexport function toggleRhsExpanded() {\n return {\n type: ActionTypes.TOGGLE_RHS_EXPANDED,\n };\n}\n\nexport function selectPost(post: Post, previousRhsState?: RhsState) {\n performance.mark(Mark.PostSelected);\n\n return {\n type: ActionTypes.SELECT_POST,\n postId: post.root_id || post.id,\n channelId: post.channel_id,\n previousRhsState,\n timestamp: Date.now(),\n };\n}\n\nexport function selectPostById(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const post: Post | undefined = getPost(state, postId) ?? (await dispatch(fetchPost(postId))).data;\n if (post && post.state !== 'DELETED' && post.delete_at === 0) {\n const channel = getChannelSelector(state, post.channel_id);\n if (!channel) {\n await dispatch(getChannel(post.channel_id));\n }\n dispatch(selectPost(post));\n return {data: true};\n }\n return {data: false};\n };\n}\n\nexport function highlightReply(post: Post) {\n return {\n type: ActionTypes.HIGHLIGHT_REPLY,\n postId: post.id,\n };\n}\n\nexport const clearHighlightReply = {\n type: ActionTypes.CLEAR_HIGHLIGHT_REPLY,\n};\n\nexport const debouncedClearHighlightReply = debounce((dispatch) => {\n return dispatch(clearHighlightReply);\n}, Constants.PERMALINK_FADEOUT);\n\nexport function selectPostAndHighlight(post: Post): ActionFunc {\n return (dispatch) => {\n dispatch(batchActions([\n selectPost(post),\n highlightReply(post),\n ]));\n\n debouncedClearHighlightReply(dispatch);\n\n return {data: true};\n };\n}\n\nexport function selectPostCard(post: Post) {\n return {type: ActionTypes.SELECT_POST_CARD, postId: post.id, channelId: post.channel_id};\n}\n\nexport function openRHSSearch(): ActionFunc {\n return (dispatch) => {\n dispatch(clearSearch());\n dispatch(updateSearchTerms(''));\n dispatch(updateSearchTeam(null));\n dispatch(updateSearchResultsTerms(''));\n\n dispatch(updateRhsState(RHSStates.SEARCH));\n\n return {data: true};\n };\n}\n\nexport function openAtPrevious(previous: any): ThunkActionFunc {\n return (dispatch, getState) => {\n if (!previous) {\n return dispatch(openRHSSearch());\n }\n\n if (previous.isChannelInfo) {\n const currentChannelId = getCurrentChannelId(getState());\n return dispatch(showChannelInfo(currentChannelId));\n }\n if (previous.isChannelMembers) {\n const currentChannelId = getCurrentChannelId(getState());\n return dispatch(showChannelMembers(currentChannelId));\n }\n if (previous.isMentionSearch) {\n return dispatch(showMentions());\n }\n if (previous.isPinnedPosts) {\n return dispatch(showPinnedPosts());\n }\n if (previous.isFlaggedPosts) {\n return dispatch(showFlaggedPosts());\n }\n if (previous.selectedPostId) {\n const post = getPost(getState(), previous.selectedPostId);\n return post ? dispatch(selectPostWithPreviousState(post, previous.previousRhsState)) : dispatch(openRHSSearch());\n }\n if (previous.selectedPostCardId) {\n const post = getPost(getState(), previous.selectedPostCardId);\n return post ? dispatch(selectPostCardFromRightHandSideSearchWithPreviousState(post, previous.previousRhsState)) : dispatch(openRHSSearch());\n }\n if (previous.searchVisible) {\n return dispatch(showSearchResults());\n }\n\n return dispatch(openRHSSearch());\n };\n}\n\nexport const suppressRHS = {\n type: ActionTypes.SUPPRESS_RHS,\n};\n\nexport const unsuppressRHS = {\n type: ActionTypes.UNSUPPRESS_RHS,\n};\n\nexport function focusedRHS() {\n return {\n type: ActionTypes.RHS_FOCUSED,\n };\n}\n\nexport function setEditChannelMembers(active: boolean) {\n return {\n type: ActionTypes.SET_EDIT_CHANNEL_MEMBERS,\n active,\n };\n}\n\nexport function measureRhsOpened() {\n return () => {\n measureAndReport({\n name: Measure.RhsLoad,\n startMark: Mark.PostSelected,\n canFail: true,\n });\n\n performance.clearMarks(Mark.PostSelected);\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {batchActions} from 'redux-batched-actions';\n\nimport {updateThreadRead} from 'mattermost-redux/actions/threads';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getThread} from 'mattermost-redux/selectors/entities/threads';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {isThreadManuallyUnread, isThreadOpen} from 'selectors/views/threads';\n\nimport {ActionTypes, Threads} from 'utils/constants';\n\nimport type {ThunkActionFunc} from 'types/store';\n\nexport function updateThreadLastOpened(threadId: string, lastViewedAt: number) {\n return {\n type: Threads.CHANGED_LAST_VIEWED_AT,\n data: {\n threadId,\n lastViewedAt,\n },\n };\n}\n\nexport function setSelectedThreadId(teamId: string, threadId: string | undefined) {\n return {\n type: Threads.CHANGED_SELECTED_THREAD,\n data: {\n thread_id: threadId,\n team_id: teamId,\n },\n };\n}\n\nexport function manuallyMarkThreadAsUnread(threadId: string, lastViewedAt: number) {\n return batchActions([\n updateThreadLastOpened(threadId, lastViewedAt),\n {\n type: Threads.MANUALLY_UNREAD_THREAD,\n data: {threadId},\n },\n ]);\n}\n\nexport function updateThreadToastStatus(status: boolean) {\n return {\n type: ActionTypes.UPDATE_THREAD_TOAST_STATUS,\n data: status,\n };\n}\n\nexport function markThreadAsRead(threadId: string): ThunkActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const currentTeamId = getCurrentTeamId(state);\n const thread = getThread(state, threadId);\n\n if (thread && isThreadOpen(state, threadId) && window.isActive && !isThreadManuallyUnread(state, threadId)) {\n // mark thread as read on the server\n dispatch(updateThreadRead(currentUserId, currentTeamId, threadId, Date.now()));\n }\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {WebSocketClient} from '@mattermost/client';\n\nconst WebClient = new WebSocketClient();\nexport default WebClient;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {getConfig, getLicense} from 'mattermost-redux/selectors/entities/general';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport type {GlobalState} from 'types/store';\n\nexport type ExternalLinkQueryParams = {\n utm_source?: string;\n utm_medium?: string;\n utm_campaign?: string;\n utm_content?: string;\n userId?: string;\n}\n\nexport function useExternalLink(href: string, location: string = '', overwriteQueryParams: ExternalLinkQueryParams = {}): [string, Record] {\n const userId = useSelector(getCurrentUserId);\n const telemetryId = useSelector((state: GlobalState) => getConfig(state).TelemetryId || '');\n const isCloud = useSelector((state: GlobalState) => getLicense(state).Cloud === 'true');\n\n return useMemo(() => {\n if (!href?.includes('mattermost.com')) {\n return [href, {}];\n }\n\n const parsedUrl = new URL(href);\n\n const existingURLSearchParams = parsedUrl.searchParams;\n const existingQueryParamsObj = Object.fromEntries(existingURLSearchParams.entries());\n const queryParams = {\n utm_source: 'mattermost',\n utm_medium: isCloud ? 'in-product-cloud' : 'in-product',\n utm_content: location,\n uid: userId,\n sid: telemetryId,\n ...overwriteQueryParams,\n ...existingQueryParamsObj,\n };\n parsedUrl.search = new URLSearchParams(queryParams).toString();\n\n return [parsedUrl.toString(), queryParams];\n }, [href, isCloud, location, overwriteQueryParams, telemetryId, userId]);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React from 'react';\nimport {Modal} from 'react-bootstrap';\nimport {FormattedMessage} from 'react-intl';\n\nimport './confirm_modal.scss';\n\ntype Props = {\n id?: string;\n\n /*\n * Set to show modal\n */\n show: boolean;\n\n /*\n * Title to use for the modal\n */\n title?: React.ReactNode;\n\n /*\n * Message to display in the body of the modal\n */\n message?: React.ReactNode;\n\n /*\n * The CSS class to apply to the confirm button\n */\n confirmButtonClass?: string;\n\n /*\n * The CSS class to apply to the modal\n */\n modalClass?: string;\n\n /*\n * Text/jsx element on the confirm button\n */\n confirmButtonText?: React.ReactNode;\n\n /*\n * Text/jsx element on the cancel button\n */\n cancelButtonText?: React.ReactNode;\n\n /*\n * Set to show checkbox\n */\n showCheckbox?: boolean;\n\n /*\n * Text/jsx element to display with the checkbox\n */\n checkboxText?: React.ReactNode;\n\n /*\n * If true, show the checkbox in the footer instead of the modal body\n */\n checkboxInFooter?: boolean;\n\n /*\n * Function called when the confirm button or ENTER is pressed. Passes `true` if the checkbox is checked\n */\n onConfirm?: (checked: boolean) => void;\n\n /*\n * Function called when the cancel button is pressed or the modal is hidden. Passes `true` if the checkbox is checked\n */\n onCancel?: (checked: boolean) => void;\n\n /**\n * Function called when modal is dismissed\n */\n onExited?: () => void;\n\n /*\n * Set to hide the cancel button\n */\n hideCancel?: boolean;\n};\n\ntype State = {\n checked: boolean;\n}\n\nexport default class ConfirmModal extends React.Component {\n static defaultProps = {\n title: '',\n message: '',\n confirmButtonClass: 'btn btn-primary',\n confirmButtonText: '',\n modalClass: '',\n };\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n checked: false,\n };\n }\n\n shouldComponentUpdate(nextProps: Props, nextState: State) {\n return (\n nextProps.show !== this.props.show ||\n nextState.checked !== this.state.checked\n );\n }\n\n handleCheckboxChange = (e: React.ChangeEvent) => {\n this.setState({checked: e.target.checked});\n };\n\n handleConfirm = () => {\n this.props.onConfirm?.(this.state.checked);\n };\n\n handleCancel = () => {\n this.props.onCancel?.(this.state.checked);\n };\n\n render() {\n let checkbox;\n if (this.props.showCheckbox) {\n checkbox = (\n

\n \n
\n );\n }\n\n let cancelText;\n if (this.props.cancelButtonText) {\n cancelText = this.props.cancelButtonText;\n } else {\n cancelText = (\n \n );\n }\n\n let cancelButton;\n if (!this.props.hideCancel) {\n cancelButton = (\n \n {cancelText}\n \n );\n }\n\n return (\n \n \n \n {this.props.title}\n \n \n \n {this.props.message}\n {!this.props.checkboxInFooter && checkbox}\n \n \n {this.props.checkboxInFooter && checkbox}\n {cancelButton}\n \n {this.props.confirmButtonText}\n \n \n \n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/* eslint-disable @mattermost/use-external-link */\n\nimport React, {forwardRef} from 'react';\n\nimport {trackEvent} from 'actions/telemetry_actions';\n\nimport type {ExternalLinkQueryParams} from 'components/common/hooks/use_external_link';\nimport {useExternalLink} from 'components/common/hooks/use_external_link';\n\ntype Props = React.AnchorHTMLAttributes & {\n href: string;\n target?: string;\n rel?: string;\n onClick?: (event: React.MouseEvent) => void;\n queryParams?: ExternalLinkQueryParams;\n location: string;\n children: React.ReactNode;\n}\n\nconst ExternalLink = forwardRef((props, ref) => {\n const [href, queryParams] = useExternalLink(props.href, props.location, props.queryParams);\n\n const handleClick = (e: React.MouseEvent) => {\n trackEvent('link_out', 'click_external_link', queryParams);\n if (typeof props.onClick === 'function') {\n props.onClick(e);\n }\n };\n\n return (\n \n {props.children}\n \n );\n});\n\nexport default ExternalLink;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Post} from '@mattermost/types/posts';\n\nimport {getChannel, getChannelMember, selectChannel, joinChannel, getChannelStats} from 'mattermost-redux/actions/channels';\nimport {getPostThread} from 'mattermost-redux/actions/posts';\nimport {getMissingProfilesByIds} from 'mattermost-redux/actions/users';\nimport {Client4} from 'mattermost-redux/client';\nimport {getCurrentChannel, getChannel as getChannelFromRedux} from 'mattermost-redux/selectors/entities/channels';\nimport {isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentTeam, getTeam, getMyTeamMember} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/users';\nimport {getUserIdFromChannelName} from 'mattermost-redux/utils/channel_utils';\nimport {isSystemAdmin} from 'mattermost-redux/utils/user_utils';\n\nimport {loadChannelsForCurrentUser} from 'actions/channel_actions';\nimport {loadNewDMIfNeeded, loadNewGMIfNeeded} from 'actions/user_actions';\nimport {selectPostAndHighlight} from 'actions/views/rhs';\n\nimport {getHistory} from 'utils/browser_history';\nimport {joinPrivateChannelPrompt} from 'utils/channel_utils';\nimport {ActionTypes, Constants, ErrorPageTypes} from 'utils/constants';\nimport {isComment, getPostURL} from 'utils/post_utils';\n\nimport type {ActionFuncAsync, ThunkActionFunc} from 'types/store';\n\nlet privateChannelJoinPromptVisible = false;\n\ntype Option = {\n skipRedirectReplyPermalink: boolean;\n}\n\nfunction focusRootPost(post: Post, channel: Channel): ActionFuncAsync {\n return async (dispatch, getState) => {\n const postURL = getPostURL(getState(), post);\n\n dispatch(selectChannel(channel.id));\n dispatch({\n type: ActionTypes.RECEIVED_FOCUSED_POST,\n data: post.id,\n channelId: channel.id,\n });\n\n getHistory().replace(postURL);\n return {data: true};\n };\n}\n\nfunction focusReplyPost(post: Post, channel: Channel, teamId: string, returnTo: string, option: Option): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {data} = await dispatch(getPostThread(post.root_id));\n\n if (data!.first_inaccessible_post_time) {\n getHistory().replace(`/error?type=${ErrorPageTypes.CLOUD_ARCHIVED}&returnTo=${returnTo}`);\n return {data: false};\n }\n\n const state = getState();\n\n const team = getTeam(state, channel.team_id || teamId);\n const currentChannel = getCurrentChannel(state);\n\n const sameTeam = currentChannel && currentChannel.team_id === team?.id;\n\n const {skipRedirectReplyPermalink} = option;\n\n if (!sameTeam) {\n dispatch(selectChannel(channel.id));\n }\n\n if (sameTeam && returnTo && !skipRedirectReplyPermalink) {\n getHistory().replace(returnTo);\n } else if (!sameTeam || !skipRedirectReplyPermalink) {\n const postURL = getPostURL(state, post);\n getHistory().replace(postURL);\n }\n\n dispatch(selectPostAndHighlight(post));\n return {data: true};\n };\n}\n\nexport function focusPost(postId: string, returnTo = '', currentUserId: string, option: Option = {skipRedirectReplyPermalink: false}): ThunkActionFunc> {\n return async (dispatch, getState) => {\n // Ignore if prompt is still visible\n if (privateChannelJoinPromptVisible) {\n return;\n }\n\n let postInfo;\n try {\n postInfo = await Client4.getPostInfo(postId);\n } catch (e) {\n getHistory().replace(`/error?type=${ErrorPageTypes.PERMALINK_NOT_FOUND}&returnTo=${returnTo}`);\n return;\n }\n\n const state = getState();\n const currentTeam = getCurrentTeam(state);\n if (!currentTeam) {\n return;\n }\n\n if (!postInfo.has_joined_channel) {\n // Prompt system admins and team admins before joining the private channel\n const user = getCurrentUser(state);\n let prompt = false;\n if (postInfo.channel_type === Constants.PRIVATE_CHANNEL && isSystemAdmin(user.roles)) {\n prompt = true;\n } else {\n const teamMember = getMyTeamMember(state, currentTeam.id);\n prompt = Boolean(teamMember && teamMember.scheme_admin);\n }\n if (prompt) {\n privateChannelJoinPromptVisible = true;\n const joinPromptResult = await dispatch(joinPrivateChannelPrompt(currentTeam, postInfo.channel_display_name));\n privateChannelJoinPromptVisible = false;\n if ('data' in joinPromptResult && !joinPromptResult.data!.join) {\n return;\n }\n }\n await dispatch(joinChannel(currentUserId, '', postInfo.channel_id));\n }\n\n const {data: threadData} = await dispatch(getPostThread(postId));\n\n if (!threadData) {\n getHistory().replace(`/error?type=${ErrorPageTypes.PERMALINK_NOT_FOUND}&returnTo=${returnTo}`);\n return;\n }\n\n if (threadData.first_inaccessible_post_time) {\n getHistory().replace(`/error?type=${ErrorPageTypes.CLOUD_ARCHIVED}&returnTo=${returnTo}`);\n return;\n }\n\n const isCollapsed = isCollapsedThreadsEnabled(state);\n\n const channelId = threadData.posts[threadData.order[0]].channel_id;\n let channel = getChannelFromRedux(state, channelId);\n\n if (!channel) {\n const {data: channelData} = await dispatch(getChannel(channelId));\n\n if (!channelData) {\n getHistory().replace(`/error?type=${ErrorPageTypes.PERMALINK_NOT_FOUND}&returnTo=${returnTo}`);\n return;\n }\n\n channel = channelData;\n }\n\n const teamId = channel.team_id || currentTeam.id;\n let myMember = state.entities.channels.myMembers[channelId];\n\n if (!myMember) {\n // If it's a DM or GM channel and we don't have a channel member for it already, user is not a member\n if (channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL) {\n getHistory().replace(`/error?type=${ErrorPageTypes.PERMALINK_NOT_FOUND}&returnTo=${returnTo}`);\n return;\n }\n\n const membership = await dispatch(getChannelMember(channel.id, currentUserId));\n if ('data' in membership) {\n myMember = membership.data!;\n }\n\n if (!myMember) {\n getHistory().replace(`/error?type=${ErrorPageTypes.PERMALINK_NOT_FOUND}&returnTo=${returnTo}`);\n return;\n }\n }\n\n if (channel.team_id && channel.team_id !== teamId) {\n getHistory().replace(`/error?type=${ErrorPageTypes.PERMALINK_NOT_FOUND}&returnTo=${returnTo}`);\n return;\n }\n\n if (channel && channel.type === Constants.DM_CHANNEL) {\n const userId = getUserIdFromChannelName(currentUserId, channel.name);\n await dispatch(getMissingProfilesByIds([userId]));\n dispatch(loadNewDMIfNeeded(channel.id));\n } else if (channel && channel.type === Constants.GM_CHANNEL) {\n dispatch(loadNewGMIfNeeded(channel.id));\n }\n\n const post = threadData.posts[postId];\n\n if (isCollapsed && isComment(post)) {\n const {data} = await dispatch(focusReplyPost(post, channel, teamId, returnTo, option));\n if (!data) {\n return;\n }\n } else {\n dispatch(focusRootPost(post, channel));\n }\n\n dispatch(loadChannelsForCurrentUser());\n dispatch(getChannelStats(channelId));\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n// DO NOT EDIT - This file is generated by gen_lang_imports through the gen-lang-imports script\n\n/* eslint-disable */\n\nimport am from './am.json';\nimport ar from './ar.json';\nimport be from './be.json';\nimport bg from './bg.json';\nimport bn from './bn.json';\nimport br from './br.json';\nimport ca from './ca.json';\nimport cs from './cs.json';\nimport da from './da.json';\nimport de from './de.json';\nimport el from './el.json';\nimport enAU from './en-AU.json';\nimport es from './es.json';\nimport et from './et.json';\nimport eu from './eu.json';\nimport fa from './fa.json';\nimport fi from './fi.json';\nimport fil from './fil.json';\nimport fr from './fr.json';\nimport fy from './fy.json';\nimport gl from './gl.json';\nimport gu from './gu.json';\nimport he from './he.json';\nimport hi from './hi.json';\nimport hr from './hr.json';\nimport hu from './hu.json';\nimport id from './id.json';\nimport is from './is.json';\nimport it from './it.json';\nimport ja from './ja.json';\nimport ka from './ka.json';\nimport kkLatn from './kk-Latn.json';\nimport kk from './kk.json';\nimport km from './km.json';\nimport ko from './ko.json';\nimport la from './la.json';\nimport lo from './lo.json';\nimport lt from './lt.json';\nimport lv from './lv.json';\nimport mk from './mk.json';\nimport ml from './ml.json';\nimport mn from './mn.json';\nimport nbNO from './nb-NO.json';\nimport ne from './ne.json';\nimport nl from './nl.json';\nimport pl from './pl.json';\nimport pr from './pr.json';\nimport ptBR from './pt-BR.json';\nimport pt from './pt.json';\nimport ro from './ro.json';\nimport ru from './ru.json';\nimport si from './si.json';\nimport sl from './sl.json';\nimport sq from './sq.json';\nimport sr from './sr.json';\nimport sv from './sv.json';\nimport th from './th.json';\nimport tr from './tr.json';\nimport uk from './uk.json';\nimport vi from './vi.json';\nimport zhCN from './zh-CN.json';\nimport zhTW from './zh-TW.json';\n\ntype TranslationsMap = {\n [id: string]: string,\n};\n\nexport const langIDs = [\"am\",\"ar\",\"be\",\"bg\",\"bn\",\"br\",\"ca\",\"cs\",\"da\",\"de\",\"el\",\"en-AU\",\"es\",\"et\",\"eu\",\"fa\",\"fi\",\"fil\",\"fr\",\"fy\",\"gl\",\"gu\",\"he\",\"hi\",\"hr\",\"hu\",\"id\",\"is\",\"it\",\"ja\",\"ka\",\"kk-Latn\",\"kk\",\"km\",\"ko\",\"la\",\"lo\",\"lt\",\"lv\",\"mk\",\"ml\",\"mn\",\"nb-NO\",\"ne\",\"nl\",\"pl\",\"pr\",\"pt-BR\",\"pt\",\"ro\",\"ru\",\"si\",\"sl\",\"sq\",\"sr\",\"sv\",\"th\",\"tr\",\"uk\",\"vi\",\"zh-CN\",\"zh-TW\"];\n\nexport const langLabels = {\"am\":\"አማርኛ\",\"ar\":\"العربية\",\"be\":\"Беларуская\",\"bg\":\"Български\",\"bn\":\"বাংলা\",\"br\":\"Brezhoneg\",\"ca\":\"Català\",\"cs\":\"Čeština\",\"da\":\"Dansk\",\"de\":\"Deutsch\",\"el\":\"Ελληνικά\",\"en-AU\":\"English (Australia)\",\"es\":\"Español\",\"et\":\"eesti keel\",\"eu\":\"Euskara\",\"fa\":\"فارسی\",\"fi\":\"Suomi\",\"fil\":\"Filipino\",\"fr\":\"Français\",\"fy\":\"Frysk\",\"gl\":\"Galego\",\"gu\":\"ગુજરાતી\",\"he\":\"עברית‏\",\"hi\":\"हिन्दी\",\"hr\":\"Hrvatski\",\"hu\":\"Magyar\",\"id\":\"Bahasa Indonesia\",\"is\":\"Íslenska\",\"it\":\"Italiano\",\"ja\":\"日本語\",\"ka\":\"ქართული\",\"kk-Latn\":\"Қазақша\",\"kk\":\"Қазақша\",\"km\":\"ភាសាខ្មែរ\",\"ko\":\"한국어\",\"la\":\"Latin\",\"lo\":\"ພາສາລາວ\",\"lt\":\"Lietuvių\",\"lv\":\"Latviešu\",\"mk\":\"Македонски\",\"ml\":\"മലയാളം\",\"mn\":\"Монгол\",\"nb-NO\":\"Norsk (bokmål)\",\"ne\":\"नेपाली\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pr\":\"pr\",\"pt-BR\":\"Português (Brasil)\",\"pt\":\"Português\",\"ro\":\"Română\",\"ru\":\"Русский\",\"si\":\"සිංහල\",\"sl\":\"Slovenščina\",\"sq\":\"Shqip\",\"sr\":\"Српски\",\"sv\":\"Svenska\",\"th\":\"ภาษาไทย\",\"tr\":\"Türkçe\",\"uk\":\"Українська\",\"vi\":\"Tiếng Việt\",\"zh-CN\":\"中文(中国大陆)\",\"zh-TW\":\"中文(台灣)\"};\n\nexport const langFiles: {[langID: string]: TranslationsMap} = {am,ar,be,bg,bn,br,ca,cs,da,de,el,'en-AU':enAU,es,et,eu,fa,fi,fil,fr,fy,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,'kk-Latn':kkLatn,kk,km,ko,la,lo,lt,lv,mk,ml,mn,'nb-NO':nbNO,ne,nl,pl,pr,'pt-BR':ptBR,pt,ro,ru,si,sl,sq,sr,sv,th,tr,uk,vi,'zh-CN':zhCN,'zh-TW':zhTW};","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/**\n * @typedef {} Language\n */\n\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\n\nimport {langFiles, langIDs, langLabels} from './imports';\n\n// should match the values in server/public/shared/i18n/i18n.go\nexport const languages = {\n de: {\n value: 'de',\n name: 'Deutsch',\n order: 0,\n url: langFiles.de,\n },\n en: {\n value: 'en',\n name: 'English (US)',\n order: 1,\n url: '',\n },\n 'en-AU': {\n value: 'en-AU',\n name: 'English (Australia)',\n order: 2,\n url: langFiles['en-AU'],\n },\n es: {\n value: 'es',\n name: 'Español (Alpha)',\n order: 3,\n url: langFiles.es,\n },\n fr: {\n value: 'fr',\n name: 'Français (Beta)',\n order: 4,\n url: langFiles.fr,\n },\n it: {\n value: 'it',\n name: 'Italiano (Alpha)',\n order: 5,\n url: langFiles.it,\n },\n hu: {\n value: 'hu',\n name: 'Magyar (Beta)',\n order: 6,\n url: langFiles.hu,\n },\n nl: {\n value: 'nl',\n name: 'Nederlands',\n order: 7,\n url: langFiles.nl,\n },\n pl: {\n value: 'pl',\n name: 'Polski',\n order: 8,\n url: langFiles.pl,\n },\n 'pt-BR': {\n value: 'pt-BR',\n name: 'Português (Brasil) (Alpha)',\n order: 9,\n url: langFiles['pt-BR'],\n },\n ro: {\n value: 'ro',\n name: 'Română (Alpha)',\n order: 10,\n url: langFiles.ro,\n },\n sv: {\n value: 'sv',\n name: 'Svenska',\n order: 11,\n url: langFiles.sv,\n },\n vi: {\n value: 'vi',\n name: 'Tiếng Việt (Beta)',\n order: 12,\n url: langFiles.vi,\n },\n tr: {\n value: 'tr',\n name: 'Türkçe',\n order: 13,\n url: langFiles.tr,\n },\n bg: {\n value: 'bg',\n name: 'Български (Alpha)',\n order: 14,\n url: langFiles.bg,\n },\n ru: {\n value: 'ru',\n name: 'Pусский',\n order: 15,\n url: langFiles.ru,\n },\n uk: {\n value: 'uk',\n name: 'Yкраїнська (Alpha)',\n order: 16,\n url: langFiles.uk,\n },\n fa: {\n value: 'fa',\n name: 'فارسی (Alpha)',\n order: 17,\n url: langFiles.fa,\n },\n ko: {\n value: 'ko',\n name: '한국어 (Alpha)',\n order: 18,\n url: langFiles.ko,\n },\n 'zh-CN': {\n value: 'zh-CN',\n name: '中文 (简体) (Beta)',\n order: 19,\n url: langFiles['zh-CN'],\n },\n 'zh-TW': {\n value: 'zh-TW',\n name: '中文 (繁體) (Beta)',\n order: 20,\n url: langFiles['zh-TW'],\n },\n ja: {\n value: 'ja',\n name: '日本語',\n order: 21,\n url: langFiles.ja,\n },\n};\n\nexport function getAllLanguages(includeExperimental) {\n if (includeExperimental) {\n let order = Object.keys(languages).length;\n return {\n ...langIDs.reduce((out, id) => {\n out[id] = {\n value: id,\n name: langLabels[id],\n url: langFiles[id],\n order: order++,\n };\n return out;\n }, {}),\n ...languages,\n };\n }\n return languages;\n}\n\n/**\n * @param {import('types/store').GlobalState} state\n * @returns {Record}\n */\nexport function getLanguages(state) {\n const config = getConfig(state);\n if (!config.AvailableLocales) {\n return getAllLanguages(config.EnableExperimentalLocales === 'true');\n }\n return config.AvailableLocales.split(',').reduce((result, l) => {\n if (languages[l]) {\n result[l] = languages[l];\n }\n return result;\n }, {});\n}\n\nexport function getLanguageInfo(locale) {\n return getAllLanguages(true)[locale];\n}\n\n/**\n * @param {import('types/store').GlobalState} state\n * @param {string} locale\n * @returns {boolean}\n */\nexport function isLanguageAvailable(state, locale) {\n return Boolean(getLanguages(state)[locale]);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {OrderedChannelCategories, ChannelCategory} from '@mattermost/types/channel_categories';\nimport {CategorySorting} from '@mattermost/types/channel_categories';\nimport type {Channel} from '@mattermost/types/channels';\n\nimport {ChannelCategoryTypes, ChannelTypes} from 'mattermost-redux/action_types';\nimport {logError} from 'mattermost-redux/actions/errors';\nimport {forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';\nimport {Client4} from 'mattermost-redux/client';\nimport {CategoryTypes} from 'mattermost-redux/constants/channel_categories';\nimport {\n getAllCategoriesByIds,\n getCategory,\n getCategoryIdsForTeam,\n getCategoryInTeamByType,\n getCategoryInTeamWithChannel,\n} from 'mattermost-redux/selectors/entities/channel_categories';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport type {\n ActionFuncAsync,\n ThunkActionFunc,\n} from 'mattermost-redux/types/actions';\nimport {insertMultipleWithoutDuplicates, insertWithoutDuplicates, removeItem} from 'mattermost-redux/utils/array_utils';\n\nimport {General} from '../constants';\n\nexport function setCategoryCollapsed(categoryId: string, collapsed: boolean) {\n return patchCategory(categoryId, {\n collapsed,\n });\n}\n\nexport function setCategorySorting(categoryId: string, sorting: CategorySorting) {\n return patchCategory(categoryId, {\n sorting,\n });\n}\n\nexport function patchCategory(categoryId: string, patch: Partial): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n\n const category = getCategory(state, categoryId);\n const patchedCategory = {\n ...category,\n ...patch,\n };\n\n dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORY,\n data: patchedCategory,\n });\n\n try {\n await Client4.updateChannelCategory(currentUserId, category.team_id, patchedCategory);\n } catch (error) {\n dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORY,\n data: category,\n });\n\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return {data: patchedCategory};\n };\n}\n\nexport function setCategoryMuted(categoryId: string, muted: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const category = getCategory(state, categoryId);\n\n const result = await dispatch(updateCategory({\n ...category,\n muted,\n }));\n\n if ('error' in result) {\n return result;\n }\n\n const updated = result.data as ChannelCategory;\n\n dispatch(batchActions([\n {\n type: ChannelCategoryTypes.RECEIVED_CATEGORY,\n data: updated,\n },\n ...(updated.channel_ids.map((channelId) => ({\n type: ChannelTypes.SET_CHANNEL_MUTED,\n data: {\n channelId,\n muted,\n },\n }))),\n ]));\n\n return {data: true};\n };\n}\n\nfunction updateCategory(category: ChannelCategory): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n\n let updatedCategory;\n try {\n updatedCategory = await Client4.updateChannelCategory(currentUserId, category.team_id, category);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n // The updated category will be added to the state after receiving the corresponding websocket event.\n\n return {data: updatedCategory};\n };\n}\n\nexport function fetchMyCategories(teamId: string, isWebSocket?: boolean): ThunkActionFunc {\n return async (dispatch, getState) => {\n const currentUserId = getCurrentUserId(getState());\n\n let data: OrderedChannelCategories;\n try {\n data = await Client4.getChannelCategories(currentUserId, teamId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return dispatch(batchActions([\n {\n type: ChannelCategoryTypes.RECEIVED_CATEGORIES,\n data: data.categories,\n isWebSocket,\n },\n {\n type: ChannelCategoryTypes.RECEIVED_CATEGORY_ORDER,\n data: {\n teamId,\n order: data.order,\n },\n },\n ]));\n };\n}\n\n// addChannelToInitialCategory returns an action that can be dispatched to add a newly-joined or newly-created channel\n// to its either the Channels or Direct Messages category based on the type of channel. New DM and GM channels are\n// added to the Direct Messages category on each team.\n//\n// Unless setOnServer is true, this only affects the categories on this client. If it is set to true, this updates\n// categories on the server too.\nexport function addChannelToInitialCategory(channel: Channel, setOnServer = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const categories = Object.values(getAllCategoriesByIds(state));\n\n if (channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL) {\n const allDmCategories = categories.filter((category) => category.type === CategoryTypes.DIRECT_MESSAGES);\n\n // Get all the categories in which channel exists\n const channelInCategories = categories.filter((category) => {\n return category.channel_ids.findIndex((channelId) => channelId === channel.id) !== -1;\n });\n\n // Skip DM categories where channel already exists in a different category\n const dmCategories = allDmCategories.filter((dmCategory) => {\n return channelInCategories.findIndex((category) => dmCategory.team_id === category.team_id) === -1;\n });\n\n return dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORIES,\n data: dmCategories.map((category) => ({\n ...category,\n channel_ids: insertWithoutDuplicates(category.channel_ids, channel.id, 0),\n })),\n });\n }\n\n // Add the new channel to the Channels category on the channel's team\n if (categories.some((category) => category.channel_ids.some((channelId) => channelId === channel.id))) {\n return {data: false};\n }\n const channelsCategory = getCategoryInTeamByType(state, channel.team_id, CategoryTypes.CHANNELS);\n\n if (!channelsCategory) {\n // No categories were found for this team, so the categories for this team haven't been loaded yet.\n // The channel will have been added to the category by the server, so we'll get it once the categories\n // are actually loaded.\n return {data: false};\n }\n\n if (setOnServer) {\n return dispatch(addChannelToCategory(channelsCategory.id, channel.id));\n }\n\n return dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORY,\n data: {\n ...channelsCategory,\n channel_ids: insertWithoutDuplicates(channelsCategory.channel_ids, channel.id, 0),\n },\n });\n };\n}\n\n// addChannelToCategory returns an action that can be dispatched to add a channel to a given category without specifying\n// its order. The channel will be removed from its previous category (if any) on the given category's team and it will be\n// placed first in its new category.\nexport function addChannelToCategory(categoryId: string, channelId: string): ActionFuncAsync {\n return moveChannelToCategory(categoryId, channelId, 0, false);\n}\n\n// moveChannelToCategory returns an action that moves a channel into a category and puts it at the given index at the\n// category. The channel will also be removed from its previous category (if any) on that category's team. The category's\n// order will also be set to manual by default.\nexport function moveChannelToCategory(categoryId: string, channelId: string, newIndex: number, setManualSorting = true): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const targetCategory = getCategory(state, categoryId);\n const currentUserId = getCurrentUserId(state);\n\n // The default sorting needs to behave like alphabetical sorting until the point that the user rearranges their\n // channels at which point, it becomes manual. Other than that, we never change the sorting method automatically.\n let sorting = targetCategory.sorting;\n if (setManualSorting &&\n targetCategory.type !== CategoryTypes.DIRECT_MESSAGES &&\n targetCategory.sorting === CategorySorting.Default) {\n sorting = CategorySorting.Manual;\n }\n\n // Add the channel to the new category\n const categories = [{\n ...targetCategory,\n sorting,\n channel_ids: insertWithoutDuplicates(targetCategory.channel_ids, channelId, newIndex),\n }];\n\n // And remove it from the old category\n const sourceCategory = getCategoryInTeamWithChannel(getState(), targetCategory.team_id, channelId);\n if (sourceCategory && sourceCategory.id !== targetCategory.id) {\n categories.push({\n ...sourceCategory,\n channel_ids: removeItem(sourceCategory.channel_ids, channelId),\n });\n }\n\n const result = dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORIES,\n data: categories,\n });\n\n try {\n await Client4.updateChannelCategories(currentUserId, targetCategory.team_id, categories);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n\n const originalCategories = [targetCategory];\n if (sourceCategory && sourceCategory.id !== targetCategory.id) {\n originalCategories.push(sourceCategory);\n }\n\n dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORIES,\n data: originalCategories,\n });\n return {error};\n }\n\n return result;\n };\n}\n\nexport function moveChannelsToCategory(categoryId: string, channelIds: string[], newIndex: number, setManualSorting = true): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const targetCategory = getCategory(state, categoryId);\n const currentUserId = getCurrentUserId(state);\n\n // The default sorting needs to behave like alphabetical sorting until the point that the user rearranges their\n // channels at which point, it becomes manual. Other than that, we never change the sorting method automatically.\n let sorting = targetCategory.sorting;\n if (setManualSorting &&\n targetCategory.type !== CategoryTypes.DIRECT_MESSAGES &&\n targetCategory.sorting === CategorySorting.Default) {\n sorting = CategorySorting.Manual;\n }\n\n // Add the channels to the new category\n let categories = {\n [targetCategory.id]: {\n ...targetCategory,\n sorting,\n channel_ids: insertMultipleWithoutDuplicates(targetCategory.channel_ids, channelIds, newIndex),\n },\n };\n\n // Needed if we have to revert categories and for checking for favourites\n let unmodifiedCategories = {[targetCategory.id]: targetCategory};\n let sourceCategories: Record = {};\n\n // And remove it from the old categories\n channelIds.forEach((channelId) => {\n const sourceCategory = getCategoryInTeamWithChannel(getState(), targetCategory.team_id, channelId);\n if (sourceCategory && sourceCategory.id !== targetCategory.id) {\n unmodifiedCategories = {\n ...unmodifiedCategories,\n [sourceCategory.id]: sourceCategory,\n };\n sourceCategories = {...sourceCategories, [channelId]: sourceCategory.id};\n categories = {\n ...categories,\n [sourceCategory.id]: {\n ...(categories[sourceCategory.id] || sourceCategory),\n channel_ids: removeItem((categories[sourceCategory.id] || sourceCategory).channel_ids, channelId),\n },\n };\n }\n });\n\n const categoriesArray = Object.values(categories).reduce((allCategories: ChannelCategory[], category) => {\n allCategories.push(category);\n return allCategories;\n }, []);\n\n const result = dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORIES,\n data: categoriesArray,\n });\n\n try {\n await Client4.updateChannelCategories(currentUserId, targetCategory.team_id, categoriesArray);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n\n const originalCategories = Object.values(unmodifiedCategories).reduce((allCategories: ChannelCategory[], category) => {\n allCategories.push(category);\n return allCategories;\n }, []);\n\n dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORIES,\n data: originalCategories,\n });\n return {error};\n }\n\n return result;\n };\n}\n\nexport function moveCategory(teamId: string, categoryId: string, newIndex: number): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const order = getCategoryIdsForTeam(state, teamId)!;\n const currentUserId = getCurrentUserId(state);\n\n const newOrder = insertWithoutDuplicates(order, categoryId, newIndex);\n\n // Optimistically update the category order\n const result = dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORY_ORDER,\n data: {\n teamId,\n order: newOrder,\n },\n });\n\n try {\n await Client4.updateChannelCategoryOrder(currentUserId, teamId, newOrder);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n\n // Restore original order\n dispatch({\n type: ChannelCategoryTypes.RECEIVED_CATEGORY_ORDER,\n data: {\n teamId,\n order,\n },\n });\n\n return {error};\n }\n\n return result;\n };\n}\n\nexport function receivedCategoryOrder(teamId: string, order: string[]) {\n return {\n type: ChannelCategoryTypes.RECEIVED_CATEGORY_ORDER,\n data: {\n teamId,\n order,\n },\n };\n}\n\nexport function createCategory(teamId: string, displayName: string, channelIds: Array = []): ActionFuncAsync {\n return async (dispatch, getState) => {\n const currentUserId = getCurrentUserId(getState());\n\n let newCategory;\n try {\n newCategory = await Client4.createChannelCategory(currentUserId, teamId, {\n team_id: teamId,\n user_id: currentUserId,\n display_name: displayName,\n channel_ids: channelIds,\n });\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n // The new category will be added to the state after receiving the corresponding websocket event.\n\n return {data: newCategory};\n };\n}\n\nexport function renameCategory(categoryId: string, displayName: string) {\n return patchCategory(categoryId, {\n display_name: displayName,\n });\n}\n\nexport function deleteCategory(categoryId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const category = getCategory(state, categoryId);\n const currentUserId = getCurrentUserId(state);\n\n try {\n await Client4.deleteChannelCategory(currentUserId, category.team_id, category.id);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n // The category will be deleted from the state after receiving the corresponding websocket event.\n\n return {data: true};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {\n Channel,\n ChannelNotifyProps,\n ChannelMembership,\n ChannelModerationPatch,\n ChannelsWithTotalCount,\n ChannelSearchOpts,\n ServerChannel,\n ChannelStats,\n ChannelWithTeamData,\n} from '@mattermost/types/channels';\nimport type {OptsSignalExt} from '@mattermost/types/client4';\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {PreferenceType} from '@mattermost/types/preferences';\n\nimport {ChannelTypes, PreferenceTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {CategoryTypes} from 'mattermost-redux/constants/channel_categories';\nimport {MarkUnread} from 'mattermost-redux/constants/channels';\nimport {getCategoryInTeamByType} from 'mattermost-redux/selectors/entities/channel_categories';\nimport {\n getChannel as getChannelSelector,\n getChannelsNameMapInTeam,\n getMyChannelMember as getMyChannelMemberSelector,\n getRedirectChannelNameForTeam,\n isManuallyUnread,\n} from 'mattermost-redux/selectors/entities/channels';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport type {GetStateFunc, ActionFunc, ActionFuncAsync} from 'mattermost-redux/types/actions';\nimport {getChannelByName} from 'mattermost-redux/utils/channel_utils';\nimport {DelayedDataLoader} from 'mattermost-redux/utils/data_loader';\n\nimport {addChannelToInitialCategory, addChannelToCategory} from './channel_categories';\nimport {logError} from './errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from './helpers';\nimport {savePreferences} from './preferences';\nimport {loadRolesIfNeeded} from './roles';\nimport {getMissingProfilesByIds} from './users';\n\nimport {General, Preferences} from '../constants';\n\nexport function selectChannel(channelId: string) {\n return {\n type: ChannelTypes.SELECT_CHANNEL,\n data: channelId,\n };\n}\n\nexport function createChannel(channel: Channel, userId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let created;\n try {\n created = await Client4.createChannel(channel);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({\n type: ChannelTypes.CREATE_CHANNEL_FAILURE,\n error,\n });\n dispatch(logError(error));\n return {error};\n }\n\n const member = {\n channel_id: created.id,\n user_id: userId,\n roles: `${General.CHANNEL_USER_ROLE} ${General.CHANNEL_ADMIN_ROLE}`,\n last_viewed_at: 0,\n msg_count: 0,\n mention_count: 0,\n notify_props: {desktop: 'default', mark_unread: 'all'},\n last_update_at: created.create_at,\n };\n\n const actions: AnyAction[] = [];\n const {channels, myMembers} = getState().entities.channels;\n\n if (!channels[created.id]) {\n actions.push({type: ChannelTypes.RECEIVED_CHANNEL, data: created});\n }\n\n if (!myMembers[created.id]) {\n actions.push({type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER, data: member});\n dispatch(loadRolesIfNeeded(member.roles.split(' ')));\n }\n\n dispatch(batchActions([\n ...actions,\n {\n type: ChannelTypes.CREATE_CHANNEL_SUCCESS,\n },\n ]));\n\n dispatch(addChannelToInitialCategory(created, true));\n\n return {data: created};\n };\n}\n\nexport function createDirectChannel(userId: string, otherUserId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.CREATE_CHANNEL_REQUEST, data: null});\n\n let created;\n try {\n created = await Client4.createDirectChannel([userId, otherUserId]);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.CREATE_CHANNEL_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n const member = {\n channel_id: created.id,\n user_id: userId,\n roles: `${General.CHANNEL_USER_ROLE}`,\n last_viewed_at: 0,\n msg_count: 0,\n mention_count: 0,\n notify_props: {desktop: 'default', mark_unread: 'all'},\n last_update_at: created.create_at,\n };\n\n const preferences = [\n {user_id: userId, category: Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, name: otherUserId, value: 'true'},\n {user_id: userId, category: Preferences.CATEGORY_CHANNEL_OPEN_TIME, name: created.id, value: new Date().getTime().toString()},\n ];\n\n dispatch(savePreferences(userId, preferences));\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNEL,\n data: created,\n },\n {\n type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,\n data: member,\n },\n {\n type: PreferenceTypes.RECEIVED_PREFERENCES,\n data: preferences,\n },\n {\n type: ChannelTypes.CREATE_CHANNEL_SUCCESS,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_CHANNEL,\n id: created.id,\n data: [{id: userId}, {id: otherUserId}],\n },\n ]));\n\n dispatch(addChannelToInitialCategory(created));\n\n dispatch(loadRolesIfNeeded(member.roles.split(' ')));\n\n return {data: created};\n };\n}\n\nexport function markGroupChannelOpen(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {currentUserId} = getState().entities.users;\n\n const preferences: PreferenceType[] = [\n {user_id: currentUserId, category: Preferences.CATEGORY_GROUP_CHANNEL_SHOW, name: channelId, value: 'true'},\n {user_id: currentUserId, category: Preferences.CATEGORY_CHANNEL_OPEN_TIME, name: channelId, value: new Date().getTime().toString()},\n ];\n\n return dispatch(savePreferences(currentUserId, preferences));\n };\n}\n\nexport function createGroupChannel(userIds: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.CREATE_CHANNEL_REQUEST, data: null});\n\n const {currentUserId} = getState().entities.users;\n\n let created;\n try {\n created = await Client4.createGroupChannel(userIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.CREATE_CHANNEL_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n let member: Partial | undefined = {\n channel_id: created.id,\n user_id: currentUserId,\n roles: `${General.CHANNEL_USER_ROLE}`,\n last_viewed_at: 0,\n msg_count: 0,\n mention_count: 0,\n msg_count_root: 0,\n mention_count_root: 0,\n notify_props: {desktop: 'default', mark_unread: 'all'},\n last_update_at: created.create_at,\n };\n\n // Check the channel previous existency: if the channel already have\n // posts is because it existed before.\n if (created.total_msg_count > 0) {\n const storeMember = getMyChannelMemberSelector(getState(), created.id);\n if (storeMember) {\n member = storeMember;\n } else {\n try {\n member = await Client4.getMyChannelMember(created.id);\n } catch (error) {\n // Log the error and keep going with the generated membership.\n dispatch(logError(error));\n }\n }\n }\n\n dispatch(markGroupChannelOpen(created.id));\n\n const profilesInChannel = userIds.map((id) => ({id}));\n profilesInChannel.push({id: currentUserId}); // currentUserId is optionally in userIds, but the reducer will get rid of a duplicate\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNEL,\n data: created,\n },\n {\n type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,\n data: member,\n },\n {\n type: ChannelTypes.CREATE_CHANNEL_SUCCESS,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_CHANNEL,\n id: created.id,\n data: profilesInChannel,\n },\n ]));\n\n dispatch(addChannelToInitialCategory(created));\n\n dispatch(loadRolesIfNeeded((member && member.roles && member.roles.split(' ')) || []));\n\n return {data: created};\n };\n}\n\nexport function patchChannel(channelId: string, patch: Partial): ActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.patchChannel,\n onSuccess: [ChannelTypes.RECEIVED_CHANNEL],\n params: [channelId, patch],\n });\n}\n\nexport function updateChannelPrivacy(channelId: string, privacy: string): ActionFuncAsync {\n return bindClientFunc({\n clientFunc: Client4.updateChannelPrivacy,\n onSuccess: [ChannelTypes.RECEIVED_CHANNEL],\n params: [channelId, privacy],\n });\n}\n\nexport function convertGroupMessageToPrivateChannel(channelID: string, teamID: string, displayName: string, name: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let response;\n try {\n response = await Client4.convertGroupMessageToPrivateChannel(channelID, teamID, displayName, name);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNEL,\n data: response.data,\n });\n\n // move the channel from direct message category to the default \"channels\" category\n const channelsCategory = getCategoryInTeamByType(getState(), teamID, CategoryTypes.CHANNELS);\n if (!channelsCategory) {\n return {};\n }\n\n return {\n data: response.data,\n };\n };\n}\n\nexport function updateChannelNotifyProps(userId: string, channelId: string, props: Partial): ActionFuncAsync {\n return async (dispatch, getState) => {\n const notifyProps = {\n user_id: userId,\n channel_id: channelId,\n ...props,\n };\n\n try {\n await Client4.updateChannelNotifyProps(notifyProps);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n\n return {error};\n }\n\n const member = getState().entities.channels.myMembers[channelId] || {};\n const currentNotifyProps = member.notify_props || {};\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNEL_PROPS,\n data: {\n channel_id: channelId,\n notifyProps: {...currentNotifyProps, ...notifyProps},\n },\n });\n\n return {data: true};\n };\n}\n\nexport function getChannelByNameAndTeamName(teamName: string, channelName: string, includeDeleted = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getChannelByNameAndTeamName(teamName, channelName, includeDeleted);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNEL,\n data,\n });\n\n return {data};\n };\n}\n\nexport function getChannel(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getChannel(channelId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNEL,\n data,\n });\n\n return {data};\n };\n}\n\nexport function getChannelAndMyMember(channelId: string): ActionFuncAsync<{channel: Channel; member: ChannelMembership}> {\n return async (dispatch, getState) => {\n let channel;\n let member;\n try {\n const channelRequest = Client4.getChannel(channelId);\n const memberRequest = Client4.getMyChannelMember(channelId);\n\n channel = await channelRequest;\n member = await memberRequest;\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNEL,\n data: channel,\n },\n {\n type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,\n data: member,\n },\n ]));\n dispatch(loadRolesIfNeeded(member.roles.split(' ')));\n\n return {data: {channel, member}};\n };\n}\n\nexport function getChannelTimezones(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let channelTimezones;\n try {\n const channelTimezonesRequest = Client4.getChannelTimezones(channelId);\n\n channelTimezones = await channelTimezonesRequest;\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return {data: channelTimezones};\n };\n}\n\nexport function fetchChannelsAndMembers(teamId: string): ActionFuncAsync<{channels: ServerChannel[]; channelMembers: ChannelMembership[]}> {\n return async (dispatch, getState) => {\n let channels;\n let channelMembers;\n try {\n [channels, channelMembers] = await Promise.all([\n Client4.getMyChannels(teamId),\n Client4.getMyChannelMembers(teamId),\n ]);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error: error as ServerError};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNELS,\n teamId,\n data: channels,\n },\n {\n type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBERS,\n data: channelMembers,\n },\n ]));\n\n const roles = new Set();\n for (const member of channelMembers) {\n for (const role of member.roles.split(' ')) {\n roles.add(role);\n }\n }\n if (roles.size > 0) {\n dispatch(loadRolesIfNeeded(roles));\n }\n\n return {data: {channels, channelMembers}};\n };\n}\n\nexport function fetchAllMyChannelMembers(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const {currentUserId} = state.entities.users;\n\n let channelsMembers: ChannelMembership[] = [];\n let hasMoreMembers = true;\n let page = 0;\n try {\n while (hasMoreMembers) {\n // Expected to disable since we don't have number of pages, so we can't use Promise.all\n // eslint-disable-next-line no-await-in-loop\n const data = await Client4.getAllChannelsMembers(currentUserId, page, 200);\n channelsMembers = [...channelsMembers, ...data];\n if (data.length < 200) {\n hasMoreMembers = false;\n }\n page++;\n }\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBERS,\n data: channelsMembers,\n currentUserId,\n });\n return {data: channelsMembers};\n };\n}\n\nexport function fetchAllMyTeamsChannels(): ActionFuncAsync {\n return async (dispatch, getState) => {\n let channels;\n try {\n channels = await Client4.getAllTeamsChannels();\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_ALL_CHANNELS,\n data: channels,\n });\n return {data: channels};\n };\n}\n\nexport function getChannelMembers(channelId: string, page = 0, perPage: number = General.CHANNELS_CHUNK_SIZE): ActionFuncAsync {\n return async (dispatch, getState) => {\n let channelMembers: ChannelMembership[];\n\n try {\n const channelMembersRequest = Client4.getChannelMembers(channelId, page, perPage);\n\n channelMembers = await channelMembersRequest;\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const userIds = channelMembers.map((cm) => cm.user_id);\n dispatch(getMissingProfilesByIds(userIds));\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNEL_MEMBERS,\n data: channelMembers,\n });\n\n return {data: channelMembers};\n };\n}\n\nexport function leaveChannel(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const {currentUserId} = state.entities.users;\n const {channels, myMembers} = state.entities.channels;\n const channel = channels[channelId];\n const member = myMembers[channelId];\n\n Client4.trackEvent('action', 'action_channels_leave', {channel_id: channelId});\n\n dispatch({\n type: ChannelTypes.LEAVE_CHANNEL,\n data: {\n id: channelId,\n user_id: currentUserId,\n team_id: channel.team_id,\n type: channel.type,\n },\n });\n\n (async function removeFromChannelWrapper() {\n try {\n await Client4.removeFromChannel(currentUserId, channelId);\n } catch {\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNEL,\n data: channel,\n },\n {\n type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,\n data: member,\n },\n ]));\n\n // The category here may not be the one in which the channel was originally located,\n // much less the order in which it was placed. Treating this as a transient issue\n // for the user to resolve by refreshing or leaving again.\n dispatch(addChannelToInitialCategory(channel, false));\n }\n }());\n\n return {data: true};\n };\n}\n\nexport function joinChannel(userId: string, teamId: string, channelId: string, channelName?: string): ActionFuncAsync<{channel: Channel; member: ChannelMembership} | null> {\n return async (dispatch, getState) => {\n if (!channelId && !channelName) {\n return {data: null};\n }\n\n let member: ChannelMembership | undefined | null;\n let channel: Channel;\n try {\n if (channelId) {\n member = await Client4.addToChannel(userId, channelId);\n channel = await Client4.getChannel(channelId);\n } else {\n channel = await Client4.getChannelByName(teamId, channelName!, true);\n if ((channel.type === General.GM_CHANNEL) || (channel.type === General.DM_CHANNEL)) {\n member = await Client4.getChannelMember(channel.id, userId);\n } else {\n member = await Client4.addToChannel(userId, channel.id);\n }\n }\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n Client4.trackEvent('action', 'action_channels_join', {channel_id: channelId});\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNEL,\n data: channel,\n },\n {\n type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,\n data: member,\n },\n ]));\n\n dispatch(addChannelToInitialCategory(channel));\n\n if (member) {\n dispatch(loadRolesIfNeeded(member.roles.split(' ')));\n }\n\n return {data: {channel, member}};\n };\n}\n\nexport function deleteChannel(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let state = getState();\n const viewArchivedChannels = state.entities.general.config.ExperimentalViewArchivedChannels === 'true';\n\n try {\n await Client4.deleteChannel(channelId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n state = getState();\n const {currentChannelId} = state.entities.channels;\n if (channelId === currentChannelId && !viewArchivedChannels) {\n const teamId = getCurrentTeamId(state);\n const channelsInTeam = getChannelsNameMapInTeam(state, teamId);\n const channel = getChannelByName(channelsInTeam, getRedirectChannelNameForTeam(state, teamId));\n if (channel && channel.id) {\n dispatch({type: ChannelTypes.SELECT_CHANNEL, data: channel.id});\n }\n }\n\n dispatch({type: ChannelTypes.DELETE_CHANNEL_SUCCESS, data: {id: channelId, viewArchivedChannels}});\n\n return {data: true};\n };\n}\n\nexport function unarchiveChannel(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.unarchiveChannel(channelId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const state = getState();\n const config = getConfig(state);\n const viewArchivedChannels = config.ExperimentalViewArchivedChannels === 'true';\n dispatch({type: ChannelTypes.UNARCHIVED_CHANNEL_SUCCESS, data: {id: channelId, viewArchivedChannels}});\n\n return {data: true};\n };\n}\n\nexport function updateApproximateViewTime(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {currentUserId} = getState().entities.users;\n\n const {myPreferences} = getState().entities.preferences;\n\n const viewTimePref = myPreferences[`${Preferences.CATEGORY_CHANNEL_APPROXIMATE_VIEW_TIME}--${channelId}`];\n const viewTime = viewTimePref ? parseInt(viewTimePref.value!, 10) : 0;\n if (viewTime < new Date().getTime() - (3 * 60 * 60 * 1000)) {\n const preferences = [\n {user_id: currentUserId, category: Preferences.CATEGORY_CHANNEL_APPROXIMATE_VIEW_TIME, name: channelId, value: new Date().getTime().toString()},\n ];\n dispatch(savePreferences(currentUserId, preferences));\n }\n return {data: true};\n };\n}\n\nexport function unsetActiveChannelOnServer(): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n // The view channel api in the server handles the active channel\n await Client4.viewMyChannel('');\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {data: false};\n }\n\n return {data: true};\n };\n}\n\nexport function readMultipleChannels(channelIds: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let response;\n try {\n response = await Client4.readMultipleChannels(channelIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(markMultipleChannelsAsRead(response.last_viewed_at_times));\n\n return {data: true};\n };\n}\n\nexport function getChannels(teamId: string, page = 0, perPage: number = General.CHANNELS_CHUNK_SIZE): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.GET_CHANNELS_REQUEST, data: null});\n\n let channels;\n try {\n channels = await Client4.getChannels(teamId, page, perPage);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.GET_CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNELS,\n teamId,\n data: channels,\n },\n {\n type: ChannelTypes.GET_CHANNELS_SUCCESS,\n },\n ]));\n\n return {data: channels};\n };\n}\n\nexport function getArchivedChannels(teamId: string, page = 0, perPage: number = General.CHANNELS_CHUNK_SIZE): ActionFuncAsync {\n return async (dispatch, getState) => {\n let channels;\n try {\n channels = await Client4.getArchivedChannels(teamId, page, perPage);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNELS,\n teamId,\n data: channels,\n });\n\n return {data: channels};\n };\n}\n\nexport function getAllChannelsWithCount(page = 0, perPage: number = General.CHANNELS_CHUNK_SIZE, notAssociatedToGroup = '', excludeDefaultChannels = false, includeDeleted = false, excludePolicyConstrained = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.GET_ALL_CHANNELS_REQUEST, data: null});\n\n let payload;\n try {\n payload = await Client4.getAllChannels(page, perPage, notAssociatedToGroup, excludeDefaultChannels, true, includeDeleted, excludePolicyConstrained);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.GET_ALL_CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_ALL_CHANNELS,\n data: payload.channels,\n },\n {\n type: ChannelTypes.GET_ALL_CHANNELS_SUCCESS,\n },\n {\n type: ChannelTypes.RECEIVED_TOTAL_CHANNEL_COUNT,\n data: payload.total_count,\n },\n ]));\n\n return {data: payload};\n };\n}\n\nexport function getAllChannels(page = 0, perPage: number = General.CHANNELS_CHUNK_SIZE, notAssociatedToGroup = '', excludeDefaultChannels = false, excludePolicyConstrained = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.GET_ALL_CHANNELS_REQUEST, data: null});\n\n let channels;\n try {\n channels = await Client4.getAllChannels(page, perPage, notAssociatedToGroup, excludeDefaultChannels, false, false, excludePolicyConstrained);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.GET_ALL_CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_ALL_CHANNELS,\n data: channels,\n },\n {\n type: ChannelTypes.GET_ALL_CHANNELS_SUCCESS,\n },\n ]));\n\n return {data: channels};\n };\n}\n\nexport function autocompleteChannels(teamId: string, term: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.GET_CHANNELS_REQUEST, data: null});\n\n let channels;\n try {\n channels = await Client4.autocompleteChannels(teamId, term);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.GET_CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNELS,\n teamId,\n data: channels,\n },\n {\n type: ChannelTypes.GET_CHANNELS_SUCCESS,\n },\n ]));\n\n return {data: channels};\n };\n}\n\nexport function autocompleteChannelsForSearch(teamId: string, term: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.GET_CHANNELS_REQUEST, data: null});\n\n let channels;\n try {\n channels = await Client4.autocompleteChannelsForSearch(teamId, term);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.GET_CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNELS,\n teamId,\n data: channels,\n },\n {\n type: ChannelTypes.GET_CHANNELS_SUCCESS,\n },\n ]));\n\n return {data: channels};\n };\n}\n\nexport function searchChannels(teamId: string, term: string, archived?: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.GET_CHANNELS_REQUEST, data: null});\n\n let channels;\n try {\n if (archived) {\n channels = await Client4.searchArchivedChannels(teamId, term);\n } else {\n channels = await Client4.searchChannels(teamId, term);\n }\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.GET_CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_CHANNELS,\n teamId,\n data: channels,\n },\n {\n type: ChannelTypes.GET_CHANNELS_SUCCESS,\n },\n ]));\n\n return {data: channels};\n };\n}\n\nexport function searchAllChannels(term: string, opts: {page: number; per_page: number} & ChannelSearchOpts & OptsSignalExt): ActionFuncAsync;\nexport function searchAllChannels(term: string, opts: Omit & OptsSignalExt | undefined): ActionFuncAsync;\nexport function searchAllChannels(term: string, opts: ChannelSearchOpts & OptsSignalExt = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: ChannelTypes.GET_ALL_CHANNELS_REQUEST, data: null});\n\n let response;\n try {\n response = await Client4.searchAllChannels(term, opts);\n } catch (error) {\n if (opts.signal?.aborted) {\n return {error};\n }\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: ChannelTypes.GET_ALL_CHANNELS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n const channels = 'channels' in response ? response.channels : response;\n\n dispatch(batchActions([\n {\n type: ChannelTypes.RECEIVED_ALL_CHANNELS,\n data: channels,\n },\n {\n type: ChannelTypes.GET_ALL_CHANNELS_SUCCESS,\n },\n ]));\n\n return {data: response};\n };\n}\n\nexport function searchGroupChannels(term: string) {\n return bindClientFunc({\n clientFunc: Client4.searchGroupChannels,\n params: [term],\n });\n}\n\nexport function getChannelStats(channelId: string, includeFileCount?: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n let stat;\n try {\n stat = await Client4.getChannelStats(channelId, includeFileCount);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNEL_STATS,\n data: stat,\n });\n\n return {data: stat};\n };\n}\n\nexport function getChannelsMemberCount(channelIds: string[]): ActionFuncAsync> {\n return async (dispatch, getState) => {\n let channelsMemberCount;\n\n try {\n channelsMemberCount = await Client4.getChannelsMemberCount(channelIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: ChannelTypes.RECEIVED_CHANNELS_MEMBER_COUNT,\n data: channelsMemberCount,\n });\n\n return {data: channelsMemberCount};\n };\n}\n\nexport function addChannelMember(channelId: string, userId: string, postRootId = ''): ActionFuncAsync {\n return async (dispatch, getState) => {\n let member;\n try {\n member = await Client4.addToChannel(userId, channelId, postRootId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n Client4.trackEvent('action', 'action_channels_add_member', {channel_id: channelId});\n\n const membersInChannel = getState().entities.channels.membersInChannel[channelId];\n if (!(membersInChannel && userId in membersInChannel)) {\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILE_IN_CHANNEL,\n data: {id: channelId, user_id: userId},\n },\n {\n type: ChannelTypes.RECEIVED_CHANNEL_MEMBER,\n data: member,\n },\n {\n type: ChannelTypes.ADD_CHANNEL_MEMBER_SUCCESS,\n id: channelId,\n },\n ], 'ADD_CHANNEL_MEMBER.BATCH'));\n }\n\n return {data: member};\n };\n}\n\nexport function addChannelMembers(channelId: string, userIds: string[], postRootId = ''): ActionFuncAsync {\n const batchSize = 1000;\n return async (dispatch, getState) => {\n const channelMembers: ChannelMembership[] = [];\n try {\n for (let i = 0; i < userIds.length; i += batchSize) {\n // eslint-disable-next-line no-await-in-loop\n const cm = await Client4.addToChannels(userIds.slice(i, i + batchSize), channelId, postRootId);\n channelMembers.push(...cm);\n }\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n Client4.trackEvent('action', 'action_channels_add_member', {channel_id: channelId});\n\n const ids = channelMembers.map((member) => ({id: member.user_id}));\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILES_IN_CHANNEL,\n id: channelId,\n data: ids,\n },\n {\n type: ChannelTypes.RECEIVED_CHANNEL_MEMBERS,\n data: channelMembers,\n },\n {\n type: ChannelTypes.ADD_CHANNEL_MEMBER_SUCCESS,\n id: channelId,\n count: channelMembers.length,\n },\n ], 'ADD_CHANNEL_MEMBERS.BATCH'));\n return {data: channelMembers};\n };\n}\n\nexport function removeChannelMember(channelId: string, userId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.removeFromChannel(userId, channelId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n Client4.trackEvent('action', 'action_channels_remove_member', {channel_id: channelId});\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILE_NOT_IN_CHANNEL,\n data: {id: channelId, user_id: userId},\n },\n {\n type: ChannelTypes.REMOVE_CHANNEL_MEMBER_SUCCESS,\n id: channelId,\n },\n ], 'REMOVE_CHANNEL_MEMBER.BATCH'));\n\n return {data: true};\n };\n}\n\nexport function markChannelAsRead(channelId: string, skipUpdateViewTime = false): ActionFunc {\n return (dispatch, getState) => {\n if (skipUpdateViewTime) {\n dispatch(updateApproximateViewTime(channelId));\n }\n dispatch(markChannelAsViewedOnServer(channelId));\n\n const actions = actionsToMarkChannelAsRead(getState, channelId);\n if (actions.length > 0) {\n dispatch(batchActions(actions));\n }\n\n return {data: true};\n };\n}\n\nexport function markMultipleChannelsAsRead(channelTimes: Record): ActionFunc {\n return (dispatch, getState) => {\n const actions: AnyAction[] = [];\n for (const id of Object.keys(channelTimes)) {\n actions.push(...actionsToMarkChannelAsRead(getState, id, channelTimes[id]));\n }\n\n if (actions.length > 0) {\n dispatch(batchActions(actions));\n }\n\n return {data: true};\n };\n}\n\nexport function markChannelAsViewedOnServer(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.viewMyChannel(channelId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n // const actions: AnyAction[] = [];\n // for (const id of Object.keys(response.last_viewed_at_times)) {\n // actions.push({\n // type: ChannelTypes.RECEIVED_LAST_VIEWED_AT,\n // data: {\n // channel_id: channelId,\n // last_viewed_at: response.last_viewed_at_times[id],\n // },\n // });\n // }\n\n return {data: true};\n };\n}\n\nexport function actionsToMarkChannelAsRead(getState: GetStateFunc, channelId: string, viewedAt = Date.now()) {\n const state = getState();\n const {channels, messageCounts, myMembers} = state.entities.channels;\n\n // Update channel member objects to set all mentions and posts as viewed\n const channel = channels[channelId];\n const messageCount = messageCounts[channelId];\n\n // Update team member objects to set mentions and posts in channel as viewed\n const channelMember = myMembers[channelId];\n\n const actions: AnyAction[] = [];\n\n if (channel && channelMember) {\n actions.push({\n type: ChannelTypes.DECREMENT_UNREAD_MSG_COUNT,\n data: {\n teamId: channel.team_id,\n channelId,\n amount: messageCount.total - channelMember.msg_count,\n amountRoot: messageCount.root - channelMember.msg_count_root,\n },\n });\n\n actions.push({\n type: ChannelTypes.DECREMENT_UNREAD_MENTION_COUNT,\n data: {\n teamId: channel.team_id,\n channelId,\n amount: channelMember.mention_count,\n amountRoot: channelMember.mention_count_root,\n amountUrgent: channelMember.urgent_mention_count,\n },\n });\n\n actions.push({\n type: ChannelTypes.RECEIVED_LAST_VIEWED_AT,\n data: {\n channel_id: channelId,\n last_viewed_at: viewedAt,\n },\n });\n }\n\n if (channel && isManuallyUnread(getState(), channelId)) {\n actions.push({\n type: ChannelTypes.REMOVE_MANUALLY_UNREAD,\n data: {channelId},\n });\n }\n\n return actions;\n}\n\nexport function actionsToMarkChannelAsUnread(getState: GetStateFunc, teamId: string, channelId: string, mentions: string, fetchedChannelMember = false, isRoot = false, priority = '') {\n const state = getState();\n const {myMembers} = state.entities.channels;\n const {currentUserId} = state.entities.users;\n\n const actions: AnyAction[] = [{\n type: ChannelTypes.INCREMENT_UNREAD_MSG_COUNT,\n data: {\n teamId,\n channelId,\n amount: 1,\n amountRoot: isRoot ? 1 : 0,\n onlyMentions: myMembers[channelId] && myMembers[channelId].notify_props &&\n myMembers[channelId].notify_props.mark_unread === MarkUnread.MENTION,\n fetchedChannelMember,\n },\n }];\n\n if (!fetchedChannelMember) {\n actions.push({\n type: ChannelTypes.INCREMENT_TOTAL_MSG_COUNT,\n data: {\n channelId,\n amountRoot: isRoot ? 1 : 0,\n amount: 1,\n },\n });\n }\n\n if (mentions && mentions.indexOf(currentUserId) !== -1) {\n actions.push({\n type: ChannelTypes.INCREMENT_UNREAD_MENTION_COUNT,\n data: {\n teamId,\n channelId,\n amountRoot: isRoot ? 1 : 0,\n amount: 1,\n amountUrgent: priority === 'urgent' ? 1 : 0,\n fetchedChannelMember,\n },\n });\n }\n\n return actions;\n}\n\nexport function getChannelMembersByIds(channelId: string, userIds: string[]) {\n return bindClientFunc({\n clientFunc: Client4.getChannelMembersByIds,\n onSuccess: ChannelTypes.RECEIVED_CHANNEL_MEMBERS,\n params: [\n channelId,\n userIds,\n ],\n });\n}\n\nexport function getChannelMember(channelId: string, userId: string) {\n return bindClientFunc({\n clientFunc: Client4.getChannelMember,\n onSuccess: ChannelTypes.RECEIVED_CHANNEL_MEMBER,\n params: [\n channelId,\n userId,\n ],\n });\n}\n\nexport function getMyChannelMember(channelId: string) {\n return bindClientFunc({\n clientFunc: Client4.getMyChannelMember,\n onSuccess: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,\n params: [\n channelId,\n ],\n });\n}\n\nexport function loadMyChannelMemberAndRole(channelId: string): ActionFuncAsync {\n return async (dispatch) => {\n const result = await dispatch(getMyChannelMember(channelId));\n const roles = result.data?.roles.split(' ');\n if (roles && roles.length > 0) {\n dispatch(loadRolesIfNeeded(roles));\n }\n return {data: true};\n };\n}\n\n// favoriteChannel moves the provided channel into the current team's Favorites category.\nexport function favoriteChannel(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const channel = getChannelSelector(state, channelId);\n const category = getCategoryInTeamByType(state, channel?.team_id || getCurrentTeamId(state), CategoryTypes.FAVORITES);\n\n Client4.trackEvent('action', 'action_channels_favorite');\n\n if (!category) {\n return {data: false};\n }\n\n return dispatch(addChannelToCategory(category.id, channelId));\n };\n}\n\n// unfavoriteChannel moves the provided channel into the current team's Channels/DMs category.\nexport function unfavoriteChannel(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const channel = getChannelSelector(state, channelId);\n if (!channel) {\n return {data: false};\n }\n\n const category = getCategoryInTeamByType(\n state,\n channel.team_id || getCurrentTeamId(state),\n channel.type === General.DM_CHANNEL || channel.type === General.GM_CHANNEL ? CategoryTypes.DIRECT_MESSAGES : CategoryTypes.CHANNELS,\n );\n\n Client4.trackEvent('action', 'action_channels_unfavorite');\n\n if (!category) {\n return {data: false};\n }\n\n return dispatch(addChannelToCategory(category.id, channel.id));\n };\n}\n\nexport function updateChannelScheme(channelId: string, schemeId: string) {\n return bindClientFunc({\n clientFunc: async () => {\n await Client4.updateChannelScheme(channelId, schemeId);\n return {channelId, schemeId};\n },\n onSuccess: ChannelTypes.UPDATED_CHANNEL_SCHEME,\n });\n}\n\nexport function updateChannelMemberSchemeRoles(channelId: string, userId: string, isSchemeUser: boolean, isSchemeAdmin: boolean) {\n return bindClientFunc({\n clientFunc: async () => {\n await Client4.updateChannelMemberSchemeRoles(channelId, userId, isSchemeUser, isSchemeAdmin);\n return {channelId, userId, isSchemeUser, isSchemeAdmin};\n },\n onSuccess: ChannelTypes.UPDATED_CHANNEL_MEMBER_SCHEME_ROLES,\n });\n}\n\nexport function membersMinusGroupMembers(channelID: string, groupIDs: string[], page = 0, perPage: number = General.PROFILE_CHUNK_SIZE) {\n return bindClientFunc({\n clientFunc: Client4.channelMembersMinusGroupMembers,\n onSuccess: ChannelTypes.RECEIVED_CHANNEL_MEMBERS_MINUS_GROUP_MEMBERS,\n params: [\n channelID,\n groupIDs,\n page,\n perPage,\n ],\n });\n}\n\nexport function getChannelModerations(channelId: string) {\n return bindClientFunc({\n clientFunc: async () => {\n const moderations = await Client4.getChannelModerations(channelId);\n return {channelId, moderations};\n },\n onSuccess: ChannelTypes.RECEIVED_CHANNEL_MODERATIONS,\n });\n}\n\nexport function patchChannelModerations(channelId: string, patch: ChannelModerationPatch[]) {\n return bindClientFunc({\n clientFunc: async () => {\n const moderations = await Client4.patchChannelModerations(channelId, patch);\n return {channelId, moderations};\n },\n onSuccess: ChannelTypes.RECEIVED_CHANNEL_MODERATIONS,\n });\n}\n\nexport function getChannelMemberCountsByGroup(channelId: string) {\n return bindClientFunc({\n clientFunc: async () => {\n const channelMemberCountsByGroup = await Client4.getChannelMemberCountsByGroup(channelId, true);\n return {channelId, memberCounts: channelMemberCountsByGroup};\n },\n onSuccess: ChannelTypes.RECEIVED_CHANNEL_MEMBER_COUNTS_BY_GROUP,\n });\n}\n\nexport function fetchMissingChannels(channelIDs: string[]): ActionFuncAsync> {\n return async (dispatch, getState, {loaders}: any) => {\n if (!loaders.missingChannelLoader) {\n loaders.missingChannelLoader = new DelayedDataLoader({\n fetchBatch: (channelIDs) => {\n return channelIDs.length ? dispatch(getChannel(channelIDs[0])) : Promise.resolve();\n },\n maxBatchSize: 1,\n wait: 100,\n });\n }\n\n const state = getState();\n const missingChannelIDs = channelIDs.filter((channelId) => !getChannelSelector(state, channelId));\n\n if (missingChannelIDs.length > 0) {\n const loader = loaders.missingChannelLoader as DelayedDataLoader;\n loader.queue(missingChannelIDs);\n }\n\n return {\n data: missingChannelIDs,\n };\n };\n}\n\nexport default {\n selectChannel,\n createChannel,\n createDirectChannel,\n patchChannel,\n updateChannelNotifyProps,\n getChannel,\n fetchChannelsAndMembers,\n getChannelTimezones,\n getChannelMembersByIds,\n leaveChannel,\n joinChannel,\n deleteChannel,\n unarchiveChannel,\n getChannels,\n autocompleteChannels,\n autocompleteChannelsForSearch,\n searchChannels,\n searchGroupChannels,\n getChannelStats,\n addChannelMember,\n addChannelMembers,\n removeChannelMember,\n markChannelAsRead,\n favoriteChannel,\n unfavoriteChannel,\n membersMinusGroupMembers,\n getChannelModerations,\n getChannelMemberCountsByGroup,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {CustomEmoji} from '@mattermost/types/emojis';\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {EmojiTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {getCustomEmojisByName as selectCustomEmojisByName} from 'mattermost-redux/selectors/entities/emojis';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\nimport {parseEmojiNamesFromText} from 'mattermost-redux/utils/emoji_utils';\n\nimport {logError} from './errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from './helpers';\nimport {getProfilesByIds} from './users';\n\nimport {General, Emoji} from '../constants';\n\nexport let systemEmojis: Set = new Set();\nexport function setSystemEmojis(emojis: Set) {\n systemEmojis = emojis;\n}\n\nexport function createCustomEmoji(emoji: any, image: any) {\n return bindClientFunc({\n clientFunc: Client4.createCustomEmoji,\n onSuccess: EmojiTypes.RECEIVED_CUSTOM_EMOJI,\n params: [\n emoji,\n image,\n ],\n });\n}\n\nexport function getCustomEmoji(emojiId: string) {\n return bindClientFunc({\n clientFunc: Client4.getCustomEmoji,\n onSuccess: EmojiTypes.RECEIVED_CUSTOM_EMOJI,\n params: [\n emojiId,\n ],\n });\n}\n\nexport function getCustomEmojiByName(name: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n\n try {\n data = await Client4.getCustomEmojiByName(name);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n\n if (error.status_code === 404) {\n dispatch({type: EmojiTypes.CUSTOM_EMOJI_DOES_NOT_EXIST, data: name});\n } else {\n dispatch(logError(error));\n }\n\n return {error};\n }\n\n dispatch({\n type: EmojiTypes.RECEIVED_CUSTOM_EMOJI,\n data,\n });\n\n return {data};\n };\n}\n\nexport function getCustomEmojisByName(names: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n const neededNames = filterNeededCustomEmojis(getState(), names);\n\n if (neededNames.length === 0) {\n return {data: true};\n }\n\n // If necessary, split up the list of names into batches based on api4.GetEmojisByNamesMax on the server\n const batchSize = 200;\n\n const batches = [];\n for (let i = 0; i < names.length; i += batchSize) {\n batches.push(neededNames.slice(i, i + batchSize));\n }\n\n let results;\n try {\n results = await Promise.all(batches.map((batch) => {\n return Client4.getCustomEmojisByNames(batch);\n }));\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const data = results.flat();\n const actions: AnyAction[] = [{\n type: EmojiTypes.RECEIVED_CUSTOM_EMOJIS,\n data,\n }];\n\n if (data.length !== neededNames.length) {\n const foundNames = new Set(data.map((emoji) => emoji.name));\n\n for (const name of neededNames) {\n if (foundNames.has(name)) {\n continue;\n }\n\n actions.push({\n type: EmojiTypes.CUSTOM_EMOJI_DOES_NOT_EXIST,\n data: name,\n });\n }\n }\n\n dispatch(actions.length > 1 ? batchActions(actions) : actions[0]);\n\n return {data: true};\n };\n}\n\nfunction filterNeededCustomEmojis(state: GlobalState, names: string[]) {\n const nonExistentEmoji = state.entities.emojis.nonExistentEmoji;\n const customEmojisByName = selectCustomEmojisByName(state);\n\n return names.filter((name) => {\n return !systemEmojis.has(name) && !nonExistentEmoji.has(name) && !customEmojisByName.has(name);\n });\n}\n\nexport function getCustomEmojisInText(text: string): ActionFuncAsync {\n return async (dispatch) => {\n if (!text) {\n return {data: true};\n }\n\n return dispatch(getCustomEmojisByName(parseEmojiNamesFromText(text)));\n };\n}\n\nexport function getCustomEmojis(\n page = 0,\n perPage: number = General.PAGE_SIZE_DEFAULT,\n sort: string = Emoji.SORT_BY_NAME,\n loadUsers = false,\n): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getCustomEmojis(page, perPage, sort);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n\n dispatch(logError(error));\n return {error};\n }\n\n if (loadUsers) {\n dispatch(loadProfilesForCustomEmojis(data));\n }\n\n dispatch({\n type: EmojiTypes.RECEIVED_CUSTOM_EMOJIS,\n data,\n });\n\n return {data};\n };\n}\n\nexport function loadProfilesForCustomEmojis(emojis: CustomEmoji[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n const usersToLoad: Record = {};\n emojis.forEach((emoji: CustomEmoji) => {\n if (!getState().entities.users.profiles[emoji.creator_id]) {\n usersToLoad[emoji.creator_id] = true;\n }\n });\n\n const userIds = Object.keys(usersToLoad);\n\n if (userIds.length > 0) {\n await dispatch(getProfilesByIds(userIds));\n }\n\n return {data: true};\n };\n}\n\nexport function deleteCustomEmoji(emojiId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.deleteCustomEmoji(emojiId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: EmojiTypes.DELETED_CUSTOM_EMOJI,\n data: {id: emojiId},\n });\n\n return {data: true};\n };\n}\n\nexport function searchCustomEmojis(term: string, options: any = {}, loadUsers = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.searchCustomEmoji(term, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n\n dispatch(logError(error));\n return {error};\n }\n\n if (loadUsers) {\n dispatch(loadProfilesForCustomEmojis(data));\n }\n\n dispatch({\n type: EmojiTypes.RECEIVED_CUSTOM_EMOJIS,\n data,\n });\n\n return {data};\n };\n}\n\nexport function autocompleteCustomEmojis(name: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.autocompleteCustomEmoji(name);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: EmojiTypes.RECEIVED_CUSTOM_EMOJIS,\n data,\n });\n\n return {data};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {serializeError} from 'serialize-error';\nimport type {ErrorObject} from 'serialize-error';\n\nimport {LogLevel} from '@mattermost/types/client4';\nimport type {ServerError} from '@mattermost/types/errors';\n\nimport {ErrorTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\n\nexport function dismissError(index: number) {\n return {\n type: ErrorTypes.DISMISS_ERROR,\n index,\n data: null,\n };\n}\n\nexport function getLogErrorAction(error: ErrorObject, displayable = false) {\n return {\n type: ErrorTypes.LOG_ERROR,\n displayable,\n error,\n data: null,\n };\n}\n\nexport function logError(error: ServerError, displayable = false, consoleError = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n if (error.server_error_id === 'api.context.session_expired.app_error') {\n return {data: true};\n }\n\n let sendToServer = true;\n\n const message = error.stack || '';\n if (message.includes('TypeError: Failed to fetch')) {\n sendToServer = false;\n }\n if (error.server_error_id) {\n sendToServer = false;\n }\n\n const serializedError = serializeError(error);\n\n if (sendToServer) {\n try {\n const stringifiedSerializedError = JSON.stringify(serializedError).toString();\n await Client4.logClientError(stringifiedSerializedError, LogLevel.Debug);\n } catch (err) {\n // avoid crashing the app if an error sending \"the error\" occurs.\n }\n }\n\n if (consoleError) {\n serializedError.message = 'A JavaScript error has occurred. Please use the JavaScript console to capture and report the error';\n }\n\n const isDevMode = getState()?.entities.general?.config?.EnableDeveloper === 'true';\n let shouldDisplay = displayable;\n\n // Display announcements bar if error is a developer error and we are in dev mode\n if (isDevMode && error.type === 'developer') {\n shouldDisplay = true;\n }\n\n dispatch(getLogErrorAction(serializedError, shouldDisplay));\n\n return {data: true};\n };\n}\n\nexport function clearErrors() {\n return {\n type: ErrorTypes.CLEAR_ERRORS,\n data: null,\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {FileSearchResultItem} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\n\nimport {FileTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {logError} from './errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from './helpers';\n\nexport function receivedFiles(files: Map) {\n return {\n type: FileTypes.RECEIVED_FILES_FOR_SEARCH,\n data: files,\n };\n}\n\nexport function getMissingFilesByPosts(posts: Post[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {files} = getState().entities.files;\n const postIds = posts.reduce((curr: Array, post: Post) => {\n const {file_ids: fileIds} = post;\n if (!fileIds || fileIds.every((id) => files[id])) {\n return curr;\n }\n curr.push(post.id);\n\n return curr;\n }, []);\n\n for (const id of postIds) {\n dispatch(getFilesForPost(id));\n }\n\n return {data: true};\n };\n}\n\nexport function getFilesForPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let files;\n\n try {\n files = await Client4.getFileInfosForPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n data: files,\n postId,\n });\n\n return {data: true};\n };\n}\n\nexport function getFilePublicLink(fileId: string) {\n return bindClientFunc({\n clientFunc: Client4.getFilePublicLink,\n onSuccess: FileTypes.RECEIVED_FILE_PUBLIC_LINK,\n params: [\n fileId,\n ],\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {batchActions} from 'redux-batched-actions';\n\nimport {LogLevel} from '@mattermost/types/client4';\nimport type {ClientConfig} from '@mattermost/types/config';\nimport type {SystemSetting} from '@mattermost/types/general';\n\nimport {AppsTypes, GeneralTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {logError} from './errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from './helpers';\nimport {loadRolesIfNeeded} from './roles';\n\nexport function getClientConfig(): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getClientConfigOld();\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n Client4.setEnableLogging(data.EnableDeveloper === 'true');\n Client4.setDiagnosticId(data.DiagnosticId);\n\n const type = data.AppsPluginEnabled === 'true' ? AppsTypes.APPS_PLUGIN_ENABLED : AppsTypes.APPS_PLUGIN_DISABLED;\n const actions = [{type: GeneralTypes.CLIENT_CONFIG_RECEIVED, data}, {type}];\n dispatch(batchActions(actions));\n\n return {data};\n };\n}\n\nexport function getLicenseConfig() {\n return bindClientFunc({\n clientFunc: Client4.getClientLicenseOld,\n onSuccess: [GeneralTypes.CLIENT_LICENSE_RECEIVED],\n });\n}\n\nexport function getCustomProfileAttributeFields() {\n return bindClientFunc({\n clientFunc: Client4.getCustomProfileAttributeFields,\n onSuccess: [GeneralTypes.CUSTOM_PROFILE_ATTRIBUTES_RECEIVED],\n });\n}\n\nexport function getCustomProfileAttributeValues(userID: string) {\n return async () => {\n let data;\n try {\n data = await Client4.getUserCustomProfileAttributesValues(userID);\n } catch (error) {\n return {error};\n }\n return {data};\n };\n}\n\nexport function logClientError(message: string, level = LogLevel.Error) {\n return bindClientFunc({\n clientFunc: Client4.logClientError,\n onRequest: GeneralTypes.LOG_CLIENT_ERROR_REQUEST,\n onSuccess: GeneralTypes.LOG_CLIENT_ERROR_SUCCESS,\n onFailure: GeneralTypes.LOG_CLIENT_ERROR_FAILURE,\n params: [\n message,\n level,\n ],\n });\n}\n\nexport function setServerVersion(serverVersion: string): ActionFuncAsync {\n return async (dispatch) => {\n dispatch({type: GeneralTypes.RECEIVED_SERVER_VERSION, data: serverVersion});\n dispatch(loadRolesIfNeeded([]));\n\n return {data: true};\n };\n}\n\nexport function setUrl(url: string) {\n Client4.setUrl(url);\n return true;\n}\n\nexport function setFirstAdminVisitMarketplaceStatus(): ActionFuncAsync {\n return async (dispatch) => {\n try {\n await Client4.setFirstAdminVisitMarketplaceStatus();\n } catch (e) {\n dispatch(logError(e));\n return {error: e.message};\n }\n dispatch({type: GeneralTypes.FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED, data: true});\n return {data: true};\n };\n}\n\n// accompanying \"set\" happens as part of Client4.completeSetup\nexport function getFirstAdminSetupComplete(): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getFirstAdminSetupComplete();\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n data = JSON.parse(data.value);\n dispatch({type: GeneralTypes.FIRST_ADMIN_COMPLETE_SETUP_RECEIVED, data});\n return {data};\n };\n}\n\nexport default {\n getClientConfig,\n getLicenseConfig,\n getCustomProfileAttributeFields,\n logClientError,\n setServerVersion,\n setUrl,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {GroupPatch, SyncablePatch, GroupCreateWithUserIds, CustomGroupPatch, GroupSearchParams, GetGroupsParams, GetGroupsForUserParams, Group} from '@mattermost/types/groups';\nimport {SyncableType, GroupSource} from '@mattermost/types/groups';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {ChannelTypes, GroupTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {General} from 'mattermost-redux/constants';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {logError} from './errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from './helpers';\n\nexport function linkGroupSyncable(groupID: string, syncableID: string, syncableType: SyncableType, patch: Partial): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.linkGroupSyncable(groupID, syncableID, syncableType, patch);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const dispatches: AnyAction[] = [];\n let type = '';\n switch (syncableType) {\n case SyncableType.Team:\n dispatches.push({type: GroupTypes.RECEIVED_GROUP_ASSOCIATED_TO_TEAM, data: {teamID: syncableID, groups: [{id: groupID}]}});\n type = GroupTypes.LINKED_GROUP_TEAM;\n break;\n case SyncableType.Channel:\n type = GroupTypes.LINKED_GROUP_CHANNEL;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatches.push({type, data});\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function unlinkGroupSyncable(groupID: string, syncableID: string, syncableType: SyncableType): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.unlinkGroupSyncable(groupID, syncableID, syncableType);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const dispatches: AnyAction[] = [];\n\n let type = '';\n const data = {group_id: groupID, syncable_id: syncableID};\n switch (syncableType) {\n case SyncableType.Team:\n type = GroupTypes.UNLINKED_GROUP_TEAM;\n data.syncable_id = syncableID;\n dispatches.push({type: GroupTypes.RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM, data: {teamID: syncableID, groups: [{id: groupID}]}});\n break;\n case SyncableType.Channel:\n type = GroupTypes.UNLINKED_GROUP_CHANNEL;\n data.syncable_id = syncableID;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatches.push({type, data});\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function getGroupSyncables(groupID: string, syncableType: SyncableType): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getGroupSyncables(groupID, syncableType);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n let type = '';\n switch (syncableType) {\n case SyncableType.Team:\n type = GroupTypes.RECEIVED_GROUP_TEAMS;\n break;\n case SyncableType.Channel:\n type = GroupTypes.RECEIVED_GROUP_CHANNELS;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatch(batchActions([\n {type, data, group_id: groupID},\n ]));\n\n return {data: true};\n };\n}\n\nexport function patchGroupSyncable(groupID: string, syncableID: string, syncableType: SyncableType, patch: Partial): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.patchGroupSyncable(groupID, syncableID, syncableType, patch);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n const dispatches: AnyAction[] = [];\n\n let type = '';\n switch (syncableType) {\n case SyncableType.Team:\n type = GroupTypes.PATCHED_GROUP_TEAM;\n break;\n case SyncableType.Channel:\n type = GroupTypes.PATCHED_GROUP_CHANNEL;\n break;\n default:\n console.warn(`unhandled syncable type ${syncableType}`); // eslint-disable-line no-console\n }\n\n dispatches.push(\n {type, data},\n );\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function getGroup(id: string, includeMemberCount = false) {\n return bindClientFunc({\n clientFunc: Client4.getGroup,\n onSuccess: [GroupTypes.RECEIVED_GROUP],\n params: [\n id,\n includeMemberCount,\n ],\n });\n}\n\nexport function getGroups(opts: GetGroupsParams) {\n return bindClientFunc({\n clientFunc: async (opts) => {\n const result = await Client4.getGroups(opts);\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_GROUPS],\n params: [\n opts,\n ],\n });\n}\n\nexport function getGroupsNotAssociatedToTeam(teamID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, source = GroupSource.Ldap) {\n return bindClientFunc({\n clientFunc: Client4.getGroupsNotAssociatedToTeam,\n onSuccess: [GroupTypes.RECEIVED_GROUPS],\n params: [\n teamID,\n q,\n page,\n perPage,\n source,\n ],\n });\n}\n\nexport function getGroupsNotAssociatedToChannel(channelID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, filterParentTeamPermitted = false, source = GroupSource.Ldap) {\n return bindClientFunc({\n clientFunc: Client4.getGroupsNotAssociatedToChannel,\n onSuccess: [GroupTypes.RECEIVED_GROUPS],\n params: [\n channelID,\n q,\n page,\n perPage,\n filterParentTeamPermitted,\n source,\n ],\n });\n}\n\nexport function getAllGroupsAssociatedToTeam(teamID: string, filterAllowReference = false, includeMemberCount = false) {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3) => {\n const result = await Client4.getAllGroupsAssociatedToTeam(param1, param2, param3);\n result.teamID = param1;\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM],\n params: [\n teamID,\n filterAllowReference,\n includeMemberCount,\n ],\n });\n}\n\nexport function getAllGroupsAssociatedToChannelsInTeam(teamID: string, filterAllowReference = false) {\n return bindClientFunc({\n clientFunc: async (param1, param2) => {\n const result = await Client4.getAllGroupsAssociatedToChannelsInTeam(param1, param2);\n return {groupsByChannelId: result.groups};\n },\n onSuccess: [GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM],\n params: [\n teamID,\n filterAllowReference,\n ],\n });\n}\n\nexport function getAllGroupsAssociatedToChannel(channelID: string, filterAllowReference = false, includeMemberCount = false) {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3) => {\n const result = await Client4.getAllGroupsAssociatedToChannel(param1, param2, param3);\n result.channelID = param1;\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL],\n params: [\n channelID,\n filterAllowReference,\n includeMemberCount,\n ],\n });\n}\n\nexport function getGroupsAssociatedToTeam(teamID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, filterAllowReference = false) {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3, param4, param5) => {\n const result = await Client4.getGroupsAssociatedToTeam(param1, param2, param3, param4, param5);\n return {groups: result.groups, totalGroupCount: result.total_group_count, teamID: param1};\n },\n onSuccess: [GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_TEAM],\n params: [\n teamID,\n q,\n page,\n perPage,\n filterAllowReference,\n ],\n });\n}\n\nexport function getGroupsAssociatedToChannel(channelID: string, q = '', page = 0, perPage: number = General.PAGE_SIZE_DEFAULT, filterAllowReference = false) {\n return bindClientFunc({\n clientFunc: async (param1, param2, param3, param4, param5) => {\n const result = await Client4.getGroupsAssociatedToChannel(param1, param2, param3, param4, param5);\n return {groups: result.groups, totalGroupCount: result.total_group_count, channelID: param1};\n },\n onSuccess: [GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL],\n params: [\n channelID,\n q,\n page,\n perPage,\n filterAllowReference,\n ],\n });\n}\n\nexport function patchGroup(groupID: string, patch: GroupPatch | CustomGroupPatch) {\n return bindClientFunc({\n clientFunc: Client4.patchGroup,\n onSuccess: [GroupTypes.PATCHED_GROUP],\n params: [\n groupID,\n patch,\n ],\n });\n}\n\nexport function getGroupsByUserId(userID: string) {\n return bindClientFunc({\n clientFunc: Client4.getGroupsByUserId,\n onSuccess: [GroupTypes.RECEIVED_MY_GROUPS],\n params: [\n userID,\n ],\n });\n}\n\nexport function getGroupsByUserIdPaginated(opts: GetGroupsForUserParams) {\n return bindClientFunc({\n clientFunc: async (opts) => {\n const result = await Client4.getGroups(opts);\n return result;\n },\n onSuccess: [GroupTypes.RECEIVED_MY_GROUPS, GroupTypes.RECEIVED_GROUPS],\n params: [\n opts,\n ],\n });\n}\n\nexport function getGroupStats(groupID: string) {\n return bindClientFunc({\n clientFunc: Client4.getGroupStats,\n onSuccess: [GroupTypes.RECEIVED_GROUP_STATS],\n params: [\n groupID,\n ],\n });\n}\n\nexport function createGroupWithUserIds(group: GroupCreateWithUserIds): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.createGroupWithUserIds(group);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {type: GroupTypes.CREATE_GROUP_SUCCESS, data},\n );\n\n return {data};\n };\n}\n\nexport function addUsersToGroup(groupId: string, userIds: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.addUsersToGroup(groupId, userIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: UserTypes.RECEIVED_PROFILES_FOR_GROUP,\n data,\n id: groupId,\n },\n );\n\n return {data};\n };\n}\n\nexport function removeUsersFromGroup(groupId: string, userIds: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.removeUsersFromGroup(groupId, userIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_TO_REMOVE_FROM_GROUP,\n data,\n id: groupId,\n },\n );\n\n return {data};\n };\n}\n\nexport function searchGroups(params: GroupSearchParams): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.searchGroups(params);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const dispatches: AnyAction[] = [{type: GroupTypes.RECEIVED_GROUPS, data}];\n\n if (params.filter_has_member) {\n dispatches.push({type: GroupTypes.RECEIVED_MY_GROUPS, data});\n }\n if (params.include_channel_member_count) {\n dispatches.push({type: ChannelTypes.RECEIVED_CHANNEL_MEMBER_COUNTS_FROM_GROUPS_LIST, data, channelId: params.include_channel_member_count});\n }\n dispatch(batchActions(dispatches));\n\n return {data: true};\n };\n}\n\nexport function archiveGroup(groupId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.archiveGroup(groupId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: GroupTypes.ARCHIVED_GROUP,\n id: groupId,\n data,\n },\n );\n\n return {data};\n };\n}\n\nexport function restoreGroup(groupId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.restoreGroup(groupId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n dispatch(\n {\n type: GroupTypes.RESTORED_GROUP,\n id: groupId,\n data,\n },\n );\n\n return {data};\n };\n}\n\nexport function createGroupTeamsAndChannels(userID: string): ActionFuncAsync<{user_id: string}> {\n return async (dispatch, getState) => {\n try {\n await Client4.createGroupTeamsAndChannels(userID);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n return {user_id: userID};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\n\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {UserTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport type {DispatchFunc, GetStateFunc, ActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {logError} from './errors';\n\ntype ActionType = string;\nconst HTTP_UNAUTHORIZED = 401;\nexport function forceLogoutIfNecessary(err: ServerError, dispatch: DispatchFunc, getState: GetStateFunc) {\n const {currentUserId} = getState().entities.users;\n\n if ('status_code' in err && err.status_code === HTTP_UNAUTHORIZED && err.url && err.url.indexOf('/login') === -1 && currentUserId) {\n Client4.setToken('');\n dispatch({type: UserTypes.LOGOUT_SUCCESS, data: {}});\n }\n}\n\nfunction dispatcher(type: ActionType, data: any, dispatch: DispatchFunc) {\n if (type.indexOf('SUCCESS') === -1) { // we don't want to pass the data for the request types\n dispatch(requestSuccess(type, data));\n } else {\n dispatch(requestData(type));\n }\n}\n\nexport function requestData(type: ActionType) {\n return {\n type,\n data: null,\n };\n}\n\nexport function requestSuccess(type: ActionType, data: any) {\n return {\n type,\n data,\n };\n}\n\nexport function requestFailure(type: ActionType, error: ServerError): any {\n return {\n type,\n error,\n };\n}\n\n/**\n * Returns an ActionFunc which calls a specfied (client) function and\n * dispatches the specifed actions on request, success or failure.\n *\n * @export\n * @param {Object} obj an object for destructirung required properties\n * @param {() => Promise} obj.clientFunc clientFunc to execute\n * @param {ActionType} obj.onRequest ActionType to dispatch on request\n * @param {(ActionType | Array)} obj.onSuccess ActionType to dispatch on success\n * @param {ActionType} obj.onFailure ActionType to dispatch on failure\n * @param {...Array} obj.params\n * @returns {ActionFunc} ActionFunc\n */\n\nexport function bindClientFunc Promise>({\n clientFunc,\n onRequest,\n onSuccess,\n onFailure,\n params,\n}: {\n clientFunc: Func;\n onRequest?: ActionType;\n onSuccess?: ActionType | ActionType[];\n onFailure?: ActionType;\n params?: Parameters;\n}): ActionFuncAsync>, GlobalState, AnyAction> {\n return async (dispatch, getState) => {\n if (onRequest) {\n dispatch(requestData(onRequest));\n }\n\n let data: Awaited>;\n try {\n if (params) {\n data = await clientFunc(...params);\n } else {\n data = await clientFunc();\n }\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n if (onFailure) {\n dispatch(requestFailure(onFailure, error));\n }\n dispatch(logError(error));\n return {error};\n }\n\n if (Array.isArray(onSuccess)) {\n onSuccess.forEach((s) => {\n dispatcher(s, data, dispatch);\n });\n } else if (onSuccess) {\n dispatcher(onSuccess, data, dispatch);\n }\n\n return {data};\n };\n}\n\n// Debounce function based on underscores modified to use es6 and a cb\n\nexport function debounce(func: (...args: any) => unknown, wait: number, immediate?: boolean, cb?: () => unknown) {\n let timeout: NodeJS.Timeout|null;\n return function fx(...args: any[]) {\n const runLater = () => {\n timeout = null;\n if (!immediate) {\n Reflect.apply(func, null, args);\n if (cb) {\n cb();\n }\n }\n };\n const callNow = immediate && !timeout;\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(runLater, wait);\n if (callNow) {\n Reflect.apply(func, null, args);\n if (cb) {\n cb();\n }\n }\n };\n}\n\nexport class FormattedError extends Error {\n intl: {\n id: string;\n defaultMessage: string;\n values: any;\n };\n\n constructor(id: string, defaultMessage: string, values: any = {}) {\n super(defaultMessage);\n this.intl = {\n id,\n defaultMessage,\n values,\n };\n }\n}\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {ServerLimits} from '@mattermost/types/limits';\n\nimport {LimitsTypes} from 'mattermost-redux/action_types';\nimport {logError} from 'mattermost-redux/actions/errors';\nimport {forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';\nimport {Client4} from 'mattermost-redux/client';\nimport {getCurrentUserRoles} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\nimport {isAdmin} from 'mattermost-redux/utils/user_utils';\n\nexport function getServerLimits(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const roles = getCurrentUserRoles(getState());\n const amIAdmin = isAdmin(roles);\n if (!amIAdmin) {\n return {\n data: {\n activeUserCount: 0,\n maxUsersLimit: 0,\n },\n };\n }\n\n let response;\n try {\n response = await Client4.getServerLimits();\n } catch (err) {\n forceLogoutIfNecessary(err, dispatch, getState);\n dispatch(logError(err));\n return {error: err as ServerError};\n }\n\n const data: ServerLimits = {\n activeUserCount: response?.data?.activeUserCount ?? 0,\n maxUsersLimit: response?.data?.maxUsersLimit ?? 0,\n };\n\n dispatch({type: LimitsTypes.RECIEVED_APP_LIMITS, data});\n\n return {data};\n };\n}\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {Channel, ChannelUnread} from '@mattermost/types/channels';\nimport type {FetchPaginatedThreadOptions} from '@mattermost/types/client4';\nimport type {Group} from '@mattermost/types/groups';\nimport {isMessageAttachmentArray} from '@mattermost/types/message_attachments';\nimport type {Post, PostList, PostAcknowledgement} from '@mattermost/types/posts';\nimport type {Reaction} from '@mattermost/types/reactions';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {PostTypes, ChannelTypes, FileTypes, IntegrationTypes} from 'mattermost-redux/action_types';\nimport {selectChannel} from 'mattermost-redux/actions/channels';\nimport {systemEmojis, getCustomEmojiByName} from 'mattermost-redux/actions/emojis';\nimport {searchGroups} from 'mattermost-redux/actions/groups';\nimport {bindClientFunc, forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';\nimport {\n deletePreferences,\n savePreferences,\n} from 'mattermost-redux/actions/preferences';\nimport {batchFetchStatusesProfilesGroupsFromPosts} from 'mattermost-redux/actions/status_profile_polling';\nimport {decrementThreadCounts} from 'mattermost-redux/actions/threads';\nimport {getProfilesByIds, getProfilesByUsernames, getStatusesByIds} from 'mattermost-redux/actions/users';\nimport {Client4, DEFAULT_LIMIT_AFTER, DEFAULT_LIMIT_BEFORE} from 'mattermost-redux/client';\nimport {General, Preferences, Posts} from 'mattermost-redux/constants';\nimport {getCurrentChannelId, getMyChannelMember as getMyChannelMemberSelector} from 'mattermost-redux/selectors/entities/channels';\nimport {getIsUserStatusesConfigEnabled} from 'mattermost-redux/selectors/entities/common';\nimport {getCustomEmojisByName as selectCustomEmojisByName} from 'mattermost-redux/selectors/entities/emojis';\nimport {getAllGroupsByName} from 'mattermost-redux/selectors/entities/groups';\nimport * as PostSelectors from 'mattermost-redux/selectors/entities/posts';\nimport {getUnreadScrollPositionPreference, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId, getUsersByUsername} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionResult, DispatchFunc, GetStateFunc, ActionFunc, ActionFuncAsync, ThunkActionFunc} from 'mattermost-redux/types/actions';\nimport {isCombinedUserActivityPost} from 'mattermost-redux/utils/post_list';\n\nimport {logError} from './errors';\n\n// receivedPost should be dispatched after a single post from the server. This typically happens when an existing post\n// is updated.\nexport function receivedPost(post: Post, crtEnabled?: boolean) {\n return {\n type: PostTypes.RECEIVED_POST,\n data: post,\n features: {crtEnabled},\n };\n}\n\n// receivedNewPost should be dispatched when receiving a newly created post or when sending a request to the server\n// to make a new post.\nexport function receivedNewPost(post: Post, crtEnabled: boolean) {\n return {\n type: PostTypes.RECEIVED_NEW_POST,\n data: post,\n features: {crtEnabled},\n };\n}\n\n// receivedPosts should be dispatched when receiving multiple posts from the server that may or may not be ordered.\n// This will typically be used alongside other actions like receivedPostsAfter which require the posts to be ordered.\nexport function receivedPosts(posts: PostList) {\n return {\n type: PostTypes.RECEIVED_POSTS,\n data: posts,\n };\n}\n\n// receivedPostsAfter should be dispatched when receiving an ordered list of posts that come before a given post.\nexport function receivedPostsAfter(posts: PostList, channelId: string, afterPostId: string, recent = false) {\n return {\n type: PostTypes.RECEIVED_POSTS_AFTER,\n channelId,\n data: posts,\n afterPostId,\n recent,\n };\n}\n\n// receivedPostsBefore should be dispatched when receiving an ordered list of posts that come after a given post.\nexport function receivedPostsBefore(posts: PostList, channelId: string, beforePostId: string, oldest = false) {\n return {\n type: PostTypes.RECEIVED_POSTS_BEFORE,\n channelId,\n data: posts,\n beforePostId,\n oldest,\n };\n}\n\n// receivedPostsSince should be dispatched when receiving a list of posts that have been updated since a certain time.\n// Due to how the API endpoint works, some of these posts will be ordered, but others will not, so this needs special\n// handling from the reducers.\nexport function receivedPostsSince(posts: PostList, channelId: string) {\n return {\n type: PostTypes.RECEIVED_POSTS_SINCE,\n channelId,\n data: posts,\n };\n}\n\n// receivedPostsInChannel should be dispatched when receiving a list of ordered posts within a channel when the\n// the adjacent posts are not known.\nexport function receivedPostsInChannel(posts: PostList, channelId: string, recent = false, oldest = false) {\n return {\n type: PostTypes.RECEIVED_POSTS_IN_CHANNEL,\n channelId,\n data: posts,\n recent,\n oldest,\n };\n}\n\n// receivedPostsInThread should be dispatched when receiving a list of unordered posts in a thread.\nexport function receivedPostsInThread(posts: PostList, rootId: string) {\n return {\n type: PostTypes.RECEIVED_POSTS_IN_THREAD,\n data: posts,\n rootId,\n };\n}\n\n// postDeleted should be dispatched when a post has been deleted and should be replaced with a \"message deleted\"\n// placeholder. This typically happens when a post is deleted by another user.\nexport function postDeleted(post: Post) {\n return {\n type: PostTypes.POST_DELETED,\n data: post,\n };\n}\n\n// postRemoved should be dispatched when a post should be immediately removed. This typically happens when a post is\n// deleted by the current user.\nexport function postRemoved(post: Post) {\n return {\n type: PostTypes.POST_REMOVED,\n data: post,\n };\n}\n\nexport function postPinnedChanged(postId: string, isPinned: boolean, updateAt = Date.now()) {\n return {\n type: PostTypes.POST_PINNED_CHANGED,\n postId,\n isPinned,\n updateAt,\n };\n}\n\nexport function getPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let post;\n const crtEnabled = isCollapsedThreadsEnabled(getState());\n\n try {\n post = await Client4.getPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.GET_POSTS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(receivedPost(post, crtEnabled));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts([post]));\n\n return {data: post};\n };\n}\n\nexport type CreatePostReturnType = {\n created?: boolean;\n pending?: string;\n error?: string;\n}\n\nexport function createPost(\n post: Post,\n files: any[] = [],\n afterSubmit?: (response: any) => void,\n): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = state.entities.users.currentUserId;\n\n const timestamp = Date.now();\n const pendingPostId = post.pending_post_id || `${currentUserId}:${timestamp}`;\n let actions: AnyAction[] = [];\n\n if (PostSelectors.isPostIdSending(state, pendingPostId)) {\n return {data: {pending: pendingPostId}};\n }\n\n let newPost = {\n ...post,\n pending_post_id: pendingPostId,\n create_at: timestamp,\n update_at: timestamp,\n reply_count: 0,\n };\n\n if (post.root_id) {\n newPost.reply_count = PostSelectors.getPostRepliesCount(state, post.root_id) + 1;\n }\n\n // We are retrying a pending post that had files\n if (newPost.file_ids && !files.length) {\n // eslint-disable-next-line no-param-reassign\n files = newPost.file_ids.map((id) => state.entities.files.files[id]);\n }\n\n if (files.length) {\n const fileIds = files.map((file) => file.id);\n\n newPost = {\n ...newPost,\n file_ids: fileIds,\n };\n\n actions.push({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n postId: pendingPostId,\n data: files,\n }, {\n type: ChannelTypes.INCREMENT_FILE_COUNT,\n amount: files.length,\n id: newPost.channel_id,\n });\n }\n\n const crtEnabled = isCollapsedThreadsEnabled(getState());\n actions.push({\n type: PostTypes.RECEIVED_NEW_POST,\n data: {\n ...newPost,\n id: pendingPostId,\n },\n features: {crtEnabled},\n });\n\n dispatch(batchActions(actions, 'BATCH_CREATE_POST_INIT'));\n\n (async function createPostWrapper() {\n try {\n const created = await Client4.createPost({...newPost, create_at: 0});\n\n actions = [\n receivedPost(created, crtEnabled),\n {\n type: PostTypes.CREATE_POST_SUCCESS,\n },\n {\n type: ChannelTypes.INCREMENT_TOTAL_MSG_COUNT,\n data: {\n channelId: newPost.channel_id,\n amount: 1,\n amountRoot: created.root_id === '' ? 1 : 0,\n },\n },\n {\n type: ChannelTypes.DECREMENT_UNREAD_MSG_COUNT,\n data: {\n channelId: newPost.channel_id,\n amount: 1,\n amountRoot: created.root_id === '' ? 1 : 0,\n },\n },\n ];\n\n if (files) {\n actions.push({\n type: FileTypes.RECEIVED_FILES_FOR_POST,\n postId: created.id,\n data: files,\n });\n }\n\n dispatch(batchActions(actions, 'BATCH_CREATE_POST'));\n afterSubmit?.({created});\n return {data: {created}};\n } catch (error) {\n const data = {\n ...newPost,\n id: pendingPostId,\n failed: true,\n update_at: Date.now(),\n };\n actions = [{type: PostTypes.CREATE_POST_FAILURE, error}];\n\n // If the failure was because: the root post was deleted or\n // TownSquareIsReadOnly=true then remove the post\n if (error.server_error_id === 'api.post.create_post.root_id.app_error' ||\n error.server_error_id === 'api.post.create_post.town_square_read_only' ||\n error.server_error_id === 'plugin.message_will_be_posted.dismiss_post'\n ) {\n // RemovePost is a Thunk, and not handled by batchActions\n dispatch(removePost(data));\n } else {\n actions.push(receivedPost(data, crtEnabled));\n }\n\n dispatch(batchActions(actions, 'BATCH_CREATE_POST_FAILED'));\n return {error};\n }\n }());\n\n return {data: {created: true}};\n };\n}\n\nexport function resetCreatePostRequest() {\n return {type: PostTypes.CREATE_POST_RESET_REQUEST};\n}\n\nexport function deletePost(post: ExtendedPost): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const delPost = {...post};\n if (!post.root_id && isCollapsedThreadsEnabled(state)) {\n dispatch(decrementThreadCounts(post));\n }\n if (delPost.type === Posts.POST_TYPES.COMBINED_USER_ACTIVITY && delPost.system_post_ids) {\n delPost.system_post_ids.forEach((systemPostId) => {\n const systemPost = PostSelectors.getPost(state, systemPostId);\n if (systemPost) {\n dispatch(deletePost(systemPost));\n }\n });\n } else {\n (async function deletePostWrapper() {\n try {\n dispatch({\n type: PostTypes.POST_DELETED,\n data: delPost,\n });\n\n await Client4.deletePost(post.id);\n } catch (e) {\n // Recovering from this state doesn't actually work. The deleteAndRemovePost action\n // in the webapp needs to get an error in order to not call removePost, but then\n // the delete modal needs to handle this to show something to the user. Since none\n // of that ever worked (even with redux-offline in play), leave the behaviour here\n // unresolved.\n console.error('failed to delete post', e); // eslint-disable-line no-console\n }\n }());\n }\n\n return {data: true};\n };\n}\n\nexport function editPost(post: Post) {\n return bindClientFunc({\n clientFunc: Client4.patchPost,\n onRequest: PostTypes.EDIT_POST_REQUEST,\n onSuccess: [PostTypes.RECEIVED_POST, PostTypes.EDIT_POST_SUCCESS],\n onFailure: PostTypes.EDIT_POST_FAILURE,\n params: [\n post,\n ],\n });\n}\n\nfunction getUnreadPostData(unreadChan: ChannelUnread, state: GlobalState) {\n const member = getMyChannelMemberSelector(state, unreadChan.channel_id);\n const delta = member ? member.msg_count - unreadChan.msg_count : unreadChan.msg_count;\n const deltaRoot = member ? member.msg_count_root - unreadChan.msg_count_root : unreadChan.msg_count_root;\n\n const data = {\n teamId: unreadChan.team_id,\n channelId: unreadChan.channel_id,\n msgCount: unreadChan.msg_count,\n mentionCount: unreadChan.mention_count,\n msgCountRoot: unreadChan.msg_count_root,\n mentionCountRoot: unreadChan.mention_count_root,\n urgentMentionCount: unreadChan.urgent_mention_count,\n lastViewedAt: unreadChan.last_viewed_at,\n deltaMsgs: delta,\n deltaMsgsRoot: deltaRoot,\n };\n\n return data;\n}\n\nexport function setUnreadPost(userId: string, postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let state = getState();\n const post = PostSelectors.getPost(state, postId);\n let unreadChan;\n\n try {\n if (isCombinedUserActivityPost(postId)) {\n return {};\n }\n dispatch({\n type: ChannelTypes.ADD_MANUALLY_UNREAD,\n data: {\n channelId: post.channel_id,\n },\n });\n unreadChan = await Client4.markPostAsUnread(userId, postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n dispatch({\n type: ChannelTypes.REMOVE_MANUALLY_UNREAD,\n data: {\n channelId: post.channel_id,\n },\n });\n return {error};\n }\n\n state = getState();\n const data = getUnreadPostData(unreadChan, state);\n dispatch({\n type: ChannelTypes.POST_UNREAD_SUCCESS,\n data,\n });\n return {data};\n };\n}\n\nexport function pinPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: PostTypes.EDIT_POST_REQUEST});\n let posts;\n\n try {\n posts = await Client4.pinPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.EDIT_POST_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [\n {\n type: PostTypes.EDIT_POST_SUCCESS,\n },\n ];\n\n const state = getState();\n const post = PostSelectors.getPost(state, postId);\n if (post) {\n actions.push(\n postPinnedChanged(postId, true, Date.now()),\n {\n type: ChannelTypes.INCREMENT_PINNED_POST_COUNT,\n id: post.channel_id,\n },\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data: posts};\n };\n}\n\n/**\n * Decrements the pinned post count for a channel by 1\n */\nexport function decrementPinnedPostCount(channelId: Channel['id']) {\n return {\n type: ChannelTypes.DECREMENT_PINNED_POST_COUNT,\n id: channelId,\n };\n}\n\nexport function unpinPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: PostTypes.EDIT_POST_REQUEST});\n let posts;\n\n try {\n posts = await Client4.unpinPost(postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.EDIT_POST_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [\n {\n type: PostTypes.EDIT_POST_SUCCESS,\n },\n ];\n\n const state = getState();\n const post = PostSelectors.getPost(state, postId);\n if (post) {\n actions.push(\n postPinnedChanged(postId, false, Date.now()),\n decrementPinnedPostCount(post.channel_id),\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data: posts};\n };\n}\n\nexport type SubmitReactionReturnType = {\n reaction?: Reaction;\n removedReaction?: boolean;\n}\n\nexport function addReaction(postId: string, emojiName: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const currentUserId = getState().entities.users.currentUserId;\n\n let reaction;\n try {\n reaction = await Client4.addReaction(currentUserId, postId, emojiName);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.RECEIVED_REACTION,\n data: reaction,\n });\n\n return {data: {reaction}};\n };\n}\n\nexport function removeReaction(postId: string, emojiName: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const currentUserId = getState().entities.users.currentUserId;\n\n try {\n await Client4.removeReaction(currentUserId, postId, emojiName);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.REACTION_DELETED,\n data: {user_id: currentUserId, post_id: postId, emoji_name: emojiName},\n });\n\n return {data: {removedReaction: true}};\n };\n}\n\nexport function getCustomEmojiForReaction(name: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const nonExistentEmoji = getState().entities.emojis.nonExistentEmoji;\n const customEmojisByName = selectCustomEmojisByName(getState());\n\n if (systemEmojis.has(name)) {\n return {data: true};\n }\n\n if (nonExistentEmoji.has(name)) {\n return {data: true};\n }\n\n if (customEmojisByName.has(name)) {\n return {data: true};\n }\n\n return dispatch(getCustomEmojiByName(name));\n };\n}\n\nexport function flagPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {currentUserId} = getState().entities.users;\n const preference = {\n user_id: currentUserId,\n category: Preferences.CATEGORY_FLAGGED_POST,\n name: postId,\n value: 'true',\n };\n\n Client4.trackEvent('action', 'action_posts_flag');\n\n return dispatch(savePreferences(currentUserId, [preference]));\n };\n}\n\nasync function getPaginatedPostThread(rootId: string, options: FetchPaginatedThreadOptions, prevList?: PostList): Promise {\n // since there are no complicated things inside (functions, Maps, Sets, etc.) we\n // can use the JSON approach to deep-copy the object\n const list: PostList = prevList ? JSON.parse(JSON.stringify(prevList)) : {\n order: [rootId],\n posts: {},\n prev_post_id: '',\n next_post_id: '',\n first_inaccessible_post_time: 0,\n };\n\n const result = await Client4.getPaginatedPostThread(rootId, options);\n\n if (result.first_inaccessible_post_time) {\n list.first_inaccessible_post_time = list.first_inaccessible_post_time ? Math.min(result.first_inaccessible_post_time, list.first_inaccessible_post_time) : result.first_inaccessible_post_time;\n }\n list.order.push(...result.order.slice(1));\n list.posts = Object.assign(list.posts, result.posts);\n\n if (result.has_next) {\n const [nextPostId] = list.order!.slice(-1);\n const nextPostPointer = list.posts[nextPostId];\n const newOptions = {\n ...options,\n fromCreateAt: nextPostPointer.create_at,\n fromPost: nextPostId,\n };\n\n return getPaginatedPostThread(rootId, newOptions, list);\n }\n\n return list;\n}\n\nexport function getPostThread(rootId: string, fetchThreads = true): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(state);\n const enabledUserStatuses = getIsUserStatusesConfigEnabled(state);\n\n let posts;\n try {\n posts = await getPaginatedPostThread(rootId, {fetchThreads, collapsedThreads: collapsedThreadsEnabled});\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInThread(posts, rootId),\n ]));\n\n if (enabledUserStatuses) {\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n }\n\n return {data: posts};\n };\n}\n\nexport function getNewestPostThread(rootId: string): ActionFuncAsync {\n const getPostsForThread = PostSelectors.makeGetPostsForThread();\n\n return async (dispatch, getState) => {\n dispatch({type: PostTypes.GET_POST_THREAD_REQUEST});\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n const savedPosts = getPostsForThread(getState(), rootId);\n\n const latestReply = savedPosts?.[0];\n\n const options: FetchPaginatedThreadOptions = {\n fetchThreads: true,\n collapsedThreads: collapsedThreadsEnabled,\n direction: 'down',\n fromCreateAt: latestReply?.create_at,\n fromPost: latestReply?.id,\n };\n\n let posts;\n try {\n posts = await getPaginatedPostThread(rootId, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.GET_POST_THREAD_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInThread(posts, rootId),\n ]));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n\n return {data: posts};\n };\n}\n\nexport function getPosts(channelId: string, page = 0, perPage = Posts.POST_CHUNK_SIZE, fetchThreads = true, collapsedThreadsExtended = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let posts;\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n try {\n posts = await Client4.getPosts(channelId, page, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInChannel(posts, channelId, page === 0, posts.prev_post_id === ''),\n ]));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n\n return {data: posts};\n };\n}\n\nexport function getPostsUnread(channelId: string, fetchThreads = true, collapsedThreadsExtended = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const shouldLoadRecent = getUnreadScrollPositionPreference(state) === Preferences.UNREAD_SCROLL_POSITION_START_FROM_NEWEST;\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(state);\n const userId = getCurrentUserId(state);\n\n let posts;\n let recentPosts;\n try {\n posts = await Client4.getPostsUnread(channelId, userId, DEFAULT_LIMIT_BEFORE, DEFAULT_LIMIT_AFTER, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n\n if (posts.next_post_id && shouldLoadRecent) {\n recentPosts = await Client4.getPosts(channelId, 0, Posts.POST_CHUNK_SIZE / 2, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n }\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [\n {\n type: PostTypes.RECEIVED_POSTS,\n data: posts,\n channelId,\n },\n receivedPostsInChannel(posts, channelId, posts.next_post_id === '', posts.prev_post_id === ''),\n ];\n if (recentPosts) {\n actions.push(\n receivedPosts(recentPosts),\n receivedPostsInChannel(recentPosts, channelId, recentPosts.next_post_id === '', recentPosts.prev_post_id === ''),\n );\n }\n\n dispatch(batchActions(actions));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n\n return {data: posts};\n };\n}\n\nexport function getPostsSince(channelId: string, since: number, fetchThreads = true, collapsedThreadsExtended = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let posts;\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n posts = await Client4.getPostsSince(channelId, since, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsSince(posts, channelId),\n ]));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n\n return {data: posts};\n };\n}\n\nexport function getPostsBefore(channelId: string, postId: string, page = 0, perPage = Posts.POST_CHUNK_SIZE, fetchThreads = true, collapsedThreadsExtended = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let posts;\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n posts = await Client4.getPostsBefore(channelId, postId, page, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsBefore(posts, channelId, postId, posts.prev_post_id === ''),\n ]));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n\n return {data: posts};\n };\n}\n\nexport function getPostsAfter(channelId: string, postId: string, page = 0, perPage = Posts.POST_CHUNK_SIZE, fetchThreads = true, collapsedThreadsExtended = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let posts;\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n posts = await Client4.getPostsAfter(channelId, postId, page, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsAfter(posts, channelId, postId, posts.next_post_id === ''),\n ]));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n\n return {data: posts};\n };\n}\n\nexport function getPostsAround(channelId: string, postId: string, perPage = Posts.POST_CHUNK_SIZE / 2, fetchThreads = true, collapsedThreadsExtended = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let after;\n let thread;\n let before;\n\n try {\n const collapsedThreadsEnabled = isCollapsedThreadsEnabled(getState());\n [after, thread, before] = await Promise.all([\n Client4.getPostsAfter(channelId, postId, 0, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended),\n Client4.getPostThread(postId, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended),\n Client4.getPostsBefore(channelId, postId, 0, perPage, fetchThreads, collapsedThreadsEnabled, collapsedThreadsExtended),\n ]);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n // Dispatch a combined post list so that the order is correct for postsInChannel\n const posts: PostList = {\n posts: {\n ...after.posts,\n ...thread.posts,\n ...before.posts,\n },\n order: [ // Remember that the order is newest posts first\n ...after.order,\n postId,\n ...before.order,\n ],\n next_post_id: after.next_post_id,\n prev_post_id: before.prev_post_id,\n first_inaccessible_post_time: Math.max(before.first_inaccessible_post_time, after.first_inaccessible_post_time, thread.first_inaccessible_post_time) || 0,\n };\n\n dispatch(batchActions([\n receivedPosts(posts),\n receivedPostsInChannel(posts, channelId, after.next_post_id === '', before.prev_post_id === ''),\n ]));\n dispatch(batchFetchStatusesProfilesGroupsFromPosts(posts.posts));\n\n return {data: posts};\n };\n}\n\n/**\n * getPostThreads is intended for an array of posts that have been batched\n * (see the actions/websocket_actions/handleNewPostEvents function in the webapp)\n* */\nexport function getPostThreads(posts: Post[], fetchThreads = true): ThunkActionFunc {\n return (dispatch, getState) => {\n if (!Array.isArray(posts) || !posts.length) {\n return {data: true};\n }\n\n const state = getState();\n const currentChannelId = getCurrentChannelId(state);\n\n const getPostThreadPromises: Array>> = [];\n\n const rootPostIds = new Set();\n\n for (const post of posts) {\n if (!post.root_id) {\n continue;\n }\n\n const rootPost = PostSelectors.getPost(state, post.root_id);\n if (rootPost) {\n continue;\n }\n\n if (rootPostIds.has(post.root_id)) {\n continue;\n }\n\n // At this point, we know that this post is a thread/reply and its root post is not in the store\n rootPostIds.add(post.root_id);\n\n if (post.channel_id === currentChannelId) {\n getPostThreadPromises.push(dispatch(getPostThread(post.root_id, fetchThreads)));\n }\n }\n\n return Promise.all(getPostThreadPromises);\n };\n}\n\n// Note that getMentionsAndStatusesForPosts can take either an array of posts or a map of ids to posts\nexport async function getMentionsAndStatusesForPosts(postsArrayOrMap: Post[]|PostList['posts'], dispatch: DispatchFunc, getState: GetStateFunc) {\n if (!postsArrayOrMap) {\n // Some API methods return {error} for no results\n return Promise.resolve();\n }\n\n const postsArray: Post[] = Array.isArray(postsArrayOrMap) ? postsArrayOrMap : Object.values(postsArrayOrMap);\n\n if (postsArray.length === 0) {\n return Promise.resolve();\n }\n\n const postsDictionary: Record = {};\n for (let i = 0; i < postsArray.length; i++) {\n postsDictionary[postsArray[i].id] = postsArray[i];\n }\n\n const state = getState();\n const {currentUserId, profiles, statuses} = state.entities.users;\n const enabledUserStatuses = getIsUserStatusesConfigEnabled(state);\n\n // Statuses and profiles of the users who made the posts\n const userIdsToLoad = new Set();\n const statusesToLoad = new Set();\n\n postsArray.forEach((post) => {\n const userId = post.user_id;\n\n if (post.metadata) {\n if (post.metadata.embeds) {\n post.metadata.embeds.forEach((embed: any) => {\n if (embed.type === 'permalink' && embed.data) {\n if (embed.data.post?.user_id && !profiles[embed.data.post.user_id] && embed.data.post.user_id !== currentUserId) {\n userIdsToLoad.add(embed.data.post.user_id);\n }\n if (embed.data.post?.user_id && !statuses[embed.data.post.user_id]) {\n statusesToLoad.add(embed.data.post.user_id);\n }\n }\n });\n }\n\n if (post.metadata.acknowledgements) {\n post.metadata.acknowledgements.forEach((ack: any) => {\n if (ack.acknowledged_at > 0) {\n userIdsToLoad.add(ack.user_id);\n }\n });\n }\n }\n\n if (!statuses[userId]) {\n statusesToLoad.add(userId);\n }\n\n if (userId === currentUserId) {\n return;\n }\n\n if (!profiles[userId]) {\n userIdsToLoad.add(userId);\n }\n });\n\n const promises: any[] = [];\n if (userIdsToLoad.size > 0) {\n promises.push(dispatch(getProfilesByIds(Array.from(userIdsToLoad))));\n }\n\n if (statusesToLoad.size > 0 && enabledUserStatuses) {\n promises.push(dispatch(getStatusesByIds(Array.from(statusesToLoad))));\n }\n\n // Profiles of users mentioned in the posts\n const usernamesAndGroupsToLoad = getNeededAtMentionedUsernamesAndGroups(state, postsArray);\n\n if (usernamesAndGroupsToLoad.size > 0) {\n // We need to load the profiles synchronously to filter them\n // out of the groups to check\n const getProfilesPromise = dispatch(getProfilesByUsernames(Array.from(usernamesAndGroupsToLoad)));\n promises.push(getProfilesPromise);\n\n const {data} = await getProfilesPromise as ActionResult;\n const loadedProfiles = new Set((data || []).map((p) => p.username));\n const groupsToCheck = Array.from(usernamesAndGroupsToLoad).filter((name) => !loadedProfiles.has(name));\n\n groupsToCheck.forEach((name) => {\n const groupParams = {\n q: name,\n filter_allow_reference: true,\n page: 0,\n per_page: 60,\n include_member_count: true,\n };\n promises.push(dispatch(searchGroups(groupParams)));\n });\n }\n\n return Promise.all(promises);\n}\n\nexport function getPostsByIds(ids: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let posts;\n\n try {\n posts = await Client4.getPostsByIds(ids);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.RECEIVED_POSTS,\n data: {posts},\n });\n\n return {data: {posts}};\n };\n}\n\nexport function getPostEditHistory(postId: string) {\n return bindClientFunc({\n clientFunc: Client4.getPostEditHistory,\n onSuccess: PostTypes.RECEIVED_POST_HISTORY,\n params: [postId],\n });\n}\n\nexport function getNeededAtMentionedUsernamesAndGroups(state: GlobalState, posts: Post[]): Set {\n let usersByUsername: Record; // Populate this lazily since it's relatively expensive\n let groupsByName: Record;\n\n const usernamesAndGroupsToLoad = new Set();\n\n function findNeededUsernamesAndGroups(text?: string) {\n if (!text || !text.includes('@')) {\n return;\n }\n\n if (!usersByUsername) {\n usersByUsername = getUsersByUsername(state);\n }\n\n if (!groupsByName) {\n groupsByName = getAllGroupsByName(state);\n }\n\n const pattern = /\\B@(([a-z0-9_.-]*[a-z0-9_])[.-]*)/gi;\n\n let match;\n while ((match = pattern.exec(text)) !== null) {\n // match[1] is the matched mention including trailing punctuation\n // match[2] is the matched mention without trailing punctuation\n if (General.SPECIAL_MENTIONS.indexOf(match[2]) !== -1) {\n continue;\n }\n\n if (usersByUsername[match[1]] || usersByUsername[match[2]]) {\n // We have the user, go to the next match\n continue;\n }\n\n if (groupsByName[match[1]] || groupsByName[match[2]]) {\n // We have the group, go to the next match\n continue;\n }\n\n // If there's no trailing punctuation, this will only add 1 item to the set\n usernamesAndGroupsToLoad.add(match[1]);\n usernamesAndGroupsToLoad.add(match[2]);\n }\n }\n\n for (const post of posts) {\n // These correspond to the fields searched by getMentionsEnabledFields on the server\n findNeededUsernamesAndGroups(post.message);\n\n if (isMessageAttachmentArray(post.props?.attachments)) {\n for (const attachment of post.props.attachments) {\n findNeededUsernamesAndGroups(attachment.pretext);\n findNeededUsernamesAndGroups(attachment.text);\n\n if (attachment.fields) {\n for (const field of attachment.fields) {\n if (typeof field.value === 'string') {\n findNeededUsernamesAndGroups(field.value);\n }\n }\n }\n }\n }\n }\n\n return usernamesAndGroupsToLoad;\n}\n\nexport type ExtendedPost = Post & { system_post_ids?: string[] };\n\nexport function removePost(post: ExtendedPost): ActionFunc {\n return (dispatch, getState) => {\n if (post.type === Posts.POST_TYPES.COMBINED_USER_ACTIVITY && post.system_post_ids) {\n const state = getState();\n for (const systemPostId of post.system_post_ids) {\n const systemPost = PostSelectors.getPost(state, systemPostId);\n\n if (systemPost) {\n dispatch(removePost(systemPost));\n }\n }\n } else {\n dispatch(postRemoved(post));\n if (post.is_pinned) {\n dispatch(decrementPinnedPostCount(post.channel_id));\n }\n }\n return {data: true};\n };\n}\n\nexport function moveThread(postId: string, channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.moveThread(postId, channelId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: PostTypes.MOVE_POST_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({type: PostTypes.MOVE_POST_SUCCESS});\n\n return {data: true};\n };\n}\n\nexport function selectFocusedPostId(postId: string) {\n return {\n type: PostTypes.RECEIVED_FOCUSED_POST,\n data: postId,\n };\n}\n\nexport function unflagPost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const {currentUserId} = getState().entities.users;\n const preference = {\n user_id: currentUserId,\n category: Preferences.CATEGORY_FLAGGED_POST,\n name: postId,\n value: 'true',\n };\n\n Client4.trackEvent('action', 'action_posts_unflag');\n\n return dispatch(deletePreferences(currentUserId, [preference]));\n };\n}\n\nexport function addPostReminder(userId: string, postId: string, timestamp: number): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.addPostReminder(userId, postId, timestamp);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n return {data: true};\n };\n}\n\nexport function doPostAction(postId: string, actionId: string, selectedOption = '') {\n return doPostActionWithCookie(postId, actionId, '', selectedOption);\n}\n\nexport function doPostActionWithCookie(postId: string, actionId: string, actionCookie: string, selectedOption = ''): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.doPostActionWithCookie(postId, actionId, actionCookie, selectedOption);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n if (data && data.trigger_id) {\n dispatch({\n type: IntegrationTypes.RECEIVED_DIALOG_TRIGGER_ID,\n data: data.trigger_id,\n });\n }\n\n return {data};\n };\n}\n\nexport function addMessageIntoHistory(message: string) {\n return {\n type: PostTypes.ADD_MESSAGE_INTO_HISTORY,\n data: message,\n };\n}\n\nexport function resetHistoryIndex(index: string) {\n return {\n type: PostTypes.RESET_HISTORY_INDEX,\n data: index,\n };\n}\n\nexport function moveHistoryIndexBack(index: string): ActionFuncAsync {\n return async (dispatch) => {\n dispatch({\n type: PostTypes.MOVE_HISTORY_INDEX_BACK,\n data: index,\n });\n\n return {data: true};\n };\n}\n\nexport function moveHistoryIndexForward(index: string): ActionFuncAsync {\n return async (dispatch) => {\n dispatch({\n type: PostTypes.MOVE_HISTORY_INDEX_FORWARD,\n data: index,\n });\n\n return {data: true};\n };\n}\n\n/**\n * Ensures thread-replies in channels correctly follow CRT:ON/OFF\n */\nexport function resetReloadPostsInChannel(): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({\n type: PostTypes.RESET_POSTS_IN_CHANNEL,\n });\n\n const currentChannelId = getCurrentChannelId(getState());\n if (currentChannelId) {\n // wait for channel to be fully deselected; prevent stuck loading screen\n // full state-change/reconciliation will cause prefetchChannelPosts to reload posts\n await dispatch(selectChannel('')); // do not remove await\n dispatch(selectChannel(currentChannelId));\n }\n return {data: true};\n };\n}\n\nexport function acknowledgePost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const userId = getCurrentUserId(getState());\n\n let data;\n try {\n data = await Client4.acknowledgePost(postId, userId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: PostTypes.CREATE_ACK_POST_SUCCESS,\n data,\n });\n\n return {data};\n };\n}\n\nexport function unacknowledgePost(postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const userId = getCurrentUserId(getState());\n\n try {\n await Client4.unacknowledgePost(postId, userId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const data = {\n post_id: postId,\n user_id: userId,\n acknowledged_at: 0,\n } as PostAcknowledgement;\n\n dispatch({\n type: PostTypes.DELETE_ACK_POST_SUCCESS,\n data,\n });\n\n return {data};\n };\n}\n\nexport function restorePostVersion(postId: string, restoreVersionId: string, connectionId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.restorePostVersion(postId, restoreVersionId, connectionId);\n } catch (error) {\n // Send to error bar if it's an edit post error about time limit.\n if (error.server_error_id === 'api.post.update_post.permissions_time_limit.app_error') {\n dispatch(logError({type: 'announcement', message: error.message}, true));\n } else {\n dispatch(logError(error));\n }\n\n forceLogoutIfNecessary(error, dispatch, getState);\n return {error};\n }\n\n return {data: true};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {PreferenceType} from '@mattermost/types/preferences';\n\nimport {PreferenceTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {getMyPreferences as getMyPreferencesSelector, getThemePreferences} from 'mattermost-redux/selectors/entities/preferences';\nimport type {Theme} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionFuncAsync, ThunkActionFunc} from 'mattermost-redux/types/actions';\nimport {getPreferenceKey} from 'mattermost-redux/utils/preference_utils';\n\nimport {bindClientFunc} from './helpers';\n\nimport {Preferences} from '../constants';\n\nexport function deletePreferences(userId: string, preferences: PreferenceType[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const myPreferences = getMyPreferencesSelector(state);\n const currentPreferences = preferences.map((pref) => myPreferences[getPreferenceKey(pref.category, pref.name)]);\n\n (async function deletePreferencesWrapper() {\n try {\n dispatch({\n type: PreferenceTypes.DELETED_PREFERENCES,\n data: preferences,\n });\n\n await Client4.deletePreferences(userId, preferences);\n } catch {\n dispatch({\n type: PreferenceTypes.RECEIVED_PREFERENCES,\n data: currentPreferences,\n });\n }\n }());\n\n return {data: true};\n };\n}\n\nexport function getMyPreferences() {\n return bindClientFunc({\n clientFunc: Client4.getMyPreferences,\n onSuccess: PreferenceTypes.RECEIVED_ALL_PREFERENCES,\n });\n}\n\n// used for fetching some other user's preferences other than current user\nexport function getUserPreferences(userID: string) {\n return bindClientFunc({\n clientFunc: () => Client4.getUserPreferences(userID),\n onSuccess: PreferenceTypes.RECEIVED_USER_ALL_PREFERENCES,\n });\n}\n\nexport function setCustomStatusInitialisationState(initializationState: Record): ThunkActionFunc {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const preference: PreferenceType = {\n user_id: currentUserId,\n category: Preferences.CATEGORY_CUSTOM_STATUS,\n name: Preferences.NAME_CUSTOM_STATUS_TUTORIAL_STATE,\n value: JSON.stringify(initializationState),\n };\n await dispatch(savePreferences(currentUserId, [preference]));\n };\n}\n\nexport function savePreferences(userId: string, preferences: PreferenceType[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n (async function savePreferencesWrapper() {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const actionType = userId === currentUserId ? PreferenceTypes.RECEIVED_PREFERENCES : PreferenceTypes.RECEIVED_USER_PREFERENCES;\n\n try {\n dispatch({\n type: actionType,\n data: preferences,\n });\n\n await Client4.savePreferences(userId, preferences);\n } catch {\n dispatch({\n type: PreferenceTypes.DELETED_PREFERENCES,\n data: preferences,\n });\n }\n }());\n\n return {data: true};\n };\n}\n\nexport function saveTheme(teamId: string, theme: Theme): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const preference: PreferenceType = {\n user_id: currentUserId,\n category: Preferences.CATEGORY_THEME,\n name: teamId || '',\n value: JSON.stringify(theme),\n };\n\n await dispatch(savePreferences(currentUserId, [preference]));\n return {data: true};\n };\n}\n\nexport function deleteTeamSpecificThemes(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n\n const themePreferences: PreferenceType[] = getThemePreferences(state);\n const currentUserId = getCurrentUserId(state);\n\n const toDelete = themePreferences.filter((pref) => pref.name !== '');\n if (toDelete.length > 0) {\n await dispatch(deletePreferences(currentUserId, toDelete));\n }\n\n return {data: true};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Role} from '@mattermost/types/roles';\n\nimport {RoleTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {getRoles} from 'mattermost-redux/selectors/entities/roles_helpers';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {bindClientFunc} from './helpers';\n\nimport {General} from '../constants';\n\nexport function getRolesByNames(rolesNames: string[]) {\n return bindClientFunc({\n clientFunc: Client4.getRolesByNames,\n onRequest: RoleTypes.ROLES_BY_NAMES_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLES, RoleTypes.ROLES_BY_NAMES_SUCCESS],\n onFailure: RoleTypes.ROLES_BY_NAMES_FAILURE,\n params: [\n rolesNames,\n ],\n });\n}\n\nexport function getRoleByName(roleName: string) {\n return bindClientFunc({\n clientFunc: Client4.getRoleByName,\n onRequest: RoleTypes.ROLE_BY_NAME_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLE, RoleTypes.ROLE_BY_NAME_SUCCESS],\n onFailure: RoleTypes.ROLE_BY_NAME_FAILURE,\n params: [\n roleName,\n ],\n });\n}\n\nexport function getRole(roleId: string) {\n return bindClientFunc({\n clientFunc: Client4.getRole,\n onRequest: RoleTypes.ROLE_BY_ID_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLE, RoleTypes.ROLE_BY_ID_SUCCESS],\n onFailure: RoleTypes.ROLE_BY_ID_FAILURE,\n params: [\n roleId,\n ],\n });\n}\n\nexport function editRole(role: Partial & {id: string}) {\n return bindClientFunc({\n clientFunc: Client4.patchRole,\n onRequest: RoleTypes.EDIT_ROLE_REQUEST,\n onSuccess: [RoleTypes.RECEIVED_ROLE, RoleTypes.EDIT_ROLE_SUCCESS],\n onFailure: RoleTypes.EDIT_ROLE_FAILURE,\n params: [\n role.id,\n role,\n ],\n });\n}\n\nexport function setPendingRoles(roles: string[]) {\n return {\n type: RoleTypes.SET_PENDING_ROLES,\n data: roles,\n };\n}\n\nexport function loadRolesIfNeeded(roles: Iterable): ActionFuncAsync> {\n return async (dispatch, getState) => {\n const state = getState();\n let pendingRoles = new Set();\n\n try {\n pendingRoles = new Set(state.entities.roles.pending);\n } catch (e) {\n // do nothing\n }\n\n for (const role of roles) {\n pendingRoles.add(role);\n }\n if (!state.entities.general.serverVersion) {\n dispatch(setPendingRoles(Array.from(pendingRoles)));\n setTimeout(() => dispatch(loadRolesIfNeeded([])), 500);\n return {data: []};\n }\n\n const loadedRoles = getRoles(state);\n const newRoles = new Set();\n\n for (const role of pendingRoles) {\n if (!loadedRoles[role] && role.trim() !== '') {\n newRoles.add(role);\n }\n }\n\n if (state.entities.roles.pending) {\n await dispatch(setPendingRoles([]));\n }\n\n if (newRoles.size > 0) {\n const newRolesArray = Array.from(newRoles);\n const getRolesRequests = [];\n\n for (let i = 0; i < newRolesArray.length; i += General.MAX_GET_ROLES_BY_NAMES) {\n const chunk = newRolesArray.slice(i, i + General.MAX_GET_ROLES_BY_NAMES);\n getRolesRequests.push(dispatch(getRolesByNames(chunk)));\n }\n\n const result = await Promise.all(getRolesRequests);\n return result.reduce(\n (acc: Record, val: Record): Record => {\n acc.data = acc.data.concat(val.data);\n return acc;\n },\n {data: []},\n );\n }\n return {data: state.entities.roles.roles};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ScheduledPost} from '@mattermost/types/schedule_post';\n\nimport {ScheduledPostTypes} from 'mattermost-redux/action_types';\nimport {logError} from 'mattermost-redux/actions/errors';\nimport {forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';\nimport {Client4} from 'mattermost-redux/client';\nimport type {DispatchFunc, GetStateFunc} from 'mattermost-redux/types/actions';\n\nexport function createSchedulePost(schedulePost: ScheduledPost, teamId: string, connectionId: string) {\n return async (dispatch: DispatchFunc) => {\n try {\n const createdPost = await Client4.createScheduledPost(schedulePost, connectionId);\n\n dispatch({\n type: ScheduledPostTypes.SINGLE_SCHEDULED_POST_RECEIVED,\n data: {\n scheduledPost: createdPost.data,\n teamId,\n },\n });\n\n return {data: createdPost};\n } catch (error) {\n return {\n error,\n };\n }\n };\n}\n\nexport function fetchTeamScheduledPosts(teamId: string, includeDirectChannels: boolean, prune?: false) {\n return async (dispatch: DispatchFunc, getState: GetStateFunc) => {\n let scheduledPosts;\n\n try {\n scheduledPosts = await Client4.getScheduledPosts(teamId, includeDirectChannels);\n dispatch({\n type: ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED,\n data: {\n scheduledPostsByTeamId: scheduledPosts.data,\n prune,\n },\n });\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return {data: scheduledPosts};\n };\n}\n\nexport function updateScheduledPost(scheduledPost: ScheduledPost, connectionId: string) {\n return async (dispatch: DispatchFunc) => {\n try {\n const updatedScheduledPost = await Client4.updateScheduledPost(scheduledPost, connectionId);\n\n dispatch({\n type: ScheduledPostTypes.SCHEDULED_POST_UPDATED,\n data: {\n scheduledPost: updatedScheduledPost.data,\n },\n });\n\n return {data: updatedScheduledPost};\n } catch (error) {\n return {\n error,\n };\n }\n };\n}\n\nexport function deleteScheduledPost(userId: string, scheduledPostId: string, connectionId: string) {\n return async (dispatch: DispatchFunc) => {\n try {\n const deletedScheduledPost = await Client4.deleteScheduledPost(userId, scheduledPostId, connectionId);\n\n dispatch({\n type: ScheduledPostTypes.SCHEDULED_POST_DELETED,\n data: {\n scheduledPost: deletedScheduledPost.data,\n },\n });\n\n return {data: deletedScheduledPost};\n } catch (error) {\n return {\n error,\n };\n }\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {FileSearchResults, FileSearchResultItem} from '@mattermost/types/files';\nimport type {PostList, PostSearchResults} from '@mattermost/types/posts';\nimport type {SearchParameter} from '@mattermost/types/search';\n\nimport {SearchTypes} from 'mattermost-redux/action_types';\nimport {Client4} from 'mattermost-redux/client';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionResult, ActionFuncAsync, ThunkActionFunc} from 'mattermost-redux/types/actions';\n\nimport {getChannelAndMyMember, getChannelMembers} from './channels';\nimport {logError} from './errors';\nimport {receivedFiles} from './files';\nimport {forceLogoutIfNecessary} from './helpers';\nimport {getMentionsAndStatusesForPosts, receivedPosts} from './posts';\n\nexport const WEBAPP_SEARCH_PER_PAGE = 20;\n\nexport function getMissingChannelsFromPosts(posts: PostList['posts']): ThunkActionFunc {\n return async (dispatch, getState) => {\n const {\n channels,\n membersInChannel,\n myMembers,\n } = getState().entities.channels;\n const promises: Array> = [];\n Object.values(posts).forEach((post) => {\n const id = post.channel_id;\n\n if (!channels[id] || !myMembers[id]) {\n promises.push(dispatch(getChannelAndMyMember(id)));\n }\n\n if (!membersInChannel[id]) {\n promises.push(dispatch(getChannelMembers(id)));\n }\n });\n return Promise.all(promises);\n };\n}\n\nexport function getMissingChannelsFromFiles(files: Map): ThunkActionFunc> {\n return async (dispatch, getState) => {\n const {\n channels,\n membersInChannel,\n myMembers,\n } = getState().entities.channels;\n const promises: Array> = [];\n Object.values(files).forEach((file) => {\n const id = file.channel_id;\n\n if (!channels[id] || !myMembers[id]) {\n promises.push(dispatch(getChannelAndMyMember(id)));\n }\n\n if (!membersInChannel[id]) {\n promises.push(dispatch(getChannelMembers(id)));\n }\n });\n return Promise.all(promises);\n };\n}\n\nexport function searchPostsWithParams(teamId: string, params: SearchParameter): ActionFuncAsync {\n return async (dispatch, getState) => {\n const isGettingMore = params.page > 0;\n dispatch({\n type: SearchTypes.SEARCH_POSTS_REQUEST,\n isGettingMore,\n });\n let posts;\n\n try {\n posts = await Client4.searchPostsWithParams(teamId, params);\n\n const profilesAndStatuses = getMentionsAndStatusesForPosts(posts.posts, dispatch, getState);\n const missingChannels = dispatch(getMissingChannelsFromPosts(posts.posts));\n const arr = [profilesAndStatuses, missingChannels];\n await Promise.all(arr);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: SearchTypes.RECEIVED_SEARCH_POSTS,\n data: posts,\n isGettingMore,\n },\n receivedPosts(posts),\n {\n type: SearchTypes.RECEIVED_SEARCH_TERM,\n data: {\n teamId,\n params,\n isEnd: posts.order.length === 0,\n },\n },\n {\n type: SearchTypes.SEARCH_POSTS_SUCCESS,\n },\n ], 'SEARCH_POST_BATCH'));\n\n return {data: posts};\n };\n}\n\nexport function searchPosts(teamId: string, terms: string, isOrSearch: boolean, includeDeletedChannels: boolean) {\n return searchPostsWithParams(teamId, {terms, is_or_search: isOrSearch, include_deleted_channels: includeDeletedChannels, page: 0, per_page: WEBAPP_SEARCH_PER_PAGE});\n}\n\nexport function getMorePostsForSearch(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const teamId = getCurrentTeamId(getState());\n const {params, isEnd} = getState().entities.search.current[teamId];\n if (!isEnd) {\n const newParams = Object.assign({}, params);\n newParams.page += 1;\n return dispatch(searchPostsWithParams(teamId, newParams));\n }\n return {data: true};\n };\n}\n\nexport function clearSearch(): ActionFuncAsync {\n return async (dispatch) => {\n dispatch({type: SearchTypes.REMOVE_SEARCH_POSTS});\n dispatch({type: SearchTypes.REMOVE_SEARCH_FILES});\n\n return {data: true};\n };\n}\n\nexport function searchFilesWithParams(teamId: string, params: SearchParameter): ActionFuncAsync {\n return async (dispatch, getState) => {\n const isGettingMore = params.page > 0;\n dispatch({\n type: SearchTypes.SEARCH_FILES_REQUEST,\n isGettingMore,\n });\n\n let files: FileSearchResults;\n try {\n files = await Client4.searchFilesWithParams(teamId, params);\n\n await dispatch(getMissingChannelsFromFiles(files.file_infos));\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: SearchTypes.RECEIVED_SEARCH_FILES,\n data: files,\n isGettingMore,\n },\n receivedFiles(files.file_infos),\n {\n type: SearchTypes.RECEIVED_SEARCH_TERM,\n data: {\n teamId,\n params,\n isFilesEnd: files.order.length === 0,\n },\n },\n {\n type: SearchTypes.SEARCH_FILES_SUCCESS,\n },\n ], 'SEARCH_FILE_BATCH'));\n\n return {data: files};\n };\n}\n\nexport function getMoreFilesForSearch(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const teamId = getCurrentTeamId(getState());\n const {params, isFilesEnd} = getState().entities.search.current[teamId];\n if (!isFilesEnd) {\n const newParams = Object.assign({}, params);\n newParams.page += 1;\n return dispatch(searchFilesWithParams(teamId, newParams));\n }\n return {data: true};\n };\n}\n\nexport function getFlaggedPosts(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const userId = getCurrentUserId(state);\n\n dispatch({type: SearchTypes.SEARCH_FLAGGED_POSTS_REQUEST});\n\n let posts;\n try {\n posts = await Client4.getFlaggedPosts(userId);\n\n await Promise.all([getMentionsAndStatusesForPosts(posts.posts, dispatch, getState), dispatch(getMissingChannelsFromPosts(posts.posts))]);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: SearchTypes.SEARCH_FLAGGED_POSTS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: SearchTypes.RECEIVED_SEARCH_FLAGGED_POSTS,\n data: posts,\n },\n receivedPosts(posts),\n {\n type: SearchTypes.SEARCH_FLAGGED_POSTS_SUCCESS,\n },\n ], 'SEARCH_FLAGGED_POSTS_BATCH'));\n\n return {data: posts};\n };\n}\n\nexport function getPinnedPosts(channelId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: SearchTypes.SEARCH_PINNED_POSTS_REQUEST});\n\n let result;\n try {\n result = await Client4.getPinnedPosts(channelId);\n\n const profilesAndStatuses = getMentionsAndStatusesForPosts(result.posts, dispatch, getState);\n const missingChannels = dispatch(getMissingChannelsFromPosts(result.posts));\n const arr = [profilesAndStatuses, missingChannels];\n await Promise.all(arr);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: SearchTypes.SEARCH_PINNED_POSTS_FAILURE, error});\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: SearchTypes.RECEIVED_SEARCH_PINNED_POSTS,\n data: {\n pinned: result,\n channelId,\n },\n },\n receivedPosts(result),\n {\n type: SearchTypes.SEARCH_PINNED_POSTS_SUCCESS,\n },\n ], 'SEARCH_PINNED_POSTS_BATCH'));\n\n return {data: result};\n };\n}\n\nexport default {\n clearSearch,\n searchPosts,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {GroupSearchParams} from '@mattermost/types/groups';\nimport type {PostList, Post, PostAcknowledgement, PostEmbed, PostPreviewMetadata} from '@mattermost/types/posts';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {searchGroups} from 'mattermost-redux/actions/groups';\nimport {getNeededAtMentionedUsernamesAndGroups} from 'mattermost-redux/actions/posts';\nimport {\n getProfilesByIds,\n getProfilesByUsernames,\n getStatusesByIds,\n maxUserIdsPerProfilesRequest,\n maxUserIdsPerStatusesRequest,\n} from 'mattermost-redux/actions/users';\nimport {getCurrentUser, getCurrentUserId, getIsUserStatusesConfigEnabled, getUsers} from 'mattermost-redux/selectors/entities/common';\nimport {getUsersStatusAndProfileFetchingPollInterval} from 'mattermost-redux/selectors/entities/general';\nimport {getUserStatuses} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionFunc, ActionFuncAsync, ThunkActionFunc} from 'mattermost-redux/types/actions';\nimport {BackgroundDataLoader} from 'mattermost-redux/utils/data_loader';\n\n/**\n * Adds list(s) of user id(s) to the status fetching poll. Which gets fetched based on user interval polling duration\n * Do not use if status is required immediately.\n */\nexport function addUserIdsForStatusFetchingPoll(userIdsForStatus: Array): ActionFunc {\n return (dispatch, getState, {loaders}: any) => {\n if (!loaders.pollingStatusLoader) {\n loaders.pollingStatusLoader = new BackgroundDataLoader({\n fetchBatch: (userIds) => dispatch(getStatusesByIds(userIds)),\n maxBatchSize: maxUserIdsPerStatusesRequest,\n });\n }\n\n loaders.pollingStatusLoader.queue(userIdsForStatus);\n\n const pollingInterval = getUsersStatusAndProfileFetchingPollInterval(getState());\n\n // Escape hatch to fetch immediately or when we haven't received the polling interval from config yet\n if (!pollingInterval || pollingInterval <= 0) {\n loaders.pollingStatusLoader.fetchBatchNow();\n } else {\n // Start the interval if it is not already running\n loaders.pollingStatusLoader.startIntervalIfNeeded(pollingInterval);\n }\n\n // Now here the interval is already running and we have added the user ids to the poll so we don't need to do anything\n return {data: true};\n };\n}\n\n/**\n * Adds list(s) of user id(s) to the profile fetching poll. Which gets fetched based on user interval polling duration\n * Do not use if profile is required immediately.\n */\nexport function addUserIdsForProfileFetchingPoll(userIdsForProfile: Array): ActionFunc {\n return (dispatch, getState, {loaders}: any) => {\n if (!loaders.pollingProfileLoader) {\n loaders.pollingProfileLoader = new BackgroundDataLoader({\n fetchBatch: (userIds) => dispatch(getProfilesByIds(userIds)),\n maxBatchSize: maxUserIdsPerProfilesRequest,\n });\n }\n\n loaders.pollingProfileLoader.queue(userIdsForProfile);\n\n const pollingInterval = getUsersStatusAndProfileFetchingPollInterval(getState());\n\n // Escape hatch to fetch immediately or when we haven't received the polling interval from config yet\n if (!pollingInterval || pollingInterval <= 0) {\n loaders.pollingProfileLoader.fetchBatchNow();\n } else {\n // Start the interval if it is not already running\n loaders.pollingProfileLoader.startIntervalIfNeeded(pollingInterval);\n }\n\n // Now here the interval is already running and we have added the user ids to the poll so we don't need to do anything\n return {data: true};\n };\n}\n\nexport function cleanUpStatusAndProfileFetchingPoll(): ThunkActionFunc {\n return (dispatch, getState, {loaders}: any) => {\n loaders.pollingStatusLoader?.stopInterval();\n\n loaders.pollingProfileLoader?.stopInterval();\n };\n}\n\n/**\n * Gets in batch the user profiles, user statuses and user groups for the users in the posts list\n * This action however doesn't refetch the profiles and statuses except for groups if they are already fetched once\n */\nexport function batchFetchStatusesProfilesGroupsFromPosts(postsArrayOrMap: Post[]|PostList['posts']|Post): ActionFunc {\n return (dispatch, getState) => {\n if (!postsArrayOrMap) {\n return {data: false};\n }\n\n let posts: Post[] = [];\n if (Array.isArray(postsArrayOrMap)) {\n posts = postsArrayOrMap;\n } else if (typeof postsArrayOrMap === 'object' && 'id' in postsArrayOrMap) {\n posts = [postsArrayOrMap as Post];\n } else if (typeof postsArrayOrMap === 'object') {\n posts = Object.values(postsArrayOrMap);\n }\n\n if (posts.length === 0) {\n return {data: false};\n }\n\n const mentionedUsernamesAndGroupsInPosts = new Set();\n\n const state = getState();\n const currentUser = getCurrentUser(state);\n const currentUserId = getCurrentUserId(state);\n const isUserStatusesConfigEnabled = getIsUserStatusesConfigEnabled(state);\n const users = getUsers(state);\n const userStatuses = getUserStatuses(state);\n\n posts.forEach((post) => {\n if (post.metadata) {\n // Add users listed in permalink previews\n if (post.metadata.embeds) {\n post.metadata.embeds.forEach((embed: PostEmbed) => {\n if (embed.type === 'permalink' && embed.data) {\n const permalinkPostPreviewMetaData = embed.data as PostPreviewMetadata;\n\n if (permalinkPostPreviewMetaData.post?.user_id && !users[permalinkPostPreviewMetaData.post.user_id] && permalinkPostPreviewMetaData.post.user_id !== currentUserId) {\n dispatch(addUserIdsForProfileFetchingPoll([permalinkPostPreviewMetaData.post.user_id]));\n }\n if (permalinkPostPreviewMetaData.post?.user_id && !userStatuses[permalinkPostPreviewMetaData.post.user_id] && permalinkPostPreviewMetaData.post.user_id !== currentUserId && isUserStatusesConfigEnabled) {\n dispatch(addUserIdsForStatusFetchingPoll([permalinkPostPreviewMetaData.post.user_id]));\n }\n }\n });\n }\n\n // Add users listed in the Post Acknowledgement feature\n if (post.metadata.acknowledgements) {\n post.metadata.acknowledgements.forEach((ack: PostAcknowledgement) => {\n if (ack.acknowledged_at > 0 && ack.user_id && !users[ack.user_id] && ack.user_id !== currentUserId) {\n dispatch(addUserIdsForProfileFetchingPoll([ack.user_id]));\n }\n });\n }\n }\n\n // This is sufficient to check if the profile is already fetched\n // as we receive the websocket events for the profiles changes\n if (!users[post.user_id] && post.user_id !== currentUserId) {\n dispatch(addUserIdsForProfileFetchingPoll([post.user_id]));\n }\n\n // This is sufficient to check if the status is already fetched\n // as we do the polling for statuses for current channel's channel members every 1 minute in channel_controller\n if (!userStatuses[post.user_id] && post.user_id !== currentUserId && isUserStatusesConfigEnabled) {\n dispatch(addUserIdsForStatusFetchingPoll([post.user_id]));\n }\n\n // We need to check for all @mentions in the post, they can be either users or groups\n const mentioned = getNeededAtMentionedUsernamesAndGroups(state, [post]);\n if (mentioned.size > 0) {\n mentioned.forEach((atMention) => {\n if (atMention !== currentUser.username) {\n mentionedUsernamesAndGroupsInPosts.add(atMention);\n }\n });\n }\n });\n\n if (mentionedUsernamesAndGroupsInPosts.size > 0) {\n dispatch(getUsersFromMentionedUsernamesAndGroups(Array.from(mentionedUsernamesAndGroupsInPosts)));\n }\n\n return {data: true};\n };\n}\n\nexport function getUsersFromMentionedUsernamesAndGroups(usernamesAndGroups: string[]): ActionFuncAsync {\n return async (dispatch) => {\n // We run the at-mentioned be it user or group through the user profile search\n const {data: userProfiles} = await dispatch(getProfilesByUsernames(usernamesAndGroups));\n\n const mentionedUsernames: Array = [];\n\n // The user at-mentioned will be the userProfiles\n if (userProfiles) {\n for (const user of userProfiles) {\n if (user && user.username) {\n mentionedUsernames.push(user.username);\n }\n }\n }\n\n // Removing usernames from the list will leave only the group names\n const mentionedGroups = usernamesAndGroups.filter((name) => !mentionedUsernames.includes(name));\n\n for (const group of mentionedGroups) {\n const groupSearchParam: GroupSearchParams = {\n q: group,\n filter_allow_reference: true,\n page: 0,\n per_page: 60,\n };\n\n dispatch(searchGroups(groupSearchParam));\n }\n\n return {data: mentionedGroups};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {Team, TeamMembership, TeamMemberWithError, GetTeamMembersOpts, TeamsWithCount, TeamSearchOpts, NotPagedTeamSearchOpts, PagedTeamSearchOpts} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {ChannelTypes, TeamTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {selectChannel} from 'mattermost-redux/actions/channels';\nimport {logError} from 'mattermost-redux/actions/errors';\nimport {bindClientFunc, forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';\nimport {loadRolesIfNeeded} from 'mattermost-redux/actions/roles';\nimport {getProfilesByIds, getStatusesByIds} from 'mattermost-redux/actions/users';\nimport {Client4} from 'mattermost-redux/client';\nimport {General} from 'mattermost-redux/constants';\nimport {getIsUserStatusesConfigEnabled} from 'mattermost-redux/selectors/entities/common';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionResult, DispatchFunc, GetStateFunc, ActionFuncAsync} from 'mattermost-redux/types/actions';\nimport EventEmitter from 'mattermost-redux/utils/event_emitter';\n\nasync function getProfilesAndStatusesForMembers(userIds: string[], dispatch: DispatchFunc, getState: GetStateFunc) {\n const state = getState();\n const {\n currentUserId,\n profiles,\n statuses,\n } = state.entities.users;\n const enabledUserStatuses = getIsUserStatusesConfigEnabled(state);\n\n const profilesToLoad: string[] = [];\n const statusesToLoad: string[] = [];\n userIds.forEach((userId) => {\n if (!profiles[userId] && !profilesToLoad.includes(userId) && userId !== currentUserId) {\n profilesToLoad.push(userId);\n }\n\n if (!statuses[userId] && !statusesToLoad.includes(userId) && userId !== currentUserId) {\n statusesToLoad.push(userId);\n }\n });\n const requests: Array> = [];\n\n if (profilesToLoad.length) {\n requests.push(dispatch(getProfilesByIds(profilesToLoad)));\n }\n\n if (statusesToLoad.length && enabledUserStatuses) {\n requests.push(dispatch(getStatusesByIds(statusesToLoad)));\n }\n\n await Promise.all(requests);\n}\n\nexport function selectTeam(team: Team | Team['id']) {\n const teamId = (typeof team === 'string') ? team : team.id;\n return {\n type: TeamTypes.SELECT_TEAM,\n data: teamId,\n };\n}\n\nexport function getMyTeams() {\n return bindClientFunc({\n clientFunc: Client4.getMyTeams,\n onSuccess: TeamTypes.RECEIVED_TEAMS_LIST,\n });\n}\n\nexport function getMyTeamUnreads(collapsedThreads: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n let unreads;\n try {\n unreads = await Client4.getMyTeamUnreads(collapsedThreads);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(\n {\n type: TeamTypes.RECEIVED_MY_TEAM_UNREADS,\n data: unreads,\n },\n );\n\n return {data: unreads};\n };\n}\n\nexport function getTeam(teamId: string) {\n return bindClientFunc({\n clientFunc: Client4.getTeam,\n onSuccess: TeamTypes.RECEIVED_TEAM,\n params: [\n teamId,\n ],\n });\n}\n\nexport function getTeamByName(teamName: string) {\n return bindClientFunc({\n clientFunc: Client4.getTeamByName,\n onSuccess: TeamTypes.RECEIVED_TEAM,\n params: [\n teamName,\n ],\n });\n}\n\nexport function getTeams(page = 0, perPage: number = General.TEAMS_CHUNK_SIZE, includeTotalCount = false, excludePolicyConstrained = false): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n\n dispatch({type: TeamTypes.GET_TEAMS_REQUEST, data});\n\n try {\n data = await Client4.getTeams(page, perPage, includeTotalCount, excludePolicyConstrained);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: TeamTypes.GET_TEAMS_FAILURE, data});\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [\n {\n type: TeamTypes.RECEIVED_TEAMS_LIST,\n data: includeTotalCount ? (data as unknown as TeamsWithCount).teams : data,\n },\n {\n type: TeamTypes.GET_TEAMS_SUCCESS,\n data,\n },\n ];\n\n if (includeTotalCount) {\n actions.push({\n type: TeamTypes.RECEIVED_TOTAL_TEAM_COUNT,\n data: (data as unknown as TeamsWithCount).total_count,\n });\n }\n\n dispatch(batchActions(actions));\n\n return {data};\n };\n}\n\nexport function searchTeams(term: string, opts: PagedTeamSearchOpts): ActionFuncAsync;\nexport function searchTeams(term: string, opts?: NotPagedTeamSearchOpts): ActionFuncAsync;\nexport function searchTeams(term: string, opts: TeamSearchOpts = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: TeamTypes.GET_TEAMS_REQUEST, data: null});\n\n let response;\n try {\n response = await Client4.searchTeams(term, opts);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: TeamTypes.GET_TEAMS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n // The type of the response is determined by whether or not page/perPage were set\n let teams;\n if (!(opts as PagedTeamSearchOpts).page || !(opts as PagedTeamSearchOpts).per_page) {\n teams = response;\n } else {\n teams = response.teams;\n }\n\n dispatch(batchActions([\n {\n type: TeamTypes.RECEIVED_TEAMS_LIST,\n data: teams,\n },\n {\n type: TeamTypes.GET_TEAMS_SUCCESS,\n },\n ]));\n\n return {data: response};\n };\n}\n\nexport function createTeam(team: Team): ActionFuncAsync {\n return async (dispatch, getState) => {\n let created;\n try {\n created = await Client4.createTeam(team);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const member = {\n team_id: created.id,\n user_id: getState().entities.users.currentUserId,\n roles: `${General.TEAM_ADMIN_ROLE} ${General.TEAM_USER_ROLE}`,\n delete_at: 0,\n msg_count: 0,\n mention_count: 0,\n };\n\n dispatch(batchActions([\n {\n type: TeamTypes.CREATED_TEAM,\n data: created,\n },\n {\n type: TeamTypes.RECEIVED_MY_TEAM_MEMBER,\n data: member,\n },\n {\n type: TeamTypes.SELECT_TEAM,\n data: created.id,\n },\n ]));\n dispatch(loadRolesIfNeeded(member.roles.split(' ')));\n\n return {data: created};\n };\n}\n\nexport function deleteTeam(teamId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.deleteTeam(teamId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const entities = getState().entities;\n const {\n currentTeamId,\n } = entities.teams;\n const actions: AnyAction[] = [];\n if (teamId === currentTeamId) {\n EventEmitter.emit('leave_team');\n actions.push({type: ChannelTypes.SELECT_CHANNEL, data: ''});\n }\n\n actions.push(\n {\n type: TeamTypes.RECEIVED_TEAM_DELETED,\n data: {id: teamId},\n },\n );\n\n dispatch(batchActions(actions));\n\n return {data: true};\n };\n}\n\nexport function unarchiveTeam(teamId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let team: Team;\n try {\n team = await Client4.unarchiveTeam(teamId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: TeamTypes.RECEIVED_TEAM_UNARCHIVED,\n data: team,\n });\n\n return {data: true};\n };\n}\n\nexport function updateTeam(team: Team) {\n return bindClientFunc({\n clientFunc: Client4.updateTeam,\n onSuccess: TeamTypes.UPDATED_TEAM,\n params: [\n team,\n ],\n });\n}\n\nexport function patchTeam(team: Partial & {id: string}) {\n return bindClientFunc({\n clientFunc: Client4.patchTeam,\n onSuccess: TeamTypes.PATCHED_TEAM,\n params: [\n team,\n ],\n });\n}\n\nexport function regenerateTeamInviteId(teamId: string) {\n return bindClientFunc({\n clientFunc: Client4.regenerateTeamInviteId,\n onSuccess: TeamTypes.REGENERATED_TEAM_INVITE_ID,\n params: [\n teamId,\n ],\n });\n}\n\nexport function getMyTeamMembers(): ActionFuncAsync {\n return async (dispatch) => {\n const getMyTeamMembersFunc = bindClientFunc({\n clientFunc: Client4.getMyTeamMembers,\n onSuccess: TeamTypes.RECEIVED_MY_TEAM_MEMBERS,\n });\n const teamMembers = await dispatch(getMyTeamMembersFunc);\n\n if ('data' in teamMembers && teamMembers.data) {\n const roles = new Set();\n\n for (const teamMember of teamMembers.data) {\n for (const role of teamMember.roles.split(' ')) {\n roles.add(role);\n }\n }\n if (roles.size > 0) {\n dispatch(loadRolesIfNeeded([...roles]));\n }\n }\n\n return teamMembers;\n };\n}\n\nexport function getTeamMembers(teamId: string, page = 0, perPage: number = General.TEAMS_CHUNK_SIZE, options?: GetTeamMembersOpts) {\n return bindClientFunc({\n clientFunc: Client4.getTeamMembers,\n onRequest: TeamTypes.GET_TEAM_MEMBERS_REQUEST,\n onSuccess: [TeamTypes.RECEIVED_MEMBERS_IN_TEAM, TeamTypes.GET_TEAM_MEMBERS_SUCCESS],\n onFailure: TeamTypes.GET_TEAM_MEMBERS_FAILURE,\n params: [\n teamId,\n page,\n perPage,\n options,\n ],\n });\n}\n\nexport function getTeamMember(teamId: string, userId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let member;\n try {\n const memberRequest = Client4.getTeamMember(teamId, userId);\n\n getProfilesAndStatusesForMembers([userId], dispatch, getState);\n\n member = await memberRequest;\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: TeamTypes.RECEIVED_MEMBERS_IN_TEAM,\n data: [member],\n });\n\n return {data: member};\n };\n}\n\nexport function getTeamMembersByIds(teamId: string, userIds: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let members;\n try {\n const membersRequest = Client4.getTeamMembersByIds(teamId, userIds);\n\n getProfilesAndStatusesForMembers(userIds, dispatch, getState);\n\n members = await membersRequest;\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: TeamTypes.RECEIVED_MEMBERS_IN_TEAM,\n data: members,\n });\n\n return {data: members};\n };\n}\n\nexport function getTeamsForUser(userId: string) {\n return bindClientFunc({\n clientFunc: Client4.getTeamsForUser,\n onRequest: TeamTypes.GET_TEAMS_REQUEST,\n onSuccess: [TeamTypes.RECEIVED_TEAMS_LIST, TeamTypes.GET_TEAMS_SUCCESS],\n onFailure: TeamTypes.GET_TEAMS_FAILURE,\n params: [\n userId,\n ],\n });\n}\n\nexport function getTeamMembersForUser(userId: string) {\n return bindClientFunc({\n clientFunc: Client4.getTeamMembersForUser,\n onSuccess: TeamTypes.RECEIVED_TEAM_MEMBERS,\n params: [\n userId,\n ],\n });\n}\n\nexport function getTeamStats(teamId: string) {\n return bindClientFunc({\n clientFunc: Client4.getTeamStats,\n onSuccess: TeamTypes.RECEIVED_TEAM_STATS,\n params: [\n teamId,\n ],\n });\n}\n\nexport function addUserToTeamFromInvite(token: string, inviteId: string) {\n return bindClientFunc({\n clientFunc: Client4.addToTeamFromInvite,\n onRequest: TeamTypes.ADD_TO_TEAM_FROM_INVITE_REQUEST,\n onSuccess: TeamTypes.ADD_TO_TEAM_FROM_INVITE_SUCCESS,\n onFailure: TeamTypes.ADD_TO_TEAM_FROM_INVITE_FAILURE,\n params: [\n token,\n inviteId,\n ],\n });\n}\n\nexport function addUserToTeam(teamId: string, userId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let member;\n try {\n member = await Client4.addToTeam(teamId, userId);\n } catch (error) {\n forceLogoutIfNecessary(error as ServerError, dispatch, getState);\n dispatch(logError(error as ServerError));\n return {error: error as ServerError};\n }\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILE_IN_TEAM,\n data: {id: teamId, user_id: userId},\n },\n {\n type: TeamTypes.RECEIVED_MEMBER_IN_TEAM,\n data: member,\n },\n ]));\n\n return {data: member};\n };\n}\n\nexport function addUsersToTeamGracefully(teamId: string, userIds: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let result: TeamMemberWithError[];\n try {\n result = await Client4.addUsersToTeamGracefully(teamId, userIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const addedMembers = result ? result.filter((m) => !m.error) : [];\n const profiles: Array> = addedMembers.map((m) => ({id: m.user_id}));\n const members = addedMembers.map((m) => m.member);\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_TEAM,\n data: profiles,\n id: teamId,\n },\n {\n type: TeamTypes.RECEIVED_MEMBERS_IN_TEAM,\n data: members,\n },\n ]));\n\n return {data: result};\n };\n}\n\nexport function removeUserFromTeam(teamId: string, userId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.removeFromTeam(teamId, userId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const member = {\n team_id: teamId,\n user_id: userId,\n };\n\n const actions: AnyAction[] = [\n {\n type: UserTypes.RECEIVED_PROFILE_NOT_IN_TEAM,\n data: {id: teamId, user_id: userId},\n },\n {\n type: TeamTypes.REMOVE_MEMBER_FROM_TEAM,\n data: member,\n },\n ];\n\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n\n if (userId === currentUserId) {\n const {channels, myMembers} = state.entities.channels;\n\n for (const channelMember of Object.values(myMembers)) {\n const channel = channels[channelMember.channel_id];\n\n if (channel && channel.team_id === teamId) {\n actions.push({\n type: ChannelTypes.LEAVE_CHANNEL,\n data: channel,\n });\n }\n }\n\n if (teamId === getCurrentTeamId(state)) {\n actions.push(selectChannel(''));\n }\n }\n\n dispatch(batchActions(actions));\n\n return {data: true};\n };\n}\n\nexport function sendEmailInvitesToTeam(teamId: string, emails: string[]) {\n return bindClientFunc({\n clientFunc: Client4.sendEmailInvitesToTeam,\n params: [\n teamId,\n emails,\n ],\n });\n}\n\nexport function sendEmailGuestInvitesToChannels(teamId: string, channelIds: string[], emails: string[], message: string) {\n return bindClientFunc({\n clientFunc: Client4.sendEmailGuestInvitesToChannels,\n params: [\n teamId,\n channelIds,\n emails,\n message,\n ],\n });\n}\nexport function sendEmailInvitesToTeamGracefully(teamId: string, emails: string[]) {\n return bindClientFunc({\n clientFunc: Client4.sendEmailInvitesToTeamGracefully,\n params: [\n teamId,\n emails,\n ],\n });\n}\n\nexport function sendEmailGuestInvitesToChannelsGracefully(teamId: string, channelIds: string[], emails: string[], message: string) {\n return bindClientFunc({\n clientFunc: Client4.sendEmailGuestInvitesToChannelsGracefully,\n params: [\n teamId,\n channelIds,\n emails,\n message,\n ],\n });\n}\n\nexport function sendEmailInvitesToTeamAndChannelsGracefully(\n teamId: string,\n channelIds: string[],\n emails: string[],\n message: string,\n) {\n return bindClientFunc({\n clientFunc: Client4.sendEmailInvitesToTeamAndChannelsGracefully,\n params: [\n teamId,\n channelIds,\n emails,\n message,\n ],\n });\n}\n\nexport function getTeamInviteInfo(inviteId: string) {\n return bindClientFunc({\n clientFunc: Client4.getTeamInviteInfo,\n onRequest: TeamTypes.TEAM_INVITE_INFO_REQUEST,\n onSuccess: TeamTypes.TEAM_INVITE_INFO_SUCCESS,\n onFailure: TeamTypes.TEAM_INVITE_INFO_FAILURE,\n params: [\n inviteId,\n ],\n });\n}\n\nexport function checkIfTeamExists(teamName: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.checkIfTeamExists(teamName);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return {data: data.exists};\n };\n}\n\nexport function setTeamIcon(teamId: string, imageData: File): ActionFuncAsync {\n return async (dispatch) => {\n await Client4.setTeamIcon(teamId, imageData);\n const team = await Client4.getTeam(teamId);\n dispatch({\n type: TeamTypes.PATCHED_TEAM,\n data: team,\n });\n return {data: {status: 'OK'}};\n };\n}\n\nexport function removeTeamIcon(teamId: string): ActionFuncAsync {\n return async (dispatch) => {\n await Client4.removeTeamIcon(teamId);\n const team = await Client4.getTeam(teamId);\n dispatch({\n type: TeamTypes.PATCHED_TEAM,\n data: team,\n });\n return {data: {status: 'OK'}};\n };\n}\n\nexport function updateTeamScheme(teamId: string, schemeId: string): ActionFuncAsync<{teamId: string; schemeId: string}> {\n return bindClientFunc({\n clientFunc: async () => {\n await Client4.updateTeamScheme(teamId, schemeId);\n return {teamId, schemeId};\n },\n onSuccess: TeamTypes.UPDATED_TEAM_SCHEME,\n });\n}\n\nexport function updateTeamMemberSchemeRoles(\n teamId: string,\n userId: string,\n isSchemeUser: boolean,\n isSchemeAdmin: boolean,\n): ActionFuncAsync {\n return bindClientFunc({\n clientFunc: async () => {\n await Client4.updateTeamMemberSchemeRoles(teamId, userId, isSchemeUser, isSchemeAdmin);\n return {teamId, userId, isSchemeUser, isSchemeAdmin};\n },\n onSuccess: TeamTypes.UPDATED_TEAM_MEMBER_SCHEME_ROLES,\n });\n}\n\nexport function invalidateAllEmailInvites() {\n return bindClientFunc({\n clientFunc: Client4.invalidateAllEmailInvites,\n });\n}\n\nexport function membersMinusGroupMembers(teamID: string, groupIDs: string[], page = 0, perPage: number = General.PROFILE_CHUNK_SIZE) {\n return bindClientFunc({\n clientFunc: Client4.teamMembersMinusGroupMembers,\n onSuccess: TeamTypes.RECEIVED_TEAM_MEMBERS_MINUS_GROUP_MEMBERS,\n params: [\n teamID,\n groupIDs,\n page,\n perPage,\n ],\n });\n}\n\nexport function getInProductNotices(teamId: string, client: string, clientVersion: string) {\n return bindClientFunc({\n clientFunc: Client4.getInProductNotices,\n params: [\n teamId,\n client,\n clientVersion,\n ],\n });\n}\n\nexport function updateNoticesAsViewed(noticeIds: string[]) {\n return bindClientFunc({\n clientFunc: Client4.updateNoticesAsViewed,\n params: [\n noticeIds,\n ],\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport uniq from 'lodash/uniq';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {Post} from '@mattermost/types/posts';\nimport type {UserThread, UserThreadList} from '@mattermost/types/threads';\n\nimport {ThreadTypes, PostTypes, UserTypes} from 'mattermost-redux/action_types';\nimport {getMissingFilesByPosts} from 'mattermost-redux/actions/files';\nimport {getMissingProfilesByIds} from 'mattermost-redux/actions/users';\nimport {Client4} from 'mattermost-redux/client';\nimport ThreadConstants from 'mattermost-redux/constants/threads';\nimport {getChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {makeGetPostsForThread} from 'mattermost-redux/selectors/entities/posts';\nimport {isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getThread as getThreadSelector, getThreadsInChannel} from 'mattermost-redux/selectors/entities/threads';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\nimport type {DispatchFunc, GetStateFunc, ActionFunc, ActionFuncAsync} from 'mattermost-redux/types/actions';\n\nimport {logError} from './errors';\nimport {forceLogoutIfNecessary} from './helpers';\nimport {getPostThread} from './posts';\n\ntype ExtendedPost = Post & { system_post_ids?: string[] };\n\nexport function fetchThreads(userId: string, teamId: string, {before = '', after = '', perPage = ThreadConstants.THREADS_CHUNK_SIZE, unread = false, totalsOnly = false, threadsOnly = false, extended = false, since = 0} = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data: undefined | UserThreadList;\n\n try {\n data = await Client4.getUserThreads(userId, teamId, {before, after, perPage, extended, unread, totalsOnly, threadsOnly, since});\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return {data};\n };\n}\n\nexport function getThreadsForCurrentTeam({before = '', after = '', unread = false} = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n const userId = getCurrentUserId(getState());\n const teamId = getCurrentTeamId(getState());\n\n const response = await dispatch(fetchThreads(userId, teamId, {\n before,\n after,\n perPage: ThreadConstants.THREADS_PAGE_SIZE,\n unread,\n totalsOnly: false,\n threadsOnly: true,\n extended: true,\n }));\n\n if (response.error) {\n return response;\n }\n\n const userThreadList: undefined | UserThreadList = response?.data;\n\n if (!userThreadList) {\n return {error: true};\n }\n\n if (userThreadList?.threads?.length) {\n await dispatch(getMissingProfilesByIds(userThreadList.threads.map(({participants}) => participants.map(({id}) => id)).flat()));\n\n dispatch({\n type: PostTypes.RECEIVED_POSTS,\n data: {posts: userThreadList.threads.map(({post}) => ({...post, update_at: 0}))},\n });\n\n dispatch(getMissingFilesByPosts(uniq(userThreadList.threads.map(({post}) => post))));\n }\n\n dispatch({\n type: unread ? ThreadTypes.RECEIVED_UNREAD_THREADS : ThreadTypes.RECEIVED_THREADS,\n data: {\n threads: userThreadList?.threads?.map((thread) => ({...thread, is_following: true})) ?? [],\n team_id: teamId,\n },\n });\n\n return {data: userThreadList};\n };\n}\n\nexport function getThreadCounts(userId: string, teamId: string): ActionFuncAsync {\n return async (dispatch) => {\n const response = await dispatch(fetchThreads(userId, teamId, {totalsOnly: true, threadsOnly: false}));\n\n if (response.error) {\n return response;\n }\n\n const counts: undefined | UserThreadList = response?.data;\n if (!counts) {\n return {error: true};\n }\n\n const data = {\n total: counts.total,\n total_unread_threads: counts.total_unread_threads,\n total_unread_mentions: counts.total_unread_mentions,\n total_unread_urgent_mentions: counts.total_unread_urgent_mentions,\n };\n\n dispatch({\n type: ThreadTypes.RECEIVED_THREAD_COUNTS,\n data: {\n ...data,\n team_id: teamId,\n },\n });\n\n return {data};\n };\n}\n\nexport function getCountsAndThreadsSince(userId: string, teamId: string, since?: number): ActionFuncAsync {\n return async (dispatch) => {\n const response = await dispatch(fetchThreads(userId, teamId, {since, totalsOnly: false, threadsOnly: false, extended: true}));\n\n if (response.error) {\n return response;\n }\n\n const userThreadList: undefined | UserThreadList = response?.data;\n if (!userThreadList) {\n return {error: true};\n }\n\n const actions = [];\n\n if (userThreadList?.threads?.length) {\n await dispatch(getMissingProfilesByIds(userThreadList.threads.map(({participants}) => participants.map(({id}) => id)).flat()));\n actions.push({\n type: PostTypes.RECEIVED_POSTS,\n data: {posts: userThreadList.threads.map(({post}) => ({...post, update_at: 0}))},\n });\n }\n\n actions.push({\n type: ThreadTypes.RECEIVED_THREADS,\n data: {\n threads: userThreadList?.threads?.map((thread) => ({...thread, is_following: true})) ?? [],\n team_id: teamId,\n },\n });\n\n const counts = {\n total: userThreadList.total,\n total_unread_threads: userThreadList.total_unread_threads,\n total_unread_mentions: userThreadList.total_unread_mentions,\n total_unread_urgent_mentions: userThreadList.total_unread_urgent_mentions,\n };\n\n actions.push({\n type: ThreadTypes.RECEIVED_THREAD_COUNTS,\n data: {\n ...counts,\n team_id: teamId,\n },\n });\n\n dispatch(batchActions(actions));\n\n return {data: userThreadList};\n };\n}\n\nexport function handleThreadArrived(dispatch: DispatchFunc, getState: GetStateFunc, threadData: UserThread, teamId: string, previousUnreadReplies?: number, previousUnreadMentions?: number) {\n const state = getState();\n const currentUserId = getCurrentUserId(state);\n const crtEnabled = isCollapsedThreadsEnabled(state);\n const thread = {...threadData, is_following: true};\n\n dispatch({\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: thread.participants.filter((user) => user.id !== currentUserId),\n });\n\n dispatch({\n type: PostTypes.RECEIVED_POST,\n data: {...thread.post, update_at: 0},\n features: {crtEnabled},\n });\n\n dispatch({\n type: ThreadTypes.RECEIVED_THREAD,\n data: {\n thread,\n team_id: teamId,\n },\n });\n\n const oldThreadData = state.entities.threads.threads[threadData.id];\n\n // update thread read if and only if we have previous unread values\n // upon receiving a thread.\n // we need that guard to ensure that fetching a thread won't skew the counts\n //\n // PS: websocket events should always provide the previous unread values\n if (\n (previousUnreadMentions != null && previousUnreadReplies != null) ||\n oldThreadData != null\n ) {\n dispatch(\n handleReadChanged(\n thread.id,\n teamId,\n thread.post.channel_id,\n {\n lastViewedAt: thread.last_viewed_at,\n prevUnreadMentions: oldThreadData?.unread_mentions ?? previousUnreadMentions,\n newUnreadMentions: thread.unread_mentions,\n prevUnreadReplies: oldThreadData?.unread_replies ?? previousUnreadReplies,\n newUnreadReplies: thread.unread_replies,\n },\n ),\n );\n }\n\n return thread;\n}\n\nexport function getThread(userId: string, teamId: string, threadId: string, extended = true): ActionFuncAsync {\n return async (dispatch, getState) => {\n let thread;\n try {\n thread = await Client4.getUserThread(userId, teamId, threadId, extended);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n if (thread) {\n thread = handleThreadArrived(dispatch, getState, thread, teamId);\n }\n\n return {data: thread};\n };\n}\n\nexport function handleAllMarkedRead(teamId: string) {\n return {\n type: ThreadTypes.ALL_TEAM_THREADS_READ,\n data: {\n team_id: teamId,\n },\n };\n}\n\nexport function markAllThreadsInTeamRead(userId: string, teamId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.updateThreadsReadForUser(userId, teamId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(handleAllMarkedRead(teamId));\n\n return {};\n };\n}\n\nexport function markThreadAsUnread(userId: string, teamId: string, threadId: string, postId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.markThreadAsUnreadForUser(userId, teamId, threadId, postId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return {};\n };\n}\n\nexport function markLastPostInThreadAsUnread(userId: string, teamId: string, threadId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n const getPostsForThread = makeGetPostsForThread();\n let posts = getPostsForThread(getState(), threadId);\n\n const state = getState();\n const thread = getThreadSelector(state, threadId);\n\n // load posts in thread if they are not loaded already\n if (thread?.reply_count === posts.length - 1) {\n dispatch(markThreadAsUnread(userId, teamId, threadId, posts[0].id));\n } else {\n dispatch(getPostThread(threadId)).then(({data, error}) => {\n if (data) {\n posts = getPostsForThread(getState(), threadId);\n dispatch(markThreadAsUnread(userId, teamId, threadId, posts[0].id));\n } else if (error) {\n return {error};\n }\n return {};\n });\n }\n\n return {};\n };\n}\n\nexport function updateThreadRead(userId: string, teamId: string, threadId: string, timestamp: number): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.updateThreadReadForUser(userId, teamId, threadId, timestamp);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n return {};\n };\n}\n\nexport function handleReadChanged(\n threadId: string,\n teamId: string,\n channelId: string,\n {\n lastViewedAt,\n prevUnreadMentions,\n newUnreadMentions,\n prevUnreadReplies,\n newUnreadReplies,\n }: {\n lastViewedAt: number;\n prevUnreadMentions: number;\n newUnreadMentions: number;\n prevUnreadReplies: number;\n newUnreadReplies: number;\n },\n): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const channel = getChannel(state, channelId);\n const thread = getThreadSelector(state, threadId);\n\n return dispatch({\n type: ThreadTypes.READ_CHANGED_THREAD,\n data: {\n id: threadId,\n teamId,\n channelId,\n lastViewedAt,\n prevUnreadMentions,\n newUnreadMentions,\n prevUnreadReplies,\n newUnreadReplies,\n channelType: channel?.type,\n isUrgent: thread?.is_urgent,\n },\n });\n };\n}\n\nexport function handleFollowChanged(dispatch: DispatchFunc, threadId: string, teamId: string, following: boolean) {\n dispatch({\n type: ThreadTypes.FOLLOW_CHANGED_THREAD,\n data: {\n id: threadId,\n team_id: teamId,\n following,\n },\n });\n}\n\nexport function setThreadFollow(userId: string, teamId: string, threadId: string, newState: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n handleFollowChanged(dispatch, threadId, teamId, newState);\n\n try {\n await Client4.updateThreadFollowForUser(userId, teamId, threadId, newState);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n return {};\n };\n}\n\nexport function handleAllThreadsInChannelMarkedRead(channelId: string, lastViewedAt: number): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n\n const channel = getChannel(state, channelId);\n if (channel == null) {\n return {data: false};\n }\n\n const teamId = channel.team_id;\n const threadsInChannel = getThreadsInChannel(state, channelId);\n\n const actions = [];\n for (const thread of threadsInChannel) {\n actions.push({\n type: ThreadTypes.READ_CHANGED_THREAD,\n data: {\n id: thread.id,\n channelId,\n teamId,\n lastViewedAt,\n newUnreadMentions: 0,\n newUnreadReplies: 0,\n isUrgent: thread.is_urgent,\n },\n });\n }\n\n dispatch(batchActions(actions));\n\n return {data: true};\n };\n}\n\nexport function decrementThreadCounts(post: ExtendedPost): ActionFunc {\n return (dispatch, getState) => {\n const state = getState();\n const thread = getThreadSelector(state, post.id);\n\n if (!thread || (!thread.unread_replies && !thread.unread_mentions)) {\n return {data: false};\n }\n\n const channel = getChannel(state, post.channel_id);\n const teamId = channel?.team_id || getCurrentTeamId(state);\n\n if (channel) {\n dispatch({\n type: ThreadTypes.DECREMENT_THREAD_COUNTS,\n teamId,\n replies: thread.unread_replies,\n mentions: thread.unread_mentions,\n channelType: channel.type,\n });\n }\n\n return {data: true};\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {AnyAction} from 'redux';\nimport {batchActions} from 'redux-batched-actions';\n\nimport type {UserAutocomplete} from '@mattermost/types/autocomplete';\nimport type {Channel} from '@mattermost/types/channels';\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {UserProfile, UserStatus, GetFilteredUsersStatsOpts, UsersStats, UserCustomStatus, UserAccessToken} from '@mattermost/types/users';\n\nimport {UserTypes, AdminTypes} from 'mattermost-redux/action_types';\nimport {logError} from 'mattermost-redux/actions/errors';\nimport {setServerVersion, getClientConfig, getLicenseConfig} from 'mattermost-redux/actions/general';\nimport {bindClientFunc, forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';\nimport {getServerLimits} from 'mattermost-redux/actions/limits';\nimport {getMyPreferences} from 'mattermost-redux/actions/preferences';\nimport {loadRolesIfNeeded} from 'mattermost-redux/actions/roles';\nimport {getMyTeams, getMyTeamMembers, getMyTeamUnreads} from 'mattermost-redux/actions/teams';\nimport {Client4} from 'mattermost-redux/client';\nimport {General} from 'mattermost-redux/constants';\nimport {getIsUserStatusesConfigEnabled} from 'mattermost-redux/selectors/entities/common';\nimport {getServerVersion} from 'mattermost-redux/selectors/entities/general';\nimport {isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId, getUser as selectUser, getUsers, getUsersByUsername} from 'mattermost-redux/selectors/entities/users';\nimport type {ActionFuncAsync} from 'mattermost-redux/types/actions';\nimport {DelayedDataLoader} from 'mattermost-redux/utils/data_loader';\nimport {isMinimumServerVersion} from 'mattermost-redux/utils/helpers';\n\n// Delay requests for missing profiles for up to 100ms to allow for simulataneous requests to be batched\nconst missingProfilesWait = 100;\n\nexport const maxUserIdsPerProfilesRequest = 100; // users ids per 'users/ids' request\nexport const maxUserIdsPerStatusesRequest = 200; // users ids per 'users/status/ids'request\n\nexport function generateMfaSecret(userId: string) {\n return bindClientFunc({\n clientFunc: Client4.generateMfaSecret,\n params: [\n userId,\n ],\n });\n}\n\nexport function createUser(user: UserProfile, token: string, inviteId: string, redirect: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let created;\n\n try {\n created = await Client4.createUser(user, token, inviteId, redirect);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const profiles: {\n [userId: string]: UserProfile;\n } = {\n [created.id]: created,\n };\n dispatch({type: UserTypes.RECEIVED_PROFILES, data: profiles});\n\n return {data: created};\n };\n}\n\nexport function loadMe(): ActionFuncAsync {\n return async (dispatch, getState) => {\n // Sometimes the server version is set in one or the other\n const serverVersion = getState().entities.general.serverVersion || Client4.getServerVersion();\n dispatch(setServerVersion(serverVersion));\n\n try {\n await Promise.all([\n dispatch(getClientConfig()),\n dispatch(getLicenseConfig()),\n dispatch(getMe()),\n dispatch(getMyPreferences()),\n dispatch(getMyTeams()),\n dispatch(getMyTeamMembers()),\n ]);\n\n const isCollapsedThreads = isCollapsedThreadsEnabled(getState());\n await dispatch(getMyTeamUnreads(isCollapsedThreads));\n\n await dispatch(getServerLimits());\n } catch (error) {\n dispatch(logError(error as ServerError));\n return {error: error as ServerError};\n }\n\n return {data: true};\n };\n}\n\nexport function logout(): ActionFuncAsync {\n return async (dispatch) => {\n dispatch({type: UserTypes.LOGOUT_REQUEST, data: null});\n\n try {\n await Client4.logout();\n } catch (error) {\n // nothing to do here\n }\n\n dispatch({type: UserTypes.LOGOUT_SUCCESS, data: null});\n\n return {data: true};\n };\n}\n\nexport function getTotalUsersStats() {\n return bindClientFunc({\n clientFunc: Client4.getTotalUsersStats,\n onSuccess: UserTypes.RECEIVED_USER_STATS,\n });\n}\n\nexport function getFilteredUsersStats(options: GetFilteredUsersStatsOpts = {}, updateGlobalState = true): ActionFuncAsync {\n return async (dispatch, getState) => {\n let stats: UsersStats;\n try {\n stats = await Client4.getFilteredUsersStats(options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n if (updateGlobalState) {\n dispatch({\n type: UserTypes.RECEIVED_FILTERED_USER_STATS,\n data: stats,\n });\n }\n\n return {data: stats};\n };\n}\n\nexport function getProfiles(page = 0, perPage: number = General.PROFILE_CHUNK_SIZE, options: any = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles: UserProfile[];\n\n try {\n profiles = await Client4.getProfiles(page, perPage, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n });\n\n return {data: profiles};\n };\n}\n\nexport function getMissingProfilesByIds(userIds: string[]): ActionFuncAsync> {\n return async (dispatch, getState, {loaders}: any) => {\n if (!loaders.missingStatusLoader) {\n loaders.missingStatusLoader = new DelayedDataLoader({\n fetchBatch: (userIds) => dispatch(getStatusesByIds(userIds)),\n maxBatchSize: maxUserIdsPerProfilesRequest,\n wait: missingProfilesWait,\n });\n }\n\n if (!loaders.missingProfileLoader) {\n loaders.missingProfileLoader = new DelayedDataLoader({\n fetchBatch: (userIds) => dispatch(getProfilesByIds(userIds)),\n maxBatchSize: maxUserIdsPerProfilesRequest,\n wait: missingProfilesWait,\n });\n }\n\n const state = getState();\n\n const missingIds = userIds.filter((id) => !selectUser(state, id));\n\n if (missingIds.length > 0) {\n if (getIsUserStatusesConfigEnabled(state)) {\n loaders.missingStatusLoader.queue(missingIds);\n }\n\n await loaders.missingProfileLoader.queueAndWait(missingIds);\n }\n\n return {\n data: missingIds,\n };\n };\n}\n\nexport function getMissingProfilesByUsernames(usernames: string[]): ActionFuncAsync> {\n return async (dispatch, getState, {loaders}: any) => {\n if (!loaders.userByUsernameLoader) {\n loaders.userByUsernameLoader = new DelayedDataLoader({\n fetchBatch: (usernames) => dispatch(getProfilesByUsernames(usernames)),\n maxBatchSize: maxUserIdsPerProfilesRequest,\n wait: missingProfilesWait,\n });\n }\n\n const usersByUsername = getUsersByUsername(getState());\n\n const missingUsernames = usernames.filter((username) => !usersByUsername[username]);\n\n if (missingUsernames.length > 0) {\n await loaders.userByUsernameLoader.queueAndWait(missingUsernames);\n }\n\n return {data: missingUsernames};\n };\n}\n\nexport function getProfilesByIds(userIds: string[], options?: any): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles: UserProfile[];\n\n try {\n profiles = await Client4.getProfilesByIds(userIds, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n });\n\n return {data: profiles};\n };\n}\n\nexport function getProfilesByUsernames(usernames: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n\n try {\n profiles = await Client4.getProfilesByUsernames(usernames);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n });\n\n return {data: profiles};\n };\n}\n\nexport function getProfilesInTeam(teamId: string, page: number, perPage: number = General.PROFILE_CHUNK_SIZE, sort = '', options: any = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n\n try {\n profiles = await Client4.getProfilesInTeam(teamId, page, perPage, sort, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_TEAM,\n data: profiles,\n id: teamId,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n ]));\n\n return {data: profiles};\n };\n}\n\nexport function getProfilesNotInTeam(teamId: string, groupConstrained: boolean, page: number, perPage: number = General.PROFILE_CHUNK_SIZE): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n try {\n profiles = await Client4.getProfilesNotInTeam(teamId, groupConstrained, page, perPage);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const receivedProfilesListActionType = groupConstrained ? UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_TEAM_AND_REPLACE : UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_TEAM;\n\n dispatch(batchActions([\n {\n type: receivedProfilesListActionType,\n data: profiles,\n id: teamId,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n ]));\n\n return {data: profiles};\n };\n}\n\nexport function getProfilesWithoutTeam(page: number, perPage: number = General.PROFILE_CHUNK_SIZE, options: any = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles = null;\n try {\n profiles = await Client4.getProfilesWithoutTeam(page, perPage, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_WITHOUT_TEAM,\n data: profiles,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n ]));\n\n return {data: profiles};\n };\n}\n\nexport enum ProfilesInChannelSortBy {\n None = '',\n Admin = 'admin',\n}\n\nexport function getProfilesInChannel(channelId: string, page: number, perPage: number = General.PROFILE_CHUNK_SIZE, sort = '', options: {active?: boolean} = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n\n try {\n profiles = await Client4.getProfilesInChannel(channelId, page, perPage, sort, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_CHANNEL,\n data: profiles,\n id: channelId,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n ]));\n\n return {data: profiles};\n };\n}\n\nexport function batchGetProfilesInChannel(channelId: string): ActionFuncAsync> {\n return async (dispatch, getState, {loaders}: any) => {\n if (!loaders.profilesInChannelLoader) {\n loaders.profilesInChannelLoader = new DelayedDataLoader({\n fetchBatch: (channelIds) => dispatch(getProfilesInChannel(channelIds[0], 0)),\n maxBatchSize: 1,\n wait: missingProfilesWait,\n });\n }\n\n await loaders.profilesInChannelLoader.queueAndWait([channelId]);\n return {};\n };\n}\n\nexport function getProfilesInGroupChannels(channelsIds: string[]): ActionFuncAsync {\n return async (dispatch, getState) => {\n let channelProfiles;\n\n try {\n channelProfiles = await Client4.getProfilesInGroupChannels(channelsIds.slice(0, General.MAX_GROUP_CHANNELS_FOR_PROFILES));\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [];\n for (const channelId in channelProfiles) {\n if (Object.hasOwn(channelProfiles, channelId)) {\n const profiles = channelProfiles[channelId];\n\n actions.push(\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_CHANNEL,\n data: profiles,\n id: channelId,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n );\n }\n }\n\n dispatch(batchActions(actions));\n\n return {data: channelProfiles};\n };\n}\n\nexport function getProfilesNotInChannel(teamId: string, channelId: string, groupConstrained: boolean, page: number, perPage: number = General.PROFILE_CHUNK_SIZE): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n\n try {\n profiles = await Client4.getProfilesNotInChannel(teamId, channelId, groupConstrained, page, perPage);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const receivedProfilesListActionType = groupConstrained ? UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL_AND_REPLACE : UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL;\n\n dispatch(batchActions([\n {\n type: receivedProfilesListActionType,\n data: profiles,\n id: channelId,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n ]));\n\n return {data: profiles};\n };\n}\n\nexport function getMe(): ActionFuncAsync {\n return async (dispatch) => {\n const getMeFunc = bindClientFunc({\n clientFunc: Client4.getMe,\n onSuccess: UserTypes.RECEIVED_ME,\n });\n const me = await dispatch(getMeFunc);\n\n if ('error' in me) {\n return me;\n }\n if ('data' in me) {\n dispatch(loadRolesIfNeeded(me.data!.roles.split(' ')));\n }\n return me;\n };\n}\n\nexport function updateMyTermsOfServiceStatus(termsOfServiceId: string, accepted: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n const response = await dispatch(bindClientFunc({\n clientFunc: Client4.updateMyTermsOfServiceStatus,\n params: [\n termsOfServiceId,\n accepted,\n ],\n }));\n\n if ('data' in response) {\n if (accepted) {\n dispatch({\n type: UserTypes.RECEIVED_TERMS_OF_SERVICE_STATUS,\n data: {\n terms_of_service_create_at: new Date().getTime(),\n terms_of_service_id: accepted ? termsOfServiceId : null,\n user_id: getCurrentUserId(getState()),\n },\n });\n }\n\n return {\n data: response.data,\n };\n }\n\n return {\n error: response.error,\n };\n };\n}\n\nexport function getProfilesInGroup(groupId: string, page = 0, perPage: number = General.PROFILE_CHUNK_SIZE, sort = ''): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n\n try {\n profiles = await Client4.getProfilesInGroup(groupId, page, perPage, sort);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_GROUP,\n data: profiles,\n id: groupId,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n ]));\n\n return {data: profiles};\n };\n}\n\nexport function getProfilesNotInGroup(groupId: string, page = 0, perPage: number = General.PROFILE_CHUNK_SIZE): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n\n try {\n profiles = await Client4.getProfilesNotInGroup(groupId, page, perPage);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_GROUP,\n data: profiles,\n id: groupId,\n },\n {\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: profiles,\n },\n ]));\n\n return {data: profiles};\n };\n}\n\nexport function getTermsOfService() {\n return bindClientFunc({\n clientFunc: Client4.getTermsOfService,\n });\n}\n\nexport function promoteGuestToUser(userId: string) {\n return bindClientFunc({\n clientFunc: Client4.promoteGuestToUser,\n params: [userId],\n });\n}\n\nexport function demoteUserToGuest(userId: string) {\n return bindClientFunc({\n clientFunc: Client4.demoteUserToGuest,\n params: [userId],\n });\n}\n\nexport function createTermsOfService(text: string) {\n return bindClientFunc({\n clientFunc: Client4.createTermsOfService,\n params: [\n text,\n ],\n });\n}\n\nexport function getUser(id: string) {\n return bindClientFunc({\n clientFunc: Client4.getUser,\n onSuccess: UserTypes.RECEIVED_PROFILE,\n params: [\n id,\n ],\n });\n}\n\nexport function getUserByUsername(username: string) {\n return bindClientFunc({\n clientFunc: Client4.getUserByUsername,\n onSuccess: UserTypes.RECEIVED_PROFILE,\n params: [\n username,\n ],\n });\n}\n\nexport function getUserByEmail(email: string) {\n return bindClientFunc({\n clientFunc: Client4.getUserByEmail,\n onSuccess: UserTypes.RECEIVED_PROFILE,\n params: [\n email,\n ],\n });\n}\n\nexport function getStatusesByIds(userIds: Array): ActionFuncAsync {\n return async (dispatch, getState) => {\n if (!userIds || userIds.length === 0) {\n return {data: []};\n }\n\n let receivedStatuses: UserStatus[];\n try {\n receivedStatuses = await Client4.getStatusesByIds(userIds);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const statuses: Record = {};\n const dndEndTimes: Record = {};\n const isManualStatuses: Record = {};\n const lastActivity: Record = {};\n\n for (const receivedStatus of receivedStatuses) {\n statuses[receivedStatus.user_id] = receivedStatus?.status ?? '';\n dndEndTimes[receivedStatus.user_id] = receivedStatus?.dnd_end_time ?? 0;\n isManualStatuses[receivedStatus.user_id] = receivedStatus?.manual ?? false;\n lastActivity[receivedStatus.user_id] = receivedStatus?.last_activity_at ?? 0;\n }\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_STATUSES,\n data: statuses,\n },\n {\n type: UserTypes.RECEIVED_DND_END_TIMES,\n data: dndEndTimes,\n },\n {\n type: UserTypes.RECEIVED_STATUSES_IS_MANUAL,\n data: isManualStatuses,\n },\n {\n type: UserTypes.RECEIVED_LAST_ACTIVITIES,\n data: lastActivity,\n },\n ],\n 'BATCHING_STATUSES',\n ));\n\n return {data: receivedStatuses};\n };\n}\n\nexport function setStatus(status: UserStatus): ActionFuncAsync {\n return async (dispatch, getState) => {\n let recievedStatus: UserStatus;\n try {\n recievedStatus = await Client4.updateStatus(status);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const updatedStatus = {[recievedStatus.user_id]: recievedStatus.status};\n const dndEndTimes = {[recievedStatus.user_id]: recievedStatus?.dnd_end_time ?? 0};\n const isManualStatus = {[recievedStatus.user_id]: recievedStatus?.manual ?? false};\n const lastActivity = {[recievedStatus.user_id]: recievedStatus?.last_activity_at ?? 0};\n\n dispatch(batchActions([\n {\n type: UserTypes.RECEIVED_STATUSES,\n data: updatedStatus,\n },\n {\n type: UserTypes.RECEIVED_DND_END_TIMES,\n data: dndEndTimes,\n },\n {\n type: UserTypes.RECEIVED_STATUSES_IS_MANUAL,\n data: isManualStatus,\n },\n {\n type: UserTypes.RECEIVED_LAST_ACTIVITIES,\n data: lastActivity,\n },\n ], 'BATCHING_STATUS'));\n\n return {data: recievedStatus};\n };\n}\n\nexport function setCustomStatus(customStatus: UserCustomStatus) {\n return bindClientFunc({\n clientFunc: Client4.updateCustomStatus,\n params: [\n customStatus,\n ],\n });\n}\n\nexport function unsetCustomStatus() {\n return bindClientFunc({\n clientFunc: Client4.unsetCustomStatus,\n });\n}\n\nexport function removeRecentCustomStatus(customStatus: UserCustomStatus) {\n return bindClientFunc({\n clientFunc: Client4.removeRecentCustomStatus,\n params: [\n customStatus,\n ],\n });\n}\n\nexport function getSessions(userId: string) {\n return bindClientFunc({\n clientFunc: Client4.getSessions,\n onSuccess: UserTypes.RECEIVED_SESSIONS,\n params: [\n userId,\n ],\n });\n}\n\nexport function revokeSession(userId: string, sessionId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.revokeSession(userId, sessionId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: UserTypes.RECEIVED_REVOKED_SESSION,\n sessionId,\n data: null,\n });\n\n return {data: true};\n };\n}\n\nexport function revokeAllSessionsForUser(userId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.revokeAllSessionsForUser(userId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n const data = {isCurrentUser: userId === getCurrentUserId(getState())};\n dispatch(batchActions([\n {\n type: UserTypes.REVOKE_ALL_USER_SESSIONS_SUCCESS,\n data,\n },\n ]));\n\n return {data: true};\n };\n}\n\nexport function revokeSessionsForAllUsers(): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.revokeSessionsForAllUsers();\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error: error as ServerError};\n }\n\n dispatch({\n type: UserTypes.REVOKE_SESSIONS_FOR_ALL_USERS_SUCCESS,\n data: null,\n });\n\n return {data: true};\n };\n}\n\nexport function getUserAudits(userId: string, page = 0, perPage: number = General.AUDITS_CHUNK_SIZE) {\n return bindClientFunc({\n clientFunc: Client4.getUserAudits,\n onSuccess: UserTypes.RECEIVED_AUDITS,\n params: [\n userId,\n page,\n perPage,\n ],\n });\n}\n\nexport function autocompleteUsers(term: string, teamId = '', channelId = '', options?: {\n limit: number;\n}): ActionFuncAsync {\n return async (dispatch, getState) => {\n dispatch({type: UserTypes.AUTOCOMPLETE_USERS_REQUEST, data: null});\n let data;\n try {\n data = await Client4.autocompleteUsers(term, teamId, channelId, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch({type: UserTypes.AUTOCOMPLETE_USERS_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n let users = [...data.users];\n if (data.out_of_channel) {\n users = [...users, ...data.out_of_channel];\n }\n const actions: AnyAction[] = [{\n type: UserTypes.RECEIVED_PROFILES_LIST,\n data: users,\n }, {\n type: UserTypes.AUTOCOMPLETE_USERS_SUCCESS,\n }];\n\n if (channelId) {\n actions.push(\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_CHANNEL,\n data: data.users,\n id: channelId,\n },\n );\n actions.push(\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL,\n data: data.out_of_channel || [],\n id: channelId,\n },\n );\n }\n\n if (teamId) {\n actions.push(\n {\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_TEAM,\n data: users,\n id: teamId,\n },\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data};\n };\n}\n\nexport function searchProfiles(term: string, options: any = {}): ActionFuncAsync {\n return async (dispatch, getState) => {\n let profiles;\n try {\n profiles = await Client4.searchUsers(term, options);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [{type: UserTypes.RECEIVED_PROFILES_LIST, data: profiles}];\n\n if (options.in_channel_id) {\n actions.push({\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_CHANNEL,\n data: profiles,\n id: options.in_channel_id,\n });\n }\n\n if (options.not_in_channel_id) {\n actions.push({\n type: UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL,\n data: profiles,\n id: options.not_in_channel_id,\n });\n }\n\n if (options.team_id) {\n actions.push({\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_TEAM,\n data: profiles,\n id: options.team_id,\n });\n }\n\n if (options.not_in_team_id) {\n actions.push({\n type: UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_TEAM,\n data: profiles,\n id: options.not_in_team_id,\n });\n }\n\n if (options.in_group_id) {\n actions.push({\n type: UserTypes.RECEIVED_PROFILES_LIST_IN_GROUP,\n data: profiles,\n id: options.in_group_id,\n });\n }\n\n if (options.not_in_group_id) {\n actions.push({\n type: UserTypes.RECEIVED_PROFILES_LIST_NOT_IN_GROUP,\n data: profiles,\n id: options.not_in_group_id,\n });\n }\n\n dispatch(batchActions(actions));\n\n return {data: profiles};\n };\n}\n\nexport function updateMe(user: Partial): ActionFuncAsync {\n return async (dispatch) => {\n dispatch({type: UserTypes.UPDATE_ME_REQUEST, data: null});\n\n let data;\n try {\n data = await Client4.patchMe(user);\n } catch (error) {\n dispatch({type: UserTypes.UPDATE_ME_FAILURE, error});\n dispatch(logError(error));\n return {error};\n }\n\n dispatch(batchActions([\n {type: UserTypes.RECEIVED_ME, data},\n {type: UserTypes.UPDATE_ME_SUCCESS},\n ]));\n dispatch(loadRolesIfNeeded(data.roles.split(' ')));\n\n return {data};\n };\n}\n\nexport function saveCustomProfileAttribute(userID: string, attributeID: string, attributeValue: string): ActionFuncAsync> {\n return async (dispatch) => {\n try {\n const values = {[attributeID]: attributeValue.trim()};\n const data = await Client4.updateCustomProfileAttributeValues(values);\n return {data};\n } catch (error) {\n dispatch(logError(error));\n return {error};\n }\n };\n}\n\nexport function patchUser(user: UserProfile): ActionFuncAsync {\n return async (dispatch) => {\n let data: UserProfile;\n try {\n data = await Client4.patchUser(user);\n } catch (error) {\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({type: UserTypes.RECEIVED_PROFILE, data});\n\n return {data};\n };\n}\n\nexport function updateUserRoles(userId: string, roles: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.updateUserRoles(userId, roles);\n } catch (error) {\n return {error};\n }\n\n const profile = getState().entities.users.profiles[userId];\n if (profile) {\n dispatch({type: UserTypes.RECEIVED_PROFILE, data: {...profile, roles}});\n }\n\n return {data: true};\n };\n}\n\nexport function updateUserMfa(userId: string, activate: boolean, code = ''): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.updateUserMfa(userId, activate, code);\n } catch (error) {\n dispatch(logError(error));\n return {error};\n }\n\n const profile = getState().entities.users.profiles[userId];\n if (profile) {\n dispatch({type: UserTypes.RECEIVED_PROFILE, data: {...profile, mfa_active: activate}});\n }\n\n return {data: true};\n };\n}\n\nexport function updateUserPassword(userId: string, currentPassword: string, newPassword: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.updateUserPassword(userId, currentPassword, newPassword);\n } catch (error) {\n dispatch(logError(error));\n return {error};\n }\n\n const profile = getState().entities.users.profiles[userId];\n if (profile) {\n dispatch({type: UserTypes.RECEIVED_PROFILE, data: {...profile, last_password_update: new Date().getTime()}});\n }\n\n return {data: true};\n };\n}\n\nexport function updateUserActive(userId: string, active: boolean): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.updateUserActive(userId, active);\n } catch (error) {\n dispatch(logError(error));\n return {error};\n }\n\n const profile = getState().entities.users.profiles[userId];\n if (profile) {\n const deleteAt = active ? 0 : new Date().getTime();\n dispatch({type: UserTypes.RECEIVED_PROFILE, data: {...profile, delete_at: deleteAt}});\n }\n\n return {data: true};\n };\n}\n\nexport function verifyUserEmail(token: string) {\n return bindClientFunc({\n clientFunc: Client4.verifyUserEmail,\n params: [\n token,\n ],\n });\n}\n\nexport function sendVerificationEmail(email: string) {\n return bindClientFunc({\n clientFunc: Client4.sendVerificationEmail,\n params: [\n email,\n ],\n });\n}\n\nexport function resetUserPassword(token: string, newPassword: string) {\n return bindClientFunc({\n clientFunc: Client4.resetUserPassword,\n params: [\n token,\n newPassword,\n ],\n });\n}\n\nexport function sendPasswordResetEmail(email: string) {\n return bindClientFunc({\n clientFunc: Client4.sendPasswordResetEmail,\n params: [\n email,\n ],\n });\n}\n\nexport function setDefaultProfileImage(userId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.setDefaultProfileImage(userId);\n } catch (error) {\n dispatch(logError(error));\n return {error};\n }\n\n const profile = getState().entities.users.profiles[userId];\n if (profile) {\n dispatch({type: UserTypes.RECEIVED_PROFILE, data: {...profile, last_picture_update: 0}});\n }\n\n return {data: true};\n };\n}\n\nexport function uploadProfileImage(userId: string, imageData: any): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.uploadProfileImage(userId, imageData);\n } catch (error) {\n return {error};\n }\n\n const profile = getState().entities.users.profiles[userId];\n if (profile) {\n dispatch({type: UserTypes.RECEIVED_PROFILE, data: {...profile, last_picture_update: new Date().getTime()}});\n }\n\n return {data: true};\n };\n}\n\nexport function switchEmailToOAuth(service: string, email: string, password: string, mfaCode = '') {\n return bindClientFunc({\n clientFunc: Client4.switchEmailToOAuth,\n params: [\n service,\n email,\n password,\n mfaCode,\n ],\n });\n}\n\nexport function switchOAuthToEmail(currentService: string, email: string, password: string) {\n return bindClientFunc({\n clientFunc: Client4.switchOAuthToEmail,\n params: [\n currentService,\n email,\n password,\n ],\n });\n}\n\nexport function switchEmailToLdap(email: string, emailPassword: string, ldapId: string, ldapPassword: string, mfaCode = '') {\n return bindClientFunc({\n clientFunc: Client4.switchEmailToLdap,\n params: [\n email,\n emailPassword,\n ldapId,\n ldapPassword,\n mfaCode,\n ],\n });\n}\n\nexport function switchLdapToEmail(ldapPassword: string, email: string, emailPassword: string, mfaCode = '') {\n return bindClientFunc({\n clientFunc: Client4.switchLdapToEmail,\n params: [\n ldapPassword,\n email,\n emailPassword,\n mfaCode,\n ],\n });\n}\n\nexport function createUserAccessToken(userId: string, description: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n\n try {\n data = await Client4.createUserAccessToken(userId, description);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [{\n type: AdminTypes.RECEIVED_USER_ACCESS_TOKEN,\n data: {...data,\n token: '',\n },\n }];\n\n const {currentUserId} = getState().entities.users;\n if (userId === currentUserId) {\n actions.push(\n {\n type: UserTypes.RECEIVED_MY_USER_ACCESS_TOKEN,\n data: {...data, token: ''},\n },\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data};\n };\n}\n\nexport function getUserAccessToken(tokenId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getUserAccessToken(tokenId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [{\n type: AdminTypes.RECEIVED_USER_ACCESS_TOKEN,\n data,\n }];\n\n const {currentUserId} = getState().entities.users;\n if (data.user_id === currentUserId) {\n actions.push(\n {\n type: UserTypes.RECEIVED_MY_USER_ACCESS_TOKEN,\n data,\n },\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data};\n };\n}\n\nexport function getUserAccessTokensForUser(userId: string, page = 0, perPage: number = General.PROFILE_CHUNK_SIZE): ActionFuncAsync {\n return async (dispatch, getState) => {\n let data;\n try {\n data = await Client4.getUserAccessTokensForUser(userId, page, perPage);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n const actions: AnyAction[] = [{\n type: AdminTypes.RECEIVED_USER_ACCESS_TOKENS_FOR_USER,\n data,\n userId,\n }];\n\n const {currentUserId} = getState().entities.users;\n if (userId === currentUserId) {\n actions.push(\n {\n type: UserTypes.RECEIVED_MY_USER_ACCESS_TOKENS,\n data,\n },\n );\n }\n\n dispatch(batchActions(actions));\n\n return {data};\n };\n}\n\nexport function revokeUserAccessToken(tokenId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.revokeUserAccessToken(tokenId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: UserTypes.REVOKED_USER_ACCESS_TOKEN,\n data: tokenId,\n });\n\n return {data: true};\n };\n}\n\nexport function disableUserAccessToken(tokenId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.disableUserAccessToken(tokenId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: UserTypes.DISABLED_USER_ACCESS_TOKEN,\n data: tokenId,\n });\n\n return {data: true};\n };\n}\n\nexport function enableUserAccessToken(tokenId: string): ActionFuncAsync {\n return async (dispatch, getState) => {\n try {\n await Client4.enableUserAccessToken(tokenId);\n } catch (error) {\n forceLogoutIfNecessary(error, dispatch, getState);\n dispatch(logError(error));\n return {error};\n }\n\n dispatch({\n type: UserTypes.ENABLED_USER_ACCESS_TOKEN,\n data: tokenId,\n });\n\n return {data: true};\n };\n}\n\nexport function getKnownUsers() {\n return bindClientFunc({\n clientFunc: Client4.getKnownUsers,\n });\n}\n\nexport function clearUserAccessTokens(): ActionFuncAsync {\n return async (dispatch) => {\n dispatch({type: UserTypes.CLEAR_MY_USER_ACCESS_TOKENS, data: null});\n return {data: true};\n };\n}\n\nexport function checkForModifiedUsers(): ActionFuncAsync {\n return async (dispatch, getState) => {\n const state = getState();\n const users = getUsers(state);\n const lastDisconnectAt = state.websocket.lastDisconnectAt;\n const serverVersion = getServerVersion(state);\n\n if (!isMinimumServerVersion(serverVersion, 5, 14)) {\n return {data: true};\n }\n\n await dispatch(getProfilesByIds(Object.keys(users), {since: lastDisconnectAt}));\n return {data: true};\n };\n}\n\nexport default {\n generateMfaSecret,\n logout,\n getProfiles,\n getProfilesByIds,\n getProfilesInTeam,\n getProfilesInChannel,\n getProfilesNotInChannel,\n getUser,\n getMe,\n getUserByUsername,\n getStatusesByIds,\n getSessions,\n getTotalUsersStats,\n revokeSession,\n revokeAllSessionsForUser,\n revokeSessionsForAllUsers,\n getUserAudits,\n searchProfiles,\n updateMe,\n updateUserRoles,\n updateUserMfa,\n updateUserPassword,\n updateUserActive,\n verifyUserEmail,\n sendVerificationEmail,\n resetUserPassword,\n sendPasswordResetEmail,\n uploadProfileImage,\n switchEmailToOAuth,\n switchOAuthToEmail,\n switchEmailToLdap,\n switchLdapToEmail,\n getTermsOfService,\n createTermsOfService,\n updateMyTermsOfServiceStatus,\n createUserAccessToken,\n getUserAccessToken,\n getUserAccessTokensForUser,\n revokeUserAccessToken,\n disableUserAccessToken,\n enableUserAccessToken,\n checkForModifiedUsers,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {\n Client4 as ClientClass4,\n DEFAULT_LIMIT_AFTER,\n DEFAULT_LIMIT_BEFORE,\n} from '@mattermost/client';\n\nconst Client4 = new ClientClass4();\n\nexport {\n Client4,\n DEFAULT_LIMIT_AFTER,\n DEFAULT_LIMIT_BEFORE,\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {CustomEmoji} from '@mattermost/types/emojis';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {IDMappedObjects} from '@mattermost/types/utilities';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {createIdsSelector} from 'mattermost-redux/utils/helpers';\n\nexport const getCustomEmojisEnabled = (state: GlobalState): boolean => {\n return getConfig(state)?.EnableCustomEmoji === 'true';\n};\n\nexport const getCustomEmojis: (state: GlobalState) => IDMappedObjects = createSelector(\n 'getCustomEmojis',\n getCustomEmojisEnabled,\n (state) => state.entities.emojis.customEmoji,\n (customEmojiEnabled, customEmoji) => {\n if (!customEmojiEnabled) {\n return {};\n }\n\n return customEmoji;\n },\n);\n\nexport const getCustomEmojisAsMap: (state: GlobalState) => Map = createSelector(\n 'getCustomEmojisAsMap',\n getCustomEmojis,\n (emojis) => {\n const map = new Map();\n Object.keys(emojis).forEach((key: string) => {\n map.set(key, emojis[key]);\n });\n return map;\n },\n);\n\nexport const getCustomEmojisByName: (state: GlobalState) => Map = createSelector(\n 'getCustomEmojisByName',\n getCustomEmojis,\n (emojis: IDMappedObjects): Map => {\n const map: Map = new Map();\n\n Object.keys(emojis).forEach((key: string) => {\n map.set(emojis[key].name, emojis[key]);\n });\n\n return map;\n },\n);\n\nexport const getCustomEmojiIdsSortedByName: (state: GlobalState) => string[] = createIdsSelector(\n 'getCustomEmojiIdsSortedByName',\n getCustomEmojis,\n (emojis: IDMappedObjects): string[] => {\n return Object.keys(emojis).sort(\n (a: string, b: string): number => emojis[a].name.localeCompare(emojis[b].name),\n );\n },\n);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {FileInfo, FileSearchResultItem} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getCurrentUserLocale} from 'mattermost-redux/selectors/entities/i18n';\nimport {sortFileInfos} from 'mattermost-redux/utils/file_utils';\n\nfunction getAllFiles(state: GlobalState) {\n return state.entities.files.files;\n}\n\nexport function getFile(state: GlobalState, id: string) {\n return state.entities.files.files?.[id];\n}\n\nfunction getAllFilesFromSearch(state: GlobalState) {\n return state.entities.files.filesFromSearch;\n}\n\nexport function getFilesIdsForPost(state: GlobalState, postId: string) {\n if (postId) {\n return state.entities.files.fileIdsByPostId[postId] || [];\n }\n\n return [];\n}\n\nexport function getFilePublicLink(state: GlobalState) {\n return state.entities.files.filePublicLink;\n}\n\nexport function makeGetFilesForPost(): (state: GlobalState, postId: string) => FileInfo[] {\n return createSelector(\n 'makeGetFilesForPost',\n getAllFiles,\n getFilesIdsForPost,\n (state) => getCurrentUserLocale(state),\n (allFiles, fileIdsForPost, locale) => {\n const fileInfos = fileIdsForPost.map((id) => allFiles[id]).filter((id) => Boolean(id));\n\n return sortFileInfos(fileInfos, locale);\n },\n );\n}\n\nexport function makeGetFilesForEditHistory(): (state: GlobalState, editHistoryPost: Post) => FileInfo[] {\n return createSelector(\n 'makeGetFilesForEditHistory',\n (state) => getCurrentUserLocale(state),\n (state: GlobalState, editHistoryPost: Post) => editHistoryPost,\n (userLocal, editHistoryPost) => {\n const fileInfos = editHistoryPost?.metadata?.files ? [...editHistoryPost.metadata.files] : [];\n return sortFileInfos(fileInfos, userLocal);\n },\n );\n}\n\nexport const getSearchFilesResults: (state: GlobalState) => FileSearchResultItem[] = createSelector(\n 'getSearchFilesResults',\n getAllFilesFromSearch,\n (state: GlobalState) => state.entities.search.fileResults,\n (files, fileIds) => {\n if (!fileIds) {\n return [];\n }\n\n return fileIds.map((id) => files[id]);\n },\n);\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Group} from '@mattermost/types/groups';\nimport {GroupSource} from '@mattermost/types/groups';\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getTeam} from 'mattermost-redux/selectors/entities/teams';\nimport type {UserMentionKey} from 'mattermost-redux/selectors/entities/users';\nimport {filterGroupsMatchingTerm, sortGroups} from 'mattermost-redux/utils/group_utils';\n\nimport {getCurrentUserLocale} from './i18n';\n\nconst emptyList: any[] = [];\nconst emptySyncables = {\n teams: [],\n channels: [],\n};\n\nfunction getGroupInfoForIds(groupsSet: Record, groupIds: string[]) {\n const groups: Group[] = [];\n\n for (let i = 0; i < groupIds.length; i++) {\n const id = groupIds[i];\n groups.push(groupsSet[id]);\n }\n\n return groups;\n}\n\nexport function getAllGroups(state: GlobalState) {\n return state.entities.groups.groups;\n}\n\nexport const getAllGroupsByName: (state: GlobalState) => Record = createSelector(\n 'getAllGroupsByName',\n getAllGroups,\n (groups) => {\n const groupsByName: Record = {};\n\n for (const id in groups) {\n if (Object.hasOwn(groups, id)) {\n const group = groups[id];\n groupsByName[group.name] = group;\n }\n }\n\n return groupsByName;\n },\n);\n\nexport function getMyGroupIds(state: GlobalState) {\n return state.entities.groups.myGroups;\n}\n\nexport function getAllGroupStats(state: GlobalState) {\n return state.entities.groups.stats;\n}\n\nexport function getGroupStats(state: GlobalState, id: string) {\n return getAllGroupStats(state)[id] || {};\n}\n\nexport function getGroup(state: GlobalState, id: string) {\n return getAllGroups(state)[id];\n}\n\nexport function getGroupMemberCount(state: GlobalState, id: string) {\n return getGroupStats(state, id).total_member_count;\n}\n\nfunction getGroupSyncables(state: GlobalState, id: string) {\n return state.entities.groups.syncables[id] || emptySyncables;\n}\n\nexport function getGroupTeams(state: GlobalState, id: string) {\n return getGroupSyncables(state, id).teams;\n}\n\nexport function getGroupChannels(state: GlobalState, id: string) {\n return getGroupSyncables(state, id).channels;\n}\n\nexport const getAllCustomGroups: (state: GlobalState) => Group[] = createSelector(\n 'getAllCustomGroups',\n getAllGroups,\n (groups) => {\n return Object.entries(groups).filter((entry) => (entry[1].allow_reference && entry[1].delete_at === 0 && entry[1].source === GroupSource.Custom)).map((entry) => entry[1]);\n },\n);\n\nexport const getGroupsAssociatedToTeamForReference: (state: GlobalState, teamID: string) => Group[] = createSelector(\n 'getGroupsAssociatedToTeamForReference',\n getAllGroups,\n (state: GlobalState, teamID: string) => getTeamGroupIDSet(state, teamID),\n (allGroups, teamGroupIDSet) => {\n return Object.entries(allGroups).filter(([groupID]) => teamGroupIDSet.has(groupID)).filter((entry) => (entry[1].allow_reference && entry[1].delete_at === 0)).map((entry) => entry[1]);\n },\n);\n\nexport const getAssociatedGroupsForReference: (state: GlobalState, teamId: string, channelId?: string) => Group[] = createSelector(\n 'getAssociatedGroupsForReference',\n (state, teamId) => Boolean(getTeam(state, teamId)?.group_constrained),\n (state, _, channelId) => Boolean(getChannel(state, channelId)?.group_constrained),\n getGroupsAssociatedToTeamForReference,\n (state, _, channelId) => (channelId ? getGroupsAssociatedToChannelForReference(state, channelId) : undefined),\n getAllCustomGroups,\n (state) => getAllAssociatedGroupsForReference(state, false),\n (\n teamConstrained,\n channelConstrained,\n groupsFromTeam,\n groupsFromChannel,\n customGroups,\n allGroups,\n ) => {\n if (teamConstrained && channelConstrained) {\n const groupSet = new Set(groupsFromChannel);\n return [...(groupsFromChannel || []), ...(groupsFromTeam.filter((item) => !groupSet.has(item))), ...customGroups];\n }\n\n if (teamConstrained) {\n return [...customGroups, ...groupsFromTeam];\n }\n\n if (channelConstrained) {\n return [...customGroups, ...(groupsFromChannel || [])];\n }\n\n return allGroups;\n },\n);\n\nexport const getAssociatedGroupsByName: (state: GlobalState, teamID: string, channelId: string) => Record = createSelector(\n 'getAssociatedGroupsByName',\n getAssociatedGroupsForReference,\n (groups) => {\n const groupsByName: Record = {};\n\n for (const id in groups) {\n if (Object.hasOwn(groups, id)) {\n const group = groups[id];\n groupsByName[group.name] = group;\n }\n }\n\n return groupsByName;\n },\n);\n\nexport const getAssociatedGroupsForReferenceByMention: (state: GlobalState, teamID: string, channelId?: string) => Map = createSelector(\n 'getAssociatedGroupsForReferenceByMention',\n getAssociatedGroupsForReference,\n (groups) => {\n return new Map(groups.map((group) => [`@${group.name}`, group]));\n },\n);\n\nexport function searchAssociatedGroupsForReferenceLocal(state: GlobalState, term: string, teamId: string, channelId: string): Group[] {\n const groups = getAssociatedGroupsForReference(state, teamId, channelId);\n if (!groups) {\n return emptyList;\n }\n const filteredGroups = filterGroupsMatchingTerm(groups, term);\n return filteredGroups;\n}\n\nconst teamGroupIDs = (state: GlobalState, teamID: string) => state.entities.teams.groupsAssociatedToTeam[teamID]?.ids || [];\n\nconst channelGroupIDs = (state: GlobalState, channelID: string) => state.entities.channels.groupsAssociatedToChannel[channelID]?.ids || [];\n\nconst getTeamGroupIDSet = createSelector(\n 'getTeamGroupIDSet',\n teamGroupIDs,\n (teamIDs) => new Set(teamIDs),\n);\n\nconst getChannelGroupIDSet = createSelector(\n 'getChannelGroupIDSet',\n channelGroupIDs,\n (channelIDs) => new Set(channelIDs),\n);\n\nexport const getMyGroups: (state: GlobalState) => Group[] = createSelector(\n 'getGroupsNotAssociatedToTeam',\n getAllGroups,\n getMyGroupIds,\n (allGroups, myGroupIds) => {\n return sortGroups(getGroupInfoForIds(allGroups, myGroupIds));\n },\n);\n\nexport const getGroupsNotAssociatedToTeam: (state: GlobalState, teamID: string) => Group[] = createSelector(\n 'getGroupsNotAssociatedToTeam',\n getAllGroups,\n (state: GlobalState, teamID: string) => getTeamGroupIDSet(state, teamID),\n (allGroups, teamGroupIDSet) => {\n return Object.entries(allGroups).filter(([groupID, group]) => !teamGroupIDSet.has(groupID) && group.source === GroupSource.Ldap).map((entry) => entry[1]);\n },\n);\n\nexport const getGroupsAssociatedToTeam: (state: GlobalState, teamID: string) => Group[] = createSelector(\n 'getGroupsAssociatedToTeam',\n getAllGroups,\n (state: GlobalState, teamID: string) => getTeamGroupIDSet(state, teamID),\n (allGroups, teamGroupIDSet) => {\n return Object.entries(allGroups).filter(([groupID]) => teamGroupIDSet.has(groupID)).map((entry) => entry[1]);\n },\n);\n\nexport const getGroupsNotAssociatedToChannel: (state: GlobalState, channelID: string, teamID: string) => Group[] = createSelector(\n 'getGroupsNotAssociatedToChannel',\n getAllGroups,\n (state: GlobalState, channelID: string) => getChannelGroupIDSet(state, channelID),\n (state: GlobalState, channelID: string, teamID: string) => getTeam(state, teamID),\n (state: GlobalState, channelID: string, teamID: string) => getGroupsAssociatedToTeam(state, teamID),\n (allGroups, channelGroupIDSet, team, teamGroups) => {\n let result = Object.values(allGroups).filter((group) => !channelGroupIDSet.has(group.id) && group.source === GroupSource.Ldap);\n if (team?.group_constrained) {\n const gids = teamGroups.map((group) => group.id);\n result = result.filter((group) => gids?.includes(group.id));\n }\n return result;\n },\n);\n\nexport const getGroupsAssociatedToChannel: (state: GlobalState, channelID: string) => Group[] = createSelector(\n 'getGroupsAssociatedToChannel',\n getAllGroups,\n (state: GlobalState, channelID: string) => getChannelGroupIDSet(state, channelID),\n (allGroups, channelGroupIDSet) => {\n return Object.entries(allGroups).filter(([groupID]) => channelGroupIDSet.has(groupID)).map((entry) => entry[1]);\n },\n);\n\nexport const getGroupsAssociatedToChannelForReference: (state: GlobalState, channelID: string) => Group[] = createSelector(\n 'getGroupsAssociatedToChannelForReference',\n getAllGroups,\n (state: GlobalState, channelID: string) => getChannelGroupIDSet(state, channelID),\n (allGroups, channelGroupIDSet) => {\n return Object.entries(allGroups).filter(([groupID]) => channelGroupIDSet.has(groupID)).filter((entry) => (entry[1].allow_reference && entry[1].delete_at === 0)).map((entry) => entry[1]);\n },\n);\n\nexport const makeGetAllAssociatedGroupsForReference = () => {\n return createSelector(\n 'makeGetAllAssociatedGroupsForReference',\n (state: GlobalState) => getAllGroups(state),\n (state: GlobalState) => getCurrentUserLocale(state),\n (_: GlobalState, includeArchived: boolean) => includeArchived,\n (allGroups, locale, includeArchived) => {\n const groups = Object.entries(allGroups).filter((entry) => {\n if (includeArchived) {\n return entry[1].allow_reference;\n }\n return entry[1].allow_reference && entry[1].delete_at === 0;\n }).map((entry) => entry[1]);\n return sortGroups(groups, locale);\n },\n );\n};\n\nconst getAllAssociatedGroupsForReference = makeGetAllAssociatedGroupsForReference();\n\nexport const getAllGroupsForReferenceByName: (state: GlobalState) => Record = createSelector(\n 'getAllGroupsForReferenceByName',\n (state: GlobalState) => getAllAssociatedGroupsForReference(state, false),\n (groups) => {\n const groupsByName: Record = {};\n\n for (const id in groups) {\n if (Object.hasOwn(groups, id)) {\n const group = groups[id];\n groupsByName[group.name] = group;\n }\n }\n\n return groupsByName;\n },\n);\n\nexport const makeGetMyAllowReferencedGroups = () => {\n return createSelector(\n 'makeGetMyAllowReferencedGroups',\n (state: GlobalState) => getMyGroups(state),\n (state: GlobalState) => getCurrentUserLocale(state),\n (_: GlobalState, includeArchived: boolean) => includeArchived,\n (myGroups, locale, includeArchived) => {\n const groups = myGroups.filter((group) => {\n if (includeArchived) {\n return group.allow_reference;\n }\n\n return group.allow_reference && group.delete_at === 0;\n });\n\n return sortGroups(groups, locale);\n },\n );\n};\n\nexport const getMyGroupsAssociatedToChannelForReference: (state: GlobalState, teamId: string, channelId: string) => Group[] = createSelector(\n 'getMyGroupsAssociatedToChannelForReference',\n getMyGroups,\n getAssociatedGroupsByName,\n (myGroups, groups) => {\n return myGroups.filter((group) => group.allow_reference && group.delete_at === 0 && groups[group.name]);\n },\n);\n\nconst getMyAllowReferencedGroups = makeGetMyAllowReferencedGroups();\n\nexport const getMyGroupMentionKeys: (state: GlobalState, includeArchived: boolean) => UserMentionKey[] = createSelector(\n 'getMyGroupMentionKeys',\n (state: GlobalState, includeArchived: boolean) => getMyAllowReferencedGroups(state, includeArchived),\n (groups: Group[]) => {\n const keys: UserMentionKey[] = [];\n groups.forEach((group) => keys.push({key: `@${group.name}`}));\n return keys;\n },\n);\n\nexport const getMyGroupMentionKeysForChannel: (state: GlobalState, teamId: string, channelId: string) => UserMentionKey[] = createSelector(\n 'getMyGroupMentionKeysForChannel',\n getMyGroupsAssociatedToChannelForReference,\n (groups: Group[]) => {\n const keys: UserMentionKey[] = [];\n groups.forEach((group) => keys.push({key: `@${group.name}`}));\n return keys;\n },\n);\n\nconst searchGetAllAssociatedGroupsForReference = makeGetAllAssociatedGroupsForReference();\n\nexport const searchAllowReferencedGroups: (state: GlobalState, term: string, includeArchived: boolean) => Group[] = createSelector(\n 'searchAllowReferencedGroups',\n (state: GlobalState, term: string) => term,\n (state: GlobalState, term: string, includeArchived: boolean) => searchGetAllAssociatedGroupsForReference(state, includeArchived),\n (term, groups) => {\n return filterGroupsMatchingTerm(groups, term);\n },\n);\n\nconst searchGetMyAllowReferencedGroups = makeGetMyAllowReferencedGroups();\n\nexport const searchMyAllowReferencedGroups: (state: GlobalState, term: string, includeArchived: boolean) => Group[] = createSelector(\n 'searchMyAllowReferencedGroups',\n (state: GlobalState, term: string) => term,\n (state: GlobalState, term: string, includeArchived: boolean) => searchGetMyAllowReferencedGroups(state, includeArchived),\n (term, groups) => {\n return filterGroupsMatchingTerm(groups, term);\n },\n);\n\nexport const isMyGroup: (state: GlobalState, groupId: string) => boolean = createSelector(\n 'isMyGroup',\n getMyGroupIds,\n (state: GlobalState, groupId: string) => groupId,\n (myGroupIDs: string[], groupId: string) => {\n let isMyGroup = false;\n myGroupIDs.forEach((myGroupId) => {\n if (myGroupId === groupId) {\n isMyGroup = true;\n }\n });\n return isMyGroup;\n },\n);\n\nexport const getArchivedGroups: (state: GlobalState) => Group[] = createSelector(\n 'getArchivedGroups',\n (state: GlobalState) => getAllGroups(state),\n (state: GlobalState) => getCurrentUserLocale(state),\n (allGroups, locale) => {\n const groups = Object.entries(allGroups).filter((entry) => {\n return entry[1].allow_reference && entry[1].delete_at > 0;\n }).map((entry) => entry[1]);\n return sortGroups(groups, locale);\n },\n);\n\nexport const searchArchivedGroups: (state: GlobalState, term: string) => Group[] = createSelector(\n 'searchArchivedGroups',\n getArchivedGroups,\n (state: GlobalState, term: string) => term,\n (groups, term) => {\n return filterGroupsMatchingTerm(groups, term);\n },\n);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getMyGroupMentionKeys} from 'mattermost-redux/selectors/entities/groups';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserMentionKeys} from 'mattermost-redux/selectors/entities/users';\nimport type {UserMentionKey} from 'mattermost-redux/selectors/entities/users';\n\nexport const getCurrentSearchForCurrentTeam: (state: GlobalState) => string = createSelector(\n 'getCurrentSearchForCurrentTeam',\n (state: GlobalState) => state.entities.search.current,\n getCurrentTeamId,\n (current, teamId) => {\n return current[teamId];\n },\n);\n\nexport const getAllUserMentionKeys: (state: GlobalState) => UserMentionKey[] = createSelector(\n 'getAllUserMentionKeys',\n getCurrentUserMentionKeys,\n (state: GlobalState) => getMyGroupMentionKeys(state, false),\n (userMentionKeys, groupMentionKeys) => {\n return userMentionKeys.concat(groupMentionKeys);\n },\n);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport timezones from 'timezones.json';\n\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getTimezoneLabel, getUserCurrentTimezone} from 'mattermost-redux/utils/timezone_utils';\n\nimport {getCurrentUser} from './common';\n\nexport const getTimezoneForUserProfile = createSelector(\n 'getTimezoneForUserProfile',\n (profile: UserProfile) => profile,\n (profile) => {\n if (profile && profile.timezone) {\n return {\n ...profile.timezone,\n useAutomaticTimezone: profile.timezone.useAutomaticTimezone === 'true',\n };\n }\n\n return {\n useAutomaticTimezone: true,\n automaticTimezone: '',\n manualTimezone: '',\n };\n },\n);\n\nexport const getCurrentTimezoneFull = createSelector(\n 'getCurrentTimezoneFull',\n getCurrentUser,\n (currentUser) => {\n return getTimezoneForUserProfile(currentUser);\n },\n);\n\nexport const getCurrentTimezone = createSelector(\n 'getCurrentTimezone',\n getCurrentTimezoneFull,\n (timezoneFull) => {\n return getUserCurrentTimezone(timezoneFull);\n },\n);\n\nexport function generateCurrentTimezoneLabel(timezone: string) {\n if (!timezone) {\n return '';\n }\n\n return getTimezoneLabel(timezones, timezone);\n}\n\nexport const getCurrentTimezoneLabel = createSelector(\n 'getCurrentTimezoneLabel',\n getCurrentTimezone,\n generateCurrentTimezoneLabel,\n);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/**\n * A DataLoader is an object that can be used to batch requests for fetching objects from the server for performance\n * reasons.\n */\nabstract class DataLoader {\n protected readonly fetchBatch: (identifiers: Identifier[]) => Result;\n private readonly maxBatchSize: number;\n\n protected readonly pendingIdentifiers = new Set();\n\n constructor(args: {\n fetchBatch: (identifiers: Identifier[]) => Result;\n maxBatchSize: number;\n }) {\n this.fetchBatch = args.fetchBatch;\n this.maxBatchSize = args.maxBatchSize;\n }\n\n public queue(identifiersToLoad: Identifier[]): void {\n for (const identifier of identifiersToLoad) {\n if (!identifier) {\n continue;\n }\n\n this.pendingIdentifiers.add(identifier);\n }\n }\n\n /**\n * prepareBatch removes an array of identifiers for data to be loaded from pendingIdentifiers and returns it. If\n * pendingIdentifiers contains more than maxBatchSize identifiers, then only that many are returned, but if it\n * contains fewer than that, all of the identifiers are returned and pendingIdentifiers is cleared.\n */\n protected prepareBatch(): {identifiers: Identifier[]; moreToLoad: boolean} {\n let nextBatch;\n\n // Since we can only fetch a defined number of user statuses at a time, we need to batch the requests\n if (this.pendingIdentifiers.size >= this.maxBatchSize) {\n nextBatch = [];\n\n // We use temp buffer here to store up until max buffer size\n // and clear out processed user ids\n for (const identifier of this.pendingIdentifiers) {\n nextBatch.push(identifier);\n this.pendingIdentifiers.delete(identifier);\n\n if (nextBatch.length >= this.maxBatchSize) {\n break;\n }\n }\n } else {\n // If we have less than max buffer size, we can directly fetch the statuses\n nextBatch = Array.from(this.pendingIdentifiers);\n this.pendingIdentifiers.clear();\n }\n\n return {\n identifiers: nextBatch,\n moreToLoad: this.pendingIdentifiers.size > 0,\n };\n }\n\n /**\n * isBusy is a method for testing which returns true if the DataLoader is waiting to request or receive any data.\n */\n public isBusy(): boolean {\n return this.pendingIdentifiers.size > 0;\n }\n}\n\n/**\n * A BackgroundDataLoader is an object that can be used to batch requests for fetching objects from the server. Instead\n * of requesting data immediately, it will periodically check if any objects need to be requested from the server.\n *\n * It's intended to be used for loading low priority data such as information needed in response to WebSocket messages\n * that the user won't see immediately.\n */\nexport class BackgroundDataLoader extends DataLoader {\n private intervalId: number = -1;\n\n public startIntervalIfNeeded(ms: number): void {\n if (this.intervalId !== -1) {\n return;\n }\n\n this.intervalId = window.setInterval(() => this.fetchBatchNow(), ms);\n }\n\n public stopInterval(): void {\n clearInterval(this.intervalId);\n this.intervalId = -1;\n }\n\n public fetchBatchNow(): void {\n const {identifiers} = this.prepareBatch();\n\n if (identifiers.length === 0) {\n return;\n }\n\n this.fetchBatch(identifiers);\n }\n\n public isBusy(): boolean {\n return super.isBusy() || this.intervalId !== -1;\n }\n}\n\n/**\n * A DelayedDataLoader is an object that can be used to batch requests for fetching objects from the server. Instead of\n * requesting data immediately, it will wait for an amount of time and then send a request to the server for all of\n * the data which would've been requested during that time.\n *\n * More specifically, when queue is first called, a timer will be started. Until that timer expires, any other\n * calls to queue will have the provided identifiers added to the ones from the initial call. When the timer\n * finally expires, the request will be sent to the server to fetch that data. After that, the timer will be reset and\n * the next call to queue will start a new one.\n *\n * DelayedDataLoader is intended to be used for loading data for components which are unaware of each other and may appear\n * in different places in the UI from each other which could otherwise send repeated requests for the same or similar\n * data as one another.\n */\nexport class DelayedDataLoader extends DataLoader> {\n private readonly wait: number = -1;\n\n private timeoutId: number = -1;\n private timeoutCallbacks = new Set<{\n identifiers: Set;\n resolve(): void;\n }>();\n\n constructor(args: {\n fetchBatch: (identifiers: Identifier[]) => Promise;\n maxBatchSize: number;\n wait: number;\n }) {\n super(args);\n\n this.wait = args.wait;\n }\n\n public queue(identifiersToLoad: Identifier[]): void {\n super.queue(identifiersToLoad);\n\n this.startTimeoutIfNeeded();\n }\n\n public queueAndWait(identifiersToLoad: Identifier[]): Promise {\n return new Promise((resolve) => {\n super.queue(identifiersToLoad);\n\n // Save the callback that will resolve this promise so that the caller of this method can wait for its\n // data to be loaded\n this.timeoutCallbacks.add({\n identifiers: new Set(identifiersToLoad),\n resolve,\n });\n\n this.startTimeoutIfNeeded();\n });\n }\n\n private startTimeoutIfNeeded(): void {\n if (this.timeoutId !== -1) {\n return;\n }\n\n this.timeoutId = window.setTimeout(() => {\n // Ensure that timeoutId is cleared and we get a pop identifiers off of pendingIdentifiers before doing\n // anything async so that any calls to queue that are made while fetching this batch will be\n // added to the next batch instead\n this.timeoutId = -1;\n\n const {identifiers, moreToLoad} = this.prepareBatch();\n\n // Start another timeout if there's still more data to load\n if (moreToLoad) {\n this.startTimeoutIfNeeded();\n }\n\n this.fetchBatch(identifiers).then(() => this.resolveCompletedCallbacks(identifiers));\n }, this.wait);\n }\n\n private resolveCompletedCallbacks(identifiers: Identifier[]): void {\n for (const callback of this.timeoutCallbacks) {\n for (const identifier of identifiers) {\n callback.identifiers.delete(identifier);\n }\n\n if (callback.identifiers.size === 0) {\n this.timeoutCallbacks.delete(callback);\n callback.resolve();\n }\n }\n }\n\n public isBusy(): boolean {\n return super.isBusy() || this.timeoutCallbacks.size > 0 || this.timeoutId !== -1;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Emoji, SystemEmoji} from '@mattermost/types/emojis';\n\nimport {Client4} from 'mattermost-redux/client';\n\nexport function isSystemEmoji(emoji: Emoji): emoji is SystemEmoji {\n if ('category' in emoji) {\n return emoji.category !== 'custom';\n }\n\n return !('id' in emoji);\n}\n\nexport function getEmojiImageUrl(emoji: Emoji): string {\n // If its the mattermost custom emoji\n if (!isSystemEmoji(emoji) && emoji.id === 'mattermost') {\n return Client4.getSystemEmojiImageUrl('mattermost');\n }\n\n if (isSystemEmoji(emoji)) {\n const emojiUnified = emoji?.unified?.toLowerCase() ?? '';\n const filename = emojiUnified || emoji.short_names[0];\n\n return Client4.getSystemEmojiImageUrl(filename);\n }\n\n return Client4.getEmojiRoute(emoji.id) + '/image';\n}\n\nexport function getEmojiName(emoji: Emoji): string {\n return isSystemEmoji(emoji) ? emoji.short_name : emoji.name;\n}\n\nexport function parseEmojiNamesFromText(text: string): string[] {\n if (!text.includes(':')) {\n return [];\n }\n\n const pattern = /:([A-Za-z0-9_-]+):/gi;\n const customEmojis = new Set();\n let match;\n while ((match = pattern.exec(text)) !== null) {\n if (!match) {\n continue;\n }\n\n customEmojis.add(match[1]);\n }\n\n return Array.from(customEmojis);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nfunction isFunction(obj: any): boolean {\n return typeof obj === 'function';\n}\n\ntype Listener = (...args: any[]) => void;\n\nclass EventEmitter {\n listeners: Map;\n\n constructor() {\n this.listeners = new Map();\n }\n\n addListener(label: string, callback: Listener): void {\n if (!this.listeners.has(label)) {\n this.listeners.set(label, []);\n }\n\n this.listeners.get(label)!.push(callback);\n }\n\n on(label: string, callback: Listener): void {\n this.addListener(label, callback);\n }\n\n removeListener(label: string, callback: Listener): boolean {\n const listeners = this.listeners.get(label);\n let index;\n\n if (listeners && listeners.length) {\n index = listeners.reduce((i, listener, idx) => {\n return isFunction(listener) && listener === callback ? idx : i;\n }, -1);\n\n if (index > -1) {\n listeners.splice(index, 1);\n this.listeners.set(label, listeners);\n return true;\n }\n }\n return false;\n }\n\n off(label: string, callback: Listener): void {\n this.removeListener(label, callback);\n }\n\n emit(label: string, ...args: any[]): boolean {\n const listeners = this.listeners.get(label);\n\n if (listeners && listeners.length) {\n listeners.forEach((listener) => {\n listener(...args);\n });\n return true;\n }\n return false;\n }\n}\n\nexport default new EventEmitter();\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport {Client4} from 'mattermost-redux/client';\n\nimport {Files, General} from '../constants';\n\nexport function getFormattedFileSize(file: FileInfo): string {\n const bytes = file.size;\n const fileSizes = [\n ['TB', 1024 * 1024 * 1024 * 1024],\n ['GB', 1024 * 1024 * 1024],\n ['MB', 1024 * 1024],\n ['KB', 1024],\n ] as const;\n const size = fileSizes.find((unitAndMinBytes) => {\n const minBytes = unitAndMinBytes[1];\n return bytes > minBytes;\n });\n\n if (size) {\n return `${Math.floor(bytes / (size[1] as any))} ${size[0]}`;\n }\n\n return `${bytes} B`;\n}\n\nexport function getFileType(file: FileInfo): string {\n if (!file || !file.extension) {\n return 'other';\n }\n\n const fileExt = file.extension.toLowerCase();\n const fileTypes = [\n 'image',\n 'code',\n 'pdf',\n 'video',\n 'audio',\n 'spreadsheet',\n 'text',\n 'word',\n 'presentation',\n 'patch',\n ];\n return fileTypes.find((fileType) => {\n const constForFileTypeExtList = `${fileType}_types`.toUpperCase();\n const fileTypeExts = Files[constForFileTypeExtList];\n return fileTypeExts.indexOf(fileExt) > -1;\n }) || 'other';\n}\n\nexport function getFileUrl(fileId: string): string {\n return Client4.getFileRoute(fileId);\n}\n\nexport function getFileDownloadUrl(fileId: string): string {\n return `${Client4.getFileRoute(fileId)}?download=1`;\n}\n\nexport function getFileThumbnailUrl(fileId: string): string {\n return `${Client4.getFileRoute(fileId)}/thumbnail`;\n}\n\nexport function getFilePreviewUrl(fileId: string): string {\n return `${Client4.getFileRoute(fileId)}/preview`;\n}\n\nexport function getFileMiniPreviewUrl(fileInfo?: FileInfo): string | undefined {\n if (!fileInfo?.mini_preview || !fileInfo?.mime_type) {\n return undefined;\n }\n return `data:${fileInfo.mime_type};base64,${fileInfo.mini_preview}`;\n}\n\nexport function sortFileInfos(fileInfos: FileInfo[] = [], locale: string = General.DEFAULT_LOCALE): FileInfo[] {\n return fileInfos.sort((a, b) => {\n if (a.create_at !== b.create_at) {\n return a.create_at - b.create_at;\n }\n\n return a.name.localeCompare(b.name, locale, {numeric: true});\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Group} from '@mattermost/types/groups';\n\nimport {getSuggestionsSplitBy, getSuggestionsSplitByMultiple} from './user_utils';\n\nimport {General} from '../constants';\n\nexport function filterGroupsMatchingTerm(groups: Group[], term: string): Group[] {\n const lowercasedTerm = term.toLowerCase();\n let trimmedTerm = lowercasedTerm;\n if (trimmedTerm.startsWith('@')) {\n trimmedTerm = trimmedTerm.slice(1);\n }\n\n return groups.filter((group: Group) => {\n if (!group) {\n return false;\n }\n\n const groupSuggestions: string[] = [];\n\n const groupnameSuggestions = getSuggestionsSplitByMultiple((group.name || '').toLowerCase(), General.AUTOCOMPLETE_SPLIT_CHARACTERS);\n groupSuggestions.push(...groupnameSuggestions);\n\n const suggestions = getSuggestionsSplitBy(group.display_name.toLowerCase(), ' ');\n groupSuggestions.push(...suggestions);\n\n return groupSuggestions.\n filter((suggestion) => suggestion !== '').\n some((suggestion) => suggestion.startsWith(trimmedTerm));\n });\n}\n\nexport function sortGroups(groups: Group[] = [], locale: string = General.DEFAULT_LOCALE): Group[] {\n return groups.sort((a, b) => {\n if ((a.delete_at === 0 && b.delete_at === 0) || (a.delete_at > 0 && b.delete_at > 0)) {\n return a.display_name.localeCompare(b.display_name, locale, {numeric: true});\n }\n if (a.delete_at < b.delete_at) {\n return -1;\n }\n if (a.delete_at > b.delete_at) {\n return 1;\n }\n\n return 0;\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {Preferences} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getMyActiveChannelIds} from 'mattermost-redux/selectors/entities/channels';\nimport {get, onboardingTourTipsEnabled} from 'mattermost-redux/selectors/entities/preferences';\n\nimport {getGlobalItem} from 'selectors/storage';\nimport {getIsMobileView} from 'selectors/views/browser';\n\nimport {StoragePrefixes} from 'utils/constants';\nimport {getDraftInfoFromKey} from 'utils/storage_utils';\n\nimport type {GlobalState} from 'types/store';\nimport type {DraftInfo, PostDraft} from 'types/store/draft';\n\nexport type Draft = DraftInfo & {\n key: keyof GlobalState['storage']['storage'];\n value: PostDraft;\n timestamp: Date;\n}\n\nexport type DraftSelector = (state: GlobalState) => Draft[];\nexport type DraftCountSelector = (state: GlobalState) => number;\n\nexport function showDraftsPulsatingDotAndTourTip(state: GlobalState): boolean {\n if (!onboardingTourTipsEnabled(state) || getIsMobileView(state)) {\n return false;\n }\n\n const draftsTourTipShowed = get(state, Preferences.CATEGORY_DRAFTS, Preferences.DRAFTS_TOUR_TIP_SHOWED, '');\n const draftsAlreadyViewed = draftsTourTipShowed && JSON.parse(draftsTourTipShowed)[Preferences.DRAFTS_TOUR_TIP_SHOWED];\n\n return !draftsAlreadyViewed;\n}\n\nexport function makeGetDraftsByPrefix(prefix: string): DraftSelector {\n return createSelector(\n 'makeGetDraftsByPrefix',\n (state: GlobalState) => state.storage?.storage,\n (storage) => {\n if (!storage) {\n return [];\n }\n\n return Object.keys(storage).flatMap((key) => {\n const item = storage[key];\n if (\n key.startsWith(prefix) &&\n item != null &&\n item.value != null &&\n (item.value.message || item.value.fileInfos?.length > 0) &&\n item.value.show\n ) {\n const info = getDraftInfoFromKey(key, prefix);\n\n if (info === null || !info.id) {\n return [];\n }\n\n return {\n ...item,\n key,\n id: info.id,\n type: info.type,\n };\n }\n return [];\n });\n },\n );\n}\n\nconst getChannelDrafts = makeGetDraftsByPrefix(StoragePrefixes.DRAFT);\nconst getRHSDrafts = makeGetDraftsByPrefix(StoragePrefixes.COMMENT_DRAFT);\n\n/**\n * Gets all local drafts in storage.\n * @param excludeInactive determines if we filter drafts based on active channels.\n */\nexport function makeGetDrafts(excludeInactive = true): DraftSelector {\n return createSelector(\n 'makeGetDrafts',\n getChannelDrafts,\n getRHSDrafts,\n getMyActiveChannelIds,\n (channelDrafts, rhsDrafts, myChannels) => (\n [...channelDrafts, ...rhsDrafts]\n ).\n filter((draft) => (excludeInactive ? myChannels.indexOf(draft.value.channelId) !== -1 : true)).\n sort((a, b) => b.value.updateAt - a.value.updateAt),\n );\n}\n\nexport function makeGetDraftsCount(): DraftCountSelector {\n return createSelector(\n 'makeGetDraftsCount',\n getChannelDrafts,\n getRHSDrafts,\n getMyActiveChannelIds,\n (channelDrafts, rhsDrafts, myChannels) => [...channelDrafts, ...rhsDrafts].\n filter((draft) => myChannels.indexOf(draft.value.channelId) !== -1).length,\n );\n}\n\nexport function makeGetDraft() {\n const DEFAULT_DRAFT = Object.freeze({\n message: '',\n fileInfos: [],\n uploadsInProgress: [],\n createAt: 0,\n updateAt: 0,\n channelId: '',\n rootId: '',\n });\n\n return createSelector(\n 'makeGetDraft',\n (_: GlobalState, channelId: string) => channelId,\n (_: GlobalState, channelId: string, rootId = '') => rootId,\n (state: GlobalState, channelId: string, rootId = '', storageKey = '') => {\n let prefixStorageKey = StoragePrefixes.DRAFT;\n let suffixStorageKey = channelId;\n if (rootId) {\n prefixStorageKey = StoragePrefixes.COMMENT_DRAFT;\n suffixStorageKey = rootId;\n }\n const key = storageKey || `${prefixStorageKey}${suffixStorageKey}`;\n\n return getGlobalItem(state, key, DEFAULT_DRAFT);\n },\n (channelId, rootId, retrievedDraftParam) => {\n let retrievedDraft = retrievedDraftParam;\n if (retrievedDraft.metadata?.files) {\n retrievedDraft = {...retrievedDraft, fileInfos: retrievedDraft.metadata.files};\n }\n\n // Check if the draft has the required values in its properties\n const isDraftWithRequiredValues = typeof retrievedDraft.message !== 'undefined' && typeof retrievedDraft.uploadsInProgress !== 'undefined' && typeof retrievedDraft.fileInfos !== 'undefined';\n\n // Check if draft's channelId or rootId mismatches with the passed one\n const isDraftMismatched = retrievedDraft.channelId !== channelId || retrievedDraft.rootId !== rootId;\n\n if (isDraftWithRequiredValues && !isDraftMismatched) {\n return retrievedDraft;\n }\n\n return {\n ...DEFAULT_DRAFT,\n ...retrievedDraft,\n channelId,\n rootId,\n };\n },\n );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {RecentEmojiData} from '@mattermost/types/emojis';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getCustomEmojisByName} from 'mattermost-redux/selectors/entities/emojis';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {get} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {Preferences} from 'utils/constants';\nimport {EmojiIndicesByAlias, Emojis} from 'utils/emoji';\nimport EmojiMap from 'utils/emoji_map';\nimport {convertEmojiSkinTone} from 'utils/emoji_utils';\n\nimport type {GlobalState} from 'types/store';\n\nexport const getEmojiMap = createSelector(\n 'getEmojiMap',\n getCustomEmojisByName,\n (customEmojisByName) => {\n return new EmojiMap(customEmojisByName);\n },\n);\n\nexport const getShortcutReactToLastPostEmittedFrom = (state: GlobalState) =>\n state.views.emoji.shortcutReactToLastPostEmittedFrom;\n\nexport const getRecentEmojisData = createSelector(\n 'getRecentEmojisData',\n (state: GlobalState) => {\n return get(\n state,\n Preferences.RECENT_EMOJIS,\n getCurrentUserId(state),\n '[]',\n );\n },\n getUserSkinTone,\n (recentEmojis: string, userSkinTone: string) => {\n if (!recentEmojis) {\n return [];\n }\n\n const parsedEmojiData: RecentEmojiData[] = JSON.parse(recentEmojis);\n return normalizeRecentEmojisData(parsedEmojiData, userSkinTone);\n },\n);\n\nexport function normalizeRecentEmojisData(data: RecentEmojiData[], userSkinTone: string) {\n const usageCounts = new Map();\n\n for (const recentEmoji of data) {\n const emojiIndex = EmojiIndicesByAlias.get(recentEmoji.name) ?? -1;\n const systemEmoji = Emojis[emojiIndex];\n\n let normalizedName;\n if (systemEmoji) {\n // This is a system emoji, so we may need to change its skin tone\n normalizedName = convertEmojiSkinTone(systemEmoji, userSkinTone).short_name;\n } else {\n // This is a custom emoji, so its name will never change\n normalizedName = recentEmoji.name;\n }\n\n // Dedupe and sum up the usage counts of any duplicated entries\n const currentCount = usageCounts.get(normalizedName) ?? 0;\n usageCounts.set(normalizedName, currentCount + recentEmoji.usageCount);\n }\n\n const normalizedData = [];\n for (const [name, usageCount] of usageCounts.entries()) {\n normalizedData.push({name, usageCount});\n }\n\n // Sort emojis by count in the ascending order, matching addRecentEmoji\n normalizedData.sort((emojiA: RecentEmojiData, emojiB: RecentEmojiData) => emojiA.usageCount - emojiB.usageCount);\n\n return normalizedData;\n}\n\nexport const getRecentEmojisNames = createSelector(\n 'getRecentEmojisNames',\n getRecentEmojisData,\n (recentEmojisData: RecentEmojiData[]) => {\n return recentEmojisData.map((emoji) => emoji.name);\n },\n);\n\nexport function getUserSkinTone(state: GlobalState): string {\n return get(state, Preferences.CATEGORY_EMOJI, Preferences.EMOJI_SKINTONE, 'default');\n}\n\nexport function isCustomEmojiEnabled(state: GlobalState) {\n const config = getConfig(state);\n return config && config.EnableCustomEmoji === 'true';\n}\n\nexport const getOneClickReactionEmojis = createSelector(\n 'getOneClickReactionEmojis',\n getEmojiMap,\n getRecentEmojisNames,\n (emojiMap, recentEmojis: string[]) => {\n if (recentEmojis.length === 0) {\n return [];\n }\n\n return (recentEmojis).\n map((recentEmoji) => emojiMap.get(recentEmoji)).\n filter(isDefined).\n slice(-3).\n reverse();\n },\n);\n\nfunction isDefined(t: T | undefined): t is T {\n return Boolean(t);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {General} from 'mattermost-redux/constants';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getCurrentUserLocale} from 'mattermost-redux/selectors/entities/i18n';\n\nimport * as I18n from 'i18n/i18n';\n\nimport type {GlobalState} from 'types/store';\nimport type {Translations} from 'types/store/i18n';\n\n// This is a placeholder for if we ever implement browser-locale detection\nexport function getCurrentLocale(state: GlobalState): string {\n // If locale is provided in query parameter and the user is not logged in, we try get locale from param\n const localeFromParam: string | null = (new URLSearchParams(window.location?.search)).get('locale');\n const defaultLocale: string | undefined =\n localeFromParam && I18n.isLanguageAvailable(state, localeFromParam) ? localeFromParam : getConfig(state).DefaultClientLocale;\n\n const currentLocale: string = getCurrentUserLocale(state, defaultLocale);\n if (I18n.isLanguageAvailable(state, currentLocale)) {\n return currentLocale;\n }\n return General.DEFAULT_LOCALE;\n}\n\nexport function getTranslations(state: GlobalState, locale: string): Translations {\n const localeInfo = I18n.getLanguageInfo(locale);\n\n let translations;\n if (localeInfo) {\n translations = state.views.i18n.translations[locale];\n } else {\n // Default to English if an unsupported locale is specified\n translations = state.views.i18n.translations.en;\n }\n\n return translations;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {ClientConfig} from '@mattermost/types/config';\nimport type {Post} from '@mattermost/types/posts';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/common';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getPost} from 'mattermost-redux/selectors/entities/posts';\nimport {moveThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId, getCurrentUserRoles} from 'mattermost-redux/selectors/entities/users';\n\nimport {arePreviewsCollapsed} from 'selectors/preferences';\nimport {getGlobalItem} from 'selectors/storage';\n\nimport {StoragePrefixes} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\nimport type {EditingPostDetails} from 'types/store/views';\n\nexport function getIsPostBeingEdited(state: GlobalState, postId: string) {\n return state.views.posts.editingPost.postId === postId && state.views.posts.editingPost.show;\n}\nexport function getIsPostBeingEditedInRHS(state: GlobalState, postId: string) {\n const editingPost = getEditingPostDetailsAndPost(state);\n\n return editingPost.isRHS && editingPost.postId === postId && state.views.posts.editingPost.show;\n}\n\nexport function getPostEditHistory(state: GlobalState): Post[] {\n return state.entities.posts.postEditHistory;\n}\n\nexport const getEditingPostDetailsAndPost = createSelector(\n 'getEditingPostDetailsAndPost',\n (state: GlobalState) => state.views.posts.editingPost,\n (state: GlobalState) => getPost(state, state.views.posts.editingPost.postId),\n (editingPost, post) => {\n const editingPostDetailsAndPost: EditingPostDetails & {post: Post} = {\n ...editingPost,\n post,\n };\n\n return editingPostDetailsAndPost;\n },\n);\n\nexport function isEmbedVisible(state: GlobalState, postId: string) {\n const currentUserId = getCurrentUserId(state);\n const previewCollapsed = arePreviewsCollapsed(state);\n\n return getGlobalItem(state, StoragePrefixes.EMBED_VISIBLE + currentUserId + '_' + postId, !previewCollapsed);\n}\n\nexport function isInlineImageVisible(state: GlobalState, postId: string, imageKey: string) {\n const currentUserId = getCurrentUserId(state);\n const imageCollapsed = arePreviewsCollapsed(state);\n\n return getGlobalItem(state, StoragePrefixes.INLINE_IMAGE_VISIBLE + currentUserId + '_' + postId + '_' + imageKey, !imageCollapsed);\n}\n\nexport function makeCanWrangler() {\n return createSelector(\n 'makeCanWrangler',\n getConfig,\n getCurrentUser,\n getCurrentUserRoles,\n moveThreadsEnabled,\n (_state: GlobalState, channelType: Channel['type']) => channelType,\n (_state: GlobalState, _channelType: Channel['type'], replyCount: number) => replyCount,\n (config: Partial, user: UserProfile, userRoles: string, enabled: boolean, channelType: Channel['type'], replyCount: number) => {\n if (!enabled) {\n return false;\n }\n const {\n WranglerPermittedWranglerRoles,\n WranglerAllowedEmailDomain,\n WranglerMoveThreadMaxCount,\n WranglerMoveThreadFromPrivateChannelEnable,\n WranglerMoveThreadFromDirectMessageChannelEnable,\n WranglerMoveThreadFromGroupMessageChannelEnable,\n } = config;\n\n let permittedUsers: string[] = [];\n if (WranglerPermittedWranglerRoles && WranglerPermittedWranglerRoles !== '') {\n permittedUsers = WranglerPermittedWranglerRoles?.split(',');\n }\n\n let allowedEmailDomains: string[] = [];\n if (WranglerAllowedEmailDomain && WranglerAllowedEmailDomain !== '') {\n allowedEmailDomains = WranglerAllowedEmailDomain?.split(',') || [];\n }\n\n if (permittedUsers.length > 0 && !userRoles.includes('system_admin')) {\n const roles = userRoles.split(' ');\n const hasRole = roles.some((role) => permittedUsers.includes(role));\n if (!hasRole) {\n return false;\n }\n }\n\n if (allowedEmailDomains?.length > 0) {\n if (!user.email || !allowedEmailDomains.includes(user.email.split('@')[1])) {\n return false;\n }\n }\n\n if (Number(WranglerMoveThreadMaxCount) < replyCount) {\n return false;\n }\n\n if (channelType === 'P' && WranglerMoveThreadFromPrivateChannelEnable === 'false') {\n return false;\n }\n\n if (channelType === 'D' && WranglerMoveThreadFromDirectMessageChannelEnable === 'false') {\n return false;\n }\n\n if (channelType === 'G' && WranglerMoveThreadFromGroupMessageChannelEnable === 'false') {\n return false;\n }\n\n return true;\n },\n );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {getBool as getBoolPreference} from 'mattermost-redux/selectors/entities/preferences';\n\nimport {Preferences} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\n\nexport const arePreviewsCollapsed = (state: GlobalState) => {\n return getBoolPreference(\n state,\n Preferences.CATEGORY_DISPLAY_SETTINGS,\n Preferences.COLLAPSE_DISPLAY,\n Preferences.COLLAPSE_DISPLAY_DEFAULT !== 'false',\n );\n};\n\nexport const isSendOnCtrlEnter = (state: GlobalState) => {\n return getBoolPreference(\n state,\n Preferences.CATEGORY_ADVANCED_SETTINGS,\n 'send_on_ctrl_enter',\n false,\n );\n};\n\nexport const isUseMilitaryTime = (state: GlobalState) => {\n return getBoolPreference(\n state,\n Preferences.CATEGORY_DISPLAY_SETTINGS,\n Preferences.USE_MILITARY_TIME,\n false,\n );\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Post, PostType} from '@mattermost/types/posts';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {makeGetChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {makeGetGlobalItem, makeGetGlobalItemWithDefault} from 'selectors/storage';\n\nimport type {SidebarSize} from 'components/resizable_sidebar/constants';\n\nimport {PostTypes, StoragePrefixes} from 'utils/constants';\nimport {localizeMessage} from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\nimport type {PostDraft} from 'types/store/draft';\nimport type {RhsState, FakePost, SearchType} from 'types/store/rhs';\n\nexport function getSelectedPostId(state: GlobalState): Post['id'] {\n return state.views.rhs.selectedPostId;\n}\n\nexport function getRhsSize(state: GlobalState): SidebarSize {\n return state.views.rhs.size;\n}\n\nexport function getSelectedPostFocussedAt(state: GlobalState): number {\n return state.views.rhs.selectedPostFocussedAt;\n}\n\nexport function getSelectedPostCardId(state: GlobalState): Post['id'] {\n return state.views.rhs.selectedPostCardId;\n}\n\nexport function getHighlightedPostId(state: GlobalState): Post['id'] {\n return state.views.rhs.highlightedPostId;\n}\n\nexport function getFilesSearchExtFilter(state: GlobalState): string[] {\n return state.views.rhs.filesSearchExtFilter;\n}\n\nexport function getSelectedPostCard(state: GlobalState) {\n return state.entities.posts.posts[getSelectedPostCardId(state)];\n}\n\nexport function getSelectedChannelId(state: GlobalState) {\n return state.views.rhs.selectedChannelId;\n}\n\nexport const getSelectedChannel = (() => {\n const getChannel = makeGetChannel();\n\n return (state: GlobalState) => {\n const channelId = getSelectedChannelId(state);\n\n return getChannel(state, channelId);\n };\n})();\n\nexport function getPluggableId(state: GlobalState) {\n return state.views.rhs.pluggableId;\n}\n\nexport function getActiveRhsComponent(state: GlobalState) {\n const pluggableId = getPluggableId(state);\n const components = state.plugins.components.RightHandSidebarComponent;\n return components.find((c) => c.id === pluggableId);\n}\n\nfunction getRealSelectedPost(state: GlobalState) {\n return state.entities.posts.posts[getSelectedPostId(state)];\n}\n\nexport const getSelectedPost = createSelector(\n 'getSelectedPost',\n getSelectedPostId,\n getRealSelectedPost,\n getSelectedChannelId,\n getCurrentUserId,\n (\n selectedPostId: Post['id'],\n selectedPost: Post,\n selectedPostChannelId: Channel['id'],\n currentUserId,\n ): Post | FakePost => {\n if (selectedPost) {\n return selectedPost;\n }\n\n // If there is no root post found, assume it has been deleted by data retention policy, and create a fake one.\n return {\n id: selectedPostId,\n exists: false,\n type: PostTypes.FAKE_PARENT_DELETED as PostType,\n message: localizeMessage({\n id: 'rhs_thread.rootPostDeletedMessage.body',\n defaultMessage:\n 'Part of this thread has been deleted due to a data retention policy. You can no longer reply to this thread.',\n }),\n channel_id: selectedPostChannelId,\n user_id: currentUserId,\n reply_count: 0,\n };\n },\n);\n\nexport function getRhsState(state: GlobalState): RhsState {\n return state.views.rhs.rhsState;\n}\n\nexport function getPreviousRhsState(state: GlobalState): RhsState {\n if (state.views.rhs.previousRhsStates === null || state.views.rhs.previousRhsStates.length === 0) {\n return null;\n }\n return state.views.rhs.previousRhsStates[state.views.rhs.previousRhsStates.length - 1];\n}\n\nexport function getSearchTerms(state: GlobalState): string {\n return state.views.rhs.searchTerms;\n}\n\n// getSearchTeam returns the team ID that the search is currently scoped to, or the current team if no team was specified.\nexport function getSearchTeam(state: GlobalState): string {\n return state.views.rhs.searchTeam ?? getCurrentTeamId(state);\n}\n\nexport function getSearchType(state: GlobalState): SearchType {\n return state.views.rhs.searchType;\n}\n\nexport function getSearchResultsTerms(state: GlobalState): string {\n return state.views.rhs.searchResultsTerms;\n}\n\nexport function getSearchResultsType(state: GlobalState): string {\n return state.views.rhs.searchResultsType;\n}\n\nexport function getIsSearchingTerm(state: GlobalState): boolean {\n return state.entities.search.isSearchingTerm;\n}\n\nexport function getIsSearchingFlaggedPost(state: GlobalState): boolean {\n return state.views.rhs.isSearchingFlaggedPost;\n}\n\nexport function getIsSearchingPinnedPost(state: GlobalState): boolean {\n return state.views.rhs.isSearchingPinnedPost;\n}\n\nexport function getIsSearchGettingMore(state: GlobalState): boolean {\n return state.entities.search.isSearchGettingMore;\n}\n\nexport function makeGetChannelDraft() {\n const defaultDraft = Object.freeze({\n message: '',\n fileInfos: [],\n uploadsInProgress: [],\n createAt: 0,\n updateAt: 0,\n channelId: '',\n rootId: '',\n });\n const getDraft = makeGetGlobalItemWithDefault(defaultDraft);\n\n return (state: GlobalState, channelId?: string): PostDraft => {\n if (!channelId) {\n return defaultDraft;\n }\n\n const draft = getDraft(state, StoragePrefixes.DRAFT + channelId);\n if (\n typeof draft.message !== 'undefined' &&\n typeof draft.uploadsInProgress !== 'undefined' &&\n typeof draft.fileInfos !== 'undefined'\n ) {\n return draft;\n }\n\n return defaultDraft;\n };\n}\n\nexport function getPostDraft(state: GlobalState, prefixId: string, suffixId: string): PostDraft {\n const defaultDraft = {\n message: '',\n fileInfos: [],\n uploadsInProgress: [],\n createAt: 0,\n updateAt: 0,\n channelId: '',\n rootId: '',\n };\n\n if (prefixId === StoragePrefixes.COMMENT_DRAFT) {\n defaultDraft.rootId = suffixId;\n }\n const draft = makeGetGlobalItem(prefixId + suffixId, defaultDraft)(state);\n\n if (\n typeof draft.message !== 'undefined' &&\n typeof draft.uploadsInProgress !== 'undefined' &&\n typeof draft.fileInfos !== 'undefined'\n ) {\n return draft;\n }\n\n return defaultDraft;\n}\n\nexport function getIsRhsOpen(state: GlobalState): boolean {\n return state.views.rhs.isSidebarOpen && !state.views.rhsSuppressed;\n}\n\nexport function getIsRhsMenuOpen(state: GlobalState): boolean {\n return state.views.rhs.isMenuOpen;\n}\n\nexport function getIsRhsExpanded(state: GlobalState): boolean {\n return state.views.rhs.isSidebarExpanded;\n}\n\nexport function getIsEditingMembers(state: GlobalState): boolean {\n return state.views.rhs.editChannelMembers === true;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {GlobalState} from 'types/store';\n\nexport const getGlobalItem = (state: GlobalState, name: string, defaultValue: T) => {\n const storage = state && state.storage && state.storage.storage;\n\n return getItemFromStorage(storage, name, defaultValue);\n};\n\nexport const makeGetGlobalItem = (name: string, defaultValue: T) => {\n return (state: GlobalState) => {\n return getGlobalItem(state, name, defaultValue);\n };\n};\n\nexport const getItemFromStorage = (storage: Record, name: string, defaultValue: T): T => {\n return storage[name]?.value ?? defaultValue;\n};\n\nexport const makeGetGlobalItemWithDefault = (defaultValue: T) => {\n return (state: GlobalState, name: string) => {\n return getGlobalItem(state, name, defaultValue);\n };\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Post} from '@mattermost/types/posts';\nimport type {Team} from '@mattermost/types/teams';\n\nimport {getRedirectChannelNameForTeam} from 'mattermost-redux/selectors/entities/channels';\nimport {\n getCurrentRelativeTeamUrl,\n getCurrentTeam,\n getCurrentTeamId,\n getTeam,\n} from 'mattermost-redux/selectors/entities/teams';\n\nimport Constants from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\n\nfunction getTeamRelativeUrl(team: Team | undefined) {\n if (!team) {\n return '';\n }\n\n return '/' + team.name;\n}\n\nexport function getPermalinkURL(state: GlobalState, teamId: Team['id'], postId: Post['id']): string {\n let team = getTeam(state, teamId);\n if (!team) {\n team = getCurrentTeam(state);\n }\n return `${getTeamRelativeUrl(team)}/pl/${postId}`;\n}\n\nexport function getChannelURL(state: GlobalState, channel: Pick, teamId: string): string {\n let notificationURL;\n if (channel && (channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL)) {\n notificationURL = getCurrentRelativeTeamUrl(state) + '/channels/' + channel.name;\n } else if (channel) {\n const team = getTeam(state, teamId);\n notificationURL = getTeamRelativeUrl(team) + '/channels/' + channel.name;\n } else if (teamId) {\n const team = getTeam(state, teamId);\n const redirectChannel = getRedirectChannelNameForTeam(state, teamId);\n notificationURL = getTeamRelativeUrl(team) + `/channels/${redirectChannel}`;\n } else {\n const currentTeamId = getCurrentTeamId(state);\n const redirectChannel = getRedirectChannelNameForTeam(state, currentTeamId);\n notificationURL = getCurrentRelativeTeamUrl(state) + `/channels/${redirectChannel}`;\n }\n return notificationURL;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {WindowSizes} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\n\nexport function getIsDesktopView(state: GlobalState): boolean {\n const windowSize = state.views.browser.windowSize;\n return windowSize === WindowSizes.DESKTOP_VIEW;\n}\n\nexport function getIsSmallDesktopView(state: GlobalState): boolean {\n const windowSize = state.views.browser.windowSize;\n return windowSize === WindowSizes.SMALL_DESKTOP_VIEW;\n}\n\nexport function getIsTabletView(state: GlobalState): boolean {\n const windowSize = state.views.browser.windowSize;\n return windowSize === WindowSizes.TABLET_VIEW;\n}\n\nexport function getIsMobileView(state: GlobalState): boolean {\n const windowSize = state.views.browser.windowSize;\n return windowSize === WindowSizes.MOBILE_VIEW;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ChannelCategory} from '@mattermost/types/channel_categories';\nimport {CategorySorting} from '@mattermost/types/channel_categories';\nimport type {Channel} from '@mattermost/types/channels';\nimport type {RelationOneToOne} from '@mattermost/types/utilities';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {\n makeGetCategoriesForTeam,\n makeGetChannelsByCategory,\n makeGetChannelIdsForCategory,\n} from 'mattermost-redux/selectors/entities/channel_categories';\nimport {\n getAllChannels,\n getCurrentChannelId,\n getMyChannelMemberships,\n getUnreadChannelIds,\n sortUnreadChannels,\n} from 'mattermost-redux/selectors/entities/channels';\nimport {shouldShowUnreadsCategory, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {memoizeResult} from 'mattermost-redux/utils/helpers';\n\nimport type {DraggingState, GlobalState} from 'types/store';\n\nexport function isUnreadFilterEnabled(state: GlobalState): boolean {\n return state.views.channelSidebar.unreadFilterEnabled && !shouldShowUnreadsCategory(state);\n}\n\nexport const getCategoriesForCurrentTeam: (state: GlobalState) => ChannelCategory[] = (() => {\n const getCategoriesForTeam = makeGetCategoriesForTeam();\n\n return memoizeResult((state: GlobalState) => {\n const currentTeamId = getCurrentTeamId(state);\n return getCategoriesForTeam(state, currentTeamId);\n });\n})();\n\nexport const getAutoSortedCategoryIds: (state: GlobalState) => Set = (() => createSelector(\n 'getAutoSortedCategoryIds',\n (state: GlobalState) => getCategoriesForCurrentTeam(state),\n (categories) => {\n return new Set(categories.filter((category) =>\n category.sorting === CategorySorting.Alphabetical ||\n category.sorting === CategorySorting.Recency).map((category) => category.id));\n },\n))();\n\nexport const getChannelsByCategoryForCurrentTeam: (state: GlobalState) => RelationOneToOne = (() => {\n const getChannelsByCategory = makeGetChannelsByCategory();\n\n return memoizeResult((state: GlobalState) => {\n const currentTeamId = getCurrentTeamId(state);\n return getChannelsByCategory(state, currentTeamId);\n });\n})();\n\nconst getUnreadChannelIdsSet = createSelector(\n 'getUnreadChannelIdsSet',\n (state: GlobalState) => getUnreadChannelIds(state, state.views.channel.lastUnreadChannel),\n (unreadChannelIds) => {\n return new Set(unreadChannelIds);\n },\n);\n\n// getChannelsInCategoryOrder returns an array of channels on the current team that are currently visible in the sidebar.\n// Channels are returned in the same order as in the sidebar. Channels in the Unreads category are not included.\nexport const getChannelsInCategoryOrder = (() => {\n return createSelector(\n 'getChannelsInCategoryOrder',\n getCategoriesForCurrentTeam,\n getChannelsByCategoryForCurrentTeam,\n getCurrentChannelId,\n getUnreadChannelIdsSet,\n shouldShowUnreadsCategory,\n (categories, channelsByCategory, currentChannelId, unreadChannelIds, showUnreadsCategory) => {\n return categories.map((category) => {\n const channels = channelsByCategory[category.id];\n\n return channels.filter((channel: Channel) => {\n const isUnread = unreadChannelIds.has(channel.id);\n\n if (showUnreadsCategory) {\n // Filter out channels that have been moved to the Unreads category\n if (isUnread) {\n return false;\n }\n }\n\n if (category.collapsed) {\n // Filter out channels that would be hidden by a collapsed category\n if (!isUnread && currentChannelId !== channel.id) {\n return false;\n }\n }\n\n return true;\n });\n }).flat();\n },\n );\n})();\n\n// getUnreadChannels returns an array of all unread channels on the current team for display with the unread filter\n// enabled. Channels are sorted by recency with channels containing a mention grouped first.\nexport const getUnreadChannels = (() => {\n const getUnsortedUnreadChannels = createSelector(\n 'getUnreadChannels',\n getAllChannels,\n getUnreadChannelIdsSet,\n getCurrentChannelId,\n isUnreadFilterEnabled,\n (allChannels, unreadChannelIds, currentChannelId, unreadFilterEnabled) => {\n const unreadChannels: Channel[] = [];\n\n for (const channelId of unreadChannelIds) {\n const channel = allChannels[channelId];\n\n if (channel) {\n // Only include an archived channel if it's the current channel\n if (channel.delete_at > 0 && channel.id !== currentChannelId) {\n continue;\n }\n\n unreadChannels.push(channel);\n }\n }\n\n // This selector is used for both the unread filter and the unreads category which treat the current\n // channel differently\n if (unreadFilterEnabled) {\n // The current channel is already in unreadChannels if it was previously unread but we need to add it\n // if it wasn't previously unread\n if (currentChannelId && unreadChannels.findIndex((channel) => channel.id === currentChannelId) === -1) {\n if (allChannels[currentChannelId]) {\n unreadChannels.push(allChannels[currentChannelId]);\n }\n }\n }\n\n return unreadChannels;\n },\n );\n\n const sortChannels = createSelector(\n 'sortChannels',\n (_: GlobalState, channels: Channel[]) => channels,\n getMyChannelMemberships,\n (state: GlobalState) => state.views.channel.lastUnreadChannel,\n isCollapsedThreadsEnabled,\n (channels, myMembers, lastUnreadChannel, crtEnabled) => {\n return sortUnreadChannels(channels, myMembers, lastUnreadChannel, crtEnabled);\n },\n );\n\n return (state: GlobalState) => {\n const channels = getUnsortedUnreadChannels(state);\n return sortChannels(state, channels);\n };\n})();\n\n// WARNING: below functions are used in getDisplayedChannels only. Do not use it elsewhere.\nfunction concatChannels(channelsA: Channel[], channelsB: Channel[]) {\n return [...channelsA, ...channelsB];\n}\nconst memoizedConcatChannels = memoizeResult(concatChannels);\n\n// Returns an array of channels in the order that they currently appear in the sidebar. Channels are filtered out if they\n// are hidden such as by a collapsed category or the unread filter.\nexport const getDisplayedChannels = createSelector(\n 'getDisplayedChannels',\n isUnreadFilterEnabled,\n getUnreadChannels,\n shouldShowUnreadsCategory,\n getChannelsInCategoryOrder,\n (unreadFilterEnabled, unreadChannels, showUnreadsCategory, channelsInCategoryOrder) => {\n if (unreadFilterEnabled) {\n return unreadChannels;\n }\n\n if (showUnreadsCategory) {\n return memoizedConcatChannels(unreadChannels, channelsInCategoryOrder);\n }\n\n return channelsInCategoryOrder;\n },\n);\n\n// Returns a selector that, given a category, returns the ids of channels visible in that category. The returned channels do not\n// include unread channels when the Unreads category is enabled.\nexport function makeGetFilteredChannelIdsForCategory(): (state: GlobalState, category: ChannelCategory) => string[] {\n const getChannelIdsForCategory = makeGetChannelIdsForCategory();\n\n return createSelector(\n 'makeGetFilteredChannelIdsForCategory',\n getChannelIdsForCategory,\n getUnreadChannelIdsSet,\n (state: GlobalState) => shouldShowUnreadsCategory(state),\n (channelIds, unreadChannelIdsSet, showUnreadsCategory) => {\n if (!showUnreadsCategory) {\n return channelIds;\n }\n\n const filtered = channelIds.filter((id) => !unreadChannelIdsSet.has(id));\n\n return filtered.length === channelIds.length ? channelIds : filtered;\n },\n );\n}\n\n// Returns a selector that, given a category, returns the ids of channels visible in that category. The returned channels do not\n// include unread channels when the Unreads category is enabled.\nexport function makeGetUnreadIdsForCategory(): (state: GlobalState, category: ChannelCategory) => string[] {\n const getChannelIdsForCategory = makeGetChannelIdsForCategory();\n const emptyList: string[] = [];\n\n return createSelector(\n 'makeGetFilteredChannelIdsForCategory',\n getChannelIdsForCategory,\n getUnreadChannelIdsSet,\n (state: GlobalState) => shouldShowUnreadsCategory(state),\n (channelIds, unreadChannelIdsSet, showUnreadsCategory) => {\n if (showUnreadsCategory) {\n return emptyList;\n }\n\n const filtered = channelIds.filter((id) => unreadChannelIdsSet.has(id));\n\n if (filtered.length === 0) {\n return emptyList;\n }\n\n return filtered.length === channelIds.length ? channelIds : filtered;\n },\n );\n}\n\nexport function getDraggingState(state: GlobalState): DraggingState {\n return state.views.channelSidebar.draggingState;\n}\n\nexport function isChannelSelected(state: GlobalState, channelId: string): boolean {\n return state.views.channelSidebar.multiSelectedChannelIds.indexOf(channelId) !== -1;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport moment from 'moment-timezone';\n\nimport type {UserCustomStatus} from '@mattermost/types/users';\nimport {CustomStatusDuration} from '@mattermost/types/users';\n\nimport {Preferences} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {get} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentTimezone} from 'mattermost-redux/selectors/entities/timezone';\nimport {getCurrentUser, getUser} from 'mattermost-redux/selectors/entities/users';\n\nimport {getEmojiMap} from 'selectors/emojis';\n\nimport {getCurrentMomentForTimezone} from 'utils/timezone';\nimport {isDateWithinDaysRange, TimeInformation} from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\n\nexport function makeGetCustomStatus(): (state: GlobalState, userID?: string) => UserCustomStatus | undefined {\n return createSelector(\n 'makeGetCustomStatus',\n (state: GlobalState, userID?: string) => (userID ? getUser(state, userID) : getCurrentUser(state)),\n (user) => {\n const userProps = user?.props || {};\n let customStatus;\n if (userProps.customStatus) {\n try {\n customStatus = JSON.parse(userProps.customStatus);\n } catch (error) {\n // do nothing if invalid, return undefined custom status.\n }\n }\n return customStatus;\n },\n );\n}\n\nexport function isCustomStatusExpired(state: GlobalState, customStatus?: UserCustomStatus) {\n if (!customStatus) {\n return true;\n }\n\n if (customStatus.duration === CustomStatusDuration.DONT_CLEAR) {\n return false;\n }\n\n const expiryTime = moment(customStatus.expires_at);\n const timezone = getCurrentTimezone(state);\n const currentTime = getCurrentMomentForTimezone(timezone);\n return currentTime.isSameOrAfter(expiryTime);\n}\n\n/**\n * getRecentCustomStatuses returns an array of the current user's recent custom statuses with any statuses using\n * non-loaded or non-existent emojis filtered out.\n */\nexport const getRecentCustomStatuses: (state: GlobalState) => UserCustomStatus[] = createSelector(\n 'getRecentCustomStatuses',\n (state: GlobalState) => get(state, Preferences.CATEGORY_CUSTOM_STATUS, Preferences.NAME_RECENT_CUSTOM_STATUSES),\n getEmojiMap,\n (value, emojiMap) => {\n if (!value) {\n return [];\n }\n\n let recentCustomStatuses: UserCustomStatus[] = JSON.parse(value);\n recentCustomStatuses = recentCustomStatuses.filter((customStatus) => emojiMap.has(customStatus.emoji));\n\n return recentCustomStatuses;\n },\n);\n\nexport function isCustomStatusEnabled(state: GlobalState) {\n const config = getConfig(state);\n return config && config.EnableCustomUserStatuses === 'true';\n}\n\nfunction showCustomStatusPulsatingDotAndPostHeader(state: GlobalState) {\n // only show this for users after the first seven days\n const currentUser = getCurrentUser(state);\n const hasUserCreationMoreThanSevenDays = isDateWithinDaysRange(currentUser?.create_at, 7, TimeInformation.FUTURE);\n const customStatusTutorialState = get(state, Preferences.CATEGORY_CUSTOM_STATUS, Preferences.NAME_CUSTOM_STATUS_TUTORIAL_STATE);\n const modalAlreadyViewed = customStatusTutorialState && JSON.parse(customStatusTutorialState)[Preferences.CUSTOM_STATUS_MODAL_VIEWED];\n return !modalAlreadyViewed && hasUserCreationMoreThanSevenDays;\n}\n\nexport function showStatusDropdownPulsatingDot(state: GlobalState) {\n return showCustomStatusPulsatingDotAndPostHeader(state);\n}\n\nexport function showPostHeaderUpdateStatusButton(state: GlobalState) {\n return showCustomStatusPulsatingDotAndPostHeader(state);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport moment from 'moment';\n\nimport type {Post} from '@mattermost/types/posts';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserThread} from '@mattermost/types/threads';\n\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/common';\nimport {makeGetPostsForIds} from 'mattermost-redux/selectors/entities/posts';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {getThreads} from 'mattermost-redux/selectors/entities/threads';\nimport {createIdsSelector} from 'mattermost-redux/utils/helpers';\nimport {DATE_LINE, makeCombineUserActivityPosts, START_OF_NEW_MESSAGES} from 'mattermost-redux/utils/post_list';\nimport {getUserCurrentTimezone} from 'mattermost-redux/utils/timezone_utils';\n\nimport {getIsRhsOpen, getSelectedPostId} from 'selectors/rhs';\n\nimport {isFromWebhook} from 'utils/post_utils';\n\nimport type {GlobalState} from 'types/store';\nimport type {ViewsState} from 'types/store/views';\n\ninterface PostFilterOptions {\n postIds: Array;\n showDate: boolean;\n lastViewedAt?: number;\n}\n\nexport function getSelectedThreadIdInTeam(state: GlobalState): ViewsState['threads']['selectedThreadIdInTeam'] {\n return state.views.threads.selectedThreadIdInTeam;\n}\n\nexport const getSelectedThreadIdInCurrentTeam: (state: GlobalState) => ViewsState['threads']['selectedThreadIdInTeam'][Team['id']] = createSelector(\n 'getSelectedThreadIdInCurrentTeam',\n getCurrentTeamId,\n getSelectedThreadIdInTeam,\n (\n currentTeamId,\n selectedThreadIdInTeam,\n ) => {\n return selectedThreadIdInTeam?.[currentTeamId] ?? null;\n },\n);\n\nexport const getSelectedThreadInCurrentTeam: (state: GlobalState) => UserThread | null = createSelector(\n 'getSelectedThreadInCurrentTeam',\n getCurrentTeamId,\n getSelectedThreadIdInTeam,\n getThreads,\n (\n currentTeamId,\n selectedThreadIdInTeam,\n threads,\n ) => {\n const threadId = selectedThreadIdInTeam?.[currentTeamId];\n return threadId ? threads[threadId] : null;\n },\n);\n\nexport function makeGetThreadLastViewedAt(): (state: GlobalState, threadId: Post['id']) => number {\n return createSelector(\n 'makeGetThreadLastViewedAt',\n (state: GlobalState, threadId: Post['id']) => state.views.threads.lastViewedAt[threadId],\n getThreads,\n (_state, threadId) => threadId,\n (lastViewedAt, threads, threadId) => {\n if (typeof lastViewedAt === 'number') {\n return lastViewedAt;\n }\n\n return threads[threadId]?.last_viewed_at;\n },\n );\n}\n\nexport const isThreadOpen = (state: GlobalState, threadId: UserThread['id']): boolean => {\n return (\n threadId === getSelectedThreadIdInCurrentTeam(state) ||\n (getIsRhsOpen(state) && threadId === getSelectedPostId(state))\n );\n};\n\nexport const isThreadManuallyUnread = (state: GlobalState, threadId: UserThread['id']): boolean => {\n return state.views.threads.manuallyUnread[threadId] || false;\n};\n\n// Returns a selector that, given the state and an object containing an array of postIds and an optional\n// timestamp of when the channel was last read, returns a memoized array of postIds interspersed with\n// day indicators, an optional new message indicator and create comment.\nexport function makeFilterRepliesAndAddSeparators() {\n const getPostsForIds = makeGetPostsForIds();\n\n return createIdsSelector(\n 'makeFilterPostsAndAddSeparators',\n (state: GlobalState, {postIds}: PostFilterOptions) => getPostsForIds(state, postIds),\n (_state: GlobalState, {lastViewedAt}: PostFilterOptions) => lastViewedAt,\n (_state: GlobalState, {showDate}: PostFilterOptions) => showDate,\n getCurrentUser,\n (posts, lastViewedAt, showDate, currentUser) => {\n if (posts.length === 0 || !currentUser) {\n return [];\n }\n\n const out: string[] = [];\n let lastDate;\n let addedNewMessagesIndicator = false;\n\n // Iterating through the posts from oldest to newest\n for (let i = posts.length - 1; i >= 0; i--) {\n const post = posts[i];\n\n if (!post) {\n continue;\n }\n\n if (showDate) {\n // Push on a date header if the last post was on a different day than the current one\n const postDate = new Date(post.create_at);\n const currentOffset = postDate.getTimezoneOffset() * 60 * 1000;\n const timezone = getUserCurrentTimezone(currentUser.timezone);\n if (timezone) {\n const zone = moment.tz.zone(timezone);\n if (zone) {\n const timezoneOffset = zone.utcOffset(post.create_at) * 60 * 1000;\n postDate.setTime(post.create_at + (currentOffset - timezoneOffset));\n }\n }\n\n if ((!lastDate || lastDate.toDateString() !== postDate.toDateString())) {\n out.push(DATE_LINE + postDate.getTime());\n lastDate = postDate;\n }\n }\n\n if (\n typeof lastViewedAt === 'number' &&\n post.create_at >= lastViewedAt &&\n (i < posts.length - 1) &&\n (post.user_id !== currentUser.id || isFromWebhook(post)) &&\n !addedNewMessagesIndicator\n ) {\n out.push(START_OF_NEW_MESSAGES);\n addedNewMessagesIndicator = true;\n }\n\n out.push(post.id);\n }\n\n // Flip it back to newest to oldest\n return out.reverse();\n },\n );\n}\n\nexport function makePrepareReplyIdsForThreadViewer() {\n const filterRepliesAndAddSeparators = makeFilterRepliesAndAddSeparators();\n const combineUserActivityPosts = makeCombineUserActivityPosts();\n return (state: GlobalState, options: PostFilterOptions) => {\n const postIds = filterRepliesAndAddSeparators(state, options);\n return combineUserActivityPosts(state, postIds);\n };\n}\n\nexport function getThreadToastStatus(state: GlobalState) {\n return state.views.threads.toastStatus;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {getRedirectChannelNameForTeam} from 'mattermost-redux/selectors/entities/channels';\n\nimport {getBasePath} from 'selectors/general';\nimport store from 'stores/redux_store';\n\nimport {PreviousViewedTypes} from 'utils/constants';\n\nconst getPreviousTeamIdKey = (userId: string) => ['user_prev_team', userId].join(':');\nconst getPreviousChannelNameKey = (userId: string | null, teamId: string) => ['user_team_prev_channel', userId, teamId].join(':');\nconst getPreviousViewedTypeKey = (userId: string | null, teamId: string) => ['user_team_prev_viewed_type', userId, teamId].join(':');\nconst getPenultimateViewedTypeKey = (userId: string, teamId: string) => ['user_team_penultimate_viewed_type', userId, teamId].join(':');\nexport const getPenultimateChannelNameKey = (userId: string, teamId: string) => ['user_team_penultimate_channel', userId, teamId].join(':');\nconst getRecentEmojisKey = (userId: string) => ['recent_emojis', userId].join(':');\nconst getWasLoggedInKey = () => 'was_logged_in';\nconst teamIdJoinedOnLoadKey = 'teamIdJoinedOnLoad';\nconst wasNotifiedOfLogInKey = 'was_notified_of_login';\n\nconst getPathScopedKey = (path: string, key: string) => {\n if (path === '' || path === '/') {\n return key;\n }\n\n return [path, key].join(':');\n};\n\n// LocalStorageStore exposes an interface for accessing entries in the localStorage.\n//\n// Note that this excludes keys managed by redux-persist. The latter cannot currently be used for\n// key/value storage that persists beyond logout. Ideally, we could purge all but certain parts\n// of the Redux store so as to allow them to be used on re-login.\n\n// Lets open a separate issue to refactor local storage and state interactions.\n// This whole store can be connected to redux\nclass LocalStorageStoreClass {\n getItem(key: string, state = store.getState()) {\n const basePath = getBasePath(state);\n\n return localStorage.getItem(getPathScopedKey(basePath, key));\n }\n\n setItem(key: string, value: string | null) {\n const state = store.getState();\n const basePath = getBasePath(state);\n\n localStorage.setItem(getPathScopedKey(basePath, key), value === null ? 'null' : value);\n }\n\n getPreviousChannelName(userId: string | null, teamId: string, state = store.getState()) {\n return this.getItem(getPreviousChannelNameKey(userId, teamId), state) || getRedirectChannelNameForTeam(state, teamId);\n }\n\n getPreviousViewedType(userId: string | null, teamId: string, state = store.getState()) {\n return this.getItem(getPreviousViewedTypeKey(userId, teamId), state) ?? PreviousViewedTypes.CHANNELS;\n }\n\n removeItem(key: string) {\n const state = store.getState();\n const basePath = getBasePath(state);\n\n localStorage.removeItem(getPathScopedKey(basePath, key));\n }\n\n setPreviousChannelName(userId: string, teamId: string, channelName: string) {\n this.setItem(getPreviousChannelNameKey(userId, teamId), channelName);\n }\n\n setPreviousViewedType(userId: string, teamId: string, channelType: string) {\n this.setItem(getPreviousViewedTypeKey(userId, teamId), channelType);\n }\n\n getPenultimateViewedType(userId: string, teamId: string, state = store.getState()) {\n return this.getItem(getPenultimateViewedTypeKey(userId, teamId), state) ?? PreviousViewedTypes.CHANNELS;\n }\n\n setPenultimateViewedType(userId: string, teamId: string, channelType: string) {\n this.setItem(getPenultimateViewedTypeKey(userId, teamId), channelType);\n }\n getPenultimateChannelName(userId: string, teamId: string, state = store.getState()) {\n return this.getItem(getPenultimateChannelNameKey(userId, teamId), state) || getRedirectChannelNameForTeam(state, teamId);\n }\n\n setPenultimateChannelName(userId: string, teamId: string, channelName: string) {\n this.setItem(getPenultimateChannelNameKey(userId, teamId), channelName);\n }\n\n removePreviousChannelName(userId: string, teamId: string, state = store.getState()) {\n this.setItem(getPreviousChannelNameKey(userId, teamId), this.getPenultimateChannelName(userId, teamId, state));\n this.removeItem(getPenultimateChannelNameKey(userId, teamId));\n }\n\n removePreviousChannelType(userId: string, teamId: string, state = store.getStore()) {\n this.setItem(getPreviousViewedTypeKey(userId, teamId), this.getPenultimateViewedType(userId, teamId, state));\n this.removeItem(getPenultimateViewedTypeKey(userId, teamId));\n }\n\n removePreviousChannel(userId: string, teamId: string, state = store.getStore()) {\n this.removePreviousChannelName(userId, teamId, state);\n this.removePreviousChannelType(userId, teamId, state);\n }\n\n removePenultimateChannelName(userId: string, teamId: string) {\n this.removeItem(getPenultimateChannelNameKey(userId, teamId));\n }\n\n removePenultimateViewedType(userId: string, teamId: string) {\n this.removeItem(getPenultimateViewedTypeKey(userId, teamId));\n }\n\n getPreviousTeamId(userId: string) {\n return this.getItem(getPreviousTeamIdKey(userId));\n }\n\n setPreviousTeamId(userId: string, teamId: string) {\n this.setItem(getPreviousTeamIdKey(userId), teamId);\n }\n\n /**\n * Returns the list of recently used emojis for the user in string format.\n * @param {string} userId The user ID.\n * @returns The list of emojis in string format. eg. '['smile','+1', 'pizza']'\n * @memberof LocalStorageStore\n * @example\n * const recentEmojis = LocalStorageStore.getRecentEmojis('userId');\n * if (recentEmojis) {\n * const recentEmojisArray = JSON.parse(recentEmojis);\n * // do something with the emoji list\n * }\n **/\n getRecentEmojis(userId: string) {\n const recentEmojis = this.getItem(getRecentEmojisKey(userId));\n if (!recentEmojis) {\n return null;\n }\n\n return recentEmojis;\n }\n\n getTeamIdJoinedOnLoad() {\n return this.getItem(teamIdJoinedOnLoadKey);\n }\n\n setTeamIdJoinedOnLoad(teamId: string | null) {\n this.setItem(teamIdJoinedOnLoadKey, teamId);\n }\n\n setWasLoggedIn(wasLoggedIn: boolean) {\n if (wasLoggedIn) {\n this.setItem(getWasLoggedInKey(), 'true');\n } else {\n this.setItem(getWasLoggedInKey(), 'false');\n }\n }\n\n getWasLoggedIn() {\n return this.getItem(getWasLoggedInKey()) === 'true';\n }\n\n // the following flag's setter and getter are used to make sure a user is notified (via aria-label)\n // about a successful login only once (MM-50821)\n setWasNotifiedOfLogIn(wasNotified: boolean) {\n this.setItem(wasNotifiedOfLogInKey, String(wasNotified));\n }\n\n getWasNotifiedOfLogIn() {\n return this.getItem(wasNotifiedOfLogInKey) === 'true';\n }\n}\n\nconst LocalStorageStore = new LocalStorageStoreClass();\n\nexport default LocalStorageStore;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage} from 'react-intl';\n\nimport ConfirmModal from 'components/confirm_modal';\n\ntype Props = {\n channelName: string;\n onCancel: () => void;\n onExited: () => void;\n onJoin: () => void;\n}\n\nfunction JoinPrivateChannelModal({channelName, onCancel, onExited, onJoin}: Props) {\n const join = React.useRef(false);\n const [show, setShow] = React.useState(true);\n\n const handleJoin = () => {\n join.current = true;\n handleHide();\n };\n\n const handleHide = () => {\n setShow(false);\n };\n\n const handleExited = () => {\n if (join.current) {\n if (typeof onJoin === 'function') {\n onJoin();\n }\n } else if (typeof onCancel === 'function') {\n onCancel();\n }\n\n onExited();\n };\n\n return (\n \n }\n message={\n {channelName},\n }}\n />\n }\n confirmButtonText={\n \n }\n onConfirm={handleJoin}\n onCancel={handleHide}\n onExited={handleExited}\n />\n );\n}\n\nexport default React.memo(JoinPrivateChannelModal);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Channel, ChannelType} from '@mattermost/types/channels';\nimport type {Team} from '@mattermost/types/teams';\n\nimport {TeamTypes} from 'mattermost-redux/action_types';\nimport {removeUserFromTeam} from 'mattermost-redux/actions/teams';\nimport Permissions from 'mattermost-redux/constants/permissions';\nimport {getRedirectChannelNameForTeam} from 'mattermost-redux/selectors/entities/channels';\nimport {haveIChannelPermission} from 'mattermost-redux/selectors/entities/roles';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {openModal} from 'actions/views/modals';\nimport LocalStorageStore from 'stores/local_storage_store';\n\nimport JoinPrivateChannelModal from 'components/join_private_channel_modal';\n\nimport Constants, {ModalIdentifiers} from 'utils/constants';\nimport * as Utils from 'utils/utils';\n\nimport type {ActionFuncAsync, GlobalState} from 'types/store';\n\nimport {getHistory} from './browser_history';\nimport {cleanUpUrlable} from './url';\n\nexport function canManageMembers(state: GlobalState, channel: Channel) {\n if (channel.type === Constants.PRIVATE_CHANNEL) {\n return haveIChannelPermission(\n state,\n channel.team_id,\n channel.id,\n Permissions.MANAGE_PRIVATE_CHANNEL_MEMBERS,\n );\n }\n\n if (channel.type === Constants.OPEN_CHANNEL) {\n return haveIChannelPermission(\n state,\n channel.team_id,\n channel.id,\n Permissions.MANAGE_PUBLIC_CHANNEL_MEMBERS,\n );\n }\n\n return true;\n}\n\nexport function findNextUnreadChannelId(curChannelId: string, allChannelIds: string[], unreadChannelIds: string[], direction: number) {\n const curIndex = allChannelIds.indexOf(curChannelId);\n\n for (let i = 1; i < allChannelIds.length; i++) {\n const index = Utils.mod(curIndex + (i * direction), allChannelIds.length);\n\n if (unreadChannelIds.includes(allChannelIds[index])) {\n return index;\n }\n }\n\n return -1;\n}\n\nexport function isArchivedChannel(channel?: Channel) {\n return Boolean(channel && channel.delete_at !== 0);\n}\n\ntype JoinPrivateChannelPromptResult = {\n data: {\n join: boolean;\n };\n};\n\nexport function joinPrivateChannelPrompt(team: Team, channelDisplayName: string, handleOnCancel = true): ActionFuncAsync {\n return async (dispatch, getState) => {\n const result: JoinPrivateChannelPromptResult = await new Promise((resolve) => {\n const modalData = {\n modalId: ModalIdentifiers.JOIN_CHANNEL_PROMPT,\n dialogType: JoinPrivateChannelModal,\n dialogProps: {\n channelName: channelDisplayName,\n onJoin: () => {\n LocalStorageStore.setTeamIdJoinedOnLoad(null);\n resolve({\n data: {join: true},\n });\n },\n onCancel: async () => {\n if (handleOnCancel) {\n const state = getState();\n\n // If auto joined the team on load, leave the team as well\n if (LocalStorageStore.getTeamIdJoinedOnLoad() === team.id) {\n await dispatch(removeUserFromTeam(team.id, getCurrentUserId(state)));\n dispatch({type: TeamTypes.LEAVE_TEAM, data: team});\n getHistory().replace('/');\n } else {\n const redirectChannelName = getRedirectChannelNameForTeam(state, team.id);\n getHistory().replace(`/${team.name}/channels/${redirectChannelName}`);\n }\n }\n LocalStorageStore.setTeamIdJoinedOnLoad(null);\n resolve({\n data: {join: false},\n });\n },\n },\n };\n dispatch(openModal(modalData));\n });\n return result;\n };\n}\n\nexport function makeNewEmptyChannel(displayName: string, teamId: string): Channel {\n return {\n team_id: teamId,\n name: cleanUpUrlable(displayName),\n display_name: displayName,\n purpose: '',\n header: '',\n type: Constants.OPEN_CHANNEL as ChannelType,\n create_at: 0,\n creator_id: '',\n delete_at: 0,\n group_constrained: false,\n id: '',\n last_post_at: 0,\n last_root_post_at: 0,\n scheme_id: '',\n update_at: 0,\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n// This file is automatically generated via `/webapp/channels/build/make_emojis.mjs`. Do not modify it manually.\n\n/* eslint-disable */\n\nimport memoize from 'memoize-one';\n\nimport emojis from 'utils/emoji.json';\n\nimport spriteSheet from 'images/emoji-sheets/apple-sheet.png';\n\nexport const Emojis = emojis;\n\nexport const EmojiIndicesByAlias = new Map([[\"grinning\",0],[\"smiley\",1],[\"smile\",2],[\"grin\",3],[\"laughing\",4],[\"satisfied\",4],[\"sweat_smile\",5],[\"rolling_on_the_floor_laughing\",6],[\"rofl\",6],[\"joy\",7],[\"slightly_smiling_face\",8],[\"upside_down_face\",9],[\"wink\",10],[\"blush\",11],[\"innocent\",12],[\"smiling_face_with_3_hearts\",13],[\"heart_eyes\",14],[\"star-struck\",15],[\"grinning_face_with_star_eyes\",15],[\"kissing_heart\",16],[\"kissing\",17],[\"relaxed\",18],[\"kissing_closed_eyes\",19],[\"kissing_smiling_eyes\",20],[\"smiling_face_with_tear\",21],[\"yum\",22],[\"stuck_out_tongue\",23],[\"stuck_out_tongue_winking_eye\",24],[\"zany_face\",25],[\"grinning_face_with_one_large_and_one_small_eye\",25],[\"stuck_out_tongue_closed_eyes\",26],[\"money_mouth_face\",27],[\"hugging_face\",28],[\"hugs\",28],[\"face_with_hand_over_mouth\",29],[\"smiling_face_with_smiling_eyes_and_hand_covering_mouth\",29],[\"shushing_face\",30],[\"face_with_finger_covering_closed_lips\",30],[\"thinking_face\",31],[\"thinking\",31],[\"zipper_mouth_face\",32],[\"face_with_raised_eyebrow\",33],[\"face_with_one_eyebrow_raised\",33],[\"neutral_face\",34],[\"expressionless\",35],[\"no_mouth\",36],[\"smirk\",37],[\"unamused\",38],[\"face_with_rolling_eyes\",39],[\"roll_eyes\",39],[\"grimacing\",40],[\"lying_face\",41],[\"relieved\",42],[\"pensive\",43],[\"sleepy\",44],[\"drooling_face\",45],[\"sleeping\",46],[\"mask\",47],[\"face_with_thermometer\",48],[\"face_with_head_bandage\",49],[\"nauseated_face\",50],[\"face_vomiting\",51],[\"face_with_open_mouth_vomiting\",51],[\"sneezing_face\",52],[\"hot_face\",53],[\"cold_face\",54],[\"woozy_face\",55],[\"dizzy_face\",56],[\"exploding_head\",57],[\"shocked_face_with_exploding_head\",57],[\"face_with_cowboy_hat\",58],[\"cowboy_hat_face\",58],[\"partying_face\",59],[\"disguised_face\",60],[\"sunglasses\",61],[\"nerd_face\",62],[\"face_with_monocle\",63],[\"confused\",64],[\"worried\",65],[\"slightly_frowning_face\",66],[\"white_frowning_face\",67],[\"frowning_face\",67],[\"open_mouth\",68],[\"hushed\",69],[\"astonished\",70],[\"flushed\",71],[\"pleading_face\",72],[\"frowning\",73],[\"anguished\",74],[\"fearful\",75],[\"cold_sweat\",76],[\"disappointed_relieved\",77],[\"cry\",78],[\"sob\",79],[\"scream\",80],[\"confounded\",81],[\"persevere\",82],[\"disappointed\",83],[\"sweat\",84],[\"weary\",85],[\"tired_face\",86],[\"yawning_face\",87],[\"triumph\",88],[\"rage\",89],[\"pout\",89],[\"angry\",90],[\"face_with_symbols_on_mouth\",91],[\"serious_face_with_symbols_covering_mouth\",91],[\"smiling_imp\",92],[\"imp\",93],[\"skull\",94],[\"skull_and_crossbones\",95],[\"hankey\",96],[\"poop\",96],[\"shit\",96],[\"clown_face\",97],[\"japanese_ogre\",98],[\"japanese_goblin\",99],[\"ghost\",100],[\"alien\",101],[\"space_invader\",102],[\"robot_face\",103],[\"robot\",103],[\"smiley_cat\",104],[\"smile_cat\",105],[\"joy_cat\",106],[\"heart_eyes_cat\",107],[\"smirk_cat\",108],[\"kissing_cat\",109],[\"scream_cat\",110],[\"crying_cat_face\",111],[\"pouting_cat\",112],[\"see_no_evil\",113],[\"hear_no_evil\",114],[\"speak_no_evil\",115],[\"kiss\",116],[\"love_letter\",117],[\"cupid\",118],[\"gift_heart\",119],[\"sparkling_heart\",120],[\"heartpulse\",121],[\"heartbeat\",122],[\"revolving_hearts\",123],[\"two_hearts\",124],[\"heart_decoration\",125],[\"heavy_heart_exclamation_mark_ornament\",126],[\"heavy_heart_exclamation\",126],[\"broken_heart\",127],[\"heart\",128],[\"orange_heart\",129],[\"yellow_heart\",130],[\"green_heart\",131],[\"blue_heart\",132],[\"purple_heart\",133],[\"brown_heart\",134],[\"black_heart\",135],[\"white_heart\",136],[\"100\",137],[\"anger\",138],[\"boom\",139],[\"collision\",139],[\"dizzy\",140],[\"sweat_drops\",141],[\"dash\",142],[\"hole\",143],[\"bomb\",144],[\"speech_balloon\",145],[\"eye-in-speech-bubble\",146],[\"left_speech_bubble\",147],[\"right_anger_bubble\",148],[\"thought_balloon\",149],[\"zzz\",150],[\"wave\",151],[\"raised_back_of_hand\",152],[\"raised_hand_with_fingers_splayed\",153],[\"hand\",154],[\"raised_hand\",154],[\"spock-hand\",155],[\"vulcan_salute\",155],[\"ok_hand\",156],[\"pinched_fingers\",157],[\"pinching_hand\",158],[\"v\",159],[\"crossed_fingers\",160],[\"hand_with_index_and_middle_fingers_crossed\",160],[\"i_love_you_hand_sign\",161],[\"the_horns\",162],[\"sign_of_the_horns\",162],[\"metal\",162],[\"call_me_hand\",163],[\"point_left\",164],[\"point_right\",165],[\"point_up_2\",166],[\"middle_finger\",167],[\"reversed_hand_with_middle_finger_extended\",167],[\"fu\",167],[\"point_down\",168],[\"point_up\",169],[\"+1\",170],[\"thumbsup\",170],[\"-1\",171],[\"thumbsdown\",171],[\"fist\",172],[\"fist_raised\",172],[\"facepunch\",173],[\"punch\",173],[\"fist_oncoming\",173],[\"left-facing_fist\",174],[\"fist_left\",174],[\"right-facing_fist\",175],[\"fist_right\",175],[\"clap\",176],[\"raised_hands\",177],[\"open_hands\",178],[\"palms_up_together\",179],[\"handshake\",180],[\"pray\",181],[\"writing_hand\",182],[\"nail_care\",183],[\"selfie\",184],[\"muscle\",185],[\"mechanical_arm\",186],[\"mechanical_leg\",187],[\"leg\",188],[\"foot\",189],[\"ear\",190],[\"ear_with_hearing_aid\",191],[\"nose\",192],[\"brain\",193],[\"anatomical_heart\",194],[\"lungs\",195],[\"tooth\",196],[\"bone\",197],[\"eyes\",198],[\"eye\",199],[\"tongue\",200],[\"lips\",201],[\"baby\",202],[\"child\",203],[\"boy\",204],[\"girl\",205],[\"adult\",206],[\"person_with_blond_hair\",207],[\"man\",208],[\"bearded_person\",209],[\"red_haired_man\",210],[\"curly_haired_man\",211],[\"white_haired_man\",212],[\"bald_man\",213],[\"woman\",214],[\"red_haired_woman\",215],[\"red_haired_person\",216],[\"curly_haired_woman\",217],[\"curly_haired_person\",218],[\"white_haired_woman\",219],[\"white_haired_person\",220],[\"bald_woman\",221],[\"bald_person\",222],[\"blond-haired-woman\",223],[\"blonde_woman\",223],[\"blond-haired-man\",224],[\"blonde_man\",224],[\"older_adult\",225],[\"older_man\",226],[\"older_woman\",227],[\"person_frowning\",228],[\"man-frowning\",229],[\"frowning_man\",229],[\"woman-frowning\",230],[\"frowning_woman\",230],[\"person_with_pouting_face\",231],[\"man-pouting\",232],[\"pouting_man\",232],[\"woman-pouting\",233],[\"pouting_woman\",233],[\"no_good\",234],[\"man-gesturing-no\",235],[\"ng_man\",235],[\"no_good_man\",235],[\"woman-gesturing-no\",236],[\"no_good_woman\",236],[\"ng_woman\",236],[\"ok_woman\",237],[\"man-gesturing-ok\",238],[\"ok_man\",238],[\"woman-gesturing-ok\",239],[\"information_desk_person\",240],[\"man-tipping-hand\",241],[\"tipping_hand_man\",241],[\"woman-tipping-hand\",242],[\"tipping_hand_woman\",242],[\"raising_hand\",243],[\"man-raising-hand\",244],[\"raising_hand_man\",244],[\"woman-raising-hand\",245],[\"raising_hand_woman\",245],[\"deaf_person\",246],[\"deaf_man\",247],[\"deaf_woman\",248],[\"bow\",249],[\"man-bowing\",250],[\"bowing_man\",250],[\"woman-bowing\",251],[\"bowing_woman\",251],[\"face_palm\",252],[\"man-facepalming\",253],[\"man_facepalming\",253],[\"woman-facepalming\",254],[\"woman_facepalming\",254],[\"shrug\",255],[\"man-shrugging\",256],[\"man_shrugging\",256],[\"woman-shrugging\",257],[\"woman_shrugging\",257],[\"health_worker\",258],[\"doctor\",258],[\"male-doctor\",259],[\"man_health_worker\",259],[\"female-doctor\",260],[\"woman_health_worker\",260],[\"student\",261],[\"male-student\",262],[\"man_student\",262],[\"female-student\",263],[\"woman_student\",263],[\"teacher\",264],[\"male-teacher\",265],[\"man_teacher\",265],[\"female-teacher\",266],[\"woman_teacher\",266],[\"judge\",267],[\"male-judge\",268],[\"man_judge\",268],[\"female-judge\",269],[\"woman_judge\",269],[\"farmer\",270],[\"male-farmer\",271],[\"man_farmer\",271],[\"female-farmer\",272],[\"woman_farmer\",272],[\"cook\",273],[\"male-cook\",274],[\"man_cook\",274],[\"female-cook\",275],[\"woman_cook\",275],[\"mechanic\",276],[\"male-mechanic\",277],[\"man_mechanic\",277],[\"female-mechanic\",278],[\"woman_mechanic\",278],[\"factory_worker\",279],[\"male-factory-worker\",280],[\"man_factory_worker\",280],[\"female-factory-worker\",281],[\"woman_factory_worker\",281],[\"office_worker\",282],[\"male-office-worker\",283],[\"man_office_worker\",283],[\"female-office-worker\",284],[\"woman_office_worker\",284],[\"scientist\",285],[\"male-scientist\",286],[\"man_scientist\",286],[\"female-scientist\",287],[\"woman_scientist\",287],[\"technologist\",288],[\"male-technologist\",289],[\"man_technologist\",289],[\"female-technologist\",290],[\"woman_technologist\",290],[\"singer\",291],[\"male-singer\",292],[\"man_singer\",292],[\"female-singer\",293],[\"woman_singer\",293],[\"artist\",294],[\"male-artist\",295],[\"man_artist\",295],[\"female-artist\",296],[\"woman_artist\",296],[\"pilot\",297],[\"male-pilot\",298],[\"man_pilot\",298],[\"female-pilot\",299],[\"woman_pilot\",299],[\"astronaut\",300],[\"male-astronaut\",301],[\"man_astronaut\",301],[\"female-astronaut\",302],[\"woman_astronaut\",302],[\"firefighter\",303],[\"male-firefighter\",304],[\"man_firefighter\",304],[\"female-firefighter\",305],[\"woman_firefighter\",305],[\"cop\",306],[\"male-police-officer\",307],[\"policeman\",307],[\"female-police-officer\",308],[\"policewoman\",308],[\"sleuth_or_spy\",309],[\"detective\",309],[\"male-detective\",310],[\"male_detective\",310],[\"female-detective\",311],[\"female_detective\",311],[\"guardsman\",312],[\"male-guard\",313],[\"female-guard\",314],[\"guardswoman\",314],[\"ninja\",315],[\"construction_worker\",316],[\"male-construction-worker\",317],[\"construction_worker_man\",317],[\"female-construction-worker\",318],[\"construction_worker_woman\",318],[\"prince\",319],[\"princess\",320],[\"man_with_turban\",321],[\"man-wearing-turban\",322],[\"woman-wearing-turban\",323],[\"woman_with_turban\",323],[\"man_with_gua_pi_mao\",324],[\"person_with_headscarf\",325],[\"person_in_tuxedo\",326],[\"man_in_tuxedo\",327],[\"woman_in_tuxedo\",328],[\"bride_with_veil\",329],[\"man_with_veil\",330],[\"woman_with_veil\",331],[\"pregnant_woman\",332],[\"breast-feeding\",333],[\"woman_feeding_baby\",334],[\"man_feeding_baby\",335],[\"person_feeding_baby\",336],[\"angel\",337],[\"santa\",338],[\"mrs_claus\",339],[\"mother_christmas\",339],[\"mx_claus\",340],[\"superhero\",341],[\"male_superhero\",342],[\"female_superhero\",343],[\"supervillain\",344],[\"male_supervillain\",345],[\"female_supervillain\",346],[\"mage\",347],[\"male_mage\",348],[\"female_mage\",349],[\"fairy\",350],[\"male_fairy\",351],[\"female_fairy\",352],[\"vampire\",353],[\"male_vampire\",354],[\"female_vampire\",355],[\"merperson\",356],[\"merman\",357],[\"mermaid\",358],[\"elf\",359],[\"male_elf\",360],[\"female_elf\",361],[\"genie\",362],[\"male_genie\",363],[\"female_genie\",364],[\"zombie\",365],[\"male_zombie\",366],[\"female_zombie\",367],[\"massage\",368],[\"man-getting-massage\",369],[\"massage_man\",369],[\"woman-getting-massage\",370],[\"massage_woman\",370],[\"haircut\",371],[\"man-getting-haircut\",372],[\"haircut_man\",372],[\"woman-getting-haircut\",373],[\"haircut_woman\",373],[\"walking\",374],[\"man-walking\",375],[\"walking_man\",375],[\"woman-walking\",376],[\"walking_woman\",376],[\"standing_person\",377],[\"man_standing\",378],[\"woman_standing\",379],[\"kneeling_person\",380],[\"man_kneeling\",381],[\"woman_kneeling\",382],[\"person_with_probing_cane\",383],[\"man_with_probing_cane\",384],[\"woman_with_probing_cane\",385],[\"person_in_motorized_wheelchair\",386],[\"man_in_motorized_wheelchair\",387],[\"woman_in_motorized_wheelchair\",388],[\"person_in_manual_wheelchair\",389],[\"man_in_manual_wheelchair\",390],[\"woman_in_manual_wheelchair\",391],[\"runner\",392],[\"running\",392],[\"man-running\",393],[\"running_man\",393],[\"woman-running\",394],[\"running_woman\",394],[\"dancer\",395],[\"man_dancing\",396],[\"man_in_business_suit_levitating\",397],[\"business_suit_levitating\",397],[\"dancers\",398],[\"man-with-bunny-ears-partying\",399],[\"dancing_men\",399],[\"woman-with-bunny-ears-partying\",400],[\"dancing_women\",400],[\"person_in_steamy_room\",401],[\"man_in_steamy_room\",402],[\"woman_in_steamy_room\",403],[\"person_climbing\",404],[\"man_climbing\",405],[\"woman_climbing\",406],[\"fencer\",407],[\"person_fencing\",407],[\"horse_racing\",408],[\"skier\",409],[\"snowboarder\",410],[\"golfer\",411],[\"man-golfing\",412],[\"golfing_man\",412],[\"woman-golfing\",413],[\"golfing_woman\",413],[\"surfer\",414],[\"man-surfing\",415],[\"surfing_man\",415],[\"woman-surfing\",416],[\"surfing_woman\",416],[\"rowboat\",417],[\"man-rowing-boat\",418],[\"rowing_man\",418],[\"woman-rowing-boat\",419],[\"rowing_woman\",419],[\"swimmer\",420],[\"man-swimming\",421],[\"swimming_man\",421],[\"woman-swimming\",422],[\"swimming_woman\",422],[\"person_with_ball\",423],[\"man-bouncing-ball\",424],[\"basketball_man\",424],[\"woman-bouncing-ball\",425],[\"basketball_woman\",425],[\"weight_lifter\",426],[\"man-lifting-weights\",427],[\"weight_lifting_man\",427],[\"woman-lifting-weights\",428],[\"weight_lifting_woman\",428],[\"bicyclist\",429],[\"man-biking\",430],[\"biking_man\",430],[\"woman-biking\",431],[\"biking_woman\",431],[\"mountain_bicyclist\",432],[\"man-mountain-biking\",433],[\"mountain_biking_man\",433],[\"woman-mountain-biking\",434],[\"mountain_biking_woman\",434],[\"person_doing_cartwheel\",435],[\"man-cartwheeling\",436],[\"man_cartwheeling\",436],[\"woman-cartwheeling\",437],[\"woman_cartwheeling\",437],[\"wrestlers\",438],[\"man-wrestling\",439],[\"men_wrestling\",439],[\"woman-wrestling\",440],[\"women_wrestling\",440],[\"water_polo\",441],[\"man-playing-water-polo\",442],[\"man_playing_water_polo\",442],[\"woman-playing-water-polo\",443],[\"woman_playing_water_polo\",443],[\"handball\",444],[\"man-playing-handball\",445],[\"man_playing_handball\",445],[\"woman-playing-handball\",446],[\"woman_playing_handball\",446],[\"juggling\",447],[\"man-juggling\",448],[\"man_juggling\",448],[\"woman-juggling\",449],[\"woman_juggling\",449],[\"person_in_lotus_position\",450],[\"man_in_lotus_position\",451],[\"woman_in_lotus_position\",452],[\"bath\",453],[\"sleeping_accommodation\",454],[\"sleeping_bed\",454],[\"people_holding_hands\",455],[\"two_women_holding_hands\",456],[\"women_holding_hands\",456],[\"man_and_woman_holding_hands\",457],[\"woman_and_man_holding_hands\",457],[\"couple\",457],[\"two_men_holding_hands\",458],[\"men_holding_hands\",458],[\"couplekiss\",459],[\"woman-kiss-man\",460],[\"couplekiss_man_woman\",460],[\"man-kiss-man\",461],[\"couplekiss_man_man\",461],[\"woman-kiss-woman\",462],[\"couplekiss_woman_woman\",462],[\"couple_with_heart\",463],[\"woman-heart-man\",464],[\"couple_with_heart_woman_man\",464],[\"man-heart-man\",465],[\"couple_with_heart_man_man\",465],[\"woman-heart-woman\",466],[\"couple_with_heart_woman_woman\",466],[\"family\",467],[\"man-woman-boy\",468],[\"family_man_woman_boy\",468],[\"man-woman-girl\",469],[\"family_man_woman_girl\",469],[\"man-woman-girl-boy\",470],[\"family_man_woman_girl_boy\",470],[\"man-woman-boy-boy\",471],[\"family_man_woman_boy_boy\",471],[\"man-woman-girl-girl\",472],[\"family_man_woman_girl_girl\",472],[\"man-man-boy\",473],[\"family_man_man_boy\",473],[\"man-man-girl\",474],[\"family_man_man_girl\",474],[\"man-man-girl-boy\",475],[\"family_man_man_girl_boy\",475],[\"man-man-boy-boy\",476],[\"family_man_man_boy_boy\",476],[\"man-man-girl-girl\",477],[\"family_man_man_girl_girl\",477],[\"woman-woman-boy\",478],[\"family_woman_woman_boy\",478],[\"woman-woman-girl\",479],[\"family_woman_woman_girl\",479],[\"woman-woman-girl-boy\",480],[\"family_woman_woman_girl_boy\",480],[\"woman-woman-boy-boy\",481],[\"family_woman_woman_boy_boy\",481],[\"woman-woman-girl-girl\",482],[\"family_woman_woman_girl_girl\",482],[\"man-boy\",483],[\"family_man_boy\",483],[\"man-boy-boy\",484],[\"family_man_boy_boy\",484],[\"man-girl\",485],[\"family_man_girl\",485],[\"man-girl-boy\",486],[\"family_man_girl_boy\",486],[\"man-girl-girl\",487],[\"family_man_girl_girl\",487],[\"woman-boy\",488],[\"family_woman_boy\",488],[\"woman-boy-boy\",489],[\"family_woman_boy_boy\",489],[\"woman-girl\",490],[\"family_woman_girl\",490],[\"woman-girl-boy\",491],[\"family_woman_girl_boy\",491],[\"woman-girl-girl\",492],[\"family_woman_girl_girl\",492],[\"speaking_head_in_silhouette\",493],[\"speaking_head\",493],[\"bust_in_silhouette\",494],[\"busts_in_silhouette\",495],[\"people_hugging\",496],[\"footprints\",497],[\"skin-tone-2\",498],[\"skin-tone-3\",499],[\"skin-tone-4\",500],[\"skin-tone-5\",501],[\"skin-tone-6\",502],[\"monkey_face\",503],[\"monkey\",504],[\"gorilla\",505],[\"orangutan\",506],[\"dog\",507],[\"dog2\",508],[\"guide_dog\",509],[\"service_dog\",510],[\"poodle\",511],[\"wolf\",512],[\"fox_face\",513],[\"raccoon\",514],[\"cat\",515],[\"cat2\",516],[\"black_cat\",517],[\"lion_face\",518],[\"lion\",518],[\"tiger\",519],[\"tiger2\",520],[\"leopard\",521],[\"horse\",522],[\"racehorse\",523],[\"unicorn_face\",524],[\"unicorn\",524],[\"zebra_face\",525],[\"deer\",526],[\"bison\",527],[\"cow\",528],[\"ox\",529],[\"water_buffalo\",530],[\"cow2\",531],[\"pig\",532],[\"pig2\",533],[\"boar\",534],[\"pig_nose\",535],[\"ram\",536],[\"sheep\",537],[\"goat\",538],[\"dromedary_camel\",539],[\"camel\",540],[\"llama\",541],[\"giraffe_face\",542],[\"elephant\",543],[\"mammoth\",544],[\"rhinoceros\",545],[\"hippopotamus\",546],[\"mouse\",547],[\"mouse2\",548],[\"rat\",549],[\"hamster\",550],[\"rabbit\",551],[\"rabbit2\",552],[\"chipmunk\",553],[\"beaver\",554],[\"hedgehog\",555],[\"bat\",556],[\"bear\",557],[\"polar_bear\",558],[\"koala\",559],[\"panda_face\",560],[\"sloth\",561],[\"otter\",562],[\"skunk\",563],[\"kangaroo\",564],[\"badger\",565],[\"feet\",566],[\"paw_prints\",566],[\"turkey\",567],[\"chicken\",568],[\"rooster\",569],[\"hatching_chick\",570],[\"baby_chick\",571],[\"hatched_chick\",572],[\"bird\",573],[\"penguin\",574],[\"dove_of_peace\",575],[\"dove\",575],[\"eagle\",576],[\"duck\",577],[\"swan\",578],[\"owl\",579],[\"dodo\",580],[\"feather\",581],[\"flamingo\",582],[\"peacock\",583],[\"parrot\",584],[\"frog\",585],[\"crocodile\",586],[\"turtle\",587],[\"lizard\",588],[\"snake\",589],[\"dragon_face\",590],[\"dragon\",591],[\"sauropod\",592],[\"t-rex\",593],[\"whale\",594],[\"whale2\",595],[\"dolphin\",596],[\"flipper\",596],[\"seal\",597],[\"fish\",598],[\"tropical_fish\",599],[\"blowfish\",600],[\"shark\",601],[\"octopus\",602],[\"shell\",603],[\"snail\",604],[\"butterfly\",605],[\"bug\",606],[\"ant\",607],[\"bee\",608],[\"honeybee\",608],[\"beetle\",609],[\"ladybug\",610],[\"lady_beetle\",610],[\"cricket\",611],[\"cockroach\",612],[\"spider\",613],[\"spider_web\",614],[\"scorpion\",615],[\"mosquito\",616],[\"fly\",617],[\"worm\",618],[\"microbe\",619],[\"bouquet\",620],[\"cherry_blossom\",621],[\"white_flower\",622],[\"rosette\",623],[\"rose\",624],[\"wilted_flower\",625],[\"hibiscus\",626],[\"sunflower\",627],[\"blossom\",628],[\"tulip\",629],[\"seedling\",630],[\"potted_plant\",631],[\"evergreen_tree\",632],[\"deciduous_tree\",633],[\"palm_tree\",634],[\"cactus\",635],[\"ear_of_rice\",636],[\"herb\",637],[\"shamrock\",638],[\"four_leaf_clover\",639],[\"maple_leaf\",640],[\"fallen_leaf\",641],[\"leaves\",642],[\"grapes\",643],[\"melon\",644],[\"watermelon\",645],[\"tangerine\",646],[\"mandarin\",646],[\"orange\",646],[\"lemon\",647],[\"banana\",648],[\"pineapple\",649],[\"mango\",650],[\"apple\",651],[\"green_apple\",652],[\"pear\",653],[\"peach\",654],[\"cherries\",655],[\"strawberry\",656],[\"blueberries\",657],[\"kiwifruit\",658],[\"kiwi_fruit\",658],[\"tomato\",659],[\"olive\",660],[\"coconut\",661],[\"avocado\",662],[\"eggplant\",663],[\"potato\",664],[\"carrot\",665],[\"corn\",666],[\"hot_pepper\",667],[\"bell_pepper\",668],[\"cucumber\",669],[\"leafy_green\",670],[\"broccoli\",671],[\"garlic\",672],[\"onion\",673],[\"mushroom\",674],[\"peanuts\",675],[\"chestnut\",676],[\"bread\",677],[\"croissant\",678],[\"baguette_bread\",679],[\"flatbread\",680],[\"pretzel\",681],[\"bagel\",682],[\"pancakes\",683],[\"waffle\",684],[\"cheese_wedge\",685],[\"cheese\",685],[\"meat_on_bone\",686],[\"poultry_leg\",687],[\"cut_of_meat\",688],[\"bacon\",689],[\"hamburger\",690],[\"fries\",691],[\"pizza\",692],[\"hotdog\",693],[\"sandwich\",694],[\"taco\",695],[\"burrito\",696],[\"tamale\",697],[\"stuffed_flatbread\",698],[\"falafel\",699],[\"egg\",700],[\"fried_egg\",701],[\"cooking\",701],[\"shallow_pan_of_food\",702],[\"stew\",703],[\"fondue\",704],[\"bowl_with_spoon\",705],[\"green_salad\",706],[\"popcorn\",707],[\"butter\",708],[\"salt\",709],[\"canned_food\",710],[\"bento\",711],[\"rice_cracker\",712],[\"rice_ball\",713],[\"rice\",714],[\"curry\",715],[\"ramen\",716],[\"spaghetti\",717],[\"sweet_potato\",718],[\"oden\",719],[\"sushi\",720],[\"fried_shrimp\",721],[\"fish_cake\",722],[\"moon_cake\",723],[\"dango\",724],[\"dumpling\",725],[\"fortune_cookie\",726],[\"takeout_box\",727],[\"crab\",728],[\"lobster\",729],[\"shrimp\",730],[\"squid\",731],[\"oyster\",732],[\"icecream\",733],[\"shaved_ice\",734],[\"ice_cream\",735],[\"doughnut\",736],[\"cookie\",737],[\"birthday\",738],[\"cake\",739],[\"cupcake\",740],[\"pie\",741],[\"chocolate_bar\",742],[\"candy\",743],[\"lollipop\",744],[\"custard\",745],[\"honey_pot\",746],[\"baby_bottle\",747],[\"glass_of_milk\",748],[\"milk_glass\",748],[\"coffee\",749],[\"teapot\",750],[\"tea\",751],[\"sake\",752],[\"champagne\",753],[\"wine_glass\",754],[\"cocktail\",755],[\"tropical_drink\",756],[\"beer\",757],[\"beers\",758],[\"clinking_glasses\",759],[\"tumbler_glass\",760],[\"cup_with_straw\",761],[\"bubble_tea\",762],[\"beverage_box\",763],[\"mate_drink\",764],[\"ice_cube\",765],[\"chopsticks\",766],[\"knife_fork_plate\",767],[\"plate_with_cutlery\",767],[\"fork_and_knife\",768],[\"spoon\",769],[\"hocho\",770],[\"knife\",770],[\"amphora\",771],[\"earth_africa\",772],[\"earth_americas\",773],[\"earth_asia\",774],[\"globe_with_meridians\",775],[\"world_map\",776],[\"japan\",777],[\"compass\",778],[\"snow_capped_mountain\",779],[\"mountain_snow\",779],[\"mountain\",780],[\"volcano\",781],[\"mount_fuji\",782],[\"camping\",783],[\"beach_with_umbrella\",784],[\"beach_umbrella\",784],[\"desert\",785],[\"desert_island\",786],[\"national_park\",787],[\"stadium\",788],[\"classical_building\",789],[\"building_construction\",790],[\"bricks\",791],[\"rock\",792],[\"wood\",793],[\"hut\",794],[\"house_buildings\",795],[\"houses\",795],[\"derelict_house_building\",796],[\"derelict_house\",796],[\"house\",797],[\"house_with_garden\",798],[\"office\",799],[\"post_office\",800],[\"european_post_office\",801],[\"hospital\",802],[\"bank\",803],[\"hotel\",804],[\"love_hotel\",805],[\"convenience_store\",806],[\"school\",807],[\"department_store\",808],[\"factory\",809],[\"japanese_castle\",810],[\"european_castle\",811],[\"wedding\",812],[\"tokyo_tower\",813],[\"statue_of_liberty\",814],[\"church\",815],[\"mosque\",816],[\"hindu_temple\",817],[\"synagogue\",818],[\"shinto_shrine\",819],[\"kaaba\",820],[\"fountain\",821],[\"tent\",822],[\"foggy\",823],[\"night_with_stars\",824],[\"cityscape\",825],[\"sunrise_over_mountains\",826],[\"sunrise\",827],[\"city_sunset\",828],[\"city_sunrise\",829],[\"bridge_at_night\",830],[\"hotsprings\",831],[\"carousel_horse\",832],[\"ferris_wheel\",833],[\"roller_coaster\",834],[\"barber\",835],[\"circus_tent\",836],[\"steam_locomotive\",837],[\"railway_car\",838],[\"bullettrain_side\",839],[\"bullettrain_front\",840],[\"train2\",841],[\"metro\",842],[\"light_rail\",843],[\"station\",844],[\"tram\",845],[\"monorail\",846],[\"mountain_railway\",847],[\"train\",848],[\"bus\",849],[\"oncoming_bus\",850],[\"trolleybus\",851],[\"minibus\",852],[\"ambulance\",853],[\"fire_engine\",854],[\"police_car\",855],[\"oncoming_police_car\",856],[\"taxi\",857],[\"oncoming_taxi\",858],[\"car\",859],[\"red_car\",859],[\"oncoming_automobile\",860],[\"blue_car\",861],[\"pickup_truck\",862],[\"truck\",863],[\"articulated_lorry\",864],[\"tractor\",865],[\"racing_car\",866],[\"racing_motorcycle\",867],[\"motorcycle\",867],[\"motor_scooter\",868],[\"manual_wheelchair\",869],[\"motorized_wheelchair\",870],[\"auto_rickshaw\",871],[\"bike\",872],[\"scooter\",873],[\"kick_scooter\",873],[\"skateboard\",874],[\"roller_skate\",875],[\"busstop\",876],[\"motorway\",877],[\"railway_track\",878],[\"oil_drum\",879],[\"fuelpump\",880],[\"rotating_light\",881],[\"traffic_light\",882],[\"vertical_traffic_light\",883],[\"octagonal_sign\",884],[\"stop_sign\",884],[\"construction\",885],[\"anchor\",886],[\"boat\",887],[\"sailboat\",887],[\"canoe\",888],[\"speedboat\",889],[\"passenger_ship\",890],[\"ferry\",891],[\"motor_boat\",892],[\"ship\",893],[\"airplane\",894],[\"small_airplane\",895],[\"airplane_departure\",896],[\"flight_departure\",896],[\"airplane_arriving\",897],[\"flight_arrival\",897],[\"parachute\",898],[\"seat\",899],[\"helicopter\",900],[\"suspension_railway\",901],[\"mountain_cableway\",902],[\"aerial_tramway\",903],[\"satellite\",904],[\"artificial_satellite\",904],[\"rocket\",905],[\"flying_saucer\",906],[\"bellhop_bell\",907],[\"luggage\",908],[\"hourglass\",909],[\"hourglass_flowing_sand\",910],[\"watch\",911],[\"alarm_clock\",912],[\"stopwatch\",913],[\"timer_clock\",914],[\"mantelpiece_clock\",915],[\"clock12\",916],[\"clock1230\",917],[\"clock1\",918],[\"clock130\",919],[\"clock2\",920],[\"clock230\",921],[\"clock3\",922],[\"clock330\",923],[\"clock4\",924],[\"clock430\",925],[\"clock5\",926],[\"clock530\",927],[\"clock6\",928],[\"clock630\",929],[\"clock7\",930],[\"clock730\",931],[\"clock8\",932],[\"clock830\",933],[\"clock9\",934],[\"clock930\",935],[\"clock10\",936],[\"clock1030\",937],[\"clock11\",938],[\"clock1130\",939],[\"new_moon\",940],[\"waxing_crescent_moon\",941],[\"first_quarter_moon\",942],[\"moon\",943],[\"waxing_gibbous_moon\",943],[\"full_moon\",944],[\"waning_gibbous_moon\",945],[\"last_quarter_moon\",946],[\"waning_crescent_moon\",947],[\"crescent_moon\",948],[\"new_moon_with_face\",949],[\"first_quarter_moon_with_face\",950],[\"last_quarter_moon_with_face\",951],[\"thermometer\",952],[\"sunny\",953],[\"full_moon_with_face\",954],[\"sun_with_face\",955],[\"ringed_planet\",956],[\"star\",957],[\"star2\",958],[\"stars\",959],[\"milky_way\",960],[\"cloud\",961],[\"partly_sunny\",962],[\"thunder_cloud_and_rain\",963],[\"cloud_with_lightning_and_rain\",963],[\"mostly_sunny\",964],[\"sun_small_cloud\",964],[\"sun_behind_small_cloud\",964],[\"barely_sunny\",965],[\"sun_behind_cloud\",965],[\"sun_behind_large_cloud\",965],[\"partly_sunny_rain\",966],[\"sun_behind_rain_cloud\",966],[\"rain_cloud\",967],[\"cloud_with_rain\",967],[\"snow_cloud\",968],[\"cloud_with_snow\",968],[\"lightning\",969],[\"lightning_cloud\",969],[\"cloud_with_lightning\",969],[\"tornado\",970],[\"tornado_cloud\",970],[\"fog\",971],[\"wind_blowing_face\",972],[\"wind_face\",972],[\"cyclone\",973],[\"rainbow\",974],[\"closed_umbrella\",975],[\"umbrella\",976],[\"open_umbrella\",976],[\"umbrella_with_rain_drops\",977],[\"umbrella_on_ground\",978],[\"parasol_on_ground\",978],[\"zap\",979],[\"snowflake\",980],[\"snowman\",981],[\"snowman_with_snow\",981],[\"snowman_without_snow\",982],[\"comet\",983],[\"fire\",984],[\"droplet\",985],[\"ocean\",986],[\"jack_o_lantern\",987],[\"christmas_tree\",988],[\"fireworks\",989],[\"sparkler\",990],[\"firecracker\",991],[\"sparkles\",992],[\"balloon\",993],[\"tada\",994],[\"confetti_ball\",995],[\"tanabata_tree\",996],[\"bamboo\",997],[\"dolls\",998],[\"flags\",999],[\"wind_chime\",1000],[\"rice_scene\",1001],[\"red_envelope\",1002],[\"ribbon\",1003],[\"gift\",1004],[\"reminder_ribbon\",1005],[\"admission_tickets\",1006],[\"tickets\",1006],[\"ticket\",1007],[\"medal\",1008],[\"medal_military\",1008],[\"trophy\",1009],[\"sports_medal\",1010],[\"medal_sports\",1010],[\"first_place_medal\",1011],[\"1st_place_medal\",1011],[\"second_place_medal\",1012],[\"2nd_place_medal\",1012],[\"third_place_medal\",1013],[\"3rd_place_medal\",1013],[\"soccer\",1014],[\"baseball\",1015],[\"softball\",1016],[\"basketball\",1017],[\"volleyball\",1018],[\"football\",1019],[\"rugby_football\",1020],[\"tennis\",1021],[\"flying_disc\",1022],[\"bowling\",1023],[\"cricket_bat_and_ball\",1024],[\"field_hockey_stick_and_ball\",1025],[\"field_hockey\",1025],[\"ice_hockey_stick_and_puck\",1026],[\"ice_hockey\",1026],[\"lacrosse\",1027],[\"table_tennis_paddle_and_ball\",1028],[\"ping_pong\",1028],[\"badminton_racquet_and_shuttlecock\",1029],[\"badminton\",1029],[\"boxing_glove\",1030],[\"martial_arts_uniform\",1031],[\"goal_net\",1032],[\"golf\",1033],[\"ice_skate\",1034],[\"fishing_pole_and_fish\",1035],[\"diving_mask\",1036],[\"running_shirt_with_sash\",1037],[\"ski\",1038],[\"sled\",1039],[\"curling_stone\",1040],[\"dart\",1041],[\"yo-yo\",1042],[\"kite\",1043],[\"8ball\",1044],[\"crystal_ball\",1045],[\"magic_wand\",1046],[\"nazar_amulet\",1047],[\"video_game\",1048],[\"joystick\",1049],[\"slot_machine\",1050],[\"game_die\",1051],[\"jigsaw\",1052],[\"teddy_bear\",1053],[\"pinata\",1054],[\"nesting_dolls\",1055],[\"spades\",1056],[\"hearts\",1057],[\"diamonds\",1058],[\"clubs\",1059],[\"chess_pawn\",1060],[\"black_joker\",1061],[\"mahjong\",1062],[\"flower_playing_cards\",1063],[\"performing_arts\",1064],[\"frame_with_picture\",1065],[\"framed_picture\",1065],[\"art\",1066],[\"thread\",1067],[\"sewing_needle\",1068],[\"yarn\",1069],[\"knot\",1070],[\"eyeglasses\",1071],[\"dark_sunglasses\",1072],[\"goggles\",1073],[\"lab_coat\",1074],[\"safety_vest\",1075],[\"necktie\",1076],[\"shirt\",1077],[\"tshirt\",1077],[\"jeans\",1078],[\"scarf\",1079],[\"gloves\",1080],[\"coat\",1081],[\"socks\",1082],[\"dress\",1083],[\"kimono\",1084],[\"sari\",1085],[\"one-piece_swimsuit\",1086],[\"briefs\",1087],[\"shorts\",1088],[\"bikini\",1089],[\"womans_clothes\",1090],[\"purse\",1091],[\"handbag\",1092],[\"pouch\",1093],[\"shopping_bags\",1094],[\"shopping\",1094],[\"school_satchel\",1095],[\"thong_sandal\",1096],[\"mans_shoe\",1097],[\"shoe\",1097],[\"athletic_shoe\",1098],[\"hiking_boot\",1099],[\"womans_flat_shoe\",1100],[\"high_heel\",1101],[\"sandal\",1102],[\"ballet_shoes\",1103],[\"boot\",1104],[\"crown\",1105],[\"womans_hat\",1106],[\"tophat\",1107],[\"mortar_board\",1108],[\"billed_cap\",1109],[\"military_helmet\",1110],[\"helmet_with_white_cross\",1111],[\"rescue_worker_helmet\",1111],[\"prayer_beads\",1112],[\"lipstick\",1113],[\"ring\",1114],[\"gem\",1115],[\"mute\",1116],[\"speaker\",1117],[\"sound\",1118],[\"loud_sound\",1119],[\"loudspeaker\",1120],[\"mega\",1121],[\"postal_horn\",1122],[\"bell\",1123],[\"no_bell\",1124],[\"musical_score\",1125],[\"musical_note\",1126],[\"notes\",1127],[\"studio_microphone\",1128],[\"level_slider\",1129],[\"control_knobs\",1130],[\"microphone\",1131],[\"headphones\",1132],[\"radio\",1133],[\"saxophone\",1134],[\"accordion\",1135],[\"guitar\",1136],[\"musical_keyboard\",1137],[\"trumpet\",1138],[\"violin\",1139],[\"banjo\",1140],[\"drum_with_drumsticks\",1141],[\"drum\",1141],[\"long_drum\",1142],[\"iphone\",1143],[\"calling\",1144],[\"phone\",1145],[\"telephone\",1145],[\"telephone_receiver\",1146],[\"pager\",1147],[\"fax\",1148],[\"battery\",1149],[\"electric_plug\",1150],[\"computer\",1151],[\"desktop_computer\",1152],[\"printer\",1153],[\"keyboard\",1154],[\"three_button_mouse\",1155],[\"computer_mouse\",1155],[\"trackball\",1156],[\"minidisc\",1157],[\"floppy_disk\",1158],[\"cd\",1159],[\"dvd\",1160],[\"abacus\",1161],[\"movie_camera\",1162],[\"film_frames\",1163],[\"film_strip\",1163],[\"film_projector\",1164],[\"clapper\",1165],[\"tv\",1166],[\"camera\",1167],[\"camera_with_flash\",1168],[\"camera_flash\",1168],[\"video_camera\",1169],[\"vhs\",1170],[\"mag\",1171],[\"mag_right\",1172],[\"candle\",1173],[\"bulb\",1174],[\"flashlight\",1175],[\"izakaya_lantern\",1176],[\"lantern\",1176],[\"diya_lamp\",1177],[\"notebook_with_decorative_cover\",1178],[\"closed_book\",1179],[\"book\",1180],[\"open_book\",1180],[\"green_book\",1181],[\"blue_book\",1182],[\"orange_book\",1183],[\"books\",1184],[\"notebook\",1185],[\"ledger\",1186],[\"page_with_curl\",1187],[\"scroll\",1188],[\"page_facing_up\",1189],[\"newspaper\",1190],[\"rolled_up_newspaper\",1191],[\"newspaper_roll\",1191],[\"bookmark_tabs\",1192],[\"bookmark\",1193],[\"label\",1194],[\"moneybag\",1195],[\"coin\",1196],[\"yen\",1197],[\"dollar\",1198],[\"euro\",1199],[\"pound\",1200],[\"money_with_wings\",1201],[\"credit_card\",1202],[\"receipt\",1203],[\"chart\",1204],[\"email\",1205],[\"envelope\",1205],[\"e-mail\",1206],[\"incoming_envelope\",1207],[\"envelope_with_arrow\",1208],[\"outbox_tray\",1209],[\"inbox_tray\",1210],[\"package\",1211],[\"mailbox\",1212],[\"mailbox_closed\",1213],[\"mailbox_with_mail\",1214],[\"mailbox_with_no_mail\",1215],[\"postbox\",1216],[\"ballot_box_with_ballot\",1217],[\"ballot_box\",1217],[\"pencil2\",1218],[\"black_nib\",1219],[\"lower_left_fountain_pen\",1220],[\"fountain_pen\",1220],[\"lower_left_ballpoint_pen\",1221],[\"pen\",1221],[\"lower_left_paintbrush\",1222],[\"paintbrush\",1222],[\"lower_left_crayon\",1223],[\"crayon\",1223],[\"memo\",1224],[\"pencil\",1224],[\"briefcase\",1225],[\"file_folder\",1226],[\"open_file_folder\",1227],[\"card_index_dividers\",1228],[\"date\",1229],[\"calendar\",1230],[\"spiral_note_pad\",1231],[\"spiral_notepad\",1231],[\"spiral_calendar_pad\",1232],[\"spiral_calendar\",1232],[\"card_index\",1233],[\"chart_with_upwards_trend\",1234],[\"chart_with_downwards_trend\",1235],[\"bar_chart\",1236],[\"clipboard\",1237],[\"pushpin\",1238],[\"round_pushpin\",1239],[\"paperclip\",1240],[\"linked_paperclips\",1241],[\"paperclips\",1241],[\"straight_ruler\",1242],[\"triangular_ruler\",1243],[\"scissors\",1244],[\"card_file_box\",1245],[\"file_cabinet\",1246],[\"wastebasket\",1247],[\"lock\",1248],[\"unlock\",1249],[\"lock_with_ink_pen\",1250],[\"closed_lock_with_key\",1251],[\"key\",1252],[\"old_key\",1253],[\"hammer\",1254],[\"axe\",1255],[\"pick\",1256],[\"hammer_and_pick\",1257],[\"hammer_and_wrench\",1258],[\"dagger_knife\",1259],[\"dagger\",1259],[\"crossed_swords\",1260],[\"gun\",1261],[\"boomerang\",1262],[\"bow_and_arrow\",1263],[\"shield\",1264],[\"carpentry_saw\",1265],[\"wrench\",1266],[\"screwdriver\",1267],[\"nut_and_bolt\",1268],[\"gear\",1269],[\"compression\",1270],[\"clamp\",1270],[\"scales\",1271],[\"balance_scale\",1271],[\"probing_cane\",1272],[\"link\",1273],[\"chains\",1274],[\"hook\",1275],[\"toolbox\",1276],[\"magnet\",1277],[\"ladder\",1278],[\"alembic\",1279],[\"test_tube\",1280],[\"petri_dish\",1281],[\"dna\",1282],[\"microscope\",1283],[\"telescope\",1284],[\"satellite_antenna\",1285],[\"syringe\",1286],[\"drop_of_blood\",1287],[\"pill\",1288],[\"adhesive_bandage\",1289],[\"stethoscope\",1290],[\"door\",1291],[\"elevator\",1292],[\"mirror\",1293],[\"window\",1294],[\"bed\",1295],[\"couch_and_lamp\",1296],[\"chair\",1297],[\"toilet\",1298],[\"plunger\",1299],[\"shower\",1300],[\"bathtub\",1301],[\"mouse_trap\",1302],[\"razor\",1303],[\"lotion_bottle\",1304],[\"safety_pin\",1305],[\"broom\",1306],[\"basket\",1307],[\"roll_of_paper\",1308],[\"bucket\",1309],[\"soap\",1310],[\"toothbrush\",1311],[\"sponge\",1312],[\"fire_extinguisher\",1313],[\"shopping_trolley\",1314],[\"shopping_cart\",1314],[\"smoking\",1315],[\"coffin\",1316],[\"headstone\",1317],[\"funeral_urn\",1318],[\"moyai\",1319],[\"placard\",1320],[\"atm\",1321],[\"put_litter_in_its_place\",1322],[\"potable_water\",1323],[\"wheelchair\",1324],[\"mens\",1325],[\"womens\",1326],[\"restroom\",1327],[\"baby_symbol\",1328],[\"wc\",1329],[\"passport_control\",1330],[\"customs\",1331],[\"baggage_claim\",1332],[\"left_luggage\",1333],[\"warning\",1334],[\"children_crossing\",1335],[\"no_entry\",1336],[\"no_entry_sign\",1337],[\"no_bicycles\",1338],[\"no_smoking\",1339],[\"do_not_litter\",1340],[\"non-potable_water\",1341],[\"no_pedestrians\",1342],[\"no_mobile_phones\",1343],[\"underage\",1344],[\"radioactive_sign\",1345],[\"radioactive\",1345],[\"biohazard_sign\",1346],[\"biohazard\",1346],[\"arrow_up\",1347],[\"arrow_upper_right\",1348],[\"arrow_right\",1349],[\"arrow_lower_right\",1350],[\"arrow_down\",1351],[\"arrow_lower_left\",1352],[\"arrow_left\",1353],[\"arrow_upper_left\",1354],[\"arrow_up_down\",1355],[\"left_right_arrow\",1356],[\"leftwards_arrow_with_hook\",1357],[\"arrow_right_hook\",1358],[\"arrow_heading_up\",1359],[\"arrow_heading_down\",1360],[\"arrows_clockwise\",1361],[\"arrows_counterclockwise\",1362],[\"back\",1363],[\"end\",1364],[\"on\",1365],[\"soon\",1366],[\"top\",1367],[\"place_of_worship\",1368],[\"atom_symbol\",1369],[\"om_symbol\",1370],[\"om\",1370],[\"star_of_david\",1371],[\"wheel_of_dharma\",1372],[\"yin_yang\",1373],[\"latin_cross\",1374],[\"orthodox_cross\",1375],[\"star_and_crescent\",1376],[\"peace_symbol\",1377],[\"menorah_with_nine_branches\",1378],[\"menorah\",1378],[\"six_pointed_star\",1379],[\"aries\",1380],[\"taurus\",1381],[\"gemini\",1382],[\"cancer\",1383],[\"leo\",1384],[\"virgo\",1385],[\"libra\",1386],[\"scorpius\",1387],[\"sagittarius\",1388],[\"capricorn\",1389],[\"aquarius\",1390],[\"pisces\",1391],[\"ophiuchus\",1392],[\"twisted_rightwards_arrows\",1393],[\"repeat\",1394],[\"repeat_one\",1395],[\"arrow_forward\",1396],[\"fast_forward\",1397],[\"black_right_pointing_double_triangle_with_vertical_bar\",1398],[\"next_track_button\",1398],[\"black_right_pointing_triangle_with_double_vertical_bar\",1399],[\"play_or_pause_button\",1399],[\"arrow_backward\",1400],[\"rewind\",1401],[\"black_left_pointing_double_triangle_with_vertical_bar\",1402],[\"previous_track_button\",1402],[\"arrow_up_small\",1403],[\"arrow_double_up\",1404],[\"arrow_down_small\",1405],[\"arrow_double_down\",1406],[\"double_vertical_bar\",1407],[\"pause_button\",1407],[\"black_square_for_stop\",1408],[\"stop_button\",1408],[\"black_circle_for_record\",1409],[\"record_button\",1409],[\"eject\",1410],[\"cinema\",1411],[\"low_brightness\",1412],[\"high_brightness\",1413],[\"signal_strength\",1414],[\"vibration_mode\",1415],[\"mobile_phone_off\",1416],[\"female_sign\",1417],[\"male_sign\",1418],[\"transgender_symbol\",1419],[\"heavy_multiplication_x\",1420],[\"heavy_plus_sign\",1421],[\"heavy_minus_sign\",1422],[\"heavy_division_sign\",1423],[\"infinity\",1424],[\"bangbang\",1425],[\"interrobang\",1426],[\"question\",1427],[\"grey_question\",1428],[\"grey_exclamation\",1429],[\"exclamation\",1430],[\"heavy_exclamation_mark\",1430],[\"wavy_dash\",1431],[\"currency_exchange\",1432],[\"heavy_dollar_sign\",1433],[\"medical_symbol\",1434],[\"staff_of_aesculapius\",1434],[\"recycle\",1435],[\"fleur_de_lis\",1436],[\"trident\",1437],[\"name_badge\",1438],[\"beginner\",1439],[\"o\",1440],[\"white_check_mark\",1441],[\"ballot_box_with_check\",1442],[\"heavy_check_mark\",1443],[\"x\",1444],[\"negative_squared_cross_mark\",1445],[\"curly_loop\",1446],[\"loop\",1447],[\"part_alternation_mark\",1448],[\"eight_spoked_asterisk\",1449],[\"eight_pointed_black_star\",1450],[\"sparkle\",1451],[\"copyright\",1452],[\"registered\",1453],[\"tm\",1454],[\"hash\",1455],[\"keycap_star\",1456],[\"asterisk\",1456],[\"zero\",1457],[\"one\",1458],[\"two\",1459],[\"three\",1460],[\"four\",1461],[\"five\",1462],[\"six\",1463],[\"seven\",1464],[\"eight\",1465],[\"nine\",1466],[\"keycap_ten\",1467],[\"capital_abcd\",1468],[\"abcd\",1469],[\"1234\",1470],[\"symbols\",1471],[\"abc\",1472],[\"a\",1473],[\"ab\",1474],[\"b\",1475],[\"cl\",1476],[\"cool\",1477],[\"free\",1478],[\"information_source\",1479],[\"id\",1480],[\"m\",1481],[\"new\",1482],[\"ng\",1483],[\"o2\",1484],[\"ok\",1485],[\"parking\",1486],[\"sos\",1487],[\"up\",1488],[\"vs\",1489],[\"koko\",1490],[\"sa\",1491],[\"u6708\",1492],[\"u6709\",1493],[\"u6307\",1494],[\"ideograph_advantage\",1495],[\"u5272\",1496],[\"u7121\",1497],[\"u7981\",1498],[\"accept\",1499],[\"u7533\",1500],[\"u5408\",1501],[\"u7a7a\",1502],[\"congratulations\",1503],[\"secret\",1504],[\"u55b6\",1505],[\"u6e80\",1506],[\"red_circle\",1507],[\"large_orange_circle\",1508],[\"large_yellow_circle\",1509],[\"large_green_circle\",1510],[\"large_blue_circle\",1511],[\"large_purple_circle\",1512],[\"large_brown_circle\",1513],[\"black_circle\",1514],[\"white_circle\",1515],[\"large_red_square\",1516],[\"large_orange_square\",1517],[\"large_yellow_square\",1518],[\"large_green_square\",1519],[\"large_blue_square\",1520],[\"large_purple_square\",1521],[\"large_brown_square\",1522],[\"black_large_square\",1523],[\"white_large_square\",1524],[\"black_medium_square\",1525],[\"white_medium_square\",1526],[\"black_medium_small_square\",1527],[\"white_medium_small_square\",1528],[\"black_small_square\",1529],[\"white_small_square\",1530],[\"large_orange_diamond\",1531],[\"large_blue_diamond\",1532],[\"small_orange_diamond\",1533],[\"small_blue_diamond\",1534],[\"small_red_triangle\",1535],[\"small_red_triangle_down\",1536],[\"diamond_shape_with_a_dot_inside\",1537],[\"radio_button\",1538],[\"white_square_button\",1539],[\"black_square_button\",1540],[\"checkered_flag\",1541],[\"triangular_flag_on_post\",1542],[\"crossed_flags\",1543],[\"waving_black_flag\",1544],[\"black_flag\",1544],[\"waving_white_flag\",1545],[\"white_flag\",1545],[\"rainbow-flag\",1546],[\"rainbow_flag\",1546],[\"transgender_flag\",1547],[\"pirate_flag\",1548],[\"flag-ac\",1549],[\"flag-ad\",1550],[\"andorra\",1550],[\"flag-ae\",1551],[\"united_arab_emirates\",1551],[\"flag-af\",1552],[\"afghanistan\",1552],[\"flag-ag\",1553],[\"antigua_barbuda\",1553],[\"flag-ai\",1554],[\"anguilla\",1554],[\"flag-al\",1555],[\"albania\",1555],[\"flag-am\",1556],[\"armenia\",1556],[\"flag-ao\",1557],[\"angola\",1557],[\"flag-aq\",1558],[\"antarctica\",1558],[\"flag-ar\",1559],[\"argentina\",1559],[\"flag-as\",1560],[\"american_samoa\",1560],[\"flag-at\",1561],[\"austria\",1561],[\"flag-au\",1562],[\"australia\",1562],[\"flag-aw\",1563],[\"aruba\",1563],[\"flag-ax\",1564],[\"aland_islands\",1564],[\"flag-az\",1565],[\"azerbaijan\",1565],[\"flag-ba\",1566],[\"bosnia_herzegovina\",1566],[\"flag-bb\",1567],[\"barbados\",1567],[\"flag-bd\",1568],[\"bangladesh\",1568],[\"flag-be\",1569],[\"belgium\",1569],[\"flag-bf\",1570],[\"burkina_faso\",1570],[\"flag-bg\",1571],[\"bulgaria\",1571],[\"flag-bh\",1572],[\"bahrain\",1572],[\"flag-bi\",1573],[\"burundi\",1573],[\"flag-bj\",1574],[\"benin\",1574],[\"flag-bl\",1575],[\"st_barthelemy\",1575],[\"flag-bm\",1576],[\"bermuda\",1576],[\"flag-bn\",1577],[\"brunei\",1577],[\"flag-bo\",1578],[\"bolivia\",1578],[\"flag-bq\",1579],[\"caribbean_netherlands\",1579],[\"flag-br\",1580],[\"brazil\",1580],[\"flag-bs\",1581],[\"bahamas\",1581],[\"flag-bt\",1582],[\"bhutan\",1582],[\"flag-bv\",1583],[\"flag-bw\",1584],[\"botswana\",1584],[\"flag-by\",1585],[\"belarus\",1585],[\"flag-bz\",1586],[\"belize\",1586],[\"flag-ca\",1587],[\"ca\",1587],[\"canada\",1587],[\"flag-cc\",1588],[\"cocos_islands\",1588],[\"flag-cd\",1589],[\"congo_kinshasa\",1589],[\"flag-cf\",1590],[\"central_african_republic\",1590],[\"flag-cg\",1591],[\"congo_brazzaville\",1591],[\"flag-ch\",1592],[\"switzerland\",1592],[\"flag-ci\",1593],[\"cote_divoire\",1593],[\"flag-ck\",1594],[\"cook_islands\",1594],[\"flag-cl\",1595],[\"chile\",1595],[\"flag-cm\",1596],[\"cameroon\",1596],[\"cn\",1597],[\"flag-cn\",1597],[\"flag-co\",1598],[\"colombia\",1598],[\"flag-cp\",1599],[\"flag-cr\",1600],[\"costa_rica\",1600],[\"flag-cu\",1601],[\"cuba\",1601],[\"flag-cv\",1602],[\"cape_verde\",1602],[\"flag-cw\",1603],[\"curacao\",1603],[\"flag-cx\",1604],[\"christmas_island\",1604],[\"flag-cy\",1605],[\"cyprus\",1605],[\"flag-cz\",1606],[\"czech_republic\",1606],[\"de\",1607],[\"flag-de\",1607],[\"flag-dg\",1608],[\"flag-dj\",1609],[\"djibouti\",1609],[\"flag-dk\",1610],[\"denmark\",1610],[\"flag-dm\",1611],[\"dominica\",1611],[\"flag-do\",1612],[\"dominican_republic\",1612],[\"flag-dz\",1613],[\"algeria\",1613],[\"flag-ea\",1614],[\"flag-ec\",1615],[\"ecuador\",1615],[\"flag-ee\",1616],[\"estonia\",1616],[\"flag-eg\",1617],[\"egypt\",1617],[\"flag-eh\",1618],[\"western_sahara\",1618],[\"flag-er\",1619],[\"eritrea\",1619],[\"es\",1620],[\"flag-es\",1620],[\"flag-et\",1621],[\"ethiopia\",1621],[\"flag-eu\",1622],[\"eu\",1622],[\"european_union\",1622],[\"flag-fi\",1623],[\"finland\",1623],[\"flag-fj\",1624],[\"fiji\",1624],[\"flag-fk\",1625],[\"falkland_islands\",1625],[\"flag-fm\",1626],[\"micronesia\",1626],[\"flag-fo\",1627],[\"faroe_islands\",1627],[\"fr\",1628],[\"flag-fr\",1628],[\"flag-ga\",1629],[\"gabon\",1629],[\"gb\",1630],[\"uk\",1630],[\"flag-gb\",1630],[\"flag-gd\",1631],[\"grenada\",1631],[\"flag-ge\",1632],[\"georgia\",1632],[\"flag-gf\",1633],[\"french_guiana\",1633],[\"flag-gg\",1634],[\"guernsey\",1634],[\"flag-gh\",1635],[\"ghana\",1635],[\"flag-gi\",1636],[\"gibraltar\",1636],[\"flag-gl\",1637],[\"greenland\",1637],[\"flag-gm\",1638],[\"gambia\",1638],[\"flag-gn\",1639],[\"guinea\",1639],[\"flag-gp\",1640],[\"guadeloupe\",1640],[\"flag-gq\",1641],[\"equatorial_guinea\",1641],[\"flag-gr\",1642],[\"greece\",1642],[\"flag-gs\",1643],[\"south_georgia_south_sandwich_islands\",1643],[\"flag-gt\",1644],[\"guatemala\",1644],[\"flag-gu\",1645],[\"guam\",1645],[\"flag-gw\",1646],[\"guinea_bissau\",1646],[\"flag-gy\",1647],[\"guyana\",1647],[\"flag-hk\",1648],[\"hong_kong\",1648],[\"flag-hm\",1649],[\"flag-hn\",1650],[\"honduras\",1650],[\"flag-hr\",1651],[\"croatia\",1651],[\"flag-ht\",1652],[\"haiti\",1652],[\"flag-hu\",1653],[\"hungary\",1653],[\"flag-ic\",1654],[\"canary_islands\",1654],[\"flag-id\",1655],[\"indonesia\",1655],[\"flag-ie\",1656],[\"ireland\",1656],[\"flag-il\",1657],[\"israel\",1657],[\"flag-im\",1658],[\"isle_of_man\",1658],[\"flag-in\",1659],[\"india\",1659],[\"flag-io\",1660],[\"british_indian_ocean_territory\",1660],[\"flag-iq\",1661],[\"iraq\",1661],[\"flag-ir\",1662],[\"iran\",1662],[\"flag-is\",1663],[\"iceland\",1663],[\"it\",1664],[\"flag-it\",1664],[\"flag-je\",1665],[\"jersey\",1665],[\"flag-jm\",1666],[\"jamaica\",1666],[\"flag-jo\",1667],[\"jordan\",1667],[\"jp\",1668],[\"flag-jp\",1668],[\"flag-ke\",1669],[\"kenya\",1669],[\"flag-kg\",1670],[\"kyrgyzstan\",1670],[\"flag-kh\",1671],[\"cambodia\",1671],[\"flag-ki\",1672],[\"kiribati\",1672],[\"flag-km\",1673],[\"comoros\",1673],[\"flag-kn\",1674],[\"st_kitts_nevis\",1674],[\"flag-kp\",1675],[\"north_korea\",1675],[\"kr\",1676],[\"flag-kr\",1676],[\"flag-kw\",1677],[\"kuwait\",1677],[\"flag-ky\",1678],[\"cayman_islands\",1678],[\"flag-kz\",1679],[\"kazakhstan\",1679],[\"flag-la\",1680],[\"laos\",1680],[\"flag-lb\",1681],[\"lebanon\",1681],[\"flag-lc\",1682],[\"st_lucia\",1682],[\"flag-li\",1683],[\"liechtenstein\",1683],[\"flag-lk\",1684],[\"sri_lanka\",1684],[\"flag-lr\",1685],[\"liberia\",1685],[\"flag-ls\",1686],[\"lesotho\",1686],[\"flag-lt\",1687],[\"lithuania\",1687],[\"flag-lu\",1688],[\"luxembourg\",1688],[\"flag-lv\",1689],[\"latvia\",1689],[\"flag-ly\",1690],[\"libya\",1690],[\"flag-ma\",1691],[\"morocco\",1691],[\"flag-mc\",1692],[\"monaco\",1692],[\"flag-md\",1693],[\"moldova\",1693],[\"flag-me\",1694],[\"montenegro\",1694],[\"flag-mf\",1695],[\"flag-mg\",1696],[\"madagascar\",1696],[\"flag-mh\",1697],[\"marshall_islands\",1697],[\"flag-mk\",1698],[\"macedonia\",1698],[\"flag-ml\",1699],[\"mali\",1699],[\"flag-mm\",1700],[\"myanmar\",1700],[\"flag-mn\",1701],[\"mongolia\",1701],[\"flag-mo\",1702],[\"macau\",1702],[\"flag-mp\",1703],[\"northern_mariana_islands\",1703],[\"flag-mq\",1704],[\"martinique\",1704],[\"flag-mr\",1705],[\"mauritania\",1705],[\"flag-ms\",1706],[\"montserrat\",1706],[\"flag-mt\",1707],[\"malta\",1707],[\"flag-mu\",1708],[\"mauritius\",1708],[\"flag-mv\",1709],[\"maldives\",1709],[\"flag-mw\",1710],[\"malawi\",1710],[\"flag-mx\",1711],[\"mexico\",1711],[\"flag-my\",1712],[\"malaysia\",1712],[\"flag-mz\",1713],[\"mozambique\",1713],[\"flag-na\",1714],[\"namibia\",1714],[\"flag-nc\",1715],[\"new_caledonia\",1715],[\"flag-ne\",1716],[\"niger\",1716],[\"flag-nf\",1717],[\"norfolk_island\",1717],[\"flag-ng\",1718],[\"nigeria\",1718],[\"flag-ni\",1719],[\"nicaragua\",1719],[\"flag-nl\",1720],[\"netherlands\",1720],[\"flag-no\",1721],[\"norway\",1721],[\"flag-np\",1722],[\"nepal\",1722],[\"flag-nr\",1723],[\"nauru\",1723],[\"flag-nu\",1724],[\"niue\",1724],[\"flag-nz\",1725],[\"new_zealand\",1725],[\"flag-om\",1726],[\"oman\",1726],[\"flag-pa\",1727],[\"panama\",1727],[\"flag-pe\",1728],[\"peru\",1728],[\"flag-pf\",1729],[\"french_polynesia\",1729],[\"flag-pg\",1730],[\"papua_new_guinea\",1730],[\"flag-ph\",1731],[\"philippines\",1731],[\"flag-pk\",1732],[\"pakistan\",1732],[\"pk\",1732],[\"flag-pl\",1733],[\"poland\",1733],[\"flag-pm\",1734],[\"st_pierre_miquelon\",1734],[\"flag-pn\",1735],[\"pitcairn_islands\",1735],[\"flag-pr\",1736],[\"puerto_rico\",1736],[\"flag-ps\",1737],[\"palestinian_territories\",1737],[\"flag-pt\",1738],[\"portugal\",1738],[\"flag-pw\",1739],[\"palau\",1739],[\"flag-py\",1740],[\"paraguay\",1740],[\"flag-qa\",1741],[\"qatar\",1741],[\"flag-re\",1742],[\"reunion\",1742],[\"flag-ro\",1743],[\"romania\",1743],[\"flag-rs\",1744],[\"serbia\",1744],[\"ru\",1745],[\"flag-ru\",1745],[\"flag-rw\",1746],[\"rwanda\",1746],[\"flag-sa\",1747],[\"saudi_arabia\",1747],[\"flag-sb\",1748],[\"solomon_islands\",1748],[\"flag-sc\",1749],[\"seychelles\",1749],[\"flag-sd\",1750],[\"sudan\",1750],[\"flag-se\",1751],[\"sweden\",1751],[\"flag-sg\",1752],[\"singapore\",1752],[\"flag-sh\",1753],[\"st_helena\",1753],[\"flag-si\",1754],[\"slovenia\",1754],[\"flag-sj\",1755],[\"flag-sk\",1756],[\"slovakia\",1756],[\"flag-sl\",1757],[\"sierra_leone\",1757],[\"flag-sm\",1758],[\"san_marino\",1758],[\"flag-sn\",1759],[\"senegal\",1759],[\"flag-so\",1760],[\"somalia\",1760],[\"flag-sr\",1761],[\"suriname\",1761],[\"flag-ss\",1762],[\"south_sudan\",1762],[\"flag-st\",1763],[\"sao_tome_principe\",1763],[\"flag-sv\",1764],[\"el_salvador\",1764],[\"flag-sx\",1765],[\"sint_maarten\",1765],[\"flag-sy\",1766],[\"syria\",1766],[\"flag-sz\",1767],[\"swaziland\",1767],[\"flag-ta\",1768],[\"flag-tc\",1769],[\"turks_caicos_islands\",1769],[\"flag-td\",1770],[\"chad\",1770],[\"flag-tf\",1771],[\"french_southern_territories\",1771],[\"flag-tg\",1772],[\"togo\",1772],[\"flag-th\",1773],[\"thailand\",1773],[\"flag-tj\",1774],[\"tajikistan\",1774],[\"flag-tk\",1775],[\"tokelau\",1775],[\"flag-tl\",1776],[\"timor_leste\",1776],[\"flag-tm\",1777],[\"turkmenistan\",1777],[\"flag-tn\",1778],[\"tunisia\",1778],[\"flag-to\",1779],[\"tonga\",1779],[\"flag-tr\",1780],[\"tr\",1780],[\"flag-tt\",1781],[\"trinidad_tobago\",1781],[\"flag-tv\",1782],[\"tuvalu\",1782],[\"flag-tw\",1783],[\"taiwan\",1783],[\"flag-tz\",1784],[\"tanzania\",1784],[\"flag-ua\",1785],[\"ukraine\",1785],[\"flag-ug\",1786],[\"uganda\",1786],[\"flag-um\",1787],[\"flag-un\",1788],[\"us\",1789],[\"flag-us\",1789],[\"flag-uy\",1790],[\"uruguay\",1790],[\"flag-uz\",1791],[\"uzbekistan\",1791],[\"flag-va\",1792],[\"vatican_city\",1792],[\"flag-vc\",1793],[\"st_vincent_grenadines\",1793],[\"flag-ve\",1794],[\"venezuela\",1794],[\"flag-vg\",1795],[\"british_virgin_islands\",1795],[\"flag-vi\",1796],[\"us_virgin_islands\",1796],[\"flag-vn\",1797],[\"vietnam\",1797],[\"flag-vu\",1798],[\"vanuatu\",1798],[\"flag-wf\",1799],[\"wallis_futuna\",1799],[\"flag-ws\",1800],[\"samoa\",1800],[\"flag-xk\",1801],[\"kosovo\",1801],[\"flag-ye\",1802],[\"yemen\",1802],[\"flag-yt\",1803],[\"mayotte\",1803],[\"flag-za\",1804],[\"south_africa\",1804],[\"za\",1804],[\"flag-zm\",1805],[\"zambia\",1805],[\"flag-zw\",1806],[\"zimbabwe\",1806],[\"flag-england\",1807],[\"flag-scotland\",1808],[\"flag-wales\",1809],[\"santa_light_skin_tone\",1810],[\"santa_medium_light_skin_tone\",1811],[\"santa_medium_skin_tone\",1812],[\"santa_medium_dark_skin_tone\",1813],[\"santa_dark_skin_tone\",1814],[\"snowboarder_light_skin_tone\",1815],[\"snowboarder_medium_light_skin_tone\",1816],[\"snowboarder_medium_skin_tone\",1817],[\"snowboarder_medium_dark_skin_tone\",1818],[\"snowboarder_dark_skin_tone\",1819],[\"woman-running_light_skin_tone\",1820],[\"running_woman_light_skin_tone\",1820],[\"woman-running_medium_light_skin_tone\",1821],[\"running_woman_medium_light_skin_tone\",1821],[\"woman-running_medium_skin_tone\",1822],[\"running_woman_medium_skin_tone\",1822],[\"woman-running_medium_dark_skin_tone\",1823],[\"running_woman_medium_dark_skin_tone\",1823],[\"woman-running_dark_skin_tone\",1824],[\"running_woman_dark_skin_tone\",1824],[\"man-running_light_skin_tone\",1825],[\"running_man_light_skin_tone\",1825],[\"man-running_medium_light_skin_tone\",1826],[\"running_man_medium_light_skin_tone\",1826],[\"man-running_medium_skin_tone\",1827],[\"running_man_medium_skin_tone\",1827],[\"man-running_medium_dark_skin_tone\",1828],[\"running_man_medium_dark_skin_tone\",1828],[\"man-running_dark_skin_tone\",1829],[\"running_man_dark_skin_tone\",1829],[\"runner_light_skin_tone\",1830],[\"running_light_skin_tone\",1830],[\"runner_medium_light_skin_tone\",1831],[\"running_medium_light_skin_tone\",1831],[\"runner_medium_skin_tone\",1832],[\"running_medium_skin_tone\",1832],[\"runner_medium_dark_skin_tone\",1833],[\"running_medium_dark_skin_tone\",1833],[\"runner_dark_skin_tone\",1834],[\"running_dark_skin_tone\",1834],[\"woman-surfing_light_skin_tone\",1835],[\"surfing_woman_light_skin_tone\",1835],[\"woman-surfing_medium_light_skin_tone\",1836],[\"surfing_woman_medium_light_skin_tone\",1836],[\"woman-surfing_medium_skin_tone\",1837],[\"surfing_woman_medium_skin_tone\",1837],[\"woman-surfing_medium_dark_skin_tone\",1838],[\"surfing_woman_medium_dark_skin_tone\",1838],[\"woman-surfing_dark_skin_tone\",1839],[\"surfing_woman_dark_skin_tone\",1839],[\"man-surfing_light_skin_tone\",1840],[\"surfing_man_light_skin_tone\",1840],[\"man-surfing_medium_light_skin_tone\",1841],[\"surfing_man_medium_light_skin_tone\",1841],[\"man-surfing_medium_skin_tone\",1842],[\"surfing_man_medium_skin_tone\",1842],[\"man-surfing_medium_dark_skin_tone\",1843],[\"surfing_man_medium_dark_skin_tone\",1843],[\"man-surfing_dark_skin_tone\",1844],[\"surfing_man_dark_skin_tone\",1844],[\"surfer_light_skin_tone\",1845],[\"surfer_medium_light_skin_tone\",1846],[\"surfer_medium_skin_tone\",1847],[\"surfer_medium_dark_skin_tone\",1848],[\"surfer_dark_skin_tone\",1849],[\"horse_racing_light_skin_tone\",1850],[\"horse_racing_medium_light_skin_tone\",1851],[\"horse_racing_medium_skin_tone\",1852],[\"horse_racing_medium_dark_skin_tone\",1853],[\"horse_racing_dark_skin_tone\",1854],[\"woman-swimming_light_skin_tone\",1855],[\"swimming_woman_light_skin_tone\",1855],[\"woman-swimming_medium_light_skin_tone\",1856],[\"swimming_woman_medium_light_skin_tone\",1856],[\"woman-swimming_medium_skin_tone\",1857],[\"swimming_woman_medium_skin_tone\",1857],[\"woman-swimming_medium_dark_skin_tone\",1858],[\"swimming_woman_medium_dark_skin_tone\",1858],[\"woman-swimming_dark_skin_tone\",1859],[\"swimming_woman_dark_skin_tone\",1859],[\"man-swimming_light_skin_tone\",1860],[\"swimming_man_light_skin_tone\",1860],[\"man-swimming_medium_light_skin_tone\",1861],[\"swimming_man_medium_light_skin_tone\",1861],[\"man-swimming_medium_skin_tone\",1862],[\"swimming_man_medium_skin_tone\",1862],[\"man-swimming_medium_dark_skin_tone\",1863],[\"swimming_man_medium_dark_skin_tone\",1863],[\"man-swimming_dark_skin_tone\",1864],[\"swimming_man_dark_skin_tone\",1864],[\"swimmer_light_skin_tone\",1865],[\"swimmer_medium_light_skin_tone\",1866],[\"swimmer_medium_skin_tone\",1867],[\"swimmer_medium_dark_skin_tone\",1868],[\"swimmer_dark_skin_tone\",1869],[\"woman-lifting-weights_light_skin_tone\",1870],[\"weight_lifting_woman_light_skin_tone\",1870],[\"woman-lifting-weights_medium_light_skin_tone\",1871],[\"weight_lifting_woman_medium_light_skin_tone\",1871],[\"woman-lifting-weights_medium_skin_tone\",1872],[\"weight_lifting_woman_medium_skin_tone\",1872],[\"woman-lifting-weights_medium_dark_skin_tone\",1873],[\"weight_lifting_woman_medium_dark_skin_tone\",1873],[\"woman-lifting-weights_dark_skin_tone\",1874],[\"weight_lifting_woman_dark_skin_tone\",1874],[\"man-lifting-weights_light_skin_tone\",1875],[\"weight_lifting_man_light_skin_tone\",1875],[\"man-lifting-weights_medium_light_skin_tone\",1876],[\"weight_lifting_man_medium_light_skin_tone\",1876],[\"man-lifting-weights_medium_skin_tone\",1877],[\"weight_lifting_man_medium_skin_tone\",1877],[\"man-lifting-weights_medium_dark_skin_tone\",1878],[\"weight_lifting_man_medium_dark_skin_tone\",1878],[\"man-lifting-weights_dark_skin_tone\",1879],[\"weight_lifting_man_dark_skin_tone\",1879],[\"weight_lifter_light_skin_tone\",1880],[\"weight_lifter_medium_light_skin_tone\",1881],[\"weight_lifter_medium_skin_tone\",1882],[\"weight_lifter_medium_dark_skin_tone\",1883],[\"weight_lifter_dark_skin_tone\",1884],[\"woman-golfing_light_skin_tone\",1885],[\"golfing_woman_light_skin_tone\",1885],[\"woman-golfing_medium_light_skin_tone\",1886],[\"golfing_woman_medium_light_skin_tone\",1886],[\"woman-golfing_medium_skin_tone\",1887],[\"golfing_woman_medium_skin_tone\",1887],[\"woman-golfing_medium_dark_skin_tone\",1888],[\"golfing_woman_medium_dark_skin_tone\",1888],[\"woman-golfing_dark_skin_tone\",1889],[\"golfing_woman_dark_skin_tone\",1889],[\"man-golfing_light_skin_tone\",1890],[\"golfing_man_light_skin_tone\",1890],[\"man-golfing_medium_light_skin_tone\",1891],[\"golfing_man_medium_light_skin_tone\",1891],[\"man-golfing_medium_skin_tone\",1892],[\"golfing_man_medium_skin_tone\",1892],[\"man-golfing_medium_dark_skin_tone\",1893],[\"golfing_man_medium_dark_skin_tone\",1893],[\"man-golfing_dark_skin_tone\",1894],[\"golfing_man_dark_skin_tone\",1894],[\"golfer_light_skin_tone\",1895],[\"golfer_medium_light_skin_tone\",1896],[\"golfer_medium_skin_tone\",1897],[\"golfer_medium_dark_skin_tone\",1898],[\"golfer_dark_skin_tone\",1899],[\"ear_light_skin_tone\",1900],[\"ear_medium_light_skin_tone\",1901],[\"ear_medium_skin_tone\",1902],[\"ear_medium_dark_skin_tone\",1903],[\"ear_dark_skin_tone\",1904],[\"nose_light_skin_tone\",1905],[\"nose_medium_light_skin_tone\",1906],[\"nose_medium_skin_tone\",1907],[\"nose_medium_dark_skin_tone\",1908],[\"nose_dark_skin_tone\",1909],[\"point_up_2_light_skin_tone\",1910],[\"point_up_2_medium_light_skin_tone\",1911],[\"point_up_2_medium_skin_tone\",1912],[\"point_up_2_medium_dark_skin_tone\",1913],[\"point_up_2_dark_skin_tone\",1914],[\"point_down_light_skin_tone\",1915],[\"point_down_medium_light_skin_tone\",1916],[\"point_down_medium_skin_tone\",1917],[\"point_down_medium_dark_skin_tone\",1918],[\"point_down_dark_skin_tone\",1919],[\"point_left_light_skin_tone\",1920],[\"point_left_medium_light_skin_tone\",1921],[\"point_left_medium_skin_tone\",1922],[\"point_left_medium_dark_skin_tone\",1923],[\"point_left_dark_skin_tone\",1924],[\"point_right_light_skin_tone\",1925],[\"point_right_medium_light_skin_tone\",1926],[\"point_right_medium_skin_tone\",1927],[\"point_right_medium_dark_skin_tone\",1928],[\"point_right_dark_skin_tone\",1929],[\"facepunch_light_skin_tone\",1930],[\"punch_light_skin_tone\",1930],[\"fist_oncoming_light_skin_tone\",1930],[\"facepunch_medium_light_skin_tone\",1931],[\"punch_medium_light_skin_tone\",1931],[\"fist_oncoming_medium_light_skin_tone\",1931],[\"facepunch_medium_skin_tone\",1932],[\"punch_medium_skin_tone\",1932],[\"fist_oncoming_medium_skin_tone\",1932],[\"facepunch_medium_dark_skin_tone\",1933],[\"punch_medium_dark_skin_tone\",1933],[\"fist_oncoming_medium_dark_skin_tone\",1933],[\"facepunch_dark_skin_tone\",1934],[\"punch_dark_skin_tone\",1934],[\"fist_oncoming_dark_skin_tone\",1934],[\"wave_light_skin_tone\",1935],[\"wave_medium_light_skin_tone\",1936],[\"wave_medium_skin_tone\",1937],[\"wave_medium_dark_skin_tone\",1938],[\"wave_dark_skin_tone\",1939],[\"ok_hand_light_skin_tone\",1940],[\"ok_hand_medium_light_skin_tone\",1941],[\"ok_hand_medium_skin_tone\",1942],[\"ok_hand_medium_dark_skin_tone\",1943],[\"ok_hand_dark_skin_tone\",1944],[\"+1_light_skin_tone\",1945],[\"thumbsup_light_skin_tone\",1945],[\"+1_medium_light_skin_tone\",1946],[\"thumbsup_medium_light_skin_tone\",1946],[\"+1_medium_skin_tone\",1947],[\"thumbsup_medium_skin_tone\",1947],[\"+1_medium_dark_skin_tone\",1948],[\"thumbsup_medium_dark_skin_tone\",1948],[\"+1_dark_skin_tone\",1949],[\"thumbsup_dark_skin_tone\",1949],[\"-1_light_skin_tone\",1950],[\"thumbsdown_light_skin_tone\",1950],[\"-1_medium_light_skin_tone\",1951],[\"thumbsdown_medium_light_skin_tone\",1951],[\"-1_medium_skin_tone\",1952],[\"thumbsdown_medium_skin_tone\",1952],[\"-1_medium_dark_skin_tone\",1953],[\"thumbsdown_medium_dark_skin_tone\",1953],[\"-1_dark_skin_tone\",1954],[\"thumbsdown_dark_skin_tone\",1954],[\"clap_light_skin_tone\",1955],[\"clap_medium_light_skin_tone\",1956],[\"clap_medium_skin_tone\",1957],[\"clap_medium_dark_skin_tone\",1958],[\"clap_dark_skin_tone\",1959],[\"open_hands_light_skin_tone\",1960],[\"open_hands_medium_light_skin_tone\",1961],[\"open_hands_medium_skin_tone\",1962],[\"open_hands_medium_dark_skin_tone\",1963],[\"open_hands_dark_skin_tone\",1964],[\"boy_light_skin_tone\",1965],[\"boy_medium_light_skin_tone\",1966],[\"boy_medium_skin_tone\",1967],[\"boy_medium_dark_skin_tone\",1968],[\"boy_dark_skin_tone\",1969],[\"girl_light_skin_tone\",1970],[\"girl_medium_light_skin_tone\",1971],[\"girl_medium_skin_tone\",1972],[\"girl_medium_dark_skin_tone\",1973],[\"girl_dark_skin_tone\",1974],[\"male-farmer_light_skin_tone\",1975],[\"man_farmer_light_skin_tone\",1975],[\"male-farmer_medium_light_skin_tone\",1976],[\"man_farmer_medium_light_skin_tone\",1976],[\"male-farmer_medium_skin_tone\",1977],[\"man_farmer_medium_skin_tone\",1977],[\"male-farmer_medium_dark_skin_tone\",1978],[\"man_farmer_medium_dark_skin_tone\",1978],[\"male-farmer_dark_skin_tone\",1979],[\"man_farmer_dark_skin_tone\",1979],[\"male-cook_light_skin_tone\",1980],[\"man_cook_light_skin_tone\",1980],[\"male-cook_medium_light_skin_tone\",1981],[\"man_cook_medium_light_skin_tone\",1981],[\"male-cook_medium_skin_tone\",1982],[\"man_cook_medium_skin_tone\",1982],[\"male-cook_medium_dark_skin_tone\",1983],[\"man_cook_medium_dark_skin_tone\",1983],[\"male-cook_dark_skin_tone\",1984],[\"man_cook_dark_skin_tone\",1984],[\"man_feeding_baby_light_skin_tone\",1985],[\"man_feeding_baby_medium_light_skin_tone\",1986],[\"man_feeding_baby_medium_skin_tone\",1987],[\"man_feeding_baby_medium_dark_skin_tone\",1988],[\"man_feeding_baby_dark_skin_tone\",1989],[\"male-student_light_skin_tone\",1990],[\"man_student_light_skin_tone\",1990],[\"male-student_medium_light_skin_tone\",1991],[\"man_student_medium_light_skin_tone\",1991],[\"male-student_medium_skin_tone\",1992],[\"man_student_medium_skin_tone\",1992],[\"male-student_medium_dark_skin_tone\",1993],[\"man_student_medium_dark_skin_tone\",1993],[\"male-student_dark_skin_tone\",1994],[\"man_student_dark_skin_tone\",1994],[\"male-singer_light_skin_tone\",1995],[\"man_singer_light_skin_tone\",1995],[\"male-singer_medium_light_skin_tone\",1996],[\"man_singer_medium_light_skin_tone\",1996],[\"male-singer_medium_skin_tone\",1997],[\"man_singer_medium_skin_tone\",1997],[\"male-singer_medium_dark_skin_tone\",1998],[\"man_singer_medium_dark_skin_tone\",1998],[\"male-singer_dark_skin_tone\",1999],[\"man_singer_dark_skin_tone\",1999],[\"male-artist_light_skin_tone\",2000],[\"man_artist_light_skin_tone\",2000],[\"male-artist_medium_light_skin_tone\",2001],[\"man_artist_medium_light_skin_tone\",2001],[\"male-artist_medium_skin_tone\",2002],[\"man_artist_medium_skin_tone\",2002],[\"male-artist_medium_dark_skin_tone\",2003],[\"man_artist_medium_dark_skin_tone\",2003],[\"male-artist_dark_skin_tone\",2004],[\"man_artist_dark_skin_tone\",2004],[\"male-teacher_light_skin_tone\",2005],[\"man_teacher_light_skin_tone\",2005],[\"male-teacher_medium_light_skin_tone\",2006],[\"man_teacher_medium_light_skin_tone\",2006],[\"male-teacher_medium_skin_tone\",2007],[\"man_teacher_medium_skin_tone\",2007],[\"male-teacher_medium_dark_skin_tone\",2008],[\"man_teacher_medium_dark_skin_tone\",2008],[\"male-teacher_dark_skin_tone\",2009],[\"man_teacher_dark_skin_tone\",2009],[\"male-factory-worker_light_skin_tone\",2010],[\"man_factory_worker_light_skin_tone\",2010],[\"male-factory-worker_medium_light_skin_tone\",2011],[\"man_factory_worker_medium_light_skin_tone\",2011],[\"male-factory-worker_medium_skin_tone\",2012],[\"man_factory_worker_medium_skin_tone\",2012],[\"male-factory-worker_medium_dark_skin_tone\",2013],[\"man_factory_worker_medium_dark_skin_tone\",2013],[\"male-factory-worker_dark_skin_tone\",2014],[\"man_factory_worker_dark_skin_tone\",2014],[\"male-technologist_light_skin_tone\",2015],[\"man_technologist_light_skin_tone\",2015],[\"male-technologist_medium_light_skin_tone\",2016],[\"man_technologist_medium_light_skin_tone\",2016],[\"male-technologist_medium_skin_tone\",2017],[\"man_technologist_medium_skin_tone\",2017],[\"male-technologist_medium_dark_skin_tone\",2018],[\"man_technologist_medium_dark_skin_tone\",2018],[\"male-technologist_dark_skin_tone\",2019],[\"man_technologist_dark_skin_tone\",2019],[\"male-office-worker_light_skin_tone\",2020],[\"man_office_worker_light_skin_tone\",2020],[\"male-office-worker_medium_light_skin_tone\",2021],[\"man_office_worker_medium_light_skin_tone\",2021],[\"male-office-worker_medium_skin_tone\",2022],[\"man_office_worker_medium_skin_tone\",2022],[\"male-office-worker_medium_dark_skin_tone\",2023],[\"man_office_worker_medium_dark_skin_tone\",2023],[\"male-office-worker_dark_skin_tone\",2024],[\"man_office_worker_dark_skin_tone\",2024],[\"male-mechanic_light_skin_tone\",2025],[\"man_mechanic_light_skin_tone\",2025],[\"male-mechanic_medium_light_skin_tone\",2026],[\"man_mechanic_medium_light_skin_tone\",2026],[\"male-mechanic_medium_skin_tone\",2027],[\"man_mechanic_medium_skin_tone\",2027],[\"male-mechanic_medium_dark_skin_tone\",2028],[\"man_mechanic_medium_dark_skin_tone\",2028],[\"male-mechanic_dark_skin_tone\",2029],[\"man_mechanic_dark_skin_tone\",2029],[\"male-scientist_light_skin_tone\",2030],[\"man_scientist_light_skin_tone\",2030],[\"male-scientist_medium_light_skin_tone\",2031],[\"man_scientist_medium_light_skin_tone\",2031],[\"male-scientist_medium_skin_tone\",2032],[\"man_scientist_medium_skin_tone\",2032],[\"male-scientist_medium_dark_skin_tone\",2033],[\"man_scientist_medium_dark_skin_tone\",2033],[\"male-scientist_dark_skin_tone\",2034],[\"man_scientist_dark_skin_tone\",2034],[\"male-astronaut_light_skin_tone\",2035],[\"man_astronaut_light_skin_tone\",2035],[\"male-astronaut_medium_light_skin_tone\",2036],[\"man_astronaut_medium_light_skin_tone\",2036],[\"male-astronaut_medium_skin_tone\",2037],[\"man_astronaut_medium_skin_tone\",2037],[\"male-astronaut_medium_dark_skin_tone\",2038],[\"man_astronaut_medium_dark_skin_tone\",2038],[\"male-astronaut_dark_skin_tone\",2039],[\"man_astronaut_dark_skin_tone\",2039],[\"male-firefighter_light_skin_tone\",2040],[\"man_firefighter_light_skin_tone\",2040],[\"male-firefighter_medium_light_skin_tone\",2041],[\"man_firefighter_medium_light_skin_tone\",2041],[\"male-firefighter_medium_skin_tone\",2042],[\"man_firefighter_medium_skin_tone\",2042],[\"male-firefighter_medium_dark_skin_tone\",2043],[\"man_firefighter_medium_dark_skin_tone\",2043],[\"male-firefighter_dark_skin_tone\",2044],[\"man_firefighter_dark_skin_tone\",2044],[\"man_with_probing_cane_light_skin_tone\",2045],[\"man_with_probing_cane_medium_light_skin_tone\",2046],[\"man_with_probing_cane_medium_skin_tone\",2047],[\"man_with_probing_cane_medium_dark_skin_tone\",2048],[\"man_with_probing_cane_dark_skin_tone\",2049],[\"red_haired_man_light_skin_tone\",2050],[\"red_haired_man_medium_light_skin_tone\",2051],[\"red_haired_man_medium_skin_tone\",2052],[\"red_haired_man_medium_dark_skin_tone\",2053],[\"red_haired_man_dark_skin_tone\",2054],[\"curly_haired_man_light_skin_tone\",2055],[\"curly_haired_man_medium_light_skin_tone\",2056],[\"curly_haired_man_medium_skin_tone\",2057],[\"curly_haired_man_medium_dark_skin_tone\",2058],[\"curly_haired_man_dark_skin_tone\",2059],[\"bald_man_light_skin_tone\",2060],[\"bald_man_medium_light_skin_tone\",2061],[\"bald_man_medium_skin_tone\",2062],[\"bald_man_medium_dark_skin_tone\",2063],[\"bald_man_dark_skin_tone\",2064],[\"white_haired_man_light_skin_tone\",2065],[\"white_haired_man_medium_light_skin_tone\",2066],[\"white_haired_man_medium_skin_tone\",2067],[\"white_haired_man_medium_dark_skin_tone\",2068],[\"white_haired_man_dark_skin_tone\",2069],[\"man_in_motorized_wheelchair_light_skin_tone\",2070],[\"man_in_motorized_wheelchair_medium_light_skin_tone\",2071],[\"man_in_motorized_wheelchair_medium_skin_tone\",2072],[\"man_in_motorized_wheelchair_medium_dark_skin_tone\",2073],[\"man_in_motorized_wheelchair_dark_skin_tone\",2074],[\"man_in_manual_wheelchair_light_skin_tone\",2075],[\"man_in_manual_wheelchair_medium_light_skin_tone\",2076],[\"man_in_manual_wheelchair_medium_skin_tone\",2077],[\"man_in_manual_wheelchair_medium_dark_skin_tone\",2078],[\"man_in_manual_wheelchair_dark_skin_tone\",2079],[\"male-doctor_light_skin_tone\",2080],[\"man_health_worker_light_skin_tone\",2080],[\"male-doctor_medium_light_skin_tone\",2081],[\"man_health_worker_medium_light_skin_tone\",2081],[\"male-doctor_medium_skin_tone\",2082],[\"man_health_worker_medium_skin_tone\",2082],[\"male-doctor_medium_dark_skin_tone\",2083],[\"man_health_worker_medium_dark_skin_tone\",2083],[\"male-doctor_dark_skin_tone\",2084],[\"man_health_worker_dark_skin_tone\",2084],[\"male-judge_light_skin_tone\",2085],[\"man_judge_light_skin_tone\",2085],[\"male-judge_medium_light_skin_tone\",2086],[\"man_judge_medium_light_skin_tone\",2086],[\"male-judge_medium_skin_tone\",2087],[\"man_judge_medium_skin_tone\",2087],[\"male-judge_medium_dark_skin_tone\",2088],[\"man_judge_medium_dark_skin_tone\",2088],[\"male-judge_dark_skin_tone\",2089],[\"man_judge_dark_skin_tone\",2089],[\"male-pilot_light_skin_tone\",2090],[\"man_pilot_light_skin_tone\",2090],[\"male-pilot_medium_light_skin_tone\",2091],[\"man_pilot_medium_light_skin_tone\",2091],[\"male-pilot_medium_skin_tone\",2092],[\"man_pilot_medium_skin_tone\",2092],[\"male-pilot_medium_dark_skin_tone\",2093],[\"man_pilot_medium_dark_skin_tone\",2093],[\"male-pilot_dark_skin_tone\",2094],[\"man_pilot_dark_skin_tone\",2094],[\"man_light_skin_tone\",2095],[\"man_medium_light_skin_tone\",2096],[\"man_medium_skin_tone\",2097],[\"man_medium_dark_skin_tone\",2098],[\"man_dark_skin_tone\",2099],[\"female-farmer_light_skin_tone\",2100],[\"woman_farmer_light_skin_tone\",2100],[\"female-farmer_medium_light_skin_tone\",2101],[\"woman_farmer_medium_light_skin_tone\",2101],[\"female-farmer_medium_skin_tone\",2102],[\"woman_farmer_medium_skin_tone\",2102],[\"female-farmer_medium_dark_skin_tone\",2103],[\"woman_farmer_medium_dark_skin_tone\",2103],[\"female-farmer_dark_skin_tone\",2104],[\"woman_farmer_dark_skin_tone\",2104],[\"female-cook_light_skin_tone\",2105],[\"woman_cook_light_skin_tone\",2105],[\"female-cook_medium_light_skin_tone\",2106],[\"woman_cook_medium_light_skin_tone\",2106],[\"female-cook_medium_skin_tone\",2107],[\"woman_cook_medium_skin_tone\",2107],[\"female-cook_medium_dark_skin_tone\",2108],[\"woman_cook_medium_dark_skin_tone\",2108],[\"female-cook_dark_skin_tone\",2109],[\"woman_cook_dark_skin_tone\",2109],[\"woman_feeding_baby_light_skin_tone\",2110],[\"woman_feeding_baby_medium_light_skin_tone\",2111],[\"woman_feeding_baby_medium_skin_tone\",2112],[\"woman_feeding_baby_medium_dark_skin_tone\",2113],[\"woman_feeding_baby_dark_skin_tone\",2114],[\"female-student_light_skin_tone\",2115],[\"woman_student_light_skin_tone\",2115],[\"female-student_medium_light_skin_tone\",2116],[\"woman_student_medium_light_skin_tone\",2116],[\"female-student_medium_skin_tone\",2117],[\"woman_student_medium_skin_tone\",2117],[\"female-student_medium_dark_skin_tone\",2118],[\"woman_student_medium_dark_skin_tone\",2118],[\"female-student_dark_skin_tone\",2119],[\"woman_student_dark_skin_tone\",2119],[\"female-singer_light_skin_tone\",2120],[\"woman_singer_light_skin_tone\",2120],[\"female-singer_medium_light_skin_tone\",2121],[\"woman_singer_medium_light_skin_tone\",2121],[\"female-singer_medium_skin_tone\",2122],[\"woman_singer_medium_skin_tone\",2122],[\"female-singer_medium_dark_skin_tone\",2123],[\"woman_singer_medium_dark_skin_tone\",2123],[\"female-singer_dark_skin_tone\",2124],[\"woman_singer_dark_skin_tone\",2124],[\"female-artist_light_skin_tone\",2125],[\"woman_artist_light_skin_tone\",2125],[\"female-artist_medium_light_skin_tone\",2126],[\"woman_artist_medium_light_skin_tone\",2126],[\"female-artist_medium_skin_tone\",2127],[\"woman_artist_medium_skin_tone\",2127],[\"female-artist_medium_dark_skin_tone\",2128],[\"woman_artist_medium_dark_skin_tone\",2128],[\"female-artist_dark_skin_tone\",2129],[\"woman_artist_dark_skin_tone\",2129],[\"female-teacher_light_skin_tone\",2130],[\"woman_teacher_light_skin_tone\",2130],[\"female-teacher_medium_light_skin_tone\",2131],[\"woman_teacher_medium_light_skin_tone\",2131],[\"female-teacher_medium_skin_tone\",2132],[\"woman_teacher_medium_skin_tone\",2132],[\"female-teacher_medium_dark_skin_tone\",2133],[\"woman_teacher_medium_dark_skin_tone\",2133],[\"female-teacher_dark_skin_tone\",2134],[\"woman_teacher_dark_skin_tone\",2134],[\"female-factory-worker_light_skin_tone\",2135],[\"woman_factory_worker_light_skin_tone\",2135],[\"female-factory-worker_medium_light_skin_tone\",2136],[\"woman_factory_worker_medium_light_skin_tone\",2136],[\"female-factory-worker_medium_skin_tone\",2137],[\"woman_factory_worker_medium_skin_tone\",2137],[\"female-factory-worker_medium_dark_skin_tone\",2138],[\"woman_factory_worker_medium_dark_skin_tone\",2138],[\"female-factory-worker_dark_skin_tone\",2139],[\"woman_factory_worker_dark_skin_tone\",2139],[\"female-technologist_light_skin_tone\",2140],[\"woman_technologist_light_skin_tone\",2140],[\"female-technologist_medium_light_skin_tone\",2141],[\"woman_technologist_medium_light_skin_tone\",2141],[\"female-technologist_medium_skin_tone\",2142],[\"woman_technologist_medium_skin_tone\",2142],[\"female-technologist_medium_dark_skin_tone\",2143],[\"woman_technologist_medium_dark_skin_tone\",2143],[\"female-technologist_dark_skin_tone\",2144],[\"woman_technologist_dark_skin_tone\",2144],[\"female-office-worker_light_skin_tone\",2145],[\"woman_office_worker_light_skin_tone\",2145],[\"female-office-worker_medium_light_skin_tone\",2146],[\"woman_office_worker_medium_light_skin_tone\",2146],[\"female-office-worker_medium_skin_tone\",2147],[\"woman_office_worker_medium_skin_tone\",2147],[\"female-office-worker_medium_dark_skin_tone\",2148],[\"woman_office_worker_medium_dark_skin_tone\",2148],[\"female-office-worker_dark_skin_tone\",2149],[\"woman_office_worker_dark_skin_tone\",2149],[\"female-mechanic_light_skin_tone\",2150],[\"woman_mechanic_light_skin_tone\",2150],[\"female-mechanic_medium_light_skin_tone\",2151],[\"woman_mechanic_medium_light_skin_tone\",2151],[\"female-mechanic_medium_skin_tone\",2152],[\"woman_mechanic_medium_skin_tone\",2152],[\"female-mechanic_medium_dark_skin_tone\",2153],[\"woman_mechanic_medium_dark_skin_tone\",2153],[\"female-mechanic_dark_skin_tone\",2154],[\"woman_mechanic_dark_skin_tone\",2154],[\"female-scientist_light_skin_tone\",2155],[\"woman_scientist_light_skin_tone\",2155],[\"female-scientist_medium_light_skin_tone\",2156],[\"woman_scientist_medium_light_skin_tone\",2156],[\"female-scientist_medium_skin_tone\",2157],[\"woman_scientist_medium_skin_tone\",2157],[\"female-scientist_medium_dark_skin_tone\",2158],[\"woman_scientist_medium_dark_skin_tone\",2158],[\"female-scientist_dark_skin_tone\",2159],[\"woman_scientist_dark_skin_tone\",2159],[\"female-astronaut_light_skin_tone\",2160],[\"woman_astronaut_light_skin_tone\",2160],[\"female-astronaut_medium_light_skin_tone\",2161],[\"woman_astronaut_medium_light_skin_tone\",2161],[\"female-astronaut_medium_skin_tone\",2162],[\"woman_astronaut_medium_skin_tone\",2162],[\"female-astronaut_medium_dark_skin_tone\",2163],[\"woman_astronaut_medium_dark_skin_tone\",2163],[\"female-astronaut_dark_skin_tone\",2164],[\"woman_astronaut_dark_skin_tone\",2164],[\"female-firefighter_light_skin_tone\",2165],[\"woman_firefighter_light_skin_tone\",2165],[\"female-firefighter_medium_light_skin_tone\",2166],[\"woman_firefighter_medium_light_skin_tone\",2166],[\"female-firefighter_medium_skin_tone\",2167],[\"woman_firefighter_medium_skin_tone\",2167],[\"female-firefighter_medium_dark_skin_tone\",2168],[\"woman_firefighter_medium_dark_skin_tone\",2168],[\"female-firefighter_dark_skin_tone\",2169],[\"woman_firefighter_dark_skin_tone\",2169],[\"woman_with_probing_cane_light_skin_tone\",2170],[\"woman_with_probing_cane_medium_light_skin_tone\",2171],[\"woman_with_probing_cane_medium_skin_tone\",2172],[\"woman_with_probing_cane_medium_dark_skin_tone\",2173],[\"woman_with_probing_cane_dark_skin_tone\",2174],[\"red_haired_woman_light_skin_tone\",2175],[\"red_haired_woman_medium_light_skin_tone\",2176],[\"red_haired_woman_medium_skin_tone\",2177],[\"red_haired_woman_medium_dark_skin_tone\",2178],[\"red_haired_woman_dark_skin_tone\",2179],[\"curly_haired_woman_light_skin_tone\",2180],[\"curly_haired_woman_medium_light_skin_tone\",2181],[\"curly_haired_woman_medium_skin_tone\",2182],[\"curly_haired_woman_medium_dark_skin_tone\",2183],[\"curly_haired_woman_dark_skin_tone\",2184],[\"bald_woman_light_skin_tone\",2185],[\"bald_woman_medium_light_skin_tone\",2186],[\"bald_woman_medium_skin_tone\",2187],[\"bald_woman_medium_dark_skin_tone\",2188],[\"bald_woman_dark_skin_tone\",2189],[\"white_haired_woman_light_skin_tone\",2190],[\"white_haired_woman_medium_light_skin_tone\",2191],[\"white_haired_woman_medium_skin_tone\",2192],[\"white_haired_woman_medium_dark_skin_tone\",2193],[\"white_haired_woman_dark_skin_tone\",2194],[\"woman_in_motorized_wheelchair_light_skin_tone\",2195],[\"woman_in_motorized_wheelchair_medium_light_skin_tone\",2196],[\"woman_in_motorized_wheelchair_medium_skin_tone\",2197],[\"woman_in_motorized_wheelchair_medium_dark_skin_tone\",2198],[\"woman_in_motorized_wheelchair_dark_skin_tone\",2199],[\"woman_in_manual_wheelchair_light_skin_tone\",2200],[\"woman_in_manual_wheelchair_medium_light_skin_tone\",2201],[\"woman_in_manual_wheelchair_medium_skin_tone\",2202],[\"woman_in_manual_wheelchair_medium_dark_skin_tone\",2203],[\"woman_in_manual_wheelchair_dark_skin_tone\",2204],[\"female-doctor_light_skin_tone\",2205],[\"woman_health_worker_light_skin_tone\",2205],[\"female-doctor_medium_light_skin_tone\",2206],[\"woman_health_worker_medium_light_skin_tone\",2206],[\"female-doctor_medium_skin_tone\",2207],[\"woman_health_worker_medium_skin_tone\",2207],[\"female-doctor_medium_dark_skin_tone\",2208],[\"woman_health_worker_medium_dark_skin_tone\",2208],[\"female-doctor_dark_skin_tone\",2209],[\"woman_health_worker_dark_skin_tone\",2209],[\"female-judge_light_skin_tone\",2210],[\"woman_judge_light_skin_tone\",2210],[\"female-judge_medium_light_skin_tone\",2211],[\"woman_judge_medium_light_skin_tone\",2211],[\"female-judge_medium_skin_tone\",2212],[\"woman_judge_medium_skin_tone\",2212],[\"female-judge_medium_dark_skin_tone\",2213],[\"woman_judge_medium_dark_skin_tone\",2213],[\"female-judge_dark_skin_tone\",2214],[\"woman_judge_dark_skin_tone\",2214],[\"female-pilot_light_skin_tone\",2215],[\"woman_pilot_light_skin_tone\",2215],[\"female-pilot_medium_light_skin_tone\",2216],[\"woman_pilot_medium_light_skin_tone\",2216],[\"female-pilot_medium_skin_tone\",2217],[\"woman_pilot_medium_skin_tone\",2217],[\"female-pilot_medium_dark_skin_tone\",2218],[\"woman_pilot_medium_dark_skin_tone\",2218],[\"female-pilot_dark_skin_tone\",2219],[\"woman_pilot_dark_skin_tone\",2219],[\"woman_light_skin_tone\",2220],[\"woman_medium_light_skin_tone\",2221],[\"woman_medium_skin_tone\",2222],[\"woman_medium_dark_skin_tone\",2223],[\"woman_dark_skin_tone\",2224],[\"man_and_woman_holding_hands_light_skin_tone\",2225],[\"woman_and_man_holding_hands_light_skin_tone\",2225],[\"couple_light_skin_tone\",2225],[\"man_and_woman_holding_hands_medium_light_skin_tone\",2226],[\"woman_and_man_holding_hands_medium_light_skin_tone\",2226],[\"couple_medium_light_skin_tone\",2226],[\"man_and_woman_holding_hands_medium_skin_tone\",2227],[\"woman_and_man_holding_hands_medium_skin_tone\",2227],[\"couple_medium_skin_tone\",2227],[\"man_and_woman_holding_hands_medium_dark_skin_tone\",2228],[\"woman_and_man_holding_hands_medium_dark_skin_tone\",2228],[\"couple_medium_dark_skin_tone\",2228],[\"man_and_woman_holding_hands_dark_skin_tone\",2229],[\"woman_and_man_holding_hands_dark_skin_tone\",2229],[\"couple_dark_skin_tone\",2229],[\"man_and_woman_holding_hands_light_skin_tone_medium_light_skin_tone\",2230],[\"woman_and_man_holding_hands_light_skin_tone_medium_light_skin_tone\",2230],[\"couple_light_skin_tone_medium_light_skin_tone\",2230],[\"man_and_woman_holding_hands_light_skin_tone_medium_skin_tone\",2231],[\"woman_and_man_holding_hands_light_skin_tone_medium_skin_tone\",2231],[\"couple_light_skin_tone_medium_skin_tone\",2231],[\"man_and_woman_holding_hands_light_skin_tone_medium_dark_skin_tone\",2232],[\"woman_and_man_holding_hands_light_skin_tone_medium_dark_skin_tone\",2232],[\"couple_light_skin_tone_medium_dark_skin_tone\",2232],[\"man_and_woman_holding_hands_light_skin_tone_dark_skin_tone\",2233],[\"woman_and_man_holding_hands_light_skin_tone_dark_skin_tone\",2233],[\"couple_light_skin_tone_dark_skin_tone\",2233],[\"man_and_woman_holding_hands_medium_light_skin_tone_light_skin_tone\",2234],[\"woman_and_man_holding_hands_medium_light_skin_tone_light_skin_tone\",2234],[\"couple_medium_light_skin_tone_light_skin_tone\",2234],[\"man_and_woman_holding_hands_medium_light_skin_tone_medium_skin_tone\",2235],[\"woman_and_man_holding_hands_medium_light_skin_tone_medium_skin_tone\",2235],[\"couple_medium_light_skin_tone_medium_skin_tone\",2235],[\"man_and_woman_holding_hands_medium_light_skin_tone_medium_dark_skin_tone\",2236],[\"woman_and_man_holding_hands_medium_light_skin_tone_medium_dark_skin_tone\",2236],[\"couple_medium_light_skin_tone_medium_dark_skin_tone\",2236],[\"man_and_woman_holding_hands_medium_light_skin_tone_dark_skin_tone\",2237],[\"woman_and_man_holding_hands_medium_light_skin_tone_dark_skin_tone\",2237],[\"couple_medium_light_skin_tone_dark_skin_tone\",2237],[\"man_and_woman_holding_hands_medium_skin_tone_light_skin_tone\",2238],[\"woman_and_man_holding_hands_medium_skin_tone_light_skin_tone\",2238],[\"couple_medium_skin_tone_light_skin_tone\",2238],[\"man_and_woman_holding_hands_medium_skin_tone_medium_light_skin_tone\",2239],[\"woman_and_man_holding_hands_medium_skin_tone_medium_light_skin_tone\",2239],[\"couple_medium_skin_tone_medium_light_skin_tone\",2239],[\"man_and_woman_holding_hands_medium_skin_tone_medium_dark_skin_tone\",2240],[\"woman_and_man_holding_hands_medium_skin_tone_medium_dark_skin_tone\",2240],[\"couple_medium_skin_tone_medium_dark_skin_tone\",2240],[\"man_and_woman_holding_hands_medium_skin_tone_dark_skin_tone\",2241],[\"woman_and_man_holding_hands_medium_skin_tone_dark_skin_tone\",2241],[\"couple_medium_skin_tone_dark_skin_tone\",2241],[\"man_and_woman_holding_hands_medium_dark_skin_tone_light_skin_tone\",2242],[\"woman_and_man_holding_hands_medium_dark_skin_tone_light_skin_tone\",2242],[\"couple_medium_dark_skin_tone_light_skin_tone\",2242],[\"man_and_woman_holding_hands_medium_dark_skin_tone_medium_light_skin_tone\",2243],[\"woman_and_man_holding_hands_medium_dark_skin_tone_medium_light_skin_tone\",2243],[\"couple_medium_dark_skin_tone_medium_light_skin_tone\",2243],[\"man_and_woman_holding_hands_medium_dark_skin_tone_medium_skin_tone\",2244],[\"woman_and_man_holding_hands_medium_dark_skin_tone_medium_skin_tone\",2244],[\"couple_medium_dark_skin_tone_medium_skin_tone\",2244],[\"man_and_woman_holding_hands_medium_dark_skin_tone_dark_skin_tone\",2245],[\"woman_and_man_holding_hands_medium_dark_skin_tone_dark_skin_tone\",2245],[\"couple_medium_dark_skin_tone_dark_skin_tone\",2245],[\"man_and_woman_holding_hands_dark_skin_tone_light_skin_tone\",2246],[\"woman_and_man_holding_hands_dark_skin_tone_light_skin_tone\",2246],[\"couple_dark_skin_tone_light_skin_tone\",2246],[\"man_and_woman_holding_hands_dark_skin_tone_medium_light_skin_tone\",2247],[\"woman_and_man_holding_hands_dark_skin_tone_medium_light_skin_tone\",2247],[\"couple_dark_skin_tone_medium_light_skin_tone\",2247],[\"man_and_woman_holding_hands_dark_skin_tone_medium_skin_tone\",2248],[\"woman_and_man_holding_hands_dark_skin_tone_medium_skin_tone\",2248],[\"couple_dark_skin_tone_medium_skin_tone\",2248],[\"man_and_woman_holding_hands_dark_skin_tone_medium_dark_skin_tone\",2249],[\"woman_and_man_holding_hands_dark_skin_tone_medium_dark_skin_tone\",2249],[\"couple_dark_skin_tone_medium_dark_skin_tone\",2249],[\"two_men_holding_hands_light_skin_tone\",2250],[\"men_holding_hands_light_skin_tone\",2250],[\"two_men_holding_hands_medium_light_skin_tone\",2251],[\"men_holding_hands_medium_light_skin_tone\",2251],[\"two_men_holding_hands_medium_skin_tone\",2252],[\"men_holding_hands_medium_skin_tone\",2252],[\"two_men_holding_hands_medium_dark_skin_tone\",2253],[\"men_holding_hands_medium_dark_skin_tone\",2253],[\"two_men_holding_hands_dark_skin_tone\",2254],[\"men_holding_hands_dark_skin_tone\",2254],[\"two_men_holding_hands_light_skin_tone_medium_light_skin_tone\",2255],[\"men_holding_hands_light_skin_tone_medium_light_skin_tone\",2255],[\"two_men_holding_hands_light_skin_tone_medium_skin_tone\",2256],[\"men_holding_hands_light_skin_tone_medium_skin_tone\",2256],[\"two_men_holding_hands_light_skin_tone_medium_dark_skin_tone\",2257],[\"men_holding_hands_light_skin_tone_medium_dark_skin_tone\",2257],[\"two_men_holding_hands_light_skin_tone_dark_skin_tone\",2258],[\"men_holding_hands_light_skin_tone_dark_skin_tone\",2258],[\"two_men_holding_hands_medium_light_skin_tone_light_skin_tone\",2259],[\"men_holding_hands_medium_light_skin_tone_light_skin_tone\",2259],[\"two_men_holding_hands_medium_light_skin_tone_medium_skin_tone\",2260],[\"men_holding_hands_medium_light_skin_tone_medium_skin_tone\",2260],[\"two_men_holding_hands_medium_light_skin_tone_medium_dark_skin_tone\",2261],[\"men_holding_hands_medium_light_skin_tone_medium_dark_skin_tone\",2261],[\"two_men_holding_hands_medium_light_skin_tone_dark_skin_tone\",2262],[\"men_holding_hands_medium_light_skin_tone_dark_skin_tone\",2262],[\"two_men_holding_hands_medium_skin_tone_light_skin_tone\",2263],[\"men_holding_hands_medium_skin_tone_light_skin_tone\",2263],[\"two_men_holding_hands_medium_skin_tone_medium_light_skin_tone\",2264],[\"men_holding_hands_medium_skin_tone_medium_light_skin_tone\",2264],[\"two_men_holding_hands_medium_skin_tone_medium_dark_skin_tone\",2265],[\"men_holding_hands_medium_skin_tone_medium_dark_skin_tone\",2265],[\"two_men_holding_hands_medium_skin_tone_dark_skin_tone\",2266],[\"men_holding_hands_medium_skin_tone_dark_skin_tone\",2266],[\"two_men_holding_hands_medium_dark_skin_tone_light_skin_tone\",2267],[\"men_holding_hands_medium_dark_skin_tone_light_skin_tone\",2267],[\"two_men_holding_hands_medium_dark_skin_tone_medium_light_skin_tone\",2268],[\"men_holding_hands_medium_dark_skin_tone_medium_light_skin_tone\",2268],[\"two_men_holding_hands_medium_dark_skin_tone_medium_skin_tone\",2269],[\"men_holding_hands_medium_dark_skin_tone_medium_skin_tone\",2269],[\"two_men_holding_hands_medium_dark_skin_tone_dark_skin_tone\",2270],[\"men_holding_hands_medium_dark_skin_tone_dark_skin_tone\",2270],[\"two_men_holding_hands_dark_skin_tone_light_skin_tone\",2271],[\"men_holding_hands_dark_skin_tone_light_skin_tone\",2271],[\"two_men_holding_hands_dark_skin_tone_medium_light_skin_tone\",2272],[\"men_holding_hands_dark_skin_tone_medium_light_skin_tone\",2272],[\"two_men_holding_hands_dark_skin_tone_medium_skin_tone\",2273],[\"men_holding_hands_dark_skin_tone_medium_skin_tone\",2273],[\"two_men_holding_hands_dark_skin_tone_medium_dark_skin_tone\",2274],[\"men_holding_hands_dark_skin_tone_medium_dark_skin_tone\",2274],[\"two_women_holding_hands_light_skin_tone\",2275],[\"women_holding_hands_light_skin_tone\",2275],[\"two_women_holding_hands_medium_light_skin_tone\",2276],[\"women_holding_hands_medium_light_skin_tone\",2276],[\"two_women_holding_hands_medium_skin_tone\",2277],[\"women_holding_hands_medium_skin_tone\",2277],[\"two_women_holding_hands_medium_dark_skin_tone\",2278],[\"women_holding_hands_medium_dark_skin_tone\",2278],[\"two_women_holding_hands_dark_skin_tone\",2279],[\"women_holding_hands_dark_skin_tone\",2279],[\"two_women_holding_hands_light_skin_tone_medium_light_skin_tone\",2280],[\"women_holding_hands_light_skin_tone_medium_light_skin_tone\",2280],[\"two_women_holding_hands_light_skin_tone_medium_skin_tone\",2281],[\"women_holding_hands_light_skin_tone_medium_skin_tone\",2281],[\"two_women_holding_hands_light_skin_tone_medium_dark_skin_tone\",2282],[\"women_holding_hands_light_skin_tone_medium_dark_skin_tone\",2282],[\"two_women_holding_hands_light_skin_tone_dark_skin_tone\",2283],[\"women_holding_hands_light_skin_tone_dark_skin_tone\",2283],[\"two_women_holding_hands_medium_light_skin_tone_light_skin_tone\",2284],[\"women_holding_hands_medium_light_skin_tone_light_skin_tone\",2284],[\"two_women_holding_hands_medium_light_skin_tone_medium_skin_tone\",2285],[\"women_holding_hands_medium_light_skin_tone_medium_skin_tone\",2285],[\"two_women_holding_hands_medium_light_skin_tone_medium_dark_skin_tone\",2286],[\"women_holding_hands_medium_light_skin_tone_medium_dark_skin_tone\",2286],[\"two_women_holding_hands_medium_light_skin_tone_dark_skin_tone\",2287],[\"women_holding_hands_medium_light_skin_tone_dark_skin_tone\",2287],[\"two_women_holding_hands_medium_skin_tone_light_skin_tone\",2288],[\"women_holding_hands_medium_skin_tone_light_skin_tone\",2288],[\"two_women_holding_hands_medium_skin_tone_medium_light_skin_tone\",2289],[\"women_holding_hands_medium_skin_tone_medium_light_skin_tone\",2289],[\"two_women_holding_hands_medium_skin_tone_medium_dark_skin_tone\",2290],[\"women_holding_hands_medium_skin_tone_medium_dark_skin_tone\",2290],[\"two_women_holding_hands_medium_skin_tone_dark_skin_tone\",2291],[\"women_holding_hands_medium_skin_tone_dark_skin_tone\",2291],[\"two_women_holding_hands_medium_dark_skin_tone_light_skin_tone\",2292],[\"women_holding_hands_medium_dark_skin_tone_light_skin_tone\",2292],[\"two_women_holding_hands_medium_dark_skin_tone_medium_light_skin_tone\",2293],[\"women_holding_hands_medium_dark_skin_tone_medium_light_skin_tone\",2293],[\"two_women_holding_hands_medium_dark_skin_tone_medium_skin_tone\",2294],[\"women_holding_hands_medium_dark_skin_tone_medium_skin_tone\",2294],[\"two_women_holding_hands_medium_dark_skin_tone_dark_skin_tone\",2295],[\"women_holding_hands_medium_dark_skin_tone_dark_skin_tone\",2295],[\"two_women_holding_hands_dark_skin_tone_light_skin_tone\",2296],[\"women_holding_hands_dark_skin_tone_light_skin_tone\",2296],[\"two_women_holding_hands_dark_skin_tone_medium_light_skin_tone\",2297],[\"women_holding_hands_dark_skin_tone_medium_light_skin_tone\",2297],[\"two_women_holding_hands_dark_skin_tone_medium_skin_tone\",2298],[\"women_holding_hands_dark_skin_tone_medium_skin_tone\",2298],[\"two_women_holding_hands_dark_skin_tone_medium_dark_skin_tone\",2299],[\"women_holding_hands_dark_skin_tone_medium_dark_skin_tone\",2299],[\"female-police-officer_light_skin_tone\",2300],[\"policewoman_light_skin_tone\",2300],[\"female-police-officer_medium_light_skin_tone\",2301],[\"policewoman_medium_light_skin_tone\",2301],[\"female-police-officer_medium_skin_tone\",2302],[\"policewoman_medium_skin_tone\",2302],[\"female-police-officer_medium_dark_skin_tone\",2303],[\"policewoman_medium_dark_skin_tone\",2303],[\"female-police-officer_dark_skin_tone\",2304],[\"policewoman_dark_skin_tone\",2304],[\"male-police-officer_light_skin_tone\",2305],[\"policeman_light_skin_tone\",2305],[\"male-police-officer_medium_light_skin_tone\",2306],[\"policeman_medium_light_skin_tone\",2306],[\"male-police-officer_medium_skin_tone\",2307],[\"policeman_medium_skin_tone\",2307],[\"male-police-officer_medium_dark_skin_tone\",2308],[\"policeman_medium_dark_skin_tone\",2308],[\"male-police-officer_dark_skin_tone\",2309],[\"policeman_dark_skin_tone\",2309],[\"cop_light_skin_tone\",2310],[\"cop_medium_light_skin_tone\",2311],[\"cop_medium_skin_tone\",2312],[\"cop_medium_dark_skin_tone\",2313],[\"cop_dark_skin_tone\",2314],[\"woman_with_veil_light_skin_tone\",2315],[\"woman_with_veil_medium_light_skin_tone\",2316],[\"woman_with_veil_medium_skin_tone\",2317],[\"woman_with_veil_medium_dark_skin_tone\",2318],[\"woman_with_veil_dark_skin_tone\",2319],[\"man_with_veil_light_skin_tone\",2320],[\"man_with_veil_medium_light_skin_tone\",2321],[\"man_with_veil_medium_skin_tone\",2322],[\"man_with_veil_medium_dark_skin_tone\",2323],[\"man_with_veil_dark_skin_tone\",2324],[\"bride_with_veil_light_skin_tone\",2325],[\"bride_with_veil_medium_light_skin_tone\",2326],[\"bride_with_veil_medium_skin_tone\",2327],[\"bride_with_veil_medium_dark_skin_tone\",2328],[\"bride_with_veil_dark_skin_tone\",2329],[\"blond-haired-woman_light_skin_tone\",2330],[\"blonde_woman_light_skin_tone\",2330],[\"blond-haired-woman_medium_light_skin_tone\",2331],[\"blonde_woman_medium_light_skin_tone\",2331],[\"blond-haired-woman_medium_skin_tone\",2332],[\"blonde_woman_medium_skin_tone\",2332],[\"blond-haired-woman_medium_dark_skin_tone\",2333],[\"blonde_woman_medium_dark_skin_tone\",2333],[\"blond-haired-woman_dark_skin_tone\",2334],[\"blonde_woman_dark_skin_tone\",2334],[\"blond-haired-man_light_skin_tone\",2335],[\"blonde_man_light_skin_tone\",2335],[\"blond-haired-man_medium_light_skin_tone\",2336],[\"blonde_man_medium_light_skin_tone\",2336],[\"blond-haired-man_medium_skin_tone\",2337],[\"blonde_man_medium_skin_tone\",2337],[\"blond-haired-man_medium_dark_skin_tone\",2338],[\"blonde_man_medium_dark_skin_tone\",2338],[\"blond-haired-man_dark_skin_tone\",2339],[\"blonde_man_dark_skin_tone\",2339],[\"person_with_blond_hair_light_skin_tone\",2340],[\"person_with_blond_hair_medium_light_skin_tone\",2341],[\"person_with_blond_hair_medium_skin_tone\",2342],[\"person_with_blond_hair_medium_dark_skin_tone\",2343],[\"person_with_blond_hair_dark_skin_tone\",2344],[\"man_with_gua_pi_mao_light_skin_tone\",2345],[\"man_with_gua_pi_mao_medium_light_skin_tone\",2346],[\"man_with_gua_pi_mao_medium_skin_tone\",2347],[\"man_with_gua_pi_mao_medium_dark_skin_tone\",2348],[\"man_with_gua_pi_mao_dark_skin_tone\",2349],[\"woman-wearing-turban_light_skin_tone\",2350],[\"woman_with_turban_light_skin_tone\",2350],[\"woman-wearing-turban_medium_light_skin_tone\",2351],[\"woman_with_turban_medium_light_skin_tone\",2351],[\"woman-wearing-turban_medium_skin_tone\",2352],[\"woman_with_turban_medium_skin_tone\",2352],[\"woman-wearing-turban_medium_dark_skin_tone\",2353],[\"woman_with_turban_medium_dark_skin_tone\",2353],[\"woman-wearing-turban_dark_skin_tone\",2354],[\"woman_with_turban_dark_skin_tone\",2354],[\"man-wearing-turban_light_skin_tone\",2355],[\"man-wearing-turban_medium_light_skin_tone\",2356],[\"man-wearing-turban_medium_skin_tone\",2357],[\"man-wearing-turban_medium_dark_skin_tone\",2358],[\"man-wearing-turban_dark_skin_tone\",2359],[\"man_with_turban_light_skin_tone\",2360],[\"man_with_turban_medium_light_skin_tone\",2361],[\"man_with_turban_medium_skin_tone\",2362],[\"man_with_turban_medium_dark_skin_tone\",2363],[\"man_with_turban_dark_skin_tone\",2364],[\"older_man_light_skin_tone\",2365],[\"older_man_medium_light_skin_tone\",2366],[\"older_man_medium_skin_tone\",2367],[\"older_man_medium_dark_skin_tone\",2368],[\"older_man_dark_skin_tone\",2369],[\"older_woman_light_skin_tone\",2370],[\"older_woman_medium_light_skin_tone\",2371],[\"older_woman_medium_skin_tone\",2372],[\"older_woman_medium_dark_skin_tone\",2373],[\"older_woman_dark_skin_tone\",2374],[\"baby_light_skin_tone\",2375],[\"baby_medium_light_skin_tone\",2376],[\"baby_medium_skin_tone\",2377],[\"baby_medium_dark_skin_tone\",2378],[\"baby_dark_skin_tone\",2379],[\"female-construction-worker_light_skin_tone\",2380],[\"construction_worker_woman_light_skin_tone\",2380],[\"female-construction-worker_medium_light_skin_tone\",2381],[\"construction_worker_woman_medium_light_skin_tone\",2381],[\"female-construction-worker_medium_skin_tone\",2382],[\"construction_worker_woman_medium_skin_tone\",2382],[\"female-construction-worker_medium_dark_skin_tone\",2383],[\"construction_worker_woman_medium_dark_skin_tone\",2383],[\"female-construction-worker_dark_skin_tone\",2384],[\"construction_worker_woman_dark_skin_tone\",2384],[\"male-construction-worker_light_skin_tone\",2385],[\"construction_worker_man_light_skin_tone\",2385],[\"male-construction-worker_medium_light_skin_tone\",2386],[\"construction_worker_man_medium_light_skin_tone\",2386],[\"male-construction-worker_medium_skin_tone\",2387],[\"construction_worker_man_medium_skin_tone\",2387],[\"male-construction-worker_medium_dark_skin_tone\",2388],[\"construction_worker_man_medium_dark_skin_tone\",2388],[\"male-construction-worker_dark_skin_tone\",2389],[\"construction_worker_man_dark_skin_tone\",2389],[\"construction_worker_light_skin_tone\",2390],[\"construction_worker_medium_light_skin_tone\",2391],[\"construction_worker_medium_skin_tone\",2392],[\"construction_worker_medium_dark_skin_tone\",2393],[\"construction_worker_dark_skin_tone\",2394],[\"princess_light_skin_tone\",2395],[\"princess_medium_light_skin_tone\",2396],[\"princess_medium_skin_tone\",2397],[\"princess_medium_dark_skin_tone\",2398],[\"princess_dark_skin_tone\",2399],[\"angel_light_skin_tone\",2400],[\"angel_medium_light_skin_tone\",2401],[\"angel_medium_skin_tone\",2402],[\"angel_medium_dark_skin_tone\",2403],[\"angel_dark_skin_tone\",2404],[\"woman-tipping-hand_light_skin_tone\",2405],[\"tipping_hand_woman_light_skin_tone\",2405],[\"woman-tipping-hand_medium_light_skin_tone\",2406],[\"tipping_hand_woman_medium_light_skin_tone\",2406],[\"woman-tipping-hand_medium_skin_tone\",2407],[\"tipping_hand_woman_medium_skin_tone\",2407],[\"woman-tipping-hand_medium_dark_skin_tone\",2408],[\"tipping_hand_woman_medium_dark_skin_tone\",2408],[\"woman-tipping-hand_dark_skin_tone\",2409],[\"tipping_hand_woman_dark_skin_tone\",2409],[\"man-tipping-hand_light_skin_tone\",2410],[\"tipping_hand_man_light_skin_tone\",2410],[\"man-tipping-hand_medium_light_skin_tone\",2411],[\"tipping_hand_man_medium_light_skin_tone\",2411],[\"man-tipping-hand_medium_skin_tone\",2412],[\"tipping_hand_man_medium_skin_tone\",2412],[\"man-tipping-hand_medium_dark_skin_tone\",2413],[\"tipping_hand_man_medium_dark_skin_tone\",2413],[\"man-tipping-hand_dark_skin_tone\",2414],[\"tipping_hand_man_dark_skin_tone\",2414],[\"information_desk_person_light_skin_tone\",2415],[\"information_desk_person_medium_light_skin_tone\",2416],[\"information_desk_person_medium_skin_tone\",2417],[\"information_desk_person_medium_dark_skin_tone\",2418],[\"information_desk_person_dark_skin_tone\",2419],[\"female-guard_light_skin_tone\",2420],[\"guardswoman_light_skin_tone\",2420],[\"female-guard_medium_light_skin_tone\",2421],[\"guardswoman_medium_light_skin_tone\",2421],[\"female-guard_medium_skin_tone\",2422],[\"guardswoman_medium_skin_tone\",2422],[\"female-guard_medium_dark_skin_tone\",2423],[\"guardswoman_medium_dark_skin_tone\",2423],[\"female-guard_dark_skin_tone\",2424],[\"guardswoman_dark_skin_tone\",2424],[\"male-guard_light_skin_tone\",2425],[\"male-guard_medium_light_skin_tone\",2426],[\"male-guard_medium_skin_tone\",2427],[\"male-guard_medium_dark_skin_tone\",2428],[\"male-guard_dark_skin_tone\",2429],[\"guardsman_light_skin_tone\",2430],[\"guardsman_medium_light_skin_tone\",2431],[\"guardsman_medium_skin_tone\",2432],[\"guardsman_medium_dark_skin_tone\",2433],[\"guardsman_dark_skin_tone\",2434],[\"dancer_light_skin_tone\",2435],[\"dancer_medium_light_skin_tone\",2436],[\"dancer_medium_skin_tone\",2437],[\"dancer_medium_dark_skin_tone\",2438],[\"dancer_dark_skin_tone\",2439],[\"nail_care_light_skin_tone\",2440],[\"nail_care_medium_light_skin_tone\",2441],[\"nail_care_medium_skin_tone\",2442],[\"nail_care_medium_dark_skin_tone\",2443],[\"nail_care_dark_skin_tone\",2444],[\"woman-getting-massage_light_skin_tone\",2445],[\"massage_woman_light_skin_tone\",2445],[\"woman-getting-massage_medium_light_skin_tone\",2446],[\"massage_woman_medium_light_skin_tone\",2446],[\"woman-getting-massage_medium_skin_tone\",2447],[\"massage_woman_medium_skin_tone\",2447],[\"woman-getting-massage_medium_dark_skin_tone\",2448],[\"massage_woman_medium_dark_skin_tone\",2448],[\"woman-getting-massage_dark_skin_tone\",2449],[\"massage_woman_dark_skin_tone\",2449],[\"man-getting-massage_light_skin_tone\",2450],[\"massage_man_light_skin_tone\",2450],[\"man-getting-massage_medium_light_skin_tone\",2451],[\"massage_man_medium_light_skin_tone\",2451],[\"man-getting-massage_medium_skin_tone\",2452],[\"massage_man_medium_skin_tone\",2452],[\"man-getting-massage_medium_dark_skin_tone\",2453],[\"massage_man_medium_dark_skin_tone\",2453],[\"man-getting-massage_dark_skin_tone\",2454],[\"massage_man_dark_skin_tone\",2454],[\"massage_light_skin_tone\",2455],[\"massage_medium_light_skin_tone\",2456],[\"massage_medium_skin_tone\",2457],[\"massage_medium_dark_skin_tone\",2458],[\"massage_dark_skin_tone\",2459],[\"woman-getting-haircut_light_skin_tone\",2460],[\"haircut_woman_light_skin_tone\",2460],[\"woman-getting-haircut_medium_light_skin_tone\",2461],[\"haircut_woman_medium_light_skin_tone\",2461],[\"woman-getting-haircut_medium_skin_tone\",2462],[\"haircut_woman_medium_skin_tone\",2462],[\"woman-getting-haircut_medium_dark_skin_tone\",2463],[\"haircut_woman_medium_dark_skin_tone\",2463],[\"woman-getting-haircut_dark_skin_tone\",2464],[\"haircut_woman_dark_skin_tone\",2464],[\"man-getting-haircut_light_skin_tone\",2465],[\"haircut_man_light_skin_tone\",2465],[\"man-getting-haircut_medium_light_skin_tone\",2466],[\"haircut_man_medium_light_skin_tone\",2466],[\"man-getting-haircut_medium_skin_tone\",2467],[\"haircut_man_medium_skin_tone\",2467],[\"man-getting-haircut_medium_dark_skin_tone\",2468],[\"haircut_man_medium_dark_skin_tone\",2468],[\"man-getting-haircut_dark_skin_tone\",2469],[\"haircut_man_dark_skin_tone\",2469],[\"haircut_light_skin_tone\",2470],[\"haircut_medium_light_skin_tone\",2471],[\"haircut_medium_skin_tone\",2472],[\"haircut_medium_dark_skin_tone\",2473],[\"haircut_dark_skin_tone\",2474],[\"muscle_light_skin_tone\",2475],[\"muscle_medium_light_skin_tone\",2476],[\"muscle_medium_skin_tone\",2477],[\"muscle_medium_dark_skin_tone\",2478],[\"muscle_dark_skin_tone\",2479],[\"man_in_business_suit_levitating_light_skin_tone\",2480],[\"business_suit_levitating_light_skin_tone\",2480],[\"man_in_business_suit_levitating_medium_light_skin_tone\",2481],[\"business_suit_levitating_medium_light_skin_tone\",2481],[\"man_in_business_suit_levitating_medium_skin_tone\",2482],[\"business_suit_levitating_medium_skin_tone\",2482],[\"man_in_business_suit_levitating_medium_dark_skin_tone\",2483],[\"business_suit_levitating_medium_dark_skin_tone\",2483],[\"man_in_business_suit_levitating_dark_skin_tone\",2484],[\"business_suit_levitating_dark_skin_tone\",2484],[\"female-detective_light_skin_tone\",2485],[\"female_detective_light_skin_tone\",2485],[\"female-detective_medium_light_skin_tone\",2486],[\"female_detective_medium_light_skin_tone\",2486],[\"female-detective_medium_skin_tone\",2487],[\"female_detective_medium_skin_tone\",2487],[\"female-detective_medium_dark_skin_tone\",2488],[\"female_detective_medium_dark_skin_tone\",2488],[\"female-detective_dark_skin_tone\",2489],[\"female_detective_dark_skin_tone\",2489],[\"male-detective_light_skin_tone\",2490],[\"male_detective_light_skin_tone\",2490],[\"male-detective_medium_light_skin_tone\",2491],[\"male_detective_medium_light_skin_tone\",2491],[\"male-detective_medium_skin_tone\",2492],[\"male_detective_medium_skin_tone\",2492],[\"male-detective_medium_dark_skin_tone\",2493],[\"male_detective_medium_dark_skin_tone\",2493],[\"male-detective_dark_skin_tone\",2494],[\"male_detective_dark_skin_tone\",2494],[\"sleuth_or_spy_light_skin_tone\",2495],[\"sleuth_or_spy_medium_light_skin_tone\",2496],[\"sleuth_or_spy_medium_skin_tone\",2497],[\"sleuth_or_spy_medium_dark_skin_tone\",2498],[\"sleuth_or_spy_dark_skin_tone\",2499],[\"man_dancing_light_skin_tone\",2500],[\"man_dancing_medium_light_skin_tone\",2501],[\"man_dancing_medium_skin_tone\",2502],[\"man_dancing_medium_dark_skin_tone\",2503],[\"man_dancing_dark_skin_tone\",2504],[\"raised_hand_with_fingers_splayed_light_skin_tone\",2505],[\"raised_hand_with_fingers_splayed_medium_light_skin_tone\",2506],[\"raised_hand_with_fingers_splayed_medium_skin_tone\",2507],[\"raised_hand_with_fingers_splayed_medium_dark_skin_tone\",2508],[\"raised_hand_with_fingers_splayed_dark_skin_tone\",2509],[\"middle_finger_light_skin_tone\",2510],[\"reversed_hand_with_middle_finger_extended_light_skin_tone\",2510],[\"middle_finger_medium_light_skin_tone\",2511],[\"reversed_hand_with_middle_finger_extended_medium_light_skin_tone\",2511],[\"middle_finger_medium_skin_tone\",2512],[\"reversed_hand_with_middle_finger_extended_medium_skin_tone\",2512],[\"middle_finger_medium_dark_skin_tone\",2513],[\"reversed_hand_with_middle_finger_extended_medium_dark_skin_tone\",2513],[\"middle_finger_dark_skin_tone\",2514],[\"reversed_hand_with_middle_finger_extended_dark_skin_tone\",2514],[\"spock-hand_light_skin_tone\",2515],[\"vulcan_salute_light_skin_tone\",2515],[\"spock-hand_medium_light_skin_tone\",2516],[\"vulcan_salute_medium_light_skin_tone\",2516],[\"spock-hand_medium_skin_tone\",2517],[\"vulcan_salute_medium_skin_tone\",2517],[\"spock-hand_medium_dark_skin_tone\",2518],[\"vulcan_salute_medium_dark_skin_tone\",2518],[\"spock-hand_dark_skin_tone\",2519],[\"vulcan_salute_dark_skin_tone\",2519],[\"woman-gesturing-no_light_skin_tone\",2520],[\"no_good_woman_light_skin_tone\",2520],[\"woman-gesturing-no_medium_light_skin_tone\",2521],[\"no_good_woman_medium_light_skin_tone\",2521],[\"woman-gesturing-no_medium_skin_tone\",2522],[\"no_good_woman_medium_skin_tone\",2522],[\"woman-gesturing-no_medium_dark_skin_tone\",2523],[\"no_good_woman_medium_dark_skin_tone\",2523],[\"woman-gesturing-no_dark_skin_tone\",2524],[\"no_good_woman_dark_skin_tone\",2524],[\"man-gesturing-no_light_skin_tone\",2525],[\"no_good_man_light_skin_tone\",2525],[\"man-gesturing-no_medium_light_skin_tone\",2526],[\"no_good_man_medium_light_skin_tone\",2526],[\"man-gesturing-no_medium_skin_tone\",2527],[\"no_good_man_medium_skin_tone\",2527],[\"man-gesturing-no_medium_dark_skin_tone\",2528],[\"no_good_man_medium_dark_skin_tone\",2528],[\"man-gesturing-no_dark_skin_tone\",2529],[\"no_good_man_dark_skin_tone\",2529],[\"no_good_light_skin_tone\",2530],[\"no_good_medium_light_skin_tone\",2531],[\"no_good_medium_skin_tone\",2532],[\"no_good_medium_dark_skin_tone\",2533],[\"no_good_dark_skin_tone\",2534],[\"woman-gesturing-ok_light_skin_tone\",2535],[\"woman-gesturing-ok_medium_light_skin_tone\",2536],[\"woman-gesturing-ok_medium_skin_tone\",2537],[\"woman-gesturing-ok_medium_dark_skin_tone\",2538],[\"woman-gesturing-ok_dark_skin_tone\",2539],[\"man-gesturing-ok_light_skin_tone\",2540],[\"ok_man_light_skin_tone\",2540],[\"man-gesturing-ok_medium_light_skin_tone\",2541],[\"ok_man_medium_light_skin_tone\",2541],[\"man-gesturing-ok_medium_skin_tone\",2542],[\"ok_man_medium_skin_tone\",2542],[\"man-gesturing-ok_medium_dark_skin_tone\",2543],[\"ok_man_medium_dark_skin_tone\",2543],[\"man-gesturing-ok_dark_skin_tone\",2544],[\"ok_man_dark_skin_tone\",2544],[\"ok_woman_light_skin_tone\",2545],[\"ok_woman_medium_light_skin_tone\",2546],[\"ok_woman_medium_skin_tone\",2547],[\"ok_woman_medium_dark_skin_tone\",2548],[\"ok_woman_dark_skin_tone\",2549],[\"woman-bowing_light_skin_tone\",2550],[\"bowing_woman_light_skin_tone\",2550],[\"woman-bowing_medium_light_skin_tone\",2551],[\"bowing_woman_medium_light_skin_tone\",2551],[\"woman-bowing_medium_skin_tone\",2552],[\"bowing_woman_medium_skin_tone\",2552],[\"woman-bowing_medium_dark_skin_tone\",2553],[\"bowing_woman_medium_dark_skin_tone\",2553],[\"woman-bowing_dark_skin_tone\",2554],[\"bowing_woman_dark_skin_tone\",2554],[\"man-bowing_light_skin_tone\",2555],[\"bowing_man_light_skin_tone\",2555],[\"man-bowing_medium_light_skin_tone\",2556],[\"bowing_man_medium_light_skin_tone\",2556],[\"man-bowing_medium_skin_tone\",2557],[\"bowing_man_medium_skin_tone\",2557],[\"man-bowing_medium_dark_skin_tone\",2558],[\"bowing_man_medium_dark_skin_tone\",2558],[\"man-bowing_dark_skin_tone\",2559],[\"bowing_man_dark_skin_tone\",2559],[\"bow_light_skin_tone\",2560],[\"bow_medium_light_skin_tone\",2561],[\"bow_medium_skin_tone\",2562],[\"bow_medium_dark_skin_tone\",2563],[\"bow_dark_skin_tone\",2564],[\"woman-raising-hand_light_skin_tone\",2565],[\"raising_hand_woman_light_skin_tone\",2565],[\"woman-raising-hand_medium_light_skin_tone\",2566],[\"raising_hand_woman_medium_light_skin_tone\",2566],[\"woman-raising-hand_medium_skin_tone\",2567],[\"raising_hand_woman_medium_skin_tone\",2567],[\"woman-raising-hand_medium_dark_skin_tone\",2568],[\"raising_hand_woman_medium_dark_skin_tone\",2568],[\"woman-raising-hand_dark_skin_tone\",2569],[\"raising_hand_woman_dark_skin_tone\",2569],[\"man-raising-hand_light_skin_tone\",2570],[\"raising_hand_man_light_skin_tone\",2570],[\"man-raising-hand_medium_light_skin_tone\",2571],[\"raising_hand_man_medium_light_skin_tone\",2571],[\"man-raising-hand_medium_skin_tone\",2572],[\"raising_hand_man_medium_skin_tone\",2572],[\"man-raising-hand_medium_dark_skin_tone\",2573],[\"raising_hand_man_medium_dark_skin_tone\",2573],[\"man-raising-hand_dark_skin_tone\",2574],[\"raising_hand_man_dark_skin_tone\",2574],[\"raising_hand_light_skin_tone\",2575],[\"raising_hand_medium_light_skin_tone\",2576],[\"raising_hand_medium_skin_tone\",2577],[\"raising_hand_medium_dark_skin_tone\",2578],[\"raising_hand_dark_skin_tone\",2579],[\"raised_hands_light_skin_tone\",2580],[\"raised_hands_medium_light_skin_tone\",2581],[\"raised_hands_medium_skin_tone\",2582],[\"raised_hands_medium_dark_skin_tone\",2583],[\"raised_hands_dark_skin_tone\",2584],[\"woman-frowning_light_skin_tone\",2585],[\"frowning_woman_light_skin_tone\",2585],[\"woman-frowning_medium_light_skin_tone\",2586],[\"frowning_woman_medium_light_skin_tone\",2586],[\"woman-frowning_medium_skin_tone\",2587],[\"frowning_woman_medium_skin_tone\",2587],[\"woman-frowning_medium_dark_skin_tone\",2588],[\"frowning_woman_medium_dark_skin_tone\",2588],[\"woman-frowning_dark_skin_tone\",2589],[\"frowning_woman_dark_skin_tone\",2589],[\"man-frowning_light_skin_tone\",2590],[\"frowning_man_light_skin_tone\",2590],[\"man-frowning_medium_light_skin_tone\",2591],[\"frowning_man_medium_light_skin_tone\",2591],[\"man-frowning_medium_skin_tone\",2592],[\"frowning_man_medium_skin_tone\",2592],[\"man-frowning_medium_dark_skin_tone\",2593],[\"frowning_man_medium_dark_skin_tone\",2593],[\"man-frowning_dark_skin_tone\",2594],[\"frowning_man_dark_skin_tone\",2594],[\"person_frowning_light_skin_tone\",2595],[\"person_frowning_medium_light_skin_tone\",2596],[\"person_frowning_medium_skin_tone\",2597],[\"person_frowning_medium_dark_skin_tone\",2598],[\"person_frowning_dark_skin_tone\",2599],[\"woman-pouting_light_skin_tone\",2600],[\"pouting_woman_light_skin_tone\",2600],[\"woman-pouting_medium_light_skin_tone\",2601],[\"pouting_woman_medium_light_skin_tone\",2601],[\"woman-pouting_medium_skin_tone\",2602],[\"pouting_woman_medium_skin_tone\",2602],[\"woman-pouting_medium_dark_skin_tone\",2603],[\"pouting_woman_medium_dark_skin_tone\",2603],[\"woman-pouting_dark_skin_tone\",2604],[\"pouting_woman_dark_skin_tone\",2604],[\"man-pouting_light_skin_tone\",2605],[\"pouting_man_light_skin_tone\",2605],[\"man-pouting_medium_light_skin_tone\",2606],[\"pouting_man_medium_light_skin_tone\",2606],[\"man-pouting_medium_skin_tone\",2607],[\"pouting_man_medium_skin_tone\",2607],[\"man-pouting_medium_dark_skin_tone\",2608],[\"pouting_man_medium_dark_skin_tone\",2608],[\"man-pouting_dark_skin_tone\",2609],[\"pouting_man_dark_skin_tone\",2609],[\"person_with_pouting_face_light_skin_tone\",2610],[\"person_with_pouting_face_medium_light_skin_tone\",2611],[\"person_with_pouting_face_medium_skin_tone\",2612],[\"person_with_pouting_face_medium_dark_skin_tone\",2613],[\"person_with_pouting_face_dark_skin_tone\",2614],[\"pray_light_skin_tone\",2615],[\"pray_medium_light_skin_tone\",2616],[\"pray_medium_skin_tone\",2617],[\"pray_medium_dark_skin_tone\",2618],[\"pray_dark_skin_tone\",2619],[\"woman-rowing-boat_light_skin_tone\",2620],[\"rowing_woman_light_skin_tone\",2620],[\"woman-rowing-boat_medium_light_skin_tone\",2621],[\"rowing_woman_medium_light_skin_tone\",2621],[\"woman-rowing-boat_medium_skin_tone\",2622],[\"rowing_woman_medium_skin_tone\",2622],[\"woman-rowing-boat_medium_dark_skin_tone\",2623],[\"rowing_woman_medium_dark_skin_tone\",2623],[\"woman-rowing-boat_dark_skin_tone\",2624],[\"rowing_woman_dark_skin_tone\",2624],[\"man-rowing-boat_light_skin_tone\",2625],[\"rowing_man_light_skin_tone\",2625],[\"man-rowing-boat_medium_light_skin_tone\",2626],[\"rowing_man_medium_light_skin_tone\",2626],[\"man-rowing-boat_medium_skin_tone\",2627],[\"rowing_man_medium_skin_tone\",2627],[\"man-rowing-boat_medium_dark_skin_tone\",2628],[\"rowing_man_medium_dark_skin_tone\",2628],[\"man-rowing-boat_dark_skin_tone\",2629],[\"rowing_man_dark_skin_tone\",2629],[\"rowboat_light_skin_tone\",2630],[\"rowboat_medium_light_skin_tone\",2631],[\"rowboat_medium_skin_tone\",2632],[\"rowboat_medium_dark_skin_tone\",2633],[\"rowboat_dark_skin_tone\",2634],[\"woman-biking_light_skin_tone\",2635],[\"biking_woman_light_skin_tone\",2635],[\"woman-biking_medium_light_skin_tone\",2636],[\"biking_woman_medium_light_skin_tone\",2636],[\"woman-biking_medium_skin_tone\",2637],[\"biking_woman_medium_skin_tone\",2637],[\"woman-biking_medium_dark_skin_tone\",2638],[\"biking_woman_medium_dark_skin_tone\",2638],[\"woman-biking_dark_skin_tone\",2639],[\"biking_woman_dark_skin_tone\",2639],[\"man-biking_light_skin_tone\",2640],[\"biking_man_light_skin_tone\",2640],[\"man-biking_medium_light_skin_tone\",2641],[\"biking_man_medium_light_skin_tone\",2641],[\"man-biking_medium_skin_tone\",2642],[\"biking_man_medium_skin_tone\",2642],[\"man-biking_medium_dark_skin_tone\",2643],[\"biking_man_medium_dark_skin_tone\",2643],[\"man-biking_dark_skin_tone\",2644],[\"biking_man_dark_skin_tone\",2644],[\"bicyclist_light_skin_tone\",2645],[\"bicyclist_medium_light_skin_tone\",2646],[\"bicyclist_medium_skin_tone\",2647],[\"bicyclist_medium_dark_skin_tone\",2648],[\"bicyclist_dark_skin_tone\",2649],[\"woman-mountain-biking_light_skin_tone\",2650],[\"mountain_biking_woman_light_skin_tone\",2650],[\"woman-mountain-biking_medium_light_skin_tone\",2651],[\"mountain_biking_woman_medium_light_skin_tone\",2651],[\"woman-mountain-biking_medium_skin_tone\",2652],[\"mountain_biking_woman_medium_skin_tone\",2652],[\"woman-mountain-biking_medium_dark_skin_tone\",2653],[\"mountain_biking_woman_medium_dark_skin_tone\",2653],[\"woman-mountain-biking_dark_skin_tone\",2654],[\"mountain_biking_woman_dark_skin_tone\",2654],[\"man-mountain-biking_light_skin_tone\",2655],[\"mountain_biking_man_light_skin_tone\",2655],[\"man-mountain-biking_medium_light_skin_tone\",2656],[\"mountain_biking_man_medium_light_skin_tone\",2656],[\"man-mountain-biking_medium_skin_tone\",2657],[\"mountain_biking_man_medium_skin_tone\",2657],[\"man-mountain-biking_medium_dark_skin_tone\",2658],[\"mountain_biking_man_medium_dark_skin_tone\",2658],[\"man-mountain-biking_dark_skin_tone\",2659],[\"mountain_biking_man_dark_skin_tone\",2659],[\"mountain_bicyclist_light_skin_tone\",2660],[\"mountain_bicyclist_medium_light_skin_tone\",2661],[\"mountain_bicyclist_medium_skin_tone\",2662],[\"mountain_bicyclist_medium_dark_skin_tone\",2663],[\"mountain_bicyclist_dark_skin_tone\",2664],[\"woman-walking_light_skin_tone\",2665],[\"walking_woman_light_skin_tone\",2665],[\"woman-walking_medium_light_skin_tone\",2666],[\"walking_woman_medium_light_skin_tone\",2666],[\"woman-walking_medium_skin_tone\",2667],[\"walking_woman_medium_skin_tone\",2667],[\"woman-walking_medium_dark_skin_tone\",2668],[\"walking_woman_medium_dark_skin_tone\",2668],[\"woman-walking_dark_skin_tone\",2669],[\"walking_woman_dark_skin_tone\",2669],[\"man-walking_light_skin_tone\",2670],[\"walking_man_light_skin_tone\",2670],[\"man-walking_medium_light_skin_tone\",2671],[\"walking_man_medium_light_skin_tone\",2671],[\"man-walking_medium_skin_tone\",2672],[\"walking_man_medium_skin_tone\",2672],[\"man-walking_medium_dark_skin_tone\",2673],[\"walking_man_medium_dark_skin_tone\",2673],[\"man-walking_dark_skin_tone\",2674],[\"walking_man_dark_skin_tone\",2674],[\"walking_light_skin_tone\",2675],[\"walking_medium_light_skin_tone\",2676],[\"walking_medium_skin_tone\",2677],[\"walking_medium_dark_skin_tone\",2678],[\"walking_dark_skin_tone\",2679],[\"bath_light_skin_tone\",2680],[\"bath_medium_light_skin_tone\",2681],[\"bath_medium_skin_tone\",2682],[\"bath_medium_dark_skin_tone\",2683],[\"bath_dark_skin_tone\",2684],[\"sleeping_accommodation_light_skin_tone\",2685],[\"sleeping_accommodation_medium_light_skin_tone\",2686],[\"sleeping_accommodation_medium_skin_tone\",2687],[\"sleeping_accommodation_medium_dark_skin_tone\",2688],[\"sleeping_accommodation_dark_skin_tone\",2689],[\"pinched_fingers_light_skin_tone\",2690],[\"pinched_fingers_medium_light_skin_tone\",2691],[\"pinched_fingers_medium_skin_tone\",2692],[\"pinched_fingers_medium_dark_skin_tone\",2693],[\"pinched_fingers_dark_skin_tone\",2694],[\"pinching_hand_light_skin_tone\",2695],[\"pinching_hand_medium_light_skin_tone\",2696],[\"pinching_hand_medium_skin_tone\",2697],[\"pinching_hand_medium_dark_skin_tone\",2698],[\"pinching_hand_dark_skin_tone\",2699],[\"the_horns_light_skin_tone\",2700],[\"sign_of_the_horns_light_skin_tone\",2700],[\"metal_light_skin_tone\",2700],[\"the_horns_medium_light_skin_tone\",2701],[\"sign_of_the_horns_medium_light_skin_tone\",2701],[\"metal_medium_light_skin_tone\",2701],[\"the_horns_medium_skin_tone\",2702],[\"sign_of_the_horns_medium_skin_tone\",2702],[\"metal_medium_skin_tone\",2702],[\"the_horns_medium_dark_skin_tone\",2703],[\"sign_of_the_horns_medium_dark_skin_tone\",2703],[\"metal_medium_dark_skin_tone\",2703],[\"the_horns_dark_skin_tone\",2704],[\"sign_of_the_horns_dark_skin_tone\",2704],[\"metal_dark_skin_tone\",2704],[\"call_me_hand_light_skin_tone\",2705],[\"call_me_hand_medium_light_skin_tone\",2706],[\"call_me_hand_medium_skin_tone\",2707],[\"call_me_hand_medium_dark_skin_tone\",2708],[\"call_me_hand_dark_skin_tone\",2709],[\"raised_back_of_hand_light_skin_tone\",2710],[\"raised_back_of_hand_medium_light_skin_tone\",2711],[\"raised_back_of_hand_medium_skin_tone\",2712],[\"raised_back_of_hand_medium_dark_skin_tone\",2713],[\"raised_back_of_hand_dark_skin_tone\",2714],[\"left-facing_fist_light_skin_tone\",2715],[\"fist_left_light_skin_tone\",2715],[\"left-facing_fist_medium_light_skin_tone\",2716],[\"fist_left_medium_light_skin_tone\",2716],[\"left-facing_fist_medium_skin_tone\",2717],[\"fist_left_medium_skin_tone\",2717],[\"left-facing_fist_medium_dark_skin_tone\",2718],[\"fist_left_medium_dark_skin_tone\",2718],[\"left-facing_fist_dark_skin_tone\",2719],[\"fist_left_dark_skin_tone\",2719],[\"right-facing_fist_light_skin_tone\",2720],[\"fist_right_light_skin_tone\",2720],[\"right-facing_fist_medium_light_skin_tone\",2721],[\"fist_right_medium_light_skin_tone\",2721],[\"right-facing_fist_medium_skin_tone\",2722],[\"fist_right_medium_skin_tone\",2722],[\"right-facing_fist_medium_dark_skin_tone\",2723],[\"fist_right_medium_dark_skin_tone\",2723],[\"right-facing_fist_dark_skin_tone\",2724],[\"fist_right_dark_skin_tone\",2724],[\"crossed_fingers_light_skin_tone\",2725],[\"hand_with_index_and_middle_fingers_crossed_light_skin_tone\",2725],[\"crossed_fingers_medium_light_skin_tone\",2726],[\"hand_with_index_and_middle_fingers_crossed_medium_light_skin_tone\",2726],[\"crossed_fingers_medium_skin_tone\",2727],[\"hand_with_index_and_middle_fingers_crossed_medium_skin_tone\",2727],[\"crossed_fingers_medium_dark_skin_tone\",2728],[\"hand_with_index_and_middle_fingers_crossed_medium_dark_skin_tone\",2728],[\"crossed_fingers_dark_skin_tone\",2729],[\"hand_with_index_and_middle_fingers_crossed_dark_skin_tone\",2729],[\"i_love_you_hand_sign_light_skin_tone\",2730],[\"i_love_you_hand_sign_medium_light_skin_tone\",2731],[\"i_love_you_hand_sign_medium_skin_tone\",2732],[\"i_love_you_hand_sign_medium_dark_skin_tone\",2733],[\"i_love_you_hand_sign_dark_skin_tone\",2734],[\"woman-facepalming_light_skin_tone\",2735],[\"woman_facepalming_light_skin_tone\",2735],[\"woman-facepalming_medium_light_skin_tone\",2736],[\"woman_facepalming_medium_light_skin_tone\",2736],[\"woman-facepalming_medium_skin_tone\",2737],[\"woman_facepalming_medium_skin_tone\",2737],[\"woman-facepalming_medium_dark_skin_tone\",2738],[\"woman_facepalming_medium_dark_skin_tone\",2738],[\"woman-facepalming_dark_skin_tone\",2739],[\"woman_facepalming_dark_skin_tone\",2739],[\"man-facepalming_light_skin_tone\",2740],[\"man_facepalming_light_skin_tone\",2740],[\"man-facepalming_medium_light_skin_tone\",2741],[\"man_facepalming_medium_light_skin_tone\",2741],[\"man-facepalming_medium_skin_tone\",2742],[\"man_facepalming_medium_skin_tone\",2742],[\"man-facepalming_medium_dark_skin_tone\",2743],[\"man_facepalming_medium_dark_skin_tone\",2743],[\"man-facepalming_dark_skin_tone\",2744],[\"man_facepalming_dark_skin_tone\",2744],[\"face_palm_light_skin_tone\",2745],[\"face_palm_medium_light_skin_tone\",2746],[\"face_palm_medium_skin_tone\",2747],[\"face_palm_medium_dark_skin_tone\",2748],[\"face_palm_dark_skin_tone\",2749],[\"pregnant_woman_light_skin_tone\",2750],[\"pregnant_woman_medium_light_skin_tone\",2751],[\"pregnant_woman_medium_skin_tone\",2752],[\"pregnant_woman_medium_dark_skin_tone\",2753],[\"pregnant_woman_dark_skin_tone\",2754],[\"breast-feeding_light_skin_tone\",2755],[\"breast-feeding_medium_light_skin_tone\",2756],[\"breast-feeding_medium_skin_tone\",2757],[\"breast-feeding_medium_dark_skin_tone\",2758],[\"breast-feeding_dark_skin_tone\",2759],[\"palms_up_together_light_skin_tone\",2760],[\"palms_up_together_medium_light_skin_tone\",2761],[\"palms_up_together_medium_skin_tone\",2762],[\"palms_up_together_medium_dark_skin_tone\",2763],[\"palms_up_together_dark_skin_tone\",2764],[\"selfie_light_skin_tone\",2765],[\"selfie_medium_light_skin_tone\",2766],[\"selfie_medium_skin_tone\",2767],[\"selfie_medium_dark_skin_tone\",2768],[\"selfie_dark_skin_tone\",2769],[\"prince_light_skin_tone\",2770],[\"prince_medium_light_skin_tone\",2771],[\"prince_medium_skin_tone\",2772],[\"prince_medium_dark_skin_tone\",2773],[\"prince_dark_skin_tone\",2774],[\"woman_in_tuxedo_light_skin_tone\",2775],[\"woman_in_tuxedo_medium_light_skin_tone\",2776],[\"woman_in_tuxedo_medium_skin_tone\",2777],[\"woman_in_tuxedo_medium_dark_skin_tone\",2778],[\"woman_in_tuxedo_dark_skin_tone\",2779],[\"man_in_tuxedo_light_skin_tone\",2780],[\"man_in_tuxedo_medium_light_skin_tone\",2781],[\"man_in_tuxedo_medium_skin_tone\",2782],[\"man_in_tuxedo_medium_dark_skin_tone\",2783],[\"man_in_tuxedo_dark_skin_tone\",2784],[\"person_in_tuxedo_light_skin_tone\",2785],[\"person_in_tuxedo_medium_light_skin_tone\",2786],[\"person_in_tuxedo_medium_skin_tone\",2787],[\"person_in_tuxedo_medium_dark_skin_tone\",2788],[\"person_in_tuxedo_dark_skin_tone\",2789],[\"mrs_claus_light_skin_tone\",2790],[\"mother_christmas_light_skin_tone\",2790],[\"mrs_claus_medium_light_skin_tone\",2791],[\"mother_christmas_medium_light_skin_tone\",2791],[\"mrs_claus_medium_skin_tone\",2792],[\"mother_christmas_medium_skin_tone\",2792],[\"mrs_claus_medium_dark_skin_tone\",2793],[\"mother_christmas_medium_dark_skin_tone\",2793],[\"mrs_claus_dark_skin_tone\",2794],[\"mother_christmas_dark_skin_tone\",2794],[\"woman-shrugging_light_skin_tone\",2795],[\"woman_shrugging_light_skin_tone\",2795],[\"woman-shrugging_medium_light_skin_tone\",2796],[\"woman_shrugging_medium_light_skin_tone\",2796],[\"woman-shrugging_medium_skin_tone\",2797],[\"woman_shrugging_medium_skin_tone\",2797],[\"woman-shrugging_medium_dark_skin_tone\",2798],[\"woman_shrugging_medium_dark_skin_tone\",2798],[\"woman-shrugging_dark_skin_tone\",2799],[\"woman_shrugging_dark_skin_tone\",2799],[\"man-shrugging_light_skin_tone\",2800],[\"man_shrugging_light_skin_tone\",2800],[\"man-shrugging_medium_light_skin_tone\",2801],[\"man_shrugging_medium_light_skin_tone\",2801],[\"man-shrugging_medium_skin_tone\",2802],[\"man_shrugging_medium_skin_tone\",2802],[\"man-shrugging_medium_dark_skin_tone\",2803],[\"man_shrugging_medium_dark_skin_tone\",2803],[\"man-shrugging_dark_skin_tone\",2804],[\"man_shrugging_dark_skin_tone\",2804],[\"shrug_light_skin_tone\",2805],[\"shrug_medium_light_skin_tone\",2806],[\"shrug_medium_skin_tone\",2807],[\"shrug_medium_dark_skin_tone\",2808],[\"shrug_dark_skin_tone\",2809],[\"woman-cartwheeling_light_skin_tone\",2810],[\"woman_cartwheeling_light_skin_tone\",2810],[\"woman-cartwheeling_medium_light_skin_tone\",2811],[\"woman_cartwheeling_medium_light_skin_tone\",2811],[\"woman-cartwheeling_medium_skin_tone\",2812],[\"woman_cartwheeling_medium_skin_tone\",2812],[\"woman-cartwheeling_medium_dark_skin_tone\",2813],[\"woman_cartwheeling_medium_dark_skin_tone\",2813],[\"woman-cartwheeling_dark_skin_tone\",2814],[\"woman_cartwheeling_dark_skin_tone\",2814],[\"man-cartwheeling_light_skin_tone\",2815],[\"man_cartwheeling_light_skin_tone\",2815],[\"man-cartwheeling_medium_light_skin_tone\",2816],[\"man_cartwheeling_medium_light_skin_tone\",2816],[\"man-cartwheeling_medium_skin_tone\",2817],[\"man_cartwheeling_medium_skin_tone\",2817],[\"man-cartwheeling_medium_dark_skin_tone\",2818],[\"man_cartwheeling_medium_dark_skin_tone\",2818],[\"man-cartwheeling_dark_skin_tone\",2819],[\"man_cartwheeling_dark_skin_tone\",2819],[\"person_doing_cartwheel_light_skin_tone\",2820],[\"person_doing_cartwheel_medium_light_skin_tone\",2821],[\"person_doing_cartwheel_medium_skin_tone\",2822],[\"person_doing_cartwheel_medium_dark_skin_tone\",2823],[\"person_doing_cartwheel_dark_skin_tone\",2824],[\"woman-juggling_light_skin_tone\",2825],[\"woman_juggling_light_skin_tone\",2825],[\"woman-juggling_medium_light_skin_tone\",2826],[\"woman_juggling_medium_light_skin_tone\",2826],[\"woman-juggling_medium_skin_tone\",2827],[\"woman_juggling_medium_skin_tone\",2827],[\"woman-juggling_medium_dark_skin_tone\",2828],[\"woman_juggling_medium_dark_skin_tone\",2828],[\"woman-juggling_dark_skin_tone\",2829],[\"woman_juggling_dark_skin_tone\",2829],[\"man-juggling_light_skin_tone\",2830],[\"man_juggling_light_skin_tone\",2830],[\"man-juggling_medium_light_skin_tone\",2831],[\"man_juggling_medium_light_skin_tone\",2831],[\"man-juggling_medium_skin_tone\",2832],[\"man_juggling_medium_skin_tone\",2832],[\"man-juggling_medium_dark_skin_tone\",2833],[\"man_juggling_medium_dark_skin_tone\",2833],[\"man-juggling_dark_skin_tone\",2834],[\"man_juggling_dark_skin_tone\",2834],[\"juggling_light_skin_tone\",2835],[\"juggling_medium_light_skin_tone\",2836],[\"juggling_medium_skin_tone\",2837],[\"juggling_medium_dark_skin_tone\",2838],[\"juggling_dark_skin_tone\",2839],[\"woman-playing-water-polo_light_skin_tone\",2840],[\"woman_playing_water_polo_light_skin_tone\",2840],[\"woman-playing-water-polo_medium_light_skin_tone\",2841],[\"woman_playing_water_polo_medium_light_skin_tone\",2841],[\"woman-playing-water-polo_medium_skin_tone\",2842],[\"woman_playing_water_polo_medium_skin_tone\",2842],[\"woman-playing-water-polo_medium_dark_skin_tone\",2843],[\"woman_playing_water_polo_medium_dark_skin_tone\",2843],[\"woman-playing-water-polo_dark_skin_tone\",2844],[\"woman_playing_water_polo_dark_skin_tone\",2844],[\"man-playing-water-polo_light_skin_tone\",2845],[\"man_playing_water_polo_light_skin_tone\",2845],[\"man-playing-water-polo_medium_light_skin_tone\",2846],[\"man_playing_water_polo_medium_light_skin_tone\",2846],[\"man-playing-water-polo_medium_skin_tone\",2847],[\"man_playing_water_polo_medium_skin_tone\",2847],[\"man-playing-water-polo_medium_dark_skin_tone\",2848],[\"man_playing_water_polo_medium_dark_skin_tone\",2848],[\"man-playing-water-polo_dark_skin_tone\",2849],[\"man_playing_water_polo_dark_skin_tone\",2849],[\"water_polo_light_skin_tone\",2850],[\"water_polo_medium_light_skin_tone\",2851],[\"water_polo_medium_skin_tone\",2852],[\"water_polo_medium_dark_skin_tone\",2853],[\"water_polo_dark_skin_tone\",2854],[\"woman-playing-handball_light_skin_tone\",2855],[\"woman_playing_handball_light_skin_tone\",2855],[\"woman-playing-handball_medium_light_skin_tone\",2856],[\"woman_playing_handball_medium_light_skin_tone\",2856],[\"woman-playing-handball_medium_skin_tone\",2857],[\"woman_playing_handball_medium_skin_tone\",2857],[\"woman-playing-handball_medium_dark_skin_tone\",2858],[\"woman_playing_handball_medium_dark_skin_tone\",2858],[\"woman-playing-handball_dark_skin_tone\",2859],[\"woman_playing_handball_dark_skin_tone\",2859],[\"man-playing-handball_light_skin_tone\",2860],[\"man_playing_handball_light_skin_tone\",2860],[\"man-playing-handball_medium_light_skin_tone\",2861],[\"man_playing_handball_medium_light_skin_tone\",2861],[\"man-playing-handball_medium_skin_tone\",2862],[\"man_playing_handball_medium_skin_tone\",2862],[\"man-playing-handball_medium_dark_skin_tone\",2863],[\"man_playing_handball_medium_dark_skin_tone\",2863],[\"man-playing-handball_dark_skin_tone\",2864],[\"man_playing_handball_dark_skin_tone\",2864],[\"handball_light_skin_tone\",2865],[\"handball_medium_light_skin_tone\",2866],[\"handball_medium_skin_tone\",2867],[\"handball_medium_dark_skin_tone\",2868],[\"handball_dark_skin_tone\",2869],[\"ninja_light_skin_tone\",2870],[\"ninja_medium_light_skin_tone\",2871],[\"ninja_medium_skin_tone\",2872],[\"ninja_medium_dark_skin_tone\",2873],[\"ninja_dark_skin_tone\",2874],[\"leg_light_skin_tone\",2875],[\"leg_medium_light_skin_tone\",2876],[\"leg_medium_skin_tone\",2877],[\"leg_medium_dark_skin_tone\",2878],[\"leg_dark_skin_tone\",2879],[\"foot_light_skin_tone\",2880],[\"foot_medium_light_skin_tone\",2881],[\"foot_medium_skin_tone\",2882],[\"foot_medium_dark_skin_tone\",2883],[\"foot_dark_skin_tone\",2884],[\"female_superhero_light_skin_tone\",2885],[\"female_superhero_medium_light_skin_tone\",2886],[\"female_superhero_medium_skin_tone\",2887],[\"female_superhero_medium_dark_skin_tone\",2888],[\"female_superhero_dark_skin_tone\",2889],[\"male_superhero_light_skin_tone\",2890],[\"male_superhero_medium_light_skin_tone\",2891],[\"male_superhero_medium_skin_tone\",2892],[\"male_superhero_medium_dark_skin_tone\",2893],[\"male_superhero_dark_skin_tone\",2894],[\"superhero_light_skin_tone\",2895],[\"superhero_medium_light_skin_tone\",2896],[\"superhero_medium_skin_tone\",2897],[\"superhero_medium_dark_skin_tone\",2898],[\"superhero_dark_skin_tone\",2899],[\"female_supervillain_light_skin_tone\",2900],[\"female_supervillain_medium_light_skin_tone\",2901],[\"female_supervillain_medium_skin_tone\",2902],[\"female_supervillain_medium_dark_skin_tone\",2903],[\"female_supervillain_dark_skin_tone\",2904],[\"male_supervillain_light_skin_tone\",2905],[\"male_supervillain_medium_light_skin_tone\",2906],[\"male_supervillain_medium_skin_tone\",2907],[\"male_supervillain_medium_dark_skin_tone\",2908],[\"male_supervillain_dark_skin_tone\",2909],[\"supervillain_light_skin_tone\",2910],[\"supervillain_medium_light_skin_tone\",2911],[\"supervillain_medium_skin_tone\",2912],[\"supervillain_medium_dark_skin_tone\",2913],[\"supervillain_dark_skin_tone\",2914],[\"ear_with_hearing_aid_light_skin_tone\",2915],[\"ear_with_hearing_aid_medium_light_skin_tone\",2916],[\"ear_with_hearing_aid_medium_skin_tone\",2917],[\"ear_with_hearing_aid_medium_dark_skin_tone\",2918],[\"ear_with_hearing_aid_dark_skin_tone\",2919],[\"woman_standing_light_skin_tone\",2920],[\"woman_standing_medium_light_skin_tone\",2921],[\"woman_standing_medium_skin_tone\",2922],[\"woman_standing_medium_dark_skin_tone\",2923],[\"woman_standing_dark_skin_tone\",2924],[\"man_standing_light_skin_tone\",2925],[\"man_standing_medium_light_skin_tone\",2926],[\"man_standing_medium_skin_tone\",2927],[\"man_standing_medium_dark_skin_tone\",2928],[\"man_standing_dark_skin_tone\",2929],[\"standing_person_light_skin_tone\",2930],[\"standing_person_medium_light_skin_tone\",2931],[\"standing_person_medium_skin_tone\",2932],[\"standing_person_medium_dark_skin_tone\",2933],[\"standing_person_dark_skin_tone\",2934],[\"woman_kneeling_light_skin_tone\",2935],[\"woman_kneeling_medium_light_skin_tone\",2936],[\"woman_kneeling_medium_skin_tone\",2937],[\"woman_kneeling_medium_dark_skin_tone\",2938],[\"woman_kneeling_dark_skin_tone\",2939],[\"man_kneeling_light_skin_tone\",2940],[\"man_kneeling_medium_light_skin_tone\",2941],[\"man_kneeling_medium_skin_tone\",2942],[\"man_kneeling_medium_dark_skin_tone\",2943],[\"man_kneeling_dark_skin_tone\",2944],[\"kneeling_person_light_skin_tone\",2945],[\"kneeling_person_medium_light_skin_tone\",2946],[\"kneeling_person_medium_skin_tone\",2947],[\"kneeling_person_medium_dark_skin_tone\",2948],[\"kneeling_person_dark_skin_tone\",2949],[\"deaf_woman_light_skin_tone\",2950],[\"deaf_woman_medium_light_skin_tone\",2951],[\"deaf_woman_medium_skin_tone\",2952],[\"deaf_woman_medium_dark_skin_tone\",2953],[\"deaf_woman_dark_skin_tone\",2954],[\"deaf_man_light_skin_tone\",2955],[\"deaf_man_medium_light_skin_tone\",2956],[\"deaf_man_medium_skin_tone\",2957],[\"deaf_man_medium_dark_skin_tone\",2958],[\"deaf_man_dark_skin_tone\",2959],[\"deaf_person_light_skin_tone\",2960],[\"deaf_person_medium_light_skin_tone\",2961],[\"deaf_person_medium_skin_tone\",2962],[\"deaf_person_medium_dark_skin_tone\",2963],[\"deaf_person_dark_skin_tone\",2964],[\"farmer_light_skin_tone\",2965],[\"farmer_medium_light_skin_tone\",2966],[\"farmer_medium_skin_tone\",2967],[\"farmer_medium_dark_skin_tone\",2968],[\"farmer_dark_skin_tone\",2969],[\"cook_light_skin_tone\",2970],[\"cook_medium_light_skin_tone\",2971],[\"cook_medium_skin_tone\",2972],[\"cook_medium_dark_skin_tone\",2973],[\"cook_dark_skin_tone\",2974],[\"person_feeding_baby_light_skin_tone\",2975],[\"person_feeding_baby_medium_light_skin_tone\",2976],[\"person_feeding_baby_medium_skin_tone\",2977],[\"person_feeding_baby_medium_dark_skin_tone\",2978],[\"person_feeding_baby_dark_skin_tone\",2979],[\"mx_claus_light_skin_tone\",2980],[\"mx_claus_medium_light_skin_tone\",2981],[\"mx_claus_medium_skin_tone\",2982],[\"mx_claus_medium_dark_skin_tone\",2983],[\"mx_claus_dark_skin_tone\",2984],[\"student_light_skin_tone\",2985],[\"student_medium_light_skin_tone\",2986],[\"student_medium_skin_tone\",2987],[\"student_medium_dark_skin_tone\",2988],[\"student_dark_skin_tone\",2989],[\"singer_light_skin_tone\",2990],[\"singer_medium_light_skin_tone\",2991],[\"singer_medium_skin_tone\",2992],[\"singer_medium_dark_skin_tone\",2993],[\"singer_dark_skin_tone\",2994],[\"artist_light_skin_tone\",2995],[\"artist_medium_light_skin_tone\",2996],[\"artist_medium_skin_tone\",2997],[\"artist_medium_dark_skin_tone\",2998],[\"artist_dark_skin_tone\",2999],[\"teacher_light_skin_tone\",3000],[\"teacher_medium_light_skin_tone\",3001],[\"teacher_medium_skin_tone\",3002],[\"teacher_medium_dark_skin_tone\",3003],[\"teacher_dark_skin_tone\",3004],[\"factory_worker_light_skin_tone\",3005],[\"factory_worker_medium_light_skin_tone\",3006],[\"factory_worker_medium_skin_tone\",3007],[\"factory_worker_medium_dark_skin_tone\",3008],[\"factory_worker_dark_skin_tone\",3009],[\"technologist_light_skin_tone\",3010],[\"technologist_medium_light_skin_tone\",3011],[\"technologist_medium_skin_tone\",3012],[\"technologist_medium_dark_skin_tone\",3013],[\"technologist_dark_skin_tone\",3014],[\"office_worker_light_skin_tone\",3015],[\"office_worker_medium_light_skin_tone\",3016],[\"office_worker_medium_skin_tone\",3017],[\"office_worker_medium_dark_skin_tone\",3018],[\"office_worker_dark_skin_tone\",3019],[\"mechanic_light_skin_tone\",3020],[\"mechanic_medium_light_skin_tone\",3021],[\"mechanic_medium_skin_tone\",3022],[\"mechanic_medium_dark_skin_tone\",3023],[\"mechanic_dark_skin_tone\",3024],[\"scientist_light_skin_tone\",3025],[\"scientist_medium_light_skin_tone\",3026],[\"scientist_medium_skin_tone\",3027],[\"scientist_medium_dark_skin_tone\",3028],[\"scientist_dark_skin_tone\",3029],[\"astronaut_light_skin_tone\",3030],[\"astronaut_medium_light_skin_tone\",3031],[\"astronaut_medium_skin_tone\",3032],[\"astronaut_medium_dark_skin_tone\",3033],[\"astronaut_dark_skin_tone\",3034],[\"firefighter_light_skin_tone\",3035],[\"firefighter_medium_light_skin_tone\",3036],[\"firefighter_medium_skin_tone\",3037],[\"firefighter_medium_dark_skin_tone\",3038],[\"firefighter_dark_skin_tone\",3039],[\"people_holding_hands_light_skin_tone_light_skin_tone\",3040],[\"people_holding_hands_light_skin_tone_medium_light_skin_tone\",3041],[\"people_holding_hands_light_skin_tone_medium_skin_tone\",3042],[\"people_holding_hands_light_skin_tone_medium_dark_skin_tone\",3043],[\"people_holding_hands_light_skin_tone_dark_skin_tone\",3044],[\"people_holding_hands_medium_light_skin_tone_light_skin_tone\",3045],[\"people_holding_hands_medium_light_skin_tone_medium_light_skin_tone\",3046],[\"people_holding_hands_medium_light_skin_tone_medium_skin_tone\",3047],[\"people_holding_hands_medium_light_skin_tone_medium_dark_skin_tone\",3048],[\"people_holding_hands_medium_light_skin_tone_dark_skin_tone\",3049],[\"people_holding_hands_medium_skin_tone_light_skin_tone\",3050],[\"people_holding_hands_medium_skin_tone_medium_light_skin_tone\",3051],[\"people_holding_hands_medium_skin_tone_medium_skin_tone\",3052],[\"people_holding_hands_medium_skin_tone_medium_dark_skin_tone\",3053],[\"people_holding_hands_medium_skin_tone_dark_skin_tone\",3054],[\"people_holding_hands_medium_dark_skin_tone_light_skin_tone\",3055],[\"people_holding_hands_medium_dark_skin_tone_medium_light_skin_tone\",3056],[\"people_holding_hands_medium_dark_skin_tone_medium_skin_tone\",3057],[\"people_holding_hands_medium_dark_skin_tone_medium_dark_skin_tone\",3058],[\"people_holding_hands_medium_dark_skin_tone_dark_skin_tone\",3059],[\"people_holding_hands_dark_skin_tone_light_skin_tone\",3060],[\"people_holding_hands_dark_skin_tone_medium_light_skin_tone\",3061],[\"people_holding_hands_dark_skin_tone_medium_skin_tone\",3062],[\"people_holding_hands_dark_skin_tone_medium_dark_skin_tone\",3063],[\"people_holding_hands_dark_skin_tone_dark_skin_tone\",3064],[\"person_with_probing_cane_light_skin_tone\",3065],[\"person_with_probing_cane_medium_light_skin_tone\",3066],[\"person_with_probing_cane_medium_skin_tone\",3067],[\"person_with_probing_cane_medium_dark_skin_tone\",3068],[\"person_with_probing_cane_dark_skin_tone\",3069],[\"red_haired_person_light_skin_tone\",3070],[\"red_haired_person_medium_light_skin_tone\",3071],[\"red_haired_person_medium_skin_tone\",3072],[\"red_haired_person_medium_dark_skin_tone\",3073],[\"red_haired_person_dark_skin_tone\",3074],[\"curly_haired_person_light_skin_tone\",3075],[\"curly_haired_person_medium_light_skin_tone\",3076],[\"curly_haired_person_medium_skin_tone\",3077],[\"curly_haired_person_medium_dark_skin_tone\",3078],[\"curly_haired_person_dark_skin_tone\",3079],[\"bald_person_light_skin_tone\",3080],[\"bald_person_medium_light_skin_tone\",3081],[\"bald_person_medium_skin_tone\",3082],[\"bald_person_medium_dark_skin_tone\",3083],[\"bald_person_dark_skin_tone\",3084],[\"white_haired_person_light_skin_tone\",3085],[\"white_haired_person_medium_light_skin_tone\",3086],[\"white_haired_person_medium_skin_tone\",3087],[\"white_haired_person_medium_dark_skin_tone\",3088],[\"white_haired_person_dark_skin_tone\",3089],[\"person_in_motorized_wheelchair_light_skin_tone\",3090],[\"person_in_motorized_wheelchair_medium_light_skin_tone\",3091],[\"person_in_motorized_wheelchair_medium_skin_tone\",3092],[\"person_in_motorized_wheelchair_medium_dark_skin_tone\",3093],[\"person_in_motorized_wheelchair_dark_skin_tone\",3094],[\"person_in_manual_wheelchair_light_skin_tone\",3095],[\"person_in_manual_wheelchair_medium_light_skin_tone\",3096],[\"person_in_manual_wheelchair_medium_skin_tone\",3097],[\"person_in_manual_wheelchair_medium_dark_skin_tone\",3098],[\"person_in_manual_wheelchair_dark_skin_tone\",3099],[\"health_worker_light_skin_tone\",3100],[\"doctor_light_skin_tone\",3100],[\"health_worker_medium_light_skin_tone\",3101],[\"doctor_medium_light_skin_tone\",3101],[\"health_worker_medium_skin_tone\",3102],[\"doctor_medium_skin_tone\",3102],[\"health_worker_medium_dark_skin_tone\",3103],[\"doctor_medium_dark_skin_tone\",3103],[\"health_worker_dark_skin_tone\",3104],[\"doctor_dark_skin_tone\",3104],[\"judge_light_skin_tone\",3105],[\"judge_medium_light_skin_tone\",3106],[\"judge_medium_skin_tone\",3107],[\"judge_medium_dark_skin_tone\",3108],[\"judge_dark_skin_tone\",3109],[\"pilot_light_skin_tone\",3110],[\"pilot_medium_light_skin_tone\",3111],[\"pilot_medium_skin_tone\",3112],[\"pilot_medium_dark_skin_tone\",3113],[\"pilot_dark_skin_tone\",3114],[\"adult_light_skin_tone\",3115],[\"adult_medium_light_skin_tone\",3116],[\"adult_medium_skin_tone\",3117],[\"adult_medium_dark_skin_tone\",3118],[\"adult_dark_skin_tone\",3119],[\"child_light_skin_tone\",3120],[\"child_medium_light_skin_tone\",3121],[\"child_medium_skin_tone\",3122],[\"child_medium_dark_skin_tone\",3123],[\"child_dark_skin_tone\",3124],[\"older_adult_light_skin_tone\",3125],[\"older_adult_medium_light_skin_tone\",3126],[\"older_adult_medium_skin_tone\",3127],[\"older_adult_medium_dark_skin_tone\",3128],[\"older_adult_dark_skin_tone\",3129],[\"bearded_person_light_skin_tone\",3130],[\"bearded_person_medium_light_skin_tone\",3131],[\"bearded_person_medium_skin_tone\",3132],[\"bearded_person_medium_dark_skin_tone\",3133],[\"bearded_person_dark_skin_tone\",3134],[\"person_with_headscarf_light_skin_tone\",3135],[\"person_with_headscarf_medium_light_skin_tone\",3136],[\"person_with_headscarf_medium_skin_tone\",3137],[\"person_with_headscarf_medium_dark_skin_tone\",3138],[\"person_with_headscarf_dark_skin_tone\",3139],[\"woman_in_steamy_room_light_skin_tone\",3140],[\"woman_in_steamy_room_medium_light_skin_tone\",3141],[\"woman_in_steamy_room_medium_skin_tone\",3142],[\"woman_in_steamy_room_medium_dark_skin_tone\",3143],[\"woman_in_steamy_room_dark_skin_tone\",3144],[\"man_in_steamy_room_light_skin_tone\",3145],[\"man_in_steamy_room_medium_light_skin_tone\",3146],[\"man_in_steamy_room_medium_skin_tone\",3147],[\"man_in_steamy_room_medium_dark_skin_tone\",3148],[\"man_in_steamy_room_dark_skin_tone\",3149],[\"person_in_steamy_room_light_skin_tone\",3150],[\"person_in_steamy_room_medium_light_skin_tone\",3151],[\"person_in_steamy_room_medium_skin_tone\",3152],[\"person_in_steamy_room_medium_dark_skin_tone\",3153],[\"person_in_steamy_room_dark_skin_tone\",3154],[\"woman_climbing_light_skin_tone\",3155],[\"woman_climbing_medium_light_skin_tone\",3156],[\"woman_climbing_medium_skin_tone\",3157],[\"woman_climbing_medium_dark_skin_tone\",3158],[\"woman_climbing_dark_skin_tone\",3159],[\"man_climbing_light_skin_tone\",3160],[\"man_climbing_medium_light_skin_tone\",3161],[\"man_climbing_medium_skin_tone\",3162],[\"man_climbing_medium_dark_skin_tone\",3163],[\"man_climbing_dark_skin_tone\",3164],[\"person_climbing_light_skin_tone\",3165],[\"person_climbing_medium_light_skin_tone\",3166],[\"person_climbing_medium_skin_tone\",3167],[\"person_climbing_medium_dark_skin_tone\",3168],[\"person_climbing_dark_skin_tone\",3169],[\"woman_in_lotus_position_light_skin_tone\",3170],[\"woman_in_lotus_position_medium_light_skin_tone\",3171],[\"woman_in_lotus_position_medium_skin_tone\",3172],[\"woman_in_lotus_position_medium_dark_skin_tone\",3173],[\"woman_in_lotus_position_dark_skin_tone\",3174],[\"man_in_lotus_position_light_skin_tone\",3175],[\"man_in_lotus_position_medium_light_skin_tone\",3176],[\"man_in_lotus_position_medium_skin_tone\",3177],[\"man_in_lotus_position_medium_dark_skin_tone\",3178],[\"man_in_lotus_position_dark_skin_tone\",3179],[\"person_in_lotus_position_light_skin_tone\",3180],[\"person_in_lotus_position_medium_light_skin_tone\",3181],[\"person_in_lotus_position_medium_skin_tone\",3182],[\"person_in_lotus_position_medium_dark_skin_tone\",3183],[\"person_in_lotus_position_dark_skin_tone\",3184],[\"female_mage_light_skin_tone\",3185],[\"female_mage_medium_light_skin_tone\",3186],[\"female_mage_medium_skin_tone\",3187],[\"female_mage_medium_dark_skin_tone\",3188],[\"female_mage_dark_skin_tone\",3189],[\"male_mage_light_skin_tone\",3190],[\"male_mage_medium_light_skin_tone\",3191],[\"male_mage_medium_skin_tone\",3192],[\"male_mage_medium_dark_skin_tone\",3193],[\"male_mage_dark_skin_tone\",3194],[\"mage_light_skin_tone\",3195],[\"mage_medium_light_skin_tone\",3196],[\"mage_medium_skin_tone\",3197],[\"mage_medium_dark_skin_tone\",3198],[\"mage_dark_skin_tone\",3199],[\"female_fairy_light_skin_tone\",3200],[\"female_fairy_medium_light_skin_tone\",3201],[\"female_fairy_medium_skin_tone\",3202],[\"female_fairy_medium_dark_skin_tone\",3203],[\"female_fairy_dark_skin_tone\",3204],[\"male_fairy_light_skin_tone\",3205],[\"male_fairy_medium_light_skin_tone\",3206],[\"male_fairy_medium_skin_tone\",3207],[\"male_fairy_medium_dark_skin_tone\",3208],[\"male_fairy_dark_skin_tone\",3209],[\"fairy_light_skin_tone\",3210],[\"fairy_medium_light_skin_tone\",3211],[\"fairy_medium_skin_tone\",3212],[\"fairy_medium_dark_skin_tone\",3213],[\"fairy_dark_skin_tone\",3214],[\"female_vampire_light_skin_tone\",3215],[\"female_vampire_medium_light_skin_tone\",3216],[\"female_vampire_medium_skin_tone\",3217],[\"female_vampire_medium_dark_skin_tone\",3218],[\"female_vampire_dark_skin_tone\",3219],[\"male_vampire_light_skin_tone\",3220],[\"male_vampire_medium_light_skin_tone\",3221],[\"male_vampire_medium_skin_tone\",3222],[\"male_vampire_medium_dark_skin_tone\",3223],[\"male_vampire_dark_skin_tone\",3224],[\"vampire_light_skin_tone\",3225],[\"vampire_medium_light_skin_tone\",3226],[\"vampire_medium_skin_tone\",3227],[\"vampire_medium_dark_skin_tone\",3228],[\"vampire_dark_skin_tone\",3229],[\"mermaid_light_skin_tone\",3230],[\"mermaid_medium_light_skin_tone\",3231],[\"mermaid_medium_skin_tone\",3232],[\"mermaid_medium_dark_skin_tone\",3233],[\"mermaid_dark_skin_tone\",3234],[\"merman_light_skin_tone\",3235],[\"merman_medium_light_skin_tone\",3236],[\"merman_medium_skin_tone\",3237],[\"merman_medium_dark_skin_tone\",3238],[\"merman_dark_skin_tone\",3239],[\"merperson_light_skin_tone\",3240],[\"merperson_medium_light_skin_tone\",3241],[\"merperson_medium_skin_tone\",3242],[\"merperson_medium_dark_skin_tone\",3243],[\"merperson_dark_skin_tone\",3244],[\"female_elf_light_skin_tone\",3245],[\"female_elf_medium_light_skin_tone\",3246],[\"female_elf_medium_skin_tone\",3247],[\"female_elf_medium_dark_skin_tone\",3248],[\"female_elf_dark_skin_tone\",3249],[\"male_elf_light_skin_tone\",3250],[\"male_elf_medium_light_skin_tone\",3251],[\"male_elf_medium_skin_tone\",3252],[\"male_elf_medium_dark_skin_tone\",3253],[\"male_elf_dark_skin_tone\",3254],[\"elf_light_skin_tone\",3255],[\"elf_medium_light_skin_tone\",3256],[\"elf_medium_skin_tone\",3257],[\"elf_medium_dark_skin_tone\",3258],[\"elf_dark_skin_tone\",3259],[\"point_up_light_skin_tone\",3260],[\"point_up_medium_light_skin_tone\",3261],[\"point_up_medium_skin_tone\",3262],[\"point_up_medium_dark_skin_tone\",3263],[\"point_up_dark_skin_tone\",3264],[\"woman-bouncing-ball_light_skin_tone\",3265],[\"basketball_woman_light_skin_tone\",3265],[\"woman-bouncing-ball_medium_light_skin_tone\",3266],[\"basketball_woman_medium_light_skin_tone\",3266],[\"woman-bouncing-ball_medium_skin_tone\",3267],[\"basketball_woman_medium_skin_tone\",3267],[\"woman-bouncing-ball_medium_dark_skin_tone\",3268],[\"basketball_woman_medium_dark_skin_tone\",3268],[\"woman-bouncing-ball_dark_skin_tone\",3269],[\"basketball_woman_dark_skin_tone\",3269],[\"man-bouncing-ball_light_skin_tone\",3270],[\"basketball_man_light_skin_tone\",3270],[\"man-bouncing-ball_medium_light_skin_tone\",3271],[\"basketball_man_medium_light_skin_tone\",3271],[\"man-bouncing-ball_medium_skin_tone\",3272],[\"basketball_man_medium_skin_tone\",3272],[\"man-bouncing-ball_medium_dark_skin_tone\",3273],[\"basketball_man_medium_dark_skin_tone\",3273],[\"man-bouncing-ball_dark_skin_tone\",3274],[\"basketball_man_dark_skin_tone\",3274],[\"person_with_ball_light_skin_tone\",3275],[\"person_with_ball_medium_light_skin_tone\",3276],[\"person_with_ball_medium_skin_tone\",3277],[\"person_with_ball_medium_dark_skin_tone\",3278],[\"person_with_ball_dark_skin_tone\",3279],[\"fist_light_skin_tone\",3280],[\"fist_raised_light_skin_tone\",3280],[\"fist_medium_light_skin_tone\",3281],[\"fist_raised_medium_light_skin_tone\",3281],[\"fist_medium_skin_tone\",3282],[\"fist_raised_medium_skin_tone\",3282],[\"fist_medium_dark_skin_tone\",3283],[\"fist_raised_medium_dark_skin_tone\",3283],[\"fist_dark_skin_tone\",3284],[\"fist_raised_dark_skin_tone\",3284],[\"hand_light_skin_tone\",3285],[\"raised_hand_light_skin_tone\",3285],[\"hand_medium_light_skin_tone\",3286],[\"raised_hand_medium_light_skin_tone\",3286],[\"hand_medium_skin_tone\",3287],[\"raised_hand_medium_skin_tone\",3287],[\"hand_medium_dark_skin_tone\",3288],[\"raised_hand_medium_dark_skin_tone\",3288],[\"hand_dark_skin_tone\",3289],[\"raised_hand_dark_skin_tone\",3289],[\"v_light_skin_tone\",3290],[\"v_medium_light_skin_tone\",3291],[\"v_medium_skin_tone\",3292],[\"v_medium_dark_skin_tone\",3293],[\"v_dark_skin_tone\",3294],[\"writing_hand_light_skin_tone\",3295],[\"writing_hand_medium_light_skin_tone\",3296],[\"writing_hand_medium_skin_tone\",3297],[\"writing_hand_medium_dark_skin_tone\",3298],[\"writing_hand_dark_skin_tone\",3299],[\"mattermost\",3300]]);\n\nexport const EmojiIndicesByUnicode = new Map([[\"1f600\",0],[\"1f603\",1],[\"1f604\",2],[\"1f601\",3],[\"1f606\",4],[\"1f605\",5],[\"1f923\",6],[\"1f602\",7],[\"1f642\",8],[\"1f643\",9],[\"1f609\",10],[\"1f60a\",11],[\"1f607\",12],[\"1f970\",13],[\"1f60d\",14],[\"1f929\",15],[\"1f618\",16],[\"1f617\",17],[\"263a-fe0f\",18],[\"1f61a\",19],[\"1f619\",20],[\"1f972\",21],[\"1f60b\",22],[\"1f61b\",23],[\"1f61c\",24],[\"1f92a\",25],[\"1f61d\",26],[\"1f911\",27],[\"1f917\",28],[\"1f92d\",29],[\"1f92b\",30],[\"1f914\",31],[\"1f910\",32],[\"1f928\",33],[\"1f610\",34],[\"1f611\",35],[\"1f636\",36],[\"1f60f\",37],[\"1f612\",38],[\"1f644\",39],[\"1f62c\",40],[\"1f925\",41],[\"1f60c\",42],[\"1f614\",43],[\"1f62a\",44],[\"1f924\",45],[\"1f634\",46],[\"1f637\",47],[\"1f912\",48],[\"1f915\",49],[\"1f922\",50],[\"1f92e\",51],[\"1f927\",52],[\"1f975\",53],[\"1f976\",54],[\"1f974\",55],[\"1f635\",56],[\"1f92f\",57],[\"1f920\",58],[\"1f973\",59],[\"1f978\",60],[\"1f60e\",61],[\"1f913\",62],[\"1f9d0\",63],[\"1f615\",64],[\"1f61f\",65],[\"1f641\",66],[\"2639-fe0f\",67],[\"1f62e\",68],[\"1f62f\",69],[\"1f632\",70],[\"1f633\",71],[\"1f97a\",72],[\"1f626\",73],[\"1f627\",74],[\"1f628\",75],[\"1f630\",76],[\"1f625\",77],[\"1f622\",78],[\"1f62d\",79],[\"1f631\",80],[\"1f616\",81],[\"1f623\",82],[\"1f61e\",83],[\"1f613\",84],[\"1f629\",85],[\"1f62b\",86],[\"1f971\",87],[\"1f624\",88],[\"1f621\",89],[\"1f620\",90],[\"1f92c\",91],[\"1f608\",92],[\"1f47f\",93],[\"1f480\",94],[\"2620-fe0f\",95],[\"1f4a9\",96],[\"1f921\",97],[\"1f479\",98],[\"1f47a\",99],[\"1f47b\",100],[\"1f47d\",101],[\"1f47e\",102],[\"1f916\",103],[\"1f63a\",104],[\"1f638\",105],[\"1f639\",106],[\"1f63b\",107],[\"1f63c\",108],[\"1f63d\",109],[\"1f640\",110],[\"1f63f\",111],[\"1f63e\",112],[\"1f648\",113],[\"1f649\",114],[\"1f64a\",115],[\"1f48b\",116],[\"1f48c\",117],[\"1f498\",118],[\"1f49d\",119],[\"1f496\",120],[\"1f497\",121],[\"1f493\",122],[\"1f49e\",123],[\"1f495\",124],[\"1f49f\",125],[\"2763-fe0f\",126],[\"1f494\",127],[\"2764-fe0f\",128],[\"1f9e1\",129],[\"1f49b\",130],[\"1f49a\",131],[\"1f499\",132],[\"1f49c\",133],[\"1f90e\",134],[\"1f5a4\",135],[\"1f90d\",136],[\"1f4af\",137],[\"1f4a2\",138],[\"1f4a5\",139],[\"1f4ab\",140],[\"1f4a6\",141],[\"1f4a8\",142],[\"1f573-fe0f\",143],[\"1f4a3\",144],[\"1f4ac\",145],[\"1f441-fe0f-200d-1f5e8-fe0f\",146],[\"1f5e8-fe0f\",147],[\"1f5ef-fe0f\",148],[\"1f4ad\",149],[\"1f4a4\",150],[\"1f44b\",151],[\"1f91a\",152],[\"1f590-fe0f\",153],[\"270b\",154],[\"1f596\",155],[\"1f44c\",156],[\"1f90c\",157],[\"1f90f\",158],[\"270c-fe0f\",159],[\"1f91e\",160],[\"1f91f\",161],[\"1f918\",162],[\"1f919\",163],[\"1f448\",164],[\"1f449\",165],[\"1f446\",166],[\"1f595\",167],[\"1f447\",168],[\"261d-fe0f\",169],[\"1f44d\",170],[\"1f44e\",171],[\"270a\",172],[\"1f44a\",173],[\"1f91b\",174],[\"1f91c\",175],[\"1f44f\",176],[\"1f64c\",177],[\"1f450\",178],[\"1f932\",179],[\"1f91d\",180],[\"1f64f\",181],[\"270d-fe0f\",182],[\"1f485\",183],[\"1f933\",184],[\"1f4aa\",185],[\"1f9be\",186],[\"1f9bf\",187],[\"1f9b5\",188],[\"1f9b6\",189],[\"1f442\",190],[\"1f9bb\",191],[\"1f443\",192],[\"1f9e0\",193],[\"1fac0\",194],[\"1fac1\",195],[\"1f9b7\",196],[\"1f9b4\",197],[\"1f440\",198],[\"1f441-fe0f\",199],[\"1f445\",200],[\"1f444\",201],[\"1f476\",202],[\"1f9d2\",203],[\"1f466\",204],[\"1f467\",205],[\"1f9d1\",206],[\"1f471\",207],[\"1f468\",208],[\"1f9d4\",209],[\"1f468-200d-1f9b0\",210],[\"1f468-200d-1f9b1\",211],[\"1f468-200d-1f9b3\",212],[\"1f468-200d-1f9b2\",213],[\"1f469\",214],[\"1f469-200d-1f9b0\",215],[\"1f9d1-200d-1f9b0\",216],[\"1f469-200d-1f9b1\",217],[\"1f9d1-200d-1f9b1\",218],[\"1f469-200d-1f9b3\",219],[\"1f9d1-200d-1f9b3\",220],[\"1f469-200d-1f9b2\",221],[\"1f9d1-200d-1f9b2\",222],[\"1f471-200d-2640-fe0f\",223],[\"1f471-200d-2642-fe0f\",224],[\"1f9d3\",225],[\"1f474\",226],[\"1f475\",227],[\"1f64d\",228],[\"1f64d-200d-2642-fe0f\",229],[\"1f64d-200d-2640-fe0f\",230],[\"1f64e\",231],[\"1f64e-200d-2642-fe0f\",232],[\"1f64e-200d-2640-fe0f\",233],[\"1f645\",234],[\"1f645-200d-2642-fe0f\",235],[\"1f645-200d-2640-fe0f\",236],[\"1f646\",237],[\"1f646-200d-2642-fe0f\",238],[\"1f646-200d-2640-fe0f\",239],[\"1f481\",240],[\"1f481-200d-2642-fe0f\",241],[\"1f481-200d-2640-fe0f\",242],[\"1f64b\",243],[\"1f64b-200d-2642-fe0f\",244],[\"1f64b-200d-2640-fe0f\",245],[\"1f9cf\",246],[\"1f9cf-200d-2642-fe0f\",247],[\"1f9cf-200d-2640-fe0f\",248],[\"1f647\",249],[\"1f647-200d-2642-fe0f\",250],[\"1f647-200d-2640-fe0f\",251],[\"1f926\",252],[\"1f926-200d-2642-fe0f\",253],[\"1f926-200d-2640-fe0f\",254],[\"1f937\",255],[\"1f937-200d-2642-fe0f\",256],[\"1f937-200d-2640-fe0f\",257],[\"1f9d1-200d-2695-fe0f\",258],[\"1f468-200d-2695-fe0f\",259],[\"1f469-200d-2695-fe0f\",260],[\"1f9d1-200d-1f393\",261],[\"1f468-200d-1f393\",262],[\"1f469-200d-1f393\",263],[\"1f9d1-200d-1f3eb\",264],[\"1f468-200d-1f3eb\",265],[\"1f469-200d-1f3eb\",266],[\"1f9d1-200d-2696-fe0f\",267],[\"1f468-200d-2696-fe0f\",268],[\"1f469-200d-2696-fe0f\",269],[\"1f9d1-200d-1f33e\",270],[\"1f468-200d-1f33e\",271],[\"1f469-200d-1f33e\",272],[\"1f9d1-200d-1f373\",273],[\"1f468-200d-1f373\",274],[\"1f469-200d-1f373\",275],[\"1f9d1-200d-1f527\",276],[\"1f468-200d-1f527\",277],[\"1f469-200d-1f527\",278],[\"1f9d1-200d-1f3ed\",279],[\"1f468-200d-1f3ed\",280],[\"1f469-200d-1f3ed\",281],[\"1f9d1-200d-1f4bc\",282],[\"1f468-200d-1f4bc\",283],[\"1f469-200d-1f4bc\",284],[\"1f9d1-200d-1f52c\",285],[\"1f468-200d-1f52c\",286],[\"1f469-200d-1f52c\",287],[\"1f9d1-200d-1f4bb\",288],[\"1f468-200d-1f4bb\",289],[\"1f469-200d-1f4bb\",290],[\"1f9d1-200d-1f3a4\",291],[\"1f468-200d-1f3a4\",292],[\"1f469-200d-1f3a4\",293],[\"1f9d1-200d-1f3a8\",294],[\"1f468-200d-1f3a8\",295],[\"1f469-200d-1f3a8\",296],[\"1f9d1-200d-2708-fe0f\",297],[\"1f468-200d-2708-fe0f\",298],[\"1f469-200d-2708-fe0f\",299],[\"1f9d1-200d-1f680\",300],[\"1f468-200d-1f680\",301],[\"1f469-200d-1f680\",302],[\"1f9d1-200d-1f692\",303],[\"1f468-200d-1f692\",304],[\"1f469-200d-1f692\",305],[\"1f46e\",306],[\"1f46e-200d-2642-fe0f\",307],[\"1f46e-200d-2640-fe0f\",308],[\"1f575-fe0f\",309],[\"1f575-fe0f-200d-2642-fe0f\",310],[\"1f575-fe0f-200d-2640-fe0f\",311],[\"1f482\",312],[\"1f482-200d-2642-fe0f\",313],[\"1f482-200d-2640-fe0f\",314],[\"1f977\",315],[\"1f477\",316],[\"1f477-200d-2642-fe0f\",317],[\"1f477-200d-2640-fe0f\",318],[\"1f934\",319],[\"1f478\",320],[\"1f473\",321],[\"1f473-200d-2642-fe0f\",322],[\"1f473-200d-2640-fe0f\",323],[\"1f472\",324],[\"1f9d5\",325],[\"1f935\",326],[\"1f935-200d-2642-fe0f\",327],[\"1f935-200d-2640-fe0f\",328],[\"1f470\",329],[\"1f470-200d-2642-fe0f\",330],[\"1f470-200d-2640-fe0f\",331],[\"1f930\",332],[\"1f931\",333],[\"1f469-200d-1f37c\",334],[\"1f468-200d-1f37c\",335],[\"1f9d1-200d-1f37c\",336],[\"1f47c\",337],[\"1f385\",338],[\"1f936\",339],[\"1f9d1-200d-1f384\",340],[\"1f9b8\",341],[\"1f9b8-200d-2642-fe0f\",342],[\"1f9b8-200d-2640-fe0f\",343],[\"1f9b9\",344],[\"1f9b9-200d-2642-fe0f\",345],[\"1f9b9-200d-2640-fe0f\",346],[\"1f9d9\",347],[\"1f9d9-200d-2642-fe0f\",348],[\"1f9d9-200d-2640-fe0f\",349],[\"1f9da\",350],[\"1f9da-200d-2642-fe0f\",351],[\"1f9da-200d-2640-fe0f\",352],[\"1f9db\",353],[\"1f9db-200d-2642-fe0f\",354],[\"1f9db-200d-2640-fe0f\",355],[\"1f9dc\",356],[\"1f9dc-200d-2642-fe0f\",357],[\"1f9dc-200d-2640-fe0f\",358],[\"1f9dd\",359],[\"1f9dd-200d-2642-fe0f\",360],[\"1f9dd-200d-2640-fe0f\",361],[\"1f9de\",362],[\"1f9de-200d-2642-fe0f\",363],[\"1f9de-200d-2640-fe0f\",364],[\"1f9df\",365],[\"1f9df-200d-2642-fe0f\",366],[\"1f9df-200d-2640-fe0f\",367],[\"1f486\",368],[\"1f486-200d-2642-fe0f\",369],[\"1f486-200d-2640-fe0f\",370],[\"1f487\",371],[\"1f487-200d-2642-fe0f\",372],[\"1f487-200d-2640-fe0f\",373],[\"1f6b6\",374],[\"1f6b6-200d-2642-fe0f\",375],[\"1f6b6-200d-2640-fe0f\",376],[\"1f9cd\",377],[\"1f9cd-200d-2642-fe0f\",378],[\"1f9cd-200d-2640-fe0f\",379],[\"1f9ce\",380],[\"1f9ce-200d-2642-fe0f\",381],[\"1f9ce-200d-2640-fe0f\",382],[\"1f9d1-200d-1f9af\",383],[\"1f468-200d-1f9af\",384],[\"1f469-200d-1f9af\",385],[\"1f9d1-200d-1f9bc\",386],[\"1f468-200d-1f9bc\",387],[\"1f469-200d-1f9bc\",388],[\"1f9d1-200d-1f9bd\",389],[\"1f468-200d-1f9bd\",390],[\"1f469-200d-1f9bd\",391],[\"1f3c3\",392],[\"1f3c3-200d-2642-fe0f\",393],[\"1f3c3-200d-2640-fe0f\",394],[\"1f483\",395],[\"1f57a\",396],[\"1f574-fe0f\",397],[\"1f46f\",398],[\"1f46f-200d-2642-fe0f\",399],[\"1f46f-200d-2640-fe0f\",400],[\"1f9d6\",401],[\"1f9d6-200d-2642-fe0f\",402],[\"1f9d6-200d-2640-fe0f\",403],[\"1f9d7\",404],[\"1f9d7-200d-2642-fe0f\",405],[\"1f9d7-200d-2640-fe0f\",406],[\"1f93a\",407],[\"1f3c7\",408],[\"26f7-fe0f\",409],[\"1f3c2\",410],[\"1f3cc-fe0f\",411],[\"1f3cc-fe0f-200d-2642-fe0f\",412],[\"1f3cc-fe0f-200d-2640-fe0f\",413],[\"1f3c4\",414],[\"1f3c4-200d-2642-fe0f\",415],[\"1f3c4-200d-2640-fe0f\",416],[\"1f6a3\",417],[\"1f6a3-200d-2642-fe0f\",418],[\"1f6a3-200d-2640-fe0f\",419],[\"1f3ca\",420],[\"1f3ca-200d-2642-fe0f\",421],[\"1f3ca-200d-2640-fe0f\",422],[\"26f9-fe0f\",423],[\"26f9-fe0f-200d-2642-fe0f\",424],[\"26f9-fe0f-200d-2640-fe0f\",425],[\"1f3cb-fe0f\",426],[\"1f3cb-fe0f-200d-2642-fe0f\",427],[\"1f3cb-fe0f-200d-2640-fe0f\",428],[\"1f6b4\",429],[\"1f6b4-200d-2642-fe0f\",430],[\"1f6b4-200d-2640-fe0f\",431],[\"1f6b5\",432],[\"1f6b5-200d-2642-fe0f\",433],[\"1f6b5-200d-2640-fe0f\",434],[\"1f938\",435],[\"1f938-200d-2642-fe0f\",436],[\"1f938-200d-2640-fe0f\",437],[\"1f93c\",438],[\"1f93c-200d-2642-fe0f\",439],[\"1f93c-200d-2640-fe0f\",440],[\"1f93d\",441],[\"1f93d-200d-2642-fe0f\",442],[\"1f93d-200d-2640-fe0f\",443],[\"1f93e\",444],[\"1f93e-200d-2642-fe0f\",445],[\"1f93e-200d-2640-fe0f\",446],[\"1f939\",447],[\"1f939-200d-2642-fe0f\",448],[\"1f939-200d-2640-fe0f\",449],[\"1f9d8\",450],[\"1f9d8-200d-2642-fe0f\",451],[\"1f9d8-200d-2640-fe0f\",452],[\"1f6c0\",453],[\"1f6cc\",454],[\"1f9d1-200d-1f91d-200d-1f9d1\",455],[\"1f46d\",456],[\"1f46b\",457],[\"1f46c\",458],[\"1f48f\",459],[\"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468\",460],[\"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468\",461],[\"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469\",462],[\"1f491\",463],[\"1f469-200d-2764-fe0f-200d-1f468\",464],[\"1f468-200d-2764-fe0f-200d-1f468\",465],[\"1f469-200d-2764-fe0f-200d-1f469\",466],[\"1f46a\",467],[\"1f468-200d-1f469-200d-1f466\",468],[\"1f468-200d-1f469-200d-1f467\",469],[\"1f468-200d-1f469-200d-1f467-200d-1f466\",470],[\"1f468-200d-1f469-200d-1f466-200d-1f466\",471],[\"1f468-200d-1f469-200d-1f467-200d-1f467\",472],[\"1f468-200d-1f468-200d-1f466\",473],[\"1f468-200d-1f468-200d-1f467\",474],[\"1f468-200d-1f468-200d-1f467-200d-1f466\",475],[\"1f468-200d-1f468-200d-1f466-200d-1f466\",476],[\"1f468-200d-1f468-200d-1f467-200d-1f467\",477],[\"1f469-200d-1f469-200d-1f466\",478],[\"1f469-200d-1f469-200d-1f467\",479],[\"1f469-200d-1f469-200d-1f467-200d-1f466\",480],[\"1f469-200d-1f469-200d-1f466-200d-1f466\",481],[\"1f469-200d-1f469-200d-1f467-200d-1f467\",482],[\"1f468-200d-1f466\",483],[\"1f468-200d-1f466-200d-1f466\",484],[\"1f468-200d-1f467\",485],[\"1f468-200d-1f467-200d-1f466\",486],[\"1f468-200d-1f467-200d-1f467\",487],[\"1f469-200d-1f466\",488],[\"1f469-200d-1f466-200d-1f466\",489],[\"1f469-200d-1f467\",490],[\"1f469-200d-1f467-200d-1f466\",491],[\"1f469-200d-1f467-200d-1f467\",492],[\"1f5e3-fe0f\",493],[\"1f464\",494],[\"1f465\",495],[\"1fac2\",496],[\"1f463\",497],[\"1f3fb\",498],[\"1f3fc\",499],[\"1f3fd\",500],[\"1f3fe\",501],[\"1f3ff\",502],[\"1f435\",503],[\"1f412\",504],[\"1f98d\",505],[\"1f9a7\",506],[\"1f436\",507],[\"1f415\",508],[\"1f9ae\",509],[\"1f415-200d-1f9ba\",510],[\"1f429\",511],[\"1f43a\",512],[\"1f98a\",513],[\"1f99d\",514],[\"1f431\",515],[\"1f408\",516],[\"1f408-200d-2b1b\",517],[\"1f981\",518],[\"1f42f\",519],[\"1f405\",520],[\"1f406\",521],[\"1f434\",522],[\"1f40e\",523],[\"1f984\",524],[\"1f993\",525],[\"1f98c\",526],[\"1f9ac\",527],[\"1f42e\",528],[\"1f402\",529],[\"1f403\",530],[\"1f404\",531],[\"1f437\",532],[\"1f416\",533],[\"1f417\",534],[\"1f43d\",535],[\"1f40f\",536],[\"1f411\",537],[\"1f410\",538],[\"1f42a\",539],[\"1f42b\",540],[\"1f999\",541],[\"1f992\",542],[\"1f418\",543],[\"1f9a3\",544],[\"1f98f\",545],[\"1f99b\",546],[\"1f42d\",547],[\"1f401\",548],[\"1f400\",549],[\"1f439\",550],[\"1f430\",551],[\"1f407\",552],[\"1f43f-fe0f\",553],[\"1f9ab\",554],[\"1f994\",555],[\"1f987\",556],[\"1f43b\",557],[\"1f43b-200d-2744-fe0f\",558],[\"1f428\",559],[\"1f43c\",560],[\"1f9a5\",561],[\"1f9a6\",562],[\"1f9a8\",563],[\"1f998\",564],[\"1f9a1\",565],[\"1f43e\",566],[\"1f983\",567],[\"1f414\",568],[\"1f413\",569],[\"1f423\",570],[\"1f424\",571],[\"1f425\",572],[\"1f426\",573],[\"1f427\",574],[\"1f54a-fe0f\",575],[\"1f985\",576],[\"1f986\",577],[\"1f9a2\",578],[\"1f989\",579],[\"1f9a4\",580],[\"1fab6\",581],[\"1f9a9\",582],[\"1f99a\",583],[\"1f99c\",584],[\"1f438\",585],[\"1f40a\",586],[\"1f422\",587],[\"1f98e\",588],[\"1f40d\",589],[\"1f432\",590],[\"1f409\",591],[\"1f995\",592],[\"1f996\",593],[\"1f433\",594],[\"1f40b\",595],[\"1f42c\",596],[\"1f9ad\",597],[\"1f41f\",598],[\"1f420\",599],[\"1f421\",600],[\"1f988\",601],[\"1f419\",602],[\"1f41a\",603],[\"1f40c\",604],[\"1f98b\",605],[\"1f41b\",606],[\"1f41c\",607],[\"1f41d\",608],[\"1fab2\",609],[\"1f41e\",610],[\"1f997\",611],[\"1fab3\",612],[\"1f577-fe0f\",613],[\"1f578-fe0f\",614],[\"1f982\",615],[\"1f99f\",616],[\"1fab0\",617],[\"1fab1\",618],[\"1f9a0\",619],[\"1f490\",620],[\"1f338\",621],[\"1f4ae\",622],[\"1f3f5-fe0f\",623],[\"1f339\",624],[\"1f940\",625],[\"1f33a\",626],[\"1f33b\",627],[\"1f33c\",628],[\"1f337\",629],[\"1f331\",630],[\"1fab4\",631],[\"1f332\",632],[\"1f333\",633],[\"1f334\",634],[\"1f335\",635],[\"1f33e\",636],[\"1f33f\",637],[\"2618-fe0f\",638],[\"1f340\",639],[\"1f341\",640],[\"1f342\",641],[\"1f343\",642],[\"1f347\",643],[\"1f348\",644],[\"1f349\",645],[\"1f34a\",646],[\"1f34b\",647],[\"1f34c\",648],[\"1f34d\",649],[\"1f96d\",650],[\"1f34e\",651],[\"1f34f\",652],[\"1f350\",653],[\"1f351\",654],[\"1f352\",655],[\"1f353\",656],[\"1fad0\",657],[\"1f95d\",658],[\"1f345\",659],[\"1fad2\",660],[\"1f965\",661],[\"1f951\",662],[\"1f346\",663],[\"1f954\",664],[\"1f955\",665],[\"1f33d\",666],[\"1f336-fe0f\",667],[\"1fad1\",668],[\"1f952\",669],[\"1f96c\",670],[\"1f966\",671],[\"1f9c4\",672],[\"1f9c5\",673],[\"1f344\",674],[\"1f95c\",675],[\"1f330\",676],[\"1f35e\",677],[\"1f950\",678],[\"1f956\",679],[\"1fad3\",680],[\"1f968\",681],[\"1f96f\",682],[\"1f95e\",683],[\"1f9c7\",684],[\"1f9c0\",685],[\"1f356\",686],[\"1f357\",687],[\"1f969\",688],[\"1f953\",689],[\"1f354\",690],[\"1f35f\",691],[\"1f355\",692],[\"1f32d\",693],[\"1f96a\",694],[\"1f32e\",695],[\"1f32f\",696],[\"1fad4\",697],[\"1f959\",698],[\"1f9c6\",699],[\"1f95a\",700],[\"1f373\",701],[\"1f958\",702],[\"1f372\",703],[\"1fad5\",704],[\"1f963\",705],[\"1f957\",706],[\"1f37f\",707],[\"1f9c8\",708],[\"1f9c2\",709],[\"1f96b\",710],[\"1f371\",711],[\"1f358\",712],[\"1f359\",713],[\"1f35a\",714],[\"1f35b\",715],[\"1f35c\",716],[\"1f35d\",717],[\"1f360\",718],[\"1f362\",719],[\"1f363\",720],[\"1f364\",721],[\"1f365\",722],[\"1f96e\",723],[\"1f361\",724],[\"1f95f\",725],[\"1f960\",726],[\"1f961\",727],[\"1f980\",728],[\"1f99e\",729],[\"1f990\",730],[\"1f991\",731],[\"1f9aa\",732],[\"1f366\",733],[\"1f367\",734],[\"1f368\",735],[\"1f369\",736],[\"1f36a\",737],[\"1f382\",738],[\"1f370\",739],[\"1f9c1\",740],[\"1f967\",741],[\"1f36b\",742],[\"1f36c\",743],[\"1f36d\",744],[\"1f36e\",745],[\"1f36f\",746],[\"1f37c\",747],[\"1f95b\",748],[\"2615\",749],[\"1fad6\",750],[\"1f375\",751],[\"1f376\",752],[\"1f37e\",753],[\"1f377\",754],[\"1f378\",755],[\"1f379\",756],[\"1f37a\",757],[\"1f37b\",758],[\"1f942\",759],[\"1f943\",760],[\"1f964\",761],[\"1f9cb\",762],[\"1f9c3\",763],[\"1f9c9\",764],[\"1f9ca\",765],[\"1f962\",766],[\"1f37d-fe0f\",767],[\"1f374\",768],[\"1f944\",769],[\"1f52a\",770],[\"1f3fa\",771],[\"1f30d\",772],[\"1f30e\",773],[\"1f30f\",774],[\"1f310\",775],[\"1f5fa-fe0f\",776],[\"1f5fe\",777],[\"1f9ed\",778],[\"1f3d4-fe0f\",779],[\"26f0-fe0f\",780],[\"1f30b\",781],[\"1f5fb\",782],[\"1f3d5-fe0f\",783],[\"1f3d6-fe0f\",784],[\"1f3dc-fe0f\",785],[\"1f3dd-fe0f\",786],[\"1f3de-fe0f\",787],[\"1f3df-fe0f\",788],[\"1f3db-fe0f\",789],[\"1f3d7-fe0f\",790],[\"1f9f1\",791],[\"1faa8\",792],[\"1fab5\",793],[\"1f6d6\",794],[\"1f3d8-fe0f\",795],[\"1f3da-fe0f\",796],[\"1f3e0\",797],[\"1f3e1\",798],[\"1f3e2\",799],[\"1f3e3\",800],[\"1f3e4\",801],[\"1f3e5\",802],[\"1f3e6\",803],[\"1f3e8\",804],[\"1f3e9\",805],[\"1f3ea\",806],[\"1f3eb\",807],[\"1f3ec\",808],[\"1f3ed\",809],[\"1f3ef\",810],[\"1f3f0\",811],[\"1f492\",812],[\"1f5fc\",813],[\"1f5fd\",814],[\"26ea\",815],[\"1f54c\",816],[\"1f6d5\",817],[\"1f54d\",818],[\"26e9-fe0f\",819],[\"1f54b\",820],[\"26f2\",821],[\"26fa\",822],[\"1f301\",823],[\"1f303\",824],[\"1f3d9-fe0f\",825],[\"1f304\",826],[\"1f305\",827],[\"1f306\",828],[\"1f307\",829],[\"1f309\",830],[\"2668-fe0f\",831],[\"1f3a0\",832],[\"1f3a1\",833],[\"1f3a2\",834],[\"1f488\",835],[\"1f3aa\",836],[\"1f682\",837],[\"1f683\",838],[\"1f684\",839],[\"1f685\",840],[\"1f686\",841],[\"1f687\",842],[\"1f688\",843],[\"1f689\",844],[\"1f68a\",845],[\"1f69d\",846],[\"1f69e\",847],[\"1f68b\",848],[\"1f68c\",849],[\"1f68d\",850],[\"1f68e\",851],[\"1f690\",852],[\"1f691\",853],[\"1f692\",854],[\"1f693\",855],[\"1f694\",856],[\"1f695\",857],[\"1f696\",858],[\"1f697\",859],[\"1f698\",860],[\"1f699\",861],[\"1f6fb\",862],[\"1f69a\",863],[\"1f69b\",864],[\"1f69c\",865],[\"1f3ce-fe0f\",866],[\"1f3cd-fe0f\",867],[\"1f6f5\",868],[\"1f9bd\",869],[\"1f9bc\",870],[\"1f6fa\",871],[\"1f6b2\",872],[\"1f6f4\",873],[\"1f6f9\",874],[\"1f6fc\",875],[\"1f68f\",876],[\"1f6e3-fe0f\",877],[\"1f6e4-fe0f\",878],[\"1f6e2-fe0f\",879],[\"26fd\",880],[\"1f6a8\",881],[\"1f6a5\",882],[\"1f6a6\",883],[\"1f6d1\",884],[\"1f6a7\",885],[\"2693\",886],[\"26f5\",887],[\"1f6f6\",888],[\"1f6a4\",889],[\"1f6f3-fe0f\",890],[\"26f4-fe0f\",891],[\"1f6e5-fe0f\",892],[\"1f6a2\",893],[\"2708-fe0f\",894],[\"1f6e9-fe0f\",895],[\"1f6eb\",896],[\"1f6ec\",897],[\"1fa82\",898],[\"1f4ba\",899],[\"1f681\",900],[\"1f69f\",901],[\"1f6a0\",902],[\"1f6a1\",903],[\"1f6f0-fe0f\",904],[\"1f680\",905],[\"1f6f8\",906],[\"1f6ce-fe0f\",907],[\"1f9f3\",908],[\"231b\",909],[\"23f3\",910],[\"231a\",911],[\"23f0\",912],[\"23f1-fe0f\",913],[\"23f2-fe0f\",914],[\"1f570-fe0f\",915],[\"1f55b\",916],[\"1f567\",917],[\"1f550\",918],[\"1f55c\",919],[\"1f551\",920],[\"1f55d\",921],[\"1f552\",922],[\"1f55e\",923],[\"1f553\",924],[\"1f55f\",925],[\"1f554\",926],[\"1f560\",927],[\"1f555\",928],[\"1f561\",929],[\"1f556\",930],[\"1f562\",931],[\"1f557\",932],[\"1f563\",933],[\"1f558\",934],[\"1f564\",935],[\"1f559\",936],[\"1f565\",937],[\"1f55a\",938],[\"1f566\",939],[\"1f311\",940],[\"1f312\",941],[\"1f313\",942],[\"1f314\",943],[\"1f315\",944],[\"1f316\",945],[\"1f317\",946],[\"1f318\",947],[\"1f319\",948],[\"1f31a\",949],[\"1f31b\",950],[\"1f31c\",951],[\"1f321-fe0f\",952],[\"2600-fe0f\",953],[\"1f31d\",954],[\"1f31e\",955],[\"1fa90\",956],[\"2b50\",957],[\"1f31f\",958],[\"1f320\",959],[\"1f30c\",960],[\"2601-fe0f\",961],[\"26c5\",962],[\"26c8-fe0f\",963],[\"1f324-fe0f\",964],[\"1f325-fe0f\",965],[\"1f326-fe0f\",966],[\"1f327-fe0f\",967],[\"1f328-fe0f\",968],[\"1f329-fe0f\",969],[\"1f32a-fe0f\",970],[\"1f32b-fe0f\",971],[\"1f32c-fe0f\",972],[\"1f300\",973],[\"1f308\",974],[\"1f302\",975],[\"2602-fe0f\",976],[\"2614\",977],[\"26f1-fe0f\",978],[\"26a1\",979],[\"2744-fe0f\",980],[\"2603-fe0f\",981],[\"26c4\",982],[\"2604-fe0f\",983],[\"1f525\",984],[\"1f4a7\",985],[\"1f30a\",986],[\"1f383\",987],[\"1f384\",988],[\"1f386\",989],[\"1f387\",990],[\"1f9e8\",991],[\"2728\",992],[\"1f388\",993],[\"1f389\",994],[\"1f38a\",995],[\"1f38b\",996],[\"1f38d\",997],[\"1f38e\",998],[\"1f38f\",999],[\"1f390\",1000],[\"1f391\",1001],[\"1f9e7\",1002],[\"1f380\",1003],[\"1f381\",1004],[\"1f397-fe0f\",1005],[\"1f39f-fe0f\",1006],[\"1f3ab\",1007],[\"1f396-fe0f\",1008],[\"1f3c6\",1009],[\"1f3c5\",1010],[\"1f947\",1011],[\"1f948\",1012],[\"1f949\",1013],[\"26bd\",1014],[\"26be\",1015],[\"1f94e\",1016],[\"1f3c0\",1017],[\"1f3d0\",1018],[\"1f3c8\",1019],[\"1f3c9\",1020],[\"1f3be\",1021],[\"1f94f\",1022],[\"1f3b3\",1023],[\"1f3cf\",1024],[\"1f3d1\",1025],[\"1f3d2\",1026],[\"1f94d\",1027],[\"1f3d3\",1028],[\"1f3f8\",1029],[\"1f94a\",1030],[\"1f94b\",1031],[\"1f945\",1032],[\"26f3\",1033],[\"26f8-fe0f\",1034],[\"1f3a3\",1035],[\"1f93f\",1036],[\"1f3bd\",1037],[\"1f3bf\",1038],[\"1f6f7\",1039],[\"1f94c\",1040],[\"1f3af\",1041],[\"1fa80\",1042],[\"1fa81\",1043],[\"1f3b1\",1044],[\"1f52e\",1045],[\"1fa84\",1046],[\"1f9ff\",1047],[\"1f3ae\",1048],[\"1f579-fe0f\",1049],[\"1f3b0\",1050],[\"1f3b2\",1051],[\"1f9e9\",1052],[\"1f9f8\",1053],[\"1fa85\",1054],[\"1fa86\",1055],[\"2660-fe0f\",1056],[\"2665-fe0f\",1057],[\"2666-fe0f\",1058],[\"2663-fe0f\",1059],[\"265f-fe0f\",1060],[\"1f0cf\",1061],[\"1f004\",1062],[\"1f3b4\",1063],[\"1f3ad\",1064],[\"1f5bc-fe0f\",1065],[\"1f3a8\",1066],[\"1f9f5\",1067],[\"1faa1\",1068],[\"1f9f6\",1069],[\"1faa2\",1070],[\"1f453\",1071],[\"1f576-fe0f\",1072],[\"1f97d\",1073],[\"1f97c\",1074],[\"1f9ba\",1075],[\"1f454\",1076],[\"1f455\",1077],[\"1f456\",1078],[\"1f9e3\",1079],[\"1f9e4\",1080],[\"1f9e5\",1081],[\"1f9e6\",1082],[\"1f457\",1083],[\"1f458\",1084],[\"1f97b\",1085],[\"1fa71\",1086],[\"1fa72\",1087],[\"1fa73\",1088],[\"1f459\",1089],[\"1f45a\",1090],[\"1f45b\",1091],[\"1f45c\",1092],[\"1f45d\",1093],[\"1f6cd-fe0f\",1094],[\"1f392\",1095],[\"1fa74\",1096],[\"1f45e\",1097],[\"1f45f\",1098],[\"1f97e\",1099],[\"1f97f\",1100],[\"1f460\",1101],[\"1f461\",1102],[\"1fa70\",1103],[\"1f462\",1104],[\"1f451\",1105],[\"1f452\",1106],[\"1f3a9\",1107],[\"1f393\",1108],[\"1f9e2\",1109],[\"1fa96\",1110],[\"26d1-fe0f\",1111],[\"1f4ff\",1112],[\"1f484\",1113],[\"1f48d\",1114],[\"1f48e\",1115],[\"1f507\",1116],[\"1f508\",1117],[\"1f509\",1118],[\"1f50a\",1119],[\"1f4e2\",1120],[\"1f4e3\",1121],[\"1f4ef\",1122],[\"1f514\",1123],[\"1f515\",1124],[\"1f3bc\",1125],[\"1f3b5\",1126],[\"1f3b6\",1127],[\"1f399-fe0f\",1128],[\"1f39a-fe0f\",1129],[\"1f39b-fe0f\",1130],[\"1f3a4\",1131],[\"1f3a7\",1132],[\"1f4fb\",1133],[\"1f3b7\",1134],[\"1fa97\",1135],[\"1f3b8\",1136],[\"1f3b9\",1137],[\"1f3ba\",1138],[\"1f3bb\",1139],[\"1fa95\",1140],[\"1f941\",1141],[\"1fa98\",1142],[\"1f4f1\",1143],[\"1f4f2\",1144],[\"260e-fe0f\",1145],[\"1f4de\",1146],[\"1f4df\",1147],[\"1f4e0\",1148],[\"1f50b\",1149],[\"1f50c\",1150],[\"1f4bb\",1151],[\"1f5a5-fe0f\",1152],[\"1f5a8-fe0f\",1153],[\"2328-fe0f\",1154],[\"1f5b1-fe0f\",1155],[\"1f5b2-fe0f\",1156],[\"1f4bd\",1157],[\"1f4be\",1158],[\"1f4bf\",1159],[\"1f4c0\",1160],[\"1f9ee\",1161],[\"1f3a5\",1162],[\"1f39e-fe0f\",1163],[\"1f4fd-fe0f\",1164],[\"1f3ac\",1165],[\"1f4fa\",1166],[\"1f4f7\",1167],[\"1f4f8\",1168],[\"1f4f9\",1169],[\"1f4fc\",1170],[\"1f50d\",1171],[\"1f50e\",1172],[\"1f56f-fe0f\",1173],[\"1f4a1\",1174],[\"1f526\",1175],[\"1f3ee\",1176],[\"1fa94\",1177],[\"1f4d4\",1178],[\"1f4d5\",1179],[\"1f4d6\",1180],[\"1f4d7\",1181],[\"1f4d8\",1182],[\"1f4d9\",1183],[\"1f4da\",1184],[\"1f4d3\",1185],[\"1f4d2\",1186],[\"1f4c3\",1187],[\"1f4dc\",1188],[\"1f4c4\",1189],[\"1f4f0\",1190],[\"1f5de-fe0f\",1191],[\"1f4d1\",1192],[\"1f516\",1193],[\"1f3f7-fe0f\",1194],[\"1f4b0\",1195],[\"1fa99\",1196],[\"1f4b4\",1197],[\"1f4b5\",1198],[\"1f4b6\",1199],[\"1f4b7\",1200],[\"1f4b8\",1201],[\"1f4b3\",1202],[\"1f9fe\",1203],[\"1f4b9\",1204],[\"2709-fe0f\",1205],[\"1f4e7\",1206],[\"1f4e8\",1207],[\"1f4e9\",1208],[\"1f4e4\",1209],[\"1f4e5\",1210],[\"1f4e6\",1211],[\"1f4eb\",1212],[\"1f4ea\",1213],[\"1f4ec\",1214],[\"1f4ed\",1215],[\"1f4ee\",1216],[\"1f5f3-fe0f\",1217],[\"270f-fe0f\",1218],[\"2712-fe0f\",1219],[\"1f58b-fe0f\",1220],[\"1f58a-fe0f\",1221],[\"1f58c-fe0f\",1222],[\"1f58d-fe0f\",1223],[\"1f4dd\",1224],[\"1f4bc\",1225],[\"1f4c1\",1226],[\"1f4c2\",1227],[\"1f5c2-fe0f\",1228],[\"1f4c5\",1229],[\"1f4c6\",1230],[\"1f5d2-fe0f\",1231],[\"1f5d3-fe0f\",1232],[\"1f4c7\",1233],[\"1f4c8\",1234],[\"1f4c9\",1235],[\"1f4ca\",1236],[\"1f4cb\",1237],[\"1f4cc\",1238],[\"1f4cd\",1239],[\"1f4ce\",1240],[\"1f587-fe0f\",1241],[\"1f4cf\",1242],[\"1f4d0\",1243],[\"2702-fe0f\",1244],[\"1f5c3-fe0f\",1245],[\"1f5c4-fe0f\",1246],[\"1f5d1-fe0f\",1247],[\"1f512\",1248],[\"1f513\",1249],[\"1f50f\",1250],[\"1f510\",1251],[\"1f511\",1252],[\"1f5dd-fe0f\",1253],[\"1f528\",1254],[\"1fa93\",1255],[\"26cf-fe0f\",1256],[\"2692-fe0f\",1257],[\"1f6e0-fe0f\",1258],[\"1f5e1-fe0f\",1259],[\"2694-fe0f\",1260],[\"1f52b\",1261],[\"1fa83\",1262],[\"1f3f9\",1263],[\"1f6e1-fe0f\",1264],[\"1fa9a\",1265],[\"1f527\",1266],[\"1fa9b\",1267],[\"1f529\",1268],[\"2699-fe0f\",1269],[\"1f5dc-fe0f\",1270],[\"2696-fe0f\",1271],[\"1f9af\",1272],[\"1f517\",1273],[\"26d3-fe0f\",1274],[\"1fa9d\",1275],[\"1f9f0\",1276],[\"1f9f2\",1277],[\"1fa9c\",1278],[\"2697-fe0f\",1279],[\"1f9ea\",1280],[\"1f9eb\",1281],[\"1f9ec\",1282],[\"1f52c\",1283],[\"1f52d\",1284],[\"1f4e1\",1285],[\"1f489\",1286],[\"1fa78\",1287],[\"1f48a\",1288],[\"1fa79\",1289],[\"1fa7a\",1290],[\"1f6aa\",1291],[\"1f6d7\",1292],[\"1fa9e\",1293],[\"1fa9f\",1294],[\"1f6cf-fe0f\",1295],[\"1f6cb-fe0f\",1296],[\"1fa91\",1297],[\"1f6bd\",1298],[\"1faa0\",1299],[\"1f6bf\",1300],[\"1f6c1\",1301],[\"1faa4\",1302],[\"1fa92\",1303],[\"1f9f4\",1304],[\"1f9f7\",1305],[\"1f9f9\",1306],[\"1f9fa\",1307],[\"1f9fb\",1308],[\"1faa3\",1309],[\"1f9fc\",1310],[\"1faa5\",1311],[\"1f9fd\",1312],[\"1f9ef\",1313],[\"1f6d2\",1314],[\"1f6ac\",1315],[\"26b0-fe0f\",1316],[\"1faa6\",1317],[\"26b1-fe0f\",1318],[\"1f5ff\",1319],[\"1faa7\",1320],[\"1f3e7\",1321],[\"1f6ae\",1322],[\"1f6b0\",1323],[\"267f\",1324],[\"1f6b9\",1325],[\"1f6ba\",1326],[\"1f6bb\",1327],[\"1f6bc\",1328],[\"1f6be\",1329],[\"1f6c2\",1330],[\"1f6c3\",1331],[\"1f6c4\",1332],[\"1f6c5\",1333],[\"26a0-fe0f\",1334],[\"1f6b8\",1335],[\"26d4\",1336],[\"1f6ab\",1337],[\"1f6b3\",1338],[\"1f6ad\",1339],[\"1f6af\",1340],[\"1f6b1\",1341],[\"1f6b7\",1342],[\"1f4f5\",1343],[\"1f51e\",1344],[\"2622-fe0f\",1345],[\"2623-fe0f\",1346],[\"2b06-fe0f\",1347],[\"2197-fe0f\",1348],[\"27a1-fe0f\",1349],[\"2198-fe0f\",1350],[\"2b07-fe0f\",1351],[\"2199-fe0f\",1352],[\"2b05-fe0f\",1353],[\"2196-fe0f\",1354],[\"2195-fe0f\",1355],[\"2194-fe0f\",1356],[\"21a9-fe0f\",1357],[\"21aa-fe0f\",1358],[\"2934-fe0f\",1359],[\"2935-fe0f\",1360],[\"1f503\",1361],[\"1f504\",1362],[\"1f519\",1363],[\"1f51a\",1364],[\"1f51b\",1365],[\"1f51c\",1366],[\"1f51d\",1367],[\"1f6d0\",1368],[\"269b-fe0f\",1369],[\"1f549-fe0f\",1370],[\"2721-fe0f\",1371],[\"2638-fe0f\",1372],[\"262f-fe0f\",1373],[\"271d-fe0f\",1374],[\"2626-fe0f\",1375],[\"262a-fe0f\",1376],[\"262e-fe0f\",1377],[\"1f54e\",1378],[\"1f52f\",1379],[\"2648\",1380],[\"2649\",1381],[\"264a\",1382],[\"264b\",1383],[\"264c\",1384],[\"264d\",1385],[\"264e\",1386],[\"264f\",1387],[\"2650\",1388],[\"2651\",1389],[\"2652\",1390],[\"2653\",1391],[\"26ce\",1392],[\"1f500\",1393],[\"1f501\",1394],[\"1f502\",1395],[\"25b6-fe0f\",1396],[\"23e9\",1397],[\"23ed-fe0f\",1398],[\"23ef-fe0f\",1399],[\"25c0-fe0f\",1400],[\"23ea\",1401],[\"23ee-fe0f\",1402],[\"1f53c\",1403],[\"23eb\",1404],[\"1f53d\",1405],[\"23ec\",1406],[\"23f8-fe0f\",1407],[\"23f9-fe0f\",1408],[\"23fa-fe0f\",1409],[\"23cf-fe0f\",1410],[\"1f3a6\",1411],[\"1f505\",1412],[\"1f506\",1413],[\"1f4f6\",1414],[\"1f4f3\",1415],[\"1f4f4\",1416],[\"2640-fe0f\",1417],[\"2642-fe0f\",1418],[\"26a7-fe0f\",1419],[\"2716-fe0f\",1420],[\"2795\",1421],[\"2796\",1422],[\"2797\",1423],[\"267e-fe0f\",1424],[\"203c-fe0f\",1425],[\"2049-fe0f\",1426],[\"2753\",1427],[\"2754\",1428],[\"2755\",1429],[\"2757\",1430],[\"3030-fe0f\",1431],[\"1f4b1\",1432],[\"1f4b2\",1433],[\"2695-fe0f\",1434],[\"267b-fe0f\",1435],[\"269c-fe0f\",1436],[\"1f531\",1437],[\"1f4db\",1438],[\"1f530\",1439],[\"2b55\",1440],[\"2705\",1441],[\"2611-fe0f\",1442],[\"2714-fe0f\",1443],[\"274c\",1444],[\"274e\",1445],[\"27b0\",1446],[\"27bf\",1447],[\"303d-fe0f\",1448],[\"2733-fe0f\",1449],[\"2734-fe0f\",1450],[\"2747-fe0f\",1451],[\"00a9-fe0f\",1452],[\"00ae-fe0f\",1453],[\"2122-fe0f\",1454],[\"0023-fe0f-20e3\",1455],[\"002a-fe0f-20e3\",1456],[\"0030-fe0f-20e3\",1457],[\"0031-fe0f-20e3\",1458],[\"0032-fe0f-20e3\",1459],[\"0033-fe0f-20e3\",1460],[\"0034-fe0f-20e3\",1461],[\"0035-fe0f-20e3\",1462],[\"0036-fe0f-20e3\",1463],[\"0037-fe0f-20e3\",1464],[\"0038-fe0f-20e3\",1465],[\"0039-fe0f-20e3\",1466],[\"1f51f\",1467],[\"1f520\",1468],[\"1f521\",1469],[\"1f522\",1470],[\"1f523\",1471],[\"1f524\",1472],[\"1f170-fe0f\",1473],[\"1f18e\",1474],[\"1f171-fe0f\",1475],[\"1f191\",1476],[\"1f192\",1477],[\"1f193\",1478],[\"2139-fe0f\",1479],[\"1f194\",1480],[\"24c2-fe0f\",1481],[\"1f195\",1482],[\"1f196\",1483],[\"1f17e-fe0f\",1484],[\"1f197\",1485],[\"1f17f-fe0f\",1486],[\"1f198\",1487],[\"1f199\",1488],[\"1f19a\",1489],[\"1f201\",1490],[\"1f202-fe0f\",1491],[\"1f237-fe0f\",1492],[\"1f236\",1493],[\"1f22f\",1494],[\"1f250\",1495],[\"1f239\",1496],[\"1f21a\",1497],[\"1f232\",1498],[\"1f251\",1499],[\"1f238\",1500],[\"1f234\",1501],[\"1f233\",1502],[\"3297-fe0f\",1503],[\"3299-fe0f\",1504],[\"1f23a\",1505],[\"1f235\",1506],[\"1f534\",1507],[\"1f7e0\",1508],[\"1f7e1\",1509],[\"1f7e2\",1510],[\"1f535\",1511],[\"1f7e3\",1512],[\"1f7e4\",1513],[\"26ab\",1514],[\"26aa\",1515],[\"1f7e5\",1516],[\"1f7e7\",1517],[\"1f7e8\",1518],[\"1f7e9\",1519],[\"1f7e6\",1520],[\"1f7ea\",1521],[\"1f7eb\",1522],[\"2b1b\",1523],[\"2b1c\",1524],[\"25fc-fe0f\",1525],[\"25fb-fe0f\",1526],[\"25fe\",1527],[\"25fd\",1528],[\"25aa-fe0f\",1529],[\"25ab-fe0f\",1530],[\"1f536\",1531],[\"1f537\",1532],[\"1f538\",1533],[\"1f539\",1534],[\"1f53a\",1535],[\"1f53b\",1536],[\"1f4a0\",1537],[\"1f518\",1538],[\"1f533\",1539],[\"1f532\",1540],[\"1f3c1\",1541],[\"1f6a9\",1542],[\"1f38c\",1543],[\"1f3f4\",1544],[\"1f3f3-fe0f\",1545],[\"1f3f3-fe0f-200d-1f308\",1546],[\"1f3f3-fe0f-200d-26a7-fe0f\",1547],[\"1f3f4-200d-2620-fe0f\",1548],[\"1f1e6-1f1e8\",1549],[\"1f1e6-1f1e9\",1550],[\"1f1e6-1f1ea\",1551],[\"1f1e6-1f1eb\",1552],[\"1f1e6-1f1ec\",1553],[\"1f1e6-1f1ee\",1554],[\"1f1e6-1f1f1\",1555],[\"1f1e6-1f1f2\",1556],[\"1f1e6-1f1f4\",1557],[\"1f1e6-1f1f6\",1558],[\"1f1e6-1f1f7\",1559],[\"1f1e6-1f1f8\",1560],[\"1f1e6-1f1f9\",1561],[\"1f1e6-1f1fa\",1562],[\"1f1e6-1f1fc\",1563],[\"1f1e6-1f1fd\",1564],[\"1f1e6-1f1ff\",1565],[\"1f1e7-1f1e6\",1566],[\"1f1e7-1f1e7\",1567],[\"1f1e7-1f1e9\",1568],[\"1f1e7-1f1ea\",1569],[\"1f1e7-1f1eb\",1570],[\"1f1e7-1f1ec\",1571],[\"1f1e7-1f1ed\",1572],[\"1f1e7-1f1ee\",1573],[\"1f1e7-1f1ef\",1574],[\"1f1e7-1f1f1\",1575],[\"1f1e7-1f1f2\",1576],[\"1f1e7-1f1f3\",1577],[\"1f1e7-1f1f4\",1578],[\"1f1e7-1f1f6\",1579],[\"1f1e7-1f1f7\",1580],[\"1f1e7-1f1f8\",1581],[\"1f1e7-1f1f9\",1582],[\"1f1e7-1f1fb\",1583],[\"1f1e7-1f1fc\",1584],[\"1f1e7-1f1fe\",1585],[\"1f1e7-1f1ff\",1586],[\"1f1e8-1f1e6\",1587],[\"1f1e8-1f1e8\",1588],[\"1f1e8-1f1e9\",1589],[\"1f1e8-1f1eb\",1590],[\"1f1e8-1f1ec\",1591],[\"1f1e8-1f1ed\",1592],[\"1f1e8-1f1ee\",1593],[\"1f1e8-1f1f0\",1594],[\"1f1e8-1f1f1\",1595],[\"1f1e8-1f1f2\",1596],[\"1f1e8-1f1f3\",1597],[\"1f1e8-1f1f4\",1598],[\"1f1e8-1f1f5\",1599],[\"1f1e8-1f1f7\",1600],[\"1f1e8-1f1fa\",1601],[\"1f1e8-1f1fb\",1602],[\"1f1e8-1f1fc\",1603],[\"1f1e8-1f1fd\",1604],[\"1f1e8-1f1fe\",1605],[\"1f1e8-1f1ff\",1606],[\"1f1e9-1f1ea\",1607],[\"1f1e9-1f1ec\",1608],[\"1f1e9-1f1ef\",1609],[\"1f1e9-1f1f0\",1610],[\"1f1e9-1f1f2\",1611],[\"1f1e9-1f1f4\",1612],[\"1f1e9-1f1ff\",1613],[\"1f1ea-1f1e6\",1614],[\"1f1ea-1f1e8\",1615],[\"1f1ea-1f1ea\",1616],[\"1f1ea-1f1ec\",1617],[\"1f1ea-1f1ed\",1618],[\"1f1ea-1f1f7\",1619],[\"1f1ea-1f1f8\",1620],[\"1f1ea-1f1f9\",1621],[\"1f1ea-1f1fa\",1622],[\"1f1eb-1f1ee\",1623],[\"1f1eb-1f1ef\",1624],[\"1f1eb-1f1f0\",1625],[\"1f1eb-1f1f2\",1626],[\"1f1eb-1f1f4\",1627],[\"1f1eb-1f1f7\",1628],[\"1f1ec-1f1e6\",1629],[\"1f1ec-1f1e7\",1630],[\"1f1ec-1f1e9\",1631],[\"1f1ec-1f1ea\",1632],[\"1f1ec-1f1eb\",1633],[\"1f1ec-1f1ec\",1634],[\"1f1ec-1f1ed\",1635],[\"1f1ec-1f1ee\",1636],[\"1f1ec-1f1f1\",1637],[\"1f1ec-1f1f2\",1638],[\"1f1ec-1f1f3\",1639],[\"1f1ec-1f1f5\",1640],[\"1f1ec-1f1f6\",1641],[\"1f1ec-1f1f7\",1642],[\"1f1ec-1f1f8\",1643],[\"1f1ec-1f1f9\",1644],[\"1f1ec-1f1fa\",1645],[\"1f1ec-1f1fc\",1646],[\"1f1ec-1f1fe\",1647],[\"1f1ed-1f1f0\",1648],[\"1f1ed-1f1f2\",1649],[\"1f1ed-1f1f3\",1650],[\"1f1ed-1f1f7\",1651],[\"1f1ed-1f1f9\",1652],[\"1f1ed-1f1fa\",1653],[\"1f1ee-1f1e8\",1654],[\"1f1ee-1f1e9\",1655],[\"1f1ee-1f1ea\",1656],[\"1f1ee-1f1f1\",1657],[\"1f1ee-1f1f2\",1658],[\"1f1ee-1f1f3\",1659],[\"1f1ee-1f1f4\",1660],[\"1f1ee-1f1f6\",1661],[\"1f1ee-1f1f7\",1662],[\"1f1ee-1f1f8\",1663],[\"1f1ee-1f1f9\",1664],[\"1f1ef-1f1ea\",1665],[\"1f1ef-1f1f2\",1666],[\"1f1ef-1f1f4\",1667],[\"1f1ef-1f1f5\",1668],[\"1f1f0-1f1ea\",1669],[\"1f1f0-1f1ec\",1670],[\"1f1f0-1f1ed\",1671],[\"1f1f0-1f1ee\",1672],[\"1f1f0-1f1f2\",1673],[\"1f1f0-1f1f3\",1674],[\"1f1f0-1f1f5\",1675],[\"1f1f0-1f1f7\",1676],[\"1f1f0-1f1fc\",1677],[\"1f1f0-1f1fe\",1678],[\"1f1f0-1f1ff\",1679],[\"1f1f1-1f1e6\",1680],[\"1f1f1-1f1e7\",1681],[\"1f1f1-1f1e8\",1682],[\"1f1f1-1f1ee\",1683],[\"1f1f1-1f1f0\",1684],[\"1f1f1-1f1f7\",1685],[\"1f1f1-1f1f8\",1686],[\"1f1f1-1f1f9\",1687],[\"1f1f1-1f1fa\",1688],[\"1f1f1-1f1fb\",1689],[\"1f1f1-1f1fe\",1690],[\"1f1f2-1f1e6\",1691],[\"1f1f2-1f1e8\",1692],[\"1f1f2-1f1e9\",1693],[\"1f1f2-1f1ea\",1694],[\"1f1f2-1f1eb\",1695],[\"1f1f2-1f1ec\",1696],[\"1f1f2-1f1ed\",1697],[\"1f1f2-1f1f0\",1698],[\"1f1f2-1f1f1\",1699],[\"1f1f2-1f1f2\",1700],[\"1f1f2-1f1f3\",1701],[\"1f1f2-1f1f4\",1702],[\"1f1f2-1f1f5\",1703],[\"1f1f2-1f1f6\",1704],[\"1f1f2-1f1f7\",1705],[\"1f1f2-1f1f8\",1706],[\"1f1f2-1f1f9\",1707],[\"1f1f2-1f1fa\",1708],[\"1f1f2-1f1fb\",1709],[\"1f1f2-1f1fc\",1710],[\"1f1f2-1f1fd\",1711],[\"1f1f2-1f1fe\",1712],[\"1f1f2-1f1ff\",1713],[\"1f1f3-1f1e6\",1714],[\"1f1f3-1f1e8\",1715],[\"1f1f3-1f1ea\",1716],[\"1f1f3-1f1eb\",1717],[\"1f1f3-1f1ec\",1718],[\"1f1f3-1f1ee\",1719],[\"1f1f3-1f1f1\",1720],[\"1f1f3-1f1f4\",1721],[\"1f1f3-1f1f5\",1722],[\"1f1f3-1f1f7\",1723],[\"1f1f3-1f1fa\",1724],[\"1f1f3-1f1ff\",1725],[\"1f1f4-1f1f2\",1726],[\"1f1f5-1f1e6\",1727],[\"1f1f5-1f1ea\",1728],[\"1f1f5-1f1eb\",1729],[\"1f1f5-1f1ec\",1730],[\"1f1f5-1f1ed\",1731],[\"1f1f5-1f1f0\",1732],[\"1f1f5-1f1f1\",1733],[\"1f1f5-1f1f2\",1734],[\"1f1f5-1f1f3\",1735],[\"1f1f5-1f1f7\",1736],[\"1f1f5-1f1f8\",1737],[\"1f1f5-1f1f9\",1738],[\"1f1f5-1f1fc\",1739],[\"1f1f5-1f1fe\",1740],[\"1f1f6-1f1e6\",1741],[\"1f1f7-1f1ea\",1742],[\"1f1f7-1f1f4\",1743],[\"1f1f7-1f1f8\",1744],[\"1f1f7-1f1fa\",1745],[\"1f1f7-1f1fc\",1746],[\"1f1f8-1f1e6\",1747],[\"1f1f8-1f1e7\",1748],[\"1f1f8-1f1e8\",1749],[\"1f1f8-1f1e9\",1750],[\"1f1f8-1f1ea\",1751],[\"1f1f8-1f1ec\",1752],[\"1f1f8-1f1ed\",1753],[\"1f1f8-1f1ee\",1754],[\"1f1f8-1f1ef\",1755],[\"1f1f8-1f1f0\",1756],[\"1f1f8-1f1f1\",1757],[\"1f1f8-1f1f2\",1758],[\"1f1f8-1f1f3\",1759],[\"1f1f8-1f1f4\",1760],[\"1f1f8-1f1f7\",1761],[\"1f1f8-1f1f8\",1762],[\"1f1f8-1f1f9\",1763],[\"1f1f8-1f1fb\",1764],[\"1f1f8-1f1fd\",1765],[\"1f1f8-1f1fe\",1766],[\"1f1f8-1f1ff\",1767],[\"1f1f9-1f1e6\",1768],[\"1f1f9-1f1e8\",1769],[\"1f1f9-1f1e9\",1770],[\"1f1f9-1f1eb\",1771],[\"1f1f9-1f1ec\",1772],[\"1f1f9-1f1ed\",1773],[\"1f1f9-1f1ef\",1774],[\"1f1f9-1f1f0\",1775],[\"1f1f9-1f1f1\",1776],[\"1f1f9-1f1f2\",1777],[\"1f1f9-1f1f3\",1778],[\"1f1f9-1f1f4\",1779],[\"1f1f9-1f1f7\",1780],[\"1f1f9-1f1f9\",1781],[\"1f1f9-1f1fb\",1782],[\"1f1f9-1f1fc\",1783],[\"1f1f9-1f1ff\",1784],[\"1f1fa-1f1e6\",1785],[\"1f1fa-1f1ec\",1786],[\"1f1fa-1f1f2\",1787],[\"1f1fa-1f1f3\",1788],[\"1f1fa-1f1f8\",1789],[\"1f1fa-1f1fe\",1790],[\"1f1fa-1f1ff\",1791],[\"1f1fb-1f1e6\",1792],[\"1f1fb-1f1e8\",1793],[\"1f1fb-1f1ea\",1794],[\"1f1fb-1f1ec\",1795],[\"1f1fb-1f1ee\",1796],[\"1f1fb-1f1f3\",1797],[\"1f1fb-1f1fa\",1798],[\"1f1fc-1f1eb\",1799],[\"1f1fc-1f1f8\",1800],[\"1f1fd-1f1f0\",1801],[\"1f1fe-1f1ea\",1802],[\"1f1fe-1f1f9\",1803],[\"1f1ff-1f1e6\",1804],[\"1f1ff-1f1f2\",1805],[\"1f1ff-1f1fc\",1806],[\"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f\",1807],[\"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f\",1808],[\"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f\",1809],[\"1f385-1f3fb\",1810],[\"1f385-1f3fc\",1811],[\"1f385-1f3fd\",1812],[\"1f385-1f3fe\",1813],[\"1f385-1f3ff\",1814],[\"1f3c2-1f3fb\",1815],[\"1f3c2-1f3fc\",1816],[\"1f3c2-1f3fd\",1817],[\"1f3c2-1f3fe\",1818],[\"1f3c2-1f3ff\",1819],[\"1f3c3-1f3fb-200d-2640-fe0f\",1820],[\"1f3c3-1f3fc-200d-2640-fe0f\",1821],[\"1f3c3-1f3fd-200d-2640-fe0f\",1822],[\"1f3c3-1f3fe-200d-2640-fe0f\",1823],[\"1f3c3-1f3ff-200d-2640-fe0f\",1824],[\"1f3c3-1f3fb-200d-2642-fe0f\",1825],[\"1f3c3-1f3fc-200d-2642-fe0f\",1826],[\"1f3c3-1f3fd-200d-2642-fe0f\",1827],[\"1f3c3-1f3fe-200d-2642-fe0f\",1828],[\"1f3c3-1f3ff-200d-2642-fe0f\",1829],[\"1f3c3-1f3fb\",1830],[\"1f3c3-1f3fc\",1831],[\"1f3c3-1f3fd\",1832],[\"1f3c3-1f3fe\",1833],[\"1f3c3-1f3ff\",1834],[\"1f3c4-1f3fb-200d-2640-fe0f\",1835],[\"1f3c4-1f3fc-200d-2640-fe0f\",1836],[\"1f3c4-1f3fd-200d-2640-fe0f\",1837],[\"1f3c4-1f3fe-200d-2640-fe0f\",1838],[\"1f3c4-1f3ff-200d-2640-fe0f\",1839],[\"1f3c4-1f3fb-200d-2642-fe0f\",1840],[\"1f3c4-1f3fc-200d-2642-fe0f\",1841],[\"1f3c4-1f3fd-200d-2642-fe0f\",1842],[\"1f3c4-1f3fe-200d-2642-fe0f\",1843],[\"1f3c4-1f3ff-200d-2642-fe0f\",1844],[\"1f3c4-1f3fb\",1845],[\"1f3c4-1f3fc\",1846],[\"1f3c4-1f3fd\",1847],[\"1f3c4-1f3fe\",1848],[\"1f3c4-1f3ff\",1849],[\"1f3c7-1f3fb\",1850],[\"1f3c7-1f3fc\",1851],[\"1f3c7-1f3fd\",1852],[\"1f3c7-1f3fe\",1853],[\"1f3c7-1f3ff\",1854],[\"1f3ca-1f3fb-200d-2640-fe0f\",1855],[\"1f3ca-1f3fc-200d-2640-fe0f\",1856],[\"1f3ca-1f3fd-200d-2640-fe0f\",1857],[\"1f3ca-1f3fe-200d-2640-fe0f\",1858],[\"1f3ca-1f3ff-200d-2640-fe0f\",1859],[\"1f3ca-1f3fb-200d-2642-fe0f\",1860],[\"1f3ca-1f3fc-200d-2642-fe0f\",1861],[\"1f3ca-1f3fd-200d-2642-fe0f\",1862],[\"1f3ca-1f3fe-200d-2642-fe0f\",1863],[\"1f3ca-1f3ff-200d-2642-fe0f\",1864],[\"1f3ca-1f3fb\",1865],[\"1f3ca-1f3fc\",1866],[\"1f3ca-1f3fd\",1867],[\"1f3ca-1f3fe\",1868],[\"1f3ca-1f3ff\",1869],[\"1f3cb-1f3fb-200d-2640-fe0f\",1870],[\"1f3cb-1f3fc-200d-2640-fe0f\",1871],[\"1f3cb-1f3fd-200d-2640-fe0f\",1872],[\"1f3cb-1f3fe-200d-2640-fe0f\",1873],[\"1f3cb-1f3ff-200d-2640-fe0f\",1874],[\"1f3cb-1f3fb-200d-2642-fe0f\",1875],[\"1f3cb-1f3fc-200d-2642-fe0f\",1876],[\"1f3cb-1f3fd-200d-2642-fe0f\",1877],[\"1f3cb-1f3fe-200d-2642-fe0f\",1878],[\"1f3cb-1f3ff-200d-2642-fe0f\",1879],[\"1f3cb-1f3fb\",1880],[\"1f3cb-1f3fc\",1881],[\"1f3cb-1f3fd\",1882],[\"1f3cb-1f3fe\",1883],[\"1f3cb-1f3ff\",1884],[\"1f3cc-1f3fb-200d-2640-fe0f\",1885],[\"1f3cc-1f3fc-200d-2640-fe0f\",1886],[\"1f3cc-1f3fd-200d-2640-fe0f\",1887],[\"1f3cc-1f3fe-200d-2640-fe0f\",1888],[\"1f3cc-1f3ff-200d-2640-fe0f\",1889],[\"1f3cc-1f3fb-200d-2642-fe0f\",1890],[\"1f3cc-1f3fc-200d-2642-fe0f\",1891],[\"1f3cc-1f3fd-200d-2642-fe0f\",1892],[\"1f3cc-1f3fe-200d-2642-fe0f\",1893],[\"1f3cc-1f3ff-200d-2642-fe0f\",1894],[\"1f3cc-1f3fb\",1895],[\"1f3cc-1f3fc\",1896],[\"1f3cc-1f3fd\",1897],[\"1f3cc-1f3fe\",1898],[\"1f3cc-1f3ff\",1899],[\"1f442-1f3fb\",1900],[\"1f442-1f3fc\",1901],[\"1f442-1f3fd\",1902],[\"1f442-1f3fe\",1903],[\"1f442-1f3ff\",1904],[\"1f443-1f3fb\",1905],[\"1f443-1f3fc\",1906],[\"1f443-1f3fd\",1907],[\"1f443-1f3fe\",1908],[\"1f443-1f3ff\",1909],[\"1f446-1f3fb\",1910],[\"1f446-1f3fc\",1911],[\"1f446-1f3fd\",1912],[\"1f446-1f3fe\",1913],[\"1f446-1f3ff\",1914],[\"1f447-1f3fb\",1915],[\"1f447-1f3fc\",1916],[\"1f447-1f3fd\",1917],[\"1f447-1f3fe\",1918],[\"1f447-1f3ff\",1919],[\"1f448-1f3fb\",1920],[\"1f448-1f3fc\",1921],[\"1f448-1f3fd\",1922],[\"1f448-1f3fe\",1923],[\"1f448-1f3ff\",1924],[\"1f449-1f3fb\",1925],[\"1f449-1f3fc\",1926],[\"1f449-1f3fd\",1927],[\"1f449-1f3fe\",1928],[\"1f449-1f3ff\",1929],[\"1f44a-1f3fb\",1930],[\"1f44a-1f3fc\",1931],[\"1f44a-1f3fd\",1932],[\"1f44a-1f3fe\",1933],[\"1f44a-1f3ff\",1934],[\"1f44b-1f3fb\",1935],[\"1f44b-1f3fc\",1936],[\"1f44b-1f3fd\",1937],[\"1f44b-1f3fe\",1938],[\"1f44b-1f3ff\",1939],[\"1f44c-1f3fb\",1940],[\"1f44c-1f3fc\",1941],[\"1f44c-1f3fd\",1942],[\"1f44c-1f3fe\",1943],[\"1f44c-1f3ff\",1944],[\"1f44d-1f3fb\",1945],[\"1f44d-1f3fc\",1946],[\"1f44d-1f3fd\",1947],[\"1f44d-1f3fe\",1948],[\"1f44d-1f3ff\",1949],[\"1f44e-1f3fb\",1950],[\"1f44e-1f3fc\",1951],[\"1f44e-1f3fd\",1952],[\"1f44e-1f3fe\",1953],[\"1f44e-1f3ff\",1954],[\"1f44f-1f3fb\",1955],[\"1f44f-1f3fc\",1956],[\"1f44f-1f3fd\",1957],[\"1f44f-1f3fe\",1958],[\"1f44f-1f3ff\",1959],[\"1f450-1f3fb\",1960],[\"1f450-1f3fc\",1961],[\"1f450-1f3fd\",1962],[\"1f450-1f3fe\",1963],[\"1f450-1f3ff\",1964],[\"1f466-1f3fb\",1965],[\"1f466-1f3fc\",1966],[\"1f466-1f3fd\",1967],[\"1f466-1f3fe\",1968],[\"1f466-1f3ff\",1969],[\"1f467-1f3fb\",1970],[\"1f467-1f3fc\",1971],[\"1f467-1f3fd\",1972],[\"1f467-1f3fe\",1973],[\"1f467-1f3ff\",1974],[\"1f468-1f3fb-200d-1f33e\",1975],[\"1f468-1f3fc-200d-1f33e\",1976],[\"1f468-1f3fd-200d-1f33e\",1977],[\"1f468-1f3fe-200d-1f33e\",1978],[\"1f468-1f3ff-200d-1f33e\",1979],[\"1f468-1f3fb-200d-1f373\",1980],[\"1f468-1f3fc-200d-1f373\",1981],[\"1f468-1f3fd-200d-1f373\",1982],[\"1f468-1f3fe-200d-1f373\",1983],[\"1f468-1f3ff-200d-1f373\",1984],[\"1f468-1f3fb-200d-1f37c\",1985],[\"1f468-1f3fc-200d-1f37c\",1986],[\"1f468-1f3fd-200d-1f37c\",1987],[\"1f468-1f3fe-200d-1f37c\",1988],[\"1f468-1f3ff-200d-1f37c\",1989],[\"1f468-1f3fb-200d-1f393\",1990],[\"1f468-1f3fc-200d-1f393\",1991],[\"1f468-1f3fd-200d-1f393\",1992],[\"1f468-1f3fe-200d-1f393\",1993],[\"1f468-1f3ff-200d-1f393\",1994],[\"1f468-1f3fb-200d-1f3a4\",1995],[\"1f468-1f3fc-200d-1f3a4\",1996],[\"1f468-1f3fd-200d-1f3a4\",1997],[\"1f468-1f3fe-200d-1f3a4\",1998],[\"1f468-1f3ff-200d-1f3a4\",1999],[\"1f468-1f3fb-200d-1f3a8\",2000],[\"1f468-1f3fc-200d-1f3a8\",2001],[\"1f468-1f3fd-200d-1f3a8\",2002],[\"1f468-1f3fe-200d-1f3a8\",2003],[\"1f468-1f3ff-200d-1f3a8\",2004],[\"1f468-1f3fb-200d-1f3eb\",2005],[\"1f468-1f3fc-200d-1f3eb\",2006],[\"1f468-1f3fd-200d-1f3eb\",2007],[\"1f468-1f3fe-200d-1f3eb\",2008],[\"1f468-1f3ff-200d-1f3eb\",2009],[\"1f468-1f3fb-200d-1f3ed\",2010],[\"1f468-1f3fc-200d-1f3ed\",2011],[\"1f468-1f3fd-200d-1f3ed\",2012],[\"1f468-1f3fe-200d-1f3ed\",2013],[\"1f468-1f3ff-200d-1f3ed\",2014],[\"1f468-1f3fb-200d-1f4bb\",2015],[\"1f468-1f3fc-200d-1f4bb\",2016],[\"1f468-1f3fd-200d-1f4bb\",2017],[\"1f468-1f3fe-200d-1f4bb\",2018],[\"1f468-1f3ff-200d-1f4bb\",2019],[\"1f468-1f3fb-200d-1f4bc\",2020],[\"1f468-1f3fc-200d-1f4bc\",2021],[\"1f468-1f3fd-200d-1f4bc\",2022],[\"1f468-1f3fe-200d-1f4bc\",2023],[\"1f468-1f3ff-200d-1f4bc\",2024],[\"1f468-1f3fb-200d-1f527\",2025],[\"1f468-1f3fc-200d-1f527\",2026],[\"1f468-1f3fd-200d-1f527\",2027],[\"1f468-1f3fe-200d-1f527\",2028],[\"1f468-1f3ff-200d-1f527\",2029],[\"1f468-1f3fb-200d-1f52c\",2030],[\"1f468-1f3fc-200d-1f52c\",2031],[\"1f468-1f3fd-200d-1f52c\",2032],[\"1f468-1f3fe-200d-1f52c\",2033],[\"1f468-1f3ff-200d-1f52c\",2034],[\"1f468-1f3fb-200d-1f680\",2035],[\"1f468-1f3fc-200d-1f680\",2036],[\"1f468-1f3fd-200d-1f680\",2037],[\"1f468-1f3fe-200d-1f680\",2038],[\"1f468-1f3ff-200d-1f680\",2039],[\"1f468-1f3fb-200d-1f692\",2040],[\"1f468-1f3fc-200d-1f692\",2041],[\"1f468-1f3fd-200d-1f692\",2042],[\"1f468-1f3fe-200d-1f692\",2043],[\"1f468-1f3ff-200d-1f692\",2044],[\"1f468-1f3fb-200d-1f9af\",2045],[\"1f468-1f3fc-200d-1f9af\",2046],[\"1f468-1f3fd-200d-1f9af\",2047],[\"1f468-1f3fe-200d-1f9af\",2048],[\"1f468-1f3ff-200d-1f9af\",2049],[\"1f468-1f3fb-200d-1f9b0\",2050],[\"1f468-1f3fc-200d-1f9b0\",2051],[\"1f468-1f3fd-200d-1f9b0\",2052],[\"1f468-1f3fe-200d-1f9b0\",2053],[\"1f468-1f3ff-200d-1f9b0\",2054],[\"1f468-1f3fb-200d-1f9b1\",2055],[\"1f468-1f3fc-200d-1f9b1\",2056],[\"1f468-1f3fd-200d-1f9b1\",2057],[\"1f468-1f3fe-200d-1f9b1\",2058],[\"1f468-1f3ff-200d-1f9b1\",2059],[\"1f468-1f3fb-200d-1f9b2\",2060],[\"1f468-1f3fc-200d-1f9b2\",2061],[\"1f468-1f3fd-200d-1f9b2\",2062],[\"1f468-1f3fe-200d-1f9b2\",2063],[\"1f468-1f3ff-200d-1f9b2\",2064],[\"1f468-1f3fb-200d-1f9b3\",2065],[\"1f468-1f3fc-200d-1f9b3\",2066],[\"1f468-1f3fd-200d-1f9b3\",2067],[\"1f468-1f3fe-200d-1f9b3\",2068],[\"1f468-1f3ff-200d-1f9b3\",2069],[\"1f468-1f3fb-200d-1f9bc\",2070],[\"1f468-1f3fc-200d-1f9bc\",2071],[\"1f468-1f3fd-200d-1f9bc\",2072],[\"1f468-1f3fe-200d-1f9bc\",2073],[\"1f468-1f3ff-200d-1f9bc\",2074],[\"1f468-1f3fb-200d-1f9bd\",2075],[\"1f468-1f3fc-200d-1f9bd\",2076],[\"1f468-1f3fd-200d-1f9bd\",2077],[\"1f468-1f3fe-200d-1f9bd\",2078],[\"1f468-1f3ff-200d-1f9bd\",2079],[\"1f468-1f3fb-200d-2695-fe0f\",2080],[\"1f468-1f3fc-200d-2695-fe0f\",2081],[\"1f468-1f3fd-200d-2695-fe0f\",2082],[\"1f468-1f3fe-200d-2695-fe0f\",2083],[\"1f468-1f3ff-200d-2695-fe0f\",2084],[\"1f468-1f3fb-200d-2696-fe0f\",2085],[\"1f468-1f3fc-200d-2696-fe0f\",2086],[\"1f468-1f3fd-200d-2696-fe0f\",2087],[\"1f468-1f3fe-200d-2696-fe0f\",2088],[\"1f468-1f3ff-200d-2696-fe0f\",2089],[\"1f468-1f3fb-200d-2708-fe0f\",2090],[\"1f468-1f3fc-200d-2708-fe0f\",2091],[\"1f468-1f3fd-200d-2708-fe0f\",2092],[\"1f468-1f3fe-200d-2708-fe0f\",2093],[\"1f468-1f3ff-200d-2708-fe0f\",2094],[\"1f468-1f3fb\",2095],[\"1f468-1f3fc\",2096],[\"1f468-1f3fd\",2097],[\"1f468-1f3fe\",2098],[\"1f468-1f3ff\",2099],[\"1f469-1f3fb-200d-1f33e\",2100],[\"1f469-1f3fc-200d-1f33e\",2101],[\"1f469-1f3fd-200d-1f33e\",2102],[\"1f469-1f3fe-200d-1f33e\",2103],[\"1f469-1f3ff-200d-1f33e\",2104],[\"1f469-1f3fb-200d-1f373\",2105],[\"1f469-1f3fc-200d-1f373\",2106],[\"1f469-1f3fd-200d-1f373\",2107],[\"1f469-1f3fe-200d-1f373\",2108],[\"1f469-1f3ff-200d-1f373\",2109],[\"1f469-1f3fb-200d-1f37c\",2110],[\"1f469-1f3fc-200d-1f37c\",2111],[\"1f469-1f3fd-200d-1f37c\",2112],[\"1f469-1f3fe-200d-1f37c\",2113],[\"1f469-1f3ff-200d-1f37c\",2114],[\"1f469-1f3fb-200d-1f393\",2115],[\"1f469-1f3fc-200d-1f393\",2116],[\"1f469-1f3fd-200d-1f393\",2117],[\"1f469-1f3fe-200d-1f393\",2118],[\"1f469-1f3ff-200d-1f393\",2119],[\"1f469-1f3fb-200d-1f3a4\",2120],[\"1f469-1f3fc-200d-1f3a4\",2121],[\"1f469-1f3fd-200d-1f3a4\",2122],[\"1f469-1f3fe-200d-1f3a4\",2123],[\"1f469-1f3ff-200d-1f3a4\",2124],[\"1f469-1f3fb-200d-1f3a8\",2125],[\"1f469-1f3fc-200d-1f3a8\",2126],[\"1f469-1f3fd-200d-1f3a8\",2127],[\"1f469-1f3fe-200d-1f3a8\",2128],[\"1f469-1f3ff-200d-1f3a8\",2129],[\"1f469-1f3fb-200d-1f3eb\",2130],[\"1f469-1f3fc-200d-1f3eb\",2131],[\"1f469-1f3fd-200d-1f3eb\",2132],[\"1f469-1f3fe-200d-1f3eb\",2133],[\"1f469-1f3ff-200d-1f3eb\",2134],[\"1f469-1f3fb-200d-1f3ed\",2135],[\"1f469-1f3fc-200d-1f3ed\",2136],[\"1f469-1f3fd-200d-1f3ed\",2137],[\"1f469-1f3fe-200d-1f3ed\",2138],[\"1f469-1f3ff-200d-1f3ed\",2139],[\"1f469-1f3fb-200d-1f4bb\",2140],[\"1f469-1f3fc-200d-1f4bb\",2141],[\"1f469-1f3fd-200d-1f4bb\",2142],[\"1f469-1f3fe-200d-1f4bb\",2143],[\"1f469-1f3ff-200d-1f4bb\",2144],[\"1f469-1f3fb-200d-1f4bc\",2145],[\"1f469-1f3fc-200d-1f4bc\",2146],[\"1f469-1f3fd-200d-1f4bc\",2147],[\"1f469-1f3fe-200d-1f4bc\",2148],[\"1f469-1f3ff-200d-1f4bc\",2149],[\"1f469-1f3fb-200d-1f527\",2150],[\"1f469-1f3fc-200d-1f527\",2151],[\"1f469-1f3fd-200d-1f527\",2152],[\"1f469-1f3fe-200d-1f527\",2153],[\"1f469-1f3ff-200d-1f527\",2154],[\"1f469-1f3fb-200d-1f52c\",2155],[\"1f469-1f3fc-200d-1f52c\",2156],[\"1f469-1f3fd-200d-1f52c\",2157],[\"1f469-1f3fe-200d-1f52c\",2158],[\"1f469-1f3ff-200d-1f52c\",2159],[\"1f469-1f3fb-200d-1f680\",2160],[\"1f469-1f3fc-200d-1f680\",2161],[\"1f469-1f3fd-200d-1f680\",2162],[\"1f469-1f3fe-200d-1f680\",2163],[\"1f469-1f3ff-200d-1f680\",2164],[\"1f469-1f3fb-200d-1f692\",2165],[\"1f469-1f3fc-200d-1f692\",2166],[\"1f469-1f3fd-200d-1f692\",2167],[\"1f469-1f3fe-200d-1f692\",2168],[\"1f469-1f3ff-200d-1f692\",2169],[\"1f469-1f3fb-200d-1f9af\",2170],[\"1f469-1f3fc-200d-1f9af\",2171],[\"1f469-1f3fd-200d-1f9af\",2172],[\"1f469-1f3fe-200d-1f9af\",2173],[\"1f469-1f3ff-200d-1f9af\",2174],[\"1f469-1f3fb-200d-1f9b0\",2175],[\"1f469-1f3fc-200d-1f9b0\",2176],[\"1f469-1f3fd-200d-1f9b0\",2177],[\"1f469-1f3fe-200d-1f9b0\",2178],[\"1f469-1f3ff-200d-1f9b0\",2179],[\"1f469-1f3fb-200d-1f9b1\",2180],[\"1f469-1f3fc-200d-1f9b1\",2181],[\"1f469-1f3fd-200d-1f9b1\",2182],[\"1f469-1f3fe-200d-1f9b1\",2183],[\"1f469-1f3ff-200d-1f9b1\",2184],[\"1f469-1f3fb-200d-1f9b2\",2185],[\"1f469-1f3fc-200d-1f9b2\",2186],[\"1f469-1f3fd-200d-1f9b2\",2187],[\"1f469-1f3fe-200d-1f9b2\",2188],[\"1f469-1f3ff-200d-1f9b2\",2189],[\"1f469-1f3fb-200d-1f9b3\",2190],[\"1f469-1f3fc-200d-1f9b3\",2191],[\"1f469-1f3fd-200d-1f9b3\",2192],[\"1f469-1f3fe-200d-1f9b3\",2193],[\"1f469-1f3ff-200d-1f9b3\",2194],[\"1f469-1f3fb-200d-1f9bc\",2195],[\"1f469-1f3fc-200d-1f9bc\",2196],[\"1f469-1f3fd-200d-1f9bc\",2197],[\"1f469-1f3fe-200d-1f9bc\",2198],[\"1f469-1f3ff-200d-1f9bc\",2199],[\"1f469-1f3fb-200d-1f9bd\",2200],[\"1f469-1f3fc-200d-1f9bd\",2201],[\"1f469-1f3fd-200d-1f9bd\",2202],[\"1f469-1f3fe-200d-1f9bd\",2203],[\"1f469-1f3ff-200d-1f9bd\",2204],[\"1f469-1f3fb-200d-2695-fe0f\",2205],[\"1f469-1f3fc-200d-2695-fe0f\",2206],[\"1f469-1f3fd-200d-2695-fe0f\",2207],[\"1f469-1f3fe-200d-2695-fe0f\",2208],[\"1f469-1f3ff-200d-2695-fe0f\",2209],[\"1f469-1f3fb-200d-2696-fe0f\",2210],[\"1f469-1f3fc-200d-2696-fe0f\",2211],[\"1f469-1f3fd-200d-2696-fe0f\",2212],[\"1f469-1f3fe-200d-2696-fe0f\",2213],[\"1f469-1f3ff-200d-2696-fe0f\",2214],[\"1f469-1f3fb-200d-2708-fe0f\",2215],[\"1f469-1f3fc-200d-2708-fe0f\",2216],[\"1f469-1f3fd-200d-2708-fe0f\",2217],[\"1f469-1f3fe-200d-2708-fe0f\",2218],[\"1f469-1f3ff-200d-2708-fe0f\",2219],[\"1f469-1f3fb\",2220],[\"1f469-1f3fc\",2221],[\"1f469-1f3fd\",2222],[\"1f469-1f3fe\",2223],[\"1f469-1f3ff\",2224],[\"1f46b-1f3fb\",2225],[\"1f46b-1f3fc\",2226],[\"1f46b-1f3fd\",2227],[\"1f46b-1f3fe\",2228],[\"1f46b-1f3ff\",2229],[\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc\",2230],[\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd\",2231],[\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe\",2232],[\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff\",2233],[\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb\",2234],[\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd\",2235],[\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe\",2236],[\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff\",2237],[\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb\",2238],[\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc\",2239],[\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe\",2240],[\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff\",2241],[\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb\",2242],[\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc\",2243],[\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd\",2244],[\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff\",2245],[\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb\",2246],[\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc\",2247],[\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd\",2248],[\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe\",2249],[\"1f46c-1f3fb\",2250],[\"1f46c-1f3fc\",2251],[\"1f46c-1f3fd\",2252],[\"1f46c-1f3fe\",2253],[\"1f46c-1f3ff\",2254],[\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc\",2255],[\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd\",2256],[\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe\",2257],[\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff\",2258],[\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb\",2259],[\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd\",2260],[\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe\",2261],[\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff\",2262],[\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb\",2263],[\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc\",2264],[\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe\",2265],[\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff\",2266],[\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb\",2267],[\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc\",2268],[\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd\",2269],[\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff\",2270],[\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb\",2271],[\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc\",2272],[\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd\",2273],[\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe\",2274],[\"1f46d-1f3fb\",2275],[\"1f46d-1f3fc\",2276],[\"1f46d-1f3fd\",2277],[\"1f46d-1f3fe\",2278],[\"1f46d-1f3ff\",2279],[\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc\",2280],[\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd\",2281],[\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe\",2282],[\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff\",2283],[\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb\",2284],[\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd\",2285],[\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe\",2286],[\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff\",2287],[\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb\",2288],[\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc\",2289],[\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe\",2290],[\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff\",2291],[\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb\",2292],[\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc\",2293],[\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd\",2294],[\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff\",2295],[\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb\",2296],[\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc\",2297],[\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd\",2298],[\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe\",2299],[\"1f46e-1f3fb-200d-2640-fe0f\",2300],[\"1f46e-1f3fc-200d-2640-fe0f\",2301],[\"1f46e-1f3fd-200d-2640-fe0f\",2302],[\"1f46e-1f3fe-200d-2640-fe0f\",2303],[\"1f46e-1f3ff-200d-2640-fe0f\",2304],[\"1f46e-1f3fb-200d-2642-fe0f\",2305],[\"1f46e-1f3fc-200d-2642-fe0f\",2306],[\"1f46e-1f3fd-200d-2642-fe0f\",2307],[\"1f46e-1f3fe-200d-2642-fe0f\",2308],[\"1f46e-1f3ff-200d-2642-fe0f\",2309],[\"1f46e-1f3fb\",2310],[\"1f46e-1f3fc\",2311],[\"1f46e-1f3fd\",2312],[\"1f46e-1f3fe\",2313],[\"1f46e-1f3ff\",2314],[\"1f470-1f3fb-200d-2640-fe0f\",2315],[\"1f470-1f3fc-200d-2640-fe0f\",2316],[\"1f470-1f3fd-200d-2640-fe0f\",2317],[\"1f470-1f3fe-200d-2640-fe0f\",2318],[\"1f470-1f3ff-200d-2640-fe0f\",2319],[\"1f470-1f3fb-200d-2642-fe0f\",2320],[\"1f470-1f3fc-200d-2642-fe0f\",2321],[\"1f470-1f3fd-200d-2642-fe0f\",2322],[\"1f470-1f3fe-200d-2642-fe0f\",2323],[\"1f470-1f3ff-200d-2642-fe0f\",2324],[\"1f470-1f3fb\",2325],[\"1f470-1f3fc\",2326],[\"1f470-1f3fd\",2327],[\"1f470-1f3fe\",2328],[\"1f470-1f3ff\",2329],[\"1f471-1f3fb-200d-2640-fe0f\",2330],[\"1f471-1f3fc-200d-2640-fe0f\",2331],[\"1f471-1f3fd-200d-2640-fe0f\",2332],[\"1f471-1f3fe-200d-2640-fe0f\",2333],[\"1f471-1f3ff-200d-2640-fe0f\",2334],[\"1f471-1f3fb-200d-2642-fe0f\",2335],[\"1f471-1f3fc-200d-2642-fe0f\",2336],[\"1f471-1f3fd-200d-2642-fe0f\",2337],[\"1f471-1f3fe-200d-2642-fe0f\",2338],[\"1f471-1f3ff-200d-2642-fe0f\",2339],[\"1f471-1f3fb\",2340],[\"1f471-1f3fc\",2341],[\"1f471-1f3fd\",2342],[\"1f471-1f3fe\",2343],[\"1f471-1f3ff\",2344],[\"1f472-1f3fb\",2345],[\"1f472-1f3fc\",2346],[\"1f472-1f3fd\",2347],[\"1f472-1f3fe\",2348],[\"1f472-1f3ff\",2349],[\"1f473-1f3fb-200d-2640-fe0f\",2350],[\"1f473-1f3fc-200d-2640-fe0f\",2351],[\"1f473-1f3fd-200d-2640-fe0f\",2352],[\"1f473-1f3fe-200d-2640-fe0f\",2353],[\"1f473-1f3ff-200d-2640-fe0f\",2354],[\"1f473-1f3fb-200d-2642-fe0f\",2355],[\"1f473-1f3fc-200d-2642-fe0f\",2356],[\"1f473-1f3fd-200d-2642-fe0f\",2357],[\"1f473-1f3fe-200d-2642-fe0f\",2358],[\"1f473-1f3ff-200d-2642-fe0f\",2359],[\"1f473-1f3fb\",2360],[\"1f473-1f3fc\",2361],[\"1f473-1f3fd\",2362],[\"1f473-1f3fe\",2363],[\"1f473-1f3ff\",2364],[\"1f474-1f3fb\",2365],[\"1f474-1f3fc\",2366],[\"1f474-1f3fd\",2367],[\"1f474-1f3fe\",2368],[\"1f474-1f3ff\",2369],[\"1f475-1f3fb\",2370],[\"1f475-1f3fc\",2371],[\"1f475-1f3fd\",2372],[\"1f475-1f3fe\",2373],[\"1f475-1f3ff\",2374],[\"1f476-1f3fb\",2375],[\"1f476-1f3fc\",2376],[\"1f476-1f3fd\",2377],[\"1f476-1f3fe\",2378],[\"1f476-1f3ff\",2379],[\"1f477-1f3fb-200d-2640-fe0f\",2380],[\"1f477-1f3fc-200d-2640-fe0f\",2381],[\"1f477-1f3fd-200d-2640-fe0f\",2382],[\"1f477-1f3fe-200d-2640-fe0f\",2383],[\"1f477-1f3ff-200d-2640-fe0f\",2384],[\"1f477-1f3fb-200d-2642-fe0f\",2385],[\"1f477-1f3fc-200d-2642-fe0f\",2386],[\"1f477-1f3fd-200d-2642-fe0f\",2387],[\"1f477-1f3fe-200d-2642-fe0f\",2388],[\"1f477-1f3ff-200d-2642-fe0f\",2389],[\"1f477-1f3fb\",2390],[\"1f477-1f3fc\",2391],[\"1f477-1f3fd\",2392],[\"1f477-1f3fe\",2393],[\"1f477-1f3ff\",2394],[\"1f478-1f3fb\",2395],[\"1f478-1f3fc\",2396],[\"1f478-1f3fd\",2397],[\"1f478-1f3fe\",2398],[\"1f478-1f3ff\",2399],[\"1f47c-1f3fb\",2400],[\"1f47c-1f3fc\",2401],[\"1f47c-1f3fd\",2402],[\"1f47c-1f3fe\",2403],[\"1f47c-1f3ff\",2404],[\"1f481-1f3fb-200d-2640-fe0f\",2405],[\"1f481-1f3fc-200d-2640-fe0f\",2406],[\"1f481-1f3fd-200d-2640-fe0f\",2407],[\"1f481-1f3fe-200d-2640-fe0f\",2408],[\"1f481-1f3ff-200d-2640-fe0f\",2409],[\"1f481-1f3fb-200d-2642-fe0f\",2410],[\"1f481-1f3fc-200d-2642-fe0f\",2411],[\"1f481-1f3fd-200d-2642-fe0f\",2412],[\"1f481-1f3fe-200d-2642-fe0f\",2413],[\"1f481-1f3ff-200d-2642-fe0f\",2414],[\"1f481-1f3fb\",2415],[\"1f481-1f3fc\",2416],[\"1f481-1f3fd\",2417],[\"1f481-1f3fe\",2418],[\"1f481-1f3ff\",2419],[\"1f482-1f3fb-200d-2640-fe0f\",2420],[\"1f482-1f3fc-200d-2640-fe0f\",2421],[\"1f482-1f3fd-200d-2640-fe0f\",2422],[\"1f482-1f3fe-200d-2640-fe0f\",2423],[\"1f482-1f3ff-200d-2640-fe0f\",2424],[\"1f482-1f3fb-200d-2642-fe0f\",2425],[\"1f482-1f3fc-200d-2642-fe0f\",2426],[\"1f482-1f3fd-200d-2642-fe0f\",2427],[\"1f482-1f3fe-200d-2642-fe0f\",2428],[\"1f482-1f3ff-200d-2642-fe0f\",2429],[\"1f482-1f3fb\",2430],[\"1f482-1f3fc\",2431],[\"1f482-1f3fd\",2432],[\"1f482-1f3fe\",2433],[\"1f482-1f3ff\",2434],[\"1f483-1f3fb\",2435],[\"1f483-1f3fc\",2436],[\"1f483-1f3fd\",2437],[\"1f483-1f3fe\",2438],[\"1f483-1f3ff\",2439],[\"1f485-1f3fb\",2440],[\"1f485-1f3fc\",2441],[\"1f485-1f3fd\",2442],[\"1f485-1f3fe\",2443],[\"1f485-1f3ff\",2444],[\"1f486-1f3fb-200d-2640-fe0f\",2445],[\"1f486-1f3fc-200d-2640-fe0f\",2446],[\"1f486-1f3fd-200d-2640-fe0f\",2447],[\"1f486-1f3fe-200d-2640-fe0f\",2448],[\"1f486-1f3ff-200d-2640-fe0f\",2449],[\"1f486-1f3fb-200d-2642-fe0f\",2450],[\"1f486-1f3fc-200d-2642-fe0f\",2451],[\"1f486-1f3fd-200d-2642-fe0f\",2452],[\"1f486-1f3fe-200d-2642-fe0f\",2453],[\"1f486-1f3ff-200d-2642-fe0f\",2454],[\"1f486-1f3fb\",2455],[\"1f486-1f3fc\",2456],[\"1f486-1f3fd\",2457],[\"1f486-1f3fe\",2458],[\"1f486-1f3ff\",2459],[\"1f487-1f3fb-200d-2640-fe0f\",2460],[\"1f487-1f3fc-200d-2640-fe0f\",2461],[\"1f487-1f3fd-200d-2640-fe0f\",2462],[\"1f487-1f3fe-200d-2640-fe0f\",2463],[\"1f487-1f3ff-200d-2640-fe0f\",2464],[\"1f487-1f3fb-200d-2642-fe0f\",2465],[\"1f487-1f3fc-200d-2642-fe0f\",2466],[\"1f487-1f3fd-200d-2642-fe0f\",2467],[\"1f487-1f3fe-200d-2642-fe0f\",2468],[\"1f487-1f3ff-200d-2642-fe0f\",2469],[\"1f487-1f3fb\",2470],[\"1f487-1f3fc\",2471],[\"1f487-1f3fd\",2472],[\"1f487-1f3fe\",2473],[\"1f487-1f3ff\",2474],[\"1f4aa-1f3fb\",2475],[\"1f4aa-1f3fc\",2476],[\"1f4aa-1f3fd\",2477],[\"1f4aa-1f3fe\",2478],[\"1f4aa-1f3ff\",2479],[\"1f574-1f3fb\",2480],[\"1f574-1f3fc\",2481],[\"1f574-1f3fd\",2482],[\"1f574-1f3fe\",2483],[\"1f574-1f3ff\",2484],[\"1f575-1f3fb-200d-2640-fe0f\",2485],[\"1f575-1f3fc-200d-2640-fe0f\",2486],[\"1f575-1f3fd-200d-2640-fe0f\",2487],[\"1f575-1f3fe-200d-2640-fe0f\",2488],[\"1f575-1f3ff-200d-2640-fe0f\",2489],[\"1f575-1f3fb-200d-2642-fe0f\",2490],[\"1f575-1f3fc-200d-2642-fe0f\",2491],[\"1f575-1f3fd-200d-2642-fe0f\",2492],[\"1f575-1f3fe-200d-2642-fe0f\",2493],[\"1f575-1f3ff-200d-2642-fe0f\",2494],[\"1f575-1f3fb\",2495],[\"1f575-1f3fc\",2496],[\"1f575-1f3fd\",2497],[\"1f575-1f3fe\",2498],[\"1f575-1f3ff\",2499],[\"1f57a-1f3fb\",2500],[\"1f57a-1f3fc\",2501],[\"1f57a-1f3fd\",2502],[\"1f57a-1f3fe\",2503],[\"1f57a-1f3ff\",2504],[\"1f590-1f3fb\",2505],[\"1f590-1f3fc\",2506],[\"1f590-1f3fd\",2507],[\"1f590-1f3fe\",2508],[\"1f590-1f3ff\",2509],[\"1f595-1f3fb\",2510],[\"1f595-1f3fc\",2511],[\"1f595-1f3fd\",2512],[\"1f595-1f3fe\",2513],[\"1f595-1f3ff\",2514],[\"1f596-1f3fb\",2515],[\"1f596-1f3fc\",2516],[\"1f596-1f3fd\",2517],[\"1f596-1f3fe\",2518],[\"1f596-1f3ff\",2519],[\"1f645-1f3fb-200d-2640-fe0f\",2520],[\"1f645-1f3fc-200d-2640-fe0f\",2521],[\"1f645-1f3fd-200d-2640-fe0f\",2522],[\"1f645-1f3fe-200d-2640-fe0f\",2523],[\"1f645-1f3ff-200d-2640-fe0f\",2524],[\"1f645-1f3fb-200d-2642-fe0f\",2525],[\"1f645-1f3fc-200d-2642-fe0f\",2526],[\"1f645-1f3fd-200d-2642-fe0f\",2527],[\"1f645-1f3fe-200d-2642-fe0f\",2528],[\"1f645-1f3ff-200d-2642-fe0f\",2529],[\"1f645-1f3fb\",2530],[\"1f645-1f3fc\",2531],[\"1f645-1f3fd\",2532],[\"1f645-1f3fe\",2533],[\"1f645-1f3ff\",2534],[\"1f646-1f3fb-200d-2640-fe0f\",2535],[\"1f646-1f3fc-200d-2640-fe0f\",2536],[\"1f646-1f3fd-200d-2640-fe0f\",2537],[\"1f646-1f3fe-200d-2640-fe0f\",2538],[\"1f646-1f3ff-200d-2640-fe0f\",2539],[\"1f646-1f3fb-200d-2642-fe0f\",2540],[\"1f646-1f3fc-200d-2642-fe0f\",2541],[\"1f646-1f3fd-200d-2642-fe0f\",2542],[\"1f646-1f3fe-200d-2642-fe0f\",2543],[\"1f646-1f3ff-200d-2642-fe0f\",2544],[\"1f646-1f3fb\",2545],[\"1f646-1f3fc\",2546],[\"1f646-1f3fd\",2547],[\"1f646-1f3fe\",2548],[\"1f646-1f3ff\",2549],[\"1f647-1f3fb-200d-2640-fe0f\",2550],[\"1f647-1f3fc-200d-2640-fe0f\",2551],[\"1f647-1f3fd-200d-2640-fe0f\",2552],[\"1f647-1f3fe-200d-2640-fe0f\",2553],[\"1f647-1f3ff-200d-2640-fe0f\",2554],[\"1f647-1f3fb-200d-2642-fe0f\",2555],[\"1f647-1f3fc-200d-2642-fe0f\",2556],[\"1f647-1f3fd-200d-2642-fe0f\",2557],[\"1f647-1f3fe-200d-2642-fe0f\",2558],[\"1f647-1f3ff-200d-2642-fe0f\",2559],[\"1f647-1f3fb\",2560],[\"1f647-1f3fc\",2561],[\"1f647-1f3fd\",2562],[\"1f647-1f3fe\",2563],[\"1f647-1f3ff\",2564],[\"1f64b-1f3fb-200d-2640-fe0f\",2565],[\"1f64b-1f3fc-200d-2640-fe0f\",2566],[\"1f64b-1f3fd-200d-2640-fe0f\",2567],[\"1f64b-1f3fe-200d-2640-fe0f\",2568],[\"1f64b-1f3ff-200d-2640-fe0f\",2569],[\"1f64b-1f3fb-200d-2642-fe0f\",2570],[\"1f64b-1f3fc-200d-2642-fe0f\",2571],[\"1f64b-1f3fd-200d-2642-fe0f\",2572],[\"1f64b-1f3fe-200d-2642-fe0f\",2573],[\"1f64b-1f3ff-200d-2642-fe0f\",2574],[\"1f64b-1f3fb\",2575],[\"1f64b-1f3fc\",2576],[\"1f64b-1f3fd\",2577],[\"1f64b-1f3fe\",2578],[\"1f64b-1f3ff\",2579],[\"1f64c-1f3fb\",2580],[\"1f64c-1f3fc\",2581],[\"1f64c-1f3fd\",2582],[\"1f64c-1f3fe\",2583],[\"1f64c-1f3ff\",2584],[\"1f64d-1f3fb-200d-2640-fe0f\",2585],[\"1f64d-1f3fc-200d-2640-fe0f\",2586],[\"1f64d-1f3fd-200d-2640-fe0f\",2587],[\"1f64d-1f3fe-200d-2640-fe0f\",2588],[\"1f64d-1f3ff-200d-2640-fe0f\",2589],[\"1f64d-1f3fb-200d-2642-fe0f\",2590],[\"1f64d-1f3fc-200d-2642-fe0f\",2591],[\"1f64d-1f3fd-200d-2642-fe0f\",2592],[\"1f64d-1f3fe-200d-2642-fe0f\",2593],[\"1f64d-1f3ff-200d-2642-fe0f\",2594],[\"1f64d-1f3fb\",2595],[\"1f64d-1f3fc\",2596],[\"1f64d-1f3fd\",2597],[\"1f64d-1f3fe\",2598],[\"1f64d-1f3ff\",2599],[\"1f64e-1f3fb-200d-2640-fe0f\",2600],[\"1f64e-1f3fc-200d-2640-fe0f\",2601],[\"1f64e-1f3fd-200d-2640-fe0f\",2602],[\"1f64e-1f3fe-200d-2640-fe0f\",2603],[\"1f64e-1f3ff-200d-2640-fe0f\",2604],[\"1f64e-1f3fb-200d-2642-fe0f\",2605],[\"1f64e-1f3fc-200d-2642-fe0f\",2606],[\"1f64e-1f3fd-200d-2642-fe0f\",2607],[\"1f64e-1f3fe-200d-2642-fe0f\",2608],[\"1f64e-1f3ff-200d-2642-fe0f\",2609],[\"1f64e-1f3fb\",2610],[\"1f64e-1f3fc\",2611],[\"1f64e-1f3fd\",2612],[\"1f64e-1f3fe\",2613],[\"1f64e-1f3ff\",2614],[\"1f64f-1f3fb\",2615],[\"1f64f-1f3fc\",2616],[\"1f64f-1f3fd\",2617],[\"1f64f-1f3fe\",2618],[\"1f64f-1f3ff\",2619],[\"1f6a3-1f3fb-200d-2640-fe0f\",2620],[\"1f6a3-1f3fc-200d-2640-fe0f\",2621],[\"1f6a3-1f3fd-200d-2640-fe0f\",2622],[\"1f6a3-1f3fe-200d-2640-fe0f\",2623],[\"1f6a3-1f3ff-200d-2640-fe0f\",2624],[\"1f6a3-1f3fb-200d-2642-fe0f\",2625],[\"1f6a3-1f3fc-200d-2642-fe0f\",2626],[\"1f6a3-1f3fd-200d-2642-fe0f\",2627],[\"1f6a3-1f3fe-200d-2642-fe0f\",2628],[\"1f6a3-1f3ff-200d-2642-fe0f\",2629],[\"1f6a3-1f3fb\",2630],[\"1f6a3-1f3fc\",2631],[\"1f6a3-1f3fd\",2632],[\"1f6a3-1f3fe\",2633],[\"1f6a3-1f3ff\",2634],[\"1f6b4-1f3fb-200d-2640-fe0f\",2635],[\"1f6b4-1f3fc-200d-2640-fe0f\",2636],[\"1f6b4-1f3fd-200d-2640-fe0f\",2637],[\"1f6b4-1f3fe-200d-2640-fe0f\",2638],[\"1f6b4-1f3ff-200d-2640-fe0f\",2639],[\"1f6b4-1f3fb-200d-2642-fe0f\",2640],[\"1f6b4-1f3fc-200d-2642-fe0f\",2641],[\"1f6b4-1f3fd-200d-2642-fe0f\",2642],[\"1f6b4-1f3fe-200d-2642-fe0f\",2643],[\"1f6b4-1f3ff-200d-2642-fe0f\",2644],[\"1f6b4-1f3fb\",2645],[\"1f6b4-1f3fc\",2646],[\"1f6b4-1f3fd\",2647],[\"1f6b4-1f3fe\",2648],[\"1f6b4-1f3ff\",2649],[\"1f6b5-1f3fb-200d-2640-fe0f\",2650],[\"1f6b5-1f3fc-200d-2640-fe0f\",2651],[\"1f6b5-1f3fd-200d-2640-fe0f\",2652],[\"1f6b5-1f3fe-200d-2640-fe0f\",2653],[\"1f6b5-1f3ff-200d-2640-fe0f\",2654],[\"1f6b5-1f3fb-200d-2642-fe0f\",2655],[\"1f6b5-1f3fc-200d-2642-fe0f\",2656],[\"1f6b5-1f3fd-200d-2642-fe0f\",2657],[\"1f6b5-1f3fe-200d-2642-fe0f\",2658],[\"1f6b5-1f3ff-200d-2642-fe0f\",2659],[\"1f6b5-1f3fb\",2660],[\"1f6b5-1f3fc\",2661],[\"1f6b5-1f3fd\",2662],[\"1f6b5-1f3fe\",2663],[\"1f6b5-1f3ff\",2664],[\"1f6b6-1f3fb-200d-2640-fe0f\",2665],[\"1f6b6-1f3fc-200d-2640-fe0f\",2666],[\"1f6b6-1f3fd-200d-2640-fe0f\",2667],[\"1f6b6-1f3fe-200d-2640-fe0f\",2668],[\"1f6b6-1f3ff-200d-2640-fe0f\",2669],[\"1f6b6-1f3fb-200d-2642-fe0f\",2670],[\"1f6b6-1f3fc-200d-2642-fe0f\",2671],[\"1f6b6-1f3fd-200d-2642-fe0f\",2672],[\"1f6b6-1f3fe-200d-2642-fe0f\",2673],[\"1f6b6-1f3ff-200d-2642-fe0f\",2674],[\"1f6b6-1f3fb\",2675],[\"1f6b6-1f3fc\",2676],[\"1f6b6-1f3fd\",2677],[\"1f6b6-1f3fe\",2678],[\"1f6b6-1f3ff\",2679],[\"1f6c0-1f3fb\",2680],[\"1f6c0-1f3fc\",2681],[\"1f6c0-1f3fd\",2682],[\"1f6c0-1f3fe\",2683],[\"1f6c0-1f3ff\",2684],[\"1f6cc-1f3fb\",2685],[\"1f6cc-1f3fc\",2686],[\"1f6cc-1f3fd\",2687],[\"1f6cc-1f3fe\",2688],[\"1f6cc-1f3ff\",2689],[\"1f90c-1f3fb\",2690],[\"1f90c-1f3fc\",2691],[\"1f90c-1f3fd\",2692],[\"1f90c-1f3fe\",2693],[\"1f90c-1f3ff\",2694],[\"1f90f-1f3fb\",2695],[\"1f90f-1f3fc\",2696],[\"1f90f-1f3fd\",2697],[\"1f90f-1f3fe\",2698],[\"1f90f-1f3ff\",2699],[\"1f918-1f3fb\",2700],[\"1f918-1f3fc\",2701],[\"1f918-1f3fd\",2702],[\"1f918-1f3fe\",2703],[\"1f918-1f3ff\",2704],[\"1f919-1f3fb\",2705],[\"1f919-1f3fc\",2706],[\"1f919-1f3fd\",2707],[\"1f919-1f3fe\",2708],[\"1f919-1f3ff\",2709],[\"1f91a-1f3fb\",2710],[\"1f91a-1f3fc\",2711],[\"1f91a-1f3fd\",2712],[\"1f91a-1f3fe\",2713],[\"1f91a-1f3ff\",2714],[\"1f91b-1f3fb\",2715],[\"1f91b-1f3fc\",2716],[\"1f91b-1f3fd\",2717],[\"1f91b-1f3fe\",2718],[\"1f91b-1f3ff\",2719],[\"1f91c-1f3fb\",2720],[\"1f91c-1f3fc\",2721],[\"1f91c-1f3fd\",2722],[\"1f91c-1f3fe\",2723],[\"1f91c-1f3ff\",2724],[\"1f91e-1f3fb\",2725],[\"1f91e-1f3fc\",2726],[\"1f91e-1f3fd\",2727],[\"1f91e-1f3fe\",2728],[\"1f91e-1f3ff\",2729],[\"1f91f-1f3fb\",2730],[\"1f91f-1f3fc\",2731],[\"1f91f-1f3fd\",2732],[\"1f91f-1f3fe\",2733],[\"1f91f-1f3ff\",2734],[\"1f926-1f3fb-200d-2640-fe0f\",2735],[\"1f926-1f3fc-200d-2640-fe0f\",2736],[\"1f926-1f3fd-200d-2640-fe0f\",2737],[\"1f926-1f3fe-200d-2640-fe0f\",2738],[\"1f926-1f3ff-200d-2640-fe0f\",2739],[\"1f926-1f3fb-200d-2642-fe0f\",2740],[\"1f926-1f3fc-200d-2642-fe0f\",2741],[\"1f926-1f3fd-200d-2642-fe0f\",2742],[\"1f926-1f3fe-200d-2642-fe0f\",2743],[\"1f926-1f3ff-200d-2642-fe0f\",2744],[\"1f926-1f3fb\",2745],[\"1f926-1f3fc\",2746],[\"1f926-1f3fd\",2747],[\"1f926-1f3fe\",2748],[\"1f926-1f3ff\",2749],[\"1f930-1f3fb\",2750],[\"1f930-1f3fc\",2751],[\"1f930-1f3fd\",2752],[\"1f930-1f3fe\",2753],[\"1f930-1f3ff\",2754],[\"1f931-1f3fb\",2755],[\"1f931-1f3fc\",2756],[\"1f931-1f3fd\",2757],[\"1f931-1f3fe\",2758],[\"1f931-1f3ff\",2759],[\"1f932-1f3fb\",2760],[\"1f932-1f3fc\",2761],[\"1f932-1f3fd\",2762],[\"1f932-1f3fe\",2763],[\"1f932-1f3ff\",2764],[\"1f933-1f3fb\",2765],[\"1f933-1f3fc\",2766],[\"1f933-1f3fd\",2767],[\"1f933-1f3fe\",2768],[\"1f933-1f3ff\",2769],[\"1f934-1f3fb\",2770],[\"1f934-1f3fc\",2771],[\"1f934-1f3fd\",2772],[\"1f934-1f3fe\",2773],[\"1f934-1f3ff\",2774],[\"1f935-1f3fb-200d-2640-fe0f\",2775],[\"1f935-1f3fc-200d-2640-fe0f\",2776],[\"1f935-1f3fd-200d-2640-fe0f\",2777],[\"1f935-1f3fe-200d-2640-fe0f\",2778],[\"1f935-1f3ff-200d-2640-fe0f\",2779],[\"1f935-1f3fb-200d-2642-fe0f\",2780],[\"1f935-1f3fc-200d-2642-fe0f\",2781],[\"1f935-1f3fd-200d-2642-fe0f\",2782],[\"1f935-1f3fe-200d-2642-fe0f\",2783],[\"1f935-1f3ff-200d-2642-fe0f\",2784],[\"1f935-1f3fb\",2785],[\"1f935-1f3fc\",2786],[\"1f935-1f3fd\",2787],[\"1f935-1f3fe\",2788],[\"1f935-1f3ff\",2789],[\"1f936-1f3fb\",2790],[\"1f936-1f3fc\",2791],[\"1f936-1f3fd\",2792],[\"1f936-1f3fe\",2793],[\"1f936-1f3ff\",2794],[\"1f937-1f3fb-200d-2640-fe0f\",2795],[\"1f937-1f3fc-200d-2640-fe0f\",2796],[\"1f937-1f3fd-200d-2640-fe0f\",2797],[\"1f937-1f3fe-200d-2640-fe0f\",2798],[\"1f937-1f3ff-200d-2640-fe0f\",2799],[\"1f937-1f3fb-200d-2642-fe0f\",2800],[\"1f937-1f3fc-200d-2642-fe0f\",2801],[\"1f937-1f3fd-200d-2642-fe0f\",2802],[\"1f937-1f3fe-200d-2642-fe0f\",2803],[\"1f937-1f3ff-200d-2642-fe0f\",2804],[\"1f937-1f3fb\",2805],[\"1f937-1f3fc\",2806],[\"1f937-1f3fd\",2807],[\"1f937-1f3fe\",2808],[\"1f937-1f3ff\",2809],[\"1f938-1f3fb-200d-2640-fe0f\",2810],[\"1f938-1f3fc-200d-2640-fe0f\",2811],[\"1f938-1f3fd-200d-2640-fe0f\",2812],[\"1f938-1f3fe-200d-2640-fe0f\",2813],[\"1f938-1f3ff-200d-2640-fe0f\",2814],[\"1f938-1f3fb-200d-2642-fe0f\",2815],[\"1f938-1f3fc-200d-2642-fe0f\",2816],[\"1f938-1f3fd-200d-2642-fe0f\",2817],[\"1f938-1f3fe-200d-2642-fe0f\",2818],[\"1f938-1f3ff-200d-2642-fe0f\",2819],[\"1f938-1f3fb\",2820],[\"1f938-1f3fc\",2821],[\"1f938-1f3fd\",2822],[\"1f938-1f3fe\",2823],[\"1f938-1f3ff\",2824],[\"1f939-1f3fb-200d-2640-fe0f\",2825],[\"1f939-1f3fc-200d-2640-fe0f\",2826],[\"1f939-1f3fd-200d-2640-fe0f\",2827],[\"1f939-1f3fe-200d-2640-fe0f\",2828],[\"1f939-1f3ff-200d-2640-fe0f\",2829],[\"1f939-1f3fb-200d-2642-fe0f\",2830],[\"1f939-1f3fc-200d-2642-fe0f\",2831],[\"1f939-1f3fd-200d-2642-fe0f\",2832],[\"1f939-1f3fe-200d-2642-fe0f\",2833],[\"1f939-1f3ff-200d-2642-fe0f\",2834],[\"1f939-1f3fb\",2835],[\"1f939-1f3fc\",2836],[\"1f939-1f3fd\",2837],[\"1f939-1f3fe\",2838],[\"1f939-1f3ff\",2839],[\"1f93d-1f3fb-200d-2640-fe0f\",2840],[\"1f93d-1f3fc-200d-2640-fe0f\",2841],[\"1f93d-1f3fd-200d-2640-fe0f\",2842],[\"1f93d-1f3fe-200d-2640-fe0f\",2843],[\"1f93d-1f3ff-200d-2640-fe0f\",2844],[\"1f93d-1f3fb-200d-2642-fe0f\",2845],[\"1f93d-1f3fc-200d-2642-fe0f\",2846],[\"1f93d-1f3fd-200d-2642-fe0f\",2847],[\"1f93d-1f3fe-200d-2642-fe0f\",2848],[\"1f93d-1f3ff-200d-2642-fe0f\",2849],[\"1f93d-1f3fb\",2850],[\"1f93d-1f3fc\",2851],[\"1f93d-1f3fd\",2852],[\"1f93d-1f3fe\",2853],[\"1f93d-1f3ff\",2854],[\"1f93e-1f3fb-200d-2640-fe0f\",2855],[\"1f93e-1f3fc-200d-2640-fe0f\",2856],[\"1f93e-1f3fd-200d-2640-fe0f\",2857],[\"1f93e-1f3fe-200d-2640-fe0f\",2858],[\"1f93e-1f3ff-200d-2640-fe0f\",2859],[\"1f93e-1f3fb-200d-2642-fe0f\",2860],[\"1f93e-1f3fc-200d-2642-fe0f\",2861],[\"1f93e-1f3fd-200d-2642-fe0f\",2862],[\"1f93e-1f3fe-200d-2642-fe0f\",2863],[\"1f93e-1f3ff-200d-2642-fe0f\",2864],[\"1f93e-1f3fb\",2865],[\"1f93e-1f3fc\",2866],[\"1f93e-1f3fd\",2867],[\"1f93e-1f3fe\",2868],[\"1f93e-1f3ff\",2869],[\"1f977-1f3fb\",2870],[\"1f977-1f3fc\",2871],[\"1f977-1f3fd\",2872],[\"1f977-1f3fe\",2873],[\"1f977-1f3ff\",2874],[\"1f9b5-1f3fb\",2875],[\"1f9b5-1f3fc\",2876],[\"1f9b5-1f3fd\",2877],[\"1f9b5-1f3fe\",2878],[\"1f9b5-1f3ff\",2879],[\"1f9b6-1f3fb\",2880],[\"1f9b6-1f3fc\",2881],[\"1f9b6-1f3fd\",2882],[\"1f9b6-1f3fe\",2883],[\"1f9b6-1f3ff\",2884],[\"1f9b8-1f3fb-200d-2640-fe0f\",2885],[\"1f9b8-1f3fc-200d-2640-fe0f\",2886],[\"1f9b8-1f3fd-200d-2640-fe0f\",2887],[\"1f9b8-1f3fe-200d-2640-fe0f\",2888],[\"1f9b8-1f3ff-200d-2640-fe0f\",2889],[\"1f9b8-1f3fb-200d-2642-fe0f\",2890],[\"1f9b8-1f3fc-200d-2642-fe0f\",2891],[\"1f9b8-1f3fd-200d-2642-fe0f\",2892],[\"1f9b8-1f3fe-200d-2642-fe0f\",2893],[\"1f9b8-1f3ff-200d-2642-fe0f\",2894],[\"1f9b8-1f3fb\",2895],[\"1f9b8-1f3fc\",2896],[\"1f9b8-1f3fd\",2897],[\"1f9b8-1f3fe\",2898],[\"1f9b8-1f3ff\",2899],[\"1f9b9-1f3fb-200d-2640-fe0f\",2900],[\"1f9b9-1f3fc-200d-2640-fe0f\",2901],[\"1f9b9-1f3fd-200d-2640-fe0f\",2902],[\"1f9b9-1f3fe-200d-2640-fe0f\",2903],[\"1f9b9-1f3ff-200d-2640-fe0f\",2904],[\"1f9b9-1f3fb-200d-2642-fe0f\",2905],[\"1f9b9-1f3fc-200d-2642-fe0f\",2906],[\"1f9b9-1f3fd-200d-2642-fe0f\",2907],[\"1f9b9-1f3fe-200d-2642-fe0f\",2908],[\"1f9b9-1f3ff-200d-2642-fe0f\",2909],[\"1f9b9-1f3fb\",2910],[\"1f9b9-1f3fc\",2911],[\"1f9b9-1f3fd\",2912],[\"1f9b9-1f3fe\",2913],[\"1f9b9-1f3ff\",2914],[\"1f9bb-1f3fb\",2915],[\"1f9bb-1f3fc\",2916],[\"1f9bb-1f3fd\",2917],[\"1f9bb-1f3fe\",2918],[\"1f9bb-1f3ff\",2919],[\"1f9cd-1f3fb-200d-2640-fe0f\",2920],[\"1f9cd-1f3fc-200d-2640-fe0f\",2921],[\"1f9cd-1f3fd-200d-2640-fe0f\",2922],[\"1f9cd-1f3fe-200d-2640-fe0f\",2923],[\"1f9cd-1f3ff-200d-2640-fe0f\",2924],[\"1f9cd-1f3fb-200d-2642-fe0f\",2925],[\"1f9cd-1f3fc-200d-2642-fe0f\",2926],[\"1f9cd-1f3fd-200d-2642-fe0f\",2927],[\"1f9cd-1f3fe-200d-2642-fe0f\",2928],[\"1f9cd-1f3ff-200d-2642-fe0f\",2929],[\"1f9cd-1f3fb\",2930],[\"1f9cd-1f3fc\",2931],[\"1f9cd-1f3fd\",2932],[\"1f9cd-1f3fe\",2933],[\"1f9cd-1f3ff\",2934],[\"1f9ce-1f3fb-200d-2640-fe0f\",2935],[\"1f9ce-1f3fc-200d-2640-fe0f\",2936],[\"1f9ce-1f3fd-200d-2640-fe0f\",2937],[\"1f9ce-1f3fe-200d-2640-fe0f\",2938],[\"1f9ce-1f3ff-200d-2640-fe0f\",2939],[\"1f9ce-1f3fb-200d-2642-fe0f\",2940],[\"1f9ce-1f3fc-200d-2642-fe0f\",2941],[\"1f9ce-1f3fd-200d-2642-fe0f\",2942],[\"1f9ce-1f3fe-200d-2642-fe0f\",2943],[\"1f9ce-1f3ff-200d-2642-fe0f\",2944],[\"1f9ce-1f3fb\",2945],[\"1f9ce-1f3fc\",2946],[\"1f9ce-1f3fd\",2947],[\"1f9ce-1f3fe\",2948],[\"1f9ce-1f3ff\",2949],[\"1f9cf-1f3fb-200d-2640-fe0f\",2950],[\"1f9cf-1f3fc-200d-2640-fe0f\",2951],[\"1f9cf-1f3fd-200d-2640-fe0f\",2952],[\"1f9cf-1f3fe-200d-2640-fe0f\",2953],[\"1f9cf-1f3ff-200d-2640-fe0f\",2954],[\"1f9cf-1f3fb-200d-2642-fe0f\",2955],[\"1f9cf-1f3fc-200d-2642-fe0f\",2956],[\"1f9cf-1f3fd-200d-2642-fe0f\",2957],[\"1f9cf-1f3fe-200d-2642-fe0f\",2958],[\"1f9cf-1f3ff-200d-2642-fe0f\",2959],[\"1f9cf-1f3fb\",2960],[\"1f9cf-1f3fc\",2961],[\"1f9cf-1f3fd\",2962],[\"1f9cf-1f3fe\",2963],[\"1f9cf-1f3ff\",2964],[\"1f9d1-1f3fb-200d-1f33e\",2965],[\"1f9d1-1f3fc-200d-1f33e\",2966],[\"1f9d1-1f3fd-200d-1f33e\",2967],[\"1f9d1-1f3fe-200d-1f33e\",2968],[\"1f9d1-1f3ff-200d-1f33e\",2969],[\"1f9d1-1f3fb-200d-1f373\",2970],[\"1f9d1-1f3fc-200d-1f373\",2971],[\"1f9d1-1f3fd-200d-1f373\",2972],[\"1f9d1-1f3fe-200d-1f373\",2973],[\"1f9d1-1f3ff-200d-1f373\",2974],[\"1f9d1-1f3fb-200d-1f37c\",2975],[\"1f9d1-1f3fc-200d-1f37c\",2976],[\"1f9d1-1f3fd-200d-1f37c\",2977],[\"1f9d1-1f3fe-200d-1f37c\",2978],[\"1f9d1-1f3ff-200d-1f37c\",2979],[\"1f9d1-1f3fb-200d-1f384\",2980],[\"1f9d1-1f3fc-200d-1f384\",2981],[\"1f9d1-1f3fd-200d-1f384\",2982],[\"1f9d1-1f3fe-200d-1f384\",2983],[\"1f9d1-1f3ff-200d-1f384\",2984],[\"1f9d1-1f3fb-200d-1f393\",2985],[\"1f9d1-1f3fc-200d-1f393\",2986],[\"1f9d1-1f3fd-200d-1f393\",2987],[\"1f9d1-1f3fe-200d-1f393\",2988],[\"1f9d1-1f3ff-200d-1f393\",2989],[\"1f9d1-1f3fb-200d-1f3a4\",2990],[\"1f9d1-1f3fc-200d-1f3a4\",2991],[\"1f9d1-1f3fd-200d-1f3a4\",2992],[\"1f9d1-1f3fe-200d-1f3a4\",2993],[\"1f9d1-1f3ff-200d-1f3a4\",2994],[\"1f9d1-1f3fb-200d-1f3a8\",2995],[\"1f9d1-1f3fc-200d-1f3a8\",2996],[\"1f9d1-1f3fd-200d-1f3a8\",2997],[\"1f9d1-1f3fe-200d-1f3a8\",2998],[\"1f9d1-1f3ff-200d-1f3a8\",2999],[\"1f9d1-1f3fb-200d-1f3eb\",3000],[\"1f9d1-1f3fc-200d-1f3eb\",3001],[\"1f9d1-1f3fd-200d-1f3eb\",3002],[\"1f9d1-1f3fe-200d-1f3eb\",3003],[\"1f9d1-1f3ff-200d-1f3eb\",3004],[\"1f9d1-1f3fb-200d-1f3ed\",3005],[\"1f9d1-1f3fc-200d-1f3ed\",3006],[\"1f9d1-1f3fd-200d-1f3ed\",3007],[\"1f9d1-1f3fe-200d-1f3ed\",3008],[\"1f9d1-1f3ff-200d-1f3ed\",3009],[\"1f9d1-1f3fb-200d-1f4bb\",3010],[\"1f9d1-1f3fc-200d-1f4bb\",3011],[\"1f9d1-1f3fd-200d-1f4bb\",3012],[\"1f9d1-1f3fe-200d-1f4bb\",3013],[\"1f9d1-1f3ff-200d-1f4bb\",3014],[\"1f9d1-1f3fb-200d-1f4bc\",3015],[\"1f9d1-1f3fc-200d-1f4bc\",3016],[\"1f9d1-1f3fd-200d-1f4bc\",3017],[\"1f9d1-1f3fe-200d-1f4bc\",3018],[\"1f9d1-1f3ff-200d-1f4bc\",3019],[\"1f9d1-1f3fb-200d-1f527\",3020],[\"1f9d1-1f3fc-200d-1f527\",3021],[\"1f9d1-1f3fd-200d-1f527\",3022],[\"1f9d1-1f3fe-200d-1f527\",3023],[\"1f9d1-1f3ff-200d-1f527\",3024],[\"1f9d1-1f3fb-200d-1f52c\",3025],[\"1f9d1-1f3fc-200d-1f52c\",3026],[\"1f9d1-1f3fd-200d-1f52c\",3027],[\"1f9d1-1f3fe-200d-1f52c\",3028],[\"1f9d1-1f3ff-200d-1f52c\",3029],[\"1f9d1-1f3fb-200d-1f680\",3030],[\"1f9d1-1f3fc-200d-1f680\",3031],[\"1f9d1-1f3fd-200d-1f680\",3032],[\"1f9d1-1f3fe-200d-1f680\",3033],[\"1f9d1-1f3ff-200d-1f680\",3034],[\"1f9d1-1f3fb-200d-1f692\",3035],[\"1f9d1-1f3fc-200d-1f692\",3036],[\"1f9d1-1f3fd-200d-1f692\",3037],[\"1f9d1-1f3fe-200d-1f692\",3038],[\"1f9d1-1f3ff-200d-1f692\",3039],[\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb\",3040],[\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc\",3041],[\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd\",3042],[\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe\",3043],[\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff\",3044],[\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb\",3045],[\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc\",3046],[\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd\",3047],[\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe\",3048],[\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff\",3049],[\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb\",3050],[\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc\",3051],[\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd\",3052],[\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe\",3053],[\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff\",3054],[\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb\",3055],[\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc\",3056],[\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd\",3057],[\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe\",3058],[\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff\",3059],[\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb\",3060],[\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc\",3061],[\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd\",3062],[\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe\",3063],[\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff\",3064],[\"1f9d1-1f3fb-200d-1f9af\",3065],[\"1f9d1-1f3fc-200d-1f9af\",3066],[\"1f9d1-1f3fd-200d-1f9af\",3067],[\"1f9d1-1f3fe-200d-1f9af\",3068],[\"1f9d1-1f3ff-200d-1f9af\",3069],[\"1f9d1-1f3fb-200d-1f9b0\",3070],[\"1f9d1-1f3fc-200d-1f9b0\",3071],[\"1f9d1-1f3fd-200d-1f9b0\",3072],[\"1f9d1-1f3fe-200d-1f9b0\",3073],[\"1f9d1-1f3ff-200d-1f9b0\",3074],[\"1f9d1-1f3fb-200d-1f9b1\",3075],[\"1f9d1-1f3fc-200d-1f9b1\",3076],[\"1f9d1-1f3fd-200d-1f9b1\",3077],[\"1f9d1-1f3fe-200d-1f9b1\",3078],[\"1f9d1-1f3ff-200d-1f9b1\",3079],[\"1f9d1-1f3fb-200d-1f9b2\",3080],[\"1f9d1-1f3fc-200d-1f9b2\",3081],[\"1f9d1-1f3fd-200d-1f9b2\",3082],[\"1f9d1-1f3fe-200d-1f9b2\",3083],[\"1f9d1-1f3ff-200d-1f9b2\",3084],[\"1f9d1-1f3fb-200d-1f9b3\",3085],[\"1f9d1-1f3fc-200d-1f9b3\",3086],[\"1f9d1-1f3fd-200d-1f9b3\",3087],[\"1f9d1-1f3fe-200d-1f9b3\",3088],[\"1f9d1-1f3ff-200d-1f9b3\",3089],[\"1f9d1-1f3fb-200d-1f9bc\",3090],[\"1f9d1-1f3fc-200d-1f9bc\",3091],[\"1f9d1-1f3fd-200d-1f9bc\",3092],[\"1f9d1-1f3fe-200d-1f9bc\",3093],[\"1f9d1-1f3ff-200d-1f9bc\",3094],[\"1f9d1-1f3fb-200d-1f9bd\",3095],[\"1f9d1-1f3fc-200d-1f9bd\",3096],[\"1f9d1-1f3fd-200d-1f9bd\",3097],[\"1f9d1-1f3fe-200d-1f9bd\",3098],[\"1f9d1-1f3ff-200d-1f9bd\",3099],[\"1f9d1-1f3fb-200d-2695-fe0f\",3100],[\"1f9d1-1f3fc-200d-2695-fe0f\",3101],[\"1f9d1-1f3fd-200d-2695-fe0f\",3102],[\"1f9d1-1f3fe-200d-2695-fe0f\",3103],[\"1f9d1-1f3ff-200d-2695-fe0f\",3104],[\"1f9d1-1f3fb-200d-2696-fe0f\",3105],[\"1f9d1-1f3fc-200d-2696-fe0f\",3106],[\"1f9d1-1f3fd-200d-2696-fe0f\",3107],[\"1f9d1-1f3fe-200d-2696-fe0f\",3108],[\"1f9d1-1f3ff-200d-2696-fe0f\",3109],[\"1f9d1-1f3fb-200d-2708-fe0f\",3110],[\"1f9d1-1f3fc-200d-2708-fe0f\",3111],[\"1f9d1-1f3fd-200d-2708-fe0f\",3112],[\"1f9d1-1f3fe-200d-2708-fe0f\",3113],[\"1f9d1-1f3ff-200d-2708-fe0f\",3114],[\"1f9d1-1f3fb\",3115],[\"1f9d1-1f3fc\",3116],[\"1f9d1-1f3fd\",3117],[\"1f9d1-1f3fe\",3118],[\"1f9d1-1f3ff\",3119],[\"1f9d2-1f3fb\",3120],[\"1f9d2-1f3fc\",3121],[\"1f9d2-1f3fd\",3122],[\"1f9d2-1f3fe\",3123],[\"1f9d2-1f3ff\",3124],[\"1f9d3-1f3fb\",3125],[\"1f9d3-1f3fc\",3126],[\"1f9d3-1f3fd\",3127],[\"1f9d3-1f3fe\",3128],[\"1f9d3-1f3ff\",3129],[\"1f9d4-1f3fb\",3130],[\"1f9d4-1f3fc\",3131],[\"1f9d4-1f3fd\",3132],[\"1f9d4-1f3fe\",3133],[\"1f9d4-1f3ff\",3134],[\"1f9d5-1f3fb\",3135],[\"1f9d5-1f3fc\",3136],[\"1f9d5-1f3fd\",3137],[\"1f9d5-1f3fe\",3138],[\"1f9d5-1f3ff\",3139],[\"1f9d6-1f3fb-200d-2640-fe0f\",3140],[\"1f9d6-1f3fc-200d-2640-fe0f\",3141],[\"1f9d6-1f3fd-200d-2640-fe0f\",3142],[\"1f9d6-1f3fe-200d-2640-fe0f\",3143],[\"1f9d6-1f3ff-200d-2640-fe0f\",3144],[\"1f9d6-1f3fb-200d-2642-fe0f\",3145],[\"1f9d6-1f3fc-200d-2642-fe0f\",3146],[\"1f9d6-1f3fd-200d-2642-fe0f\",3147],[\"1f9d6-1f3fe-200d-2642-fe0f\",3148],[\"1f9d6-1f3ff-200d-2642-fe0f\",3149],[\"1f9d6-1f3fb\",3150],[\"1f9d6-1f3fc\",3151],[\"1f9d6-1f3fd\",3152],[\"1f9d6-1f3fe\",3153],[\"1f9d6-1f3ff\",3154],[\"1f9d7-1f3fb-200d-2640-fe0f\",3155],[\"1f9d7-1f3fc-200d-2640-fe0f\",3156],[\"1f9d7-1f3fd-200d-2640-fe0f\",3157],[\"1f9d7-1f3fe-200d-2640-fe0f\",3158],[\"1f9d7-1f3ff-200d-2640-fe0f\",3159],[\"1f9d7-1f3fb-200d-2642-fe0f\",3160],[\"1f9d7-1f3fc-200d-2642-fe0f\",3161],[\"1f9d7-1f3fd-200d-2642-fe0f\",3162],[\"1f9d7-1f3fe-200d-2642-fe0f\",3163],[\"1f9d7-1f3ff-200d-2642-fe0f\",3164],[\"1f9d7-1f3fb\",3165],[\"1f9d7-1f3fc\",3166],[\"1f9d7-1f3fd\",3167],[\"1f9d7-1f3fe\",3168],[\"1f9d7-1f3ff\",3169],[\"1f9d8-1f3fb-200d-2640-fe0f\",3170],[\"1f9d8-1f3fc-200d-2640-fe0f\",3171],[\"1f9d8-1f3fd-200d-2640-fe0f\",3172],[\"1f9d8-1f3fe-200d-2640-fe0f\",3173],[\"1f9d8-1f3ff-200d-2640-fe0f\",3174],[\"1f9d8-1f3fb-200d-2642-fe0f\",3175],[\"1f9d8-1f3fc-200d-2642-fe0f\",3176],[\"1f9d8-1f3fd-200d-2642-fe0f\",3177],[\"1f9d8-1f3fe-200d-2642-fe0f\",3178],[\"1f9d8-1f3ff-200d-2642-fe0f\",3179],[\"1f9d8-1f3fb\",3180],[\"1f9d8-1f3fc\",3181],[\"1f9d8-1f3fd\",3182],[\"1f9d8-1f3fe\",3183],[\"1f9d8-1f3ff\",3184],[\"1f9d9-1f3fb-200d-2640-fe0f\",3185],[\"1f9d9-1f3fc-200d-2640-fe0f\",3186],[\"1f9d9-1f3fd-200d-2640-fe0f\",3187],[\"1f9d9-1f3fe-200d-2640-fe0f\",3188],[\"1f9d9-1f3ff-200d-2640-fe0f\",3189],[\"1f9d9-1f3fb-200d-2642-fe0f\",3190],[\"1f9d9-1f3fc-200d-2642-fe0f\",3191],[\"1f9d9-1f3fd-200d-2642-fe0f\",3192],[\"1f9d9-1f3fe-200d-2642-fe0f\",3193],[\"1f9d9-1f3ff-200d-2642-fe0f\",3194],[\"1f9d9-1f3fb\",3195],[\"1f9d9-1f3fc\",3196],[\"1f9d9-1f3fd\",3197],[\"1f9d9-1f3fe\",3198],[\"1f9d9-1f3ff\",3199],[\"1f9da-1f3fb-200d-2640-fe0f\",3200],[\"1f9da-1f3fc-200d-2640-fe0f\",3201],[\"1f9da-1f3fd-200d-2640-fe0f\",3202],[\"1f9da-1f3fe-200d-2640-fe0f\",3203],[\"1f9da-1f3ff-200d-2640-fe0f\",3204],[\"1f9da-1f3fb-200d-2642-fe0f\",3205],[\"1f9da-1f3fc-200d-2642-fe0f\",3206],[\"1f9da-1f3fd-200d-2642-fe0f\",3207],[\"1f9da-1f3fe-200d-2642-fe0f\",3208],[\"1f9da-1f3ff-200d-2642-fe0f\",3209],[\"1f9da-1f3fb\",3210],[\"1f9da-1f3fc\",3211],[\"1f9da-1f3fd\",3212],[\"1f9da-1f3fe\",3213],[\"1f9da-1f3ff\",3214],[\"1f9db-1f3fb-200d-2640-fe0f\",3215],[\"1f9db-1f3fc-200d-2640-fe0f\",3216],[\"1f9db-1f3fd-200d-2640-fe0f\",3217],[\"1f9db-1f3fe-200d-2640-fe0f\",3218],[\"1f9db-1f3ff-200d-2640-fe0f\",3219],[\"1f9db-1f3fb-200d-2642-fe0f\",3220],[\"1f9db-1f3fc-200d-2642-fe0f\",3221],[\"1f9db-1f3fd-200d-2642-fe0f\",3222],[\"1f9db-1f3fe-200d-2642-fe0f\",3223],[\"1f9db-1f3ff-200d-2642-fe0f\",3224],[\"1f9db-1f3fb\",3225],[\"1f9db-1f3fc\",3226],[\"1f9db-1f3fd\",3227],[\"1f9db-1f3fe\",3228],[\"1f9db-1f3ff\",3229],[\"1f9dc-1f3fb-200d-2640-fe0f\",3230],[\"1f9dc-1f3fc-200d-2640-fe0f\",3231],[\"1f9dc-1f3fd-200d-2640-fe0f\",3232],[\"1f9dc-1f3fe-200d-2640-fe0f\",3233],[\"1f9dc-1f3ff-200d-2640-fe0f\",3234],[\"1f9dc-1f3fb-200d-2642-fe0f\",3235],[\"1f9dc-1f3fc-200d-2642-fe0f\",3236],[\"1f9dc-1f3fd-200d-2642-fe0f\",3237],[\"1f9dc-1f3fe-200d-2642-fe0f\",3238],[\"1f9dc-1f3ff-200d-2642-fe0f\",3239],[\"1f9dc-1f3fb\",3240],[\"1f9dc-1f3fc\",3241],[\"1f9dc-1f3fd\",3242],[\"1f9dc-1f3fe\",3243],[\"1f9dc-1f3ff\",3244],[\"1f9dd-1f3fb-200d-2640-fe0f\",3245],[\"1f9dd-1f3fc-200d-2640-fe0f\",3246],[\"1f9dd-1f3fd-200d-2640-fe0f\",3247],[\"1f9dd-1f3fe-200d-2640-fe0f\",3248],[\"1f9dd-1f3ff-200d-2640-fe0f\",3249],[\"1f9dd-1f3fb-200d-2642-fe0f\",3250],[\"1f9dd-1f3fc-200d-2642-fe0f\",3251],[\"1f9dd-1f3fd-200d-2642-fe0f\",3252],[\"1f9dd-1f3fe-200d-2642-fe0f\",3253],[\"1f9dd-1f3ff-200d-2642-fe0f\",3254],[\"1f9dd-1f3fb\",3255],[\"1f9dd-1f3fc\",3256],[\"1f9dd-1f3fd\",3257],[\"1f9dd-1f3fe\",3258],[\"1f9dd-1f3ff\",3259],[\"261d-1f3fb\",3260],[\"261d-1f3fc\",3261],[\"261d-1f3fd\",3262],[\"261d-1f3fe\",3263],[\"261d-1f3ff\",3264],[\"26f9-1f3fb-200d-2640-fe0f\",3265],[\"26f9-1f3fc-200d-2640-fe0f\",3266],[\"26f9-1f3fd-200d-2640-fe0f\",3267],[\"26f9-1f3fe-200d-2640-fe0f\",3268],[\"26f9-1f3ff-200d-2640-fe0f\",3269],[\"26f9-1f3fb-200d-2642-fe0f\",3270],[\"26f9-1f3fc-200d-2642-fe0f\",3271],[\"26f9-1f3fd-200d-2642-fe0f\",3272],[\"26f9-1f3fe-200d-2642-fe0f\",3273],[\"26f9-1f3ff-200d-2642-fe0f\",3274],[\"26f9-1f3fb\",3275],[\"26f9-1f3fc\",3276],[\"26f9-1f3fd\",3277],[\"26f9-1f3fe\",3278],[\"26f9-1f3ff\",3279],[\"270a-1f3fb\",3280],[\"270a-1f3fc\",3281],[\"270a-1f3fd\",3282],[\"270a-1f3fe\",3283],[\"270a-1f3ff\",3284],[\"270b-1f3fb\",3285],[\"270b-1f3fc\",3286],[\"270b-1f3fd\",3287],[\"270b-1f3fe\",3288],[\"270b-1f3ff\",3289],[\"270c-1f3fb\",3290],[\"270c-1f3fc\",3291],[\"270c-1f3fd\",3292],[\"270c-1f3fe\",3293],[\"270c-1f3ff\",3294],[\"270d-1f3fb\",3295],[\"270d-1f3fc\",3296],[\"270d-1f3fd\",3297],[\"270d-1f3fe\",3298],[\"270d-1f3ff\",3299]]);\n\nexport const CategoryNames = [\"recent\",\"smileys-emotion\",\"people-body\",\"animals-nature\",\"food-drink\",\"travel-places\",\"activities\",\"objects\",\"symbols\",\"flags\",\"custom\"];\n\nconst AllEmojiIndicesByCategory = new Map([[\"smileys-emotion\",[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150]],[\"people-body\",[151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299]],[\"component\",[498,499,500,501,502]],[\"animals-nature\",[503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642]],[\"food-drink\",[643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771]],[\"travel-places\",[772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986]],[\"activities\",[987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070]],[\"objects\",[1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320]],[\"symbols\",[1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540]],[\"flags\",[1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809]],[\"custom\",[3300]]]);\n\nconst EmojiIndicesByCategoryAndSkin = new Map([['default', new Map([[\"people-body\",[151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,181,182,183,184,185,188,189,190,191,192,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,401,402,403,404,405,406,408,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458]]])], ['1F3FB', new Map([[\"people-body\",[1810,1815,1820,1825,1830,1835,1840,1845,1850,1855,1860,1865,1870,1875,1880,1885,1890,1895,1900,1905,1910,1915,1920,1925,1930,1935,1940,1945,1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100,2105,2110,2115,2120,2125,2130,2135,2140,2145,2150,2155,2160,2165,2170,2175,2180,2185,2190,2195,2200,2205,2210,2215,2220,2225,2230,2231,2232,2233,2250,2255,2256,2257,2258,2275,2280,2281,2282,2283,2300,2305,2310,2315,2320,2325,2330,2335,2340,2345,2350,2355,2360,2365,2370,2375,2380,2385,2390,2395,2400,2405,2410,2415,2420,2425,2430,2435,2440,2445,2450,2455,2460,2465,2470,2475,2480,2485,2490,2495,2500,2505,2510,2515,2520,2525,2530,2535,2540,2545,2550,2555,2560,2565,2570,2575,2580,2585,2590,2595,2600,2605,2610,2615,2620,2625,2630,2635,2640,2645,2650,2655,2660,2665,2670,2675,2680,2685,2690,2695,2700,2705,2710,2715,2720,2725,2730,2735,2740,2745,2750,2755,2760,2765,2770,2775,2780,2785,2790,2795,2800,2805,2810,2815,2820,2825,2830,2835,2840,2845,2850,2855,2860,2865,2870,2875,2880,2885,2890,2895,2900,2905,2910,2915,2920,2925,2930,2935,2940,2945,2950,2955,2960,2965,2970,2975,2980,2985,2990,2995,3000,3005,3010,3015,3020,3025,3030,3035,3040,3041,3042,3043,3044,3065,3070,3075,3080,3085,3090,3095,3100,3105,3110,3115,3120,3125,3130,3135,3140,3145,3150,3155,3160,3165,3170,3175,3180,3185,3190,3195,3200,3205,3210,3215,3220,3225,3230,3235,3240,3245,3250,3255,3260,3265,3270,3275,3280,3285,3290,3295]]])], ['1F3FC', new Map([[\"people-body\",[1811,1816,1821,1826,1831,1836,1841,1846,1851,1856,1861,1866,1871,1876,1881,1886,1891,1896,1901,1906,1911,1916,1921,1926,1931,1936,1941,1946,1951,1956,1961,1966,1971,1976,1981,1986,1991,1996,2001,2006,2011,2016,2021,2026,2031,2036,2041,2046,2051,2056,2061,2066,2071,2076,2081,2086,2091,2096,2101,2106,2111,2116,2121,2126,2131,2136,2141,2146,2151,2156,2161,2166,2171,2176,2181,2186,2191,2196,2201,2206,2211,2216,2221,2226,2234,2235,2236,2237,2251,2259,2260,2261,2262,2276,2284,2285,2286,2287,2301,2306,2311,2316,2321,2326,2331,2336,2341,2346,2351,2356,2361,2366,2371,2376,2381,2386,2391,2396,2401,2406,2411,2416,2421,2426,2431,2436,2441,2446,2451,2456,2461,2466,2471,2476,2481,2486,2491,2496,2501,2506,2511,2516,2521,2526,2531,2536,2541,2546,2551,2556,2561,2566,2571,2576,2581,2586,2591,2596,2601,2606,2611,2616,2621,2626,2631,2636,2641,2646,2651,2656,2661,2666,2671,2676,2681,2686,2691,2696,2701,2706,2711,2716,2721,2726,2731,2736,2741,2746,2751,2756,2761,2766,2771,2776,2781,2786,2791,2796,2801,2806,2811,2816,2821,2826,2831,2836,2841,2846,2851,2856,2861,2866,2871,2876,2881,2886,2891,2896,2901,2906,2911,2916,2921,2926,2931,2936,2941,2946,2951,2956,2961,2966,2971,2976,2981,2986,2991,2996,3001,3006,3011,3016,3021,3026,3031,3036,3045,3046,3047,3048,3049,3066,3071,3076,3081,3086,3091,3096,3101,3106,3111,3116,3121,3126,3131,3136,3141,3146,3151,3156,3161,3166,3171,3176,3181,3186,3191,3196,3201,3206,3211,3216,3221,3226,3231,3236,3241,3246,3251,3256,3261,3266,3271,3276,3281,3286,3291,3296]]])], ['1F3FD', new Map([[\"people-body\",[1812,1817,1822,1827,1832,1837,1842,1847,1852,1857,1862,1867,1872,1877,1882,1887,1892,1897,1902,1907,1912,1917,1922,1927,1932,1937,1942,1947,1952,1957,1962,1967,1972,1977,1982,1987,1992,1997,2002,2007,2012,2017,2022,2027,2032,2037,2042,2047,2052,2057,2062,2067,2072,2077,2082,2087,2092,2097,2102,2107,2112,2117,2122,2127,2132,2137,2142,2147,2152,2157,2162,2167,2172,2177,2182,2187,2192,2197,2202,2207,2212,2217,2222,2227,2238,2239,2240,2241,2252,2263,2264,2265,2266,2277,2288,2289,2290,2291,2302,2307,2312,2317,2322,2327,2332,2337,2342,2347,2352,2357,2362,2367,2372,2377,2382,2387,2392,2397,2402,2407,2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2477,2482,2487,2492,2497,2502,2507,2512,2517,2522,2527,2532,2537,2542,2547,2552,2557,2562,2567,2572,2577,2582,2587,2592,2597,2602,2607,2612,2617,2622,2627,2632,2637,2642,2647,2652,2657,2662,2667,2672,2677,2682,2687,2692,2697,2702,2707,2712,2717,2722,2727,2732,2737,2742,2747,2752,2757,2762,2767,2772,2777,2782,2787,2792,2797,2802,2807,2812,2817,2822,2827,2832,2837,2842,2847,2852,2857,2862,2867,2872,2877,2882,2887,2892,2897,2902,2907,2912,2917,2922,2927,2932,2937,2942,2947,2952,2957,2962,2967,2972,2977,2982,2987,2992,2997,3002,3007,3012,3017,3022,3027,3032,3037,3050,3051,3052,3053,3054,3067,3072,3077,3082,3087,3092,3097,3102,3107,3112,3117,3122,3127,3132,3137,3142,3147,3152,3157,3162,3167,3172,3177,3182,3187,3192,3197,3202,3207,3212,3217,3222,3227,3232,3237,3242,3247,3252,3257,3262,3267,3272,3277,3282,3287,3292,3297]]])], ['1F3FE', new Map([[\"people-body\",[1813,1818,1823,1828,1833,1838,1843,1848,1853,1858,1863,1868,1873,1878,1883,1888,1893,1898,1903,1908,1913,1918,1923,1928,1933,1938,1943,1948,1953,1958,1963,1968,1973,1978,1983,1988,1993,1998,2003,2008,2013,2018,2023,2028,2033,2038,2043,2048,2053,2058,2063,2068,2073,2078,2083,2088,2093,2098,2103,2108,2113,2118,2123,2128,2133,2138,2143,2148,2153,2158,2163,2168,2173,2178,2183,2188,2193,2198,2203,2208,2213,2218,2223,2228,2242,2243,2244,2245,2253,2267,2268,2269,2270,2278,2292,2293,2294,2295,2303,2308,2313,2318,2323,2328,2333,2338,2343,2348,2353,2358,2363,2368,2373,2378,2383,2388,2393,2398,2403,2408,2413,2418,2423,2428,2433,2438,2443,2448,2453,2458,2463,2468,2473,2478,2483,2488,2493,2498,2503,2508,2513,2518,2523,2528,2533,2538,2543,2548,2553,2558,2563,2568,2573,2578,2583,2588,2593,2598,2603,2608,2613,2618,2623,2628,2633,2638,2643,2648,2653,2658,2663,2668,2673,2678,2683,2688,2693,2698,2703,2708,2713,2718,2723,2728,2733,2738,2743,2748,2753,2758,2763,2768,2773,2778,2783,2788,2793,2798,2803,2808,2813,2818,2823,2828,2833,2838,2843,2848,2853,2858,2863,2868,2873,2878,2883,2888,2893,2898,2903,2908,2913,2918,2923,2928,2933,2938,2943,2948,2953,2958,2963,2968,2973,2978,2983,2988,2993,2998,3003,3008,3013,3018,3023,3028,3033,3038,3055,3056,3057,3058,3059,3068,3073,3078,3083,3088,3093,3098,3103,3108,3113,3118,3123,3128,3133,3138,3143,3148,3153,3158,3163,3168,3173,3178,3183,3188,3193,3198,3203,3208,3213,3218,3223,3228,3233,3238,3243,3248,3253,3258,3263,3268,3273,3278,3283,3288,3293,3298]]])], ['1F3FF', new Map([[\"people-body\",[1814,1819,1824,1829,1834,1839,1844,1849,1854,1859,1864,1869,1874,1879,1884,1889,1894,1899,1904,1909,1914,1919,1924,1929,1934,1939,1944,1949,1954,1959,1964,1969,1974,1979,1984,1989,1994,1999,2004,2009,2014,2019,2024,2029,2034,2039,2044,2049,2054,2059,2064,2069,2074,2079,2084,2089,2094,2099,2104,2109,2114,2119,2124,2129,2134,2139,2144,2149,2154,2159,2164,2169,2174,2179,2184,2189,2194,2199,2204,2209,2214,2219,2224,2229,2246,2247,2248,2249,2254,2271,2272,2273,2274,2279,2296,2297,2298,2299,2304,2309,2314,2319,2324,2329,2334,2339,2344,2349,2354,2359,2364,2369,2374,2379,2384,2389,2394,2399,2404,2409,2414,2419,2424,2429,2434,2439,2444,2449,2454,2459,2464,2469,2474,2479,2484,2489,2494,2499,2504,2509,2514,2519,2524,2529,2534,2539,2544,2549,2554,2559,2564,2569,2574,2579,2584,2589,2594,2599,2604,2609,2614,2619,2624,2629,2634,2639,2644,2649,2654,2659,2664,2669,2674,2679,2684,2689,2694,2699,2704,2709,2714,2719,2724,2729,2734,2739,2744,2749,2754,2759,2764,2769,2774,2779,2784,2789,2794,2799,2804,2809,2814,2819,2824,2829,2834,2839,2844,2849,2854,2859,2864,2869,2874,2879,2884,2889,2894,2899,2904,2909,2914,2919,2924,2929,2934,2939,2944,2949,2954,2959,2964,2969,2974,2979,2984,2989,2994,2999,3004,3009,3014,3019,3024,3029,3034,3039,3060,3061,3062,3063,3064,3069,3074,3079,3084,3089,3094,3099,3104,3109,3114,3119,3124,3129,3134,3139,3144,3149,3154,3159,3164,3169,3174,3179,3184,3189,3194,3199,3204,3209,3214,3219,3224,3229,3234,3239,3244,3249,3254,3259,3264,3269,3274,3279,3284,3289,3294,3299]]])]]);\nconst EmojiIndicesByCategoryNoSkin = new Map([[\"smileys-emotion\",[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150]],[\"people-body\",[180,186,187,193,194,195,196,197,198,199,200,201,362,363,364,365,366,367,398,399,400,407,409,438,439,440,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497]],[\"component\",[498,499,500,501,502]],[\"animals-nature\",[503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642]],[\"food-drink\",[643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771]],[\"travel-places\",[772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986]],[\"activities\",[987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070]],[\"objects\",[1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320]],[\"symbols\",[1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540]],[\"flags\",[1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809]],[\"custom\",[3300]]]);\n\nconst skinCodes = {\"1F3FB\":\"light_skin_tone\",\"1F3FC\":\"medium_light_skin_tone\",\"1F3FD\":\"medium_skin_tone\",\"1F3FE\":\"medium_dark_skin_tone\",\"1F3FF\":\"dark_skin_tone\",\"default\":\"default\"};\n\n// Generate the list of indices that belong to each category by an specified skin\nfunction genSkinnedCategories(skin: string) {\n const result = new Map();\n for (const cat of CategoryNames) {\n const indices = [];\n const skinCat = (EmojiIndicesByCategoryAndSkin.get(skin) || new Map()).get(cat) || [];\n indices.push(...(EmojiIndicesByCategoryNoSkin.get(cat) || []));\n indices.push(...skinCat);\n\n result.set(cat, indices);\n }\n return result;\n}\n\nconst getSkinnedCategories = memoize(genSkinnedCategories);\nexport const EmojiIndicesByCategory = new Map([['default', genSkinnedCategories('default')], ['1F3FB', genSkinnedCategories('1F3FB')], ['1F3FC', genSkinnedCategories('1F3FC')], ['1F3FD', genSkinnedCategories('1F3FD')], ['1F3FE', genSkinnedCategories('1F3FE')], ['1F3FF', genSkinnedCategories('1F3FF')]]);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {CustomEmoji, Emoji, SystemEmoji} from '@mattermost/types/emojis';\n\nimport {EmojiIndicesByAlias, EmojiIndicesByUnicode, Emojis} from 'utils/emoji';\n\n// Wrap the contents of the store so that we don't need to construct an ES6 map where most of the content\n// (the system emojis) will never change. It provides the get/has functions of a map and an iterator so\n// that it can be used in for..of loops\nexport default class EmojiMap {\n public customEmojis: Map; // This should probably be private\n private customEmojisArray: Array<[string, CustomEmoji]>;\n\n constructor(customEmojis: Map) {\n this.customEmojis = customEmojis;\n\n // Store customEmojis to an array so we can iterate it more easily\n this.customEmojisArray = [...customEmojis];\n }\n\n has(name: string): boolean {\n return EmojiIndicesByAlias.has(name) || this.customEmojis.has(name);\n }\n\n hasSystemEmoji(name: string): boolean {\n return EmojiIndicesByAlias.has(name);\n }\n\n hasUnicode(codepoint: string): boolean {\n return EmojiIndicesByUnicode.has(codepoint);\n }\n\n get(name: string): Emoji | undefined {\n if (EmojiIndicesByAlias.has(name)) {\n return Emojis[EmojiIndicesByAlias.get(name) as number];\n }\n\n return this.customEmojis.get(name);\n }\n\n getUnicode(codepoint: string): SystemEmoji | undefined {\n return Emojis[EmojiIndicesByUnicode.get(codepoint) as number];\n }\n\n [Symbol.iterator](): Iterator<[string, Emoji]> {\n const customEmojisArray = this.customEmojisArray;\n\n let systemIndex = 0;\n let customIndex = 0;\n\n return {\n next(): IteratorResult<[string, Emoji]> {\n // We loop throgh system emojis first, by progressively incrementing systemIndex until we reach the end of system emojis array\n if (systemIndex < Emojis.length) {\n const systemEmoji = Emojis[systemIndex] as SystemEmoji;\n\n systemIndex += 1;\n\n return {value: [systemEmoji.short_names[0], systemEmoji]};\n }\n\n // Then we loop through custom emojis\n if (customIndex < customEmojisArray.length) {\n const customEmoji = customEmojisArray[customIndex][1] as CustomEmoji;\n\n customIndex += 1;\n\n return {value: [customEmoji.name, customEmoji]};\n }\n\n // When we have looped through all, we return done\n return {done: true, value: undefined};\n },\n };\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport emojiRegex from 'emoji-regex';\nimport React from 'react';\n\nimport type {Emoji, SystemEmoji} from '@mattermost/types/emojis';\n\nimport {EmojiIndicesByUnicode, Emojis} from 'utils/emoji';\n\nconst defaultRule = (aName: string, bName: string, emojiA: Emoji, emojiB: Emoji) => {\n if (emojiA.category === 'custom' && emojiB.category !== 'custom') {\n return 1;\n } else if (emojiB.category === 'custom' && emojiA.category !== 'custom') {\n return -1;\n }\n\n return aName.localeCompare(bName);\n};\n\nconst thumbsDownRule = (otherName: string) => {\n if (otherName === 'thumbsup' || otherName === '+1') {\n return 1;\n }\n return 0;\n};\n\nconst thumbsUpRule = (otherName: string) => {\n if (otherName === 'thumbsdown' || otherName === '-1') {\n return -1;\n }\n return 0;\n};\n\nconst customRules: Record number> = {\n thumbsdown: thumbsDownRule,\n '-1': thumbsDownRule,\n thumbsup: thumbsUpRule,\n '+1': thumbsUpRule,\n};\n\nconst getEmojiName = (emoji: Emoji, searchedName: string) => {\n // There's an edge case for custom emojis that start with a thumb prefix.\n // It doesn't match the first alias for the relevant system emoji.\n // We don't have control over the names or aliases of custom emojis...\n // ... and how they compare to the relevant system ones.\n // So we need to search for a matching alias in the whole array.\n // E.g. thumbsup-custom vs [+1, thumbsup]\n if (!emoji) {\n return '';\n }\n\n // does it have aliases?\n if (searchedName && 'short_names' in emoji) {\n return emoji.short_names.find((alias: string) => alias.startsWith(searchedName)) || emoji.short_name;\n }\n\n return 'short_name' in emoji ? emoji.short_name : emoji.name;\n};\n\nexport function compareEmojis(emojiA: Emoji, emojiB: Emoji, searchedName: string) {\n const aName = getEmojiName(emojiA, searchedName);\n const bName = getEmojiName(emojiB, searchedName);\n\n // Have the emojis that starts with the search appear first\n const aPrefix = aName.startsWith(searchedName);\n const bPrefix = bName.startsWith(searchedName);\n\n if (aPrefix === bPrefix) {\n if (aName in customRules) {\n return customRules[aName](bName) || defaultRule(aName, bName, emojiA, emojiB);\n }\n\n return defaultRule(aName, bName, emojiA, emojiB);\n } else if (aPrefix) {\n return -1;\n }\n\n return 1;\n}\n\n// wrapEmojis takes a text string and returns it with any Unicode emojis wrapped by a span with the emoji class.\nexport function wrapEmojis(text: string): React.ReactNode {\n const nodes = [];\n\n let lastIndex = 0;\n\n // Manually split the string into an array of strings and spans wrapping individual emojis\n for (const match of text.matchAll(emojiRegex())) {\n const emoji = match[0];\n const index = match.index!;\n\n if (match.index !== lastIndex) {\n nodes.push(text.substring(lastIndex, index));\n }\n\n nodes.push(\n \n {emoji}\n ,\n );\n\n // Remember that emojis can be multiple code points long when incrementing the index\n lastIndex = index + emoji.length;\n }\n\n if (lastIndex < text.length) {\n nodes.push(text.substring(lastIndex));\n }\n\n // Only return an array if we're returning multiple nodes\n return nodes.length === 1 ? nodes[0] : nodes;\n}\n\n// Note : This function is not an idea implementation, a more better and efficeint way to do this come when we make changes to emoji json.\nexport function convertEmojiSkinTone(emoji: SystemEmoji, newSkinTone: string): SystemEmoji {\n let newEmojiId = '';\n\n if (!emoji.skins && !emoji.skin_variations) {\n // Don't change the skin tone of an emoji without skin tone variations\n return emoji;\n }\n\n if (emoji.skins && emoji.skins.length > 1) {\n // Don't change the skin tone of emojis affected by multiple skin tones\n return emoji;\n }\n\n const currentSkinTone = getSkin(emoji);\n\n // If its a default (yellow) emoji, get the skin variation from its property\n if (currentSkinTone === 'default') {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const variation = Object.keys(emoji?.skin_variations).find((skinVariation) => skinVariation.includes(newSkinTone));\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n newEmojiId = variation ? emoji.skin_variations[variation].unified : emoji.unified;\n } else if (newSkinTone === 'default') {\n // If default (yellow) skin is selected, remove the skin code from emoji id\n newEmojiId = emoji.unified.replaceAll(/-(1F3FB|1F3FC|1F3FD|1F3FE|1F3FF)/g, '');\n } else {\n // If non default skin is selected, add the new skin selected code to emoji id\n newEmojiId = emoji.unified.replaceAll(/(1F3FB|1F3FC|1F3FD|1F3FE|1F3FF)/g, newSkinTone);\n }\n\n let emojiIndex = EmojiIndicesByUnicode.get(newEmojiId.toLowerCase()) as number;\n let newEmoji = Emojis[emojiIndex];\n\n if (!newEmoji) {\n // The emoji wasn't found, possibly because it needs a variation selector appended (FE0F) appended for some reason.\n // This is needed for certain emojis like point_up which is 261d-fe0f instead of just 261d\n emojiIndex = EmojiIndicesByUnicode.get(newEmojiId.toLowerCase() + '-fe0f') as number;\n newEmoji = Emojis[emojiIndex];\n }\n\n return newEmoji ?? emoji;\n}\n\n// if an emoji\n// - has `skin_variations` then it uses the default skin (yellow)\n// - has `skins` it's first value is considered the skin version (it can contain more values)\n// - any other case it doesn't have variations or is a custom emoji.\nexport function getSkin(emoji: Emoji) {\n if ('skin_variations' in emoji) {\n return 'default';\n }\n if ('skins' in emoji) {\n const skin = emoji?.skins?.[0] ?? '';\n\n if (skin.length !== 0) {\n return skin;\n }\n }\n return null;\n}\n\nexport function trimmedEmojiName(emojiName: string) {\n return emojiName.startsWith(':') && emojiName.endsWith(':') ? emojiName.slice(1, -1) : emojiName;\n}\n\nexport function emojiMatchesSkin(emoji: Emoji, skin: string) {\n const emojiSkin = getSkin(emoji);\n return !emojiSkin || emojiSkin === skin;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {formatWithRenderer} from './markdown';\nimport PlainRenderer from './markdown/plain_renderer';\n\nexport const emoticonPatterns: { [key: string]: RegExp } = {\n slightly_smiling_face: /(^|\\B)(:-?\\))($|\\B)/g, // :)\n wink: /(^|\\B)(;-?\\))($|\\B)/g, // ;)\n open_mouth: /(^|\\B)(:o)($|\\b)/gi, // :o\n scream: /(^|\\B)(:-o)($|\\b)/gi, // :-o\n smirk: /(^|\\B)(:-?])($|\\B)/g, // :]\n smile: /(^|\\B)(:-?d)($|\\b)/gi, // :D\n stuck_out_tongue_closed_eyes: /(^|\\b)(x-d)($|\\b)/gi, // x-d\n stuck_out_tongue: /(^|\\B)(:-?p)($|\\b)/gi, // :p\n rage: /(^|\\B)(:-?[[@])($|\\B)/g, // :@\n slightly_frowning_face: /(^|\\B)(:-?\\()($|\\B)/g, // :(\n cry: /(^|\\B)(:[`'’]-?\\(|:'\\(|:'\\()($|\\B)/g, // :`(\n confused: /(^|\\B)(:-?\\/)($|\\B)/g, // :/\n confounded: /(^|\\B)(:-?s)($|\\b)/gi, // :s\n neutral_face: /(^|\\B)(:-?\\|)($|\\B)/g, // :|\n flushed: /(^|\\B)(:-?\\$)($|\\B)/g, // :$\n mask: /(^|\\B)(:-x)($|\\b)/gi, // :-x\n heart: /(^|\\B)(<3|<3)($|\\b)/g, // <3\n broken_heart: /(^|\\B)(<\\/3|<\\/3)($|\\b)/g, // ,\n): string {\n let output = text;\n\n function replaceEmoticonWithToken(\n fullMatch: string,\n prefix: string,\n matchText: string,\n name: string,\n ): string {\n const index = tokens.size;\n const alias = `$MM_EMOTICON${index}$`;\n\n tokens.set(alias, {\n value: renderEmoji(name, matchText),\n originalText: fullMatch,\n });\n\n return prefix + alias;\n }\n\n // match named emoticons like :goat:\n output = output.replace(\n EMOJI_PATTERN,\n (fullMatch: string, matchText: string, name: string): string =>\n replaceEmoticonWithToken(fullMatch, '', matchText, name),\n );\n\n // match text smilies like :D\n for (const name of Object.keys(emoticonPatterns)) {\n const pattern = emoticonPatterns[name];\n\n // this might look a bit funny, but since the name isn't contained in the actual match\n // like with the named emoticons, we need to add it in manually\n output = output.replace(pattern, (fullMatch, prefix, matchText) => replaceEmoticonWithToken(fullMatch, prefix, matchText, name));\n }\n\n return output;\n}\n\nexport function renderEmoji(name: string, matchText: string): string {\n return `${matchText}`;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport Constants from 'utils/constants';\nimport * as UserAgent from 'utils/user_agent';\n\nexport function cmdOrCtrlPressed(e: React.KeyboardEvent | KeyboardEvent, allowAlt = false) {\n const isMac = UserAgent.isMac();\n\n if (allowAlt) {\n return (isMac && e.metaKey) || (!isMac && e.ctrlKey);\n }\n return (isMac && e.metaKey) || (!isMac && e.ctrlKey && !e.altKey);\n}\n\nexport function isKeyPressed(event: React.KeyboardEvent | KeyboardEvent, key: [string, number]) {\n // There are two types of keyboards\n // 1. English with different layouts(Ex: Dvorak)\n // 2. Different language keyboards(Ex: Russian)\n\n if (event.keyCode === Constants.KeyCodes.COMPOSING[1]) {\n return false;\n }\n\n // checks for event.key for older browsers and also for the case of different English layout keyboards.\n if (typeof event.key !== 'undefined' && event.key !== 'Unidentified' && event.key !== 'Dead') {\n const isPressedByCode = event.key === key[0] || event.key === key[0].toUpperCase();\n if (isPressedByCode) {\n return true;\n }\n }\n\n // used for different language keyboards to detect the position of keys\n return event.keyCode === key[1];\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport marked from 'marked';\n\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\n\nimport store from 'stores/redux_store';\n\nimport type EmojiMap from 'utils/emoji_map';\nimport RemoveMarkdown from 'utils/markdown/remove_markdown';\nimport {convertEntityToCharacter} from 'utils/text_formatting';\n\nimport Renderer from './renderer';\n\nconst removeMarkdown = new RemoveMarkdown();\n\nexport function format(text: string, options = {}, emojiMap?: EmojiMap) {\n return formatWithRenderer(text, new Renderer({}, options, emojiMap));\n}\n\nexport function formatWithRenderer(text: string, renderer: marked.Renderer) {\n const config = getConfig(store.getState());\n\n const markdownOptions = {\n renderer,\n sanitize: true,\n gfm: true,\n tables: true,\n mangle: false,\n inlinelatex: config.EnableLatex === 'true' && config.EnableInlineLatex === 'true',\n };\n\n return marked(text, markdownOptions).trim();\n}\n\nexport function stripMarkdown(text: string) {\n if (typeof text === 'string' && text.length > 0) {\n return convertEntityToCharacter(\n formatWithRenderer(text, removeMarkdown),\n ).trim();\n }\n\n return text;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {EMOJI_PATTERN} from 'utils/emoticons';\n\nimport PlainRenderer from './plain_renderer';\n\n/** A Markdown renderer that converts a post into plain text that we can search for mentions */\nexport default class MentionableRenderer extends PlainRenderer {\n public text(text: string) {\n // Remove all emojis\n return text.replace(EMOJI_PATTERN, '');\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport marked from 'marked';\n\n/** A Markdown renderer that converts a post into plain text */\nexport default class PlainRenderer extends marked.Renderer {\n public code() {\n // Code blocks can't contain mentions\n return '\\n';\n }\n\n public blockquote(text: string) {\n return text + '\\n';\n }\n\n public heading(text: string) {\n return text + '\\n';\n }\n\n public hr() {\n return '\\n';\n }\n\n public list(body: string) {\n return body + '\\n';\n }\n\n public listitem(text: string) {\n return text + '\\n';\n }\n\n public paragraph(text: string) {\n return text + '\\n';\n }\n\n public table(header: string, body: string) {\n return header + '\\n' + body;\n }\n\n public tablerow(content: string) {\n return content;\n }\n\n public tablecell(content: string) {\n return content + '\\n';\n }\n\n public strong(text: string) {\n return ' ' + text + ' ';\n }\n\n public em(text: string) {\n return ' ' + text + ' ';\n }\n\n public codespan() {\n // Code spans can't contain mentions\n return ' ';\n }\n\n public br() {\n return '\\n';\n }\n\n public del(text: string) {\n return ' ' + text + ' ';\n }\n\n public link(href: string, title: string, text: string) {\n return ' ' + text + ' ';\n }\n\n public image(href: string, title: string, text: string) {\n return ' ' + text + ' ';\n }\n\n public text(text: string) {\n return text;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport marked from 'marked';\n\nimport * as TextFormatting from 'utils/text_formatting';\n\nexport default class RemoveMarkdown extends marked.Renderer {\n public code(text: string) {\n // We need to escape the input here because our version of marked does this in the renderer. Every other node\n // type has its input escaped before it reaches the renderer.\n return TextFormatting.escapeHtml(text).replace(/\\n/g, ' ');\n }\n\n public blockquote(text: string) {\n return text.replace(/\\n/g, ' ');\n }\n\n public heading(text: string) {\n return text + ' ';\n }\n\n public hr() {\n return '';\n }\n\n public list(body: string) {\n return body;\n }\n\n public listitem(text: string) {\n return text + ' ';\n }\n\n public paragraph(text: string) {\n return text + ' ';\n }\n\n public table() {\n return '';\n }\n\n public tablerow() {\n return '';\n }\n\n public tablecell() {\n return '';\n }\n\n public strong(text: string) {\n return text;\n }\n\n public em(text: string) {\n return text;\n }\n\n public codespan(text: string) {\n return text.replace(/\\n/g, ' ');\n }\n\n public br() {\n return ' ';\n }\n\n public del(text: string) {\n return text;\n }\n\n public link(href: string, title: string, text: string) {\n return text;\n }\n\n public image(href: string, title: string, text: string) {\n return text;\n }\n\n public text(text: string) {\n return text.replace('\\n', ' ');\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport marked from 'marked';\nimport type {MarkedOptions} from 'marked';\n\nimport EmojiMap from 'utils/emoji_map';\nimport * as PostUtils from 'utils/post_utils';\nimport * as TextFormatting from 'utils/text_formatting';\nimport {mightTriggerExternalRequest, getScheme, isUrlSafe, shouldOpenInNewTab} from 'utils/url';\n\nimport {parseImageDimensions} from './helpers';\n\nexport default class Renderer extends marked.Renderer {\n private formattingOptions: TextFormatting.TextFormattingOptions;\n private emojiMap: EmojiMap;\n public constructor(\n options: MarkedOptions,\n formattingOptions: TextFormatting.TextFormattingOptions,\n emojiMap = new EmojiMap(new Map()),\n ) {\n super(options);\n\n this.heading = this.heading.bind(this);\n this.paragraph = this.paragraph.bind(this);\n this.text = this.text.bind(this);\n this.emojiMap = emojiMap;\n\n this.formattingOptions = formattingOptions;\n }\n\n public code(code: string, language: string) {\n let usedLanguage = language || '';\n usedLanguage = usedLanguage.toLowerCase();\n\n if (usedLanguage === 'tex' || usedLanguage === 'latex') {\n return `
`;\n }\n\n let searchedContent = '';\n\n if (this.formattingOptions.searchPatterns) {\n try {\n const tokens = new TextFormatting.Tokens();\n\n let searched = TextFormatting.sanitizeHtml(code);\n searched = TextFormatting.highlightSearchTerms(\n searched,\n tokens,\n this.formattingOptions.searchPatterns,\n );\n\n if (tokens.size > 0) {\n searched = TextFormatting.replaceTokens(searched, tokens);\n\n searchedContent = (\n '
' +\n searched +\n '
'\n );\n }\n } catch (error) {\n if (!TextFormatting.isFormatTokenLimitError(error)) {\n throw error;\n }\n }\n }\n\n return '
';\n }\n\n public codespan(text: string) {\n let output = text;\n\n if (this.formattingOptions.searchPatterns) {\n try {\n const tokens = new TextFormatting.Tokens();\n output = TextFormatting.highlightSearchTerms(\n output,\n tokens,\n this.formattingOptions.searchPatterns,\n );\n output = TextFormatting.replaceTokens(output, tokens);\n } catch (error) {\n if (!TextFormatting.isFormatTokenLimitError(error)) {\n throw error;\n }\n output = text;\n }\n }\n\n return (\n '' +\n '' +\n output +\n '' +\n ''\n );\n }\n\n public br() {\n if (this.formattingOptions.singleline) {\n return ' ';\n }\n\n return super.br();\n }\n\n public image(href: string, title: string, text: string) {\n const dimensions = parseImageDimensions(href);\n\n let src = dimensions.href;\n src = PostUtils.getImageSrc(src, this.formattingOptions.proxyImages);\n\n let out = `\"${text}\"`;\n' : '>';\n return out;\n }\n\n public heading(text: string, level: number) {\n return `${text}`;\n }\n\n public link(href: string, title: string, text: string, isUrl = false) {\n let outHref = href;\n\n if (this.formattingOptions.unsafeLinks && mightTriggerExternalRequest(href, this.formattingOptions.siteURL)) {\n if (text === href) {\n return text;\n }\n return text + ' : ' + href;\n }\n\n if (!href.startsWith('/')) {\n const scheme = getScheme(href);\n if (!scheme) {\n outHref = `http://${outHref}`;\n } else if (isUrl && this.formattingOptions.autolinkedUrlSchemes) {\n const isValidUrl =\n this.formattingOptions.autolinkedUrlSchemes.indexOf(\n scheme.toLowerCase(),\n ) !== -1;\n\n if (!isValidUrl) {\n return text;\n }\n }\n }\n\n if (!isUrlSafe(unescapeHtmlEntities(href))) {\n return text;\n }\n\n let output = ']*>/g, '') + '';\n\n return output;\n }\n\n public paragraph(text: string) {\n if (this.formattingOptions.singleline) {\n let result;\n if (text.includes('class=\"markdown-inline-img\"')) {\n /*\n ** use a div tag instead of a p tag to allow other divs to be nested,\n ** which avoids errors of incorrect DOM nesting (
inside

)\n */\n result = `${text}`;\n } else {\n result = `

${text}

`;\n }\n return result;\n }\n\n return super.paragraph(text);\n }\n\n public table(header: string, body: string) {\n return `
${header}${body}
`;\n }\n\n public tablerow(content: string) {\n return `${content}`;\n }\n\n public tablecell(\n content: string,\n flags: {\n header: boolean;\n align: 'center' | 'left' | 'right' | null;\n },\n ) {\n return marked.Renderer.prototype.tablecell(content, flags).trim();\n }\n\n public list(content: string, ordered: boolean, start: number) {\n const type = ordered ? 'ol' : 'ul';\n\n let output = `<${type} className=\"markdown__list\"`;\n if (ordered && start !== undefined) {\n // The CSS that we use for lists hides the actual counter and uses ::before to simulate one so that we can\n // style it properly. We need to use a CSS counter to tell the ::before elements which numbers to show.\n output += ` style=\"counter-reset: list ${start - 1}\"`;\n }\n output += `>${content}`;\n\n return output;\n }\n\n public listitem(text: string, bullet = '') { // eslint-disable-line @typescript-eslint/no-unused-vars\n const taskListReg = /^\\[([ |xX])] /;\n const isTaskList = taskListReg.exec(text);\n\n if (isTaskList) {\n return `
  • ${' '}${text.replace(taskListReg, '')}
  • `;\n }\n\n // Added a span because if not whitespace nodes only\n // works in Firefox but not in Webkit\n return `
  • ${text}
  • `;\n }\n\n public text(txt: string) {\n return TextFormatting.doFormatText(\n txt,\n this.formattingOptions,\n this.emojiMap,\n );\n }\n}\n\n// Marked helper functions that should probably just be exported\n\nexport function unescapeHtmlEntities(html: string) {\n return html.replace(/&([#\\w]+);/g, (_, m) => {\n const n = m.toLowerCase();\n if (n === 'colon') {\n return ':';\n } else if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(Number(n.substring(1)));\n }\n return '';\n });\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n// parseImageDimensions takes an href returned by marked and separates out any image dimensions if those are specified.\n// If the input contains dimensions, the returned href will have them removed and they will be returned as strings,\n// otherwise, the returned dimensions will both be the empty string. If only one dimension is provided, the other will\n// be the string \"auto\".\nexport function parseImageDimensions(input: string): {href: string; height: string; width: string} {\n const match = (/ =(\\d*)(?:x(\\d+))?$/).exec(input);\n if (!match) {\n return {\n href: input,\n height: '',\n width: '',\n };\n }\n\n let width = match[1];\n let height = match[2];\n if (!width && !height) {\n return {\n href: input,\n height: '',\n width: '',\n };\n }\n\n if (width && !height) {\n height = 'auto';\n } else if (height && !width) {\n width = 'auto';\n }\n\n return {\n href: input.substring(0, input.length - match[0].length),\n height,\n width,\n };\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ReactNode} from 'react';\nimport React from 'react';\nimport {FormattedMessage} from 'react-intl';\n\nimport type {ChannelNotifyProps} from '@mattermost/types/channels';\nimport type {UserNotifyProps} from '@mattermost/types/users';\n\nimport bing from 'sounds/bing.mp3';\nimport calls_calm from 'sounds/calls_calm.mp3';\nimport calls_cheerful from 'sounds/calls_cheerful.mp3';\nimport calls_dynamic from 'sounds/calls_dynamic.mp3';\nimport calls_urgent from 'sounds/calls_urgent.mp3';\nimport crackle from 'sounds/crackle.mp3';\nimport down from 'sounds/down.mp3';\nimport hello from 'sounds/hello.mp3';\nimport ripple from 'sounds/ripple.mp3';\nimport upstairs from 'sounds/upstairs.mp3';\nimport {DesktopSound} from 'utils/constants';\nimport * as UserAgent from 'utils/user_agent';\n\nexport const DesktopNotificationSounds = {\n DEFAULT: 'default',\n BING: 'Bing',\n CRACKLE: 'Crackle',\n DOWN: 'Down',\n HELLO: 'Hello',\n RIPPLE: 'Ripple',\n UPSTAIRS: 'Upstairs',\n} as const;\n\nexport const notificationSounds = new Map([\n [DesktopNotificationSounds.BING, bing],\n [DesktopNotificationSounds.CRACKLE, crackle],\n [DesktopNotificationSounds.DOWN, down],\n [DesktopNotificationSounds.HELLO, hello],\n [DesktopNotificationSounds.RIPPLE, ripple],\n [DesktopNotificationSounds.UPSTAIRS, upstairs],\n]);\n\nexport const notificationSoundKeys = Array.from(notificationSounds.keys());\n\nexport const optionsOfMessageNotificationSoundsSelect: Array<{value: string; label: ReactNode}> = notificationSoundKeys.map((soundName) => {\n if (soundName === DesktopNotificationSounds.BING) {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === DesktopNotificationSounds.CRACKLE) {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === DesktopNotificationSounds.DOWN) {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === DesktopNotificationSounds.HELLO) {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === DesktopNotificationSounds.RIPPLE) {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === DesktopNotificationSounds.UPSTAIRS) {\n return {\n value: soundName,\n label: (\n \n ),\n };\n }\n return {\n value: '',\n label: '',\n };\n});\n\nexport function getValueOfNotificationSoundsSelect(soundName?: string) {\n const soundOption = optionsOfMessageNotificationSoundsSelect.find((option) => option.value === soundName);\n\n if (!soundOption) {\n return undefined;\n }\n\n return soundOption;\n}\n\nexport const callsNotificationSounds = new Map([\n ['Dynamic', calls_dynamic],\n ['Calm', calls_calm],\n ['Urgent', calls_urgent],\n ['Cheerful', calls_cheerful],\n]);\n\nexport const callNotificationSoundKeys = Array.from(callsNotificationSounds.keys());\n\nexport const optionsOfIncomingCallSoundsSelect: Array<{value: string; label: ReactNode}> = callNotificationSoundKeys.map((soundName) => {\n if (soundName === 'Dynamic') {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === 'Calm') {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === 'Urgent') {\n return {\n value: soundName,\n label: (\n \n ),\n };\n } else if (soundName === 'Cheerful') {\n return {\n value: soundName,\n label: (\n \n ),\n };\n }\n return {\n value: '',\n label: '',\n };\n});\n\nexport function getValueOfIncomingCallSoundsSelect(soundName?: string) {\n const soundOption = optionsOfIncomingCallSoundsSelect.find((option) => option.value === soundName);\n\n if (!soundOption) {\n return undefined;\n }\n\n return soundOption;\n}\n\nlet canDing = true;\nexport function ding(name: string) {\n if (hasSoundOptions() && canDing) {\n tryNotificationSound(name);\n canDing = false;\n setTimeout(() => {\n canDing = true;\n }, 3000);\n }\n}\n\nexport function tryNotificationSound(name: string) {\n const audio = new Audio(notificationSounds.get(name) ?? notificationSounds.get('Bing'));\n audio.play();\n}\n\nlet currentRing: HTMLAudioElement | null = null;\nexport function ring(name: string) {\n if (!hasSoundOptions()) {\n return;\n }\n stopRing();\n\n currentRing = loopNotificationRing(name);\n currentRing.addEventListener('pause', () => {\n stopRing();\n });\n}\n\nexport function stopRing() {\n if (currentRing) {\n currentRing.pause();\n currentRing.src = '';\n currentRing.remove();\n currentRing = null;\n }\n}\n\nlet currentTryRing: HTMLAudioElement | null = null;\nlet currentTimer: NodeJS.Timeout;\nexport function tryNotificationRing(name: string) {\n if (!hasSoundOptions()) {\n return;\n }\n stopTryNotificationRing();\n clearTimeout(currentTimer);\n\n currentTryRing = loopNotificationRing(name);\n currentTryRing.addEventListener('pause', () => {\n stopTryNotificationRing();\n });\n\n currentTimer = setTimeout(() => {\n stopTryNotificationRing();\n }, 5000);\n}\n\nexport function stopTryNotificationRing() {\n if (currentTryRing) {\n currentTryRing.pause();\n currentTryRing.src = '';\n currentTryRing.remove();\n currentTryRing = null;\n }\n}\n\nexport function loopNotificationRing(name: string) {\n const audio = new Audio(callsNotificationSounds.get(name) ?? callsNotificationSounds.get('Calm'));\n audio.loop = true;\n audio.play();\n return audio;\n}\n\nexport function hasSoundOptions() {\n return (!UserAgent.isEdge());\n}\n\n/**\n * This conversion is needed because User's preference for desktop sound is stored as either true or false. On the other hand,\n * Channel's specific desktop sound is stored as either On or Off.\n */\nexport function convertDesktopSoundNotifyPropFromUserToDesktop(userNotifyDesktopSound?: UserNotifyProps['desktop_sound']): ChannelNotifyProps['desktop_sound'] {\n if (userNotifyDesktopSound && userNotifyDesktopSound === 'false') {\n return DesktopSound.OFF;\n }\n\n return DesktopSound.ON;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport icon50 from 'images/icon50x50.png';\nimport iconWS from 'images/icon_WS.png';\nimport * as UserAgent from 'utils/user_agent';\n\nimport type {ThunkActionFunc} from 'types/store';\n\nexport type NotificationResult = {\n status: 'error' | 'not_sent' | 'success' | 'unsupported';\n reason?: string;\n data?: string;\n}\n\nlet requestedNotificationPermission = Boolean('Notification' in window && Notification.permission !== 'default');\n\n// showNotification displays a platform notification with the configured parameters.\n//\n// If successful in showing a notification, it resolves with a callback to manually close the\n// notification. If no error occurred but the user did not grant permission to show notifications, it\n// resolves with a no-op callback. Not all platforms support all features, and may\n// choose different semantics for the notifications.\n\nexport interface ShowNotificationParams {\n title: string;\n body: string;\n requireInteraction: boolean;\n silent: boolean;\n onClick?: (this: Notification, e: Event) => any | null;\n}\n\nexport function showNotification(\n {\n title,\n body,\n requireInteraction,\n silent,\n onClick,\n }: ShowNotificationParams = {\n title: '',\n body: '',\n requireInteraction: false,\n silent: false,\n },\n): ThunkActionFunc void}>> {\n return async () => {\n let icon = icon50;\n if (UserAgent.isEdge()) {\n icon = iconWS;\n }\n\n if (!isNotificationAPISupported()) {\n throw new Error('Notification API is not supported');\n }\n\n if (Notification.permission !== 'granted') {\n if (requestedNotificationPermission) {\n // User didn't allow notifications\n return {status: 'not_sent', reason: 'notifications_permission_previously_denied', data: Notification.permission, callback: () => {}};\n }\n\n requestedNotificationPermission = true;\n\n let permission = await Notification.requestPermission();\n if (typeof permission === 'undefined') {\n // Handle browsers that don't support the promise-based syntax.\n permission = await new Promise((resolve) => {\n Notification.requestPermission(resolve);\n });\n }\n\n if (permission !== 'granted') {\n // User has denied notification for the site\n return {status: 'not_sent', reason: 'notifications_permission_denied', data: permission, callback: () => {}};\n }\n }\n\n const notification = new Notification(title, {\n body,\n tag: body,\n icon,\n requireInteraction,\n silent,\n });\n\n if (onClick) {\n notification.onclick = onClick;\n }\n\n notification.onerror = () => {\n throw new Error('Notification failed to show.');\n };\n\n return {\n status: 'success',\n callback: () => {\n notification.close();\n },\n };\n };\n}\n\nexport function isNotificationAPISupported() {\n return ('Notification' in window) && (typeof Notification.requestPermission === 'function');\n}\n\nexport function getNotificationPermission(): NotificationPermission | null {\n if (!isNotificationAPISupported()) {\n return null;\n }\n\n return Notification.permission;\n}\n\nexport async function requestNotificationPermission(): Promise {\n if (!isNotificationAPISupported()) {\n return null;\n }\n\n try {\n const notificationPermission = await Notification.requestPermission();\n return notificationPermission;\n } catch (error) {\n return null;\n }\n}\n\nexport const NotificationPermissionNeverGranted = 'default';\nexport const NotificationPermissionGranted = 'granted';\nexport const NotificationPermissionDenied = 'denied';\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nexport const enum Mark {\n ChannelLinkClicked = 'SidebarChannelLink#click',\n GlobalThreadsLinkClicked = 'GlobalThreadsLink#click',\n PostListLoaded = 'PostList#component',\n PostSelected = 'PostList#postSelected',\n TeamLinkClicked = 'TeamLink#click',\n}\n\nexport const enum Measure {\n ChannelSwitch = 'channel_switch',\n GlobalThreadsLoad = 'global_threads_load',\n PageLoad = 'page_load',\n TTFB = 'TTFB',\n TTLB = 'TTLB',\n SplashScreen = 'splash_screen',\n DomInteractive = 'dom_interactive',\n RhsLoad = 'rhs_load',\n TeamSwitch = 'team_switch',\n}\n\nexport function markAndReport(name: string): PerformanceMark {\n return performance.mark(name, {\n detail: {\n report: true,\n },\n });\n}\n\n/**\n * Measures the duration between two performance marks, schedules it to be reported to the server, and returns the\n * PerformanceMeasure created by doing this. If endMark is omitted, the measure will measure the duration until now.\n *\n * If either the start or end mark does not exist, undefined will be returned, and if canFail is false, an error\n * will be logged.\n */\nexport function measureAndReport({\n name,\n startMark,\n endMark,\n labels,\n canFail = false,\n}: {\n name: string;\n startMark: string | DOMHighResTimeStamp;\n endMark?: string | DOMHighResTimeStamp;\n labels?: Record;\n canFail?: boolean;\n}): PerformanceMeasure | undefined {\n const options: PerformanceMeasureOptions = {\n start: startMark,\n end: endMark,\n detail: {\n labels,\n report: true,\n },\n };\n\n try {\n return performance.measure(name, options);\n } catch (e) {\n if (!canFail) {\n // eslint-disable-next-line no-console\n console.error('Unable to measure ' + name, e);\n }\n\n return undefined;\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {useMemo} from 'react';\nimport {useIntl} from 'react-intl';\nimport type {IntlShape} from 'react-intl';\nimport {useSelector} from 'react-redux';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {ClientConfig, ClientLicense} from '@mattermost/types/config';\nimport type {ServerError} from '@mattermost/types/errors';\nimport type {Group} from '@mattermost/types/groups';\nimport {isMessageAttachmentArray} from '@mattermost/types/message_attachments';\nimport type {Post, PostPriorityMetadata} from '@mattermost/types/posts';\nimport {PostPriority} from '@mattermost/types/posts';\nimport type {Reaction} from '@mattermost/types/reactions';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {Client4} from 'mattermost-redux/client';\nimport {Permissions, Posts} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {getChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getAllGroupsForReferenceByName} from 'mattermost-redux/selectors/entities/groups';\nimport {isPostFlagged, makeGetReactionsForPost} from 'mattermost-redux/selectors/entities/posts';\nimport {getTeammateNameDisplaySetting, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {haveIChannelPermission} from 'mattermost-redux/selectors/entities/roles';\nimport {getCurrentTeamId, getTeam} from 'mattermost-redux/selectors/entities/teams';\nimport {makeGetDisplayName, getCurrentUserId, getUser, getUsersByUsername} from 'mattermost-redux/selectors/entities/users';\nimport type {UserMentionKey} from 'mattermost-redux/selectors/entities/users';\nimport {getUserIdFromChannelName} from 'mattermost-redux/utils/channel_utils';\nimport {memoizeResult} from 'mattermost-redux/utils/helpers';\nimport * as PostListUtils from 'mattermost-redux/utils/post_list';\nimport {canEditPost as canEditPostRedux} from 'mattermost-redux/utils/post_utils';\nimport {displayUsername} from 'mattermost-redux/utils/user_utils';\n\nimport {getEmojiMap} from 'selectors/emojis';\nimport {getIsMobileView} from 'selectors/views/browser';\n\nimport Constants, {PostListRowListIds} from 'utils/constants';\nimport * as Keyboard from 'utils/keyboard';\nimport {formatWithRenderer} from 'utils/markdown';\nimport MentionableRenderer from 'utils/markdown/mentionable_renderer';\nimport {allAtMentions} from 'utils/text_formatting';\nimport {isMobile} from 'utils/user_agent';\n\nimport type {GlobalState} from 'types/store';\n\nimport type EmojiMap from './emoji_map';\nimport * as Emoticons from './emoticons';\n\nconst CHANNEL_SWITCH_IGNORE_ENTER_THRESHOLD_MS = 500;\n\nexport function isSystemMessage(post: Post): boolean {\n return Boolean(post.type && (post.type.lastIndexOf(Constants.SYSTEM_MESSAGE_PREFIX) === 0));\n}\n\nexport function fromAutoResponder(post: Post): boolean {\n return Boolean(post.type && (post.type === Constants.AUTO_RESPONDER));\n}\n\nexport function isFromWebhook(post: Post): boolean {\n return post.props?.from_webhook === 'true';\n}\n\nexport function isFromBot(post: Post): boolean {\n return post.props && post.props.from_bot === 'true';\n}\n\nexport function isPostOwner(state: GlobalState, post: Post): boolean {\n return getCurrentUserId(state) === post.user_id;\n}\n\nexport function isComment(post: Post): boolean {\n if ('root_id' in post) {\n return post.root_id !== '' && post.root_id != null;\n }\n return false;\n}\n\nexport function isEdited(post: Post): boolean {\n return post.edit_at > 0;\n}\n\nexport function getImageSrc(src: string, hasImageProxy = false): string {\n if (!src) {\n return src;\n }\n\n const imageAPI = Client4.getBaseRoute() + '/image?url=';\n\n if (hasImageProxy && !src.startsWith(imageAPI)) {\n return imageAPI + encodeURIComponent(src);\n }\n\n return src;\n}\n\nexport function canDeletePost(state: GlobalState, post: Post, channel?: Channel): boolean {\n if (post.type === Constants.PostTypes.FAKE_PARENT_DELETED) {\n return false;\n }\n\n if (channel && channel.delete_at !== 0) {\n return false;\n }\n\n if (isPostOwner(state, post)) {\n return haveIChannelPermission(state, channel && channel.team_id, post.channel_id, Permissions.DELETE_POST);\n }\n return haveIChannelPermission(state, channel && channel.team_id, post.channel_id, Permissions.DELETE_OTHERS_POSTS);\n}\n\nexport function canEditPost(\n state: GlobalState,\n post: Post,\n license?: ClientLicense,\n config?: Partial,\n channel?: Channel,\n userId?: string,\n): boolean {\n return canEditPostRedux(state, config, license, channel?.team_id ?? '', channel?.id ?? '', userId ?? '', post);\n}\n\nexport function shouldShowDotMenu(state: GlobalState, post: Post, channel: Channel): boolean {\n if (post && post.state === Posts.POST_DELETED) {\n return false;\n }\n\n if (getIsMobileView(state)) {\n return true;\n }\n\n if (!isSystemMessage(post)) {\n return true;\n }\n\n if (canDeletePost(state, post, channel)) {\n return true;\n }\n\n if (canEditPost(state, post)) {\n return true;\n }\n\n return false;\n}\n\nexport function shouldShowActionsMenu(state: GlobalState, post: Post): boolean {\n const config = getConfig(state);\n const pluginsEnabled = config.PluginsEnabled === 'true';\n if (!pluginsEnabled) {\n return false;\n }\n\n if (isSystemMessage(post)) {\n return false;\n }\n\n return true;\n}\n\nexport function containsAtChannel(text: string, options?: {checkAllMentions: boolean}): boolean {\n // Don't warn for slash commands\n if (!text || text.startsWith('/')) {\n return false;\n }\n\n let mentionsRegex;\n if (options?.checkAllMentions) {\n mentionsRegex = new RegExp(Constants.SPECIAL_MENTIONS_REGEX);\n } else {\n mentionsRegex = new RegExp(Constants.ALL_MEMBERS_MENTIONS_REGEX);\n }\n\n const mentionableText = formatWithRenderer(text, new MentionableRenderer());\n return mentionsRegex.test(mentionableText);\n}\n\nexport function specialMentionsInText(text: string): {[key: string]: boolean} {\n const mentions = {\n all: false,\n channel: false,\n here: false,\n };\n\n // Don't warn for slash commands\n if (!text || text.startsWith('/')) {\n return mentions;\n }\n\n const mentionableText = formatWithRenderer(text, new MentionableRenderer());\n\n mentions.all = new RegExp(Constants.ALL_MENTION_REGEX).test(mentionableText);\n mentions.channel = new RegExp(Constants.CHANNEL_MENTION_REGEX).test(mentionableText);\n mentions.here = new RegExp(Constants.HERE_MENTION_REGEX).test(mentionableText);\n\n return mentions;\n}\n\nexport const groupsMentionedInText = (text: string, groups: Map | null): Group[] => {\n // Don't warn for slash commands\n if (!text || text.startsWith('/')) {\n return [];\n }\n\n if (!groups) {\n return [];\n }\n\n const mentionableText = formatWithRenderer(text, new MentionableRenderer());\n const mentions = allAtMentions(mentionableText);\n\n const ret: Group[] = [];\n for (const mention of mentions) {\n const group = groups.get(mention);\n\n if (group) {\n ret.push(group);\n }\n }\n return ret;\n};\n\nexport function shouldFocusMainTextbox(e: React.KeyboardEvent | KeyboardEvent, activeElement: Element | null): boolean {\n if (!e) {\n return false;\n }\n\n // Do not focus if we're currently focused on a textarea or input\n const keepFocusTags = ['TEXTAREA', 'INPUT'];\n if (!activeElement || keepFocusTags.includes(activeElement.tagName)) {\n return false;\n }\n\n // Focus if it is an attempted paste\n if (Keyboard.cmdOrCtrlPressed(e) && Keyboard.isKeyPressed(e, Constants.KeyCodes.V)) {\n return true;\n }\n\n // Do not focus if a modifier key is pressed\n if (e.ctrlKey || e.metaKey || e.altKey) {\n return false;\n }\n\n // Do not focus if the key is undefined or null\n if (e.key == null) {\n return false;\n }\n\n // Do not focus for non-character or non-number keys\n if (e.key.length !== 1 || !e.key.match(/./)) {\n return false;\n }\n\n // Do not focus when pressing space on link elements\n const spaceKeepFocusTags = ['BUTTON', 'A'];\n if (Keyboard.isKeyPressed(e, Constants.KeyCodes.SPACE) && spaceKeepFocusTags.includes(activeElement.tagName)) {\n return false;\n }\n\n return true;\n}\n\nfunction canAutomaticallyCloseBackticks(message: string) {\n const splitMessage = message.split('\\n').filter((line) => line.trim() !== '');\n const lastPart = splitMessage[splitMessage.length - 1];\n\n if (splitMessage.length > 1 && !lastPart.includes('```')) {\n return {\n allowSending: true,\n message: message.endsWith('\\n') ? message.concat('```') : message.concat('\\n```'),\n withClosedCodeBlock: true,\n };\n }\n\n return {allowSending: true};\n}\n\nexport function isWithinCodeBlock(message: string, caretPosition: number): boolean {\n const match = message.substring(0, caretPosition).match(Constants.REGEX_CODE_BLOCK_OPTIONAL_LANGUAGE_TAG);\n\n return Boolean(match && match.length % 2 !== 0);\n}\n\nfunction sendOnCtrlEnter(message: string, ctrlOrMetaKeyPressed: boolean, isSendMessageOnCtrlEnter: boolean, caretPosition: number) {\n const inCodeBlock = isWithinCodeBlock(message, caretPosition);\n if (isSendMessageOnCtrlEnter && ctrlOrMetaKeyPressed && !inCodeBlock) {\n return {allowSending: true};\n } else if (!isSendMessageOnCtrlEnter && !inCodeBlock) {\n return {allowSending: true};\n } else if (ctrlOrMetaKeyPressed && inCodeBlock) {\n return canAutomaticallyCloseBackticks(message);\n }\n\n return {allowSending: false};\n}\n\nexport function postMessageOnKeyPress(\n event: React.KeyboardEvent,\n message: string,\n sendMessageOnCtrlEnter: boolean,\n sendCodeBlockOnCtrlEnter: boolean,\n now = 0,\n lastChannelSwitchAt = 0,\n caretPosition = 0,\n): {allowSending: boolean; ignoreKeyPress?: boolean; withClosedCodeBlock?: boolean; message?: string} {\n if (!event) {\n return {allowSending: false};\n }\n\n // Typing enter on mobile never sends.\n if (isMobile()) {\n return {allowSending: false};\n }\n\n // Only ENTER sends, unless shift or alt key pressed.\n if (!Keyboard.isKeyPressed(event, Constants.KeyCodes.ENTER) || event.shiftKey || event.altKey) {\n return {allowSending: false};\n }\n\n // Don't send if we just switched channels within a threshold.\n if (lastChannelSwitchAt > 0 && now > 0 && now - lastChannelSwitchAt <= CHANNEL_SWITCH_IGNORE_ENTER_THRESHOLD_MS) {\n return {allowSending: false, ignoreKeyPress: true};\n }\n\n if (\n message.trim() === '' ||\n !(sendMessageOnCtrlEnter || sendCodeBlockOnCtrlEnter)\n ) {\n return {allowSending: true};\n }\n\n const ctrlOrMetaKeyPressed = event.ctrlKey || event.metaKey;\n\n if (sendMessageOnCtrlEnter) {\n return sendOnCtrlEnter(message, ctrlOrMetaKeyPressed, true, caretPosition);\n } else if (sendCodeBlockOnCtrlEnter) {\n return sendOnCtrlEnter(message, ctrlOrMetaKeyPressed, false, caretPosition);\n }\n\n return {allowSending: false};\n}\n\nexport function isServerError(err: unknown): err is ServerError {\n return Boolean(err && typeof err === 'object' && 'server_error_id' in err);\n}\n\nexport function isErrorInvalidSlashCommand(error: ServerError | null): boolean {\n if (error && error.server_error_id) {\n return error.server_error_id === 'api.command.execute_command.not_found.app_error';\n }\n\n return false;\n}\n\nexport function isIdNotPost(postId: string): boolean {\n return (\n PostListUtils.isStartOfNewMessages(postId) ||\n PostListUtils.isDateLine(postId) ||\n postId in PostListRowListIds\n );\n}\n\n// getOldestPostId returns the oldest valid post ID in the given list of post IDs. This function is copied from\n// mattermost-redux, except it also includes additional special IDs that are only used in the web app.\nexport function getOldestPostId(postIds: string[]): string {\n for (let i = postIds.length - 1; i >= 0; i--) {\n const item = postIds[i];\n\n if (isIdNotPost(item)) {\n // This is not a post at all\n continue;\n }\n\n if (PostListUtils.isCombinedUserActivityPost(item)) {\n // This is a combined post, so find the first post ID from it\n const combinedIds = PostListUtils.getPostIdsForCombinedUserActivityPost(item);\n\n return combinedIds[combinedIds.length - 1];\n }\n\n // This is a post ID\n return item;\n }\n\n return '';\n}\n\nexport function getPreviousPostId(postIds: string[], startIndex: number): string {\n for (let i = startIndex + 1; i < postIds.length; i++) {\n const itemId = postIds[i];\n\n if (isIdNotPost(itemId)) {\n // This is not a post at all\n continue;\n }\n\n if (PostListUtils.isCombinedUserActivityPost(itemId)) {\n // This is a combined post, so find the last post ID from it\n const combinedIds = PostListUtils.getPostIdsForCombinedUserActivityPost(itemId);\n\n return combinedIds[0];\n }\n\n // This is a post ID\n return itemId;\n }\n\n return '';\n}\n\n// getLatestPostId returns the most recent valid post ID in the given list of post IDs. This function is copied from\n// mattermost-redux, except it also includes additional special IDs that are only used in the web app.\nexport function getLatestPostId(postIds: string[]): string {\n for (let i = 0; i < postIds.length; i++) {\n const item = postIds[i];\n\n if (isIdNotPost(item)) {\n // This is not a post at all\n continue;\n }\n\n if (PostListUtils.isCombinedUserActivityPost(item)) {\n // This is a combined post, so find the lastest post ID from it\n const combinedIds = PostListUtils.getPostIdsForCombinedUserActivityPost(item);\n\n return combinedIds[0];\n }\n\n // This is a post ID\n return item;\n }\n\n return '';\n}\n\nexport function makeGetMentionsFromMessage(): (state: GlobalState, post: Post) => Record {\n return createSelector(\n 'getMentionsFromMessage',\n (state: GlobalState, post: Post) => post,\n (state: GlobalState) => getUsersByUsername(state),\n (post, users) => {\n const mentions: Record = {};\n const mentionsArray = post.message.match(Constants.MENTIONS_REGEX) || [];\n for (let i = 0; i < mentionsArray.length; i++) {\n const mention = mentionsArray[i];\n const user = getMentionDetails(users, mention.substring(1)) as UserProfile | '';\n\n if (user) {\n mentions[mention] = user;\n }\n }\n\n return mentions;\n },\n );\n}\n\nexport function usePostAriaLabel(post: Post | undefined) {\n const intl = useIntl();\n\n const getDisplayName = useMemo(makeGetDisplayName, []);\n const getReactionsForPost = useMemo(makeGetReactionsForPost, []);\n const getMentionsFromMessage = useMemo(makeGetMentionsFromMessage, []);\n\n const createAriaLabelMemoized = memoizeResult(createAriaLabelForPost);\n\n return useSelector((state: GlobalState) => {\n if (!post) {\n return '';\n }\n\n const authorDisplayName = getDisplayName(state, post.user_id);\n const reactions = getReactionsForPost(state, post.id);\n const isFlagged = isPostFlagged(state, post.id);\n const emojiMap = getEmojiMap(state);\n const mentions = getMentionsFromMessage(state, post);\n const teammateNameDisplaySetting = getTeammateNameDisplaySetting(state);\n\n return createAriaLabelMemoized(\n post,\n authorDisplayName,\n isFlagged,\n reactions,\n intl,\n emojiMap,\n mentions,\n teammateNameDisplaySetting,\n );\n });\n}\n\nexport function createAriaLabelForPost(post: Post, author: string, isFlagged: boolean, reactions: Record | undefined, intl: IntlShape, emojiMap: EmojiMap, mentions: Record, teammateNameDisplaySetting: string): string {\n const {formatMessage, formatTime, formatDate} = intl;\n\n let message = post.state === Posts.POST_DELETED ? formatMessage({\n id: 'post_body.deleted',\n defaultMessage: '(message deleted)',\n }) : post.message || '';\n let match;\n\n // Match all the shorthand forms of emojis first\n for (const name of Object.keys(Emoticons.emoticonPatterns)) {\n const pattern = Emoticons.emoticonPatterns[name];\n message = message.replace(pattern, `:${name}:`);\n }\n\n while ((match = Emoticons.EMOJI_PATTERN.exec(message)) !== null) {\n if (emojiMap.has(match[2])) {\n message = message.replace(match[0], `${match[2].replace(/_/g, ' ')} emoji`);\n }\n }\n\n // Replace mentions with preferred username\n for (const mention of Object.keys(mentions)) {\n const user = mentions[mention];\n if (user) {\n message = message.replace(mention, `@${displayUsername(user, teammateNameDisplaySetting)}`);\n }\n }\n\n let ariaLabel;\n if (post.root_id) {\n ariaLabel = formatMessage({\n id: 'post.ariaLabel.replyMessage',\n defaultMessage: 'At {time} {date}, {authorName} replied, {message}',\n },\n {\n authorName: author,\n time: formatTime(post.create_at),\n date: formatDate(post.create_at, {weekday: 'long', month: 'long', day: 'numeric'}),\n message,\n });\n } else {\n ariaLabel = formatMessage({\n id: 'post.ariaLabel.message',\n defaultMessage: 'At {time} {date}, {authorName} wrote, {message}',\n },\n {\n authorName: author,\n time: formatTime(post.create_at),\n date: formatDate(post.create_at, {weekday: 'long', month: 'long', day: 'numeric'}),\n message,\n });\n }\n\n let attachmentCount = 0;\n if (isMessageAttachmentArray(post.props?.attachments)) {\n attachmentCount += post.props.attachments.length;\n }\n if (post.file_ids) {\n attachmentCount += post.file_ids.length;\n }\n\n if (attachmentCount) {\n if (attachmentCount > 1) {\n ariaLabel += formatMessage({\n id: 'post.ariaLabel.attachmentMultiple',\n defaultMessage: ', {attachmentCount} attachments',\n },\n {\n attachmentCount,\n });\n } else {\n ariaLabel += formatMessage({\n id: 'post.ariaLabel.attachment',\n defaultMessage: ', 1 attachment',\n });\n }\n }\n\n if (reactions) {\n const emojiNames = [];\n for (const reaction of Object.values(reactions)) {\n const emojiName = reaction.emoji_name;\n\n if (emojiNames.indexOf(emojiName) < 0) {\n emojiNames.push(emojiName);\n }\n }\n\n if (emojiNames.length > 1) {\n ariaLabel += formatMessage({\n id: 'post.ariaLabel.reactionMultiple',\n defaultMessage: ', {reactionCount} reactions',\n },\n {\n reactionCount: emojiNames.length,\n });\n } else if (emojiNames.length === 1) {\n ariaLabel += formatMessage({\n id: 'post.ariaLabel.reaction',\n defaultMessage: ', 1 reaction',\n });\n }\n }\n\n if (isFlagged) {\n if (post.is_pinned) {\n ariaLabel += formatMessage({\n id: 'post.ariaLabel.messageIsFlaggedAndPinned',\n defaultMessage: ', message is saved and pinned',\n });\n } else {\n ariaLabel += formatMessage({\n id: 'post.ariaLabel.messageIsFlagged',\n defaultMessage: ', message is saved',\n });\n }\n } else if (!isFlagged && post.is_pinned) {\n ariaLabel += formatMessage({\n id: 'post.ariaLabel.messageIsPinned',\n defaultMessage: ', message is pinned',\n });\n }\n\n return ariaLabel;\n}\n\n// Splits text message based on the current caret position\nexport function splitMessageBasedOnCaretPosition(caretPosition: number, message: string): {firstPiece: string; lastPiece: string} {\n const firstPiece = message.substring(0, caretPosition);\n const lastPiece = message.substring(caretPosition, message.length);\n return {firstPiece, lastPiece};\n}\n\nexport function splitMessageBasedOnTextSelection(selectionStart: number, selectionEnd: number, message: string): {firstPiece: string; lastPiece: string} {\n const firstPiece = message.substring(0, selectionStart);\n const lastPiece = message.substring(selectionEnd, message.length);\n return {firstPiece, lastPiece};\n}\n\nexport function areConsecutivePostsBySameUser(post: Post, previousPost: Post): boolean {\n if (!(post && previousPost)) {\n return false;\n }\n return post.user_id === previousPost.user_id && // The post is by the same user\n post.create_at - previousPost.create_at <= Posts.POST_COLLAPSE_TIMEOUT && // And was within a short time period\n !(post.props && post.props.from_webhook) && !(previousPost.props && previousPost.props.from_webhook) && // And neither is from a webhook\n !isSystemMessage(post) && !isSystemMessage(previousPost); // And neither is a system message\n}\n\n// Constructs the URL of a post.\n// Was made to be used with permalinks.\n//\n// If the post is a reply and CRT is enabled\n// the URL constructed is the URL of the channel instead.\n//\n// Note: In the case of DM_CHANNEL, users must be fetched beforehand.\nexport function getPostURL(state: GlobalState, post: Post): string {\n const channel = getChannel(state, post.channel_id);\n if (!channel) {\n return '';\n }\n const currentUserId = getCurrentUserId(state);\n const team = getTeam(state, channel.team_id || getCurrentTeamId(state));\n if (!team) {\n return '';\n }\n\n const postURI = isCollapsedThreadsEnabled(state) && isComment(post) ? '' : `/${post.id}`;\n\n switch (channel.type) {\n case Constants.DM_CHANNEL: {\n const userId = getUserIdFromChannelName(currentUserId, channel.name);\n const user = getUser(state, userId);\n return `/${team.name}/messages/@${user.username}${postURI}`;\n }\n case Constants.GM_CHANNEL:\n return `/${team.name}/messages/${channel.name}${postURI}`;\n default:\n return `/${team.name}/channels/${channel.name}${postURI}`;\n }\n}\n\nexport function matchUserMentionTriggersWithMessageMentions(userMentionKeys: UserMentionKey[],\n messageMentionKeys: string[]): boolean {\n let isMentioned = false;\n for (const mentionKey of userMentionKeys) {\n const isPresentInMessage = messageMentionKeys.includes(mentionKey.key);\n if (isPresentInMessage) {\n isMentioned = true;\n break;\n }\n }\n return isMentioned;\n}\n\n/**\n * This removes custom emoji reactions of a post, which are deleted from the custom emoji store.\n */\nexport function makeGetUniqueReactionsToPost(): (state: GlobalState, postId: Post['id']) => Record | undefined | null {\n const getReactionsForPost = makeGetReactionsForPost();\n\n return createSelector(\n 'makeGetUniqueReactionsToPost',\n (state: GlobalState, postId: string) => getReactionsForPost(state, postId),\n getEmojiMap,\n (reactions, emojiMap) => {\n if (!reactions) {\n return null;\n }\n\n const reactionsForPost: Record = {};\n\n Object.entries(reactions).forEach(([userIdEmojiKey, emojiReaction]) => {\n if (emojiMap.get(emojiReaction.emoji_name)) {\n reactionsForPost[userIdEmojiKey] = emojiReaction;\n }\n });\n\n return reactionsForPost;\n },\n );\n}\n\nexport function makeGetUniqueEmojiNameReactionsForPost(): (state: GlobalState, postId: Post['id']) => string[] | undefined | null {\n const getReactionsForPost = makeGetReactionsForPost();\n\n return createSelector(\n 'makeGetUniqueEmojiReactionsForPost',\n (state: GlobalState, postId: string) => getReactionsForPost(state, postId),\n getEmojiMap,\n (reactions, emojiMap) => {\n if (!reactions) {\n return null;\n }\n\n const emojiNames: string[] = [];\n\n Object.values(reactions).forEach((reaction) => {\n if (emojiMap.get(reaction.emoji_name) && !emojiNames.includes(reaction.emoji_name)) {\n emojiNames.push(reaction.emoji_name);\n }\n });\n\n return emojiNames;\n },\n );\n}\n\nexport function makeGetIsReactionAlreadyAddedToPost(): (state: GlobalState, postId: Post['id'], emojiName: string) => boolean {\n const getUniqueReactionsToPost = makeGetUniqueReactionsToPost();\n\n return createSelector(\n 'makeGetIsReactionAlreadyAddedToPost',\n (state: GlobalState, postId: string) => getUniqueReactionsToPost(state, postId),\n getCurrentUserId,\n (state: GlobalState, postId: string, emojiName: string) => emojiName,\n (reactions, currentUserId, emojiName) => {\n const reactionsForPost = reactions || {};\n\n const isReactionAlreadyAddedToPost = Object.values(reactionsForPost).some((reaction) => reaction.user_id === currentUserId && reaction.emoji_name === emojiName);\n\n return isReactionAlreadyAddedToPost;\n },\n );\n}\n\n/**\n * Given the text of an at-mention without the @, returns an array containing that text and every substring of it that\n * can be made by removing trailing punctiuation.\n *\n * For example, getPotentialMentionsForName('username') returns ['username'] and\n * getPotentialMentionsForName('username..') return ['username..', 'username.', 'username'].\n */\nexport function getPotentialMentionsForName(mentionName: string): string[] {\n let mentionNameToLowerCase = mentionName.toLowerCase();\n\n const potentialMentions = [mentionNameToLowerCase];\n\n // Repeatedly trim off trailing punctuation in case this is at the end of a sentence\n while (mentionNameToLowerCase.length > 0 && (/[._-]$/).test(mentionNameToLowerCase)) {\n mentionNameToLowerCase = mentionNameToLowerCase.substring(0, mentionNameToLowerCase.length - 1);\n\n potentialMentions.push(mentionNameToLowerCase);\n }\n\n return potentialMentions;\n}\n\nexport function getMentionDetails(entitiesByName: Record, mentionName: string): T | undefined {\n for (const potentialMention of getPotentialMentionsForName(mentionName)) {\n if (Object.hasOwn(entitiesByName, potentialMention)) {\n return entitiesByName[potentialMention];\n }\n }\n\n return undefined;\n}\n\nexport function getUserOrGroupFromMentionName(\n mentionName: string,\n users: Record,\n groups: Record,\n groupsDisabled?: boolean,\n getMention = getMentionDetails,\n): [UserProfile?, Group?] {\n const user = getMention(users, mentionName);\n\n // prioritizes user if user exists with the same name as a group.\n if (!user && !groupsDisabled) {\n const group = getMention(groups, mentionName);\n if (group && !group.allow_reference) {\n return [undefined, undefined]; // remove group mention if not allowed to reference\n }\n\n return [undefined, group];\n }\n\n return [user, undefined];\n}\n\nexport function mentionsMinusSpecialMentionsInText(message: string) {\n const allMentions = message.match(Constants.MENTIONS_REGEX) || [];\n const mentions = [];\n for (let i = 0; i < allMentions.length; i++) {\n const mention = allMentions[i];\n if (!Constants.SPECIAL_MENTIONS_REGEX.test(mention)) {\n mentions.push(mention.substring(1).trim());\n }\n }\n\n return mentions;\n}\n\nexport function makeGetUserOrGroupMentionCountFromMessage(): (state: GlobalState, message: Post['message']) => number {\n return createSelector(\n 'getUserOrGroupMentionCountFromMessage',\n (_state: GlobalState, message: Post['message']) => message,\n getUsersByUsername,\n getAllGroupsForReferenceByName,\n (message, users, groups) => {\n let count = 0;\n const markdownCleanedText = formatWithRenderer(message, new MentionableRenderer());\n const mentions = new Set(markdownCleanedText.match(Constants.MENTIONS_REGEX) || []);\n mentions.forEach((mention) => {\n const [user, group] = getUserOrGroupFromMentionName(mention.substring(1), users, groups);\n\n if (user) {\n count++;\n } else if (group) {\n count += group.member_count;\n }\n });\n return count;\n },\n );\n}\n\nexport function hasRequestedPersistentNotifications(priority?: PostPriorityMetadata) {\n return (\n priority?.priority === PostPriority.URGENT &&\n priority?.persistent_notifications\n );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport emojiRegex from 'emoji-regex';\nimport type {Renderer} from 'marked';\n\nimport type {SystemEmoji} from '@mattermost/types/emojis';\nimport {isRecordOf} from '@mattermost/types/utilities';\n\nimport type {HighlightWithoutNotificationKey} from 'mattermost-redux/selectors/entities/users';\n\nimport {formatWithRenderer} from 'utils/markdown';\n\nimport Constants from './constants';\nimport type EmojiMap from './emoji_map.js';\nimport * as Emoticons from './emoticons';\nimport * as Markdown from './markdown';\n\nconst punctuationRegex = /[^\\p{L}\\d]/u;\nconst AT_MENTION_PATTERN = /(?:\\B|\\b_+)@([a-z0-9.\\-_]+)/gi;\nconst UNICODE_EMOJI_REGEX = emojiRegex();\nconst htmlEmojiPattern = /^

    \\s*(?:]*>|]*>[^<]*<\\/span>\\s*|[^<]*<\\/span>\\s*)+<\\/p>$/;\n\nconst FORMAT_TOKEN_LIMIT = 1000;\nconst FORMAT_TOKEN_LIMIT_ERROR = 'maximum number of tokens reached';\n\nexport function isFormatTokenLimitError(error: unknown) {\n return Boolean(error && typeof error === 'object' && 'message' in error && (error as Record).message === FORMAT_TOKEN_LIMIT_ERROR);\n}\n\n// Performs formatting of user posts including highlighting mentions and search terms and converting urls, hashtags,\n// @mentions and ~channels to links by taking a user's message and returning a string of formatted html. Also takes\n// a number of options as part of the second parameter:\nexport type ChannelNamesMap = {\n [name: string]: {\n display_name: string;\n team_name?: string;\n } | string;\n};\n\nexport function isChannelNamesMap(v: unknown): v is ChannelNamesMap {\n return isRecordOf(v, (e) => {\n if (typeof e === 'string') {\n return true;\n }\n\n if (typeof e !== 'object' || !e) {\n return false;\n }\n\n if (!('display_name' in e) || typeof e.display_name !== 'string') {\n return false;\n }\n\n if ('team_name' in e && typeof e.team_name !== 'string') {\n return false;\n }\n\n return true;\n });\n}\n\nexport type SearchPattern = {\n pattern: RegExp;\n term: string;\n};\n\nexport type MentionKey = {\n key: string;\n caseSensitive?: boolean;\n};\n\nexport type Team = {\n id: string;\n name: string;\n display_name: string;\n};\n\nexport interface TextFormattingOptionsBase {\n\n /**\n * If specified, this word is highlighted in the resulting html.\n *\n * Defaults to nothing.\n */\n searchTerm: string;\n\n /**\n * If specified, an array of words that will be highlighted.\n *\n * If both this and `searchTerm` are specified, this takes precedence.\n *\n * Defaults to nothing.\n */\n searchMatches: string[];\n\n searchPatterns: SearchPattern[];\n\n /**\n * Specifies whether or not to highlight mentions of the current user.\n *\n * Defaults to `true`.\n */\n mentionHighlight: boolean;\n\n /**\n * Specifies whether or not to display group mentions as blue links.\n *\n * Defaults to `false`.\n */\n disableGroupHighlight: boolean;\n\n /**\n * A list of mention keys for the current user to highlight.\n */\n mentionKeys: MentionKey[];\n\n /**\n * A list of highlight keys for the current user to highlight without notification.\n */\n highlightKeys: HighlightWithoutNotificationKey[];\n\n /**\n * Specifies whether or not to remove newlines.\n *\n * Defaults to `false`.\n */\n singleline: boolean;\n\n /**\n * Enables emoticon parsing with a data-emoticon attribute.\n *\n * Defaults to `true`.\n */\n emoticons: boolean;\n\n /**\n * Enables markdown parsing.\n *\n * Defaults to `true`.\n */\n markdown: boolean;\n\n /**\n * The origin of this Mattermost instance.\n *\n * If provided, links to channels and posts will be replaced with internal\n * links that can be handled by a special click handler.\n */\n siteURL: string;\n\n /**\n * Whether or not to render at mentions into spans with a data-mention attribute.\n *\n * Defaults to `false`.\n */\n atMentions: boolean;\n\n /**\n * An object mapping channel display names to channels.\n *\n * If provided, ~channel mentions will be replaced with links to the relevant channel.\n */\n channelNamesMap: ChannelNamesMap;\n\n /**\n * The current team.\n */\n team: Team;\n\n /**\n * If specified, images are proxied.\n *\n * Defaults to `false`.\n */\n proxyImages: boolean;\n\n /**\n * An array of url schemes that will be allowed for autolinking.\n *\n * Defaults to autolinking with any url scheme.\n */\n autolinkedUrlSchemes: string[];\n\n /**\n * An array of paths on the server that are managed by another server. Any path provided will be treated as an\n * external link that will not by handled by react-router.\n *\n * Defaults to an empty array.\n */\n managedResourcePaths: string[];\n\n /**\n * A custom renderer object to use in the formatWithRenderer function.\n *\n * Defaults to empty.\n */\n renderer: Renderer;\n\n /**\n * Minimum number of characters in a hashtag.\n *\n * Defaults to `3`.\n */\n minimumHashtagLength: number;\n\n /**\n * the timestamp on which the post was last edited\n */\n editedAt: number;\n postId: string;\n\n /**\n * Whether or not to render sum of members mentions e.g. \"5 members...\" into spans with a data-sum-of-members-mention attribute.\n *\n * Defaults to `false`.\n */\n atSumOfMembersMentions: boolean;\n\n /**\n * Whether or not to render plan mentions e.g. \"Professional plan, Enterprise plan, Starter plan\" into spans with a data-plan-mention attribute.\n *\n * Defaults to `false`.\n */\n atPlanMentions: boolean;\n\n /**\n * If true, the renderer will assume links are not safe.\n *\n * Defaults to `false`.\n */\n unsafeLinks: boolean;\n}\n\nexport type TextFormattingOptions = Partial;\n\nexport class Tokens extends Map {\n set(key: string, value: {value: string; originalText: string; hashtag?: string}) {\n super.set(key, value);\n if (this.size > FORMAT_TOKEN_LIMIT) {\n throw new Error(FORMAT_TOKEN_LIMIT_ERROR);\n }\n return this;\n }\n}\n\nconst DEFAULT_OPTIONS: TextFormattingOptions = {\n mentionHighlight: true,\n disableGroupHighlight: false,\n singleline: false,\n emoticons: true,\n markdown: true,\n atMentions: false,\n atSumOfMembersMentions: false,\n atPlanMentions: false,\n minimumHashtagLength: 3,\n proxyImages: false,\n editedAt: 0,\n postId: '',\n unsafeLinks: false,\n};\n\n/**\n* pattern to detect the existence of a Chinese, Japanese, or Korean character in a string\n* http://stackoverflow.com/questions/15033196/using-javascript-to-check-whether-a-string-contains-japanese-characters-includi\n* recently enhanced to support some more CJK, Hangul, and Cyrillic characters\n* CJK punctuation: \\u3000-\\u303f\n* Hiragana: \\u3040-\\u309f\n* Katakana: \\u30a0-\\u30ff\n* Full-width ASCII characters: \\uff00-\\uff9f\n* Common CJK characters: \\u4e00-\\u9fff\n* Additional CJK characters: \\u3400-\\u4dbf\n* Hangul characters: \\uac00-\\ud7af\n* Hangul Jamo: \\u1100-\\u11ff\n* Hangul Compatibility Jamo: \\u3130-\\u318f\n* Cyrillic characters: \\u0400-\\u04ff, \\u0500-\\u052f\n* Additional CJK and Hangul compatibility characters: \\u2de0-\\u2dff\n* Thai characters: \\u0e00-\\u0e7f\n**/\n// eslint-disable-next-line no-misleading-character-class\nexport const cjkrPattern = /[\\u3000-\\u303f\\u3040-\\u309f\\u30a0-\\u30ff\\uff00-\\uff9f\\u4e00-\\u9faf\\u3400-\\u4dbf\\uac00-\\ud7a3\\u1100-\\u11ff\\u3130-\\u318f\\u0400-\\u04ff\\u0500-\\u052f\\u2de0-\\u2dff\\u0e00-\\u0e7f]/;\n\nexport function formatText(\n text: string,\n inputOptions: TextFormattingOptions = DEFAULT_OPTIONS,\n emojiMap: EmojiMap,\n): string {\n if (!text) {\n return '';\n }\n\n let output = text;\n const options = Object.assign({}, inputOptions);\n const hasPhrases = (/\"([^\"]*)\"/).test(options.searchTerm || '');\n\n if (options.searchMatches && !hasPhrases) {\n options.searchPatterns = options.searchMatches.map(convertSearchTermToRegex);\n } else {\n options.searchPatterns = parseSearchTerms(options.searchTerm || '').map(convertSearchTermToRegex).sort((a, b) => {\n return b.term.length - a.term.length;\n });\n }\n\n if (options.renderer) {\n output = formatWithRenderer(output, options.renderer);\n output = doFormatText(output, options, emojiMap);\n } else if (!('markdown' in options) || options.markdown) {\n // the markdown renderer will call doFormatText as necessary\n output = Markdown.format(output, options, emojiMap);\n if (output.includes('class=\"markdown-inline-img\"')) {\n const replacer = (match: string) => {\n /*\n * remove p tag to allow other divs to be nested,\n * which allows markdown images to open preview window\n */\n return match === '

    ' ? '

    ' : '
    ';\n };\n\n /*\n * Fix for MM-22267 - replace any carriage-return (\\r), line-feed (\\n) or cr-lf (\\r\\n) occurences\n * in enclosing `

    ` tags with `
    ` breaks to show correct line-breaks in the UI\n *\n * the Markdown.format function removes all duplicate line-breaks beforehand, so it is safe to just\n * replace occurrences which are not followed by opening

    tags to prevent duplicate line-breaks\n *\n * The data-codeblock-code part is a fix for MM-45349 - do not replace newlines with `
    `\n * in code blocks, as they become visible in the message\n */\n output = output.replace(/data-codeblock-code=\"[^\"]+\"|[\\r\\n]+(?!(

    ))/g, (match: string) => {\n if (match.includes('data-codeblock-code')) {\n return match;\n }\n\n return '
    ';\n });\n\n /*\n * the replacer is not ideal, since it replaces every occurence with a new div\n * It would be better to more accurately match only the element in question\n * and replace it with an inlione-version\n */\n output = output.replace(/

    |<\\/p>/g, replacer);\n }\n } else {\n output = sanitizeHtml(output);\n output = doFormatText(output, options, emojiMap);\n }\n\n // replace newlines with spaces if necessary\n if (options.singleline) {\n output = replaceNewlines(output);\n }\n\n if (htmlEmojiPattern.test(output.trim())) {\n output = `${output.trim()}`;\n }\n\n if (options.postId) {\n // unwrap the output from the closing p tag and add a span that will serve as a\n // palceholder for `messageToHtmlComponent` function later on\n if (output.endsWith('

    ')) {\n output = `${output.slice(0, -4)}

    `;\n } else {\n output += ``;\n }\n }\n\n return output;\n}\n\n// Performs most of the actual formatting work for formatText. Not intended to be called normally.\nexport function doFormatText(text: string, options: TextFormattingOptions, emojiMap: EmojiMap): string {\n let output = text;\n\n const tokens = new Tokens();\n\n try {\n // replace important words and phrases with tokens\n if (options.atMentions) {\n output = autolinkAtMentions(output, tokens);\n }\n\n if (options.atSumOfMembersMentions) {\n output = autoLinkSumOfMembersMentions(output, tokens);\n }\n\n if (options.atPlanMentions) {\n output = autoPlanMentions(output, tokens);\n }\n\n if (options.channelNamesMap) {\n output = autolinkChannelMentions(\n output,\n tokens,\n options.channelNamesMap,\n options.team,\n );\n }\n\n output = autolinkEmails(output, tokens);\n output = autolinkHashtags(output, tokens, options.minimumHashtagLength);\n\n if (!('emoticons' in options) || options.emoticons) {\n output = Emoticons.handleEmoticons(output, tokens);\n }\n\n if (options.searchPatterns) {\n output = highlightSearchTerms(output, tokens, options.searchPatterns);\n }\n\n if (!('mentionHighlight' in options) || options.mentionHighlight) {\n output = highlightCurrentMentions(output, tokens, options.mentionKeys);\n }\n\n if (options.highlightKeys && options.highlightKeys.length > 0) {\n output = highlightWithoutNotificationKeywords(output, tokens, options.highlightKeys);\n }\n\n if (!('emoticons' in options) || options.emoticons) {\n output = handleUnicodeEmoji(output, emojiMap, UNICODE_EMOJI_REGEX);\n }\n\n // reinsert tokens with formatted versions of the important words and phrases\n output = replaceTokens(output, tokens) || text;\n return output;\n } catch (error) {\n if (isFormatTokenLimitError(error)) {\n return text;\n }\n\n throw error;\n }\n}\n\nexport function sanitizeHtml(text: string): string {\n let output = text;\n\n // normal string.replace only does a single occurrence so use a regex instead\n output = output.replace(/&/g, '&');\n output = output.replace(//g, '>');\n output = output.replace(/'/g, ''');\n output = output.replace(/\"/g, '"');\n\n return output;\n}\n\n// Copied from our fork of commonmark.js\n// eslint-disable-next-line no-useless-escape\nconst emailRegex = /(^|[^\\p{L}\\d])((?:[\\p{L}\\p{Nd}!#$%&'*+\\-\\/=?^_`{|}~](?:[\\p{L}\\p{Nd}!#$%&'*+\\-\\/=?^_`{|}~]|\\.(?!\\.|@))*|\"[\\p{L}\\p{Nd}!#$%&'*+\\-\\/=?^_`{|}~\\s(),:;<>@\\[\\].]+\")@[\\p{L}\\d.\\-]+[.]\\p{L}{2,5}(?=$|[^\\p{L}]))/gu;\n\n// Convert emails into tokens\nfunction autolinkEmails(text: string, tokens: Tokens) {\n function replaceEmailWithToken(\n fullMatch: string,\n ...args: Array\n ) {\n const prefix = args[0] as string;\n const email = args[1] as string;\n\n const index = tokens.size;\n const alias = `$MM_EMAIL${index}$`;\n\n tokens.set(alias, {\n value: `${email}`,\n originalText: email,\n });\n\n return prefix + alias;\n }\n\n return text.replace(emailRegex, replaceEmailWithToken);\n}\n\nexport function autoLinkSumOfMembersMentions(text: string, tokens: Tokens): string {\n function replaceSumOfMembersMentionWithToken(fullMatch: string) {\n const index = tokens.size;\n const alias = `$MM_SUMOFMEMBERSMENTION${index}$`;\n\n tokens.set(alias, {\n value: `${fullMatch}`,\n originalText: fullMatch,\n });\n\n return alias;\n }\n\n let output = text;\n output = output.replace(\n Constants.SUM_OF_MEMBERS_MENTION_REGEX,\n replaceSumOfMembersMentionWithToken,\n );\n\n return output;\n}\n\nexport function autoPlanMentions(text: string, tokens: Tokens): string {\n function replacePlanMentionWithToken(fullMatch: string) {\n const index = tokens.size;\n const alias = `$MM_PLANMENTION${index}$`;\n\n tokens.set(alias, {\n value: `${fullMatch}`,\n originalText: fullMatch,\n });\n\n return alias;\n }\n\n let output = text;\n output = output.replace(\n Constants.PLAN_MENTIONS,\n replacePlanMentionWithToken,\n );\n\n return output;\n}\n\nexport function autolinkAtMentions(text: string, tokens: Tokens): string {\n function replaceAtMentionWithToken(fullMatch: string, username: string) {\n let originalText = fullMatch;\n\n // Deliberately remove all leading underscores since regex matches leading underscore by treating it as non word boundary\n while (originalText[0] === '_') {\n originalText = originalText.substring(1);\n }\n\n const index = tokens.size;\n const alias = `$MM_ATMENTION${index}$`;\n\n tokens.set(alias, {\n value: `@${username}`,\n originalText,\n });\n\n return alias;\n }\n\n let output = text;\n\n // handle @channel, @all, @here mentions first (supports trailing punctuation)\n output = output.replace(\n Constants.SPECIAL_MENTIONS_REGEX,\n replaceAtMentionWithToken,\n );\n\n // handle all other mentions (supports trailing punctuation)\n let match = output.match(AT_MENTION_PATTERN);\n while (match && match.length > 0) {\n output = output.replace(AT_MENTION_PATTERN, replaceAtMentionWithToken);\n match = output.match(AT_MENTION_PATTERN);\n }\n\n return output;\n}\n\nexport function allAtMentions(text: string): string[] {\n return text.match(Constants.SPECIAL_MENTIONS_REGEX && AT_MENTION_PATTERN) || [];\n}\n\nexport function autolinkChannelMentions(\n text: string,\n tokens: Tokens,\n channelNamesMap: ChannelNamesMap,\n team?: Team,\n) {\n function channelMentionExists(c: string) {\n return Object.hasOwn(channelNamesMap, c);\n }\n function addToken(channelName: string, teamName: string, mention: string, displayName: string) {\n const index = tokens.size;\n const alias = `$MM_CHANNELMENTION${index}$`;\n let href = '#';\n if (teamName) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n href = ((window as any).basename || '') + '/' + teamName + '/channels/' + channelName;\n tokens.set(alias, {\n value: `~${displayName}`,\n originalText: mention,\n });\n } else if (team) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n href = ((window as any).basename || '') + '/' + team.name + '/channels/' + channelName;\n tokens.set(alias, {\n value: `~${displayName}`,\n originalText: mention,\n });\n }\n\n return alias;\n }\n\n function replaceChannelMentionWithToken(\n fullMatch: string,\n mention: string,\n channelName: string,\n ) {\n let channelNameLower = channelName.toLowerCase();\n\n if (channelMentionExists(channelNameLower)) {\n // Exact match\n let displayName = '';\n let teamName = '';\n\n const channelValue = channelNamesMap[channelNameLower];\n if (typeof channelValue === 'object') {\n displayName = channelValue.display_name;\n teamName = channelValue.team_name || '';\n } else {\n displayName = channelValue;\n }\n\n return addToken(\n channelNameLower,\n teamName,\n mention,\n escapeHtml(displayName),\n );\n }\n\n // Not an exact match, attempt to truncate any punctuation to see if we can find a channel\n const originalChannelName = channelNameLower;\n\n for (let c = channelNameLower.length; c > 0; c--) {\n if (punctuationRegex.test(channelNameLower[c - 1])) {\n channelNameLower = channelNameLower.substring(0, c - 1);\n\n if (channelMentionExists(channelNameLower)) {\n const suffix = originalChannelName.substr(c - 1);\n\n let displayName = '';\n let teamName = '';\n\n const channelValue = channelNamesMap[channelNameLower];\n if (typeof channelValue === 'object') {\n displayName = channelValue.display_name;\n teamName = channelValue.team_name || '';\n } else {\n displayName = channelValue;\n }\n\n const alias = addToken(\n channelNameLower,\n teamName,\n '~' + channelNameLower,\n escapeHtml(displayName),\n );\n return alias + suffix;\n }\n } else {\n // If the last character is not punctuation, no point in going any further\n break;\n }\n }\n\n return fullMatch;\n }\n\n let output = text;\n output = output.replace(\n /\\B(~([a-z0-9.\\-_]*))/gi,\n replaceChannelMentionWithToken,\n );\n\n return output;\n}\n\nexport function escapeRegex(text?: string): string {\n return text?.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') || '';\n}\n\nexport function escapeReplaceSpecialPatterns(text?: string): string {\n return text?.replace(/[$]/g, '$$$$') || '';\n}\n\nconst htmlEntities = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\n\nexport function escapeHtml(text: string): string {\n return text.replace(\n /[&<>\"']/g,\n (match: string) => htmlEntities[match as keyof (typeof htmlEntities)],\n );\n}\n\nexport function convertEntityToCharacter(text: string): string {\n return text.\n replace(/</g, '<').\n replace(/>/g, '>').\n replace(/'/g, \"'\").\n replace(/"/g, '\"').\n replace(/&/g, '&');\n}\n\nexport function highlightCurrentMentions(\n text: string,\n tokens: Tokens,\n mentionKeys: MentionKey[] = [],\n) {\n let output = text;\n\n // look for any existing tokens which are self mentions and should be highlighted\n const newTokens = new Map();\n for (const [alias, token] of tokens) {\n const tokenTextLower = token.originalText.toLowerCase();\n\n if (mentionKeys.findIndex((key) => key.key.toLowerCase() === tokenTextLower) !== -1) {\n const index = tokens.size + newTokens.size;\n const newAlias = `$MM_SELFMENTION${index}$`;\n\n newTokens.set(newAlias, {\n value: `${alias}`,\n originalText: token.originalText,\n });\n output = output.replace(alias, newAlias);\n }\n }\n\n // the new tokens are stashed in a separate map since we can't add objects to a map during iteration\n for (const newToken of newTokens) {\n tokens.set(newToken[0], newToken[1]);\n }\n\n // look for self mentions in the text\n function replaceCurrentMentionWithToken(\n fullMatch: string,\n prefix: string,\n mention: string,\n suffix = '',\n ) {\n const index = tokens.size;\n const alias = `$MM_SELFMENTION${index}$`;\n\n tokens.set(alias, {\n value: `${mention}`,\n originalText: mention,\n });\n\n return prefix + alias + suffix;\n }\n\n for (const mention of mentionKeys) {\n if (!mention || !mention.key) {\n continue;\n }\n\n let flags = 'g';\n if (!mention.caseSensitive) {\n flags += 'i';\n }\n\n let pattern;\n if (cjkrPattern.test(mention.key)) {\n // In the case of CJK mention key, even if there's no delimiters (such as spaces) at both ends of a word, it is recognized as a mention key\n pattern = new RegExp(`()(${escapeRegex(mention.key)})()`, flags);\n } else {\n pattern = new RegExp(\n `(^|\\\\W)(${escapeRegex(mention.key)})(\\\\b|_+\\\\b)`,\n flags,\n );\n }\n output = output.replace(pattern, replaceCurrentMentionWithToken);\n }\n\n return output;\n}\n\nexport function highlightWithoutNotificationKeywords(\n text: string,\n tokens: Tokens,\n highlightKeys: HighlightWithoutNotificationKey[] = [],\n) {\n let output = text;\n\n // Store the new tokens in a separate map since we can't add objects to a map during iteration\n const newTokens = new Map();\n\n // Look for highlighting keywords in the tokens\n tokens.forEach((token, alias) => {\n const tokenOriginalText = token.originalText.toLowerCase();\n\n if (highlightKeys.findIndex((highlightKey) => highlightKey.key.toLowerCase() === tokenOriginalText) !== -1) {\n const newIndex = tokens.size + newTokens.size;\n const newAlias = `$MM_HIGHLIGHTKEYWORD${newIndex}$`;\n\n newTokens.set(newAlias, {\n value: `${alias}`,\n originalText: token.originalText,\n });\n output = output.replace(alias, newAlias);\n }\n });\n\n // Copy the new tokens to the tokens map\n newTokens.forEach((newToken, newAlias) => {\n tokens.set(newAlias, newToken);\n });\n\n // Look for highlighting keywords in the text\n function replaceHighlightKeywordsWithToken(\n _: string,\n prefix: string,\n highlightKey: string,\n suffix = '',\n ) {\n const index = tokens.size;\n const alias = `$MM_HIGHLIGHTKEYWORD${index}$`;\n\n // Set the token map with the replacement value so that it can be replaced back later\n tokens.set(alias, {\n value: `${highlightKey}`,\n originalText: highlightKey,\n });\n\n return prefix + alias + suffix;\n }\n\n highlightKeys.\n sort((a, b) => b.key.length - a.key.length).\n forEach(({key}) => {\n if (!key) {\n return;\n }\n\n let pattern;\n if (cjkrPattern.test(key)) {\n // If the key contains Chinese, Japanese, Korean or Russian characters, don't mark word boundaries\n pattern = new RegExp(`()(${escapeRegex(key)})()`, 'gi');\n } else {\n // If the key contains only English characters, mark word boundaries\n pattern = new RegExp(`(^|\\\\W)(${escapeRegex(key)})(\\\\b|_+\\\\b)`, 'gi');\n }\n\n // Replace the key with the token for each occurrence of the key\n output = output.replace(pattern, replaceHighlightKeywordsWithToken);\n });\n\n return output;\n}\n\nconst hashtagRegex = /(^|\\W)(#\\p{L}[\\p{L}\\d\\-_.]*[\\p{L}\\d])/gu;\n\nfunction autolinkHashtags(\n text: string,\n tokens: Tokens,\n minimumHashtagLength = 3,\n) {\n let output = text;\n\n const newTokens = new Map();\n for (const [alias, token] of tokens) {\n if (token.originalText.lastIndexOf('#', 0) === 0) {\n const index = tokens.size + newTokens.size;\n const newAlias = `$MM_HASHTAG${index}$`;\n\n newTokens.set(newAlias, {\n value: `${token.originalText}`,\n originalText: token.originalText,\n hashtag: token.originalText.substring(1),\n });\n\n output = output.replace(alias, newAlias);\n }\n }\n\n // the new tokens are stashed in a separate map since we can't add objects to a map during iteration\n for (const newToken of newTokens) {\n tokens.set(newToken[0], newToken[1]);\n }\n\n // look for hashtags in the text\n function replaceHashtagWithToken(\n fullMatch: string,\n prefix: string,\n originalText: string,\n ) {\n const index = tokens.size;\n const alias = `$MM_HASHTAG${index}$`;\n\n if (originalText.length < minimumHashtagLength + 1) {\n // too short to be a hashtag\n return fullMatch;\n }\n\n tokens.set(alias, {\n value: `${originalText}`,\n originalText,\n hashtag: originalText.substring(1),\n });\n\n return prefix + alias;\n }\n\n return output.replace(\n hashtagRegex,\n replaceHashtagWithToken,\n );\n}\n\nconst puncStart = /^[^\\p{L}\\d\\s#]+/u;\nconst puncEnd = /[^\\p{L}\\d\\s]+$/u;\n\nexport function parseSearchTerms(searchTerm: string): string[] {\n let terms = [];\n\n let termString = searchTerm;\n\n while (termString) {\n let captured;\n\n // check for a quoted string\n captured = (/^\"([^\"]*)\"/).exec(termString);\n if (captured) {\n termString = termString.substring(captured[0].length);\n\n if (captured[1].length > 0) {\n terms.push(captured[1]);\n }\n continue;\n }\n\n // check for a search flag (and don't add it to terms)\n captured = (/^-?(?:in|from|channel|on|before|after): ?\\S+/).exec(termString);\n if (captured) {\n termString = termString.substring(captured[0].length);\n continue;\n }\n\n // capture at mentions differently from the server so we can highlight them with the preceeding at sign\n captured = (/^@[a-z0-9.-_]+\\b/).exec(termString);\n if (captured) {\n termString = termString.substring(captured[0].length);\n\n terms.push(captured[0]);\n continue;\n }\n\n // capture any plain text up until the next quote or search flag\n captured = (/^.+?(?=(?:\\b|\\B-)(?:in:|from:|channel:|on:|before:|after:)|\"|$)/).exec(termString);\n if (captured) {\n termString = termString.substring(captured[0].length);\n\n // break the text up into words based on how the server splits them in SqlPostStore.SearchPosts and then discard empty terms\n terms.push(\n ...captured[0].split(/[ <>+()~@]/).filter((term) => Boolean(term)),\n );\n continue;\n }\n\n // we should never reach this point since at least one of the regexes should match something in the remaining text\n throw new Error(\n 'Infinite loop in search term parsing: \"' + termString + '\"',\n );\n }\n\n // remove punctuation from each term\n terms = terms.map((term) => {\n term.replace(puncStart, '');\n if (term.charAt(term.length - 1) !== '*') {\n term.replace(puncEnd, '');\n }\n return term;\n });\n\n return terms;\n}\n\nfunction convertSearchTermToRegex(term: string): SearchPattern {\n let pattern;\n\n if (cjkrPattern.test(term)) {\n // term contains Chinese, Japanese, or Korean characters so don't mark word boundaries\n pattern = '()(' + escapeRegex(term.replace(/\\*/g, '')) + ')';\n } else if ((/[^\\s][*]$/).test(term)) {\n pattern = '\\\\b()(' + escapeRegex(term.substring(0, term.length - 1)) + ')';\n } else if (term.startsWith('@') || term.startsWith('#')) {\n // needs special handling of the first boundary because a word boundary doesn't work before a symbol\n pattern = '(\\\\W|^)(' + escapeRegex(term) + ')\\\\b';\n } else {\n pattern = '\\\\b()(' + escapeRegex(term) + ')\\\\b';\n }\n\n return {\n pattern: new RegExp(pattern, 'gi'),\n term,\n };\n}\n\nexport function highlightSearchTerms(\n text: string,\n tokens: Tokens,\n searchPatterns: SearchPattern[],\n): string {\n if (!searchPatterns || searchPatterns.length === 0) {\n return text;\n }\n\n let output = text;\n\n function replaceSearchTermWithToken(\n match: string,\n prefix: string,\n word: string,\n ) {\n const index = tokens.size;\n const alias = `$MM_SEARCHTERM${index}$`;\n\n tokens.set(alias, {\n value: `${word}`,\n originalText: word,\n });\n\n return prefix + alias;\n }\n\n for (const pattern of searchPatterns) {\n // highlight existing tokens matching search terms\n const newTokens = new Map();\n for (const [alias, token] of tokens) {\n if (pattern.pattern.test(token.originalText)) {\n // If it's a Hashtag, skip it unless the search term is an exact match.\n let originalText = token.originalText;\n if (originalText.startsWith('#')) {\n originalText = originalText.substr(1);\n }\n let term = pattern.term;\n if (term.startsWith('#')) {\n term = term.substr(1);\n }\n\n if (\n alias.startsWith('$MM_HASHTAG') &&\n alias.endsWith('$') &&\n originalText.toLowerCase() !== term.toLowerCase()\n ) {\n continue;\n }\n\n const index = tokens.size + newTokens.size;\n const newAlias = `$MM_SEARCHTERM${index}$`;\n\n newTokens.set(newAlias, {\n value: `${alias}`,\n originalText: token.originalText,\n });\n\n output = output.replace(alias, newAlias);\n }\n\n // The pattern regexes are global, so calling pattern.pattern.test() above alters their\n // state. Reset lastIndex to 0 between calls to test() to ensure it returns the\n // same result every time it is called with the same value of token.originalText.\n pattern.pattern.lastIndex = 0;\n }\n\n // the new tokens are stashed in a separate map since we can't add objects to a map during iteration\n for (const newToken of newTokens) {\n tokens.set(newToken[0], newToken[1]);\n }\n\n output = output.replace(pattern.pattern, replaceSearchTermWithToken);\n }\n\n return output;\n}\n\nexport function replaceTokens(text: string, tokens: Tokens): string {\n let output = text;\n\n // iterate backwards through the map so that we do replacement in the opposite order that we added tokens\n const aliases = [...tokens.keys()];\n for (let i = aliases.length - 1; i >= 0; i--) {\n const alias = aliases[i];\n const token = tokens.get(alias);\n output = output.replace(alias, escapeReplaceSpecialPatterns(token?.value || ''));\n }\n\n return output;\n}\n\nfunction replaceNewlines(text: string) {\n return text.replace(/\\n/g, ' ');\n}\n\nexport function handleUnicodeEmoji(text: string, emojiMap: EmojiMap, searchPattern: RegExp): string {\n let output = text;\n\n // replace all occurances of unicode emoji with additional markup\n output = output.replace(searchPattern, (emojiMatch) => {\n // convert unicode character to hex string\n const codePoints = [fixedCharCodeAt(emojiMatch, 0)];\n\n if (emojiMatch.length > 1) {\n for (let i = 1; i < emojiMatch.length; i++) {\n const codePoint = fixedCharCodeAt(emojiMatch, i);\n if (codePoint === -1) {\n // Not a complete character\n continue;\n }\n\n codePoints.push(codePoint);\n }\n }\n\n const emojiCode = codePoints.map((codePoint) => codePoint.toString(16)).join('-');\n\n // convert emoji to image if supported, or wrap in span to apply appropriate formatting\n if (emojiMap && emojiMap.hasUnicode(emojiCode)) {\n // we typecasted here because we know that the emojiMap has the emoji with given emojiCode\n const emoji = emojiMap.getUnicode(emojiCode) as SystemEmoji;\n\n return Emoticons.renderEmoji(emoji.short_names[0], emojiMatch);\n }\n\n // wrap unsupported unicode emoji in span to style as needed\n return `${emojiMatch}`;\n });\n\n return output;\n}\n\n// Gets the unicode character code of a character starting at the given index in the string\n// Adapted from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\nfunction fixedCharCodeAt(str: string, idx = 0) {\n // ex. fixedCharCodeAt('\\uD800\\uDC00', 0); // 65536\n // ex. fixedCharCodeAt('\\uD800\\uDC00', 1); // false\n const code = str.charCodeAt(idx);\n\n // High surrogate (could change last hex to 0xDB7F to treat high\n // private surrogates as single characters)\n if (code >= 0xD800 && code <= 0xDBFF) {\n const hi = code;\n const low = str.charCodeAt(idx + 1);\n\n if (isNaN(low)) {\n console.log('High surrogate not followed by low surrogate in fixedCharCodeAt()'); // eslint-disable-line\n }\n\n return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\n }\n\n if (code >= 0xDC00 && code <= 0xDFFF) { // Low surrogate\n // We return false to allow loops to skip this iteration since should have\n // already handled high surrogate above in the previous iteration\n return -1;\n }\n\n return code;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Moment} from 'moment-timezone';\nimport moment from 'moment-timezone';\n\nexport function getBrowserTimezone() {\n return moment.tz.guess();\n}\n\nexport function getBrowserUtcOffset() {\n return moment().utcOffset();\n}\n\nexport function getUtcOffsetForTimeZone(timezone: string) {\n return moment.tz(timezone).utcOffset();\n}\n\nexport function getCurrentDateForTimezone(timezone: string) {\n const tztime = moment().tz(timezone);\n return new Date(tztime.year(), tztime.month(), tztime.date());\n}\n\nexport function getCurrentDateTimeForTimezone(timezone: string) {\n const tztime = moment().tz(timezone);\n return new Date(tztime.year(), tztime.month(), tztime.date(), tztime.hour(), tztime.minute(), tztime.second());\n}\n\nexport function getCurrentMomentForTimezone(timezone?: string) {\n return timezone ? moment.tz(timezone) : moment();\n}\n\nexport function isBeforeTime(dateTime1: Moment, dateTime2: Moment) {\n const a = dateTime1.clone().set({year: 0, month: 0, date: 1});\n const b = dateTime2.clone().set({year: 0, month: 0, date: 1});\n\n return a.isBefore(b);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nconst latinMap: { [key: string]: string } = {\n Á: 'A', // LATIN CAPITAL LETTER A WITH ACUTE\n Ă: 'A', // LATIN CAPITAL LETTER A WITH BREVE\n Ắ: 'A', // LATIN CAPITAL LETTER A WITH BREVE AND ACUTE\n Ặ: 'A', // LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW\n Ằ: 'A', // LATIN CAPITAL LETTER A WITH BREVE AND GRAVE\n Ẳ: 'A', // LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE\n Ẵ: 'A', // LATIN CAPITAL LETTER A WITH BREVE AND TILDE\n Ǎ: 'A', // LATIN CAPITAL LETTER A WITH CARON\n Â: 'A', // LATIN CAPITAL LETTER A WITH CIRCUMFLEX\n Ấ: 'A', // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE\n Ậ: 'A', // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n Ầ: 'A', // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE\n Ẩ: 'A', // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n Ẫ: 'A', // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE\n Ä: 'A', // LATIN CAPITAL LETTER A WITH DIAERESIS\n Ǟ: 'A', // LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON\n Ȧ: 'A', // LATIN CAPITAL LETTER A WITH DOT ABOVE\n Ǡ: 'A', // LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON\n Ạ: 'A', // LATIN CAPITAL LETTER A WITH DOT BELOW\n Ȁ: 'A', // LATIN CAPITAL LETTER A WITH DOUBLE GRAVE\n À: 'A', // LATIN CAPITAL LETTER A WITH GRAVE\n Ả: 'A', // LATIN CAPITAL LETTER A WITH HOOK ABOVE\n Ȃ: 'A', // LATIN CAPITAL LETTER A WITH INVERTED BREVE\n Ā: 'A', // LATIN CAPITAL LETTER A WITH MACRON\n Ą: 'A', // LATIN CAPITAL LETTER A WITH OGONEK\n Å: 'A', // LATIN CAPITAL LETTER A WITH RING ABOVE\n Ǻ: 'A', // LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE\n Ḁ: 'A', // LATIN CAPITAL LETTER A WITH RING BELOW\n Ⱥ: 'A', // LATIN CAPITAL LETTER A WITH STROKE\n Ã: 'A', // LATIN CAPITAL LETTER A WITH TILDE\n Ꜳ: 'AA', // LATIN CAPITAL LETTER AA\n Æ: 'AE', // LATIN CAPITAL LETTER AE\n Ǽ: 'AE', // LATIN CAPITAL LETTER AE WITH ACUTE\n Ǣ: 'AE', // LATIN CAPITAL LETTER AE WITH MACRON\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER AFRICAN D' (Ɖ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER ALPHA' (Ɑ)\n Ꜵ: 'AO', // LATIN CAPITAL LETTER AO\n Ꜷ: 'AU', // LATIN CAPITAL LETTER AU\n Ꜹ: 'AV', // LATIN CAPITAL LETTER AV\n Ꜻ: 'AV', // LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR\n Ꜽ: 'AY', // LATIN CAPITAL LETTER AY\n Ḃ: 'B', // LATIN CAPITAL LETTER B WITH DOT ABOVE\n Ḅ: 'B', // LATIN CAPITAL LETTER B WITH DOT BELOW\n Ɓ: 'B', // LATIN CAPITAL LETTER B WITH HOOK\n Ḇ: 'B', // LATIN CAPITAL LETTER B WITH LINE BELOW\n Ƀ: 'B', // LATIN CAPITAL LETTER B WITH STROKE\n Ƃ: 'B', // LATIN CAPITAL LETTER B WITH TOPBAR\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER BROKEN L' (Ꝇ)\n Ć: 'C', // LATIN CAPITAL LETTER C WITH ACUTE\n Č: 'C', // LATIN CAPITAL LETTER C WITH CARON\n Ç: 'C', // LATIN CAPITAL LETTER C WITH CEDILLA\n Ḉ: 'C', // LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE\n Ĉ: 'C', // LATIN CAPITAL LETTER C WITH CIRCUMFLEX\n Ċ: 'C', // LATIN CAPITAL LETTER C WITH DOT ABOVE\n Ƈ: 'C', // LATIN CAPITAL LETTER C WITH HOOK\n Ȼ: 'C', // LATIN CAPITAL LETTER C WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER CON' (Ꝯ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER CUATRILLO' (Ꜭ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER CUATRILLO WITH COMMA' (Ꜯ)\n Ď: 'D', // LATIN CAPITAL LETTER D WITH CARON\n Ḑ: 'D', // LATIN CAPITAL LETTER D WITH CEDILLA\n Ḓ: 'D', // LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW\n Ḋ: 'D', // LATIN CAPITAL LETTER D WITH DOT ABOVE\n Ḍ: 'D', // LATIN CAPITAL LETTER D WITH DOT BELOW\n Ɗ: 'D', // LATIN CAPITAL LETTER D WITH HOOK\n Ḏ: 'D', // LATIN CAPITAL LETTER D WITH LINE BELOW\n Dz: 'D', // LATIN CAPITAL LETTER D WITH SMALL LETTER Z\n Dž: 'D', // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON\n Đ: 'D', // LATIN CAPITAL LETTER D WITH STROKE\n Ƌ: 'D', // LATIN CAPITAL LETTER D WITH TOPBAR\n DZ: 'DZ', // LATIN CAPITAL LETTER DZ\n DŽ: 'DZ', // LATIN CAPITAL LETTER DZ WITH CARON\n É: 'E', // LATIN CAPITAL LETTER E WITH ACUTE\n Ĕ: 'E', // LATIN CAPITAL LETTER E WITH BREVE\n Ě: 'E', // LATIN CAPITAL LETTER E WITH CARON\n Ȩ: 'E', // LATIN CAPITAL LETTER E WITH CEDILLA\n Ḝ: 'E', // LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE\n Ê: 'E', // LATIN CAPITAL LETTER E WITH CIRCUMFLEX\n Ế: 'E', // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE\n Ệ: 'E', // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n Ề: 'E', // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE\n Ể: 'E', // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n Ễ: 'E', // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE\n Ḙ: 'E', // LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW\n Ë: 'E', // LATIN CAPITAL LETTER E WITH DIAERESIS\n Ė: 'E', // LATIN CAPITAL LETTER E WITH DOT ABOVE\n Ẹ: 'E', // LATIN CAPITAL LETTER E WITH DOT BELOW\n Ȅ: 'E', // LATIN CAPITAL LETTER E WITH DOUBLE GRAVE\n È: 'E', // LATIN CAPITAL LETTER E WITH GRAVE\n Ẻ: 'E', // LATIN CAPITAL LETTER E WITH HOOK ABOVE\n Ȇ: 'E', // LATIN CAPITAL LETTER E WITH INVERTED BREVE\n Ē: 'E', // LATIN CAPITAL LETTER E WITH MACRON\n Ḗ: 'E', // LATIN CAPITAL LETTER E WITH MACRON AND ACUTE\n Ḕ: 'E', // LATIN CAPITAL LETTER E WITH MACRON AND GRAVE\n Ę: 'E', // LATIN CAPITAL LETTER E WITH OGONEK\n Ɇ: 'E', // LATIN CAPITAL LETTER E WITH STROKE\n Ẽ: 'E', // LATIN CAPITAL LETTER E WITH TILDE\n Ḛ: 'E', // LATIN CAPITAL LETTER E WITH TILDE BELOW\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER EGYPTOLOGICAL AIN' (Ꜥ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF' (Ꜣ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER ENG' (Ŋ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER ESH' (Ʃ)\n Ꝫ: 'ET', // LATIN CAPITAL LETTER ET\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER ETH' (Ð)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER EZH' (Ʒ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER EZH REVERSED' (Ƹ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER EZH WITH CARON' (Ǯ)\n Ḟ: 'F', // LATIN CAPITAL LETTER F WITH DOT ABOVE\n Ƒ: 'F', // LATIN CAPITAL LETTER F WITH HOOK\n Ǵ: 'G', // LATIN CAPITAL LETTER G WITH ACUTE\n Ğ: 'G', // LATIN CAPITAL LETTER G WITH BREVE\n Ǧ: 'G', // LATIN CAPITAL LETTER G WITH CARON\n Ģ: 'G', // LATIN CAPITAL LETTER G WITH CEDILLA\n Ĝ: 'G', // LATIN CAPITAL LETTER G WITH CIRCUMFLEX\n Ġ: 'G', // LATIN CAPITAL LETTER G WITH DOT ABOVE\n Ɠ: 'G', // LATIN CAPITAL LETTER G WITH HOOK\n Ḡ: 'G', // LATIN CAPITAL LETTER G WITH MACRON\n Ǥ: 'G', // LATIN CAPITAL LETTER G WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER GAMMA' (Ɣ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER GLOTTAL STOP' (Ɂ)\n Ḫ: 'H', // LATIN CAPITAL LETTER H WITH BREVE BELOW\n Ȟ: 'H', // LATIN CAPITAL LETTER H WITH CARON\n Ḩ: 'H', // LATIN CAPITAL LETTER H WITH CEDILLA\n Ĥ: 'H', // LATIN CAPITAL LETTER H WITH CIRCUMFLEX\n Ⱨ: 'H', // LATIN CAPITAL LETTER H WITH DESCENDER\n Ḧ: 'H', // LATIN CAPITAL LETTER H WITH DIAERESIS\n Ḣ: 'H', // LATIN CAPITAL LETTER H WITH DOT ABOVE\n Ḥ: 'H', // LATIN CAPITAL LETTER H WITH DOT BELOW\n Ħ: 'H', // LATIN CAPITAL LETTER H WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER HALF H' (Ⱶ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER HENG' (Ꜧ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER HWAIR' (Ƕ)\n Í: 'I', // LATIN CAPITAL LETTER I WITH ACUTE\n Ĭ: 'I', // LATIN CAPITAL LETTER I WITH BREVE\n Ǐ: 'I', // LATIN CAPITAL LETTER I WITH CARON\n Î: 'I', // LATIN CAPITAL LETTER I WITH CIRCUMFLEX\n Ï: 'I', // LATIN CAPITAL LETTER I WITH DIAERESIS\n Ḯ: 'I', // LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE\n İ: 'I', // LATIN CAPITAL LETTER I WITH DOT ABOVE\n Ị: 'I', // LATIN CAPITAL LETTER I WITH DOT BELOW\n Ȉ: 'I', // LATIN CAPITAL LETTER I WITH DOUBLE GRAVE\n Ì: 'I', // LATIN CAPITAL LETTER I WITH GRAVE\n Ỉ: 'I', // LATIN CAPITAL LETTER I WITH HOOK ABOVE\n Ȋ: 'I', // LATIN CAPITAL LETTER I WITH INVERTED BREVE\n Ī: 'I', // LATIN CAPITAL LETTER I WITH MACRON\n Į: 'I', // LATIN CAPITAL LETTER I WITH OGONEK\n Ɨ: 'I', // LATIN CAPITAL LETTER I WITH STROKE\n Ĩ: 'I', // LATIN CAPITAL LETTER I WITH TILDE\n Ḭ: 'I', // LATIN CAPITAL LETTER I WITH TILDE BELOW\n Ꝺ: 'D', // LATIN CAPITAL LETTER INSULAR D\n Ꝼ: 'F', // LATIN CAPITAL LETTER INSULAR F\n Ᵹ: 'G', // LATIN CAPITAL LETTER INSULAR G\n Ꞃ: 'R', // LATIN CAPITAL LETTER INSULAR R\n Ꞅ: 'S', // LATIN CAPITAL LETTER INSULAR S\n Ꞇ: 'T', // LATIN CAPITAL LETTER INSULAR T\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER IOTA' (Ɩ)\n Ꝭ: 'IS', // LATIN CAPITAL LETTER IS\n Ĵ: 'J', // LATIN CAPITAL LETTER J WITH CIRCUMFLEX\n Ɉ: 'J', // LATIN CAPITAL LETTER J WITH STROKE\n Ḱ: 'K', // LATIN CAPITAL LETTER K WITH ACUTE\n Ǩ: 'K', // LATIN CAPITAL LETTER K WITH CARON\n Ķ: 'K', // LATIN CAPITAL LETTER K WITH CEDILLA\n Ⱪ: 'K', // LATIN CAPITAL LETTER K WITH DESCENDER\n Ꝃ: 'K', // LATIN CAPITAL LETTER K WITH DIAGONAL STROKE\n Ḳ: 'K', // LATIN CAPITAL LETTER K WITH DOT BELOW\n Ƙ: 'K', // LATIN CAPITAL LETTER K WITH HOOK\n Ḵ: 'K', // LATIN CAPITAL LETTER K WITH LINE BELOW\n Ꝁ: 'K', // LATIN CAPITAL LETTER K WITH STROKE\n Ꝅ: 'K', // LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE\n Ĺ: 'L', // LATIN CAPITAL LETTER L WITH ACUTE\n Ƚ: 'L', // LATIN CAPITAL LETTER L WITH BAR\n Ľ: 'L', // LATIN CAPITAL LETTER L WITH CARON\n Ļ: 'L', // LATIN CAPITAL LETTER L WITH CEDILLA\n Ḽ: 'L', // LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW\n Ḷ: 'L', // LATIN CAPITAL LETTER L WITH DOT BELOW\n Ḹ: 'L', // LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON\n Ⱡ: 'L', // LATIN CAPITAL LETTER L WITH DOUBLE BAR\n Ꝉ: 'L', // LATIN CAPITAL LETTER L WITH HIGH STROKE\n Ḻ: 'L', // LATIN CAPITAL LETTER L WITH LINE BELOW\n Ŀ: 'L', // LATIN CAPITAL LETTER L WITH MIDDLE DOT\n Ɫ: 'L', // LATIN CAPITAL LETTER L WITH MIDDLE TILDE\n Lj: 'L', // LATIN CAPITAL LETTER L WITH SMALL LETTER J\n Ł: 'L', // LATIN CAPITAL LETTER L WITH STROKE\n LJ: 'LJ', // LATIN CAPITAL LETTER LJ\n Ḿ: 'M', // LATIN CAPITAL LETTER M WITH ACUTE\n Ṁ: 'M', // LATIN CAPITAL LETTER M WITH DOT ABOVE\n Ṃ: 'M', // LATIN CAPITAL LETTER M WITH DOT BELOW\n Ɱ: 'M', // LATIN CAPITAL LETTER M WITH HOOK\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER MIDDLE-WELSH LL' (Ỻ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER MIDDLE-WELSH V' (Ỽ)\n Ń: 'N', // LATIN CAPITAL LETTER N WITH ACUTE\n Ň: 'N', // LATIN CAPITAL LETTER N WITH CARON\n Ņ: 'N', // LATIN CAPITAL LETTER N WITH CEDILLA\n Ṋ: 'N', // LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW\n Ṅ: 'N', // LATIN CAPITAL LETTER N WITH DOT ABOVE\n Ṇ: 'N', // LATIN CAPITAL LETTER N WITH DOT BELOW\n Ǹ: 'N', // LATIN CAPITAL LETTER N WITH GRAVE\n Ɲ: 'N', // LATIN CAPITAL LETTER N WITH LEFT HOOK\n Ṉ: 'N', // LATIN CAPITAL LETTER N WITH LINE BELOW\n Ƞ: 'N', // LATIN CAPITAL LETTER N WITH LONG RIGHT LEG\n Nj: 'N', // LATIN CAPITAL LETTER N WITH SMALL LETTER J\n Ñ: 'N', // LATIN CAPITAL LETTER N WITH TILDE\n NJ: 'NJ', // LATIN CAPITAL LETTER NJ\n Ó: 'O', // LATIN CAPITAL LETTER O WITH ACUTE\n Ŏ: 'O', // LATIN CAPITAL LETTER O WITH BREVE\n Ǒ: 'O', // LATIN CAPITAL LETTER O WITH CARON\n Ô: 'O', // LATIN CAPITAL LETTER O WITH CIRCUMFLEX\n Ố: 'O', // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE\n Ộ: 'O', // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n Ồ: 'O', // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE\n Ổ: 'O', // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n Ỗ: 'O', // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE\n Ö: 'O', // LATIN CAPITAL LETTER O WITH DIAERESIS\n Ȫ: 'O', // LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON\n Ȯ: 'O', // LATIN CAPITAL LETTER O WITH DOT ABOVE\n Ȱ: 'O', // LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON\n Ọ: 'O', // LATIN CAPITAL LETTER O WITH DOT BELOW\n Ő: 'O', // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE\n Ȍ: 'O', // LATIN CAPITAL LETTER O WITH DOUBLE GRAVE\n Ò: 'O', // LATIN CAPITAL LETTER O WITH GRAVE\n Ỏ: 'O', // LATIN CAPITAL LETTER O WITH HOOK ABOVE\n Ơ: 'O', // LATIN CAPITAL LETTER O WITH HORN\n Ớ: 'O', // LATIN CAPITAL LETTER O WITH HORN AND ACUTE\n Ợ: 'O', // LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW\n Ờ: 'O', // LATIN CAPITAL LETTER O WITH HORN AND GRAVE\n Ở: 'O', // LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE\n Ỡ: 'O', // LATIN CAPITAL LETTER O WITH HORN AND TILDE\n Ȏ: 'O', // LATIN CAPITAL LETTER O WITH INVERTED BREVE\n Ꝋ: 'O', // LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY\n Ꝍ: 'O', // LATIN CAPITAL LETTER O WITH LOOP\n Ō: 'O', // LATIN CAPITAL LETTER O WITH MACRON\n Ṓ: 'O', // LATIN CAPITAL LETTER O WITH MACRON AND ACUTE\n Ṑ: 'O', // LATIN CAPITAL LETTER O WITH MACRON AND GRAVE\n Ɵ: 'O', // LATIN CAPITAL LETTER O WITH MIDDLE TILDE\n Ǫ: 'O', // LATIN CAPITAL LETTER O WITH OGONEK\n Ǭ: 'O', // LATIN CAPITAL LETTER O WITH OGONEK AND MACRON\n Ø: 'O', // LATIN CAPITAL LETTER O WITH STROKE\n Ǿ: 'O', // LATIN CAPITAL LETTER O WITH STROKE AND ACUTE\n Õ: 'O', // LATIN CAPITAL LETTER O WITH TILDE\n Ṍ: 'O', // LATIN CAPITAL LETTER O WITH TILDE AND ACUTE\n Ṏ: 'O', // LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS\n Ȭ: 'O', // LATIN CAPITAL LETTER O WITH TILDE AND MACRON\n Ƣ: 'OI', // LATIN CAPITAL LETTER OI\n Ꝏ: 'OO', // LATIN CAPITAL LETTER OO\n Ɛ: 'E', // LATIN CAPITAL LETTER OPEN E\n Ɔ: 'O', // LATIN CAPITAL LETTER OPEN O\n Ȣ: 'OU', // LATIN CAPITAL LETTER OU\n Ṕ: 'P', // LATIN CAPITAL LETTER P WITH ACUTE\n Ṗ: 'P', // LATIN CAPITAL LETTER P WITH DOT ABOVE\n Ꝓ: 'P', // LATIN CAPITAL LETTER P WITH FLOURISH\n Ƥ: 'P', // LATIN CAPITAL LETTER P WITH HOOK\n Ꝕ: 'P', // LATIN CAPITAL LETTER P WITH SQUIRREL TAIL\n Ᵽ: 'P', // LATIN CAPITAL LETTER P WITH STROKE\n Ꝑ: 'P', // LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER\n Ꝙ: 'Q', // LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE\n Ꝗ: 'Q', // LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER R ROTUNDA' (Ꝛ)\n Ŕ: 'R', // LATIN CAPITAL LETTER R WITH ACUTE\n Ř: 'R', // LATIN CAPITAL LETTER R WITH CARON\n Ŗ: 'R', // LATIN CAPITAL LETTER R WITH CEDILLA\n Ṙ: 'R', // LATIN CAPITAL LETTER R WITH DOT ABOVE\n Ṛ: 'R', // LATIN CAPITAL LETTER R WITH DOT BELOW\n Ṝ: 'R', // LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON\n Ȑ: 'R', // LATIN CAPITAL LETTER R WITH DOUBLE GRAVE\n Ȓ: 'R', // LATIN CAPITAL LETTER R WITH INVERTED BREVE\n Ṟ: 'R', // LATIN CAPITAL LETTER R WITH LINE BELOW\n Ɍ: 'R', // LATIN CAPITAL LETTER R WITH STROKE\n Ɽ: 'R', // LATIN CAPITAL LETTER R WITH TAIL\n Ꜿ: 'C', // LATIN CAPITAL LETTER REVERSED C WITH DOT\n Ǝ: 'E', // LATIN CAPITAL LETTER REVERSED E\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER RUM ROTUNDA' (Ꝝ)\n Ś: 'S', // LATIN CAPITAL LETTER S WITH ACUTE\n Ṥ: 'S', // LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE\n Š: 'S', // LATIN CAPITAL LETTER S WITH CARON\n Ṧ: 'S', // LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE\n Ş: 'S', // LATIN CAPITAL LETTER S WITH CEDILLA\n Ŝ: 'S', // LATIN CAPITAL LETTER S WITH CIRCUMFLEX\n Ș: 'S', // LATIN CAPITAL LETTER S WITH COMMA BELOW\n Ṡ: 'S', // LATIN CAPITAL LETTER S WITH DOT ABOVE\n Ṣ: 'S', // LATIN CAPITAL LETTER S WITH DOT BELOW\n Ṩ: 'S', // LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER SALTILLO' (Ꞌ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER SCHWA' (Ə)\n ẞ: 'SS', // LATIN CAPITAL LETTER SHARP S\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL' (Ɋ)\n Ť: 'T', // LATIN CAPITAL LETTER T WITH CARON\n Ţ: 'T', // LATIN CAPITAL LETTER T WITH CEDILLA\n Ṱ: 'T', // LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW\n Ț: 'T', // LATIN CAPITAL LETTER T WITH COMMA BELOW\n Ⱦ: 'T', // LATIN CAPITAL LETTER T WITH DIAGONAL STROKE\n Ṫ: 'T', // LATIN CAPITAL LETTER T WITH DOT ABOVE\n Ṭ: 'T', // LATIN CAPITAL LETTER T WITH DOT BELOW\n Ƭ: 'T', // LATIN CAPITAL LETTER T WITH HOOK\n Ṯ: 'T', // LATIN CAPITAL LETTER T WITH LINE BELOW\n Ʈ: 'T', // LATIN CAPITAL LETTER T WITH RETROFLEX HOOK\n Ŧ: 'T', // LATIN CAPITAL LETTER T WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER THORN' (Þ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER THORN WITH STROKE' (Ꝥ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER' (Ꝧ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER TONE FIVE' (Ƽ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER TONE SIX' (Ƅ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER TONE TWO' (Ƨ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER TRESILLO' (Ꜫ)\n Ɐ: 'A', // LATIN CAPITAL LETTER TURNED A\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER TURNED INSULAR G' (Ꝿ)\n Ꞁ: 'L', // LATIN CAPITAL LETTER TURNED L\n Ɯ: 'M', // LATIN CAPITAL LETTER TURNED M\n Ʌ: 'V', // LATIN CAPITAL LETTER TURNED V\n Ꜩ: 'TZ', // LATIN CAPITAL LETTER TZ\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER U BAR' (Ʉ)\n Ú: 'U', // LATIN CAPITAL LETTER U WITH ACUTE\n Ŭ: 'U', // LATIN CAPITAL LETTER U WITH BREVE\n Ǔ: 'U', // LATIN CAPITAL LETTER U WITH CARON\n Û: 'U', // LATIN CAPITAL LETTER U WITH CIRCUMFLEX\n Ṷ: 'U', // LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW\n Ü: 'U', // LATIN CAPITAL LETTER U WITH DIAERESIS\n Ǘ: 'U', // LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE\n Ǚ: 'U', // LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON\n Ǜ: 'U', // LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE\n Ǖ: 'U', // LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON\n Ṳ: 'U', // LATIN CAPITAL LETTER U WITH DIAERESIS BELOW\n Ụ: 'U', // LATIN CAPITAL LETTER U WITH DOT BELOW\n Ű: 'U', // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE\n Ȕ: 'U', // LATIN CAPITAL LETTER U WITH DOUBLE GRAVE\n Ù: 'U', // LATIN CAPITAL LETTER U WITH GRAVE\n Ủ: 'U', // LATIN CAPITAL LETTER U WITH HOOK ABOVE\n Ư: 'U', // LATIN CAPITAL LETTER U WITH HORN\n Ứ: 'U', // LATIN CAPITAL LETTER U WITH HORN AND ACUTE\n Ự: 'U', // LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW\n Ừ: 'U', // LATIN CAPITAL LETTER U WITH HORN AND GRAVE\n Ử: 'U', // LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE\n Ữ: 'U', // LATIN CAPITAL LETTER U WITH HORN AND TILDE\n Ȗ: 'U', // LATIN CAPITAL LETTER U WITH INVERTED BREVE\n Ū: 'U', // LATIN CAPITAL LETTER U WITH MACRON\n Ṻ: 'U', // LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS\n Ų: 'U', // LATIN CAPITAL LETTER U WITH OGONEK\n Ů: 'U', // LATIN CAPITAL LETTER U WITH RING ABOVE\n Ũ: 'U', // LATIN CAPITAL LETTER U WITH TILDE\n Ṹ: 'U', // LATIN CAPITAL LETTER U WITH TILDE AND ACUTE\n Ṵ: 'U', // LATIN CAPITAL LETTER U WITH TILDE BELOW\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER UPSILON' (Ʊ)\n Ꝟ: 'V', // LATIN CAPITAL LETTER V WITH DIAGONAL STROKE\n Ṿ: 'V', // LATIN CAPITAL LETTER V WITH DOT BELOW\n Ʋ: 'V', // LATIN CAPITAL LETTER V WITH HOOK\n Ṽ: 'V', // LATIN CAPITAL LETTER V WITH TILDE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER VEND' (Ꝩ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER VISIGOTHIC Z' (Ꝣ)\n Ꝡ: 'VY', // LATIN CAPITAL LETTER VY\n Ẃ: 'W', // LATIN CAPITAL LETTER W WITH ACUTE\n Ŵ: 'W', // LATIN CAPITAL LETTER W WITH CIRCUMFLEX\n Ẅ: 'W', // LATIN CAPITAL LETTER W WITH DIAERESIS\n Ẇ: 'W', // LATIN CAPITAL LETTER W WITH DOT ABOVE\n Ẉ: 'W', // LATIN CAPITAL LETTER W WITH DOT BELOW\n Ẁ: 'W', // LATIN CAPITAL LETTER W WITH GRAVE\n Ⱳ: 'W', // LATIN CAPITAL LETTER W WITH HOOK\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER WYNN' (Ƿ)\n Ẍ: 'X', // LATIN CAPITAL LETTER X WITH DIAERESIS\n Ẋ: 'X', // LATIN CAPITAL LETTER X WITH DOT ABOVE\n Ý: 'Y', // LATIN CAPITAL LETTER Y WITH ACUTE\n Ŷ: 'Y', // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX\n Ÿ: 'Y', // LATIN CAPITAL LETTER Y WITH DIAERESIS\n Ẏ: 'Y', // LATIN CAPITAL LETTER Y WITH DOT ABOVE\n Ỵ: 'Y', // LATIN CAPITAL LETTER Y WITH DOT BELOW\n Ỳ: 'Y', // LATIN CAPITAL LETTER Y WITH GRAVE\n Ƴ: 'Y', // LATIN CAPITAL LETTER Y WITH HOOK\n Ỷ: 'Y', // LATIN CAPITAL LETTER Y WITH HOOK ABOVE\n Ỿ: 'Y', // LATIN CAPITAL LETTER Y WITH LOOP\n Ȳ: 'Y', // LATIN CAPITAL LETTER Y WITH MACRON\n Ɏ: 'Y', // LATIN CAPITAL LETTER Y WITH STROKE\n Ỹ: 'Y', // LATIN CAPITAL LETTER Y WITH TILDE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CAPITAL LETTER YOGH' (Ȝ)\n Ź: 'Z', // LATIN CAPITAL LETTER Z WITH ACUTE\n Ž: 'Z', // LATIN CAPITAL LETTER Z WITH CARON\n Ẑ: 'Z', // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX\n Ⱬ: 'Z', // LATIN CAPITAL LETTER Z WITH DESCENDER\n Ż: 'Z', // LATIN CAPITAL LETTER Z WITH DOT ABOVE\n Ẓ: 'Z', // LATIN CAPITAL LETTER Z WITH DOT BELOW\n Ȥ: 'Z', // LATIN CAPITAL LETTER Z WITH HOOK\n Ẕ: 'Z', // LATIN CAPITAL LETTER Z WITH LINE BELOW\n Ƶ: 'Z', // LATIN CAPITAL LETTER Z WITH STROKE\n IJ: 'IJ', // LATIN CAPITAL LIGATURE IJ\n Œ: 'OE', // LATIN CAPITAL LIGATURE OE\n // CANNOT FIND APPROXIMATION FOR 'LATIN CROSS' (✝)\n // CANNOT FIND APPROXIMATION FOR 'LATIN EPIGRAPHIC LETTER ARCHAIC M' (ꟿ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN EPIGRAPHIC LETTER I LONGA' (ꟾ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN EPIGRAPHIC LETTER INVERTED M' (ꟽ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN EPIGRAPHIC LETTER REVERSED F' (ꟻ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN EPIGRAPHIC LETTER REVERSED P' (ꟼ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER AIN' (ᴥ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER ALVEOLAR CLICK' (ǂ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER BIDENTAL PERCUSSIVE' (ʭ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER BILABIAL CLICK' (ʘ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER BILABIAL PERCUSSIVE' (ʬ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER DENTAL CLICK' (ǀ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER GLOTTAL STOP' (ʔ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER GLOTTAL STOP WITH STROKE' (ʡ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER INVERTED GLOTTAL STOP' (ʖ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE' (ƾ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER LATERAL CLICK' (ǁ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER PHARYNGEAL VOICED FRICATIVE' (ʕ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER RETROFLEX CLICK' (ǃ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER REVERSED ESH LOOP' (ƪ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE' (ʢ)\n ᴀ: 'A', // LATIN LETTER SMALL CAPITAL A\n ᴁ: 'AE', // LATIN LETTER SMALL CAPITAL AE\n ʙ: 'B', // LATIN LETTER SMALL CAPITAL B\n ᴃ: 'B', // LATIN LETTER SMALL CAPITAL BARRED B\n ᴄ: 'C', // LATIN LETTER SMALL CAPITAL C\n ᴅ: 'D', // LATIN LETTER SMALL CAPITAL D\n ᴇ: 'E', // LATIN LETTER SMALL CAPITAL E\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER SMALL CAPITAL ETH' (ᴆ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER SMALL CAPITAL EZH' (ᴣ)\n ꜰ: 'F', // LATIN LETTER SMALL CAPITAL F\n ɢ: 'G', // LATIN LETTER SMALL CAPITAL G\n ʛ: 'G', // LATIN LETTER SMALL CAPITAL G WITH HOOK\n ʜ: 'H', // LATIN LETTER SMALL CAPITAL H\n ɪ: 'I', // LATIN LETTER SMALL CAPITAL I\n ʁ: 'R', // LATIN LETTER SMALL CAPITAL INVERTED R\n ᴊ: 'J', // LATIN LETTER SMALL CAPITAL J\n ᴋ: 'K', // LATIN LETTER SMALL CAPITAL K\n ʟ: 'L', // LATIN LETTER SMALL CAPITAL L\n ᴌ: 'L', // LATIN LETTER SMALL CAPITAL L WITH STROKE\n ᴍ: 'M', // LATIN LETTER SMALL CAPITAL M\n ɴ: 'N', // LATIN LETTER SMALL CAPITAL N\n ᴏ: 'O', // LATIN LETTER SMALL CAPITAL O\n ɶ: 'OE', // LATIN LETTER SMALL CAPITAL OE\n ᴐ: 'O', // LATIN LETTER SMALL CAPITAL OPEN O\n ᴕ: 'OU', // LATIN LETTER SMALL CAPITAL OU\n ᴘ: 'P', // LATIN LETTER SMALL CAPITAL P\n ʀ: 'R', // LATIN LETTER SMALL CAPITAL R\n ᴎ: 'N', // LATIN LETTER SMALL CAPITAL REVERSED N\n ᴙ: 'R', // LATIN LETTER SMALL CAPITAL REVERSED R\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER SMALL CAPITAL RUM' (ꝶ)\n ꜱ: 'S', // LATIN LETTER SMALL CAPITAL S\n ᴛ: 'T', // LATIN LETTER SMALL CAPITAL T\n ⱻ: 'E', // LATIN LETTER SMALL CAPITAL TURNED E\n ᴚ: 'R', // LATIN LETTER SMALL CAPITAL TURNED R\n ᴜ: 'U', // LATIN LETTER SMALL CAPITAL U\n ᴠ: 'V', // LATIN LETTER SMALL CAPITAL V\n ᴡ: 'W', // LATIN LETTER SMALL CAPITAL W\n ʏ: 'Y', // LATIN LETTER SMALL CAPITAL Y\n ᴢ: 'Z', // LATIN LETTER SMALL CAPITAL Z\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER STRETCHED C' (ʗ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER TWO WITH STROKE' (ƻ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER VOICED LARYNGEAL SPIRANT' (ᴤ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER WYNN' (ƿ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN LETTER YR' (Ʀ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL CAPITAL LETTER I WITH STROKE' (ᵻ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL CAPITAL LETTER U WITH STROKE' (ᵾ)\n á: 'a', // LATIN SMALL LETTER A WITH ACUTE\n ă: 'a', // LATIN SMALL LETTER A WITH BREVE\n ắ: 'a', // LATIN SMALL LETTER A WITH BREVE AND ACUTE\n ặ: 'a', // LATIN SMALL LETTER A WITH BREVE AND DOT BELOW\n ằ: 'a', // LATIN SMALL LETTER A WITH BREVE AND GRAVE\n ẳ: 'a', // LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE\n ẵ: 'a', // LATIN SMALL LETTER A WITH BREVE AND TILDE\n ǎ: 'a', // LATIN SMALL LETTER A WITH CARON\n â: 'a', // LATIN SMALL LETTER A WITH CIRCUMFLEX\n ấ: 'a', // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE\n ậ: 'a', // LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW\n ầ: 'a', // LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE\n ẩ: 'a', // LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE\n ẫ: 'a', // LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE\n ä: 'a', // LATIN SMALL LETTER A WITH DIAERESIS\n ǟ: 'a', // LATIN SMALL LETTER A WITH DIAERESIS AND MACRON\n ȧ: 'a', // LATIN SMALL LETTER A WITH DOT ABOVE\n ǡ: 'a', // LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON\n ạ: 'a', // LATIN SMALL LETTER A WITH DOT BELOW\n ȁ: 'a', // LATIN SMALL LETTER A WITH DOUBLE GRAVE\n à: 'a', // LATIN SMALL LETTER A WITH GRAVE\n ả: 'a', // LATIN SMALL LETTER A WITH HOOK ABOVE\n ȃ: 'a', // LATIN SMALL LETTER A WITH INVERTED BREVE\n ā: 'a', // LATIN SMALL LETTER A WITH MACRON\n ą: 'a', // LATIN SMALL LETTER A WITH OGONEK\n ᶏ: 'a', // LATIN SMALL LETTER A WITH RETROFLEX HOOK\n ẚ: 'a', // LATIN SMALL LETTER A WITH RIGHT HALF RING\n å: 'a', // LATIN SMALL LETTER A WITH RING ABOVE\n ǻ: 'a', // LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE\n ḁ: 'a', // LATIN SMALL LETTER A WITH RING BELOW\n ⱥ: 'a', // LATIN SMALL LETTER A WITH STROKE\n ã: 'a', // LATIN SMALL LETTER A WITH TILDE\n ꜳ: 'aa', // LATIN SMALL LETTER AA\n æ: 'ae', // LATIN SMALL LETTER AE\n ǽ: 'ae', // LATIN SMALL LETTER AE WITH ACUTE\n ǣ: 'ae', // LATIN SMALL LETTER AE WITH MACRON\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ALPHA' (ɑ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK' (ᶐ)\n ꜵ: 'ao', // LATIN SMALL LETTER AO\n ꜷ: 'au', // LATIN SMALL LETTER AU\n ꜹ: 'av', // LATIN SMALL LETTER AV\n ꜻ: 'av', // LATIN SMALL LETTER AV WITH HORIZONTAL BAR\n ꜽ: 'ay', // LATIN SMALL LETTER AY\n ḃ: 'b', // LATIN SMALL LETTER B WITH DOT ABOVE\n ḅ: 'b', // LATIN SMALL LETTER B WITH DOT BELOW\n ɓ: 'b', // LATIN SMALL LETTER B WITH HOOK\n ḇ: 'b', // LATIN SMALL LETTER B WITH LINE BELOW\n ᵬ: 'b', // LATIN SMALL LETTER B WITH MIDDLE TILDE\n ᶀ: 'b', // LATIN SMALL LETTER B WITH PALATAL HOOK\n ƀ: 'b', // LATIN SMALL LETTER B WITH STROKE\n ƃ: 'b', // LATIN SMALL LETTER B WITH TOPBAR\n ɵ: 'o', // LATIN SMALL LETTER BARRED O\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER BOTTOM HALF O' (ᴗ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER BROKEN L' (ꝇ)\n ć: 'c', // LATIN SMALL LETTER C WITH ACUTE\n č: 'c', // LATIN SMALL LETTER C WITH CARON\n ç: 'c', // LATIN SMALL LETTER C WITH CEDILLA\n ḉ: 'c', // LATIN SMALL LETTER C WITH CEDILLA AND ACUTE\n ĉ: 'c', // LATIN SMALL LETTER C WITH CIRCUMFLEX\n ɕ: 'c', // LATIN SMALL LETTER C WITH CURL\n ċ: 'c', // LATIN SMALL LETTER C WITH DOT ABOVE\n ƈ: 'c', // LATIN SMALL LETTER C WITH HOOK\n ȼ: 'c', // LATIN SMALL LETTER C WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER CLOSED OMEGA' (ɷ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER CLOSED OPEN E' (ʚ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER CLOSED REVERSED OPEN E' (ɞ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER CON' (ꝯ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER CUATRILLO' (ꜭ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER CUATRILLO WITH COMMA' (ꜯ)\n ď: 'd', // LATIN SMALL LETTER D WITH CARON\n ḑ: 'd', // LATIN SMALL LETTER D WITH CEDILLA\n ḓ: 'd', // LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW\n ȡ: 'd', // LATIN SMALL LETTER D WITH CURL\n ḋ: 'd', // LATIN SMALL LETTER D WITH DOT ABOVE\n ḍ: 'd', // LATIN SMALL LETTER D WITH DOT BELOW\n ɗ: 'd', // LATIN SMALL LETTER D WITH HOOK\n ᶑ: 'd', // LATIN SMALL LETTER D WITH HOOK AND TAIL\n ḏ: 'd', // LATIN SMALL LETTER D WITH LINE BELOW\n ᵭ: 'd', // LATIN SMALL LETTER D WITH MIDDLE TILDE\n ᶁ: 'd', // LATIN SMALL LETTER D WITH PALATAL HOOK\n đ: 'd', // LATIN SMALL LETTER D WITH STROKE\n ɖ: 'd', // LATIN SMALL LETTER D WITH TAIL\n ƌ: 'd', // LATIN SMALL LETTER D WITH TOPBAR\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER DB DIGRAPH' (ȸ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER DELTA' (ẟ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER DEZH DIGRAPH' (ʤ)\n ı: 'i', // LATIN SMALL LETTER DOTLESS I\n ȷ: 'j', // LATIN SMALL LETTER DOTLESS J\n ɟ: 'j', // LATIN SMALL LETTER DOTLESS J WITH STROKE\n ʄ: 'j', // LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER DUM' (ꝱ)\n dz: 'dz', // LATIN SMALL LETTER DZ\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER DZ DIGRAPH' (ʣ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER DZ DIGRAPH WITH CURL' (ʥ)\n dž: 'dz', // LATIN SMALL LETTER DZ WITH CARON\n é: 'e', // LATIN SMALL LETTER E WITH ACUTE\n ĕ: 'e', // LATIN SMALL LETTER E WITH BREVE\n ě: 'e', // LATIN SMALL LETTER E WITH CARON\n ȩ: 'e', // LATIN SMALL LETTER E WITH CEDILLA\n ḝ: 'e', // LATIN SMALL LETTER E WITH CEDILLA AND BREVE\n ê: 'e', // LATIN SMALL LETTER E WITH CIRCUMFLEX\n ế: 'e', // LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE\n ệ: 'e', // LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW\n ề: 'e', // LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE\n ể: 'e', // LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE\n ễ: 'e', // LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE\n ḙ: 'e', // LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW\n ë: 'e', // LATIN SMALL LETTER E WITH DIAERESIS\n ė: 'e', // LATIN SMALL LETTER E WITH DOT ABOVE\n ẹ: 'e', // LATIN SMALL LETTER E WITH DOT BELOW\n ȅ: 'e', // LATIN SMALL LETTER E WITH DOUBLE GRAVE\n è: 'e', // LATIN SMALL LETTER E WITH GRAVE\n ẻ: 'e', // LATIN SMALL LETTER E WITH HOOK ABOVE\n ȇ: 'e', // LATIN SMALL LETTER E WITH INVERTED BREVE\n ē: 'e', // LATIN SMALL LETTER E WITH MACRON\n ḗ: 'e', // LATIN SMALL LETTER E WITH MACRON AND ACUTE\n ḕ: 'e', // LATIN SMALL LETTER E WITH MACRON AND GRAVE\n ⱸ: 'e', // LATIN SMALL LETTER E WITH NOTCH\n ę: 'e', // LATIN SMALL LETTER E WITH OGONEK\n ᶒ: 'e', // LATIN SMALL LETTER E WITH RETROFLEX HOOK\n ɇ: 'e', // LATIN SMALL LETTER E WITH STROKE\n ẽ: 'e', // LATIN SMALL LETTER E WITH TILDE\n ḛ: 'e', // LATIN SMALL LETTER E WITH TILDE BELOW\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EGYPTOLOGICAL AIN' (ꜥ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EGYPTOLOGICAL ALEF' (ꜣ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ENG' (ŋ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ESH' (ʃ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ESH WITH CURL' (ʆ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ESH WITH PALATAL HOOK' (ᶋ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ESH WITH RETROFLEX HOOK' (ᶘ)\n ꝫ: 'et', // LATIN SMALL LETTER ET\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER ETH' (ð)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EZH' (ʒ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EZH REVERSED' (ƹ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EZH WITH CARON' (ǯ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EZH WITH CURL' (ʓ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EZH WITH RETROFLEX HOOK' (ᶚ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER EZH WITH TAIL' (ƺ)\n ḟ: 'f', // LATIN SMALL LETTER F WITH DOT ABOVE\n ƒ: 'f', // LATIN SMALL LETTER F WITH HOOK\n ᵮ: 'f', // LATIN SMALL LETTER F WITH MIDDLE TILDE\n ᶂ: 'f', // LATIN SMALL LETTER F WITH PALATAL HOOK\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER FENG DIGRAPH' (ʩ)\n ǵ: 'g', // LATIN SMALL LETTER G WITH ACUTE\n ğ: 'g', // LATIN SMALL LETTER G WITH BREVE\n ǧ: 'g', // LATIN SMALL LETTER G WITH CARON\n ģ: 'g', // LATIN SMALL LETTER G WITH CEDILLA\n ĝ: 'g', // LATIN SMALL LETTER G WITH CIRCUMFLEX\n ġ: 'g', // LATIN SMALL LETTER G WITH DOT ABOVE\n ɠ: 'g', // LATIN SMALL LETTER G WITH HOOK\n ḡ: 'g', // LATIN SMALL LETTER G WITH MACRON\n ᶃ: 'g', // LATIN SMALL LETTER G WITH PALATAL HOOK\n ǥ: 'g', // LATIN SMALL LETTER G WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER GAMMA' (ɣ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER GLOTTAL STOP' (ɂ)\n ḫ: 'h', // LATIN SMALL LETTER H WITH BREVE BELOW\n ȟ: 'h', // LATIN SMALL LETTER H WITH CARON\n ḩ: 'h', // LATIN SMALL LETTER H WITH CEDILLA\n ĥ: 'h', // LATIN SMALL LETTER H WITH CIRCUMFLEX\n ⱨ: 'h', // LATIN SMALL LETTER H WITH DESCENDER\n ḧ: 'h', // LATIN SMALL LETTER H WITH DIAERESIS\n ḣ: 'h', // LATIN SMALL LETTER H WITH DOT ABOVE\n ḥ: 'h', // LATIN SMALL LETTER H WITH DOT BELOW\n ɦ: 'h', // LATIN SMALL LETTER H WITH HOOK\n ẖ: 'h', // LATIN SMALL LETTER H WITH LINE BELOW\n ħ: 'h', // LATIN SMALL LETTER H WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER HALF H' (ⱶ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER HENG' (ꜧ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER HENG WITH HOOK' (ɧ)\n ƕ: 'hv', // LATIN SMALL LETTER HV\n í: 'i', // LATIN SMALL LETTER I WITH ACUTE\n ĭ: 'i', // LATIN SMALL LETTER I WITH BREVE\n ǐ: 'i', // LATIN SMALL LETTER I WITH CARON\n î: 'i', // LATIN SMALL LETTER I WITH CIRCUMFLEX\n ï: 'i', // LATIN SMALL LETTER I WITH DIAERESIS\n ḯ: 'i', // LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE\n ị: 'i', // LATIN SMALL LETTER I WITH DOT BELOW\n ȉ: 'i', // LATIN SMALL LETTER I WITH DOUBLE GRAVE\n ì: 'i', // LATIN SMALL LETTER I WITH GRAVE\n ỉ: 'i', // LATIN SMALL LETTER I WITH HOOK ABOVE\n ȋ: 'i', // LATIN SMALL LETTER I WITH INVERTED BREVE\n ī: 'i', // LATIN SMALL LETTER I WITH MACRON\n į: 'i', // LATIN SMALL LETTER I WITH OGONEK\n ᶖ: 'i', // LATIN SMALL LETTER I WITH RETROFLEX HOOK\n ɨ: 'i', // LATIN SMALL LETTER I WITH STROKE\n ĩ: 'i', // LATIN SMALL LETTER I WITH TILDE\n ḭ: 'i', // LATIN SMALL LETTER I WITH TILDE BELOW\n ꝺ: 'd', // LATIN SMALL LETTER INSULAR D\n ꝼ: 'f', // LATIN SMALL LETTER INSULAR F\n ᵹ: 'g', // LATIN SMALL LETTER INSULAR G\n ꞃ: 'r', // LATIN SMALL LETTER INSULAR R\n ꞅ: 's', // LATIN SMALL LETTER INSULAR S\n ꞇ: 't', // LATIN SMALL LETTER INSULAR T\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER IOTA' (ɩ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER IOTA WITH STROKE' (ᵼ)\n ꝭ: 'is', // LATIN SMALL LETTER IS\n ǰ: 'j', // LATIN SMALL LETTER J WITH CARON\n ĵ: 'j', // LATIN SMALL LETTER J WITH CIRCUMFLEX\n ʝ: 'j', // LATIN SMALL LETTER J WITH CROSSED-TAIL\n ɉ: 'j', // LATIN SMALL LETTER J WITH STROKE\n ḱ: 'k', // LATIN SMALL LETTER K WITH ACUTE\n ǩ: 'k', // LATIN SMALL LETTER K WITH CARON\n ķ: 'k', // LATIN SMALL LETTER K WITH CEDILLA\n ⱪ: 'k', // LATIN SMALL LETTER K WITH DESCENDER\n ꝃ: 'k', // LATIN SMALL LETTER K WITH DIAGONAL STROKE\n ḳ: 'k', // LATIN SMALL LETTER K WITH DOT BELOW\n ƙ: 'k', // LATIN SMALL LETTER K WITH HOOK\n ḵ: 'k', // LATIN SMALL LETTER K WITH LINE BELOW\n ᶄ: 'k', // LATIN SMALL LETTER K WITH PALATAL HOOK\n ꝁ: 'k', // LATIN SMALL LETTER K WITH STROKE\n ꝅ: 'k', // LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER KRA' (ĸ)\n ĺ: 'l', // LATIN SMALL LETTER L WITH ACUTE\n ƚ: 'l', // LATIN SMALL LETTER L WITH BAR\n ɬ: 'l', // LATIN SMALL LETTER L WITH BELT\n ľ: 'l', // LATIN SMALL LETTER L WITH CARON\n ļ: 'l', // LATIN SMALL LETTER L WITH CEDILLA\n ḽ: 'l', // LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW\n ȴ: 'l', // LATIN SMALL LETTER L WITH CURL\n ḷ: 'l', // LATIN SMALL LETTER L WITH DOT BELOW\n ḹ: 'l', // LATIN SMALL LETTER L WITH DOT BELOW AND MACRON\n ⱡ: 'l', // LATIN SMALL LETTER L WITH DOUBLE BAR\n ꝉ: 'l', // LATIN SMALL LETTER L WITH HIGH STROKE\n ḻ: 'l', // LATIN SMALL LETTER L WITH LINE BELOW\n ŀ: 'l', // LATIN SMALL LETTER L WITH MIDDLE DOT\n ɫ: 'l', // LATIN SMALL LETTER L WITH MIDDLE TILDE\n ᶅ: 'l', // LATIN SMALL LETTER L WITH PALATAL HOOK\n ɭ: 'l', // LATIN SMALL LETTER L WITH RETROFLEX HOOK\n ł: 'l', // LATIN SMALL LETTER L WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER LAMBDA WITH STROKE' (ƛ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER LEZH' (ɮ)\n lj: 'lj', // LATIN SMALL LETTER LJ\n ſ: 's', // LATIN SMALL LETTER LONG S\n ẜ: 's', // LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE\n ẛ: 's', // LATIN SMALL LETTER LONG S WITH DOT ABOVE\n ẝ: 's', // LATIN SMALL LETTER LONG S WITH HIGH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER LS DIGRAPH' (ʪ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER LUM' (ꝲ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER LZ DIGRAPH' (ʫ)\n ḿ: 'm', // LATIN SMALL LETTER M WITH ACUTE\n ṁ: 'm', // LATIN SMALL LETTER M WITH DOT ABOVE\n ṃ: 'm', // LATIN SMALL LETTER M WITH DOT BELOW\n ɱ: 'm', // LATIN SMALL LETTER M WITH HOOK\n ᵯ: 'm', // LATIN SMALL LETTER M WITH MIDDLE TILDE\n ᶆ: 'm', // LATIN SMALL LETTER M WITH PALATAL HOOK\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER MIDDLE-WELSH LL' (ỻ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER MIDDLE-WELSH V' (ỽ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER MUM' (ꝳ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER N PRECEDED BY APOSTROPHE' (ʼn)\n ń: 'n', // LATIN SMALL LETTER N WITH ACUTE\n ň: 'n', // LATIN SMALL LETTER N WITH CARON\n ņ: 'n', // LATIN SMALL LETTER N WITH CEDILLA\n ṋ: 'n', // LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW\n ȵ: 'n', // LATIN SMALL LETTER N WITH CURL\n ṅ: 'n', // LATIN SMALL LETTER N WITH DOT ABOVE\n ṇ: 'n', // LATIN SMALL LETTER N WITH DOT BELOW\n ǹ: 'n', // LATIN SMALL LETTER N WITH GRAVE\n ɲ: 'n', // LATIN SMALL LETTER N WITH LEFT HOOK\n ṉ: 'n', // LATIN SMALL LETTER N WITH LINE BELOW\n ƞ: 'n', // LATIN SMALL LETTER N WITH LONG RIGHT LEG\n ᵰ: 'n', // LATIN SMALL LETTER N WITH MIDDLE TILDE\n ᶇ: 'n', // LATIN SMALL LETTER N WITH PALATAL HOOK\n ɳ: 'n', // LATIN SMALL LETTER N WITH RETROFLEX HOOK\n ñ: 'n', // LATIN SMALL LETTER N WITH TILDE\n nj: 'nj', // LATIN SMALL LETTER NJ\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER NUM' (ꝴ)\n ó: 'o', // LATIN SMALL LETTER O WITH ACUTE\n ŏ: 'o', // LATIN SMALL LETTER O WITH BREVE\n ǒ: 'o', // LATIN SMALL LETTER O WITH CARON\n ô: 'o', // LATIN SMALL LETTER O WITH CIRCUMFLEX\n ố: 'o', // LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE\n ộ: 'o', // LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW\n ồ: 'o', // LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE\n ổ: 'o', // LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE\n ỗ: 'o', // LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE\n ö: 'o', // LATIN SMALL LETTER O WITH DIAERESIS\n ȫ: 'o', // LATIN SMALL LETTER O WITH DIAERESIS AND MACRON\n ȯ: 'o', // LATIN SMALL LETTER O WITH DOT ABOVE\n ȱ: 'o', // LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON\n ọ: 'o', // LATIN SMALL LETTER O WITH DOT BELOW\n ő: 'o', // LATIN SMALL LETTER O WITH DOUBLE ACUTE\n ȍ: 'o', // LATIN SMALL LETTER O WITH DOUBLE GRAVE\n ò: 'o', // LATIN SMALL LETTER O WITH GRAVE\n ỏ: 'o', // LATIN SMALL LETTER O WITH HOOK ABOVE\n ơ: 'o', // LATIN SMALL LETTER O WITH HORN\n ớ: 'o', // LATIN SMALL LETTER O WITH HORN AND ACUTE\n ợ: 'o', // LATIN SMALL LETTER O WITH HORN AND DOT BELOW\n ờ: 'o', // LATIN SMALL LETTER O WITH HORN AND GRAVE\n ở: 'o', // LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE\n ỡ: 'o', // LATIN SMALL LETTER O WITH HORN AND TILDE\n ȏ: 'o', // LATIN SMALL LETTER O WITH INVERTED BREVE\n ꝋ: 'o', // LATIN SMALL LETTER O WITH LONG STROKE OVERLAY\n ꝍ: 'o', // LATIN SMALL LETTER O WITH LOOP\n ⱺ: 'o', // LATIN SMALL LETTER O WITH LOW RING INSIDE\n ō: 'o', // LATIN SMALL LETTER O WITH MACRON\n ṓ: 'o', // LATIN SMALL LETTER O WITH MACRON AND ACUTE\n ṑ: 'o', // LATIN SMALL LETTER O WITH MACRON AND GRAVE\n ǫ: 'o', // LATIN SMALL LETTER O WITH OGONEK\n ǭ: 'o', // LATIN SMALL LETTER O WITH OGONEK AND MACRON\n ø: 'o', // LATIN SMALL LETTER O WITH STROKE\n ǿ: 'o', // LATIN SMALL LETTER O WITH STROKE AND ACUTE\n õ: 'o', // LATIN SMALL LETTER O WITH TILDE\n ṍ: 'o', // LATIN SMALL LETTER O WITH TILDE AND ACUTE\n ṏ: 'o', // LATIN SMALL LETTER O WITH TILDE AND DIAERESIS\n ȭ: 'o', // LATIN SMALL LETTER O WITH TILDE AND MACRON\n ƣ: 'oi', // LATIN SMALL LETTER OI\n ꝏ: 'oo', // LATIN SMALL LETTER OO\n ɛ: 'e', // LATIN SMALL LETTER OPEN E\n ᶓ: 'e', // LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK\n ɔ: 'o', // LATIN SMALL LETTER OPEN O\n ᶗ: 'o', // LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK\n ȣ: 'ou', // LATIN SMALL LETTER OU\n ṕ: 'p', // LATIN SMALL LETTER P WITH ACUTE\n ṗ: 'p', // LATIN SMALL LETTER P WITH DOT ABOVE\n ꝓ: 'p', // LATIN SMALL LETTER P WITH FLOURISH\n ƥ: 'p', // LATIN SMALL LETTER P WITH HOOK\n ᵱ: 'p', // LATIN SMALL LETTER P WITH MIDDLE TILDE\n ᶈ: 'p', // LATIN SMALL LETTER P WITH PALATAL HOOK\n ꝕ: 'p', // LATIN SMALL LETTER P WITH SQUIRREL TAIL\n ᵽ: 'p', // LATIN SMALL LETTER P WITH STROKE\n ꝑ: 'p', // LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER PHI' (ɸ)\n ꝙ: 'q', // LATIN SMALL LETTER Q WITH DIAGONAL STROKE\n ʠ: 'q', // LATIN SMALL LETTER Q WITH HOOK\n ɋ: 'q', // LATIN SMALL LETTER Q WITH HOOK TAIL\n ꝗ: 'q', // LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER QP DIGRAPH' (ȹ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER R ROTUNDA' (ꝛ)\n ŕ: 'r', // LATIN SMALL LETTER R WITH ACUTE\n ř: 'r', // LATIN SMALL LETTER R WITH CARON\n ŗ: 'r', // LATIN SMALL LETTER R WITH CEDILLA\n ṙ: 'r', // LATIN SMALL LETTER R WITH DOT ABOVE\n ṛ: 'r', // LATIN SMALL LETTER R WITH DOT BELOW\n ṝ: 'r', // LATIN SMALL LETTER R WITH DOT BELOW AND MACRON\n ȑ: 'r', // LATIN SMALL LETTER R WITH DOUBLE GRAVE\n ɾ: 'r', // LATIN SMALL LETTER R WITH FISHHOOK\n ᵳ: 'r', // LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE\n ȓ: 'r', // LATIN SMALL LETTER R WITH INVERTED BREVE\n ṟ: 'r', // LATIN SMALL LETTER R WITH LINE BELOW\n ɼ: 'r', // LATIN SMALL LETTER R WITH LONG LEG\n ᵲ: 'r', // LATIN SMALL LETTER R WITH MIDDLE TILDE\n ᶉ: 'r', // LATIN SMALL LETTER R WITH PALATAL HOOK\n ɍ: 'r', // LATIN SMALL LETTER R WITH STROKE\n ɽ: 'r', // LATIN SMALL LETTER R WITH TAIL\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER RAMS HORN' (ɤ)\n ↄ: 'c', // LATIN SMALL LETTER REVERSED C\n ꜿ: 'c', // LATIN SMALL LETTER REVERSED C WITH DOT\n ɘ: 'e', // LATIN SMALL LETTER REVERSED E\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER REVERSED OPEN E' (ɜ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER REVERSED OPEN E WITH HOOK' (ɝ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK' (ᶔ)\n ɿ: 'r', // LATIN SMALL LETTER REVERSED R WITH FISHHOOK\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER RUM' (ꝵ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER RUM ROTUNDA' (ꝝ)\n ś: 's', // LATIN SMALL LETTER S WITH ACUTE\n ṥ: 's', // LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE\n š: 's', // LATIN SMALL LETTER S WITH CARON\n ṧ: 's', // LATIN SMALL LETTER S WITH CARON AND DOT ABOVE\n ş: 's', // LATIN SMALL LETTER S WITH CEDILLA\n ŝ: 's', // LATIN SMALL LETTER S WITH CIRCUMFLEX\n ș: 's', // LATIN SMALL LETTER S WITH COMMA BELOW\n ṡ: 's', // LATIN SMALL LETTER S WITH DOT ABOVE\n ṣ: 's', // LATIN SMALL LETTER S WITH DOT BELOW\n ṩ: 's', // LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE\n ʂ: 's', // LATIN SMALL LETTER S WITH HOOK\n ᵴ: 's', // LATIN SMALL LETTER S WITH MIDDLE TILDE\n ᶊ: 's', // LATIN SMALL LETTER S WITH PALATAL HOOK\n ȿ: 's', // LATIN SMALL LETTER S WITH SWASH TAIL\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SALTILLO' (ꞌ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SCHWA' (ə)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SCHWA WITH HOOK' (ɚ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK' (ᶕ)\n ɡ: 'g', // LATIN SMALL LETTER SCRIPT G\n ß: 'ss', // LATIN SMALL LETTER SHARP S\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SIDEWAYS DIAERESIZED U' (ᴞ)\n ᴑ: 'o', // LATIN SMALL LETTER SIDEWAYS O\n ᴓ: 'o', // LATIN SMALL LETTER SIDEWAYS O WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SIDEWAYS OPEN O' (ᴒ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SIDEWAYS TURNED M' (ᴟ)\n ᴝ: 'u', // LATIN SMALL LETTER SIDEWAYS U\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER SQUAT REVERSED ESH' (ʅ)\n ť: 't', // LATIN SMALL LETTER T WITH CARON\n ţ: 't', // LATIN SMALL LETTER T WITH CEDILLA\n ṱ: 't', // LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW\n ț: 't', // LATIN SMALL LETTER T WITH COMMA BELOW\n ȶ: 't', // LATIN SMALL LETTER T WITH CURL\n ẗ: 't', // LATIN SMALL LETTER T WITH DIAERESIS\n ⱦ: 't', // LATIN SMALL LETTER T WITH DIAGONAL STROKE\n ṫ: 't', // LATIN SMALL LETTER T WITH DOT ABOVE\n ṭ: 't', // LATIN SMALL LETTER T WITH DOT BELOW\n ƭ: 't', // LATIN SMALL LETTER T WITH HOOK\n ṯ: 't', // LATIN SMALL LETTER T WITH LINE BELOW\n ᵵ: 't', // LATIN SMALL LETTER T WITH MIDDLE TILDE\n ƫ: 't', // LATIN SMALL LETTER T WITH PALATAL HOOK\n ʈ: 't', // LATIN SMALL LETTER T WITH RETROFLEX HOOK\n ŧ: 't', // LATIN SMALL LETTER T WITH STROKE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TAILLESS PHI' (ⱷ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TC DIGRAPH WITH CURL' (ʨ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TESH DIGRAPH' (ʧ)\n ᵺ: 'th', // LATIN SMALL LETTER TH WITH STRIKETHROUGH\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER THORN' (þ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER THORN WITH STROKE' (ꝥ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER' (ꝧ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TONE FIVE' (ƽ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TONE SIX' (ƅ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TONE TWO' (ƨ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TOP HALF O' (ᴖ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TRESILLO' (ꜫ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TS DIGRAPH' (ʦ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TUM' (ꝷ)\n ɐ: 'a', // LATIN SMALL LETTER TURNED A\n ᴂ: 'ae', // LATIN SMALL LETTER TURNED AE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TURNED ALPHA' (ɒ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TURNED DELTA' (ƍ)\n ǝ: 'e', // LATIN SMALL LETTER TURNED E\n ᵷ: 'g', // LATIN SMALL LETTER TURNED G\n ɥ: 'h', // LATIN SMALL LETTER TURNED H\n ʮ: 'h', // LATIN SMALL LETTER TURNED H WITH FISHHOOK\n ʯ: 'h', // LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL\n ᴉ: 'i', // LATIN SMALL LETTER TURNED I\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TURNED INSULAR G' (ꝿ)\n ʞ: 'k', // LATIN SMALL LETTER TURNED K\n ꞁ: 'l', // LATIN SMALL LETTER TURNED L\n ɯ: 'm', // LATIN SMALL LETTER TURNED M\n ɰ: 'm', // LATIN SMALL LETTER TURNED M WITH LONG LEG\n ᴔ: 'oe', // LATIN SMALL LETTER TURNED OE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER TURNED OPEN E' (ᴈ)\n ɹ: 'r', // LATIN SMALL LETTER TURNED R\n ɻ: 'r', // LATIN SMALL LETTER TURNED R WITH HOOK\n ɺ: 'r', // LATIN SMALL LETTER TURNED R WITH LONG LEG\n ⱹ: 'r', // LATIN SMALL LETTER TURNED R WITH TAIL\n ʇ: 't', // LATIN SMALL LETTER TURNED T\n ʌ: 'v', // LATIN SMALL LETTER TURNED V\n ʍ: 'w', // LATIN SMALL LETTER TURNED W\n ʎ: 'y', // LATIN SMALL LETTER TURNED Y\n ꜩ: 'tz', // LATIN SMALL LETTER TZ\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER U BAR' (ʉ)\n ú: 'u', // LATIN SMALL LETTER U WITH ACUTE\n ŭ: 'u', // LATIN SMALL LETTER U WITH BREVE\n ǔ: 'u', // LATIN SMALL LETTER U WITH CARON\n û: 'u', // LATIN SMALL LETTER U WITH CIRCUMFLEX\n ṷ: 'u', // LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW\n ü: 'u', // LATIN SMALL LETTER U WITH DIAERESIS\n ǘ: 'u', // LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE\n ǚ: 'u', // LATIN SMALL LETTER U WITH DIAERESIS AND CARON\n ǜ: 'u', // LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE\n ǖ: 'u', // LATIN SMALL LETTER U WITH DIAERESIS AND MACRON\n ṳ: 'u', // LATIN SMALL LETTER U WITH DIAERESIS BELOW\n ụ: 'u', // LATIN SMALL LETTER U WITH DOT BELOW\n ű: 'u', // LATIN SMALL LETTER U WITH DOUBLE ACUTE\n ȕ: 'u', // LATIN SMALL LETTER U WITH DOUBLE GRAVE\n ù: 'u', // LATIN SMALL LETTER U WITH GRAVE\n ủ: 'u', // LATIN SMALL LETTER U WITH HOOK ABOVE\n ư: 'u', // LATIN SMALL LETTER U WITH HORN\n ứ: 'u', // LATIN SMALL LETTER U WITH HORN AND ACUTE\n ự: 'u', // LATIN SMALL LETTER U WITH HORN AND DOT BELOW\n ừ: 'u', // LATIN SMALL LETTER U WITH HORN AND GRAVE\n ử: 'u', // LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE\n ữ: 'u', // LATIN SMALL LETTER U WITH HORN AND TILDE\n ȗ: 'u', // LATIN SMALL LETTER U WITH INVERTED BREVE\n ū: 'u', // LATIN SMALL LETTER U WITH MACRON\n ṻ: 'u', // LATIN SMALL LETTER U WITH MACRON AND DIAERESIS\n ų: 'u', // LATIN SMALL LETTER U WITH OGONEK\n ᶙ: 'u', // LATIN SMALL LETTER U WITH RETROFLEX HOOK\n ů: 'u', // LATIN SMALL LETTER U WITH RING ABOVE\n ũ: 'u', // LATIN SMALL LETTER U WITH TILDE\n ṹ: 'u', // LATIN SMALL LETTER U WITH TILDE AND ACUTE\n ṵ: 'u', // LATIN SMALL LETTER U WITH TILDE BELOW\n ᵫ: 'ue', // LATIN SMALL LETTER UE\n ꝸ: 'um', // LATIN SMALL LETTER UM\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER UPSILON' (ʊ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER UPSILON WITH STROKE' (ᵿ)\n ⱴ: 'v', // LATIN SMALL LETTER V WITH CURL\n ꝟ: 'v', // LATIN SMALL LETTER V WITH DIAGONAL STROKE\n ṿ: 'v', // LATIN SMALL LETTER V WITH DOT BELOW\n ʋ: 'v', // LATIN SMALL LETTER V WITH HOOK\n ᶌ: 'v', // LATIN SMALL LETTER V WITH PALATAL HOOK\n ⱱ: 'v', // LATIN SMALL LETTER V WITH RIGHT HOOK\n ṽ: 'v', // LATIN SMALL LETTER V WITH TILDE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER VEND' (ꝩ)\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER VISIGOTHIC Z' (ꝣ)\n ꝡ: 'vy', // LATIN SMALL LETTER VY\n ẃ: 'w', // LATIN SMALL LETTER W WITH ACUTE\n ŵ: 'w', // LATIN SMALL LETTER W WITH CIRCUMFLEX\n ẅ: 'w', // LATIN SMALL LETTER W WITH DIAERESIS\n ẇ: 'w', // LATIN SMALL LETTER W WITH DOT ABOVE\n ẉ: 'w', // LATIN SMALL LETTER W WITH DOT BELOW\n ẁ: 'w', // LATIN SMALL LETTER W WITH GRAVE\n ⱳ: 'w', // LATIN SMALL LETTER W WITH HOOK\n ẘ: 'w', // LATIN SMALL LETTER W WITH RING ABOVE\n ẍ: 'x', // LATIN SMALL LETTER X WITH DIAERESIS\n ẋ: 'x', // LATIN SMALL LETTER X WITH DOT ABOVE\n ᶍ: 'x', // LATIN SMALL LETTER X WITH PALATAL HOOK\n ý: 'y', // LATIN SMALL LETTER Y WITH ACUTE\n ŷ: 'y', // LATIN SMALL LETTER Y WITH CIRCUMFLEX\n ÿ: 'y', // LATIN SMALL LETTER Y WITH DIAERESIS\n ẏ: 'y', // LATIN SMALL LETTER Y WITH DOT ABOVE\n ỵ: 'y', // LATIN SMALL LETTER Y WITH DOT BELOW\n ỳ: 'y', // LATIN SMALL LETTER Y WITH GRAVE\n ƴ: 'y', // LATIN SMALL LETTER Y WITH HOOK\n ỷ: 'y', // LATIN SMALL LETTER Y WITH HOOK ABOVE\n ỿ: 'y', // LATIN SMALL LETTER Y WITH LOOP\n ȳ: 'y', // LATIN SMALL LETTER Y WITH MACRON\n ẙ: 'y', // LATIN SMALL LETTER Y WITH RING ABOVE\n ɏ: 'y', // LATIN SMALL LETTER Y WITH STROKE\n ỹ: 'y', // LATIN SMALL LETTER Y WITH TILDE\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LETTER YOGH' (ȝ)\n ź: 'z', // LATIN SMALL LETTER Z WITH ACUTE\n ž: 'z', // LATIN SMALL LETTER Z WITH CARON\n ẑ: 'z', // LATIN SMALL LETTER Z WITH CIRCUMFLEX\n ʑ: 'z', // LATIN SMALL LETTER Z WITH CURL\n ⱬ: 'z', // LATIN SMALL LETTER Z WITH DESCENDER\n ż: 'z', // LATIN SMALL LETTER Z WITH DOT ABOVE\n ẓ: 'z', // LATIN SMALL LETTER Z WITH DOT BELOW\n ȥ: 'z', // LATIN SMALL LETTER Z WITH HOOK\n ẕ: 'z', // LATIN SMALL LETTER Z WITH LINE BELOW\n ᵶ: 'z', // LATIN SMALL LETTER Z WITH MIDDLE TILDE\n ᶎ: 'z', // LATIN SMALL LETTER Z WITH PALATAL HOOK\n ʐ: 'z', // LATIN SMALL LETTER Z WITH RETROFLEX HOOK\n ƶ: 'z', // LATIN SMALL LETTER Z WITH STROKE\n ɀ: 'z', // LATIN SMALL LETTER Z WITH SWASH TAIL\n ff: 'ff', // LATIN SMALL LIGATURE FF\n ffi: 'ffi', // LATIN SMALL LIGATURE FFI\n ffl: 'ffl', // LATIN SMALL LIGATURE FFL\n fi: 'fi', // LATIN SMALL LIGATURE FI\n fl: 'fl', // LATIN SMALL LIGATURE FL\n ij: 'ij', // LATIN SMALL LIGATURE IJ\n // CANNOT FIND APPROXIMATION FOR 'LATIN SMALL LIGATURE LONG S T' (ſt)\n œ: 'oe', // LATIN SMALL LIGATURE OE\n st: 'st', // LATIN SMALL LIGATURE ST\n ₐ: 'a', // LATIN SUBSCRIPT SMALL LETTER A\n ₑ: 'e', // LATIN SUBSCRIPT SMALL LETTER E\n ᵢ: 'i', // LATIN SUBSCRIPT SMALL LETTER I\n ⱼ: 'j', // LATIN SUBSCRIPT SMALL LETTER J\n ₒ: 'o', // LATIN SUBSCRIPT SMALL LETTER O\n ᵣ: 'r', // LATIN SUBSCRIPT SMALL LETTER R\n // CANNOT FIND APPROXIMATION FOR 'LATIN SUBSCRIPT SMALL LETTER SCHWA' (ₔ)\n ᵤ: 'u', // LATIN SUBSCRIPT SMALL LETTER U\n ᵥ: 'v', // LATIN SUBSCRIPT SMALL LETTER V\n ₓ: 'x', // LATIN SUBSCRIPT SMALL LETTER X\n};\n/* eslint-enable */\n\nexport function map(x: string) {\n return latinMap[x] || x;\n}\n\nexport function latinise(input: string) {\n return input.replace(/[^A-Za-z0-9]/g, map);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage, defineMessage} from 'react-intl';\nimport type {IntlShape, MessageDescriptor} from 'react-intl';\n\nimport {getModule} from 'module_registry';\nimport Constants from 'utils/constants';\nimport {latinise} from 'utils/latinise';\nimport * as TextFormatting from 'utils/text_formatting';\n\nimport {unescapeHtmlEntities} from './markdown/renderer';\n\ntype WindowObject = {\n location: {\n origin: string;\n protocol: string;\n hostname: string;\n port: string;\n };\n basename?: string;\n}\n\nexport function cleanUpUrlable(input: string): string {\n let cleaned: string = latinise(input);\n cleaned = cleaned.trim().replace(/-/g, ' ').replace(/[^\\w\\s]/gi, '').toLowerCase().replace(/\\s/g, '-');\n cleaned = cleaned.replace(/^-+/, '');\n cleaned = cleaned.replace(/-+$/, '');\n return cleaned;\n}\n\nexport function getShortenedURL(url = '', getLength = 27): string {\n if (url.length > 35) {\n const subLength = getLength - 14;\n return url.substring(0, 10) + '...' + url.substring(url.length - subLength, url.length);\n }\n return url;\n}\n\nexport function getSiteURLFromWindowObject(obj: WindowObject): string {\n let siteURL = '';\n if (obj.location.origin) {\n siteURL = obj.location.origin;\n } else {\n siteURL = obj.location.protocol + '//' + obj.location.hostname + (obj.location.port ? ':' + obj.location.port : '');\n }\n\n if (siteURL[siteURL.length - 1] === '/') {\n siteURL = siteURL.substring(0, siteURL.length - 1);\n }\n\n if (obj.basename) {\n siteURL += obj.basename;\n }\n\n if (siteURL[siteURL.length - 1] === '/') {\n siteURL = siteURL.substring(0, siteURL.length - 1);\n }\n\n return siteURL;\n}\n\nexport function getSiteURL(): string {\n return getModule<() => string>('utils/url/getSiteURL')?.() ?? getSiteURLFromWindowObject(window);\n}\n\nexport function getBasePathFromWindowObject(obj: WindowObject): string {\n return obj.basename || '';\n}\n\nexport function getBasePath(): string {\n return getBasePathFromWindowObject(window);\n}\n\nexport function getRelativeChannelURL(teamName: string, channelName: string): string {\n return `/${teamName}/channels/${channelName}`;\n}\n\nexport function isUrlSafe(url: string): boolean {\n let unescaped: string;\n\n try {\n unescaped = decodeURIComponent(url);\n } catch (e) {\n unescaped = unescape(url);\n }\n\n unescaped = unescaped.replace(/[^\\w:]/g, '').toLowerCase();\n\n return !unescaped.startsWith('javascript:') && // eslint-disable-line no-script-url\n !unescaped.startsWith('vbscript:') &&\n !unescaped.startsWith('data:');\n}\n\nexport function makeUrlSafe(url: string, defaultUrl = ''): string {\n if (isUrlSafe(url)) {\n return url;\n }\n\n return defaultUrl;\n}\n\nexport function getScheme(url: string): string | null {\n const match = (/^!?([a-z0-9+.-]+):/i).exec(url);\n\n return match && match[1];\n}\n\nexport function removeScheme(url: string) {\n return url.replace(/^([a-z0-9+.-]+):\\/\\//i, '');\n}\n\nfunction formattedError(message: MessageDescriptor, intl?: IntlShape): React.ReactElement | string {\n if (intl) {\n return intl.formatMessage(message);\n }\n\n return (\n \n \n
    \n
    \n );\n}\n\nexport function validateChannelUrl(url: string, intl?: IntlShape): Array {\n const errors: Array = [];\n\n const USER_ID_LENGTH = 26;\n const directMessageRegex = new RegExp(`^.{${USER_ID_LENGTH}}__.{${USER_ID_LENGTH}}$`);\n const isDirectMessageFormat = directMessageRegex.test(url);\n\n const cleanedURL = cleanUpUrlable(url);\n const urlMatched = url.match(/^[a-z0-9]([a-z0-9\\-_]*[a-z0-9])?$/);\n const urlLonger = url.length < Constants.MIN_CHANNELNAME_LENGTH;\n const urlShorter = url.length > Constants.MAX_CHANNELNAME_LENGTH;\n\n if (cleanedURL !== url || !urlMatched || urlMatched[0] !== url || isDirectMessageFormat || urlLonger || urlShorter) {\n if (urlLonger) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.longer',\n defaultMessage: 'URLs must have at least 2 characters.',\n }),\n intl,\n ));\n }\n\n if (urlShorter) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.shorter',\n defaultMessage: 'URLs must have maximum 64 characters.',\n }),\n intl,\n ));\n }\n\n if (url.match(/[^A-Za-z0-9-_]/)) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.noSpecialChars',\n defaultMessage: 'URLs cannot use special characters.',\n }),\n intl,\n ));\n }\n\n if (isDirectMessageFormat) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.invalidDirectMessage',\n defaultMessage: 'User IDs are not allowed in channel URLs.',\n }),\n intl,\n ));\n }\n\n const startsWithoutLetter = url.charAt(0) === '-' || url.charAt(0) === '_';\n const endsWithoutLetter = url.length > 1 && (url.charAt(url.length - 1) === '-' || url.charAt(url.length - 1) === '_');\n if (startsWithoutLetter && endsWithoutLetter) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.startAndEndWithLetter',\n defaultMessage: 'URLs must start and end with a lowercase letter or number.',\n }),\n intl,\n ));\n } else if (startsWithoutLetter) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.startWithLetter',\n defaultMessage: 'URLs must start with a lowercase letter or number.',\n }),\n intl,\n ));\n } else if (endsWithoutLetter) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.endWithLetter',\n defaultMessage: 'URLs must end with a lowercase letter or number.',\n }),\n intl,\n ));\n }\n\n // In case of error we don't detect\n if (errors.length === 0) {\n errors.push(formattedError(\n defineMessage({\n id: 'change_url.invalidUrl',\n defaultMessage: 'Invalid URL',\n }),\n intl,\n ));\n }\n }\n\n return errors;\n}\n\n// Returns true when the URL could possibly cause any external requests.\n// Currently returns false only for permalinks\nconst permalinkPath = new RegExp('^/[0-9a-z_-]{1,64}/pl/[0-9a-z_-]{26}$');\nexport function mightTriggerExternalRequest(url: string, siteURL?: string): boolean {\n if (siteURL && siteURL !== '') {\n let standardSiteURL = siteURL;\n if (standardSiteURL[standardSiteURL.length - 1] === '/') {\n standardSiteURL = standardSiteURL.substring(0, standardSiteURL.length - 1);\n }\n if (!url.startsWith(standardSiteURL)) {\n return true;\n }\n const afterSiteURL = url.substring(standardSiteURL.length);\n return !permalinkPath.test(afterSiteURL);\n }\n return true;\n}\n\nexport function isInternalURL(url: string, siteURL?: string): boolean {\n return url.startsWith(siteURL || '') || url.startsWith('/') || url.startsWith('#');\n}\n\nexport function shouldOpenInNewTab(url: string, siteURL?: string, managedResourcePaths?: string[]): boolean {\n if (!isInternalURL(url, siteURL)) {\n return true;\n }\n\n const path = url.startsWith('/') ? url : url.substring(siteURL?.length || 0);\n\n const unhandledPaths = [\n\n // Paths managed by plugins and public file links aren't handled by the web app\n 'plugins',\n 'files',\n\n // Internal help pages should always open in a new tab\n 'help',\n ];\n\n // Paths managed by another service shouldn't be handled by the web app either\n if (managedResourcePaths) {\n for (const managedPath of managedResourcePaths) {\n unhandledPaths.push(TextFormatting.escapeRegex(managedPath));\n }\n }\n\n return unhandledPaths.some((unhandledPath) => new RegExp('^/' + unhandledPath + '\\\\b').test(path));\n}\n\n// Returns true if the string passed is a permalink URL.\nexport function isPermalinkURL(url: string): boolean {\n const siteURL = getSiteURL();\n\n const regexp = new RegExp(`^(${siteURL})?/[a-z0-9]+([a-z\\\\-0-9]+|(__)?)[a-z0-9]+/pl/\\\\w+`, 'gu');\n\n return isInternalURL(url, siteURL) && (regexp.test(url));\n}\n\nexport function isValidUrl(url = '') {\n const regex = /^https?:\\/\\//i;\n return regex.test(url);\n}\n\nexport function isStringContainingUrl(text: string): boolean {\n const regex = new RegExp('(https?://|www.)');\n return regex.test(text);\n}\n\nexport type UrlValidationCheck = {\n url: string;\n error: typeof BadUrlReasons[keyof typeof BadUrlReasons] | false;\n}\n\nexport const BadUrlReasons = {\n Empty: 'Empty',\n Length: 'Length',\n Reserved: 'Reserved',\n Taken: 'Taken',\n} as const;\n\nexport function teamNameToUrl(teamName: string): UrlValidationCheck {\n // borrowed from team_url, which has some peculiarities tied to being a part of a two screen UI\n // that allows more variation between team name and url than we allow in usages of this function\n const url = cleanUpUrlable(teamName.trim());\n\n if (!url) {\n return {url, error: BadUrlReasons.Empty};\n }\n\n if (url.length < Constants.MIN_TEAMNAME_LENGTH || url.length > Constants.MAX_TEAMNAME_LENGTH) {\n return {url, error: BadUrlReasons.Length};\n }\n\n if (Constants.RESERVED_TEAM_NAMES.some((reservedName) => url.startsWith(reservedName))) {\n return {url, error: BadUrlReasons.Reserved};\n }\n\n return {url, error: false};\n}\n\nexport function channelNameToUrl(channelName: string): UrlValidationCheck {\n // borrowed from team_url, which has some peculiarities tied to being a part of a two screen UI\n // that allows more variation between team name and url than we allow in usages of this function\n const url = cleanUpUrlable(channelName.trim());\n\n if (!url) {\n return {url, error: BadUrlReasons.Empty};\n }\n\n if (url.length < Constants.MIN_CHANNELNAME_LENGTH || url.length > Constants.MAX_CHANNELNAME_LENGTH) {\n return {url, error: BadUrlReasons.Length};\n }\n\n return {url, error: false};\n}\n\nexport function parseLink(href: string, defaultSecure = location.protocol === 'https:') {\n let outHref = href;\n\n if (!href.startsWith('/')) {\n const scheme = getScheme(href);\n if (!scheme) {\n outHref = `${defaultSecure ? 'https' : 'http'}://${outHref}`;\n }\n }\n\n if (!isUrlSafe(unescapeHtmlEntities(href))) {\n return undefined;\n }\n\n return outHref;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {getName} from 'country-list';\nimport crypto from 'crypto';\nimport cssVars from 'css-vars-ponyfill';\nimport type {Locale} from 'date-fns';\nimport isNil from 'lodash/isNil';\nimport moment from 'moment';\nimport React from 'react';\nimport type {LinkHTMLAttributes} from 'react';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Address} from '@mattermost/types/cloud';\nimport type {FileInfo} from '@mattermost/types/files';\nimport type {Group} from '@mattermost/types/groups';\nimport type {GlobalState} from '@mattermost/types/store';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {\n getChannel as getChannelAction,\n getChannelByNameAndTeamName,\n getChannelMember,\n joinChannel,\n} from 'mattermost-redux/actions/channels';\nimport {getPost as getPostAction} from 'mattermost-redux/actions/posts';\nimport {getTeamByName as getTeamByNameAction} from 'mattermost-redux/actions/teams';\nimport {Client4} from 'mattermost-redux/client';\nimport {Preferences, General} from 'mattermost-redux/constants';\nimport {createSelector} from 'mattermost-redux/selectors/create_selector';\nimport {\n getChannel,\n getChannelsNameMapInTeam,\n getMyChannelMemberships,\n} from 'mattermost-redux/selectors/entities/channels';\nimport {getPost} from 'mattermost-redux/selectors/entities/posts';\nimport {getTeammateNameDisplaySetting, isCollapsedThreadsEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport type {Theme} from 'mattermost-redux/selectors/entities/preferences';\nimport {\n getTeamByName,\n getTeamMemberships,\n isTeamSameWithCurrentTeam,\n} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUser, getCurrentUserId, isFirstAdmin} from 'mattermost-redux/selectors/entities/users';\nimport {blendColors, changeOpacity} from 'mattermost-redux/utils/theme_utils';\nimport {displayUsername, isSystemAdmin} from 'mattermost-redux/utils/user_utils';\n\nimport {searchForTerm} from 'actions/post_actions';\nimport {addUserToTeam} from 'actions/team_actions';\nimport {getCurrentLocale, getTranslations} from 'selectors/i18n';\nimport store from 'stores/redux_store';\n\nimport {focusPost} from 'components/permalink_view/actions';\nimport type {TextboxElement} from 'components/textbox';\n\nimport {getHistory} from 'utils/browser_history';\nimport Constants, {FileTypes, ValidationErrors, A11yCustomEventTypes} from 'utils/constants';\nimport type {A11yFocusEventDetail} from 'utils/constants';\nimport * as Keyboard from 'utils/keyboard';\nimport * as UserAgent from 'utils/user_agent';\n\nimport {joinPrivateChannelPrompt} from './channel_utils';\n\nconst CLICKABLE_ELEMENTS = [\n 'a',\n 'button',\n 'img',\n 'svg',\n 'audio',\n 'video',\n];\nconst MS_PER_SECOND = 1000;\nconst MS_PER_MINUTE = 60 * MS_PER_SECOND;\nconst MS_PER_HOUR = 60 * MS_PER_MINUTE;\nconst MS_PER_DAY = 24 * MS_PER_HOUR;\n\nexport enum TimeInformation {\n MILLISECONDS = 'm',\n SECONDS = 's',\n MINUTES = 'x',\n HOURS = 'h',\n DAYS = 'd',\n FUTURE = 'f',\n PAST = 'p'\n}\n\nexport type TimeUnit = Exclude;\nexport type TimeDirection = TimeInformation.FUTURE | TimeInformation.PAST;\n\nexport function createSafeId(prop: {props: {defaultMessage: string}} | string): string | undefined {\n let str = '';\n\n if (typeof prop !== 'string' && prop.props && prop.props.defaultMessage) {\n str = prop.props.defaultMessage;\n } else {\n str = prop.toString();\n }\n\n return str.replace(new RegExp(' ', 'g'), '_');\n}\n\n/**\n * check keydown event for line break combo. Should catch alt/option + enter not all browsers except Safari\n */\nexport function isUnhandledLineBreakKeyCombo(e: React.KeyboardEvent | KeyboardEvent): boolean {\n return Boolean(\n Keyboard.isKeyPressed(e, Constants.KeyCodes.ENTER) &&\n !e.shiftKey && // shift + enter is already handled everywhere, so don't handle again\n (e.altKey && !UserAgent.isSafari() && !Keyboard.cmdOrCtrlPressed(e)), // alt/option + enter is already handled in Safari, so don't handle again\n );\n}\n\n/**\n * insert a new line character at keyboard cursor (or overwrites selection)\n * WARNING: HAS DOM SIDE EFFECTS\n */\nexport function insertLineBreakFromKeyEvent(e: KeyboardEvent): string {\n const el = e.target as TextboxElement;\n const {selectionEnd, selectionStart, value} = el;\n\n // replace text selection (or insert if no selection) with new line character\n const newValue = `${value.substr(0, selectionStart!)}\\n${value.substr(selectionEnd!, value.length)}`;\n\n // update value on DOM element immediately and restore key cursor to correct position\n el.value = newValue;\n setSelectionRange(el, selectionStart! + 1, selectionStart! + 1);\n\n // return the updated string so that component state can be updated\n return newValue;\n}\n\nexport function getDateForUnixTicks(ticks: number): Date {\n return new Date(ticks);\n}\n\n// returns Unix timestamp in milliseconds\nexport function getTimestamp(): number {\n return Date.now();\n}\n\nexport function getRemainingDaysFromFutureTimestamp(timestamp?: number): number {\n const futureDate = new Date(timestamp as number);\n const utcFuture = Date.UTC(futureDate.getFullYear(), futureDate.getMonth(), futureDate.getDate());\n const today = new Date();\n const utcToday = Date.UTC(today.getFullYear(), today.getMonth(), today.getDate());\n\n return Math.floor((utcFuture - utcToday) / MS_PER_DAY);\n}\n\nexport function addTimeToTimestamp(timestamp: number, type: TimeUnit, diff: number, timeline: TimeDirection) {\n let modifier = 1;\n switch (type) {\n case TimeInformation.SECONDS:\n modifier = MS_PER_SECOND;\n break;\n case TimeInformation.MINUTES:\n modifier = MS_PER_MINUTE;\n break;\n case TimeInformation.HOURS:\n modifier = MS_PER_HOUR;\n break;\n case TimeInformation.DAYS:\n modifier = MS_PER_DAY;\n break;\n }\n\n return timeline === TimeInformation.FUTURE ? timestamp + (diff * modifier) : timestamp - (diff * modifier);\n}\n\n/**\n * Verifies if a date is in a particular given range of days from today\n * @param timestamp date you want to check is in the range of the provided number of days from today\n * @param days number of days you want to check your date against to\n * @param timeline 'f' represents future, 'p' represents past\n * @returns boolean, true if your date is in the range of the provided number of days\n */\nexport function isDateWithinDaysRange(timestamp: number, days: number, timeline: TimeDirection): boolean {\n const today = new Date().getTime();\n const daysSince = Math.round((today - timestamp) / MS_PER_DAY);\n return timeline === TimeInformation.PAST ? daysSince <= days : daysSince >= days;\n}\n\nexport function getLocaleDateFromUTC(timestamp: number, format = 'YYYY/MM/DD HH:mm:ss', userTimezone = '') {\n if (!timestamp) {\n return moment.now();\n }\n const timezone = userTimezone ? ' ' + moment().tz(userTimezone).format('z') : '';\n return moment.unix(timestamp).format(format) + timezone;\n}\n\nexport function replaceHtmlEntities(text: string) {\n const tagsToReplace = {\n '&': '&',\n '<': '<',\n '>': '>',\n };\n let newtext = text;\n Object.entries(tagsToReplace).forEach(([tag, replacement]) => {\n const regex = new RegExp(tag, 'g');\n newtext = newtext.replace(regex, replacement);\n });\n return newtext;\n}\n\nexport function isGIFImage(extin: string): boolean {\n return extin.toLowerCase() === Constants.IMAGE_TYPE_GIF;\n}\n\nconst removeQuerystringOrHash = (extin: string): string => {\n return extin.split(/[?#]/)[0];\n};\n\nexport const getFileType = (extin: string): typeof FileTypes[keyof typeof FileTypes] => {\n const ext = removeQuerystringOrHash(extin.toLowerCase());\n\n if (Constants.TEXT_TYPES.indexOf(ext) > -1) {\n return FileTypes.TEXT;\n }\n\n if (Constants.IMAGE_TYPES.indexOf(ext) > -1) {\n return FileTypes.IMAGE;\n }\n\n if (Constants.AUDIO_TYPES.indexOf(ext) > -1) {\n return FileTypes.AUDIO;\n }\n\n if (Constants.VIDEO_TYPES.indexOf(ext) > -1) {\n return FileTypes.VIDEO;\n }\n\n if (Constants.SPREADSHEET_TYPES.indexOf(ext) > -1) {\n return FileTypes.SPREADSHEET;\n }\n\n if (Constants.CODE_TYPES.indexOf(ext) > -1) {\n return FileTypes.CODE;\n }\n\n if (Constants.WORD_TYPES.indexOf(ext) > -1) {\n return FileTypes.WORD;\n }\n\n if (Constants.PRESENTATION_TYPES.indexOf(ext) > -1) {\n return FileTypes.PRESENTATION;\n }\n\n if (Constants.PDF_TYPES.indexOf(ext) > -1) {\n return FileTypes.PDF;\n }\n\n if (Constants.PATCH_TYPES.indexOf(ext) > -1) {\n return FileTypes.PATCH;\n }\n\n if (Constants.SVG_TYPES.indexOf(ext) > -1) {\n return FileTypes.SVG;\n }\n\n return FileTypes.OTHER;\n};\n\nexport function getFileIconPath(fileInfo: FileInfo) {\n const fileType = getFileType(fileInfo.extension) as keyof typeof Constants.ICON_FROM_TYPE;\n\n let icon;\n if (fileType in Constants.ICON_FROM_TYPE) {\n icon = Constants.ICON_FROM_TYPE[fileType];\n } else {\n icon = Constants.ICON_FROM_TYPE.other;\n }\n\n return icon;\n}\n\nexport function getCompassIconClassName(fileTypeIn: string, outline = true, large = false) {\n const fileType = fileTypeIn.toLowerCase() as keyof typeof Constants.ICON_FROM_TYPE;\n let icon = 'generic';\n\n if (fileType in Constants.ICON_NAME_FROM_TYPE) {\n icon = Constants.ICON_NAME_FROM_TYPE[fileType];\n }\n\n icon = icon === 'ppt' ? 'powerpoint' : icon;\n icon = icon === 'spreadsheet' ? 'excel' : icon;\n icon = icon === 'other' ? 'generic' : icon;\n\n return `icon-file-${icon}${outline ? '-outline' : ''}${large ? '-large' : ''}`;\n}\n\nexport function getIconClassName(fileTypeIn: string) {\n const fileType = fileTypeIn.toLowerCase()as keyof typeof Constants.ICON_FROM_TYPE;\n\n if (fileType in Constants.ICON_NAME_FROM_TYPE) {\n return Constants.ICON_NAME_FROM_TYPE[fileType];\n }\n\n return 'generic';\n}\n\nexport function toTitleCase(str: string): string {\n function doTitleCase(txt: string) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n }\n return str.replace(/\\w\\S*/g, doTitleCase);\n}\n\nfunction dropAlpha(value: string): string {\n return value.substr(value.indexOf('(') + 1).split(',', 3).join(',');\n}\n\n// given '#fffff', returns '255, 255, 255' (no trailing comma)\nexport function toRgbValues(hexStr: string): string {\n const rgbaStr = `${parseInt(hexStr.substr(1, 2), 16)}, ${parseInt(hexStr.substr(3, 2), 16)}, ${parseInt(hexStr.substr(5, 2), 16)}`;\n return rgbaStr;\n}\n\nexport function applyTheme(theme: Theme) {\n if (theme.centerChannelColor) {\n changeCss('.app__body .markdown__table tbody tr:nth-child(2n)', 'background:' + changeOpacity(theme.centerChannelColor, 0.07));\n changeCss('.app__body .channel-header__info .header-dropdown__icon', 'color:' + changeOpacity(theme.centerChannelColor, 0.75));\n changeCss('.app__body .channel-header .pinned-posts-button svg', 'fill:' + changeOpacity(theme.centerChannelColor, 0.75));\n changeCss('.app__body .channel-header .channel-header_plugin-dropdown svg', 'fill:' + changeOpacity(theme.centerChannelColor, 0.75));\n changeCss('.app__body .file-preview, .app__body .post-image__details, .app__body .markdown__table th, .app__body .markdown__table td, .app__body .webhooks__container, .app__body .dropdown-menu', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.emoji-picker .emoji-picker__header', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.app__body .popover.bottom>.arrow', 'border-bottom-color:' + changeOpacity(theme.centerChannelColor, 0.25));\n changeCss('.app__body .btn.btn-transparent', 'color:' + changeOpacity(theme.centerChannelColor, 0.7));\n changeCss('.app__body .popover.right>.arrow', 'border-right-color:' + changeOpacity(theme.centerChannelColor, 0.25));\n changeCss('.app__body .popover.left>.arrow', 'border-left-color:' + changeOpacity(theme.centerChannelColor, 0.25));\n changeCss('.app__body .popover.top>.arrow', 'border-top-color:' + changeOpacity(theme.centerChannelColor, 0.25));\n changeCss('.app__body .popover .popover__row', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('body.app__body, .app__body .custom-textarea', 'color:' + theme.centerChannelColor);\n changeCss('.app__body .input-group-addon', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.1));\n changeCss('@media(min-width: 768px){.app__body .post-list__table .post-list__content .dropdown-menu a:hover, .dropdown-menu > li > button:hover', 'background:' + changeOpacity(theme.centerChannelColor, 0.1));\n changeCss('.app__body .MenuWrapper .MenuItem > button:hover, .app__body .Menu .MenuItem > button:hover, .app__body .MenuWrapper .MenuItem > button:focus, .app__body .MenuWrapper .SubMenuItem > div:focus, .app__body .MenuWrapper .MenuItem > a:hover, .MenuItem > div:hover, .SubMenuItemContainer:not(.hasDivider):hover, .app__body .dropdown-menu div > a:focus, .app__body .dropdown-menu div > a:hover, .dropdown-menu li > a:focus, .app__body .dropdown-menu li > a:hover', 'background:' + changeOpacity(theme.centerChannelColor, 0.1));\n changeCss('.app__body .MenuWrapper .MenuItem > button:hover, .app__body .Menu .MenuItem > button:hover, .app__body .MenuWrapper .MenuItem > button:focus, .app__body .MenuWrapper .SubMenuItem > div:focus, .app__body .MenuWrapper .MenuItem > a:hover, .app__body .MenuWrapper .MenuItem > div:hover, .app__body .MenuWrapper .SubMenuItemContainer:not(.hasDivider):hover, .app__body .MenuWrapper .SubMenuItemContainer:not(.hasDivider):focus, .app__body .MenuWrapper .SubMenuItemContainer:focus, .app__body .dropdown-menu div > a:focus, .app__body .dropdown-menu div > a:hover, .dropdown-menu li > a:focus, .app__body .dropdown-menu li > a:hover', 'background-color:' + changeOpacity(theme.centerChannelColor, 0.1));\n changeCss('.app__body .attachment .attachment__content, .app__body .attachment-actions button', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.16));\n changeCss('.app__body .attachment-actions button:focus, .app__body .attachment-actions button:hover', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.5));\n changeCss('.app__body .attachment-actions button:focus, .app__body .attachment-actions button:hover', 'background:' + changeOpacity(theme.centerChannelColor, 0.03));\n changeCss('.app__body .input-group-addon, .app__body .webhooks__container', 'background:' + changeOpacity(theme.centerChannelColor, 0.05));\n changeCss('.app__body .date-separator .separator__text', 'color:' + theme.centerChannelColor);\n changeCss('.app__body .date-separator .separator__hr, .app__body .modal-footer, .app__body .modal .custom-textarea', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.app__body .search-item-container', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.1));\n changeCss('.app__body .modal .custom-textarea:focus', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.3));\n changeCss('.app__body .channel-intro, .app__body hr, .app__body .modal .settings-modal .settings-table .settings-content .appearance-section .theme-elements__header, .app__body .user-settings .authorized-app:not(:last-child)', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.app__body .post.post--comment.other--root.current--user .post-comment, .app__body pre', 'background:' + changeOpacity(theme.centerChannelColor, 0.05));\n changeCss('.app__body .post.post--comment.other--root.current--user .post-comment, .app__body .more-modal__list .more-modal__row, .app__body .member-div:first-child, .app__body .member-div, .app__body .access-history__table .access__report, .app__body .activity-log__table', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.1));\n changeCss('@media(max-width: 1800px){.app__body .inner-wrap.move--left .post.post--comment.same--root', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.07));\n changeCss('.app__body .post.post--hovered', 'background:' + changeOpacity(theme.centerChannelColor, 0.08));\n changeCss('.app__body .attachment__body__wrap.btn-close', 'background:' + changeOpacity(theme.centerChannelColor, 0.08));\n changeCss('.app__body .attachment__body__wrap.btn-close', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('@media(min-width: 768px){.app__body .post.a11y--active, .app__body .modal .settings-modal .settings-table .settings-content .section-min:hover', 'background:' + changeOpacity(theme.centerChannelColor, 0.04));\n changeCss('@media(min-width: 768px){.app__body .post.post--editing', 'background:' + changeOpacity(theme.buttonBg, 0.08));\n changeCss('@media(min-width: 768px){.app__body .post.current--user:hover .post__body ', 'background: transparent;');\n changeCss('.app__body .more-modal__row.more-modal__row--selected, .app__body .date-separator.hovered--before:after, .app__body .date-separator.hovered--after:before, .app__body .new-separator.hovered--after:before, .app__body .new-separator.hovered--before:after', 'background:' + changeOpacity(theme.centerChannelColor, 0.07));\n changeCss('@media(min-width: 768px){.app__body .dropdown-menu>li>a:focus, .app__body .dropdown-menu>li>a:hover', 'background:' + changeOpacity(theme.centerChannelColor, 0.15));\n changeCss('.app__body .form-control[disabled], .app__body .form-control[readonly], .app__body fieldset[disabled] .form-control', 'background:' + changeOpacity(theme.centerChannelColor, 0.1));\n changeCss('.app__body .sidebar--right', 'color:' + theme.centerChannelColor);\n changeCss('.app__body .modal .settings-modal .settings-table .settings-content .appearance-section .theme-elements__body', 'background:' + changeOpacity(theme.centerChannelColor, 0.05));\n changeCss('body', 'scrollbar-arrow-color:' + theme.centerChannelColor);\n changeCss('.app__body .post.post--compact .post-image__column .post-image__details svg, .app__body .modal .about-modal .about-modal__logo svg, .app__body .status svg, .app__body .edit-post__actions .icon svg', 'fill:' + theme.centerChannelColor);\n changeCss('.app__body .post-list__new-messages-below', 'background:' + changeColor(theme.centerChannelColor, 0.5));\n changeCss('@media(min-width: 768px){.app__body .post.post--compact.same--root.post--comment .post__content', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.app__body .post.post--comment.current--user .post__body', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.app__body .emoji-picker', 'color:' + theme.centerChannelColor);\n changeCss('.app__body .emoji-picker', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.app__body .emoji-picker__search-icon', 'color:' + changeOpacity(theme.centerChannelColor, 0.4));\n changeCss('.app__body .emoji-picker__preview, .app__body .emoji-picker__items, .app__body .emoji-picker__search-container', 'border-color:' + changeOpacity(theme.centerChannelColor, 0.2));\n changeCss('.emoji-picker__category .fa:hover', 'color:' + changeOpacity(theme.centerChannelColor, 0.8));\n changeCss('.app__body .emoji-picker__item-wrapper:hover', 'background-color:' + changeOpacity(theme.centerChannelColor, 0.8));\n changeCss('.app__body .icon__postcontent_picker:hover', 'color:' + changeOpacity(theme.centerChannelColor, 0.8));\n changeCss('.app__body .emoji-picker .nav-tabs li a', 'fill:' + theme.centerChannelColor);\n changeCss('.app__body .post .post-collapse__show-more-button', `border-color:${changeOpacity(theme.centerChannelColor, 0.1)}`);\n changeCss('.app__body .post .post-collapse__show-more-line', `background-color:${changeOpacity(theme.centerChannelColor, 0.1)}`);\n }\n\n if (theme.newMessageSeparator) {\n changeCss('.app__body .new-separator .separator__text', 'color:' + theme.newMessageSeparator);\n changeCss('.app__body .new-separator .separator__hr', 'border-color:' + changeOpacity(theme.newMessageSeparator, 0.5));\n }\n\n if (theme.linkColor) {\n changeCss('.app__body .more-modal__list .a11y--focused, .app__body .post.a11y--focused, .app__body .channel-header.a11y--focused, .app__body .post-create.a11y--focused, .app__body .user-popover.a11y--focused, .app__body .post-message__text.a11y--focused', 'box-shadow: inset 0 0 1px 3px ' + changeOpacity(theme.linkColor, 0.5) + ', inset 0 0 0 1px ' + theme.linkColor);\n changeCss('.app__body .a11y--focused', 'box-shadow: 0 0 1px 3px ' + changeOpacity(theme.linkColor, 0.5) + ', 0 0 0 1px ' + theme.linkColor);\n changeCss('.app__body .channel-header .channel-header__favorites.inactive:hover, .app__body a, .app__body a:focus, .app__body a:hover, .app__body .color--link, .app__body a:focus, .app__body .color--link:hover', 'color:' + theme.linkColor);\n changeCss('.app__body .attachment .attachment__container', 'border-left-color:' + changeOpacity(theme.linkColor, 0.5));\n changeCss('.app__body .channel-header .channel-header_plugin-dropdown a:hover', 'background:' + changeOpacity(theme.linkColor, 0.08));\n changeCss('.app__body .post .post__reply', 'fill:' + theme.linkColor);\n changeCss('.app__body .post .card-icon__container.active svg, .app__body .post .post__reply', 'fill:' + theme.linkColor);\n changeCss('.app__body .channel-header .pinned-posts-button:hover svg', 'fill:' + changeOpacity(theme.linkColor, 0.6));\n changeCss('.app__body .channel-header .channel-header_plugin-dropdown a:hover', 'border-color:' + theme.linkColor);\n changeCss('.app__body .channel-header .channel-header_plugin-dropdown a:hover svg', 'fill:' + theme.linkColor);\n changeCss('.app__body .channel-header .dropdown-toggle:hover .heading, .app__body .channel-header .dropdown-toggle:hover .header-dropdown__icon, .app__body .channel-header__title .open .heading, .app__body .channel-header__info .channel-header__title .open .header-dropdown__icon, .app__body .channel-header__title .open .heading, .app__body .channel-header__info .channel-header__title .open .heading', 'color:' + theme.linkColor);\n changeCss('.emoji-picker__container .icon--emoji.active svg', 'fill:' + theme.linkColor);\n changeCss('.app__body .channel-header .channel-header_plugin-dropdown a:hover .fa', 'color:' + theme.linkColor);\n changeCss('.app__body .post .post-collapse__show-more', `color:${theme.linkColor}`);\n changeCss('.app__body .post .post-attachment-collapse__show-more', `color:${theme.linkColor}`);\n changeCss('.app__body .post .post-collapse__show-more-button:hover', `background-color:${theme.linkColor}`);\n }\n\n if (theme.buttonBg) {\n changeCss('.app__body .modal .settings-modal .profile-img__remove:hover, .app__body .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover:before, .app__body .modal .settings-modal .team-img__remove:hover, .app__body .btn.btn-transparent:hover, .app__body .btn.btn-transparent:active, .app__body .post-image__details .post-image__download svg:hover, .app__body .file-view--single .file__download:hover, .app__body .new-messages__button div, .app__body .tutorial__circles .circle.active', 'background:' + theme.buttonBg);\n changeCss('.app__body .system-notice__logo svg', 'fill:' + theme.buttonBg);\n changeCss('.app__body .post-image__details .post-image__download svg:hover', 'border-color:' + theme.buttonBg);\n changeCss('.app__body .emoji-picker .nav-tabs li.active a, .app__body .emoji-picker .nav-tabs li a:hover', 'fill:' + theme.buttonBg);\n changeCss('.app__body .emoji-picker .nav-tabs > li.active > a', 'border-bottom-color:' + theme.buttonBg + '!important;');\n changeCss('.app__body .btn-primary:hover', 'background:' + blendColors(theme.buttonBg, '#000000', 0.1));\n changeCss('.app__body .btn-primary:active', 'background:' + blendColors(theme.buttonBg, '#000000', 0.2));\n\n changeCss('.app__body .SendMessageButton:not(.disabled):hover', 'background:' + blendColors(theme.buttonBg, '#000000', 0.1));\n changeCss('.app__body #button_send_post_options:not(.disabled):hover', 'background:' + blendColors(theme.buttonBg, '#000000', 0.1));\n }\n\n if (theme.buttonColor) {\n changeCss('.app__body .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover, .app__body .modal .settings-modal .team-img__remove:hover, .app__body .btn.btn-transparent:hover, .app__body .btn.btn-transparent:active, .app__body .new-messages__button div', 'color:' + theme.buttonColor);\n changeCss('.app__body .new-messages__button svg', 'fill:' + theme.buttonColor);\n changeCss('.app__body .post-image__details .post-image__download svg:hover, .app__body .file-view--single .file__download svg', 'stroke:' + theme.buttonColor);\n }\n\n if (theme.errorTextColor) {\n changeCss('.app__body .error-text, .app__body .modal .settings-modal .settings-table .settings-content .has-error, .app__body .modal .input__help.error, .app__body .color--error, .app__body .has-error .help-block, .app__body .has-error .control-label, .app__body .has-error .radio, .app__body .has-error .checkbox, .app__body .has-error .radio-inline, .app__body .has-error .checkbox-inline, .app__body .has-error.radio label, .app__body .has-error.checkbox label, .app__body .has-error.radio-inline label, .app__body .has-error.checkbox-inline label', 'color:' + theme.errorTextColor);\n changeCss('.app__body .btn-danger:hover', 'background:' + blendColors(theme.errorTextColor, '#000000', 0.1));\n changeCss('.app__body .btn-danger:active', 'background:' + blendColors(theme.errorTextColor, '#000000', 0.2));\n }\n\n if (theme.mentionHighlightBg) {\n changeCss('.app__body .search-highlight', 'background:' + theme.mentionHighlightBg);\n changeCss('.app__body .post.post--highlight', 'background:' + changeOpacity(theme.mentionHighlightBg, 0.5));\n }\n\n if (theme.mentionHighlightLink) {\n changeCss('.app__body .search-highlight', 'color:' + theme.mentionHighlightLink);\n changeCss('.app__body .search-highlight > a', 'color: inherit');\n }\n\n if (!theme.codeTheme) {\n theme.codeTheme = Constants.DEFAULT_CODE_THEME;\n }\n updateCodeTheme(theme.codeTheme);\n\n cssVars({\n variables: {\n\n // RGB values derived from theme hex values i.e. '255, 255, 255'\n // (do not apply opacity mutations here)\n 'away-indicator-rgb': toRgbValues(theme.awayIndicator),\n 'button-bg-rgb': toRgbValues(theme.buttonBg),\n 'button-color-rgb': toRgbValues(theme.buttonColor),\n 'center-channel-bg-rgb': toRgbValues(theme.centerChannelBg),\n 'center-channel-color-rgb': toRgbValues(theme.centerChannelColor),\n 'dnd-indicator-rgb': toRgbValues(theme.dndIndicator),\n 'error-text-color-rgb': toRgbValues(theme.errorTextColor),\n 'link-color-rgb': toRgbValues(theme.linkColor),\n 'mention-bg-rgb': toRgbValues(theme.mentionBg),\n 'mention-color-rgb': toRgbValues(theme.mentionColor),\n 'mention-highlight-bg-rgb': toRgbValues(theme.mentionHighlightBg),\n 'mention-highlight-link-rgb': toRgbValues(theme.mentionHighlightLink),\n 'mention-highlight-bg-mixed-rgb': dropAlpha(blendColors(theme.centerChannelBg, theme.mentionHighlightBg, 0.5)),\n 'pinned-highlight-bg-mixed-rgb': dropAlpha(blendColors(theme.centerChannelBg, theme.mentionHighlightBg, 0.24)),\n 'own-highlight-bg-rgb': dropAlpha(blendColors(theme.mentionHighlightBg, theme.centerChannelColor, 0.05)),\n 'new-message-separator-rgb': toRgbValues(theme.newMessageSeparator),\n 'online-indicator-rgb': toRgbValues(theme.onlineIndicator),\n 'sidebar-bg-rgb': toRgbValues(theme.sidebarBg),\n 'sidebar-header-bg-rgb': toRgbValues(theme.sidebarHeaderBg),\n 'sidebar-teambar-bg-rgb': toRgbValues(theme.sidebarTeamBarBg),\n 'sidebar-header-text-color-rgb': toRgbValues(theme.sidebarHeaderTextColor),\n 'sidebar-text-rgb': toRgbValues(theme.sidebarText),\n 'sidebar-text-active-border-rgb': toRgbValues(theme.sidebarTextActiveBorder),\n 'sidebar-text-active-color-rgb': toRgbValues(theme.sidebarTextActiveColor),\n 'sidebar-text-hover-bg-rgb': toRgbValues(theme.sidebarTextHoverBg),\n 'sidebar-unread-text-rgb': toRgbValues(theme.sidebarUnreadText),\n\n // Hex CSS variables\n 'sidebar-bg': theme.sidebarBg,\n 'sidebar-text': theme.sidebarText,\n 'sidebar-unread-text': theme.sidebarUnreadText,\n 'sidebar-text-hover-bg': theme.sidebarTextHoverBg,\n 'sidebar-text-active-border': theme.sidebarTextActiveBorder,\n 'sidebar-text-active-color': theme.sidebarTextActiveColor,\n 'sidebar-header-bg': theme.sidebarHeaderBg,\n 'sidebar-teambar-bg': theme.sidebarTeamBarBg,\n 'sidebar-header-text-color': theme.sidebarHeaderTextColor,\n 'online-indicator': theme.onlineIndicator,\n 'away-indicator': theme.awayIndicator,\n 'dnd-indicator': theme.dndIndicator,\n 'mention-bg': theme.mentionBg,\n 'mention-color': theme.mentionColor,\n 'center-channel-bg': theme.centerChannelBg,\n 'center-channel-color': theme.centerChannelColor,\n 'new-message-separator': theme.newMessageSeparator,\n 'link-color': theme.linkColor,\n 'button-bg': theme.buttonBg,\n 'button-color': theme.buttonColor,\n 'error-text': theme.errorTextColor,\n 'mention-highlight-bg': theme.mentionHighlightBg,\n 'mention-highlight-link': theme.mentionHighlightLink,\n\n // Legacy variables with baked in opacity, do not use!\n 'sidebar-text-08': changeOpacity(theme.sidebarText, 0.08),\n 'sidebar-text-16': changeOpacity(theme.sidebarText, 0.16),\n 'sidebar-text-30': changeOpacity(theme.sidebarText, 0.3),\n 'sidebar-text-40': changeOpacity(theme.sidebarText, 0.4),\n 'sidebar-text-50': changeOpacity(theme.sidebarText, 0.5),\n 'sidebar-text-60': changeOpacity(theme.sidebarText, 0.6),\n 'sidebar-text-72': changeOpacity(theme.sidebarText, 0.72),\n 'sidebar-text-80': changeOpacity(theme.sidebarText, 0.8),\n 'sidebar-header-text-color-80': changeOpacity(theme.sidebarHeaderTextColor, 0.8),\n 'center-channel-bg-88': changeOpacity(theme.centerChannelBg, 0.88),\n 'center-channel-color-88': changeOpacity(theme.centerChannelColor, 0.88),\n 'center-channel-bg-80': changeOpacity(theme.centerChannelBg, 0.8),\n 'center-channel-color-80': changeOpacity(theme.centerChannelColor, 0.8),\n 'center-channel-color-72': changeOpacity(theme.centerChannelColor, 0.72),\n 'center-channel-bg-64': changeOpacity(theme.centerChannelBg, 0.64),\n 'center-channel-color-64': changeOpacity(theme.centerChannelColor, 0.64),\n 'center-channel-bg-56': changeOpacity(theme.centerChannelBg, 0.56),\n 'center-channel-color-56': changeOpacity(theme.centerChannelColor, 0.56),\n 'center-channel-color-48': changeOpacity(theme.centerChannelColor, 0.48),\n 'center-channel-bg-40': changeOpacity(theme.centerChannelBg, 0.4),\n 'center-channel-color-40': changeOpacity(theme.centerChannelColor, 0.4),\n 'center-channel-bg-30': changeOpacity(theme.centerChannelBg, 0.3),\n 'center-channel-color-32': changeOpacity(theme.centerChannelColor, 0.32),\n 'center-channel-bg-20': changeOpacity(theme.centerChannelBg, 0.2),\n 'center-channel-color-20': changeOpacity(theme.centerChannelColor, 0.2),\n 'center-channel-bg-16': changeOpacity(theme.centerChannelBg, 0.16),\n 'center-channel-color-24': changeOpacity(theme.centerChannelColor, 0.24),\n 'center-channel-color-16': changeOpacity(theme.centerChannelColor, 0.16),\n 'center-channel-bg-08': changeOpacity(theme.centerChannelBg, 0.08),\n 'center-channel-color-08': changeOpacity(theme.centerChannelColor, 0.08),\n 'center-channel-color-04': changeOpacity(theme.centerChannelColor, 0.04),\n 'link-color-08': changeOpacity(theme.linkColor, 0.08),\n 'button-bg-88': changeOpacity(theme.buttonBg, 0.88),\n 'button-color-88': changeOpacity(theme.buttonColor, 0.88),\n 'button-bg-80': changeOpacity(theme.buttonBg, 0.8),\n 'button-color-80': changeOpacity(theme.buttonColor, 0.8),\n 'button-bg-72': changeOpacity(theme.buttonBg, 0.72),\n 'button-color-72': changeOpacity(theme.buttonColor, 0.72),\n 'button-bg-64': changeOpacity(theme.buttonBg, 0.64),\n 'button-color-64': changeOpacity(theme.buttonColor, 0.64),\n 'button-bg-56': changeOpacity(theme.buttonBg, 0.56),\n 'button-color-56': changeOpacity(theme.buttonColor, 0.56),\n 'button-bg-48': changeOpacity(theme.buttonBg, 0.48),\n 'button-color-48': changeOpacity(theme.buttonColor, 0.48),\n 'button-bg-40': changeOpacity(theme.buttonBg, 0.4),\n 'button-color-40': changeOpacity(theme.buttonColor, 0.4),\n 'button-bg-30': changeOpacity(theme.buttonBg, 0.32),\n 'button-color-32': changeOpacity(theme.buttonColor, 0.32),\n 'button-bg-24': changeOpacity(theme.buttonBg, 0.24),\n 'button-color-24': changeOpacity(theme.buttonColor, 0.24),\n 'button-bg-16': changeOpacity(theme.buttonBg, 0.16),\n 'button-color-16': changeOpacity(theme.buttonColor, 0.16),\n 'button-bg-08': changeOpacity(theme.buttonBg, 0.08),\n 'button-color-08': changeOpacity(theme.buttonColor, 0.08),\n 'button-bg-04': changeOpacity(theme.buttonBg, 0.04),\n 'button-color-04': changeOpacity(theme.buttonColor, 0.04),\n 'error-text-08': changeOpacity(theme.errorTextColor, 0.08),\n 'error-text-12': changeOpacity(theme.errorTextColor, 0.12),\n },\n });\n}\n\nexport function resetTheme() {\n applyTheme(Preferences.THEMES.denim);\n}\n\nfunction changeCss(className: string, classValue: string) {\n let styleEl: HTMLStyleElement = document.querySelector('style[data-class=\"' + className + '\"]')!;\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.setAttribute('data-class', className);\n\n // Append style element to head\n document.head.appendChild(styleEl);\n }\n\n // Grab style sheet\n const styleSheet = styleEl.sheet!;\n const rules: CSSRuleList = styleSheet.cssRules || styleSheet.rules;\n const style = classValue.substr(0, classValue.indexOf(':'));\n const value = classValue.substr(classValue.indexOf(':') + 1).replace(/!important[;]/g, '');\n const priority = (classValue.match(/!important/) ? 'important' : null);\n\n for (let i = 0; i < rules.length; i++) {\n if ((rules[i] as any).selectorText === className) {\n (rules[i] as any).style.setProperty(style, value, priority);\n return;\n }\n }\n\n let mediaQuery = '';\n if (className.indexOf('@media') >= 0) {\n mediaQuery = '}';\n }\n try {\n styleSheet.insertRule(className + '{' + classValue + '}' + mediaQuery, styleSheet.cssRules.length);\n } catch (e) {\n console.error(e); // eslint-disable-line no-console\n }\n}\n\nfunction updateCodeTheme(codeTheme: string) {\n let cssPath = '';\n Constants.THEME_ELEMENTS.forEach((element) => {\n if (element.id === 'codeTheme') {\n element.themes?.forEach((theme) => {\n if (codeTheme === theme.id) {\n cssPath = theme.cssURL!;\n }\n });\n }\n });\n\n const link: HTMLLinkElement = document.querySelector('link.code_theme')!;\n if (link && cssPath !== (link.attributes as LinkHTMLAttributes).href) {\n changeCss('code.hljs', 'visibility: hidden');\n\n const xmlHTTP = new XMLHttpRequest();\n\n xmlHTTP.open('GET', cssPath, true);\n xmlHTTP.onload = function onLoad() {\n link.href = cssPath;\n\n if (UserAgent.isFirefox()) {\n link.addEventListener('load', () => {\n changeCss('code.hljs', 'visibility: visible');\n }, {once: true});\n } else {\n changeCss('code.hljs', 'visibility: visible');\n }\n };\n\n xmlHTTP.send();\n }\n}\n\nexport function placeCaretAtEnd(el: HTMLInputElement | HTMLTextAreaElement) {\n el.focus();\n el.selectionStart = el.value.length;\n el.selectionEnd = el.value.length;\n}\n\nexport function scrollToCaret(el: HTMLInputElement | HTMLTextAreaElement) {\n el.scrollTop = el.scrollHeight;\n}\n\nfunction createHtmlElement(el: keyof HTMLElementTagNameMap) {\n return document.createElement(el);\n}\n\nfunction getElementComputedStyle(el: Element) {\n return getComputedStyle(el);\n}\n\nfunction addElementToDocument(el: Node) {\n document.body.appendChild(el);\n}\n\nexport function copyTextAreaToDiv(textArea: HTMLTextAreaElement) {\n if (!textArea) {\n return null;\n }\n const copy = createHtmlElement('div');\n copy.textContent = textArea.value;\n const style = getElementComputedStyle(textArea);\n [\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'wordWrap',\n 'whiteSpace',\n 'borderLeftWidth',\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'paddingRight',\n 'paddingLeft',\n 'paddingTop',\n ].forEach((key) => {\n copy.style[key as any] = style[key as any];\n });\n copy.style.overflow = 'auto';\n copy.style.width = textArea.offsetWidth + 'px';\n copy.style.height = textArea.offsetHeight + 'px';\n copy.style.position = 'absolute';\n copy.style.left = textArea.offsetLeft + 'px';\n copy.style.top = textArea.offsetTop + 'px';\n addElementToDocument(copy);\n return copy;\n}\n\nfunction convertEmToPixels(el: Element, remNum: number | any): number {\n if (isNaN(remNum)) {\n return 0;\n }\n const styles = getElementComputedStyle(el);\n return remNum * parseFloat(styles.fontSize);\n}\n\nexport function getCaretXYCoordinate(textArea: HTMLTextAreaElement) {\n if (!textArea) {\n return {x: 0, y: 0};\n }\n const start = textArea.selectionStart;\n const end = textArea.selectionEnd;\n const copy = copyTextAreaToDiv(textArea);\n const range = document.createRange();\n range.setStart(copy!.firstChild!, start);\n range.setEnd(copy!.firstChild!, end);\n const selection = document.getSelection();\n selection!.removeAllRanges();\n selection!.addRange(range);\n const rect = range.getClientRects();\n document.body.removeChild(copy!);\n textArea.selectionStart = start;\n textArea.selectionEnd = end;\n textArea.focus();\n return {\n x: Math.floor(rect[0].left - textArea.scrollLeft),\n y: Math.floor(rect[0].top - textArea.scrollTop),\n };\n}\n\nexport function getViewportSize(win?: Window) {\n const w = win || window;\n if (w.innerWidth != null) {\n return {w: w.innerWidth, h: w.innerHeight};\n }\n const {clientWidth, clientHeight} = w.document.body;\n return {w: clientWidth, h: clientHeight};\n}\n\nexport function offsetTopLeft(el: HTMLElement) {\n if (!(el instanceof HTMLElement)) {\n return {top: 0, left: 0};\n }\n const rect = el.getBoundingClientRect();\n const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n return {top: rect.top + scrollTop, left: rect.left + scrollLeft};\n}\n\nexport function getSuggestionBoxAlgn(textArea: HTMLTextAreaElement, pxToSubstract = 0, alignWithTextBox = false) {\n if (!textArea || !(textArea instanceof HTMLElement)) {\n return {\n pixelsToMoveX: 0,\n pixelsToMoveY: 0,\n };\n }\n\n const {x: caretXCoordinateInTxtArea, y: caretYCoordinateInTxtArea} = getCaretXYCoordinate(textArea);\n const {w: viewportWidth, h: viewportHeight} = getViewportSize();\n const {offsetWidth: textAreaWidth} = textArea;\n\n const suggestionBoxWidth = Math.min(textAreaWidth, Constants.SUGGESTION_LIST_MAXWIDTH);\n\n // value in pixels for the offsetLeft for the textArea\n const {top: txtAreaOffsetTop, left: txtAreaOffsetLft} = offsetTopLeft(textArea);\n\n // how many pixels to the right should be moved the suggestion box\n let pxToTheRight = (caretXCoordinateInTxtArea) - (pxToSubstract);\n\n // the x coordinate in the viewport of the suggestion box border-right\n const xBoxRightCoordinate = caretXCoordinateInTxtArea + txtAreaOffsetLft + suggestionBoxWidth;\n\n if (alignWithTextBox) {\n // when the list should be aligned with the textbox just set this value to 0\n pxToTheRight = 0;\n } else if (xBoxRightCoordinate > viewportWidth) {\n // if the right-border edge of the suggestion box will overflow the x-axis viewport\n // stick the suggestion list to the very right of the TextArea\n pxToTheRight = textAreaWidth - suggestionBoxWidth;\n }\n\n return {\n\n // The rough location of the caret in the textbox\n pixelsToMoveX: Math.max(0, Math.round(pxToTheRight)),\n pixelsToMoveY: Math.round(caretYCoordinateInTxtArea),\n\n // The line height of the textbox is needed so that the SuggestionList can adjust its position to be below the current line in the textbox\n lineHeight: Number(getComputedStyle(textArea)?.lineHeight.replace('px', '')),\n\n placementShift: txtAreaOffsetTop + caretYCoordinateInTxtArea + Constants.SUGGESTION_LIST_MAXHEIGHT > viewportHeight - Constants.POST_AREA_HEIGHT,\n };\n}\n\nexport function getPxToSubstract(char = '@') {\n // depending on the triggering character different values must be substracted\n if (char === '@') {\n // mention name padding-left 2.4rem as stated in suggestion-list__content .suggestion-list__item\n const mentionNamePaddingLft = convertEmToPixels(document.documentElement, Constants.MENTION_NAME_PADDING_LEFT);\n\n // half of width of avatar stated in .Avatar.Avatar-sm (24px)\n const avatarWidth = Constants.AVATAR_WIDTH * 0.5;\n return 5 + avatarWidth + mentionNamePaddingLft;\n } else if (char === '~') {\n return 39;\n } else if (char === ':') {\n return 32;\n }\n return 0;\n}\n\nexport function setSelectionRange(input: HTMLInputElement | HTMLTextAreaElement, selectionStart: number, selectionEnd: number) {\n input.focus();\n input.setSelectionRange(selectionStart, selectionEnd);\n}\n\nexport function setCaretPosition(input: HTMLInputElement | HTMLTextAreaElement, pos: number) {\n if (!input) {\n return;\n }\n\n setSelectionRange(input, pos, pos);\n}\n\nexport function isValidUsername(name: string) {\n let error;\n if (!name) {\n error = {\n id: ValidationErrors.USERNAME_REQUIRED,\n };\n } else if (name.length < Constants.MIN_USERNAME_LENGTH || name.length > Constants.MAX_USERNAME_LENGTH) {\n error = {\n id: ValidationErrors.INVALID_LENGTH,\n };\n } else if (!(/^[a-z0-9.\\-_]+$/).test(name)) {\n error = {\n id: ValidationErrors.INVALID_CHARACTERS,\n };\n } else if (!(/[a-z]/).test(name.charAt(0))) { //eslint-disable-line no-negated-condition\n error = {\n id: ValidationErrors.INVALID_FIRST_CHARACTER,\n };\n } else {\n for (const reserved of Constants.RESERVED_USERNAMES) {\n if (name === reserved) {\n error = {\n id: ValidationErrors.RESERVED_NAME,\n };\n break;\n }\n }\n }\n\n return error;\n}\n\nexport function isValidBotUsername(name: string) {\n let error = isValidUsername(name);\n if (error) {\n return error;\n }\n\n if (name.endsWith('.')) {\n error = {\n id: ValidationErrors.INVALID_LAST_CHARACTER,\n };\n }\n\n return error;\n}\n\nexport function loadImage(\n url: string,\n onLoad: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null,\n onProgress?: (completedPercentage: number) => any | null,\n) {\n const request = new XMLHttpRequest();\n\n request.open('GET', url, true);\n request.responseType = 'arraybuffer';\n request.onload = onLoad;\n request.onprogress = (e) => {\n if (onProgress) {\n let total = 0;\n if (e.lengthComputable) {\n total = e.total;\n } else {\n total = parseInt((e.target as any).getResponseHeader('X-Uncompressed-Content-Length'), 10);\n }\n\n const completedPercentage = Math.round((e.loaded / total) * 100);\n\n (onProgress as any)(completedPercentage);\n }\n };\n\n request.send();\n}\n\nfunction changeColor(colourIn: string, amt: number): string {\n let hex = colourIn;\n let lum = amt;\n\n // validate hex string\n hex = String(hex).replace(/[^0-9a-f]/gi, '');\n if (hex.length < 6) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n lum = lum || 0;\n\n // convert to decimal and change luminosity\n let rgb = '#';\n let c;\n let i;\n for (i = 0; i < 3; i++) {\n c = parseInt(hex.substr(i * 2, 2), 16);\n c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\n rgb += ('00' + c).substr(c.length);\n }\n\n return rgb;\n}\n\nexport function getFullName(user: UserProfile) {\n if (user.first_name && user.last_name) {\n return user.first_name + ' ' + user.last_name;\n } else if (user.first_name) {\n return user.first_name;\n } else if (user.last_name) {\n return user.last_name;\n }\n\n return '';\n}\n\nexport function getDisplayName(user: UserProfile) {\n if (user.nickname && user.nickname.trim().length > 0) {\n return user.nickname;\n }\n const fullName = getFullName(user);\n\n if (fullName) {\n return fullName;\n }\n\n return user.username;\n}\n\nexport function getLongDisplayName(user: UserProfile) {\n let displayName = '@' + user.username;\n const fullName = getFullName(user);\n if (fullName) {\n displayName = displayName + ' - ' + fullName;\n }\n if (user.nickname && user.nickname.trim().length > 0) {\n displayName = displayName + ' (' + user.nickname + ')';\n }\n\n if (user.position && user.position.trim().length > 0) {\n displayName = displayName + ' -' + user.position;\n }\n\n return displayName;\n}\n\nexport function getLongDisplayNameParts(user: UserProfile) {\n return {\n displayName: '@' + user.username,\n fullName: getFullName(user),\n nickname: user.nickname && user.nickname.trim() ? user.nickname : null,\n position: user.position && user.position.trim() ? user.position : null,\n };\n}\n\n/**\n * Gets the display name of the specified user, respecting the TeammateNameDisplay configuration setting\n */\nexport function getDisplayNameByUser(state: GlobalState, user?: UserProfile) {\n const teammateNameDisplay = getTeammateNameDisplaySetting(state);\n if (user) {\n return displayUsername(user, teammateNameDisplay);\n }\n\n return '';\n}\n\n/**\n * Gets the entire name, including username, full name, and nickname, of the specified user\n */\nexport function displayEntireNameForUser(user: UserProfile): React.ReactNode {\n if (!user) {\n return '';\n }\n\n let displayName: React.ReactNode = '';\n const fullName = getFullName(user);\n\n if (fullName) {\n displayName = ' - ' + fullName;\n }\n\n if (user.nickname) {\n displayName = displayName + ' (' + user.nickname + ')';\n }\n\n if (user.position) {\n displayName = displayName + ' - ' + user.position;\n }\n\n displayName = (\n \n {'@' + user.username}\n {displayName}\n \n );\n\n return displayName;\n}\n\n/**\n * Gets the full name and nickname of the specified user\n */\nexport function displayFullAndNicknameForUser(user: UserProfile) {\n if (!user) {\n return '';\n }\n\n let displayName;\n const fullName = getFullName(user);\n\n if (fullName && user.nickname) {\n displayName = (\n {fullName + ' (' + user.nickname + ')'}\n );\n } else if (fullName) {\n displayName = (\n {fullName}\n );\n } else if (user.nickname) {\n displayName = (\n {'(' + user.nickname + ')'}\n );\n }\n\n return displayName;\n}\n\nexport function imageURLForUser(userId: UserProfile['id'], lastPictureUpdate = 0) {\n return Client4.getUsersRoute() + '/' + userId + '/image?_=' + lastPictureUpdate;\n}\n\nexport function defaultImageURLForUser(userId: UserProfile['id']) {\n return Client4.getUsersRoute() + '/' + userId + '/image/default';\n}\n\n// in contrast to Client4.getTeamIconUrl, for ui logic this function returns null if last_team_icon_update is unset\nexport function imageURLForTeam(team: Team) {\n return team.last_team_icon_update ? Client4.getTeamIconUrl(team.id, team.last_team_icon_update) : null;\n}\n\n// Converts a file size in bytes into a human-readable string of the form '123MB'.\nexport function fileSizeToString(bytes: number) {\n // it's unlikely that we'll have files bigger than this\n if (bytes > 1024 ** 4) {\n // check if file is smaller than 10 to display fractions\n if (bytes < (1024 ** 4) * 10) {\n return (Math.round((bytes / (1024 ** 4)) * 10) / 10) + 'TB';\n }\n return Math.round(bytes / (1024 ** 4)) + 'TB';\n } else if (bytes > 1024 ** 3) {\n if (bytes < (1024 ** 3) * 10) {\n return (Math.round((bytes / (1024 ** 3)) * 10) / 10) + 'GB';\n }\n return Math.round(bytes / (1024 ** 3)) + 'GB';\n } else if (bytes > 1024 ** 2) {\n if (bytes < (1024 ** 2) * 10) {\n return (Math.round((bytes / (1024 ** 2)) * 10) / 10) + 'MB';\n }\n return Math.round(bytes / (1024 ** 2)) + 'MB';\n } else if (bytes > 1024) {\n return Math.round(bytes / 1024) + 'KB';\n }\n return bytes + 'B';\n}\n\n// Generates a RFC-4122 version 4 compliant globally unique identifier.\nexport function generateId() {\n // implementation taken from http://stackoverflow.com/a/2117523\n let id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\n id = id.replace(/[xy]/g, (c) => {\n const r = Math.floor(Math.random() * 16);\n\n let v;\n if (c === 'x') {\n v = r;\n } else {\n v = (r & 0x3) | 0x8;\n }\n\n return v.toString(16);\n });\n\n return id;\n}\n\nexport function getDirectChannelName(id: string, otherId: string): string {\n let handle;\n\n if (otherId > id) {\n handle = id + '__' + otherId;\n } else {\n handle = otherId + '__' + id;\n }\n\n return handle;\n}\n\n// Used to get the id of the other user from a DM channel\nexport function getUserIdFromChannelName(channel: Channel) {\n return getUserIdFromChannelId(channel.name);\n}\n\n// Used to get the id of the other user from a DM channel id (id1_id2)\nexport function getUserIdFromChannelId(channelId: Channel['id'], currentUserId = getCurrentUserId(store.getState())) {\n const ids = channelId.split('__');\n let otherUserId = '';\n if (ids[0] === currentUserId) {\n otherUserId = ids[1];\n } else {\n otherUserId = ids[0];\n }\n\n return otherUserId;\n}\n\nexport function fillRecord(value: T, length: number): Record {\n const arr: Record = {};\n\n for (let i = 0; i < length; i++) {\n arr[i] = value;\n }\n\n return arr;\n}\n\n// Checks if a data transfer contains files not text, folders, etc..\n// Slightly modified from http://stackoverflow.com/questions/6848043/how-do-i-detect-a-file-is-being-dragged-rather-than-a-draggable-element-on-my-pa\nexport function isFileTransfer(files: DataTransfer) {\n if (UserAgent.isInternetExplorer() || UserAgent.isEdge()) {\n return files.types != null && files.types.includes('Files');\n }\n\n return files.types != null && (files.types.indexOf ? files.types.indexOf('Files') !== -1 : files.types.includes('application/x-moz-file'));\n}\n\nexport function isUriDrop(dataTransfer: DataTransfer) {\n if (UserAgent.isInternetExplorer() || UserAgent.isEdge() || UserAgent.isSafari()) {\n for (let i = 0; i < dataTransfer.items.length; i++) {\n if (dataTransfer.items[i].type === 'text/uri-list') {\n return true;\n }\n }\n }\n return false; // we don't care about others, they handle as we want it\n}\n\nexport function isTextTransfer(dataTransfer: DataTransfer) {\n return ['text/plain', 'text/unicode', 'Text'].some((type) => dataTransfer.types.includes(type));\n}\n\nexport function isTextDroppableEvent(e: Event) {\n return (e instanceof DragEvent) &&\n (e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLInputElement) &&\n e.dataTransfer !== null &&\n isTextTransfer(e.dataTransfer);\n}\n\nexport function clearFileInput(elm: HTMLInputElement) {\n // clear file input for all modern browsers\n try {\n elm.value = '';\n if (elm.value) {\n elm.type = 'text';\n elm.type = 'file';\n }\n } catch (e) {\n // Do nothing\n }\n}\n\n/**\n * @deprecated Use react-intl instead, only place its usage can be justified is in the redux actions\n */\nexport function localizeMessage({id, defaultMessage}: {id: string; defaultMessage?: string}) {\n const state = store.getState();\n\n const locale = getCurrentLocale(state);\n const translations = getTranslations(state, locale);\n\n if (!translations || !(id in translations)) {\n return defaultMessage || id;\n }\n\n return translations[id];\n}\n\n/**\n * @deprecated If possible, use intl.formatMessage instead. If you have to use this, remember to mark the id using `t`\n */\nexport function localizeAndFormatMessage(descriptor: {id: string; defaultMessage?: string}, template: { [name: string]: any } | undefined) {\n const base = localizeMessage(descriptor);\n\n if (!template) {\n return base;\n }\n\n return base.replace(/{[\\w]+}/g, (match) => {\n const key = match.substr(1, match.length - 2);\n return template[key] || match;\n });\n}\n\nexport function mod(a: number, b: number): number {\n return ((a % b) + b) % b;\n}\n\nexport const REACTION_PATTERN = /^(\\+|-):([^:\\s]+):\\s*$/;\n\nfunction isChannelOrPermalink(link: string) {\n let match = (/\\/([a-z0-9\\-_]+)\\/channels\\/([a-z0-9\\-__][a-z0-9\\-__.]+)/).exec(link);\n if (match) {\n return {\n type: 'channel',\n teamName: match[1],\n channelName: match[2],\n };\n }\n match = (/\\/([a-z0-9\\-__]+)\\/pl\\/([a-z0-9]+)/).exec(link);\n if (match) {\n return {\n type: 'permalink',\n teamName: match[1],\n postId: match[2],\n };\n }\n return match;\n}\n\nexport async function handleFormattedTextClick(e: React.MouseEvent, currentRelativeTeamUrl = '') {\n const hashtagAttribute = (e.target as any).getAttributeNode('data-hashtag');\n const linkAttribute = (e.target as any).getAttributeNode('data-link');\n const channelMentionAttribute = (e.target as any).getAttributeNode('data-channel-mention');\n\n if (hashtagAttribute) {\n e.preventDefault();\n\n store.dispatch(searchForTerm(hashtagAttribute.value));\n } else if (linkAttribute) {\n const MIDDLE_MOUSE_BUTTON = 1;\n\n if (!(e.button === MIDDLE_MOUSE_BUTTON || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey)) {\n e.preventDefault();\n\n const state = store.getState();\n const user = getCurrentUser(state);\n const match = isChannelOrPermalink(linkAttribute.value);\n const crtEnabled = isCollapsedThreadsEnabled(state);\n\n let isReply = false;\n\n if (isSystemAdmin(user.roles)) {\n if (match) {\n // Get team by name\n const {teamName} = match;\n let team = getTeamByName(state, teamName);\n if (!team) {\n const {data: teamData} = await store.dispatch(getTeamByNameAction(teamName));\n team = teamData;\n }\n if (team && team.delete_at === 0) {\n let channel;\n\n // Handle channel url - Get channel data from channel name\n if (match.type === 'channel') {\n const {channelName} = match;\n channel = getChannelsNameMapInTeam(state, team.id)[channelName as string];\n if (!channel) {\n const {data: channelData} = await store.dispatch(getChannelByNameAndTeamName(teamName, channelName!, true));\n channel = channelData;\n }\n } else { // Handle permalink - Get channel data from post\n const {postId} = match;\n let post = getPost(state, postId!);\n if (!post) {\n const {data: postData} = await store.dispatch(getPostAction(match.postId!));\n post = postData;\n }\n if (post) {\n isReply = Boolean(post.root_id);\n\n channel = getChannel(state, post.channel_id);\n if (!channel) {\n const {data: channelData} = await store.dispatch(getChannelAction(post.channel_id));\n channel = channelData;\n }\n }\n }\n if (channel && channel.type === Constants.PRIVATE_CHANNEL) {\n let member = getMyChannelMemberships(state)[channel.id];\n if (!member) {\n const membership = await store.dispatch(getChannelMember(channel.id, getCurrentUserId(state)));\n if ('data' in membership) {\n member = membership.data;\n }\n }\n if (!member) {\n const {data} = await store.dispatch(joinPrivateChannelPrompt(team, channel.display_name, false));\n if (data.join) {\n let error = false;\n if (!getTeamMemberships(state)[team.id]) {\n const joinTeamResult = await store.dispatch(addUserToTeam(team.id, user.id));\n error = joinTeamResult.error;\n }\n if (!error) {\n await store.dispatch(joinChannel(user.id, team.id, channel.id, channel.name));\n }\n } else {\n return;\n }\n }\n }\n }\n }\n }\n\n e.stopPropagation();\n\n if (match && match.type === 'permalink' && isTeamSameWithCurrentTeam(state, match.teamName) && isReply && crtEnabled) {\n store.dispatch(focusPost(match.postId ?? '', linkAttribute.value, user.id, {skipRedirectReplyPermalink: true}));\n } else {\n getHistory().push(linkAttribute.value);\n }\n }\n } else if (channelMentionAttribute) {\n e.preventDefault();\n getHistory().push(currentRelativeTeamUrl + '/channels/' + channelMentionAttribute.value);\n }\n}\n\nexport function isEmptyObject(object: any) {\n if (!object) {\n return true;\n }\n\n if (Object.keys(object).length === 0) {\n return true;\n }\n\n return false;\n}\n\nexport function removePrefixFromLocalStorage(prefix: string) {\n const keys = [];\n for (let i = 0; i < localStorage.length; i++) {\n if (localStorage.key(i)!.startsWith(prefix)) {\n keys.push(localStorage.key(i));\n }\n }\n\n for (let i = 0; i < keys.length; i++) {\n localStorage.removeItem(keys[i]!);\n }\n}\n\nexport function copyToClipboard(data: string) {\n // Attempt to use the newer clipboard API when possible\n const clipboard = navigator.clipboard;\n if (clipboard) {\n clipboard.writeText(data);\n return;\n }\n\n // creates a tiny temporary text area to copy text out of\n // see https://stackoverflow.com/a/30810322/591374 for details\n const textArea = document.createElement('textarea');\n textArea.style.position = 'fixed';\n textArea.style.top = '0';\n textArea.style.left = '0';\n textArea.style.width = '2em';\n textArea.style.height = '2em';\n textArea.style.padding = '0';\n textArea.style.border = 'none';\n textArea.style.outline = 'none';\n textArea.style.boxShadow = 'none';\n textArea.style.background = 'transparent';\n textArea.value = data;\n document.body.appendChild(textArea);\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n}\n\nexport function moveCursorToEnd(e: React.MouseEvent | React.FocusEvent) {\n const val = (e.target as any).value;\n if (val.length) {\n (e.target as any).value = '';\n (e.target as any).value = val;\n }\n}\n\nexport function setCSRFFromCookie() {\n if (typeof document !== 'undefined' && typeof document.cookie !== 'undefined') {\n const cookies = document.cookie.split(';');\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n if (cookie.startsWith('MMCSRF=')) {\n Client4.setCSRF(cookie.replace('MMCSRF=', ''));\n break;\n }\n }\n }\n}\n\nexport function getNextBillingDate() {\n const nextBillingDate = moment().add(1, 'months').startOf('month');\n return nextBillingDate.format('MMM D, YYYY');\n}\n\nexport function stringToNumber(s: string | undefined) {\n if (!s) {\n return 0;\n }\n\n return parseInt(s, 10);\n}\n\nexport function deleteKeysFromObject(value: Record, keys: string[]) {\n for (const key of keys) {\n delete value[key];\n }\n return value;\n}\n\nfunction isSelection() {\n const selection = window.getSelection();\n return selection!.type === 'Range';\n}\n\nexport function isTextSelectedInPostOrReply(e: React.KeyboardEvent | KeyboardEvent) {\n const {id} = e.target as HTMLElement;\n\n const isTypingInPost = id === 'post_textbox';\n const isTypingInReply = id === 'reply_textbox';\n\n if (!isTypingInPost && !isTypingInReply) {\n return false;\n }\n\n const {\n selectionStart,\n selectionEnd,\n } = e.target as TextboxElement;\n\n const hasSelection = !isNil(selectionStart) && !isNil(selectionEnd) && selectionStart < selectionEnd;\n\n return hasSelection;\n}\n\n/*\n * Returns false when the element clicked or its ancestors\n * is a potential click target (link, button, image, etc..)\n * but not the events currentTarget\n * and true in any other case.\n *\n * @param {string} selector - CSS selector of elements not eligible for click\n * @returns {function}\n */\nexport function makeIsEligibleForClick(selector = '') {\n return (event: React.MouseEvent) => {\n const currentTarget = event.currentTarget;\n let node: HTMLElement = event.target as HTMLElement;\n\n if (isSelection()) {\n return false;\n }\n\n if (node === currentTarget) {\n return true;\n }\n\n // in the case of a react Portal\n if (!currentTarget.contains(node)) {\n return false;\n }\n\n // traverses the targets parents up to currentTarget to see\n // if any of them is a potentially clickable element\n while (node) {\n if (!node || node === currentTarget) {\n break;\n }\n\n if (\n CLICKABLE_ELEMENTS.includes(node.tagName.toLowerCase()) ||\n node.getAttribute('role') === 'button' ||\n (selector && node.matches(selector))\n ) {\n return false;\n }\n\n node = node.parentNode! as HTMLElement;\n }\n\n return true;\n };\n}\n\n// Returns the minimal number of zeroes needed to render a number,\n// up to the given number of places.\n// e.g.\n// numberToFixedDynamic(3.12345, 4) -> 3.1235\n// numberToFixedDynamic(3.01000, 4) -> 3.01\n// numberToFixedDynamic(3.01000, 1) -> 3\nexport function numberToFixedDynamic(num: number, places: number): string {\n const str = num.toFixed(Math.max(places, 0));\n if (!str.includes('.')) {\n return str;\n }\n let indexToExclude = -1;\n let i = str.length - 1;\n while (str[i] === '0') {\n indexToExclude = i;\n i -= 1;\n }\n if (str[i] === '.') {\n indexToExclude -= 1;\n }\n if (indexToExclude === -1) {\n return str;\n }\n return str.slice(0, indexToExclude);\n}\n\nconst TrackFlowRoles: Record = {\n fa: Constants.FIRST_ADMIN_ROLE,\n sa: General.SYSTEM_ADMIN_ROLE,\n su: General.SYSTEM_USER_ROLE,\n};\n\nexport function getTrackFlowRole(state: GlobalState) {\n let trackFlowRole = 'su';\n\n if (isFirstAdmin(state)) {\n trackFlowRole = 'fa';\n } else if (isSystemAdmin(getCurrentUser(state).roles)) {\n trackFlowRole = 'sa';\n }\n\n return trackFlowRole;\n}\n\nexport const getRoleForTrackFlow = createSelector(\n 'getRoleForTrackFlow',\n getTrackFlowRole,\n (trackFlowRole) => {\n const startedByRole = TrackFlowRoles[trackFlowRole];\n\n return {started_by_role: startedByRole};\n },\n);\n\nexport function getSbr() {\n const params = new URLSearchParams(window.location.search);\n const sbr = params.get('sbr') ?? '';\n return sbr;\n}\n\nexport function getRoleFromTrackFlow() {\n const sbr = getSbr();\n const startedByRole = TrackFlowRoles[sbr] ?? '';\n\n return {started_by_role: startedByRole};\n}\n\nexport function getDatePickerLocalesForDateFns(locale: string, loadedLocales: Record) {\n if (locale && locale !== 'en' && !loadedLocales[locale]) {\n try {\n /* eslint-disable global-require */\n loadedLocales[locale] = require(`date-fns/locale/${locale}/index.js`);\n /* eslint-disable global-require */\n } catch (e) {\n console.log(e); // eslint-disable-line no-console\n }\n }\n\n return loadedLocales;\n}\n\nexport function getMediumFromTrackFlow() {\n const params = new URLSearchParams(window.location.search);\n const source = params.get('md') ?? '';\n\n return {source};\n}\n\nconst TrackFlowSources: Record = {\n wd: 'webapp-desktop',\n wm: 'webapp-mobile',\n d: 'desktop-app',\n};\n\nfunction getTrackFlowSource() {\n if (UserAgent.isMobile()) {\n return TrackFlowSources.wm;\n } else if (UserAgent.isDesktopApp()) {\n return TrackFlowSources.d;\n }\n return TrackFlowSources.wd;\n}\n\nexport function getSourceForTrackFlow() {\n return {source: getTrackFlowSource()};\n}\n\nexport function a11yFocus(element: HTMLElement | null | undefined, keyboardOnly = true) {\n document.dispatchEvent(new CustomEvent(\n A11yCustomEventTypes.FOCUS, {\n detail: {\n target: element,\n keyboardOnly,\n },\n },\n ));\n}\n\nexport function getBlankAddressWithCountry(country?: string): Address {\n let c = '';\n if (country) {\n c = getName(country) || '';\n }\n return {\n city: '',\n country: c || '',\n line1: '',\n line2: '',\n postal_code: '',\n state: '',\n };\n}\n\nexport function generateSlug(): string {\n return crypto.randomBytes(16).toString('hex');\n}\nexport function sortUsersAndGroups(a: UserProfile | Group, b: UserProfile | Group) {\n let aSortString = '';\n let bSortString = '';\n if ('username' in a) {\n aSortString = a.username;\n } else {\n aSortString = a.name;\n }\n if ('username' in b) {\n bSortString = b.username;\n } else {\n bSortString = b.name;\n }\n\n return aSortString.localeCompare(bSortString);\n}\n\nexport function doesCookieContainsMMUserId() {\n return document.cookie.includes('MMUSERID=');\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React from 'react';\nimport {Modal} from 'react-bootstrap';\nimport {FormattedMessage} from 'react-intl';\n\nimport './generic_modal.scss';\n\nexport type Props = {\n className?: string;\n onExited: () => void;\n modalHeaderText?: React.ReactNode;\n modalSubheaderText?: React.ReactNode;\n show?: boolean;\n handleCancel?: () => void;\n handleConfirm?: () => void;\n handleEnterKeyPress?: () => void;\n handleKeydown?: (event?: React.KeyboardEvent) => void;\n confirmButtonText?: React.ReactNode;\n confirmButtonClassName?: string;\n cancelButtonText?: React.ReactNode;\n cancelButtonClassName?: string;\n isConfirmDisabled?: boolean;\n isDeleteModal?: boolean;\n id: string;\n autoCloseOnCancelButton?: boolean;\n autoCloseOnConfirmButton?: boolean;\n enforceFocus?: boolean;\n container?: React.ReactNode | React.ReactNodeArray;\n ariaLabel?: string;\n errorText?: string | React.ReactNode;\n compassDesign?: boolean;\n backdrop?: boolean | 'static';\n backdropClassName?: string;\n tabIndex?: number;\n children: React.ReactNode;\n autoFocusConfirmButton?: boolean;\n keyboardEscape?: boolean;\n headerInput?: React.ReactNode;\n bodyPadding?: boolean;\n bodyDivider?: boolean;\n bodyOverflowVisible?: boolean;\n footerContent?: React.ReactNode;\n footerDivider?: boolean;\n appendedContent?: React.ReactNode;\n headerButton?: React.ReactNode;\n};\n\ntype State = {\n show: boolean;\n isFocalTrapActive: boolean;\n}\n\nexport class GenericModal extends React.PureComponent {\n static defaultProps: Partial = {\n show: true,\n id: 'genericModal',\n autoCloseOnCancelButton: true,\n autoCloseOnConfirmButton: true,\n enforceFocus: true,\n keyboardEscape: true,\n bodyPadding: true,\n };\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n show: props.show!,\n isFocalTrapActive: false,\n };\n }\n\n onHide = () => {\n this.setState({show: false});\n };\n\n handleCancel = (event: React.MouseEvent) => {\n event.preventDefault();\n if (this.props.autoCloseOnCancelButton) {\n this.onHide();\n }\n if (this.props.handleCancel) {\n this.props.handleCancel();\n }\n };\n\n handleConfirm = (event: React.MouseEvent) => {\n event.preventDefault();\n if (this.props.autoCloseOnConfirmButton) {\n this.onHide();\n }\n if (this.props.handleConfirm) {\n this.props.handleConfirm();\n }\n };\n\n private onEnterKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n if (event.nativeEvent.isComposing) {\n return;\n }\n if (this.props.autoCloseOnConfirmButton) {\n this.onHide();\n }\n if (this.props.handleEnterKeyPress) {\n this.props.handleEnterKeyPress();\n }\n }\n this.props.handleKeydown?.(event);\n };\n\n render() {\n let confirmButton;\n if (this.props.handleConfirm) {\n const isConfirmOrDeleteClassName = this.props.isDeleteModal ? 'delete' : 'confirm';\n let confirmButtonText: React.ReactNode = (\n \n );\n if (this.props.confirmButtonText) {\n confirmButtonText = this.props.confirmButtonText;\n }\n\n confirmButton = (\n \n {confirmButtonText}\n \n );\n }\n\n let cancelButton;\n if (this.props.handleCancel) {\n let cancelButtonText: React.ReactNode = (\n \n );\n if (this.props.cancelButtonText) {\n cancelButtonText = this.props.cancelButtonText;\n }\n\n cancelButton = (\n \n {cancelButtonText}\n \n );\n }\n\n const headerText = this.props.modalHeaderText && (\n
    \n \n {this.props.modalHeaderText}\n \n {this.props.headerButton}\n
    \n );\n\n return (\n \n \n \n
    \n {this.props.compassDesign && (\n <>\n {headerText}\n {this.props.headerInput}\n \n )}\n\n {\n this.props.modalSubheaderText &&\n
    \n \n {this.props.modalSubheaderText}\n

    \n
    \n }\n
    \n
    \n \n {this.props.compassDesign ? (\n this.props.errorText && (\n
    \n \n {this.props.errorText}\n
    \n )\n ) : (\n headerText\n )}\n
    \n {this.props.children}\n
    \n
    \n {(cancelButton || confirmButton || this.props.footerContent) && (\n \n {(cancelButton || confirmButton) ? (\n <>\n {cancelButton}\n {confirmButton}\n \n ) : (\n this.props.footerContent\n )}\n \n )}\n {Boolean(this.props.appendedContent) && this.props.appendedContent}\n
    \n \n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport {ChevronLeftIcon, ChevronRightIcon} from '@mattermost/compass-icons/components';\n\nimport './footer_pagination.scss';\n\nconst BUTTON_ICON_SIZE = 16;\n\ntype Props = {\n page: number;\n total: number;\n itemsPerPage: number;\n onNextPage: (event: React.MouseEvent) => void;\n onPreviousPage: (event: React.MouseEvent) => void;\n};\n\nexport const FooterPagination = ({\n page,\n total,\n itemsPerPage,\n onNextPage,\n onPreviousPage,\n}: Props) => {\n const {formatMessage} = useIntl();\n\n const startCount = page * itemsPerPage;\n const endCount = Math.min(startCount + itemsPerPage, total);\n const totalPages = Math.trunc((total - 1) / itemsPerPage);\n\n const prevDisabled = page <= 0;\n const nextDisabled = page >= totalPages;\n\n return (\n
    \n
    \n {Boolean(total) && (\n formatMessage(\n {\n id: 'footer_pagination.count',\n defaultMessage: 'Showing {startCount, number}-{endCount, number} of {total, number}',\n },\n {\n startCount: startCount + 1,\n endCount,\n total,\n },\n )\n )}\n
    \n
    \n \n \n \n {formatMessage({\n id: 'footer_pagination.prev',\n defaultMessage: 'Previous',\n })}\n \n \n \n \n {formatMessage({\n id: 'footer_pagination.next',\n defaultMessage: 'Next',\n })}\n \n \n \n
    \n
    \n );\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport styled, {keyframes} from 'styled-components';\n\nconst skeletonFade = keyframes`\n 0% {\n background-color: rgba(var(--center-channel-color-rgb), 0.08);\n }\n 50% {\n background-color: rgba(var(--center-channel-color-rgb), 0.16);\n }\n 100% {\n background-color: rgba(var(--center-channel-color-rgb), 0.08);\n }\n`;\n\nconst BaseLoader = styled.div`\n animation-duration: 1500ms;\n animation-iteration-count: infinite;\n animation-name: ${skeletonFade};\n animation-timing-function: ease-in-out;\n background-color: rgba(var(--center-channel-color-rgb), 0.08);\n`;\n\nexport interface CircleSkeletonLoaderProps {\n size: string | number;\n}\n\n/**\n * CircleSkeletonLoader is a component that renders a filled circle with a loading animation.\n * It is used to indicate that the content is loading.\n * @param props.size - The size of the circle. When in number, it is treated as pixels.\n * @example\n * \n * \n */\nexport const CircleSkeletonLoader = styled(BaseLoader)`\n display: block;\n border-radius: 50%;\n height: ${(props) => getCorrectSizeDimension(props.size)};\n width: ${(props) => getCorrectSizeDimension(props.size)};\n`;\n\nexport interface RectangleSkeletonLoaderProps {\n height: string | number;\n width?: string | number;\n borderRadius?: number;\n margin?: string;\n flex?: string;\n}\n\n/**\n * RectangleSkeletonLoader is a component that renders a filled rectangle with a loading animation.\n * It is used to indicate that the content is loading.\n * @param props.height - The height of the rectangle eg. 20, \"20em\", \"20%\". When in number, it is treated as pixels.\n * @param props.width - The width of the rectangle eg. 30, '100%'. When in number, it is treated as pixels.\n * @param props.borderRadius - The border radius of the rectangle eg. 4\n * @param props.margin - The margin of the rectangle eg. '0 10px', '10px 0 0 10px'\n * @param props.flex - The flex short hand of flex grow, shrink, basis of the rectangle, under flex parent css eg. '1 1 auto'\n * @default\n * width: 100% , borderRadius: 8px\n * @example\n * \n * \n */\nexport const RectangleSkeletonLoader = styled(BaseLoader)`\n height: ${(props) => getCorrectSizeDimension(props.height)};\n width: ${(props) => getCorrectSizeDimension(props.width, '100%')};\n border-radius: ${(props) => props?.borderRadius ?? 8}px;\n margin: ${(props) => props?.margin ?? null};\n flex: ${(props) => props?.flex ?? null};\n`;\n\nfunction getCorrectSizeDimension(size: number | string | undefined, fallback: string | null = null) {\n if (size) {\n return (typeof size === 'string') ? size : `${size}px`;\n }\n\n return fallback;\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport type {Props as PunchOutCoordsHeightAndWidth} from '../common/hooks/useMeasurePunchouts';\n\ntype Props = {\n overlayPunchOut: PunchOutCoordsHeightAndWidth | null;\n show: boolean;\n interactivePunchOut?: boolean;\n onDismiss?: (e: React.MouseEvent) => void;\n onPunchOut?: (e: React.MouseEvent) => void;\n appendTo: HTMLElement;\n transparent?: boolean;\n}\n\nconst TourTipRootPortal = ({children, show, element}: {children: React.ReactNode ; show: boolean; element: Element}) =>\n (show ? ReactDOM.createPortal(\n children,\n element,\n ) : null);\n\nexport const TourTipBackdrop = ({\n show,\n overlayPunchOut,\n interactivePunchOut,\n onDismiss,\n onPunchOut,\n appendTo,\n transparent,\n}: Props) => {\n const vertices = [];\n if (overlayPunchOut) {\n const {x, y, width, height} = overlayPunchOut;\n\n // draw to top left of punch out\n vertices.push('0% 0%');\n vertices.push('0% 100%');\n vertices.push('100% 100%');\n vertices.push('100% 0%');\n vertices.push(`${x} 0%`);\n vertices.push(`${x} ${y}`);\n\n // draw punch out\n vertices.push(`calc(${x} + ${width}) ${y}`);\n vertices.push(`calc(${x} + ${width}) calc(${y} + ${height})`);\n vertices.push(`${x} calc(${y} + ${height})`);\n vertices.push(`${x} ${y}`);\n\n // close off punch out\n vertices.push(`${x} 0%`);\n vertices.push('0% 0%');\n }\n const backdrop = (\n \n );\n const overlay = interactivePunchOut ? backdrop : (\n <>\n \n {backdrop}\n \n );\n\n return (\n \n {overlay}\n \n );\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport type {Coords} from '../common/hooks/useMeasurePunchouts';\n\nimport './pulsating_dot.scss';\n\ntype Props = {\n targetRef?: React.RefObject;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n coords?: Coords;\n}\n\nexport class PulsatingDot extends React.PureComponent {\n public render() {\n let customStyles = {};\n if (this.props?.coords) {\n customStyles = {\n transform: `translate(${this.props.coords?.x}px, ${this.props.coords?.y}px)`,\n };\n }\n let effectiveClassName = 'pulsating_dot';\n if (this.props.onClick) {\n effectiveClassName += ' pulsating_dot-clickable';\n }\n if (this.props.className) {\n effectiveClassName = effectiveClassName + ' ' + this.props.className;\n }\n\n return (\n \n );\n }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport Tippy from '@tippyjs/react';\nimport classNames from 'classnames';\nimport React, {useRef} from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport type {Placement} from 'tippy.js';\n\nimport {TourTipBackdrop} from './tour_tip_backdrop';\n\nimport type {Props as PunchOutCoordsHeightAndWidth} from '../common/hooks/useMeasurePunchouts';\nimport {PulsatingDot} from '../pulsating_dot';\n\nimport 'tippy.js/dist/tippy.css';\nimport 'tippy.js/themes/light-border.css';\nimport 'tippy.js/animations/scale-subtle.css';\nimport 'tippy.js/animations/perspective-subtle.css';\n\nimport './tour_tip.scss';\n\nexport type TourTipEventSource = 'next' | 'prev' | 'dismiss' | 'jump' | 'skipped' | 'open' | 'punchOut'\n\ntype Props = {\n show: boolean;\n screen: JSX.Element;\n title: JSX.Element;\n step: number;\n\n tourSteps?: Record;\n nextBtn?: JSX.Element;\n prevBtn?: JSX.Element;\n imageURL?: string;\n singleTip?: boolean;\n showOptOut?: boolean;\n placement?: Placement;\n pulsatingDotPlacement?: Omit;\n pulsatingDotTranslate?: {x: number; y: number};\n offset?: [number, number];\n width?: string | number;\n zIndex?: number;\n className?: string;\n hideBackdrop?: boolean;\n tippyBlueStyle?: boolean;\n\n // if you don't want punchOut just assign null, keep null as hook may return null first than actual value\n overlayPunchOut: PunchOutCoordsHeightAndWidth | null;\n\n // if we want to interact with element visible via punchOut\n interactivePunchOut?: boolean;\n\n handleOpen?: (e: React.MouseEvent) => void;\n handleNext?: (e: React.MouseEvent) => void;\n handlePrevious?: (e: React.MouseEvent) => void;\n handleJump?: (e: React.MouseEvent, jumpToStep: number) => void;\n handleSkip?: (e: React.MouseEvent) => void;\n handleDismiss?: (e: React.MouseEvent) => void;\n handlePunchOut?: (e: React.MouseEvent) => void;\n}\n\nexport const TourTip = ({\n title,\n screen,\n imageURL,\n overlayPunchOut,\n singleTip,\n step,\n show,\n interactivePunchOut,\n tourSteps,\n handleOpen,\n handleDismiss,\n handleNext,\n handlePrevious,\n handleSkip,\n handleJump,\n handlePunchOut,\n pulsatingDotTranslate,\n pulsatingDotPlacement,\n nextBtn,\n prevBtn,\n className,\n offset = [-18, 4],\n placement = 'right-start',\n showOptOut = true,\n width = 352,\n zIndex = 999,\n hideBackdrop = false,\n tippyBlueStyle = false,\n}: Props) => {\n const FIRST_STEP_INDEX = 0;\n const triggerRef = useRef(null);\n const onJump = (event: React.MouseEvent, jumpToStep: number) => {\n handleJump?.(event, jumpToStep);\n };\n\n // This needs to be changed if root-portal node isn't available to maybe body\n const rootPortal = document.getElementById('root-portal');\n\n const dots = [];\n if (!singleTip && tourSteps) {\n for (let dot = FIRST_STEP_INDEX; dot < (Object.values(tourSteps).length - 1); dot++) {\n let className = 'tour-tip__dot';\n let circularRing = 'tour-tip__dot-ring';\n\n if (dot === step) {\n className += ' active';\n circularRing += ' tour-tip__dot-ring-active';\n }\n dots.push(\n
    \n onJump(e, dot)}\n />\n
    ,\n );\n }\n }\n\n const content = (\n <>\n \n

    \n {title}\n

    \n \n \n \n \n
    \n {screen}\n
    \n {imageURL && (\n
    \n \n
    \n )}\n {(nextBtn || prevBtn || showOptOut) && (
    \n
    \n
    {dots}
    \n
    \n {step !== 0 && prevBtn && (\n \n {prevBtn}\n \n )}\n {nextBtn && (\n \n {nextBtn}\n \n )}\n
    \n
    \n {showOptOut && (\n
    \n \n \n \n \n
    \n )}\n
    \n )}\n \n );\n\n return (\n <>\n \n \n \n \n {show && (\n \n )}\n \n );\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport throttle from 'lodash/throttle';\nimport {useLayoutEffect, useMemo, useState} from 'react';\n\nimport {useElementAvailable} from './useElementAvailable';\n\nexport type Coords = {\n x?: string;\n y?: string;\n}\n\nexport type Props = Coords & {\n width: string;\n height: string;\n}\n\ntype PunchOutOffset = {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport const useMeasurePunchouts = (elementIds: string[], additionalDeps: any[], offset?: PunchOutOffset): Props | null => {\n const elementsAvailable = useElementAvailable(elementIds);\n const [size, setSize] = useState({x: window.innerWidth, y: window.innerHeight});\n const updateSize = throttle(() => {\n setSize({x: window.innerWidth, y: window.innerHeight});\n }, 100, {trailing: true});\n\n useLayoutEffect(() => {\n window.addEventListener('resize', updateSize);\n return () =>\n window.removeEventListener('resize', updateSize);\n }, []);\n\n const channelPunchout = useMemo(() => {\n let minX = Number.MAX_SAFE_INTEGER;\n let minY = Number.MAX_SAFE_INTEGER;\n let maxX = Number.MIN_SAFE_INTEGER;\n let maxY = Number.MIN_SAFE_INTEGER;\n for (let i = 0; i < elementIds.length; i++) {\n const rectangle = document.getElementById(elementIds[i])?.getBoundingClientRect();\n if (!rectangle) {\n return null;\n }\n if (rectangle.x < minX) {\n minX = rectangle.x;\n }\n if (rectangle.y < minY) {\n minY = rectangle.y;\n }\n if (rectangle.x + rectangle.width > maxX) {\n maxX = rectangle.x + rectangle.width;\n }\n if (rectangle.y + rectangle.height > maxY) {\n maxY = rectangle.y + rectangle.height;\n }\n }\n\n return {\n x: `${minX + (offset ? offset.x : 0)}px`,\n y: `${minY + (offset ? offset.y : 0)}px`,\n width: `${(maxX - minX) + (offset ? offset.width : 0)}px`,\n height: `${(maxY - minY) + (offset ? offset.height : 0)}px`,\n };\n }, [...elementIds, ...additionalDeps, size, elementsAvailable]);\n return channelPunchout;\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {useEffect, useRef, useState, useMemo} from 'react';\n\nexport function useElementAvailable(\n elementIds: string[],\n intervalMS = 250,\n): boolean {\n const checkAvailableInterval = useRef(null);\n const [available, setAvailable] = useState(false);\n useEffect(() => {\n if (available) {\n if (checkAvailableInterval.current) {\n clearInterval(checkAvailableInterval.current);\n checkAvailableInterval.current = null;\n }\n return;\n } else if (checkAvailableInterval.current) {\n return;\n }\n checkAvailableInterval.current = setInterval(() => {\n if (elementIds.every((x) => document.getElementById(x))) {\n setAvailable(true);\n if (checkAvailableInterval.current) {\n clearInterval(checkAvailableInterval.current);\n checkAvailableInterval.current = null;\n }\n }\n }, intervalMS);\n }, []);\n\n return useMemo(() => available, [available]);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {useEffect, useState} from 'react';\n\nexport const useFollowElementDimensions = (elementId: string): DOMRectReadOnly => {\n const [dimensions, setDimensions] = useState(new DOMRect());\n\n useEffect(() => {\n const element = document.getElementById(elementId);\n if (!element) {\n return undefined;\n }\n const observer = new ResizeObserver((entries) => {\n if (entries.length > 0) {\n setDimensions(entries[0].contentRect);\n }\n });\n observer.observe(element);\n\n return () => {\n observer.unobserve(element);\n };\n }, [elementId]);\n\n return dimensions;\n};\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isStatusOK = exports.LogLevel = void 0;\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[\"Error\"] = \"ERROR\";\n LogLevel[\"Warning\"] = \"WARNING\";\n LogLevel[\"Info\"] = \"INFO\";\n LogLevel[\"Debug\"] = \"DEBUG\";\n})(LogLevel || (exports.LogLevel = LogLevel = {}));\nconst isStatusOK = (x) => (x === null || x === void 0 ? void 0 : x.status) === 'OK';\nexports.isStatusOK = isStatusOK;\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GroupSource = exports.SyncableType = void 0;\nvar SyncableType;\n(function (SyncableType) {\n SyncableType[\"Team\"] = \"team\";\n SyncableType[\"Channel\"] = \"channel\";\n})(SyncableType || (exports.SyncableType = SyncableType = {}));\nvar GroupSource;\n(function (GroupSource) {\n GroupSource[\"Ldap\"] = \"ldap\";\n GroupSource[\"Custom\"] = \"custom\";\n})(GroupSource || (exports.GroupSource = GroupSource = {}));\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isPostAction = isPostAction;\nconst utilities_1 = require(\"./utilities\");\nfunction isPostAction(v) {\n if (typeof v !== 'object' || !v) {\n return false;\n }\n if (!('id' in v)) {\n return false;\n }\n if (typeof v.id !== 'string') {\n return false;\n }\n if (!('name' in v)) {\n return false;\n }\n if (typeof v.name !== 'string') {\n return false;\n }\n if ('type' in v && typeof v.type !== 'string') {\n return false;\n }\n if ('disabled' in v && typeof v.disabled !== 'boolean') {\n return false;\n }\n if ('style' in v && typeof v.style !== 'string') {\n return false;\n }\n if ('data_source' in v && typeof v.data_source !== 'string') {\n return false;\n }\n if ('options' in v && !(0, utilities_1.isArrayOf)(v.options, isPostActionOption)) {\n return false;\n }\n if ('default_option' in v && typeof v.default_option !== 'string') {\n return false;\n }\n if ('cookie' in v && typeof v.cookie !== 'string') {\n return false;\n }\n return true;\n}\nfunction isPostActionOption(v) {\n if (typeof v !== 'object' || !v) {\n return false;\n }\n if ('text' in v && typeof v.text !== 'string') {\n return false;\n }\n if ('value' in v && typeof v.value !== 'string') {\n return false;\n }\n return true;\n}\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isMessageAttachmentArray = isMessageAttachmentArray;\nconst integration_actions_1 = require(\"./integration_actions\");\nconst utilities_1 = require(\"./utilities\");\nfunction isMessageAttachmentArray(v) {\n return (0, utilities_1.isArrayOf)(v, isMessageAttachment);\n}\nfunction isMessageAttachment(v) {\n if (typeof v !== 'object' || !v) {\n return false;\n }\n if ('fallback' in v && typeof v.fallback !== 'string') {\n return false;\n }\n // We may consider adding more validation to what color may be\n if ('color' in v && typeof v.color !== 'string') {\n return false;\n }\n if ('pretext' in v && typeof v.pretext !== 'string') {\n return false;\n }\n if ('author_name' in v && typeof v.author_name !== 'string') {\n return false;\n }\n // Where it is used, we are calling isUrlSafe. We could consider calling it here\n if ('author_link' in v && typeof v.author_link !== 'string') {\n return false;\n }\n // We may need more validation since this is going to be passed to an img src prop\n if ('author_icon' in v && typeof v.author_icon !== 'string') {\n return false;\n }\n if ('title' in v && typeof v.title !== 'string') {\n return false;\n }\n // Where it is used, we are calling isUrlSafe. We could consider calling it here\n if ('title_link' in v && typeof v.title_link !== 'string') {\n return false;\n }\n if ('text' in v && typeof v.text !== 'string') {\n return false;\n }\n // We may need more validation since this is going to be passed to an img src prop\n if ('image_url' in v && typeof v.image_url !== 'string') {\n return false;\n }\n // We may need more validation since this is going to be passed to an img src prop\n if ('thumb_url' in v && typeof v.thumb_url !== 'string') {\n return false;\n }\n // We are truncating if the size is more than some constant. We could check this here\n if ('footer' in v && typeof v.footer !== 'string') {\n return false;\n }\n // We may need more validation since this is going to be passed to an img src prop\n if ('footer_icon' in v && typeof v.footer_icon !== 'string') {\n return false;\n }\n if ('fields' in v && v.fields !== null && !(0, utilities_1.isArrayOf)(v.fields, isMessageAttachmentField)) {\n return false;\n }\n if ('actions' in v && !(0, utilities_1.isArrayOf)(v.actions, integration_actions_1.isPostAction)) {\n return false;\n }\n return true;\n}\nfunction isMessageAttachmentField(v) {\n if (typeof v !== 'object') {\n return false;\n }\n if (!v) {\n return false;\n }\n if (!('title' in v)) {\n return false;\n }\n if (typeof v.title !== 'string') {\n return false;\n }\n if (!('value' in v)) {\n return false;\n }\n if (typeof v.value === 'object' && v.value && 'toString' in v.value && typeof v.value.toString !== 'function') {\n return false;\n }\n if ('short' in v && typeof v.short !== 'boolean') {\n return false;\n }\n return true;\n}\n","\"use strict\";\n// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PostPriority = void 0;\nvar PostPriority;\n(function (PostPriority) {\n PostPriority[\"URGENT\"] = \"urgent\";\n PostPriority[\"IMPORTANT\"] = \"important\";\n})(PostPriority || (exports.PostPriority = PostPriority = {}));\n","var map = {\n\t\"./_lib/buildFormatLongFn/index.js\": 81535,\n\t\"./_lib/buildLocalizeFn/index.js\": 98149,\n\t\"./_lib/buildMatchFn/index.js\": 72283,\n\t\"./_lib/buildMatchPatternFn/index.js\": 30227,\n\t\"./af/_lib/formatDistance/index.js\": 19048,\n\t\"./af/_lib/formatLong/index.js\": 17609,\n\t\"./af/_lib/formatRelative/index.js\": 46883,\n\t\"./af/_lib/localize/index.js\": 2347,\n\t\"./af/_lib/match/index.js\": 51445,\n\t\"./af/index.js\": 75122,\n\t\"./ar-DZ/_lib/formatDistance/index.js\": 63081,\n\t\"./ar-DZ/_lib/formatLong/index.js\": 92836,\n\t\"./ar-DZ/_lib/formatRelative/index.js\": 68046,\n\t\"./ar-DZ/_lib/localize/index.js\": 87566,\n\t\"./ar-DZ/_lib/match/index.js\": 1802,\n\t\"./ar-DZ/index.js\": 38727,\n\t\"./ar-EG/_lib/formatDistance/index.js\": 37223,\n\t\"./ar-EG/_lib/formatLong/index.js\": 22562,\n\t\"./ar-EG/_lib/formatRelative/index.js\": 41656,\n\t\"./ar-EG/_lib/localize/index.js\": 12296,\n\t\"./ar-EG/_lib/match/index.js\": 88816,\n\t\"./ar-EG/index.js\": 86909,\n\t\"./ar-MA/_lib/formatDistance/index.js\": 17961,\n\t\"./ar-MA/_lib/formatLong/index.js\": 24772,\n\t\"./ar-MA/_lib/formatRelative/index.js\": 65550,\n\t\"./ar-MA/_lib/localize/index.js\": 34926,\n\t\"./ar-MA/_lib/match/index.js\": 18058,\n\t\"./ar-MA/index.js\": 7335,\n\t\"./ar-SA/_lib/formatDistance/index.js\": 55731,\n\t\"./ar-SA/_lib/formatLong/index.js\": 51838,\n\t\"./ar-SA/_lib/formatRelative/index.js\": 77132,\n\t\"./ar-SA/_lib/localize/index.js\": 83956,\n\t\"./ar-SA/_lib/match/index.js\": 12948,\n\t\"./ar-SA/index.js\": 12345,\n\t\"./ar-TN/_lib/formatDistance/index.js\": 68565,\n\t\"./ar-TN/_lib/formatLong/index.js\": 26176,\n\t\"./ar-TN/_lib/formatRelative/index.js\": 97650,\n\t\"./ar-TN/_lib/localize/index.js\": 67978,\n\t\"./ar-TN/_lib/match/index.js\": 38030,\n\t\"./ar-TN/index.js\": 88403,\n\t\"./ar/_lib/formatDistance/index.js\": 37668,\n\t\"./ar/_lib/formatLong/index.js\": 5461,\n\t\"./ar/_lib/formatRelative/index.js\": 1559,\n\t\"./ar/_lib/localize/index.js\": 71063,\n\t\"./ar/_lib/match/index.js\": 38777,\n\t\"./ar/index.js\": 2478,\n\t\"./az/_lib/formatDistance/index.js\": 18428,\n\t\"./az/_lib/formatLong/index.js\": 37501,\n\t\"./az/_lib/formatRelative/index.js\": 80655,\n\t\"./az/_lib/localize/index.js\": 54367,\n\t\"./az/_lib/match/index.js\": 92545,\n\t\"./az/index.js\": 30102,\n\t\"./be-tarask/_lib/formatDistance/index.js\": 42505,\n\t\"./be-tarask/_lib/formatLong/index.js\": 71076,\n\t\"./be-tarask/_lib/formatRelative/index.js\": 47470,\n\t\"./be-tarask/_lib/localize/index.js\": 9326,\n\t\"./be-tarask/_lib/match/index.js\": 38250,\n\t\"./be-tarask/index.js\": 44199,\n\t\"./be/_lib/formatDistance/index.js\": 23126,\n\t\"./be/_lib/formatLong/index.js\": 65687,\n\t\"./be/_lib/formatRelative/index.js\": 24493,\n\t\"./be/_lib/localize/index.js\": 95933,\n\t\"./be/_lib/match/index.js\": 58051,\n\t\"./be/index.js\": 9816,\n\t\"./bg/_lib/formatDistance/index.js\": 97696,\n\t\"./bg/_lib/formatLong/index.js\": 95121,\n\t\"./bg/_lib/formatRelative/index.js\": 81371,\n\t\"./bg/_lib/localize/index.js\": 243,\n\t\"./bg/_lib/match/index.js\": 1181,\n\t\"./bg/index.js\": 86266,\n\t\"./bn/_lib/formatDistance/index.js\": 96163,\n\t\"./bn/_lib/formatLong/index.js\": 3009,\n\t\"./bn/_lib/formatRelative/index.js\": 11228,\n\t\"./bn/_lib/localize/index.js\": 83268,\n\t\"./bn/_lib/match/index.js\": 33476,\n\t\"./bn/index.js\": 36937,\n\t\"./bs/_lib/formatDistance/index.js\": 22652,\n\t\"./bs/_lib/formatLong/index.js\": 87709,\n\t\"./bs/_lib/formatRelative/index.js\": 25871,\n\t\"./bs/_lib/localize/index.js\": 99359,\n\t\"./bs/_lib/match/index.js\": 7201,\n\t\"./bs/index.js\": 22390,\n\t\"./ca/_lib/formatDistance/index.js\": 84739,\n\t\"./ca/_lib/formatLong/index.js\": 86990,\n\t\"./ca/_lib/formatRelative/index.js\": 64668,\n\t\"./ca/_lib/localize/index.js\": 87588,\n\t\"./ca/_lib/match/index.js\": 66820,\n\t\"./ca/index.js\": 18249,\n\t\"./cs/_lib/formatDistance/index.js\": 55753,\n\t\"./cs/_lib/formatLong/index.js\": 22020,\n\t\"./cs/_lib/formatRelative/index.js\": 15790,\n\t\"./cs/_lib/localize/index.js\": 43214,\n\t\"./cs/_lib/match/index.js\": 42346,\n\t\"./cs/index.js\": 13447,\n\t\"./cy/_lib/formatDistance/index.js\": 43915,\n\t\"./cy/_lib/formatLong/index.js\": 10598,\n\t\"./cy/_lib/formatRelative/index.js\": 96676,\n\t\"./cy/_lib/localize/index.js\": 29340,\n\t\"./cy/_lib/match/index.js\": 28060,\n\t\"./cy/index.js\": 18529,\n\t\"./da/_lib/formatDistance/index.js\": 87680,\n\t\"./da/_lib/formatLong/index.js\": 37969,\n\t\"./da/_lib/formatRelative/index.js\": 66843,\n\t\"./da/_lib/localize/index.js\": 51091,\n\t\"./da/_lib/match/index.js\": 71101,\n\t\"./da/index.js\": 40506,\n\t\"./de-AT/_lib/localize/index.js\": 22429,\n\t\"./de-AT/index.js\": 10296,\n\t\"./de/_lib/formatDistance/index.js\": 35372,\n\t\"./de/_lib/formatLong/index.js\": 84845,\n\t\"./de/_lib/formatRelative/index.js\": 64863,\n\t\"./de/_lib/localize/index.js\": 26479,\n\t\"./de/_lib/match/index.js\": 66257,\n\t\"./de/index.js\": 82086,\n\t\"./el/_lib/formatDistance/index.js\": 37850,\n\t\"./el/_lib/formatLong/index.js\": 50587,\n\t\"./el/_lib/formatRelative/index.js\": 76249,\n\t\"./el/_lib/localize/index.js\": 55825,\n\t\"./el/_lib/match/index.js\": 47855,\n\t\"./el/index.js\": 51788,\n\t\"./en-AU/_lib/formatLong/index.js\": 69188,\n\t\"./en-AU/index.js\": 6087,\n\t\"./en-CA/_lib/formatDistance/index.js\": 547,\n\t\"./en-CA/_lib/formatLong/index.js\": 42030,\n\t\"./en-CA/index.js\": 84169,\n\t\"./en-GB/_lib/formatLong/index.js\": 97467,\n\t\"./en-GB/index.js\": 39532,\n\t\"./en-IE/index.js\": 91567,\n\t\"./en-IN/_lib/formatLong/index.js\": 91833,\n\t\"./en-IN/index.js\": 83458,\n\t\"./en-NZ/_lib/formatLong/index.js\": 97326,\n\t\"./en-NZ/index.js\": 57001,\n\t\"./en-US/_lib/formatDistance/index.js\": 90763,\n\t\"./en-US/_lib/formatLong/index.js\": 54374,\n\t\"./en-US/_lib/formatRelative/index.js\": 43511,\n\t\"./en-US/_lib/localize/index.js\": 93308,\n\t\"./en-US/_lib/match/index.js\": 19996,\n\t\"./en-US/index.js\": 91457,\n\t\"./en-ZA/_lib/formatLong/index.js\": 94683,\n\t\"./en-ZA/index.js\": 7532,\n\t\"./eo/_lib/formatDistance/index.js\": 68463,\n\t\"./eo/_lib/formatLong/index.js\": 9850,\n\t\"./eo/_lib/formatRelative/index.js\": 31968,\n\t\"./eo/_lib/localize/index.js\": 73600,\n\t\"./eo/_lib/match/index.js\": 18440,\n\t\"./eo/index.js\": 14101,\n\t\"./es/_lib/formatDistance/index.js\": 85499,\n\t\"./es/_lib/formatLong/index.js\": 90070,\n\t\"./es/_lib/formatRelative/index.js\": 91668,\n\t\"./es/_lib/localize/index.js\": 43052,\n\t\"./es/_lib/match/index.js\": 5580,\n\t\"./es/index.js\": 79889,\n\t\"./et/_lib/formatDistance/index.js\": 36226,\n\t\"./et/_lib/formatLong/index.js\": 89523,\n\t\"./et/_lib/formatRelative/index.js\": 22561,\n\t\"./et/_lib/localize/index.js\": 56041,\n\t\"./et/_lib/match/index.js\": 38919,\n\t\"./et/index.js\": 95012,\n\t\"./eu/_lib/formatDistance/index.js\": 44381,\n\t\"./eu/_lib/formatLong/index.js\": 11480,\n\t\"./eu/_lib/formatRelative/index.js\": 6554,\n\t\"./eu/_lib/localize/index.js\": 62722,\n\t\"./eu/_lib/match/index.js\": 41894,\n\t\"./eu/index.js\": 98347,\n\t\"./fa-IR/_lib/formatDistance/index.js\": 41254,\n\t\"./fa-IR/_lib/formatLong/index.js\": 57287,\n\t\"./fa-IR/_lib/formatRelative/index.js\": 71037,\n\t\"./fa-IR/_lib/localize/index.js\": 99565,\n\t\"./fa-IR/_lib/match/index.js\": 1747,\n\t\"./fa-IR/index.js\": 90856,\n\t\"./fi/_lib/formatDistance/index.js\": 58998,\n\t\"./fi/_lib/formatLong/index.js\": 8567,\n\t\"./fi/_lib/formatRelative/index.js\": 61261,\n\t\"./fi/_lib/localize/index.js\": 39709,\n\t\"./fi/_lib/match/index.js\": 95587,\n\t\"./fi/index.js\": 28920,\n\t\"./fr-CA/_lib/formatLong/index.js\": 73883,\n\t\"./fr-CA/index.js\": 50668,\n\t\"./fr-CH/_lib/formatLong/index.js\": 78664,\n\t\"./fr-CH/_lib/formatRelative/index.js\": 20394,\n\t\"./fr-CH/index.js\": 24251,\n\t\"./fr/_lib/formatDistance/index.js\": 89619,\n\t\"./fr/_lib/formatLong/index.js\": 64606,\n\t\"./fr/_lib/formatRelative/index.js\": 32652,\n\t\"./fr/_lib/localize/index.js\": 38343,\n\t\"./fr/_lib/match/index.js\": 74516,\n\t\"./fr/index.js\": 40345,\n\t\"./fy/_lib/formatDistance/index.js\": 166,\n\t\"./fy/_lib/formatLong/index.js\": 61063,\n\t\"./fy/_lib/formatRelative/index.js\": 40650,\n\t\"./fy/_lib/localize/index.js\": 6093,\n\t\"./fy/_lib/match/index.js\": 86323,\n\t\"./fy/index.js\": 64808,\n\t\"./gd/_lib/formatDistance/index.js\": 45240,\n\t\"./gd/_lib/formatLong/index.js\": 68537,\n\t\"./gd/_lib/formatRelative/index.js\": 6880,\n\t\"./gd/_lib/localize/index.js\": 49819,\n\t\"./gd/_lib/match/index.js\": 18437,\n\t\"./gd/index.js\": 20546,\n\t\"./gl/_lib/formatDistance/index.js\": 88400,\n\t\"./gl/_lib/formatLong/index.js\": 45889,\n\t\"./gl/_lib/formatRelative/index.js\": 79147,\n\t\"./gl/_lib/localize/index.js\": 58211,\n\t\"./gl/_lib/match/index.js\": 36525,\n\t\"./gl/index.js\": 45226,\n\t\"./gu/_lib/formatDistance/index.js\": 21859,\n\t\"./gu/_lib/formatLong/index.js\": 12206,\n\t\"./gu/_lib/formatRelative/index.js\": 75324,\n\t\"./gu/_lib/localize/index.js\": 47140,\n\t\"./gu/_lib/match/index.js\": 67588,\n\t\"./gu/index.js\": 17065,\n\t\"./he/_lib/formatDistance/index.js\": 4672,\n\t\"./he/_lib/formatLong/index.js\": 14033,\n\t\"./he/_lib/formatRelative/index.js\": 85051,\n\t\"./he/_lib/localize/index.js\": 60211,\n\t\"./he/_lib/match/index.js\": 76189,\n\t\"./he/index.js\": 36602,\n\t\"./hi/_lib/formatDistance/index.js\": 29332,\n\t\"./hi/_lib/formatLong/index.js\": 23845,\n\t\"./hi/_lib/formatRelative/index.js\": 43111,\n\t\"./hi/_lib/localize/index.js\": 83047,\n\t\"./hi/_lib/match/index.js\": 9193,\n\t\"./hi/index.js\": 31006,\n\t\"./hr/_lib/formatDistance/index.js\": 4045,\n\t\"./hr/_lib/formatLong/index.js\": 55432,\n\t\"./hr/_lib/formatRelative/index.js\": 83498,\n\t\"./hr/_lib/localize/index.js\": 53106,\n\t\"./hr/_lib/match/index.js\": 1174,\n\t\"./hr/index.js\": 94235,\n\t\"./ht/_lib/formatDistance/index.js\": 86827,\n\t\"./ht/_lib/formatLong/index.js\": 53446,\n\t\"./ht/_lib/formatRelative/index.js\": 55460,\n\t\"./ht/_lib/localize/index.js\": 52060,\n\t\"./ht/_lib/match/index.js\": 19708,\n\t\"./ht/index.js\": 89505,\n\t\"./hu/_lib/formatDistance/index.js\": 21744,\n\t\"./hu/_lib/formatLong/index.js\": 60801,\n\t\"./hu/_lib/formatRelative/index.js\": 37291,\n\t\"./hu/_lib/localize/index.js\": 20899,\n\t\"./hu/_lib/match/index.js\": 56493,\n\t\"./hu/index.js\": 20106,\n\t\"./hy/_lib/formatDistance/index.js\": 62500,\n\t\"./hy/_lib/formatLong/index.js\": 82197,\n\t\"./hy/_lib/formatRelative/index.js\": 26391,\n\t\"./hy/_lib/localize/index.js\": 55351,\n\t\"./hy/_lib/match/index.js\": 56889,\n\t\"./hy/index.js\": 74830,\n\t\"./id/_lib/formatDistance/index.js\": 36646,\n\t\"./id/_lib/formatLong/index.js\": 22151,\n\t\"./id/_lib/formatRelative/index.js\": 37981,\n\t\"./id/_lib/localize/index.js\": 76333,\n\t\"./id/_lib/match/index.js\": 37683,\n\t\"./id/index.js\": 44136,\n\t\"./is/_lib/formatDistance/index.js\": 12823,\n\t\"./is/_lib/formatLong/index.js\": 13074,\n\t\"./is/_lib/formatRelative/index.js\": 47912,\n\t\"./is/_lib/localize/index.js\": 24280,\n\t\"./is/_lib/match/index.js\": 26432,\n\t\"./is/index.js\": 5357,\n\t\"./it-CH/_lib/formatLong/index.js\": 28027,\n\t\"./it-CH/index.js\": 3052,\n\t\"./it/_lib/formatDistance/index.js\": 20918,\n\t\"./it/_lib/formatLong/index.js\": 68055,\n\t\"./it/_lib/formatRelative/index.js\": 14701,\n\t\"./it/_lib/localize/index.js\": 98525,\n\t\"./it/_lib/match/index.js\": 16931,\n\t\"./it/index.js\": 97272,\n\t\"./ja-Hira/_lib/formatDistance/index.js\": 17911,\n\t\"./ja-Hira/_lib/formatLong/index.js\": 40882,\n\t\"./ja-Hira/_lib/formatRelative/index.js\": 54472,\n\t\"./ja-Hira/_lib/localize/index.js\": 98488,\n\t\"./ja-Hira/_lib/match/index.js\": 85216,\n\t\"./ja-Hira/index.js\": 75437,\n\t\"./ja/_lib/formatDistance/index.js\": 57002,\n\t\"./ja/_lib/formatLong/index.js\": 89579,\n\t\"./ja/_lib/formatRelative/index.js\": 33513,\n\t\"./ja/_lib/localize/index.js\": 27425,\n\t\"./ja/_lib/match/index.js\": 50655,\n\t\"./ja/index.js\": 93180,\n\t\"./ka/_lib/formatDistance/index.js\": 31179,\n\t\"./ka/_lib/formatLong/index.js\": 27366,\n\t\"./ka/_lib/formatRelative/index.js\": 99812,\n\t\"./ka/_lib/localize/index.js\": 21743,\n\t\"./ka/_lib/match/index.js\": 9436,\n\t\"./ka/index.js\": 801,\n\t\"./kk/_lib/formatDistance/index.js\": 30089,\n\t\"./kk/_lib/formatLong/index.js\": 9924,\n\t\"./kk/_lib/formatRelative/index.js\": 77678,\n\t\"./kk/_lib/localize/index.js\": 27246,\n\t\"./kk/_lib/match/index.js\": 91786,\n\t\"./kk/index.js\": 59111,\n\t\"./km/_lib/formatDistance/index.js\": 79855,\n\t\"./km/_lib/formatLong/index.js\": 80090,\n\t\"./km/_lib/formatRelative/index.js\": 68480,\n\t\"./km/_lib/localize/index.js\": 36032,\n\t\"./km/_lib/match/index.js\": 24488,\n\t\"./km/index.js\": 49941,\n\t\"./kn/_lib/formatDistance/index.js\": 14362,\n\t\"./kn/_lib/formatLong/index.js\": 8219,\n\t\"./kn/_lib/formatRelative/index.js\": 24473,\n\t\"./kn/_lib/localize/index.js\": 80081,\n\t\"./kn/_lib/match/index.js\": 61775,\n\t\"./kn/index.js\": 31948,\n\t\"./ko/_lib/formatDistance/index.js\": 55861,\n\t\"./ko/_lib/formatLong/index.js\": 34592,\n\t\"./ko/_lib/formatRelative/index.js\": 68594,\n\t\"./ko/_lib/localize/index.js\": 59658,\n\t\"./ko/_lib/match/index.js\": 93646,\n\t\"./ko/index.js\": 67827,\n\t\"./lb/_lib/formatDistance/index.js\": 99705,\n\t\"./lb/_lib/formatLong/index.js\": 60148,\n\t\"./lb/_lib/formatRelative/index.js\": 18622,\n\t\"./lb/_lib/localize/index.js\": 17246,\n\t\"./lb/_lib/match/index.js\": 45114,\n\t\"./lb/index.js\": 33623,\n\t\"./lt/_lib/formatDistance/index.js\": 93295,\n\t\"./lt/_lib/formatLong/index.js\": 2938,\n\t\"./lt/_lib/formatRelative/index.js\": 56800,\n\t\"./lt/_lib/localize/index.js\": 74240,\n\t\"./lt/_lib/match/index.js\": 20200,\n\t\"./lt/index.js\": 70101,\n\t\"./lv/_lib/formatDistance/index.js\": 40373,\n\t\"./lv/_lib/formatLong/index.js\": 46496,\n\t\"./lv/_lib/formatRelative/index.js\": 98130,\n\t\"./lv/_lib/localize/index.js\": 35786,\n\t\"./lv/_lib/match/index.js\": 78318,\n\t\"./lv/index.js\": 94995,\n\t\"./mk/_lib/formatDistance/index.js\": 13099,\n\t\"./mk/_lib/formatLong/index.js\": 44902,\n\t\"./mk/_lib/formatRelative/index.js\": 65860,\n\t\"./mk/_lib/localize/index.js\": 38396,\n\t\"./mk/_lib/match/index.js\": 19548,\n\t\"./mk/index.js\": 85825,\n\t\"./mn/_lib/formatDistance/index.js\": 33820,\n\t\"./mn/_lib/formatLong/index.js\": 57693,\n\t\"./mn/_lib/formatRelative/index.js\": 65135,\n\t\"./mn/_lib/localize/index.js\": 1119,\n\t\"./mn/_lib/match/index.js\": 68609,\n\t\"./mn/index.js\": 68918,\n\t\"./ms/_lib/formatDistance/index.js\": 53923,\n\t\"./ms/_lib/formatLong/index.js\": 37646,\n\t\"./ms/_lib/formatRelative/index.js\": 33852,\n\t\"./ms/_lib/localize/index.js\": 96644,\n\t\"./ms/_lib/match/index.js\": 41956,\n\t\"./ms/index.js\": 85545,\n\t\"./mt/_lib/formatDistance/index.js\": 1354,\n\t\"./mt/_lib/formatLong/index.js\": 47147,\n\t\"./mt/_lib/formatRelative/index.js\": 61513,\n\t\"./mt/_lib/localize/index.js\": 35841,\n\t\"./mt/_lib/match/index.js\": 24031,\n\t\"./mt/index.js\": 88124,\n\t\"./nb/_lib/formatDistance/index.js\": 87147,\n\t\"./nb/_lib/formatLong/index.js\": 58470,\n\t\"./nb/_lib/formatRelative/index.js\": 29060,\n\t\"./nb/_lib/localize/index.js\": 72732,\n\t\"./nb/_lib/match/index.js\": 61052,\n\t\"./nb/index.js\": 95393,\n\t\"./nl-BE/_lib/formatDistance/index.js\": 82001,\n\t\"./nl-BE/_lib/formatLong/index.js\": 48444,\n\t\"./nl-BE/_lib/formatRelative/index.js\": 47094,\n\t\"./nl-BE/_lib/localize/index.js\": 90246,\n\t\"./nl-BE/_lib/match/index.js\": 55394,\n\t\"./nl-BE/index.js\": 58399,\n\t\"./nl/_lib/formatDistance/index.js\": 12597,\n\t\"./nl/_lib/formatLong/index.js\": 86336,\n\t\"./nl/_lib/formatRelative/index.js\": 38482,\n\t\"./nl/_lib/localize/index.js\": 12298,\n\t\"./nl/_lib/match/index.js\": 46894,\n\t\"./nl/index.js\": 65139,\n\t\"./nn/_lib/formatDistance/index.js\": 72303,\n\t\"./nn/_lib/formatLong/index.js\": 32698,\n\t\"./nn/_lib/formatRelative/index.js\": 51680,\n\t\"./nn/_lib/localize/index.js\": 23680,\n\t\"./nn/_lib/match/index.js\": 65339,\n\t\"./nn/index.js\": 23349,\n\t\"./oc/_lib/formatDistance/index.js\": 79965,\n\t\"./oc/_lib/formatLong/index.js\": 6776,\n\t\"./oc/_lib/formatRelative/index.js\": 93338,\n\t\"./oc/_lib/localize/index.js\": 38370,\n\t\"./oc/_lib/match/index.js\": 12230,\n\t\"./oc/index.js\": 72075,\n\t\"./pl/_lib/formatDistance/index.js\": 63259,\n\t\"./pl/_lib/formatLong/index.js\": 51798,\n\t\"./pl/_lib/formatRelative/index.js\": 23796,\n\t\"./pl/_lib/localize/index.js\": 81228,\n\t\"./pl/_lib/match/index.js\": 12428,\n\t\"./pl/index.js\": 93169,\n\t\"./pt-BR/_lib/formatDistance/index.js\": 33510,\n\t\"./pt-BR/_lib/formatLong/index.js\": 91847,\n\t\"./pt-BR/_lib/formatRelative/index.js\": 51197,\n\t\"./pt-BR/_lib/localize/index.js\": 1197,\n\t\"./pt-BR/_lib/match/index.js\": 58067,\n\t\"./pt-BR/index.js\": 62376,\n\t\"./pt/_lib/formatDistance/index.js\": 467,\n\t\"./pt/_lib/formatLong/index.js\": 52894,\n\t\"./pt/_lib/formatRelative/index.js\": 77580,\n\t\"./pt/_lib/localize/index.js\": 61332,\n\t\"./pt/_lib/match/index.js\": 80468,\n\t\"./pt/index.js\": 82297,\n\t\"./ro/_lib/formatDistance/index.js\": 20632,\n\t\"./ro/_lib/formatLong/index.js\": 9497,\n\t\"./ro/_lib/formatRelative/index.js\": 275,\n\t\"./ro/_lib/localize/index.js\": 50107,\n\t\"./ro/_lib/match/index.js\": 56357,\n\t\"./ro/index.js\": 87170,\n\t\"./ru/_lib/formatDistance/index.js\": 94198,\n\t\"./ru/_lib/formatLong/index.js\": 12695,\n\t\"./ru/_lib/formatRelative/index.js\": 96461,\n\t\"./ru/_lib/localize/index.js\": 33693,\n\t\"./ru/_lib/match/index.js\": 74243,\n\t\"./ru/index.js\": 24568,\n\t\"./sk/_lib/formatDistance/index.js\": 39329,\n\t\"./sk/_lib/formatLong/index.js\": 70540,\n\t\"./sk/_lib/formatRelative/index.js\": 99142,\n\t\"./sk/_lib/localize/index.js\": 13366,\n\t\"./sk/_lib/match/index.js\": 55506,\n\t\"./sk/index.js\": 19119,\n\t\"./sl/_lib/formatDistance/index.js\": 84636,\n\t\"./sl/_lib/formatLong/index.js\": 30621,\n\t\"./sl/_lib/formatRelative/index.js\": 5327,\n\t\"./sl/_lib/localize/index.js\": 24479,\n\t\"./sl/_lib/match/index.js\": 17473,\n\t\"./sl/index.js\": 30230,\n\t\"./sq/_lib/formatDistance/index.js\": 57059,\n\t\"./sq/_lib/formatLong/index.js\": 32686,\n\t\"./sq/_lib/formatRelative/index.js\": 10524,\n\t\"./sq/_lib/localize/index.js\": 41124,\n\t\"./sq/_lib/match/index.js\": 62596,\n\t\"./sq/index.js\": 12713,\n\t\"./sr-Latn/_lib/formatDistance/index.js\": 8864,\n\t\"./sr-Latn/_lib/formatLong/index.js\": 27889,\n\t\"./sr-Latn/_lib/formatRelative/index.js\": 88027,\n\t\"./sr-Latn/_lib/localize/index.js\": 21523,\n\t\"./sr-Latn/_lib/match/index.js\": 83837,\n\t\"./sr-Latn/index.js\": 30138,\n\t\"./sr/_lib/formatDistance/index.js\": 60190,\n\t\"./sr/_lib/formatLong/index.js\": 97423,\n\t\"./sr/_lib/formatRelative/index.js\": 33205,\n\t\"./sr/_lib/localize/index.js\": 26933,\n\t\"./sr/_lib/match/index.js\": 83259,\n\t\"./sr/index.js\": 36880,\n\t\"./sv/_lib/formatDistance/index.js\": 40714,\n\t\"./sv/_lib/formatLong/index.js\": 71089,\n\t\"./sv/_lib/formatRelative/index.js\": 88969,\n\t\"./sv/_lib/localize/index.js\": 66017,\n\t\"./sv/_lib/match/index.js\": 36639,\n\t\"./sv/index.js\": 97244,\n\t\"./ta/_lib/formatDistance/index.js\": 80144,\n\t\"./ta/_lib/formatLong/index.js\": 21409,\n\t\"./ta/_lib/formatRelative/index.js\": 20459,\n\t\"./ta/_lib/localize/index.js\": 32291,\n\t\"./ta/_lib/match/index.js\": 40685,\n\t\"./ta/index.js\": 30282,\n\t\"./te/_lib/formatDistance/index.js\": 75004,\n\t\"./te/_lib/formatLong/index.js\": 34429,\n\t\"./te/_lib/formatRelative/index.js\": 89967,\n\t\"./te/_lib/localize/index.js\": 1759,\n\t\"./te/_lib/match/index.js\": 70369,\n\t\"./te/index.js\": 24918,\n\t\"./th/_lib/formatDistance/index.js\": 6227,\n\t\"./th/_lib/formatLong/index.js\": 68062,\n\t\"./th/_lib/formatRelative/index.js\": 60716,\n\t\"./th/_lib/localize/index.js\": 46004,\n\t\"./th/_lib/match/index.js\": 53460,\n\t\"./th/index.js\": 38233,\n\t\"./tr/_lib/formatDistance/index.js\": 67025,\n\t\"./tr/_lib/formatLong/index.js\": 88796,\n\t\"./tr/_lib/formatRelative/index.js\": 15766,\n\t\"./tr/_lib/localize/index.js\": 34566,\n\t\"./tr/_lib/match/index.js\": 53762,\n\t\"./tr/index.js\": 74655,\n\t\"./ug/_lib/formatDistance/index.js\": 63831,\n\t\"./ug/_lib/formatLong/index.js\": 36370,\n\t\"./ug/_lib/formatRelative/index.js\": 84040,\n\t\"./ug/_lib/localize/index.js\": 17816,\n\t\"./ug/_lib/match/index.js\": 33888,\n\t\"./ug/index.js\": 48973,\n\t\"./uk/_lib/formatDistance/index.js\": 50755,\n\t\"./uk/_lib/formatLong/index.js\": 73166,\n\t\"./uk/_lib/formatRelative/index.js\": 30684,\n\t\"./uk/_lib/localize/index.js\": 88868,\n\t\"./uk/_lib/match/index.js\": 70340,\n\t\"./uk/index.js\": 46601,\n\t\"./uz-Cyrl/_lib/formatDistance/index.js\": 89489,\n\t\"./uz-Cyrl/_lib/formatLong/index.js\": 79580,\n\t\"./uz-Cyrl/_lib/formatRelative/index.js\": 78006,\n\t\"./uz-Cyrl/_lib/localize/index.js\": 46662,\n\t\"./uz-Cyrl/_lib/match/index.js\": 97218,\n\t\"./uz-Cyrl/index.js\": 30239,\n\t\"./uz/_lib/formatDistance/index.js\": 51320,\n\t\"./uz/_lib/formatLong/index.js\": 85785,\n\t\"./uz/_lib/formatRelative/index.js\": 37587,\n\t\"./uz/_lib/localize/index.js\": 67931,\n\t\"./uz/_lib/match/index.js\": 30917,\n\t\"./uz/index.js\": 85506,\n\t\"./vi/_lib/formatDistance/index.js\": 63014,\n\t\"./vi/_lib/formatLong/index.js\": 36071,\n\t\"./vi/_lib/formatRelative/index.js\": 76445,\n\t\"./vi/_lib/localize/index.js\": 7117,\n\t\"./vi/_lib/match/index.js\": 72083,\n\t\"./vi/index.js\": 20635,\n\t\"./zh-CN/_lib/formatDistance/index.js\": 98257,\n\t\"./zh-CN/_lib/formatLong/index.js\": 33788,\n\t\"./zh-CN/_lib/formatRelative/index.js\": 3126,\n\t\"./zh-CN/_lib/localize/index.js\": 19814,\n\t\"./zh-CN/_lib/match/index.js\": 94722,\n\t\"./zh-CN/index.js\": 73439,\n\t\"./zh-HK/_lib/formatDistance/index.js\": 52249,\n\t\"./zh-HK/_lib/formatLong/index.js\": 40884,\n\t\"./zh-HK/_lib/formatRelative/index.js\": 23806,\n\t\"./zh-HK/_lib/localize/index.js\": 23934,\n\t\"./zh-HK/_lib/match/index.js\": 95949,\n\t\"./zh-HK/index.js\": 85463,\n\t\"./zh-TW/_lib/formatDistance/index.js\": 20217,\n\t\"./zh-TW/_lib/formatLong/index.js\": 1236,\n\t\"./zh-TW/_lib/formatRelative/index.js\": 91774,\n\t\"./zh-TW/_lib/localize/index.js\": 21374,\n\t\"./zh-TW/_lib/match/index.js\": 11290,\n\t\"./zh-TW/index.js\": 28759\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 = 42150;"],"names":["openDirectChannelToUserId","userId","async","dispatch","getState","state","currentUserId","getCurrentUserId","channelName","getDirectChannelName","channel","getChannelByName","ChannelActions","trackEvent","now","Date","prefDirect","category","Preferences","CATEGORY_DIRECT_CHANNEL_SHOW","name","value","prefOpenTime","CATEGORY_CHANNEL_OPEN_TIME","id","toString","actions","type","PreferenceTypes","RECEIVED_PREFERENCES","data","batchActions","savePreferences","_objectSpread","user_id","openGroupChannelToUserIds","userIds","result","error","getHistory","push","getCurrentTeamUrl","loadChannelsForCurrentUser","unreads","getUnreadChannelIds","getCurrentTeamId","getChannel","Constants","DM_CHANNEL","loadNewDMIfNeeded","GM_CHANNEL","loadNewGMIfNeeded","loadProfilesForSidebar","autocompleteChannels","term","success","teamId","err","server_error_id","autocompleteActiveChannels","activeChannels","filter","delete_at","autocompleteChannelsForSearch","addUsersToChannel","channelId","unmuteChannel","mark_unread","NotificationLevels","ALL","muteChannel","MENTION","loadRecentlyUsedCustomEmojis","getCustomEmojisEnabled","recentEmojiNames","getRecentEmojisNames","EmojiActions","incrementEmojiPickerPage","ActionTypes","INCREMENT_EMOJI_PICKER_PAGE","setUserSkinTone","skin","skinTonePreference","EMOJI_SKINTONE","CATEGORY_EMOJI","addRecentEmoji","alias","addRecentEmojis","MAXIMUM_RECENT_EMOJI","aliases","recentEmojis","getRecentEmojisData","emojiMap","getEmojiMap","updatedRecentEmojis","emoji","get","getEmojiName","currentEmojiIndexInRecentList","findIndex","recentEmoji","currentEmojiInRecentList","updatedCurrentEmojiData","usageCount","splice","slice","currentEmojiData","sort","emojiA","emojiB","RECENT_EMOJIS","JSON","stringify","loadCustomEmojisForCustomStatusesByUserIds","getCustomStatus","makeGetCustomStatus","customEmojiEnabled","isCustomEmojiEnabled","customStatusEnabled","isCustomStatusEnabled","emojisToLoad","Set","forEach","customStatus","add","loadCustomEmojisIfNeeded","Array","from","loadCustomEmojisForRecentCustomStatuses","recentCustomStatusesValue","ReduxPreferences","CATEGORY_CUSTOM_STATUS","NAME_RECENT_CUSTOM_STATUSES","recentCustomStatuses","parse","emojis","length","systemEmojis","EmojiIndicesByAlias","customEmojisByName","selectCustomEmojisByName","nonExistentCustomEmoji","entities","nonExistentEmoji","has","loadCustomStatusEmojisForPostList","posts","Object","keys","postId","post","migrateRecentEmojis","recentEmojisFromPreference","recentEmojisFromLocalStorage","LocalStorageStore","getRecentEmojis","parsedRecentEmojisFromLocalStorage","toSetRecentEmojiData","map","emojiName","runMessageWillBePostedHooks","originalPost","hooks","plugins","components","MessageWillBePosted","hook","_hook$hook","call","runSlashCommandWillBePostedHooks","originalMessage","originalArgs","SlashCommandWillBePosted","message","args","_hook$hook2","runMessageWillBeUpdatedHooks","newPost","oldPost","MessageWillBeUpdated","_hook$hook3","runDesktopNotificationHooks","msgProps","DesktopNotificationHooks","nextArgs","sendDesktopNotification","_post$props","team_id","makeGetChannel","channel_id","channel_name","display_name","channel_display_name","channel_type","user","getCurrentUser","member","getMyChannelMember","isCrtReply","isCollapsedThreadsEnabled","root_id","forceNotification","Boolean","props","force_notification","skipNotificationReason","skipChecks","_member$notify_props","_user$notify_props4","from_webhook","status","reason","isSystemMessage","isUserAddedInChannel","isChannelMuted","userStatus","getStatusForUserId","UserStatuses","DND","OUT_OF_OFFICE","mentions","followers","channelNotifyProp","notify_props","desktop","DEFAULT","notifyLevel","_user$notify_props3","NONE","_member$notify_props2","text","isMessageAttachmentArray","attachments","appendText","toAppend","concat","attachment","pretext","title","footer","fields","field","e","console","log","allMentions","getAllUserMentionKeys","ignoreChannelMentionProp","ignore_channel_mentions","IgnoreChannelMentions","ignoreChannelMention","ON","_user$notify_props5","mentionableText","formatWithRenderer","MentionableRenderer","isExplicitlyMentioned","mention","key","includes","pattern","flags","caseSensitive","cjkrPattern","test","RegExp","escapeRegex","indexOf","activeChannel","getCurrentChannel","views","browser","focused","isThreadOpen","shouldSkipNotification","getNotificationTitle","body","getNotificationBody","desktopSoundEnabled","channelMember","_channelMember$notify","_user$notify_props","soundInChannelMemberNotifyProps","desktop_sound","soundInUserNotifyProps","DesktopSound","OFF","isDesktopSoundEnabled","soundName","_channelMember$notify2","_user$notify_props2","notificationSoundInChannelMember","desktop_notification_sound","notificationSoundInUser","DesktopNotificationSounds","BING","getDesktopNotificationSound","updatedState","silent","url","getPermalinkURL","getChannelURL","notify","hookResult","logError","String","argsAfterHooks","notifyMe","isDesktopApp","isMobileApp","ding","Utils","defaultMessage","_msgPropsPost$props","username","getNotificationUsername","config","getConfig","userFromPost","getUser","overrideUsername","ensureString","override_username","EnablePostUsernameOverride","displayUsername","getTeammateNameDisplaySetting","sender_name","notifyText","msgPropsPost","image","_attachment$image_url","fallback","image_url","strippedMarkdownNotifyText","stripMarkdown","otherFile","DesktopApp","dispatchNotification","showNotification","requireInteraction","onClick","window","focus","sendTestNotification","Client4","sendTestNotificaiton","ReactionLimitReachedModal","isAdmin","React","FormattedMessage","values","link","msg","ExternalLink","location","href","linkAdmin","Link","onExited","to","GenericModal","modalHeaderText","compassDesign","confirmButtonText","handleConfirm","handleNewPost","websocketMessageProps","myChannelMember","getMyChannelMemberSelector","myChannelMemberDoesntExist","constructor","fetchedChannelMember","rootPost","PostSelectors","isPostFromCurrentChannel","getCurrentChannelId","PostActions","should_ack","WebSocketClient","acknowledgePostedNotification","INCREASE_POST_VISIBILITY","amount","collapsedThreadsEnabled","isCRTReply","_post$metadata","_post$metadata$priori","shouldIgnorePost","markAsRead","markAsReadOnServer","isManuallyUnread","isFromWebhook","isActive","markChannelAsViewedOnServer","actionsToMarkChannelAsRead","actionsToMarkChannelAsUnread","metadata","priority","setChannelReadAndViewed","getThreadLastViewedAt","makeGetThreadLastViewedAt","thread","getThread","last_reply_at","updateThreadLastOpened","create_at","setThreadRead","completePostReceive","getPostsForIds","flagPost","getRhsState","RHSStates","FLAG","addPostToSearchResults","unflagPost","removePostFromSearchResults","addRecentEmojisForMessage","matchEmoticons","trimmedEmojis","substring","createPost","files","afterSubmit","options","_options$afterOptimis","rootPostId","keepDraft","StorageActions","afterOptimisticSubmit","createSchedulePostFromDraft","scheduledPost","connectionId","getConnectionId","channels","createSchedulePost","created","submitReaction","action","isReactionAlreadyAddedToPost","makeGetIsReactionAlreadyAddedToPost","getIsReactionAlreadyAddedToPost","Error","addReaction","toggleReaction","getUniqueEmojiNameReactionsForPost","makeGetUniqueEmojiNameReactionsForPost","_getUniqueEmojiNameRe","uniqueEmojiNames","Number","UniqueEmojiReactionLimitPerPost","some","openModal","modalId","ModalIdentifiers","REACTION_LIMIT_REACHED","dialogType","dialogProps","isCurrentUserSystemAdmin","closeModal","searchForTerm","RhsActions","results","search","reduce","acc","newResults","a","b","comparePosts","SearchTypes","RECEIVED_SEARCH_POSTS","order","index","pinPost","PIN","unpinPost","setEditingPost","arguments","undefined","refocusId","isRHS","getFilesForPost","makeGetFilesForPost","_post$file_ids","_editDraftInStore$mes","_editDraftInStore$fil","_editDraftInStore$upl","file_ids","pending_post_id","general","license","canEditPost","storageKey","StoragePrefixes","EDIT_DRAFT","TOGGLE_EDITING_POST","show","editDraftInStore","getGlobalItem","fileInfos","uploadsInProgress","setGlobalItem","unsetEditingPost","editingPostId","editingPost","markPostAsUnread","currentTeamId","threadId","ThreadActions","manuallyMarkThreadAsUnread","markMostRecentPostInChannelAsUnread","deleteAndRemovePost","getSelectedPostId","SELECT_POST","timestamp","getSelectedPostCardId","SELECT_POST_CARD","COMMENT_DRAFT","removeDraft","toggleEmbedVisibility","visible","isEmbedVisible","EMBED_VISIBLE","resetEmbedVisibility","toggleInlineImageVisibility","imageKey","isInlineImageVisible","INLINE_IMAGE_VISIBLE","resetInlineImageVisibility","emitShortcutReactToLastPostFrom","emittedFrom","EMITTED_SHORTCUT_REACT_TO_LAST_POST","payload","addVisibleUsersInCurrentChannelAndSelfToStatusPoll","currentChannelId","postsInChannel","getPostsInCurrentChannel","numberOfPostsVisibleInCurrentChannel","postVisibility","userIdsToFetchStatusFor","directShowPreferences","getDirectShowPreferences","directShowPreference","userIdsForStatus","addUserIdsForStatusFetchingPoll","loadStatusesForProfilesList","users","statusesToLoad","i","enabledUserStatuses","getIsUserStatusesConfigEnabled","getStatusesByIds","loadProfilesMissingStatus","statuses","missingStatusByIds","removeUserFromTeamAndGetStats","response","TeamActions","getChannelStats","addUserToTeamFromInvite","token","inviteId","TeamTypes","RECEIVED_MY_TEAM_MEMBER","msg_count","mention_count","addUserToTeam","addUsersToTeam","switchTeam","team","selectTeam","updateTeamsOrderForUser","teamIds","teamOrderPreferences","TEAMS_ORDER","join","getGroupMessageMembersCommonTeams","teams","HEADER_X_PAGE_LOAD_CONTEXT","shouldTrackPerformance","store","isDevModeEnabled","DiagnosticsEnabled","isTelemetryEnabled","event","isPerformanceDebuggingEnabled","getBool","CATEGORY_PERFORMANCE_DEBUGGING","NAME_DISABLE_TELEMETRY","entries","_ref","trackFeatureEvent","featureName","pageVisited","clearMarks","names","performance","mark","requestObserver","PerformanceObserver","entry","getEntries","initiatorType","requestCount","observe","buffered","requestCountAtMark","updateRequestCountAtMark","countRequestsBetween","name1","name2","getRequestCountAtMark","measurePageLoadTelemetry","checks","len","isSupported","timing","loadEventEnd","navigationStart","getEntriesByType","setTimeout","pageLoadTime","numOfRequest","maxAPIResourceSize","longestAPIResource","longestAPIResourceDuration","resourceTimingEntry","_resourceTimingEntry$","_resourceTimingEntry$2","_resourceTimingEntry$3","Math","max","encodedBodySize","responseEnd","startTime","split","duration","trackPluginInitialization","resourceEntries","Infinity","endTime","totalDuration","totalSize","plugin","filename","webapp","bundle_path","lastIndexOf","resource","find","r","endsWith","min","count","trackSelectorMetrics","_filteredSelectors$","_filteredSelectors$2","_filteredSelectors$3","_filteredSelectors$4","_filteredSelectors$5","_filteredSelectors$6","_filteredSelectors$7","_filteredSelectors$8","_filteredSelectors$9","filteredSelectors","getSortedTrackedSelectors","selector","calls","after","first","first_effectiveness","effectiveness","first_recomputations","recomputations","second","second_effectiveness","second_recomputations","third","third_effectiveness","third_recomputations","_requestCountAtMark$n","temporarilySetPageLoadContext","pageLoadContext","setHeader","removeHeader","loadProfilesAndReloadTeamMembers","page","perPage","doDispatch","doGetState","newTeamId","UserActions","Promise","all","loadTeamMembersForProfilesList","loadProfilesAndReloadChannelMembers","newChannelId","loadChannelMembersForProfilesList","loadProfilesAndTeamMembers","searchProfilesAndTeamMembers","searchProfilesAndChannelMembers","in_channel_id","loadProfilesAndTeamMembersAndChannelMembers","teamIdParam","channelIdParam","listData","profiles","reloadAllMembers","membersToLoad","pid","getTeamMember","userIdsToLoad","getTeamMembersByIds","loadTeamMembersAndChannelMembersForProfilesList","members","getChannelMembersInChannels","list","getChannelMembersByIds","Selectors","checkPreference","loadProfilesForDM","getChannelAndMyMember","CATEGORY_GROUP_CHANNEL_SHOW","loadProfilesForGM","loadProfilesForGroupChannels","groupChannels","userIdsInChannels","groupChannelsToFetch","size","getGMsForLoading","getDisplayedChannels","General","newPreferences","collapsedThreads","userIdsForLoadingCustomEmojis","channelUsersToLoad","MIN_USERS_IN_GM","messageCount","getChannelMessageCount","calculateUnreadCount","showUnread","getMyChannels","profilesToLoad","profileIds","teammateId","replace","unreadCount","autocompleteUsersInTeam","autocompleteUsers","autoResetStatus","manual","PreferencesRedux","CATEGORY_AUTO_RESET_MANUAL_STATUS","getDrafts","getLocalDrafts","makeGetDrafts","serverDrafts","getUserDrafts","draft","transformServerDraft","localDrafts","drafts","draftsMap","Map","currentDraft","set","rootId","syncedDraftsAreAllowedAndEnabled","deleteDraft","updateDraft","save","updatedValue","getTime","createAt","updateAt","setGlobalDraft","_draft$metadata","fileIds","file","newDraft","update_at","upsertDraft","setDraftsTourTipPreference","initializationState","preference","CATEGORY_DRAFTS","DRAFTS_TOUR_TIP_SHOWED","isRemote","SET_DRAFT_SOURCE","setGlobalDraftSource","_draft$metadata2","DRAFT","modalData","MODAL_OPEN","MODAL_CLOSE","selectPostWithPreviousState","previousRhsState","selectPost","updateRhsState","rhsState","UPDATE_RHS_STATE","CHANNEL_FILES","CHANNEL_INFO","CHANNEL_MEMBERS","openShowEditHistory","EDIT_HISTORY","goBack","prevState","getPreviousRhsState","RHS_GO_BACK","selectPostFromRightHandSideSearch","replyToLatestPostInChannel","getLatestInteractablePostId","getPost","updateSearchTerms","terms","UPDATE_RHS_SEARCH_TERMS","updateSearchTeam","UPDATE_RHS_SEARCH_TEAM","setRhsSize","rhsSize","newSidebarSize","width","innerWidth","SMALL_SIDEBAR_BREAKPOINT","SidebarSize","SMALL","MEDIUM_SIDEBAR_BREAKPOINT","MEDIUM","LARGE_SIDEBAR_BREAKPOINT","LARGE","XLARGE","SET_RHS_SIZE","updateSearchTermsForShortcut","currentChannelName","getCurrentChannelNameForSearchShortcut","updateSearchType","searchType","UPDATE_RHS_SEARCH_TYPE","updateSearchResultsTerms","UPDATE_RHS_SEARCH_RESULTS_TERMS","performSearch","isMentionSearch","searchTerms","viewArchivedChannels","ExperimentalViewArchivedChannels","extensionsFilters","getFilesSearchExtFilter","extensions","ext","termsWithExtensionsFilters","trim","termsArr","t","atUsername","first_name","userCurrentTimezone","getCurrentTimezone","timezoneOffset","getUtcOffsetForTimeZone","getBrowserUtcOffset","messagesPromise","searchPostsWithParams","is_or_search","include_deleted_channels","time_zone_offset","per_page","filesPromise","searchFilesWithParams","filterFilesSearchByExt","SET_FILES_FILTER_BY_EXT","showSearchResults","getSearchTerms","getSearchTeam","getSearchType","SEARCH","UPDATE_RHS_SEARCH_RESULTS_TYPE","updateSearchResultsType","showRHSPlugin","pluggableId","PLUGIN","showChannelMembers","inEditingMode","setEditChannelMembers","hideRHSPlugin","getPluggableId","closeRightHandSide","toggleRHSPlugin","showFlaggedPosts","getFlaggedPosts","RECEIVED_SEARCH_TERM","isOrSearch","showPinnedPosts","getPinnedPosts","showChannelFiles","fileData","missingPostIds","file_infos","post_id","getPostsByIds","showMentions","getCurrentUserMentionKeys","_ref2","showChannelInfo","actionsBatch","toggleMenu","TOGGLE_RHS_MENU","closeMenu","CLOSE_RHS_MENU","setRhsExpanded","expanded","SET_RHS_EXPANDED","toggleRhsExpanded","TOGGLE_RHS_EXPANDED","Mark","PostSelected","selectPostById","_getPost","fetchPost","getChannelSelector","highlightReply","HIGHLIGHT_REPLY","clearHighlightReply","CLEAR_HIGHLIGHT_REPLY","debouncedClearHighlightReply","debounce","PERMALINK_FADEOUT","selectPostAndHighlight","selectPostCard","openRHSSearch","clearSearch","openAtPrevious","previous","isChannelInfo","isChannelMembers","isPinnedPosts","isFlaggedPosts","selectedPostId","selectedPostCardId","selectPostCardFromRightHandSideSearchWithPreviousState","searchVisible","suppressRHS","SUPPRESS_RHS","unsuppressRHS","UNSUPPRESS_RHS","focusedRHS","RHS_FOCUSED","active","SET_EDIT_CHANNEL_MEMBERS","measureRhsOpened","measureAndReport","Measure","RhsLoad","startMark","canFail","lastViewedAt","Threads","CHANGED_LAST_VIEWED_AT","setSelectedThreadId","CHANGED_SELECTED_THREAD","thread_id","MANUALLY_UNREAD_THREAD","updateThreadToastStatus","UPDATE_THREAD_TOAST_STATUS","markThreadAsRead","isThreadManuallyUnread","updateThreadRead","useExternalLink","overwriteQueryParams","useSelector","telemetryId","TelemetryId","isCloud","getLicense","Cloud","useMemo","parsedUrl","URL","existingURLSearchParams","searchParams","existingQueryParamsObj","fromEntries","queryParams","utm_source","utm_medium","utm_content","uid","sid","URLSearchParams","ConfirmModal","super","_defineProperty","this","setState","checked","target","_this$props$onConfirm","_this$props","onConfirm","_this$props$onCancel","_this$props2","onCancel","shouldComponentUpdate","nextProps","nextState","render","checkbox","cancelText","cancelButton","showCheckbox","className","onChange","handleCheckboxChange","checkboxText","cancelButtonText","hideCancel","handleCancel","Modal","classNames","modalClass","dialogClassName","onHide","role","Header","closeButton","Title","componentClass","Body","checkboxInFooter","Footer","autoFocus","confirmButtonClass","_pt","isRequired","forwardRef","ref","assign","rel","children","privateChannelJoinPromptVisible","focusPost","returnTo","option","skipRedirectReplyPermalink","postInfo","getPostInfo","ErrorPageTypes","PERMALINK_NOT_FOUND","currentTeam","getCurrentTeam","has_joined_channel","prompt","PRIVATE_CHANNEL","isSystemAdmin","roles","teamMember","getMyTeamMember","scheme_admin","joinPromptResult","joinPrivateChannelPrompt","joinChannel","threadData","getPostThread","first_inaccessible_post_time","CLOUD_ARCHIVED","isCollapsed","getChannelFromRedux","channelData","myMember","myMembers","membership","getChannelMember","getUserIdFromChannelName","getMissingProfilesByIds","isComment","getTeam","currentChannel","sameTeam","selectChannel","postURL","getPostURL","focusReplyPost","RECEIVED_FOCUSED_POST","focusRootPost","langIDs","langLabels","langFiles","am","ar","be","bg","bn","br","ca","cs","da","de","el","enAU","es","et","eu","fa","fi","fil","fr","fy","gl","gu","he","hi","hr","hu","is","it","ja","ka","kkLatn","kk","km","ko","la","lo","lt","lv","mk","ml","mn","nbNO","ne","nl","pl","pr","ptBR","pt","ro","ru","si","sl","sq","sr","sv","th","tr","uk","vi","zhCN","zhTW","languages","en","getAllLanguages","includeExperimental","out","getLanguages","AvailableLocales","l","EnableExperimentalLocales","getLanguageInfo","locale","isLanguageAvailable","setCategoryCollapsed","categoryId","collapsed","patchCategory","setCategorySorting","sorting","patch","getCategory","patchedCategory","ChannelCategoryTypes","RECEIVED_CATEGORY","updateChannelCategory","forceLogoutIfNecessary","setCategoryMuted","muted","updatedCategory","updateCategory","updated","channel_ids","ChannelTypes","SET_CHANNEL_MUTED","fetchMyCategories","isWebSocket","getChannelCategories","RECEIVED_CATEGORIES","categories","RECEIVED_CATEGORY_ORDER","addChannelToInitialCategory","setOnServer","getAllCategoriesByIds","allDmCategories","CategoryTypes","DIRECT_MESSAGES","channelInCategories","dmCategories","dmCategory","insertWithoutDuplicates","channelsCategory","getCategoryInTeamByType","CHANNELS","addChannelToCategory","newIndex","setManualSorting","targetCategory","CategorySorting","Default","Manual","sourceCategory","getCategoryInTeamWithChannel","removeItem","updateChannelCategories","originalCategories","moveChannelToCategory","moveChannelsToCategory","channelIds","insertMultipleWithoutDuplicates","unmodifiedCategories","sourceCategories","categoriesArray","allCategories","moveCategory","getCategoryIdsForTeam","newOrder","updateChannelCategoryOrder","receivedCategoryOrder","createCategory","displayName","newCategory","createChannelCategory","renameCategory","deleteCategory","deleteChannelCategory","SELECT_CHANNEL","createChannel","CREATE_CHANNEL_FAILURE","CHANNEL_USER_ROLE","CHANNEL_ADMIN_ROLE","last_viewed_at","last_update_at","RECEIVED_CHANNEL","RECEIVED_MY_CHANNEL_MEMBER","loadRolesIfNeeded","CREATE_CHANNEL_SUCCESS","createDirectChannel","otherUserId","CREATE_CHANNEL_REQUEST","preferences","UserTypes","RECEIVED_PROFILES_LIST_IN_CHANNEL","markGroupChannelOpen","createGroupChannel","msg_count_root","mention_count_root","total_msg_count","storeMember","profilesInChannel","patchChannel","bindClientFunc","clientFunc","onSuccess","params","updateChannelPrivacy","privacy","convertGroupMessageToPrivateChannel","channelID","teamID","updateChannelNotifyProps","notifyProps","currentNotifyProps","RECEIVED_CHANNEL_PROPS","getChannelByNameAndTeamName","teamName","includeDeleted","CHANNELS_FAILURE","channelRequest","memberRequest","getChannelTimezones","channelTimezones","channelTimezonesRequest","fetchChannelsAndMembers","channelMembers","getMyChannelMembers","RECEIVED_CHANNELS","RECEIVED_MY_CHANNEL_MEMBERS","fetchAllMyChannelMembers","channelsMembers","hasMoreMembers","getAllChannelsMembers","fetchAllMyTeamsChannels","getAllTeamsChannels","RECEIVED_ALL_CHANNELS","getChannelMembers","CHANNELS_CHUNK_SIZE","channelMembersRequest","cm","RECEIVED_CHANNEL_MEMBERS","leaveChannel","LEAVE_CHANNEL","removeFromChannel","_unused","addToChannel","deleteChannel","channelsInTeam","getChannelsNameMapInTeam","getRedirectChannelNameForTeam","DELETE_CHANNEL_SUCCESS","unarchiveChannel","UNARCHIVED_CHANNEL_SUCCESS","updateApproximateViewTime","myPreferences","viewTimePref","CATEGORY_CHANNEL_APPROXIMATE_VIEW_TIME","parseInt","unsetActiveChannelOnServer","viewMyChannel","readMultipleChannels","markMultipleChannelsAsRead","last_viewed_at_times","getChannels","GET_CHANNELS_REQUEST","GET_CHANNELS_FAILURE","GET_CHANNELS_SUCCESS","getArchivedChannels","getAllChannelsWithCount","notAssociatedToGroup","excludeDefaultChannels","excludePolicyConstrained","GET_ALL_CHANNELS_REQUEST","getAllChannels","GET_ALL_CHANNELS_FAILURE","GET_ALL_CHANNELS_SUCCESS","RECEIVED_TOTAL_CHANNEL_COUNT","total_count","searchChannels","archived","searchArchivedChannels","searchAllChannels","opts","_opts$signal","signal","aborted","searchGroupChannels","includeFileCount","stat","RECEIVED_CHANNEL_STATS","getChannelsMemberCount","channelsMemberCount","RECEIVED_CHANNELS_MEMBER_COUNT","addChannelMember","postRootId","membersInChannel","RECEIVED_PROFILE_IN_CHANNEL","RECEIVED_CHANNEL_MEMBER","ADD_CHANNEL_MEMBER_SUCCESS","addChannelMembers","addToChannels","ids","RECEIVED_PROFILES_IN_CHANNEL","removeChannelMember","RECEIVED_PROFILE_NOT_IN_CHANNEL","REMOVE_CHANNEL_MEMBER_SUCCESS","markChannelAsRead","skipUpdateViewTime","channelTimes","viewedAt","messageCounts","DECREMENT_UNREAD_MSG_COUNT","total","amountRoot","root","DECREMENT_UNREAD_MENTION_COUNT","amountUrgent","urgent_mention_count","RECEIVED_LAST_VIEWED_AT","REMOVE_MANUALLY_UNREAD","isRoot","INCREMENT_UNREAD_MSG_COUNT","onlyMentions","MarkUnread","INCREMENT_TOTAL_MSG_COUNT","INCREMENT_UNREAD_MENTION_COUNT","loadMyChannelMemberAndRole","_result$data","favoriteChannel","FAVORITES","unfavoriteChannel","updateChannelMemberSchemeRoles","isSchemeUser","isSchemeAdmin","UPDATED_CHANNEL_MEMBER_SCHEME_ROLES","membersMinusGroupMembers","groupIDs","PROFILE_CHUNK_SIZE","channelMembersMinusGroupMembers","RECEIVED_CHANNEL_MEMBERS_MINUS_GROUP_MEMBERS","getChannelModerations","moderations","RECEIVED_CHANNEL_MODERATIONS","patchChannelModerations","getChannelMemberCountsByGroup","channelMemberCountsByGroup","memberCounts","RECEIVED_CHANNEL_MEMBER_COUNTS_BY_GROUP","fetchMissingChannels","channelIDs","loaders","missingChannelLoader","DelayedDataLoader","fetchBatch","resolve","maxBatchSize","wait","missingChannelIDs","queue","setSystemEmojis","createCustomEmoji","EmojiTypes","RECEIVED_CUSTOM_EMOJI","getCustomEmojiByName","status_code","CUSTOM_EMOJI_DOES_NOT_EXIST","getCustomEmojisByName","neededNames","filterNeededCustomEmojis","batches","batch","getCustomEmojisByNames","flat","RECEIVED_CUSTOM_EMOJIS","foundNames","getCustomEmojisInText","parseEmojiNamesFromText","getCustomEmojis","PAGE_SIZE_DEFAULT","Emoji","SORT_BY_NAME","loadUsers","loadProfilesForCustomEmojis","usersToLoad","creator_id","getProfilesByIds","deleteCustomEmoji","emojiId","DELETED_CUSTOM_EMOJI","searchCustomEmojis","searchCustomEmoji","autocompleteCustomEmojis","autocompleteCustomEmoji","dismissError","ErrorTypes","DISMISS_ERROR","getLogErrorAction","displayable","LOG_ERROR","consoleError","_getState","_getState$entities$ge","_getState$entities$ge2","sendToServer","stack","serializedError","serializeError","stringifiedSerializedError","logClientError","LogLevel","Debug","isDevMode","EnableDeveloper","shouldDisplay","clearErrors","CLEAR_ERRORS","receivedFiles","FileTypes","RECEIVED_FILES_FOR_SEARCH","getMissingFilesByPosts","postIds","curr","every","getFileInfosForPost","RECEIVED_FILES_FOR_POST","getFilePublicLink","fileId","RECEIVED_FILE_PUBLIC_LINK","getClientConfig","getClientConfigOld","setEnableLogging","setDiagnosticId","DiagnosticId","AppsPluginEnabled","AppsTypes","APPS_PLUGIN_ENABLED","APPS_PLUGIN_DISABLED","GeneralTypes","CLIENT_CONFIG_RECEIVED","getLicenseConfig","getClientLicenseOld","CLIENT_LICENSE_RECEIVED","getCustomProfileAttributeFields","CUSTOM_PROFILE_ATTRIBUTES_RECEIVED","setServerVersion","serverVersion","RECEIVED_SERVER_VERSION","setUrl","setFirstAdminVisitMarketplaceStatus","FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED","getFirstAdminSetupComplete","FIRST_ADMIN_COMPLETE_SETUP_RECEIVED","linkGroupSyncable","groupID","syncableID","syncableType","dispatches","SyncableType","Team","GroupTypes","RECEIVED_GROUP_ASSOCIATED_TO_TEAM","groups","LINKED_GROUP_TEAM","Channel","LINKED_GROUP_CHANNEL","warn","unlinkGroupSyncable","group_id","syncable_id","UNLINKED_GROUP_TEAM","RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM","UNLINKED_GROUP_CHANNEL","getGroupSyncables","RECEIVED_GROUP_TEAMS","RECEIVED_GROUP_CHANNELS","patchGroupSyncable","PATCHED_GROUP_TEAM","PATCHED_GROUP_CHANNEL","getGroup","includeMemberCount","RECEIVED_GROUP","getGroups","RECEIVED_GROUPS","getGroupsNotAssociatedToTeam","q","source","GroupSource","Ldap","getGroupsNotAssociatedToChannel","filterParentTeamPermitted","getAllGroupsAssociatedToTeam","filterAllowReference","param1","param2","param3","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM","getAllGroupsAssociatedToChannelsInTeam","groupsByChannelId","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNELS_IN_TEAM","getAllGroupsAssociatedToChannel","RECEIVED_ALL_GROUPS_ASSOCIATED_TO_CHANNEL","getGroupsAssociatedToTeam","param4","param5","totalGroupCount","total_group_count","RECEIVED_GROUPS_ASSOCIATED_TO_TEAM","getGroupsAssociatedToChannel","RECEIVED_GROUPS_ASSOCIATED_TO_CHANNEL","patchGroup","PATCHED_GROUP","getGroupsByUserIdPaginated","RECEIVED_MY_GROUPS","getGroupStats","RECEIVED_GROUP_STATS","createGroupWithUserIds","group","CREATE_GROUP_SUCCESS","addUsersToGroup","groupId","RECEIVED_PROFILES_FOR_GROUP","removeUsersFromGroup","RECEIVED_PROFILES_LIST_TO_REMOVE_FROM_GROUP","searchGroups","filter_has_member","include_channel_member_count","RECEIVED_CHANNEL_MEMBER_COUNTS_FROM_GROUPS_LIST","archiveGroup","ARCHIVED_GROUP","restoreGroup","RESTORED_GROUP","createGroupTeamsAndChannels","userID","HTTP_UNAUTHORIZED","setToken","LOGOUT_SUCCESS","dispatcher","requestSuccess","requestData","onRequest","onFailure","requestFailure","isArray","s","func","immediate","cb","timeout","_len","_key","callNow","clearTimeout","runLater","Reflect","apply","getServerLimits","_response$data$active","_response","_response$data","_response$data$maxUse","_response2","_response2$data","getCurrentUserRoles","activeUserCount","maxUsersLimit","LimitsTypes","RECIEVED_APP_LIMITS","receivedPost","crtEnabled","PostTypes","RECEIVED_POST","features","receivedNewPost","RECEIVED_NEW_POST","receivedPosts","RECEIVED_POSTS","receivedPostsAfter","afterPostId","recent","RECEIVED_POSTS_AFTER","receivedPostsBefore","beforePostId","oldest","RECEIVED_POSTS_BEFORE","receivedPostsSince","RECEIVED_POSTS_SINCE","receivedPostsInChannel","RECEIVED_POSTS_IN_CHANNEL","receivedPostsInThread","RECEIVED_POSTS_IN_THREAD","postDeleted","POST_DELETED","postPinnedChanged","isPinned","POST_PINNED_CHANGED","GET_POSTS_FAILURE","batchFetchStatusesProfilesGroupsFromPosts","pendingPostId","pending","reply_count","INCREMENT_FILE_COUNT","CREATE_POST_SUCCESS","failed","CREATE_POST_FAILURE","removePost","deletePost","delPost","decrementThreadCounts","Posts","POST_TYPES","COMBINED_USER_ACTIVITY","system_post_ids","systemPostId","systemPost","editPost","patchPost","EDIT_POST_REQUEST","EDIT_POST_SUCCESS","EDIT_POST_FAILURE","setUnreadPost","unreadChan","isCombinedUserActivityPost","ADD_MANUALLY_UNREAD","delta","deltaRoot","msgCount","mentionCount","msgCountRoot","mentionCountRoot","urgentMentionCount","deltaMsgs","deltaMsgsRoot","getUnreadPostData","POST_UNREAD_SUCCESS","INCREMENT_PINNED_POST_COUNT","decrementPinnedPostCount","DECREMENT_PINNED_POST_COUNT","reaction","RECEIVED_REACTION","removeReaction","REACTION_DELETED","emoji_name","removedReaction","getCustomEmojiForReaction","CATEGORY_FLAGGED_POST","getPaginatedPostThread","prevList","prev_post_id","next_post_id","has_next","nextPostId","nextPostPointer","fromCreateAt","fromPost","fetchThreads","getNewestPostThread","getPostsForThread","GET_POST_THREAD_REQUEST","savedPosts","latestReply","direction","GET_POST_THREAD_FAILURE","getPosts","POST_CHUNK_SIZE","collapsedThreadsExtended","getPostsUnread","shouldLoadRecent","getUnreadScrollPositionPreference","UNREAD_SCROLL_POSITION_START_FROM_NEWEST","recentPosts","DEFAULT_LIMIT_BEFORE","DEFAULT_LIMIT_AFTER","getPostsSince","since","getPostsBefore","getPostsAfter","getPostsAround","before","getPostThreads","getPostThreadPromises","rootPostIds","getMentionsAndStatusesForPosts","postsArrayOrMap","postsArray","postsDictionary","embeds","embed","_embed$data$post","_embed$data$post2","acknowledgements","ack","acknowledged_at","promises","usernamesAndGroupsToLoad","getNeededAtMentionedUsernamesAndGroups","getProfilesPromise","getProfilesByUsernames","loadedProfiles","p","groupParams","filter_allow_reference","include_member_count","getPostEditHistory","RECEIVED_POST_HISTORY","usersByUsername","groupsByName","findNeededUsernamesAndGroups","getUsersByUsername","getAllGroupsByName","match","exec","SPECIAL_MENTIONS","POST_REMOVED","postRemoved","is_pinned","moveThread","MOVE_POST_FAILURE","MOVE_POST_SUCCESS","deletePreferences","addPostReminder","doPostActionWithCookie","actionId","actionCookie","selectedOption","trigger_id","IntegrationTypes","RECEIVED_DIALOG_TRIGGER_ID","addMessageIntoHistory","ADD_MESSAGE_INTO_HISTORY","resetReloadPostsInChannel","RESET_POSTS_IN_CHANNEL","acknowledgePost","CREATE_ACK_POST_SUCCESS","unacknowledgePost","DELETE_ACK_POST_SUCCESS","restorePostVersion","restoreVersionId","getMyPreferencesSelector","currentPreferences","pref","getPreferenceKey","DELETED_PREFERENCES","getMyPreferences","RECEIVED_ALL_PREFERENCES","getUserPreferences","RECEIVED_USER_ALL_PREFERENCES","setCustomStatusInitialisationState","NAME_CUSTOM_STATUS_TUTORIAL_STATE","actionType","RECEIVED_USER_PREFERENCES","_unused2","saveTheme","theme","CATEGORY_THEME","deleteTeamSpecificThemes","themePreferences","getThemePreferences","toDelete","editRole","patchRole","RoleTypes","EDIT_ROLE_REQUEST","RECEIVED_ROLE","EDIT_ROLE_SUCCESS","EDIT_ROLE_FAILURE","setPendingRoles","SET_PENDING_ROLES","pendingRoles","loadedRoles","getRoles","newRoles","newRolesArray","getRolesRequests","MAX_GET_ROLES_BY_NAMES","chunk","rolesNames","getRolesByNames","ROLES_BY_NAMES_REQUEST","RECEIVED_ROLES","ROLES_BY_NAMES_SUCCESS","ROLES_BY_NAMES_FAILURE","val","schedulePost","createdPost","createScheduledPost","ScheduledPostTypes","SINGLE_SCHEDULED_POST_RECEIVED","fetchTeamScheduledPosts","includeDirectChannels","prune","scheduledPosts","getScheduledPosts","SCHEDULED_POSTS_RECEIVED","scheduledPostsByTeamId","updateScheduledPost","updatedScheduledPost","SCHEDULED_POST_UPDATED","deleteScheduledPost","scheduledPostId","deletedScheduledPost","SCHEDULED_POST_DELETED","getMissingChannelsFromPosts","isGettingMore","SEARCH_POSTS_REQUEST","arr","isEnd","SEARCH_POSTS_SUCCESS","getMorePostsForSearch","current","newParams","REMOVE_SEARCH_POSTS","REMOVE_SEARCH_FILES","SEARCH_FILES_REQUEST","getMissingChannelsFromFiles","RECEIVED_SEARCH_FILES","isFilesEnd","SEARCH_FILES_SUCCESS","getMoreFilesForSearch","SEARCH_FLAGGED_POSTS_REQUEST","SEARCH_FLAGGED_POSTS_FAILURE","RECEIVED_SEARCH_FLAGGED_POSTS","SEARCH_FLAGGED_POSTS_SUCCESS","SEARCH_PINNED_POSTS_REQUEST","SEARCH_PINNED_POSTS_FAILURE","RECEIVED_SEARCH_PINNED_POSTS","pinned","SEARCH_PINNED_POSTS_SUCCESS","pollingStatusLoader","BackgroundDataLoader","maxUserIdsPerStatusesRequest","pollingInterval","getUsersStatusAndProfileFetchingPollInterval","fetchBatchNow","startIntervalIfNeeded","addUserIdsForProfileFetchingPoll","userIdsForProfile","pollingProfileLoader","maxUserIdsPerProfilesRequest","cleanUpStatusAndProfileFetchingPoll","_ref3","_loaders$pollingStatu","_loaders$pollingProfi","stopInterval","mentionedUsernamesAndGroupsInPosts","currentUser","isUserStatusesConfigEnabled","getUsers","userStatuses","getUserStatuses","usernamesAndGroups","_permalinkPostPreview","_permalinkPostPreview2","permalinkPostPreviewMetaData","mentioned","atMention","userProfiles","mentionedUsernames","mentionedGroups","groupSearchParam","getProfilesAndStatusesForMembers","requests","SELECT_TEAM","getMyTeams","RECEIVED_TEAMS_LIST","getMyTeamUnreads","RECEIVED_MY_TEAM_UNREADS","RECEIVED_TEAM","getTeamByName","getTeams","TEAMS_CHUNK_SIZE","includeTotalCount","GET_TEAMS_REQUEST","GET_TEAMS_FAILURE","GET_TEAMS_SUCCESS","RECEIVED_TOTAL_TEAM_COUNT","searchTeams","createTeam","TEAM_ADMIN_ROLE","TEAM_USER_ROLE","CREATED_TEAM","deleteTeam","EventEmitter","emit","RECEIVED_TEAM_DELETED","unarchiveTeam","RECEIVED_TEAM_UNARCHIVED","updateTeam","UPDATED_TEAM","patchTeam","PATCHED_TEAM","regenerateTeamInviteId","REGENERATED_TEAM_INVITE_ID","getMyTeamMembers","getMyTeamMembersFunc","RECEIVED_MY_TEAM_MEMBERS","teamMembers","getTeamMembers","GET_TEAM_MEMBERS_REQUEST","RECEIVED_MEMBERS_IN_TEAM","GET_TEAM_MEMBERS_SUCCESS","GET_TEAM_MEMBERS_FAILURE","membersRequest","getTeamsForUser","getTeamMembersForUser","RECEIVED_TEAM_MEMBERS","getTeamStats","RECEIVED_TEAM_STATS","addToTeamFromInvite","ADD_TO_TEAM_FROM_INVITE_REQUEST","ADD_TO_TEAM_FROM_INVITE_SUCCESS","ADD_TO_TEAM_FROM_INVITE_FAILURE","addToTeam","RECEIVED_PROFILE_IN_TEAM","RECEIVED_MEMBER_IN_TEAM","addUsersToTeamGracefully","addedMembers","m","RECEIVED_PROFILES_LIST_IN_TEAM","removeUserFromTeam","removeFromTeam","RECEIVED_PROFILE_NOT_IN_TEAM","REMOVE_MEMBER_FROM_TEAM","sendEmailInvitesToTeamGracefully","emails","sendEmailGuestInvitesToChannelsGracefully","sendEmailInvitesToTeamAndChannelsGracefully","getTeamInviteInfo","TEAM_INVITE_INFO_REQUEST","TEAM_INVITE_INFO_SUCCESS","TEAM_INVITE_INFO_FAILURE","checkIfTeamExists","exists","setTeamIcon","imageData","removeTeamIcon","updateTeamScheme","schemeId","UPDATED_TEAM_SCHEME","updateTeamMemberSchemeRoles","UPDATED_TEAM_MEMBER_SCHEME_ROLES","invalidateAllEmailInvites","teamMembersMinusGroupMembers","RECEIVED_TEAM_MEMBERS_MINUS_GROUP_MEMBERS","getInProductNotices","client","clientVersion","updateNoticesAsViewed","noticeIds","ThreadConstants","THREADS_CHUNK_SIZE","unread","totalsOnly","threadsOnly","extended","getUserThreads","getThreadsForCurrentTeam","_userThreadList$threa","_userThreadList$threa2","_userThreadList$threa3","THREADS_PAGE_SIZE","userThreadList","threads","participants","uniq","_ref4","ThreadTypes","RECEIVED_UNREAD_THREADS","RECEIVED_THREADS","is_following","getThreadCounts","counts","total_unread_threads","total_unread_mentions","total_unread_urgent_mentions","RECEIVED_THREAD_COUNTS","getCountsAndThreadsSince","_userThreadList$threa4","_userThreadList$threa5","_userThreadList$threa6","_ref5","_ref6","_ref7","handleThreadArrived","previousUnreadReplies","previousUnreadMentions","RECEIVED_PROFILES_LIST","RECEIVED_THREAD","oldThreadData","_oldThreadData$unread","_oldThreadData$unread2","handleReadChanged","prevUnreadMentions","unread_mentions","newUnreadMentions","prevUnreadReplies","unread_replies","newUnreadReplies","getUserThread","handleAllMarkedRead","ALL_TEAM_THREADS_READ","markAllThreadsInTeamRead","updateThreadsReadForUser","markThreadAsUnread","markThreadAsUnreadForUser","markLastPostInThreadAsUnread","makeGetPostsForThread","getThreadSelector","then","_ref8","updateThreadReadForUser","_ref9","READ_CHANGED_THREAD","channelType","isUrgent","is_urgent","handleFollowChanged","following","FOLLOW_CHANGED_THREAD","setThreadFollow","newState","updateThreadFollowForUser","handleAllThreadsInChannelMarkedRead","threadsInChannel","getThreadsInChannel","DECREMENT_THREAD_COUNTS","replies","missingProfilesWait","generateMfaSecret","createUser","redirect","RECEIVED_PROFILES","loadMe","getServerVersion","getMe","isCollapsedThreads","logout","LOGOUT_REQUEST","getTotalUsersStats","RECEIVED_USER_STATS","getFilteredUsersStats","updateGlobalState","stats","RECEIVED_FILTERED_USER_STATS","getProfiles","missingStatusLoader","missingProfileLoader","missingIds","selectUser","queueAndWait","getMissingProfilesByUsernames","usernames","userByUsernameLoader","missingUsernames","getProfilesInTeam","getProfilesNotInTeam","groupConstrained","receivedProfilesListActionType","RECEIVED_PROFILES_LIST_NOT_IN_TEAM_AND_REPLACE","RECEIVED_PROFILES_LIST_NOT_IN_TEAM","ProfilesInChannelSortBy","getProfilesInChannel","batchGetProfilesInChannel","profilesInChannelLoader","getProfilesInGroupChannels","channelsIds","channelProfiles","MAX_GROUP_CHANNELS_FOR_PROFILES","hasOwn","getProfilesNotInChannel","RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL_AND_REPLACE","RECEIVED_PROFILES_LIST_NOT_IN_CHANNEL","getMeFunc","RECEIVED_ME","me","updateMyTermsOfServiceStatus","termsOfServiceId","accepted","RECEIVED_TERMS_OF_SERVICE_STATUS","terms_of_service_create_at","terms_of_service_id","getProfilesInGroup","RECEIVED_PROFILES_LIST_IN_GROUP","getProfilesNotInGroup","RECEIVED_PROFILES_LIST_NOT_IN_GROUP","getTermsOfService","promoteGuestToUser","demoteUserToGuest","createTermsOfService","RECEIVED_PROFILE","getUserByUsername","getUserByEmail","email","receivedStatuses","dndEndTimes","isManualStatuses","lastActivity","receivedStatus","_receivedStatus$statu","_receivedStatus$dnd_e","_receivedStatus$manua","_receivedStatus$last_","dnd_end_time","last_activity_at","RECEIVED_STATUSES","RECEIVED_DND_END_TIMES","RECEIVED_STATUSES_IS_MANUAL","RECEIVED_LAST_ACTIVITIES","setStatus","_recievedStatus$dnd_e","_recievedStatus","_recievedStatus$manua","_recievedStatus2","_recievedStatus$last_","_recievedStatus3","recievedStatus","updateStatus","updatedStatus","isManualStatus","setCustomStatus","updateCustomStatus","unsetCustomStatus","removeRecentCustomStatus","getSessions","RECEIVED_SESSIONS","revokeSession","sessionId","RECEIVED_REVOKED_SESSION","revokeAllSessionsForUser","isCurrentUser","REVOKE_ALL_USER_SESSIONS_SUCCESS","revokeSessionsForAllUsers","REVOKE_SESSIONS_FOR_ALL_USERS_SUCCESS","getUserAudits","AUDITS_CHUNK_SIZE","RECEIVED_AUDITS","AUTOCOMPLETE_USERS_REQUEST","AUTOCOMPLETE_USERS_FAILURE","out_of_channel","AUTOCOMPLETE_USERS_SUCCESS","searchProfiles","searchUsers","not_in_channel_id","not_in_team_id","in_group_id","not_in_group_id","updateMe","UPDATE_ME_REQUEST","patchMe","UPDATE_ME_FAILURE","UPDATE_ME_SUCCESS","saveCustomProfileAttribute","attributeID","attributeValue","updateCustomProfileAttributeValues","patchUser","updateUserRoles","profile","updateUserMfa","activate","code","mfa_active","updateUserPassword","currentPassword","newPassword","last_password_update","updateUserActive","deleteAt","verifyUserEmail","sendVerificationEmail","resetUserPassword","sendPasswordResetEmail","setDefaultProfileImage","last_picture_update","uploadProfileImage","switchEmailToOAuth","service","password","mfaCode","switchOAuthToEmail","currentService","switchEmailToLdap","emailPassword","ldapId","ldapPassword","switchLdapToEmail","createUserAccessToken","description","AdminTypes","RECEIVED_USER_ACCESS_TOKEN","RECEIVED_MY_USER_ACCESS_TOKEN","getUserAccessTokensForUser","RECEIVED_USER_ACCESS_TOKENS_FOR_USER","RECEIVED_MY_USER_ACCESS_TOKENS","revokeUserAccessToken","tokenId","REVOKED_USER_ACCESS_TOKEN","disableUserAccessToken","DISABLED_USER_ACCESS_TOKEN","enableUserAccessToken","ENABLED_USER_ACCESS_TOKEN","getKnownUsers","clearUserAccessTokens","CLEAR_MY_USER_ACCESS_TOKENS","checkForModifiedUsers","lastDisconnectAt","websocket","isMinimumServerVersion","ClientClass4","_getConfig","EnableCustomEmoji","createSelector","customEmoji","getCustomEmojiIdsSortedByName","createIdsSelector","localeCompare","getAllFiles","getFile","_state$entities$files","getFilesIdsForPost","fileIdsByPostId","filePublicLink","getCurrentUserLocale","allFiles","fileIdsForPost","sortFileInfos","makeGetFilesForEditHistory","editHistoryPost","userLocal","_editHistoryPost$meta","getSearchFilesResults","filesFromSearch","fileResults","emptyList","emptySyncables","getAllGroups","getMyGroupIds","myGroups","getGroupMemberCount","getAllGroupStats","total_member_count","syncables","getGroupTeams","getGroupChannels","getAllCustomGroups","allow_reference","Custom","getGroupsAssociatedToTeamForReference","getTeamGroupIDSet","allGroups","teamGroupIDSet","getAssociatedGroupsForReference","_getTeam","group_constrained","_","_getChannel","getGroupsAssociatedToChannelForReference","getAllAssociatedGroupsForReference","teamConstrained","channelConstrained","groupsFromTeam","groupsFromChannel","customGroups","groupSet","item","getAssociatedGroupsByName","getAssociatedGroupsForReferenceByMention","searchAssociatedGroupsForReferenceLocal","filterGroupsMatchingTerm","teamGroupIDs","_state$entities$teams","groupsAssociatedToTeam","teamIDs","getChannelGroupIDSet","channelGroupIDs","_state$entities$chann","groupsAssociatedToChannel","getMyGroups","myGroupIds","sortGroups","groupsSet","groupIds","getGroupInfoForIds","channelGroupIDSet","teamGroups","gids","makeGetAllAssociatedGroupsForReference","includeArchived","getAllGroupsForReferenceByName","makeGetMyAllowReferencedGroups","getMyGroupsAssociatedToChannelForReference","getMyAllowReferencedGroups","getMyGroupMentionKeys","getMyGroupMentionKeysForChannel","searchGetAllAssociatedGroupsForReference","searchAllowReferencedGroups","searchGetMyAllowReferencedGroups","searchMyAllowReferencedGroups","isMyGroup","myGroupIDs","myGroupId","getArchivedGroups","searchArchivedGroups","getCurrentSearchForCurrentTeam","userMentionKeys","groupMentionKeys","getTimezoneForUserProfile","timezone","useAutomaticTimezone","automaticTimezone","manualTimezone","getCurrentTimezoneFull","timezoneFull","getUserCurrentTimezone","generateCurrentTimezoneLabel","getTimezoneLabel","timezones","getCurrentTimezoneLabel","DataLoader","identifiersToLoad","identifier","pendingIdentifiers","prepareBatch","nextBatch","delete","clear","identifiers","moreToLoad","isBusy","ms","intervalId","setInterval","clearInterval","startTimeoutIfNeeded","timeoutCallbacks","timeoutId","resolveCompletedCallbacks","callback","isSystemEmoji","getEmojiImageUrl","getSystemEmojiImageUrl","_emoji$unified$toLowe","_emoji$unified","unified","toLowerCase","short_names","getEmojiRoute","short_name","customEmojis","listeners","addListener","label","on","removeListener","listener","idx","off","getFileUrl","getFileRoute","getFileDownloadUrl","getFileThumbnailUrl","getFilePreviewUrl","getFileMiniPreviewUrl","fileInfo","mini_preview","mime_type","DEFAULT_LOCALE","numeric","trimmedTerm","startsWith","groupSuggestions","groupnameSuggestions","getSuggestionsSplitByMultiple","AUTOCOMPLETE_SPLIT_CHARACTERS","suggestions","getSuggestionsSplitBy","suggestion","showDraftsPulsatingDotAndTourTip","onboardingTourTipsEnabled","getIsMobileView","draftsTourTipShowed","makeGetDraftsByPrefix","prefix","_state$storage","storage","flatMap","_item$value$fileInfos","info","getDraftInfoFromKey","getChannelDrafts","getRHSDrafts","excludeInactive","getMyActiveChannelIds","channelDrafts","rhsDrafts","myChannels","makeGetDraftsCount","makeGetDraft","DEFAULT_DRAFT","freeze","prefixStorageKey","suffixStorageKey","retrievedDraftParam","_retrievedDraft$metad","retrievedDraft","isDraftWithRequiredValues","isDraftMismatched","EmojiMap","getShortcutReactToLastPostEmittedFrom","shortcutReactToLastPostEmittedFrom","getUserSkinTone","userSkinTone","usageCounts","_EmojiIndicesByAlias$","_usageCounts$get","emojiIndex","systemEmoji","Emojis","normalizedName","convertEmojiSkinTone","currentCount","normalizedData","normalizeRecentEmojisData","recentEmojisData","getOneClickReactionEmojis","isDefined","reverse","getCurrentLocale","_window$location","localeFromParam","defaultLocale","I18n","DefaultClientLocale","currentLocale","getTranslations","translations","i18n","getIsPostBeingEdited","getIsPostBeingEditedInRHS","getEditingPostDetailsAndPost","previewCollapsed","arePreviewsCollapsed","imageCollapsed","makeCanWrangler","moveThreadsEnabled","_state","_channelType","replyCount","userRoles","enabled","_allowedEmailDomains","WranglerPermittedWranglerRoles","WranglerAllowedEmailDomain","WranglerMoveThreadMaxCount","WranglerMoveThreadFromPrivateChannelEnable","WranglerMoveThreadFromDirectMessageChannelEnable","WranglerMoveThreadFromGroupMessageChannelEnable","permittedUsers","allowedEmailDomains","getBoolPreference","CATEGORY_DISPLAY_SETTINGS","COLLAPSE_DISPLAY","COLLAPSE_DISPLAY_DEFAULT","isSendOnCtrlEnter","CATEGORY_ADVANCED_SETTINGS","rhs","getRhsSize","getSelectedPostFocussedAt","selectedPostFocussedAt","getHighlightedPostId","highlightedPostId","filesSearchExtFilter","getSelectedPostCard","getSelectedChannelId","selectedChannelId","getSelectedChannel","getActiveRhsComponent","RightHandSidebarComponent","c","getSelectedPost","selectedPost","selectedPostChannelId","FAKE_PARENT_DELETED","localizeMessage","previousRhsStates","_state$views$rhs$sear","searchTeam","getSearchResultsTerms","searchResultsTerms","getSearchResultsType","searchResultsType","getIsSearchingTerm","isSearchingTerm","getIsSearchingFlaggedPost","isSearchingFlaggedPost","getIsSearchingPinnedPost","isSearchingPinnedPost","getIsSearchGettingMore","isSearchGettingMore","getPostDraft","prefixId","suffixId","defaultDraft","makeGetGlobalItem","getIsRhsOpen","isSidebarOpen","rhsSuppressed","getIsRhsMenuOpen","isMenuOpen","getIsRhsExpanded","isSidebarExpanded","getIsEditingMembers","editChannelMembers","defaultValue","getItemFromStorage","_storage$name$value","_storage$name","getTeamRelativeUrl","notificationURL","redirectChannel","getCurrentRelativeTeamUrl","windowSize","WindowSizes","MOBILE_VIEW","isUnreadFilterEnabled","channelSidebar","unreadFilterEnabled","shouldShowUnreadsCategory","getCategoriesForCurrentTeam","getCategoriesForTeam","makeGetCategoriesForTeam","memoizeResult","getAutoSortedCategoryIds","Alphabetical","Recency","getChannelsByCategoryForCurrentTeam","getChannelsByCategory","makeGetChannelsByCategory","getUnreadChannelIdsSet","lastUnreadChannel","unreadChannelIds","getChannelsInCategoryOrder","channelsByCategory","showUnreadsCategory","isUnread","getUnreadChannels","getUnsortedUnreadChannels","allChannels","unreadChannels","sortChannels","getMyChannelMemberships","sortUnreadChannels","memoizedConcatChannels","channelsA","channelsB","channelsInCategoryOrder","makeGetFilteredChannelIdsForCategory","getChannelIdsForCategory","makeGetChannelIdsForCategory","unreadChannelIdsSet","filtered","makeGetUnreadIdsForCategory","getDraggingState","draggingState","isChannelSelected","multiSelectedChannelIds","userProps","isCustomStatusExpired","CustomStatusDuration","DONT_CLEAR","expiryTime","moment","expires_at","getCurrentMomentForTimezone","isSameOrAfter","getRecentCustomStatuses","EnableCustomUserStatuses","showCustomStatusPulsatingDotAndPostHeader","hasUserCreationMoreThanSevenDays","isDateWithinDaysRange","TimeInformation","FUTURE","customStatusTutorialState","CUSTOM_STATUS_MODAL_VIEWED","showStatusDropdownPulsatingDot","showPostHeaderUpdateStatusButton","getSelectedThreadIdInTeam","selectedThreadIdInTeam","getSelectedThreadIdInCurrentTeam","_selectedThreadIdInTe","getThreads","_threads$threadId","manuallyUnread","makePrepareReplyIdsForThreadViewer","filterRepliesAndAddSeparators","makeGetPostsForIds","showDate","lastDate","addedNewMessagesIndicator","postDate","currentOffset","getTimezoneOffset","zone","utcOffset","setTime","toDateString","DATE_LINE","START_OF_NEW_MESSAGES","makeFilterRepliesAndAddSeparators","combineUserActivityPosts","makeCombineUserActivityPosts","getThreadToastStatus","toastStatus","getPreviousTeamIdKey","getPreviousChannelNameKey","getPreviousViewedTypeKey","getPenultimateViewedTypeKey","getPenultimateChannelNameKey","teamIdJoinedOnLoadKey","wasNotifiedOfLogInKey","getPathScopedKey","path","getItem","basePath","getBasePath","localStorage","setItem","getPreviousChannelName","getPreviousViewedType","_this$getItem","PreviousViewedTypes","setPreviousChannelName","setPreviousViewedType","getPenultimateViewedType","_this$getItem2","setPenultimateViewedType","getPenultimateChannelName","setPenultimateChannelName","removePreviousChannelName","removePreviousChannelType","getStore","removePreviousChannel","removePenultimateChannelName","removePenultimateViewedType","getPreviousTeamId","setPreviousTeamId","getRecentEmojisKey","getTeamIdJoinedOnLoad","setTeamIdJoinedOnLoad","setWasLoggedIn","wasLoggedIn","getWasLoggedIn","setWasNotifiedOfLogIn","wasNotified","getWasNotifiedOfLogIn","JoinPrivateChannelModal","onJoin","setShow","handleHide","handleJoin","handleExited","propTypes","canManageMembers","haveIChannelPermission","Permissions","MANAGE_PRIVATE_CHANNEL_MEMBERS","OPEN_CHANNEL","MANAGE_PUBLIC_CHANNEL_MEMBERS","findNextUnreadChannelId","curChannelId","allChannelIds","curIndex","isArchivedChannel","channelDisplayName","handleOnCancel","JOIN_CHANNEL_PROMPT","LEAVE_TEAM","redirectChannelName","EmojiIndicesByUnicode","CategoryNames","EmojiIndicesByCategoryAndSkin","EmojiIndicesByCategoryNoSkin","genSkinnedCategories","cat","indices","skinCat","memoize","EmojiIndicesByCategory","customEmojisArray","hasSystemEmoji","hasUnicode","codepoint","getUnicode","Symbol","iterator","systemIndex","customIndex","next","done","defaultRule","aName","bName","thumbsDownRule","otherName","thumbsUpRule","customRules","thumbsdown","thumbsup","searchedName","compareEmojis","aPrefix","wrapEmojis","nodes","lastIndex","matchAll","emojiRegex","newSkinTone","_newEmoji","newEmojiId","skins","skin_variations","getSkin","variation","skinVariation","replaceAll","newEmoji","_emoji$skins$","_emoji$skins","trimmedEmojiName","emojiMatchesSkin","emojiSkin","emoticonPatterns","slightly_smiling_face","wink","open_mouth","scream","smirk","smile","stuck_out_tongue_closed_eyes","stuck_out_tongue","rage","slightly_frowning_face","cry","confused","confounded","neutral_face","flushed","mask","heart","broken_heart","EMOJI_PATTERN","markdownCleanedText","PlainRenderer","matches","handleEmoticons","tokens","output","replaceEmoticonWithToken","fullMatch","matchText","renderEmoji","originalText","cmdOrCtrlPressed","allowAlt","isMac","UserAgent","metaKey","ctrlKey","altKey","isKeyPressed","keyCode","KeyCodes","COMPOSING","toUpperCase","removeMarkdown","RemoveMarkdown","format","Renderer","renderer","markdownOptions","sanitize","gfm","tables","mangle","inlinelatex","EnableLatex","EnableInlineLatex","marked","convertEntityToCharacter","blockquote","heading","listitem","paragraph","table","header","tablerow","content","tablecell","strong","em","codespan","del","TextFormatting","formattingOptions","bind","language","usedLanguage","searchedContent","searchPatterns","searched","singleline","dimensions","input","height","parseImageDimensions","src","PostUtils","proxyImages","xhtml","level","isUrl","outHref","unsafeLinks","mightTriggerExternalRequest","siteURL","scheme","getScheme","autolinkedUrlSchemes","isUrlSafe","unescapeHtmlEntities","shouldOpenInNewTab","managedResourcePaths","prototype","ordered","start","taskListReg","isTaskList","txt","html","n","charAt","fromCharCode","CRACKLE","DOWN","HELLO","RIPPLE","UPSTAIRS","notificationSounds","bing","crackle","down","hello","ripple","upstairs","notificationSoundKeys","optionsOfMessageNotificationSoundsSelect","getValueOfNotificationSoundsSelect","soundOption","callsNotificationSounds","calls_dynamic","calls_calm","calls_urgent","calls_cheerful","callNotificationSoundKeys","optionsOfIncomingCallSoundsSelect","getValueOfIncomingCallSoundsSelect","canDing","hasSoundOptions","tryNotificationSound","_notificationSounds$g","Audio","play","currentRing","ring","stopRing","loopNotificationRing","addEventListener","pause","remove","currentTimer","currentTryRing","tryNotificationRing","stopTryNotificationRing","_callsNotificationSou","audio","loop","convertDesktopSoundNotifyPropFromUserToDesktop","userNotifyDesktopSound","requestedNotificationPermission","Notification","permission","icon","icon50","iconWS","isNotificationAPISupported","requestPermission","notification","tag","onclick","onerror","close","getNotificationPermission","requestNotificationPermission","NotificationPermissionNeverGranted","NotificationPermissionDenied","endMark","labels","end","detail","report","measure","CHANNEL_SWITCH_IGNORE_ENTER_THRESHOLD_MS","SYSTEM_MESSAGE_PREFIX","fromAutoResponder","AUTO_RESPONDER","isFromBot","from_bot","isPostOwner","isEdited","edit_at","getImageSrc","hasImageProxy","imageAPI","getBaseRoute","encodeURIComponent","canDeletePost","DELETE_POST","DELETE_OTHERS_POSTS","_channel$team_id","_channel$id","canEditPostRedux","shouldShowDotMenu","shouldShowActionsMenu","PluginsEnabled","containsAtChannel","mentionsRegex","checkAllMentions","SPECIAL_MENTIONS_REGEX","ALL_MEMBERS_MENTIONS_REGEX","specialMentionsInText","here","ALL_MENTION_REGEX","CHANNEL_MENTION_REGEX","HERE_MENTION_REGEX","groupsMentionedInText","allAtMentions","ret","shouldFocusMainTextbox","activeElement","tagName","Keyboard","V","SPACE","isWithinCodeBlock","caretPosition","REGEX_CODE_BLOCK_OPTIONAL_LANGUAGE_TAG","sendOnCtrlEnter","ctrlOrMetaKeyPressed","isSendMessageOnCtrlEnter","inCodeBlock","allowSending","splitMessage","line","lastPart","withClosedCodeBlock","canAutomaticallyCloseBackticks","postMessageOnKeyPress","sendMessageOnCtrlEnter","sendCodeBlockOnCtrlEnter","lastChannelSwitchAt","isMobile","ENTER","shiftKey","ignoreKeyPress","isServerError","isErrorInvalidSlashCommand","isIdNotPost","PostListUtils","PostListRowListIds","getOldestPostId","combinedIds","getPreviousPostId","startIndex","itemId","getLatestPostId","makeGetMentionsFromMessage","mentionsArray","MENTIONS_REGEX","getMentionDetails","usePostAriaLabel","intl","useIntl","getDisplayName","makeGetDisplayName","getReactionsForPost","makeGetReactionsForPost","getMentionsFromMessage","createAriaLabelMemoized","createAriaLabelForPost","authorDisplayName","reactions","isFlagged","isPostFlagged","teammateNameDisplaySetting","author","_post$props2","formatMessage","formatTime","formatDate","ariaLabel","Emoticons","authorName","time","date","weekday","month","day","attachmentCount","emojiNames","reactionCount","splitMessageBasedOnCaretPosition","firstPiece","lastPiece","splitMessageBasedOnTextSelection","selectionStart","selectionEnd","areConsecutivePostsBySameUser","previousPost","POST_COLLAPSE_TIMEOUT","postURI","matchUserMentionTriggersWithMessageMentions","messageMentionKeys","isMentioned","mentionKey","makeGetUniqueReactionsToPost","reactionsForPost","userIdEmojiKey","emojiReaction","getUniqueReactionsToPost","getPotentialMentionsForName","mentionName","mentionNameToLowerCase","potentialMentions","entitiesByName","potentialMention","getUserOrGroupFromMentionName","groupsDisabled","getMention","mentionsMinusSpecialMentionsInText","makeGetUserOrGroupMentionCountFromMessage","member_count","hasRequestedPersistentNotifications","PostPriority","URGENT","persistent_notifications","punctuationRegex","AT_MENTION_PATTERN","UNICODE_EMOJI_REGEX","htmlEmojiPattern","FORMAT_TOKEN_LIMIT_ERROR","isFormatTokenLimitError","isChannelNamesMap","v","isRecordOf","team_name","Tokens","DEFAULT_OPTIONS","mentionHighlight","disableGroupHighlight","emoticons","markdown","atMentions","atSumOfMembersMentions","atPlanMentions","minimumHashtagLength","editedAt","formatText","inputOptions","hasPhrases","searchTerm","searchMatches","convertSearchTermToRegex","termString","captured","puncStart","puncEnd","parseSearchTerms","doFormatText","Markdown","replacer","sanitizeHtml","replaceNewlines","replaceAtMentionWithToken","autolinkAtMentions","SUM_OF_MEMBERS_MENTION_REGEX","autoLinkSumOfMembersMentions","PLAN_MENTIONS","autoPlanMentions","channelNamesMap","channelMentionExists","addToken","basename","channelNameLower","channelValue","escapeHtml","originalChannelName","suffix","substr","autolinkChannelMentions","emailRegex","autolinkEmails","newTokens","newAlias","hashtag","newToken","hashtagRegex","autolinkHashtags","highlightSearchTerms","mentionKeys","tokenTextLower","replaceCurrentMentionWithToken","highlightCurrentMentions","highlightKeys","replaceHighlightKeywordsWithToken","highlightKey","tokenOriginalText","highlightWithoutNotificationKeywords","searchPattern","emojiMatch","codePoints","fixedCharCodeAt","codePoint","emojiCode","handleUnicodeEmoji","replaceTokens","escapeReplaceSpecialPatterns","htmlEntities","replaceSearchTermWithToken","word","str","charCodeAt","low","isNaN","getBrowserTimezone","guess","getCurrentDateForTimezone","tztime","tz","year","getCurrentDateTimeForTimezone","hour","minute","isBeforeTime","dateTime1","dateTime2","clone","isBefore","latinMap","Á","Ă","Ắ","Ặ","Ằ","Ẳ","Ẵ","Ǎ","Â","Ấ","Ậ","Ầ","Ẩ","Ẫ","Ä","Ǟ","Ȧ","Ǡ","Ạ","Ȁ","À","Ả","Ȃ","Ā","Ą","Å","Ǻ","Ḁ","Ⱥ","Ã","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ḃ","Ḅ","Ɓ","Ḇ","Ƀ","Ƃ","Ć","Č","Ç","Ḉ","Ĉ","Ċ","Ƈ","Ȼ","Ď","Ḑ","Ḓ","Ḋ","Ḍ","Ɗ","Ḏ","Dz","Dž","Đ","Ƌ","DZ","DŽ","É","Ĕ","Ě","Ȩ","Ḝ","Ê","Ế","Ệ","Ề","Ể","Ễ","Ḙ","Ë","Ė","Ẹ","Ȅ","È","Ẻ","Ȇ","Ē","Ḗ","Ḕ","Ę","Ɇ","Ẽ","Ḛ","Ꝫ","Ḟ","Ƒ","Ǵ","Ğ","Ǧ","Ģ","Ĝ","Ġ","Ɠ","Ḡ","Ǥ","Ḫ","Ȟ","Ḩ","Ĥ","Ⱨ","Ḧ","Ḣ","Ḥ","Ħ","Í","Ĭ","Ǐ","Î","Ï","Ḯ","İ","Ị","Ȉ","Ì","Ỉ","Ȋ","Ī","Į","Ɨ","Ĩ","Ḭ","Ꝺ","Ꝼ","Ᵹ","Ꞃ","Ꞅ","Ꞇ","Ꝭ","Ĵ","Ɉ","Ḱ","Ǩ","Ķ","Ⱪ","Ꝃ","Ḳ","Ƙ","Ḵ","Ꝁ","Ꝅ","Ĺ","Ƚ","Ľ","Ļ","Ḽ","Ḷ","Ḹ","Ⱡ","Ꝉ","Ḻ","Ŀ","Ɫ","Lj","Ł","LJ","Ḿ","Ṁ","Ṃ","Ɱ","Ń","Ň","Ņ","Ṋ","Ṅ","Ṇ","Ǹ","Ɲ","Ṉ","Ƞ","Nj","Ñ","NJ","Ó","Ŏ","Ǒ","Ô","Ố","Ộ","Ồ","Ổ","Ỗ","Ö","Ȫ","Ȯ","Ȱ","Ọ","Ő","Ȍ","Ò","Ỏ","Ơ","Ớ","Ợ","Ờ","Ở","Ỡ","Ȏ","Ꝋ","Ꝍ","Ō","Ṓ","Ṑ","Ɵ","Ǫ","Ǭ","Ø","Ǿ","Õ","Ṍ","Ṏ","Ȭ","Ƣ","Ꝏ","Ɛ","Ɔ","Ȣ","Ṕ","Ṗ","Ꝓ","Ƥ","Ꝕ","Ᵽ","Ꝑ","Ꝙ","Ꝗ","Ŕ","Ř","Ŗ","Ṙ","Ṛ","Ṝ","Ȑ","Ȓ","Ṟ","Ɍ","Ɽ","Ꜿ","Ǝ","Ś","Ṥ","Š","Ṧ","Ş","Ŝ","Ș","Ṡ","Ṣ","Ṩ","ẞ","Ť","Ţ","Ṱ","Ț","Ⱦ","Ṫ","Ṭ","Ƭ","Ṯ","Ʈ","Ŧ","Ɐ","Ꞁ","Ɯ","Ʌ","Ꜩ","Ú","Ŭ","Ǔ","Û","Ṷ","Ü","Ǘ","Ǚ","Ǜ","Ǖ","Ṳ","Ụ","Ű","Ȕ","Ù","Ủ","Ư","Ứ","Ự","Ừ","Ử","Ữ","Ȗ","Ū","Ṻ","Ų","Ů","Ũ","Ṹ","Ṵ","Ꝟ","Ṿ","Ʋ","Ṽ","Ꝡ","Ẃ","Ŵ","Ẅ","Ẇ","Ẉ","Ẁ","Ⱳ","Ẍ","Ẋ","Ý","Ŷ","Ÿ","Ẏ","Ỵ","Ỳ","Ƴ","Ỷ","Ỿ","Ȳ","Ɏ","Ỹ","Ź","Ž","Ẑ","Ⱬ","Ż","Ẓ","Ȥ","Ẕ","Ƶ","IJ","Œ","ᴀ","ᴁ","ʙ","ᴃ","ᴄ","ᴅ","ᴇ","ꜰ","ɢ","ʛ","ʜ","ɪ","ʁ","ᴊ","ᴋ","ʟ","ᴌ","ᴍ","ɴ","ᴏ","ɶ","ᴐ","ᴕ","ᴘ","ʀ","ᴎ","ᴙ","ꜱ","ᴛ","ⱻ","ᴚ","ᴜ","ᴠ","ᴡ","ʏ","ᴢ","á","ă","ắ","ặ","ằ","ẳ","ẵ","ǎ","â","ấ","ậ","ầ","ẩ","ẫ","ä","ǟ","ȧ","ǡ","ạ","ȁ","à","ả","ȃ","ā","ą","ᶏ","ẚ","å","ǻ","ḁ","ⱥ","ã","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ḃ","ḅ","ɓ","ḇ","ᵬ","ᶀ","ƀ","ƃ","ɵ","ć","č","ç","ḉ","ĉ","ɕ","ċ","ƈ","ȼ","ď","ḑ","ḓ","ȡ","ḋ","ḍ","ɗ","ᶑ","ḏ","ᵭ","ᶁ","đ","ɖ","ƌ","ı","ȷ","ɟ","ʄ","dz","dž","é","ĕ","ě","ȩ","ḝ","ê","ế","ệ","ề","ể","ễ","ḙ","ë","ė","ẹ","ȅ","è","ẻ","ȇ","ē","ḗ","ḕ","ⱸ","ę","ᶒ","ɇ","ẽ","ḛ","ꝫ","ḟ","ƒ","ᵮ","ᶂ","ǵ","ğ","ǧ","ģ","ĝ","ġ","ɠ","ḡ","ᶃ","ǥ","ḫ","ȟ","ḩ","ĥ","ⱨ","ḧ","ḣ","ḥ","ɦ","ẖ","ħ","ƕ","í","ĭ","ǐ","î","ï","ḯ","ị","ȉ","ì","ỉ","ȋ","ī","į","ᶖ","ɨ","ĩ","ḭ","ꝺ","ꝼ","ᵹ","ꞃ","ꞅ","ꞇ","ꝭ","ǰ","ĵ","ʝ","ɉ","ḱ","ǩ","ķ","ⱪ","ꝃ","ḳ","ƙ","ḵ","ᶄ","ꝁ","ꝅ","ĺ","ƚ","ɬ","ľ","ļ","ḽ","ȴ","ḷ","ḹ","ⱡ","ꝉ","ḻ","ŀ","ɫ","ᶅ","ɭ","ł","lj","ſ","ẜ","ẛ","ẝ","ḿ","ṁ","ṃ","ɱ","ᵯ","ᶆ","ń","ň","ņ","ṋ","ȵ","ṅ","ṇ","ǹ","ɲ","ṉ","ƞ","ᵰ","ᶇ","ɳ","ñ","nj","ó","ŏ","ǒ","ô","ố","ộ","ồ","ổ","ỗ","ö","ȫ","ȯ","ȱ","ọ","ő","ȍ","ò","ỏ","ơ","ớ","ợ","ờ","ở","ỡ","ȏ","ꝋ","ꝍ","ⱺ","ō","ṓ","ṑ","ǫ","ǭ","ø","ǿ","õ","ṍ","ṏ","ȭ","ƣ","ꝏ","ɛ","ᶓ","ɔ","ᶗ","ȣ","ṕ","ṗ","ꝓ","ƥ","ᵱ","ᶈ","ꝕ","ᵽ","ꝑ","ꝙ","ʠ","ɋ","ꝗ","ŕ","ř","ŗ","ṙ","ṛ","ṝ","ȑ","ɾ","ᵳ","ȓ","ṟ","ɼ","ᵲ","ᶉ","ɍ","ɽ","ↄ","ꜿ","ɘ","ɿ","ś","ṥ","š","ṧ","ş","ŝ","ș","ṡ","ṣ","ṩ","ʂ","ᵴ","ᶊ","ȿ","ɡ","ß","ᴑ","ᴓ","ᴝ","ť","ţ","ṱ","ț","ȶ","ẗ","ⱦ","ṫ","ṭ","ƭ","ṯ","ᵵ","ƫ","ʈ","ŧ","ᵺ","ɐ","ᴂ","ǝ","ᵷ","ɥ","ʮ","ʯ","ᴉ","ʞ","ꞁ","ɯ","ɰ","ᴔ","ɹ","ɻ","ɺ","ⱹ","ʇ","ʌ","ʍ","ʎ","ꜩ","ú","ŭ","ǔ","û","ṷ","ü","ǘ","ǚ","ǜ","ǖ","ṳ","ụ","ű","ȕ","ù","ủ","ư","ứ","ự","ừ","ử","ữ","ȗ","ū","ṻ","ų","ᶙ","ů","ũ","ṹ","ṵ","ᵫ","ꝸ","ⱴ","ꝟ","ṿ","ʋ","ᶌ","ⱱ","ṽ","ꝡ","ẃ","ŵ","ẅ","ẇ","ẉ","ẁ","ⱳ","ẘ","ẍ","ẋ","ᶍ","ý","ŷ","ÿ","ẏ","ỵ","ỳ","ƴ","ỷ","ỿ","ȳ","ẙ","ɏ","ỹ","ź","ž","ẑ","ʑ","ⱬ","ż","ẓ","ȥ","ẕ","ᵶ","ᶎ","ʐ","ƶ","ɀ","ff","ffi","ffl","fi","fl","ij","œ","st","ₐ","ₑ","ᵢ","ⱼ","ₒ","ᵣ","ᵤ","ᵥ","ₓ","x","cleanUpUrlable","cleaned","latinise","getShortenedURL","getLength","subLength","getSiteURL","_getModule","_getModule2","getModule","obj","origin","protocol","hostname","port","getSiteURLFromWindowObject","getRelativeChannelURL","unescaped","decodeURIComponent","unescape","makeUrlSafe","defaultUrl","removeScheme","formattedError","validateChannelUrl","errors","isDirectMessageFormat","cleanedURL","urlMatched","urlLonger","MIN_CHANNELNAME_LENGTH","urlShorter","MAX_CHANNELNAME_LENGTH","defineMessage","startsWithoutLetter","endsWithoutLetter","permalinkPath","standardSiteURL","afterSiteURL","isInternalURL","unhandledPaths","managedPath","unhandledPath","isPermalinkURL","regexp","isValidUrl","isStringContainingUrl","BadUrlReasons","Empty","Length","Reserved","Taken","teamNameToUrl","MIN_TEAMNAME_LENGTH","MAX_TEAMNAME_LENGTH","RESERVED_TEAM_NAMES","reservedName","parseLink","defaultSecure","CLICKABLE_ELEMENTS","MS_PER_DAY","createSafeId","prop","isUnhandledLineBreakKeyCombo","insertLineBreakFromKeyEvent","newValue","setSelectionRange","getDateForUnixTicks","ticks","getTimestamp","getRemainingDaysFromFutureTimestamp","futureDate","utcFuture","UTC","getFullYear","getMonth","getDate","today","utcToday","floor","days","timeline","daysSince","round","PAST","getLocaleDateFromUTC","userTimezone","replaceHtmlEntities","newtext","replacement","regex","isGIFImage","extin","IMAGE_TYPE_GIF","getFileType","removeQuerystringOrHash","TEXT_TYPES","TEXT","IMAGE_TYPES","IMAGE","AUDIO_TYPES","AUDIO","VIDEO_TYPES","VIDEO","SPREADSHEET_TYPES","SPREADSHEET","CODE_TYPES","CODE","WORD_TYPES","WORD","PRESENTATION_TYPES","PRESENTATION","PDF_TYPES","PDF","PATCH_TYPES","PATCH","SVG_TYPES","SVG","OTHER","getFileIconPath","fileType","extension","ICON_FROM_TYPE","other","getCompassIconClassName","fileTypeIn","outline","large","ICON_NAME_FROM_TYPE","getIconClassName","toTitleCase","dropAlpha","toRgbValues","hexStr","applyTheme","centerChannelColor","changeCss","changeOpacity","buttonBg","colourIn","hex","lum","rgb","changeColor","newMessageSeparator","linkColor","blendColors","buttonColor","errorTextColor","mentionHighlightBg","mentionHighlightLink","codeTheme","DEFAULT_CODE_THEME","cssPath","THEME_ELEMENTS","element","_element$themes","themes","cssURL","document","querySelector","attributes","xmlHTTP","XMLHttpRequest","open","onload","once","send","updateCodeTheme","cssVars","variables","awayIndicator","centerChannelBg","dndIndicator","mentionBg","mentionColor","onlineIndicator","sidebarBg","sidebarHeaderBg","sidebarTeamBarBg","sidebarHeaderTextColor","sidebarText","sidebarTextActiveBorder","sidebarTextActiveColor","sidebarTextHoverBg","sidebarUnreadText","resetTheme","THEMES","denim","classValue","styleEl","createElement","setAttribute","head","appendChild","styleSheet","sheet","rules","cssRules","style","selectorText","setProperty","mediaQuery","insertRule","placeCaretAtEnd","scrollToCaret","scrollTop","scrollHeight","getElementComputedStyle","getComputedStyle","getViewportSize","win","w","h","innerHeight","clientWidth","clientHeight","getSuggestionBoxAlgn","textArea","_getComputedStyle","pxToSubstract","alignWithTextBox","HTMLElement","pixelsToMoveX","pixelsToMoveY","caretXCoordinateInTxtArea","y","caretYCoordinateInTxtArea","copy","textContent","overflow","offsetWidth","offsetHeight","position","left","offsetLeft","top","offsetTop","copyTextAreaToDiv","range","createRange","setStart","firstChild","setEnd","selection","getSelection","removeAllRanges","addRange","rect","getClientRects","removeChild","scrollLeft","getCaretXYCoordinate","viewportWidth","viewportHeight","textAreaWidth","suggestionBoxWidth","SUGGESTION_LIST_MAXWIDTH","txtAreaOffsetTop","txtAreaOffsetLft","getBoundingClientRect","pageXOffset","documentElement","pageYOffset","offsetTopLeft","pxToTheRight","lineHeight","placementShift","SUGGESTION_LIST_MAXHEIGHT","POST_AREA_HEIGHT","getPxToSubstract","char","mentionNamePaddingLft","remNum","styles","parseFloat","fontSize","convertEmToPixels","MENTION_NAME_PADDING_LEFT","AVATAR_WIDTH","setCaretPosition","pos","isValidUsername","MIN_USERNAME_LENGTH","MAX_USERNAME_LENGTH","ValidationErrors","INVALID_LENGTH","reserved","RESERVED_USERNAMES","RESERVED_NAME","INVALID_FIRST_CHARACTER","INVALID_CHARACTERS","USERNAME_REQUIRED","isValidBotUsername","INVALID_LAST_CHARACTER","loadImage","onLoad","onProgress","request","responseType","onprogress","lengthComputable","getResponseHeader","completedPercentage","loaded","getFullName","last_name","nickname","getLongDisplayName","fullName","getLongDisplayNameParts","getDisplayNameByUser","teammateNameDisplay","displayEntireNameForUser","displayFullAndNicknameForUser","imageURLForUser","lastPictureUpdate","getUsersRoute","defaultImageURLForUser","imageURLForTeam","last_team_icon_update","getTeamIconUrl","fileSizeToString","bytes","generateId","random","otherId","handle","getUserIdFromChannelId","fillRecord","isFileTransfer","types","isUriDrop","dataTransfer","items","isTextDroppableEvent","DragEvent","HTMLTextAreaElement","HTMLInputElement","clearFileInput","elm","localizeAndFormatMessage","descriptor","template","base","mod","REACTION_PATTERN","handleFormattedTextClick","currentRelativeTeamUrl","hashtagAttribute","getAttributeNode","linkAttribute","channelMentionAttribute","preventDefault","MIDDLE_MOUSE_BUTTON","button","isChannelOrPermalink","isReply","teamData","getTeamByNameAction","postData","getPostAction","getChannelAction","getTeamMemberships","_match$postId","stopPropagation","isTeamSameWithCurrentTeam","isEmptyObject","object","removePrefixFromLocalStorage","copyToClipboard","clipboard","navigator","writeText","padding","border","boxShadow","background","select","execCommand","moveCursorToEnd","setCSRFFromCookie","cookie","cookies","setCSRF","stringToNumber","isTextSelectedInPostOrReply","isNil","makeIsEligibleForClick","currentTarget","node","contains","getAttribute","parentNode","numberToFixedDynamic","num","places","toFixed","indexToExclude","TrackFlowRoles","FIRST_ADMIN_ROLE","sa","SYSTEM_ADMIN_ROLE","su","SYSTEM_USER_ROLE","getTrackFlowRole","trackFlowRole","isFirstAdmin","getRoleForTrackFlow","started_by_role","getRoleFromTrackFlow","_TrackFlowRoles$sbr","sbr","_params$get","getDatePickerLocalesForDateFns","loadedLocales","require","getMediumFromTrackFlow","_params$get2","TrackFlowSources","wd","wm","d","getSourceForTrackFlow","a11yFocus","keyboardOnly","dispatchEvent","CustomEvent","A11yCustomEventTypes","FOCUS","generateSlug","crypto","sortUsersAndGroups","aSortString","bSortString","doesCookieContainsMMUserId","autoCloseOnCancelButton","autoCloseOnConfirmButton","_this$props$handleKey","nativeEvent","isComposing","handleEnterKeyPress","handleKeydown","isFocalTrapActive","confirmButton","isConfirmOrDeleteClassName","isDeleteModal","autoFocusConfirmButton","confirmButtonClassName","disabled","isConfirmDisabled","cancelButtonClassName","headerText","headerButton","GenericModal__compassDesign","bodyOverflowVisible","restoreFocus","enforceFocus","backdrop","backdropClassName","container","keyboard","keyboardEscape","onKeyDown","onEnterKeyDown","tabIndex","headerInput","modalSubheaderText","divider","bodyDivider","errorText","bodyPadding","footerContent","footerDivider","appendedContent","FooterPagination","itemsPerPage","onNextPage","onPreviousPage","startCount","endCount","prevDisabled","nextDisabled","trunc","ChevronLeftIcon","ChevronRightIcon","skeletonFade","keyframes","BaseLoader","styled","withConfig","getCorrectSizeDimension","_props$borderRadius","borderRadius","_props$margin","margin","_props$flex","flex","TourTipRootPortal","ReactDOM","TourTipBackdrop","overlayPunchOut","interactivePunchOut","onDismiss","onPunchOut","appendTo","transparent","vertices","clipPath","overlay","PulsatingDot","customStyles","_this$props$coords","_this$props$coords2","coords","transform","effectiveClassName","targetRef","TourTip","screen","imageURL","singleTip","step","tourSteps","handleOpen","handleDismiss","handleNext","handlePrevious","handleSkip","handleJump","handlePunchOut","pulsatingDotTranslate","pulsatingDotPlacement","nextBtn","prevBtn","offset","placement","showOptOut","zIndex","hideBackdrop","tippyBlueStyle","triggerRef","useRef","rootPortal","getElementById","dots","dot","circularRing","alt","Tippy","showOnCreate","animation","trigger","maxWidth","aria","allowHTML","reference","interactive","useMeasurePunchouts","elementIds","additionalDeps","elementsAvailable","intervalMS","checkAvailableInterval","available","setAvailable","useState","useEffect","useElementAvailable","setSize","updateSize","throttle","trailing","useLayoutEffect","removeEventListener","minX","MAX_SAFE_INTEGER","minY","maxX","MIN_SAFE_INTEGER","maxY","_document$getElementB","rectangle","useFollowElementDimensions","elementId","setDimensions","DOMRect","observer","ResizeObserver","contentRect","unobserve","defineProperty","exports","isStatusOK","isPostAction","data_source","utilities_1","isArrayOf","isPostActionOption","default_option","isMessageAttachment","integration_actions_1","color","author_name","author_link","author_icon","title_link","thumb_url","footer_icon","isMessageAttachmentField","short","webpackContext","req","webpackContextResolve","__webpack_require__","o","module"],"sourceRoot":""}