From 7bea39b6fa84e413de890fdbc09be7b300bc1a8c Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 17 May 2023 20:04:12 +0300 Subject: [PATCH] Improve is_emoji. --- tdutils/td/utils/emoji.cpp | 452 +++++++++++++++---------------------- tdutils/test/emoji.cpp | 10 +- 2 files changed, 193 insertions(+), 269 deletions(-) diff --git a/tdutils/td/utils/emoji.cpp b/tdutils/td/utils/emoji.cpp index d6f8f65cd..552ea7333 100644 --- a/tdutils/td/utils/emoji.cpp +++ b/tdutils/td/utils/emoji.cpp @@ -13,274 +13,184 @@ namespace td { bool is_emoji(Slice str) { - constexpr size_t MAX_EMOJI_LENGTH = 38; + constexpr size_t MAX_EMOJI_LENGTH = 35; static const FlatHashSet emojis = [max_emoji_length = MAX_EMOJI_LENGTH] { #if TD_HAVE_ZLIB Slice packed_emojis( - "eJyVvWly20qztTuVL-L7d36dvpmdTcuSbXUm1YKSLDcwIQmSTImSqAZNxB3KewdwdsSdwN1YWAlkVpIQFHGwnE9VViaYVQBYoM5-_7Ex_j__" - "2Bj_7-P23_" - "8cVQfM7fPqqM2L6qjNtDpq87I6anNaHbU5qw6YB3l11GZRHTAPd6ujNveqA2b0qTpq83N11OaX6qjN9eqozY3qqM3N6qjNreqoTRy1-" - "bU6anNYHbU5qo7a3KmO2iyrA-" - "Z4pzpq80d11OZFddRmWh21mVdHbRbVAfNopTpq82N11OZWddTmbnXU5kV11OZtddTmrDpq8746avO5Omozrw6Yxx-roza_" - "VEdtrldHbZ5VB8yTjeqoza3qqM2d6qjN3eqozb3qqM2D6oD5ba86anO_OmrzoDpqc1odtVlWB8zLo-qozePqgHn1tTpqc686KvOv03crkBo-" - "1FLD6haEMIQQRhDCDoSwCyHsQQj7EMIBhHAIIUQQwhhSw6f3EMIYQvgDIdxCCDMI4Q5CuIcQHiCERwjhCUJ4htTw-" - "SuEMITUsPEOQngPIQwghA8QwgqE8BFCWIUQ1iCETxDCZwjhC4SwDiFsQAibEMIWhFAL4SuEMIQQRhDCDoSwCyHsQQj7EMIBhHAIIUQQwhhCOII" - "QjiGEEwjhG4RwCiF8hxCuIIRrCOEPhDCFEG4ghFsIYQYh3EEI9xDCHEJ4hBCeIIRnCOEFQsgghBxCKCCEElLD5jsI4T2EMIAQPkAIKxDCRwhhF" - "UJYgxA-" - "QQifIYQvEMI6hLABIWxCCFsQQi2ErxDCEEIYQQg7EMIuhLAHIexDCAcQwiGEEEEIYwjhCEI4hhBOIIRvEMIphPAdQvgBIfyEEH5BCDGE8BtCmE" - "AICYRwBiGcQwgXEEIKIVxCCFcQwjWE8AdCmEIINxDCLYQwgxDuIIR7COEBQphDCI8QwhOE8AwhvEAIGYRQQAglpIatdxDCewhhACF8gBBWIISP" - "EMIqhLAGIXyCED5DCF8ghHUIYQNC2IQQtiCEWghfIYQhhDCCEHYghO8Qwg8I4SeE8AtCiCGE3xDCBEJIIIQzCOEcQriAEFII4RJCuIIQriGEPx" - "DCFEK4gRBuIYQZhHAHIdxDCA8QwhxCeIQQniCEZwjhBULIIIQcQigghBJSw_" - "Y7COE9hDCAED5ACCsQwkcIYRVCWIMQPkEInyGELxBCLYSvEMIQQhhBCDsQwncI4QeE8BNC-" - "AUhxBDCbwhhAiEkEMIZhHAOIVxACCmEcAkhXEEI1xDCHwhhCiHcQQiPEMIThPAMIbxACBmEkEMIBYRQQmr4-" - "g5CeA8hDCCEDxDCCoTwEUJYhRDWIIRPEMJnCOELhLAOIWxACJsQwhaEUAvhK4QwhBBGEMIOhLALIexBCPsQwgGEcAghRBDCGEI4ghCOIYQTCOE" - "bhHAKIXyHEH5ACD8hhF8QQgwh_IYQJhBCAiGcQQjnEMIFhJBCCJcQwhWEcA0h_" - "IEQphDCDYRwCyHMIIQ7COEeQniAEOYQwiOE8AQhPEMILxBCBiHkEEIBqWH4DkIYQAgfIIQVCOEjhLAKIaxBCJ8ghM8QwhcIYR1C2IAQNiGELQi" - "hFsJXCGEIIYwghB0IYRdC2IMQ9iGEAwjhEEKIIIQxhHAEIRxDCCcQwjcI4RRC-A4h_" - "IAQfkIIvyCEGEL4DSFMIIQEQjiDEM4hhAsIIYUQLiGEKwjhGkL4AyFMIYQbCOEWQphBCHcQwj2E8AAhzCGERwjhCUJ4hhBeIIQMQsghhAJCKCE" - "1jN5BCO8hhAGE8AFCWIEQPkIIqxDCGoTwCUL4DCF8gRDWIYQNCGETQtiCEGohfIUQhhDCCELYgRB2IYQ9CGEfQjiAEA4hhAhCGEMIRxDCMYRwA" - "iF8gxBOIYTvEMIPCOEnhPALQoghhN8QwgRCSCCEMwjhHEK4gBBSCOESQriCEK4hhD8QwhRCuIEQbiGEGYRwByHcQwgPEMIcQniEEJ4ghGcI4QV" - "CyCCEHEIoIIQSUsPOOwjhPYQwgBA-" - "QAgrEMJHCGEVQliDED5BCJ8hhC8QwjqEsAEhbEIIWxBCLYSvEMIQQhhBCDsQwi6EsAch7EMIBxDCIYQQQQhjCOEIQjiGEE4ghG8QwimE8B1C-" - "AEh_" - "IQQfkEIMYTwG0KYQAgJhHAGIZxDCBcQQgohXEIIVxDCNYTwB0KYQgg3EMIthDCDEO4ghHsI4QFCmEMIjxDCE4TwDCG8QAgZhFBCath9ByG8hxA" - "GEMIHCGEFQvgIIaxCCGsQwicI4TOE8AVCWIcQNiCETQhhC0KohfAVQhhCCCMIYQdC2IUQ9iCEfQjhAEI4hBAiCGEMIRxBCMcQwgmE8A1COIUQv" - "kMIPyCEnxDCLwghhhB-QwgTCCGBEM4ghHMI4QJCSCGESwjhCkK4hhD-" - "QAhTCOEGQriFEGYQwh2EcA8hPEAIcwjhEUJ4ghCeIYQXCCGDEHJIDXvrEMIGhLAJIWxBCF8hhCGEMIIQdiCEXQhhD0LYhxAOIIRDCCGCEMYQwh" - "GEcAwhnEAI3yCEUwjhO4TwA0L4CSH8ghBiCOE3hDCBEBII4RlSw_" - "4ehLAPIcSQGg5eIIQMQsghhAJCKCE1HL6DEN5DCAMI4QOEsAIhfIQQViGENQjhE4TwGUL4AiGsQwgbEMImhLAFIdRC-" - "AohDCGEEYSwAyHsQgh7EMI-" - "hHAAIRxCCBGEMIYQjiCEYwjhBEL4BiGcQgjfIYQfEMJPCOEXhBBDCL8hhAmEkEAIZxDCOYRwASGkEMIlhHAFIVxDCH8ghCmEcAMh3EIIMwjhDk" - "K4hxAeIIQ5hPAIITxBCM8QwguEkEEIOYRQQAglpIboHYTwHkIYQAgfIIQVCOEjhLAKIaxBCJ8ghM8QwhcIYR1C2IAQNiGELQihlhrG7yCE9xDC" - "AEL4ACGsQAgfIYRVCGENQvgEIXyGEL5ACOsQwgaEsAkhbEEItRC-" - "QghDCGEEIexACLsQwh6EsA8hHEAIhxBCBCGMIYQjCOEYQjiBEL5BCKcQwncI4QeE8BNC-" - "AUhxBDCbwhhAiEkEMIZhHAOIVxACCmEcAkhXEEI1xDCHwhhCiHcQAi3EMIMQriDEO4hhAcIYQ4hPEIITxDCM4TwAiFkEEIOIRQQQgmp4egdhPA" - "eQhhACB8ghBUI4SOEsAEhfIUQhhDCCELYgxD2IYQDCOEYQjiBEL5BCKcQQgohXEIIdxDCPYTwACHMIYRHCOEJQniGEF4ghAxSw-" - "l3COEHhPATQvgFIcQQwm8IYQIhJBDCGYRwDiFcQAgphDCF1BBvQAibEMIWhFAL4SuEMIQQRhDCDoSwCyHsQQj7EMIBhHAIIUQQwhhCOIIQjiGE" - "EwjhG4RwCiF8hxB-QAg_" - "IYRfEEIMIfyGECYQQgIhnEEI5xDCBYSQQgiXEMIVhHANIfyBEKYQwg2EcAshzCCEOwjhHkJ4gBDmEMIjhPAEITxDCBmEkEMIBYRQQmr4_" - "Q5CeA8hDCCEDxDCCoTwEUJYgxA-" - "QQifIYQvEMI6hLABIWxCCFsQQi2ErxDCEEIYQQg7EMIuhLAHIexDCAcQwiGEEEEIYwjhCEI4hhBOIIRvEMIphPAdQvgBIfyEEH5BCDGE8BtCmE" - "AICYRwBiGcQwgXEEIKIVxCCFcQwjWE8AdCmEIINxDCLYQwgxDuIIR7COEBQphDCI8QwhOE8AwhvEAIGYSQQwgFhFBCapi8gxDeQwgDCOEDhLAC" - "IXyEEFYhhDUI4ROE8BlC-AIhrEMIGxDCJoSwBSHUQvgKIQwhhBGEsAMh7EIIexDCPoRwACEcQggRhDCGEI4ghGMI4QRC-" - "AYhnEII3yGEHxDCTwjhF4QQQwi_IYQJhJBACGcQwjmEcAEhpBDCJYRwBSFcQwh_" - "IIQphHADIdxCCDMI4Q5CuIcQHiCEOYTwCCE8QQjPEMILhJBBCDmEUEAIJaSG5B2E8B5CGEAIHyCEFQjhI4SwCiGsQQifIITPEMIXCGEdQtiAED" - "YhhC0IoRbCVwhhCCGMIIQdCGEXQtiDEPYhhAMI4RBCiCCEMYRwBCEcQwgnEMI3COEUQvgOIfyAEH5CCL8ghBhC-" - "A0hTCCEBEI4gxDOIYQLCCGFEC4hhCsI4RpC-" - "AMhTCGEGwjhFkKYQQh3EMI9hPAAIcwhhEcI4QlCeIYQXiCEDELIIYQCQighNZxPIYQbCOEWQphBCHcQwj2E8AAhzCGERwjhCUJ4hhBeIIQMUsP" - "FOwjhPYQwgBA-" - "QAgrEMJHCGEVQliDED5BCF8hhCGEMIIQdiCEXQhhD0LYhxAOIIRDCCGCEMYQwhGEcAwhnEAI3yCEUwjhO4TwA0L4CSH8ghBiCOE3hDCBEBII4Q" - "xCOIcQLiCEFEK4hBCuIIRrCOEPhDCFEG4ghFsIYQYh3EEI9xDCA4QwhxAeIYQnCOEZQniBEDIIIYcQSkgN6TsI4T2EMIAQPkAIKxDCRwhhC0Ko" - "hfAVQhhCCCMIYQdC2IUQ9iCEfQjhAEI4hBAiCGEMIRxBCN8hhB8Qwk8I4ReEEEMIvyGECYSQQAhnEMIUQriBEG4hhBmEcAch3EMIDxDCHEJ4hF" - "Tw_5z__X8wrv_-v8r4x7usOmC-_1wdMFd-VkdtPlUHzNXd6qjNveqozf3qqM2D6qjNw-" - "qozag6avO8OmrzojpgbpxVB8xtHLV5VR21eV0dtfmnOmrzpjpq87Y6avOxOmrzqTpq87k6YO4MqgPm_kV11GZaHbX5UB0wD95VR22-" - "VEdtZtUB8_BdddTm--qozUF11OaH6qjNleqoza3qqM1hddTmYXXU5kl11Ob36qjNn9VRm7-qozYn1VGbF9VRm9fVUZt_qqM2H6ujNp-" - "qozafqwNm9K46anNQHbV5Wh21-b06avNXddTm7-qozUl11OZZddTmS3XUZlEdMMej6qjN3eqozb3qqM396qjNg-" - "qozag6avOoOmrzuDpq83t11GZSHbU5rY7avKkOmEefqqM2cdTmsDpqc6c6avO8OmpzWh21eVMdtXlXHbU5r47afKyO2nyqDpjHg-qozU_" - "VUZufq6M2N6qjNjerozZx1OaoOmpztzpqc786avOkOmrzR3XU5qw6avOuOmCerFRHba5VR23-" - "qo7ajKsD5rcf1QEzvquO2ryvDpiXH6ujNlerozbXqqMy_9930-qozbw6YH45qI7ajKqjvoV9nEIINxBCASGUkBo-DSCEOaSGjR8QQgwh_" - "IYQJhBCAiGcQQjnEMIFhJBCCJcQwgOkhs0cUsPWPoRwACFEEMIYQjiCEL5BCKeQGrbXIYQNCGETQtiCEHYhhD0IYR9COIAQDiGECEIYQwhHEMI" - "xhHACIXyDEE4hhBmEcA8hzCE1fC0hNQzfQ2rYySE17H2GEL5ACH8ghCmEMIMQ7iCEewjhAUKYQwiPEMITpIb9NQjhC4SwDiFsQAibEMJXCOE3h" - "HAGIdxACLcQQgap4WAAIXyAEFYghCGEMIIQdiCEYwjhBEL4BiH8gBB-QQhnEMIfCGEGITxDajhahxA2IYQtCKEWwncI4QeE8BNC-" - "AUhxBDCbwjhHEKYQggzSAX_9x8ffv2f__u3pf6t2v-p4n9i-z-17f9c8T-z_Z_b9n-p-F_Y_i9t-79W_K9s_9e2_d8q_je2_1vb_u8V_zvb_" - "71t_4-K_4Pt_9G2_2fF_8n2_2zb_6vi_2L7f7Xt_13xf7P9v9v2_6n4f9j-P237X6drk7-" - "Ps8ZQjeeNoRovGkM1po2hGi8bQzVeN4ZqvGkM1XjbGKrxrjFU40NjqMZ5Y6jGx8ZQjU-" - "NoRqfG0M1Zo2hGvPGUI1lY7AxqbgxVGPSGKrxvDFU40VjqMa0MVTjZWOoxqvGUI3XjaEa_" - "zSGarxpDNV42xiqcdYYqvGuMVTjQ2OoxnljqMbHxlCNT42hGl8aQzVmjaEai8ZQjWVjsPFMJu5MTVxlnzWGajxvDNWYNoZqvGwM1XjVGKrxujF" - "U47QxVONNY6jG28ZQjbPGUI13jaEa7xtDNc4bQzU-" - "N4ZqfGkM1Zg1hmrMG0M1Fo2hGsvGYOP5X7w6YKjGy8ZQjX8aQzVOG0M13jaGarxrDNVYNgYbL2TZXKhlcyHL5kItmws5-" - "Qt18hdy8hfq5C9khVyoFXIh03GhpqOyHxtDNT41hmp8bgw2prLqUrXqUildqkqXSulSVbpUSpeq0qVSulSVLpWTT9XJX0rpLlXpKjtpDNV43hi" - "q8aIxVGPaGKrxsjFU41VjqMbrxlCNN42hGm8bQzXOGkM13jeGanxoDNU4bwzV-NgYqvGpMVTjc2OoxqwxVGPRGGy8kim-UlN8JR_zSn3MK_" - "mYV-pjXsnJX6mTv5LzvFLneSXneaXO8_ovXjIwVON5Y6jGi8ZQjTeNoRpvG0M1zhpDNd41hmp8aAzVOG8M1fjYGKrxqTHY-EdO_o86-T9ynn_" - "Uef6RU_qjTumPrKU_ai1NJeZUxazsy8ZQjVeNoRqvG0M13jaGapw1hmq8bwzVOG8M1Zg1hmosGkM1lo3Bxpu_" - "eLuAoRqTxlCNZ42hGq8bQzVOG0M1zhtDNT42hmp8agzV-NwYqvGlMVRj0RhsvJWPeas-" - "5q18olv1iSr7vDFU40VjqMa0MVTjZWOoxqvGUI3TxlCNN42hGm8bQzXOGkM13jWGarxvDNX40Biqcd4YqvGxMVTjU2OoxufGUI0vjaEas8ZQjX" - "ljqMaiMVRj2RhsnMkUz9QUz2SKZ2qKZzKbMzWbM5nNmZrNmczmTM1mZV83hmq8aQzVeNcYqvG-" - "MVTjvDFU43NjqMayMdh4JyvkTq2QeynIvSrIvXz2e_XZ7-Wz36vPfi-f_V599sq-" - "agzVOG0M1XjTGKrxtjFU46wxVOO8MVTjY2OoxqfGUI1ZY6jGojHY-" - "CBVelBVmkuV5qpKc5nNuZrNuZzSXJ3SXCZuriZuLqc0V6f0KNkfVfbKThpDNZ41hmo8bwzVeNEYqvGyMVTjVWOoxuvGUI1_" - "GkM1ThtDNd40hmq8bQzVOGsM1XjXGKpx3hiq8bExVONTY6jGl8ZQjXljqMaiMVRj2RhsfJKJe1IT9yRz9KTm6Enm6EnNUWWnjaEaLxtDNV41hm" - "r80xiqcdoYqvGmMVTjbWOoxlljqMa7xlCN88ZQjU-NoRpfGkM1Zo2hGsvGYOOzFPlZFflZqvSsqvQsn-hZfaJn-" - "UTP6hM9y7J5VsvmWeb9Wc37s5zSszqlFzmlF3VKLzLvL2reK_" - "uiMVTjZWOoxuvGUI2zxlCNz43BxkzWUqbWUiYfM1MfM5cVkqsVUsh5Fuo8C5nNQs1mKZ-9VJ-9lMqXqvKlTHHZTvH23f_3_X3y9_Hz7-" - "P338c1uezsXDB49vfx6-_jbtFg07lg8Pzv45J-brDprAb_4_AE_2E3_ts2ZfJv25TLv21TIf-2TaX8i6ajpzp8_W_blMm_bVMu_" - "7ZNhfzbNpXyL5qOv9Th63_bpkz-bZty-bdtKuTftqmUf-umdYZfb8OvM_x6G36d4dfb8OsMv96GX2f49Tb8BsNvtOE3GH6jDb_B8Btt-" - "A2G32jDbzD8Rht-k-E32_CbDL_Zht9k-M02_CbDb7bhNxl-s_3P-W195H8TsDZUY9YYqjFvDNVYNIZqLBuD63sg__" - "HBgfoPEA7kP0I4UP8hwgET1YZqLBpDNZaNwcYPkuiDSvRBEn1QiT5Iog8q0QdJ9EEl-" - "iCJPqhEK5JoRSVakUQrKtGKJFpRiVYk0YpKtCKJVlSiNUm0phKtSaI1lWhNEq2pRGuSaE0lWpNEayrRF0n0RSX6Iom-" - "qERfJNEXleiLJPqiEn2RRF9UonVJtK4SrUuidZVoXRKtq0TrkmhdJVqXROsq0YYk2lCJNiTRhkq0IYk2VKINSbShEm1Ioo020VCW91At76Es76" - "Fa3kNZ3kO1vIeyvIdqeQ9leQ_V8h7K8h6q5T2U5T1Uy3soy3uolvdQlvdQLe-hLO-hWt7DVUm0qhKtSqJVlWhVEq2qRKuSaFUlWpVEqyqRLO-" - "hWt5DWd5DtbyHsryHankPZXkP1fIeyvIequU9_CSJPqlEnyTRJ5XokyT6pBJ9kkSfVKJPkuiTSvRZEn1WiT5Los8q0WdJ9Fkl-" - "iyJPqtEnyXRZ5VILtihumCHcsEO1QU7lAt2qC7YoVywQ3XBDuWCHaoLdigX7FBdsEO5YIfqgh3KBTtUF-" - "xQLtihumCHcsEO1QU7lAt2qC7YoVywQ3XBDuWCHaoLdigX7FBdsEO5YIf6gt2URJsq0aYk2lSJNiXRpkq0KYk2VaJNSaSesMMtSbSlEm1Joi2V" - "aEsSbalEW5JoSyXakkRbKtG2JNpWibYl0bZKtC2JtlWibUm0rRJtS6JtleirJPqqEn2VRF9Voq-" - "S6KtK9FUSfVWJvkqiryrRRBJNVKKJJJqoRBNJNFGJJpJoohJNJNFEJUokUaISJZIoUYkSSZSoRIkkSlSiRBIlKtGZJDpTic4k0ZlKdCaJzlSiM" - "0l0phKdSaIzlehcEp2rROeS6FwlOpdE5yrRuSQ6V4nOJdG5SpRKolQlSiVRqhKlkihViVJJlKpEqSRKVaJLSXSpEl1KokuV6FISXapEl5LoUiW" - "6lESXKtGVJLpSia4k0ZVKdCWJrlSiK0l0pRJdSaIrlehaEl2rRNeS6FolupZE1yrRtSS6VomuJdG1SjSVRFOVaCqJpirRVBJNVaKpJJqqRFNJN" - "FWJbiTRjUp0I4luVKIbSXSjEt1IohuV6EYS3ahEt5LoViW6lUS3KtGtJLpViW4l0a1KdCuJblWimSSaqUQzSTRTiWaSaKYSzSTRTCWaSaKZSnQ" - "nie5UojtJdKcS3UmiO5XoThLdqUR3kuhOJbqXRPcq0b0kuleJ7iXRvUp0L4nuVaJ7SXSvEj1IogeV6EESPahED5LoQSV6kEQPKtGDJHpQieaSa" - "K4SzSXRXCWaS6K5SjSXRHOVaC6J5irRoyR6VIkeJdGjSvQoiR5VokdJ9KgSPUqiR5Uok0SZSpRJokwlyiRRphJlkihTiTJJlLWJRu-" - "ZqDZUY9YYqjFvDNVYNIZqLBuDjbI_Gqn90Uj2RyO1PxrJ_mik9kcj2R-N1P5oJPujkdofjWR_NFL7o5Hsj0ZqfzSS_" - "dFI7Y9Gsj8aqf3RSPZHI7U_" - "Gsmbk5F6czKSNycj9eZkJG9ORurNyUjenIzUm5ORvDkZqTcnI9mIjdRGbCQbsZHaiI1kIzZSG7GRbMRGaiM2ko3YSG3ERrIRG6mN2Eg2YiO1ER" - "vJRmykNmIj2YiN1EZsJBuxkdqIjeSb6kh9Ux3JN9WR-qY6km-qI_VNdSTfVEfqm-" - "pIvqmO1DfV0VASDVWioSQaqkRDSTRUiYaSaKgSDSXRUCW6kEQXKtGFJLpQiS4k0YVKdCGJLlSiC0l00Sbak8fEnnpM7MljYk89JvbkMbGnHhN7" - "8pjYU4-JPXlM7KnHxJ48JvbUY2JPHhN76jGxJ4-" - "JPfWY2JPHxJ56TOzJY2JPPSb2niXRs0r0LImeVaJnSfSsEj1LomeV6FkSPbeJ9r8yUW2oxqwxVGPeGKqxaAzVWDYGG_" - "ck0Z5KtCeJ9lSiPUm0pxLtSaI9lWhPEu2pRPuSaF8l2pdE-yrRviTaV4n2JdG-" - "SrQvifbbRJHc6yJ1r4vkXhepe10k97pI3esiuddF6l4Xyb0uUve6SO51kbrXRXKvi9S9LpJ7XaTudZHc6yJ1r4vkXhepe10k97pI3esiuddF6l" - "4Xyb0uUve6SO51kbrXRXKvi9S9LpI3J5F6cxLJm5NIvTmJ5M1JpN6cRPLmJFJvTiJ5cxKpNyeRvDmJ1JuTSN6cROrNSSRvTiL15iSSNyeRenMS" - "yZuTSL05ieTNSaTenETy5iRSb04ieXMSqTcnkbw5idSbk0jenETqzUkkb04i9eYkkjcnkXpzEsmbk0i9OYnkzUmk3pxE8uYkUm9OInkeRep5FM" - "nzKFLPo0ieR5F6HkXyPIrU8yiS51GknkfjX0xUG6oxawzVmDeGaiwaQzWWjcFGeUyM1WNiLI-" - "JsXpMjOUxMVaPibE8JsbqMTGWx8RYPSbG8pgYq8fEWB4TY_" - "WYGMtjYqweE2N5TIzVY2Isj4mxekyMZTcxVruJsewmxmo3MZbdxFjtJsaymxir3cRYdhNjtZs4esdEtaEas8ZQjXljqMaiMVRj2RhslAv2SF2w" - "R3LBHqkL9kgu2CN1wR7JBXukLtgjuWCP1AUbS6JYJYolUawSxZIoVoliSRSrRLEkinUiuY5idR3Fch3F6jqK5TqK1XUUy3UUq-" - "solusoVtdRfCiJDlWiQ0l0qBIdSqJDlehQEh2qRIeS6FAliiRRpBJFkihSiSJJFKlEkSSKVKJIEkUq0VgSjVWisSQaq0RjSTRWicaSaKwSjSXR" - "WCU6kkRHKtGRJDpSiY4k0ZFKdCSJjlSiI0l0pBIdS6JjlehYEh2rRMeS6FglOpZExyrRsSQ6VolOJNGJSnQiiU5UohNJdKISnUiiE5XoRBKdqE" - "TfJNE3leibJPqmEn2TRN9Uom-S6JtK9E0SfVOJTiXRqUp0KolOVaJTSXSqEp1KolOV6FQSnapE8oI9Vi_YY3nBHqsX7LG8YI_VC_" - "ZYXrDH6gV7LC_YY_WCPZ5KoqlKNJVEU5VoKommKtFUEk1VoqkkmqpE8gYyVm8gY3kDGas3kLG8gYzVG8hY3kDG6g1kLG8gY_" - "UGMpY3kLF6AxnLG8hYvYGM5Q1krN5AxvIGMlZvIGN5AxmrN5CxvIGM1RvIWN5AxuoNZCxvIGP1BjKWN5CxegMZyxvIWL2BjOU7Q6y-" - "M8TynSFW3xli-c4Qq-8MsXxniNV3hli-" - "M8TqO0Ms3xli9Z0hlu8MsfrOEMt3hlh9Z4jlO0OsvjPE8p0hVt8ZYvnOEKvvDLF8Z4jVd4ZYvjPE6jtDLN8ZYvWdIZbvDLH6zhDLG8hYvYGM5Q" - "1krN5AxvIGMlZvIGN5AxmrN5CxvIGM1RvIWN5AxuoNZCxvIGP1BjKWN5CxegMZyxvIWL2BjOUNZKzeQMZPkuhJJXqSRE8q0ZMkelKJniTRk0r0" - "JImeVKJcEuUqUS6JcpUol0S5SpRLolwlyiVRrhIVkqhQiQpJVKhEhSQqVKJCEhUqUSGJijbRb1kMv9Vi-C2L4bdaDL9lMfxWi-" - "G3LIbfajH8lsXwWy2GiVxHE3UdTeQ6mqjraCLX0URdRxO5jibqOprIdTRR19FErqOJuo4mch1N1HU0ketooq6jiVxHE3UdTeQ6mqjraCLLe6KW" - "90SW90Qt74ks74la3hNZ3hO1vCeyvCdqeU9keU_U8p7I8p6o5T2R5T1Ry3siy3uilvdElvdELe_" - "JiyR6UYleJNGLSvQiiV5UohdJ9KISvUiilzZRIrvyRO3KE9mVJ2pXnsiuPFG78kR25YnalSeyK0_" - "UrjyRXXmiduWJ7MoTtStPZFeeqF15IrvyRO3KE9mVJ2pXnshuIlG7iUR2E4naTSSym0jUbiKR3USidhOJ7CYStZtI5C1xot4SJ_" - "KWOFFviRN5S5yot8SJvCVO1FviRN4SJ-" - "otcTKSRCOVaCSJRirRSBKNVKKRJBqpRCNJNFKJdiTRjkq0I4l2VKIdSbSjEu1Ioh2VaEcS7ahEu5JoVyXalUS7KtGuJNpViXYl0a5KtCuJdlUi" - "eaeaqHeqibxTTdQ71UTeqSbqnWoi71QT9U41kXeqiXqnmsg71US9U03knWqi3qkm8k41Ue9UE3mnmqh3qom8U03UO9XkQBIdqEQHkuhAJTqQRA" - "cq0YEkOlCJDiTRgUokm-VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y4lslhO1WU5ks5yozXIim-" - "VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y4lslhO1WU5ks5yozXIim-" - "VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y4lslhO1WU5ks5yozXIim-" - "VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y6n8Dpuq32FT-R02Vb_DpvI7bKp-h03ld9hU_Q6byu-wqfodNpU_" - "w07Vn2Gn8mfYqfoz7FT-DDtVf4adyp9hp-rPsFP5M-xU_Rl2Kj-CpOpHkFR-BEnVjyCp_AiSqh9BUvkRJFU_" - "gqTyI0iqfgRJp5JoqhJNJdFUJZpKoqlKNJVEU5VoKommKpFsllO1WU5ls5yqzXIqm-" - "VUbZZT2SynarOcymY5VZvlVDbLqdosp7JZTtVmOZXNcqo2y6lsllO1WU5ls5yqzXIqm-" - "VUbZZT2SynarOcymY5VZvlVDbLqdosp7JZTtVmOZXNcqo2y6lsllO1WU5ls5yqzXIqm-VUbZZT2SynarOcypf8VH3JT-VLfqq-5KfyJT9VX_" - "JT-ZKfqi_5qXzJT9WX_FS-5KfqS34qX_JT9SU_lS_5qfqSn8qX_FR9yU_lS36qvuSnsj9K1f4olf1RqvZHqeyPUrU_SmV_" - "lKr9USr7o1Ttj1LZTaRqN5HKbiJVu4lUdhOp2k2ksptI1W4ild1Eqv9c5-wf7zb_cRL_rX_J_-R73fJ3f1fjguGj9eUDevWpmH_" - "xf5le7KBrgcdCx0TbQZePkSyOsSDUwogLznvx6S__FJ0fZsFnWvzRln_Czg-6_PN2fuxzn-Z8YfzzpR_7vOtjn_vzOe86kQUf-7zrY58v_" - "djniz92dUWaq4bXqu5pL5RXO7vCZl0juzu7wuZdI7s7u8IWXSO7O7vCll0juzuXhG3uOB2T82afHrmWzdibfXrkWjaNb_" - "bpkWvZ3L7Zp0euZRP-Zp8g11-" - "n8cmSWQi6OgfmHV2dA4uOrs6BZUeXGpgtvWVlXbeshZ1dYbOukd2dXWHzrpHdnV1hi66R3Z1dYcuukd2dS8IuvB0FAd7s0yPXshl7s0-" - "PXMum8c0-PXItm9s3-_TItWzC3-wT5LIX-0tHV-" - "fAvKOrc2DR0dU5sOzoUgPzpbesvOuWtbCzK2zWNbK7syts3jWyu7MrbNE1sruzK2zZNbK7c0nYhbejIMCbfXrkWjZjb_" - "bpkWvZNL7Zp0euZXP7Zp8euZZN-" - "Jt9glxLblkLujoHZh1dnQOLjq7OgWVHlxpYLL1lFV23rIWdXWGzrpHdnV1h866R3Z1dYYuukd2dXWHLrpHdnUvCLrwdBQHe7NMj17IZe7NPj1z" - "LpvHNPj1yLZvbN_v0yLVswt_sE-Racsta0NU5MOvo6hyYd3R1Diw7utTAcuktq-" - "y6ZS3s7AqbdY3s7uwKm3eN7O7sClt0jezu7Apbdo3s7lwSduHtKAjwZp8euZbN2Jt9euRaNo1v9umRa9ncvtmnR65lE_" - "5mnyDXklvWgq7OgVlHV-fAvKOrc2DR0cWB5-aSUi3t1bKwcdHw80WeixsXDDe_aQUDevV1xFx0Er36VMy_-CNI8GvMgp9hFv_-" - "on94CX5xWfBTy-LfWBb8uLL4VxW2Ljjvxae__FN0fpgFn2nxR1v-CTs_6PLPu-Rj_7XsxyTV4x_" - "ASzu7wmZdI7s7u8LmXSO7O7vCFl0juzu7wpZdI7s7l4U975qV1zu7wi6dldc7u8IunZXXO7vCLp2V1zu7wi6dldc7l4R134cWBHizT49cy2bsz" - "T49ci2bxjf79Mi1bG7f7NMj17IJf7PPK7m6Ltw3-_TI9dq89_bpkeu1ee_t0yPXa_Pe26dHrtfmvbdPkGvB1-IlXZ0D846uzoFFR1fnwLKja-" - "lAt9KCrs6BSz7jotVie5d8xkVTb3uXfMZwHhf__q16Fn_L6vr9e2HYrGtkd2dX2LxrZHdnV9iia2R3Z1fYsmtkd-eysOdds_" - "J6Z1fYpbPyemdX2KWz8npnV9ils_J6Z1fYpbPyeueSsAu_Qb32Jwuv-fTItWzG3uzTI9eyaXyzT49cy-b2zT49ci2b8Df7vJKr68J9s0-PXK_" - "Ne2-fHrlem_fePj1yvTbvvX165Hpt3nv7BLkWvLVc0tU5MO_" - "o6hxYdHR1Diw7upYOdKs66OocuOQzLlotS75lLejqHLjkM4bzuPhPdlTP4m9ZXX-" - "yszBs1jWyu7MrbN41sruzK2zRNbK7syts2TWyu3NZ2POuWXm9syvs0ll5vbMr7NJZeb2zK-" - "zSWXm9syvs0ll5vXNJ2IXfoF77K6vXfHrkWjZjb_bpkWvZNL7Zp0euZXP7Zp8euZZN-Jt9XsnVdeG-" - "2adHrtfmvbdPj1yvzXtvnx65Xpv33j49cr027719glxLvmUt_wu8xb1ZR1fnwKKjq3Ng2dG1dKBb1cu_" - "ZfneJZ9x0cpc8i1rQVfnwCWfMZzHxX9lqHoWf8vq-" - "ivDhWGzrpHdnV1h866R3Z1dYYuukd2dXWHLrpHdncvCnnfNyuudXWGXzsrrnV1hl87K651dYZfOyuudXWGXzsrrnUvCLvwG9dofhr7m0yPXshl" - "7s0-PXMum8c0-PXItm9s3-_TItWzC3-zzSq6uC_fNPj1yvTbvvX165Hpt3nv79Mj12rz39umR67V57-" - "0T5FryLWv5Hw0v7s06ujoH5h1dnQPLjq6lA92qXv4ty_cu-YyLVuaSl2ALujoHLvmM4TyW-" - "rFiprEMnhyvd3aFzbpGdnd2hc27RnZ3doUtukZ2d3aFLbtGdncuC3veNSuvd3aFXTorr3d2hV06K693doVdOiuvd3aFXTorr3cuCbvwG1QQ4M0" - "-PXItm7E3-_TItWwa3-zTI9eyuX2zT49cyyb8zT6v5Oq6cN_s0yPXa_Pe26dHrtfmvbdPj1yvzXtvnx65Xpv33j5BriXfshZ0dQ7MOro6B-" - "YdXZ0Di46upQPdql7-Lcv3LvmMi1bmkm9ZC7o6By75jGrNJEPdkwwXNInjXwv_6M_-l25fFi6c_j49cuU94vTy6ZGr6BGnl0-" - "PXGWPOL18luTqnIQenV1hl9W7R2dX2GWl7dHZFXZZFXt0BmH_Ot1aCdm5NBcS7x3LujoHZh1dnQPzjq7OgUVHV-fAsqNLDVzwpy22RIv_bKW_" - "T49ceY84vXx65Cp6xOnl0yNX2SNOL58luTonoUdnV9hl9e7R2RV2WWl7dHaFXVbFHp1BWH0vEXYuC-" - "8lC7o6B2YdXZ0D846uzoFFR1fnwLKjSw1c8AOuLdHiH2f7-_" - "TIlfWI08unR66iR5xePj1ylT3i9PJZkqtzEnp0doVdVu8enV1hl5W2R2dX2GVV7NEZhNX3EmHnsvBesqCrc2DW0dU5MO_" - "o6hxYdHR1Diw7utTABT9T2BIt_gmiv0-PXFmPOL18euTKe8Tp5dMjV9kjTi-" - "fJbk6J6FHZ1fYZfXu0dkVdllpe3R2hV1WxR6dQVh9LxF2LgvvJQu6OgdmHV2dA_OOrs6BRUdX58Cyo0sNXPAyzpZo8Yu2_" - "j49cmU94vTy6ZEr7xGnl0-" - "PXEWPOL18luTqnIQenV1hl9W7R2dX2GWl7dHZFXZZFXt0BmH1vUTYuSy8lyzo6hyYdXR1Dsw7ujoHFh1dnQPLjq56YP0_sILm9n_" - "2JGxb7JovalvsWixqW-xaLmpTrlnb_LKobbFrvqhtsWuxqG2xa7moTbnmC841X3yu-" - "YIpyBdPQb7gXPPF55ovONd88bkWC861WHyuxYJzLRafa7FgCorFU1AsONdi8bmWC861XHyu5YJzLRefa7ngXMvF51oumILSTUH9v4Qy3lOm6dh" - "Xpu44_" - "qRM1fHX6UahbdO1OdO27cq0bbq2drRtu2Jt264zbZuu7VTbtutK26Zr9KJt25Vp23TtJtq2XZfaNl3jd9q2XSNtm67JH23brkzbtivXtnTx5iY" - "ro0XnsB9g6MCV0mLg0KwYxc6FK0exd8lCdi5cSYq9SxyydzkL2blwhSn2LlchO5fRS8jeJQvZuXAFKvYulyE7F65Ixd5lFLJz4QpV7F2ykL1LH" - "rJyyeyqzdyqzeyqzdyqzeyqzdyqzYJVK-" - "xc2lUr7F2ykJ1Lu2qFvUscsnc5C9m5tKtW2Ltchexc2lUr7F2ykJ1Lu2qFvctlyM6lXbXC3mUUsnNpV62wd8lC9i55yMolt6s2d6s2t6s2d6s2" - "t6s2d6s2D1atsHNpV62wd8lCdi7tqhX2LnHI3uUsZOfSrlph73IVsnNpV62wd8lCdi7tqhX2LpchO5d21Qp7l1HIzqVdtcLeJQvZu-" - "QhK5fCrtrCrdrCrtrCrdrCrtrCrdoiWLXCzqVdtcLeJQvZubSrVti7xCF7l7OQnUu7aoW9y1XIzqVdtcLeJQvZubSrVti7XIbsXNpVK-" - "xdRiE7l3bVCnuXLGTvkoesXEq7aku3aku7aku3aku7aku3astg1Qo7l3bVCnuXLGTn0q5aYe8Sh-" - "xdzkJ2Lu2qFfYuVyE7l3bVCnuXLGTn0q5aYe9yGbJzaVetsHcZhexc2lUr7F2ykL1LHjJdztsVe25W63m7Us_NKj1vV-" - "i5WZ3namWKbbrqFSm27cq0bbrqFSi27Yq1bbvOtG266pUmtu260rbpqleW2LYr07bp2k20bbsutW266pUjtu0aadt01StFbNuVadt25dqWrr_" - "MHl2hc9gPMHTgSmkxcGhWjGLnwpWj2LtkITsXriTF3iUO2buchexcuMIUe5erkJ3L6CVk75KF7Fy4AhV7l8uQnQtXpGLvMgrZuXCFKvYuWcjeJ" - "Q9Zuag9ukLnsB9g6NCuWrtHlxa9aoM9etvUrtpgj66aspCdS7tqgz26aopD9i5nITuXdtUGe3TVdBWyc2lXbbBHV01ZyM6lXbXBHl01XYbsXNp" - "VG-zRVdMoZOfSrtpgj66aspC9Sx6yclF7dIXOYT_" - "A0KFdtXaPLi161QZ79LapXbXBHl01ZSE7l3bVBnt01RSH7F3OQnYu7aoN9uiq6Spk59Ku2mCPrpqykJ1Lu2qDPbpqugzZubSrNtijq6ZRyM6lX" - "bXBHl01ZSF7lzxk5aL26Aqdw36AoUO7au0eXVr0qg326G1Tu2qDPbpqykJ2Lu2qDfboqikO2buchexc2lUb7NFV01XIzqVdtcEeXTVlITuXdtU" - "Ge3TVdBmyc2lXbbBHV02jkJ1Lu2qDPbpqykL2LnnIykXt0RU6h_0AQ4d21do9urToVRvs0dumdtUGe3TVlIXsXNpVG-" - "zRVVMcsnc5C9m5tKs22KOrpquQnUu7aoM9umrKQnYu7aoN9uiq6TJk59Ku2mCPrppGITuXdtUGe3TVlIXsXfKQaxf8fw3WK1ZM07GvTN2BFSqm" - "6uDKbGzThRXZ2LYr07bpwgpsbNsVa9t2nWnbdGGlNbbtutK26Rq9aNt2Zdo2XVhJjW27LrVturByGtt2jbRturBSGtt2Zdq2Xbm2pesvvUfX6B" - "z2AwwduFJaDByaFaPYuXDlKPYuWcjOhStJsXeJQ_" - "YuZyE7F64wxd7lKmTnMnoJ2btkITsXrkDF3uUyZOfCFanYu4xCdi5coYq9Sxayd8lDVi7tHl2jc9gPMHRoV63ZozctetXaPbpqalet3aPrpixk" - "59KuWrtH101xyN7lLGTn0q5au0fXTVchO5d21do9um7KQnYu7aq1e3TddBmyc2lXrd2j66ZRyM6lXbV2j66bspC9Sx6ycmn36Bqdw36AoUO7as" - "0evWnRq9bu0VVTu2rtHl03ZSE7l3bV2j26bopD9i5nITuXdtXaPbpuugrZubSr1u7RdVMWsnNpV63do-" - "umy5CdS7tq7R5dN41Cdi7tqrV7dN2Uhexd8pCVS7tH1-gc9gMMHdpVa_" - "boTYtetXaPrpraVWv36LopC9m5tKvW7tF1UxyydzkL2bm0q9bu0XXTVcjOpV21do-um7KQnUu7au0eXTddhuxc2lVr9-" - "i6aRSyc2lXrd2j66YsZO-" - "Sh6xc2j26RuewH2Do0K5as0dvWvSqtXt01dSuWrtH101ZyM6lXbV2j66b4pC9y1nIzqVdtXaPrpuuQnYu7aq1e3TdlIXsXNpVa_" - "fouukyZOfSrlq7R9dNo5CdS7tq7R5dN2Uhe5c85MrlH0dPf3HvFL2zFHYPLLXdmRmdhaMzMzoLR-dmdB6Ozs3oPBxdmNFFOLowo4twdGlGl-" - "Ho0owuzeh25P_i_" - "7mpHdgOkp5BPRnbHzioNU3HQJnSoSbHonMYBKgcMhshcxEyGyFzEXIbIXcRchshdxEKG6FwEQoboXARShuhdBFKG6E0EVba0Stm5Eo7asWOsLV" - "X6BwGASqHzEbIXITMRshchNxGyF2E3EbIXYTCRihchMJGKFyE0kYoXYTSRrC1_9KO_" - "mJGfmlHfbEjbO0VOodBgMohsxEyFyGzETIXIbcRchchtxFyF6GwEQoXobARChehtBFKF6G0EWzt120lFTqHQYDKIbMRMhchsxEyFyG3EXIXIbc" - "RchehsBEKF6GwEQoXobQRShehtBGCSqrR5p7f9A1Mn4zbsDOg0DkMAlQOmY2QuQiZjZC5CLmNkLsIuY2QuwiFjVC4CIWNULgIpY1QugiljWBnY" - "EONDmdgQw0MZmB43YwT03QMlCkdZs40OodBgMohsxEyFyGzETIXIbcRchchtxFyF6GwEQoXobARChehtBFKF6G0EcycDf-0o_-YkX_aUX_" - "MiGk7YmpGTNsRUzvCztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdZNO_" - "rGjLxpR93YEbb2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672s3b0zIyctaNmdoSt_" - "czVfmZrP3O1n9naz1ztZ7b2M1f7ma39zNV-Zms_c7Wf2drPXO1ntvYzV_uZrf3M1X5maz9ztZ-3o-dm5LwdNbcjbO3nrvZzW_u5q_3c1n7uaj-" - "3tZ-72s9t7eeu9nNb-7mr_dzWfu5qP7e1n7vaz23t5672c1v7eVj70ftmtJimY6BM6TC11-" - "gcBgEqh8xGyFyEzEbIXITcRshdhNxGyF2EwkYoXITCRihchNJGKF2E0kawtR-0owdm5KAdNbAjbO0HrvYDW_uBq_3A1n7gaj-wtR-" - "42g9s7Qeu9gNb-4Gr_" - "cDWfuBqP7C1H7jaD2ztB672A1v7gav9ajt61YxcbUet2hG29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu" - "29quu9qu29quu9mvt6DUzcq0dtWZH2Nqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvhbXfu" - "zeV1OgcBgEqh8xGyFyEzEbIXITcRshdhNxGyF2EwkYoXITCRihchNJGKF2E0kYIKqlGB_" - "th9g1MH8dFH5txYpqOgTKlw8yZRucwCFA5ZDZC5iJkNkLmIuQ2Qu4i5DZC7iIUNkLhIhQ2QuEilDZC6SKUNoKZs6i960fmrh-1d_" - "1o1Y6wtXd3_cje9SN314_sXT9yd_3I3vUjd9eP7F0_cnf9yN71I3fXj-xdP3J3_cje9SN314_sXT9yd_3I3vUjd9eP2rt-" - "ZO76UXvXj9bsCFt7d9eP7F0_cnf9yN71I3fXj-xdP3J3_cje9SN314_sXT9yd_3I3vUjd9eP7F0_cnf9yN71I3fXj-xdP3J3_" - "ah9eyqm6RgoUzps7d2b68i-uY7cm-vIvrmO3JvryL65jtyb68i-uY7cm-vIvrmO3JvryL65jtyb68i-uY7cm-" - "vIvrmO3JvryL65jtyb62izHb1pRm62ozbtCFv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7" - "TVf7rXb0lhm51Y7asiNs7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bfC2o9_" - "NaPFNB0DZUqHqb1G5zAIUDlkNkLmImQ2QuYi5DZC7iLkNkLuIhQ2QuEiFDZC4SKUNkLpIpQ2gq39XTv6zoy8a0fd2RG29neu9ne29neu9ne29n" - "eu9ne29neu9ne29neu9ne29neu9ne29neu9ne29neu9ne29neu9ne29neu9u2-" - "QEzTMVCmdNjauz2ZahkEqBwyGyFzETIbIXMRchshdxFyGyF3EQoboXARChuhcBFKG6F0EUobwdb-oR39YEY-tKMe7Ahb-wdX-wdb-wdX-wdb-" - "wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-" - "4ew9vGkGS2m6RgoUzpM7TU6h0GAyiGzETIXIbMRMhchtxFyFyG3EXIXobARChehsBEKF6G0EUoXobQRbO3be05s7jlxe8-J7-" - "0IW3t3z4ntPSd295zY3nNid8-J7T0ndvec2N5zYnfPie09J3b3nNjec2J3z4ntPSd295zY3nNid8-J7T0ndvecuP31Kja_XsXtr1fx3I6wtXe_" - "XqmWQYDKIbMRMhchsxEyFyG3EXIXIbcRchehsBEKF6GwEQoXobQRShehtBFs7R_b0Y9m5GM76tGOsLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_" - "tLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_akc_mZFP7agnO8LW_snV_snW_snV_snW_snV_snW_snV_snW_snV_snW_snV_" - "snW_snV_snW_snV_snW_snV_snW_snVXtXAfn712e3nVp_" - "Zfl71We3nzO1s5W62cjtbuZut3M5W7mYrt7OVu9nK7WzlbrZyO1u5m63czlbuZiu3s5W72crtbOVutnI7W7mbLZXf5lZ5bc7C1r5wtS9s7QtX-" - "8LWvnC1L2ztC1f7wta-cLUvbO0LV_vC1r5wtS9s7QtX-8LWvnC1L2zti7D2k_YJMTFPiEn7hJg82hGm9hP3hJjYJ8TEPSEm9gkxcU-" - "IiX1CTNwTYmKfEBP3hJjYJ8TEPSEm9gkxcU-IiX1CTNwTYmKfEBP3hJjYJ8TEPSEm7RNiYp4Qk_YJMXmyI2zt3RNiYp8QE_" - "eEmNgnxMQ9ISb2CTFxT4iJfUJM3BNiYp8QE_eEmNgnxMQ9ISb2CTFxT4iJfUJM3BNiYp8QE_" - "eESNq3zmKajoEypcPUXqNzGASoHDIbIXMRMhshcxFyGyF3EXIbIXcRChuhcBEKG6FwEUoboXQRShvB1r596yym6RgoUzps7d1bZ9UyCFA5ZDZC" - "5iJkNkLmIuQ2Qu4i5DZC7iIUNkLhIhQ2QuEilDZC6SKUNoKt_" - "XY72vwkTxooUzps7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7Xfb0btm5G47ateOsLX" - "fdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXfb0fvm5H77ah9O8LWft_Vft_Wft_Vft_" - "Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_V_qAdfWBGHrSjDuwIW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_" - "sDW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_" - "vDdvShGXnYjjq0I2ztD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13to3Z0ZEZG7ajIjrC1" - "j1ztI1v7yNU-srWPXO0jW_vI1T6ytY9c7SNb-8jVPrK1j1ztI1v7yNU-srWPXO0jW_vI1X7cjh6bkeN21NiOsLUfu9qPbe3HrvZjW_uxq_" - "3Y1n7saj-2tR-72o9t7ceu9mNb-7Gr_djWfuxqP7a1H7vaj23tx672R-3oIzPyqB11ZEfY2h-52h_Z2h-52h_Z2h-52h_Z2h-52h_Z2h-52h_" - "Z2h-52h_Z2h-52h_Z2h-52h_Z2h-52h_Z2h-52h-3o4_NyON21LEdYWt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_" - "bGt_7Gp_bGt_7Gp_bGt_7Gp_0o4-MSNP2lEndoSt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_" - "Ymt_Ymr_bd29Dcz8ls76psZcdqOODUjTtsRp3qE_A9uTrVtu260bbtutW27ZtqWLs50k0-xd7kJ2bvchuxdZiErlyw4l8yfSxacS-" - "bPJQvOJfPnkgXnkvlzyYNzyf255MG55P5c8uBccn8ueXAuuT-XIjiXwp9LEZxL4c-lCM6l8OdSBOdS-HMpg3Mp_bmUwbmU_" - "lzK4FxKfy5lcC6lPZdzdR7n9hzOVf5zm_tc5T23Oc9VvvMgV3CdaPYuNyF7l9uQvcssZOWSBeeS-XPJgnPJ_Llkwblk_" - "lyy4Fwyfy55cC65P5c8OJfcn0senEvuzyUPziX351IE51L4cymCcyn8uRTBuRT-XIrgXAp_LmVwLqU_lzI4l9KfSxmcS-nPpQzOxV4n8h-" - "enmrbdt1o23bdatt2zbQtXfY6MexdbkL2Lrche5dZyMolC84l8-eSBeeS-XPJgnPJ_Llkwblk_" - "lzy4Fxyfy55cC65P5c8OJfcn0senEvuz6UIzqXw51IE51L4cymCcyn8uRTBuRT-XMrgXEp_LmVwLqU_lzI4l9KfSxmci75O_nESg3Z_V-b_" - "4v9Z0JP2PH_SfSHVabfx36oYJzDrzr9J9f11uvFJdS5AOuPPxA-_K7Pu-PqpossjZbJjr_50z9pm16QdMzFj8KX_ZEWZvM28R4AD_G9MvJeTO-" - "B_vvLwGjg60za77mtMtc2uh_oTpto2d5itFW1XXf8_vFUDyA"); + "eJyNndlS40q3rV-lIvbduTp983b0UGAMNriRTVONsDCmcUNnUBOxH6X2A5wVcV7gSENjYM20pPov9JGfcqY0czotyaZY609j8O1PY_B_30_" + "SH8NsQ_NknG158y7b8uYk2_LmfbblzWm25c1FtqHZi7Itb8bZhmb_PNvyZifb0PQOsi1vfs-" + "2vHmYbXnzKNvyZiPb8uZxtuXNZrblTWx58zTb8mYr2_" + "JmO9vy5lm25c0k29AcnGVb3vyZbXnzLtvy5iTb8maUbXkzzjY0hzvZljd3sy1vNrMtb55nW968y7a8Oc-" + "2vLnItrz5km158yPb8maUbWhe7GZb3jzMtrx5lG158zbb0LxsZFvebGZb3jzLtrx5nm15s5NtebOXbWhedbItb3azLW_" + "2si1vTrMtbybZhub9MNvy5kW2oflwmm15s5NtWfOf640dIJftHLnsNQFKC6C0AcoZQDkHKB2A0gUoPYDSBygeQBkAuRxsApQBQHkCKHOAsgAoz" + "wDlBaC8ApR3gLIEKB9ALt9PAUoLyKWxAVA2AcoWQNkGKDsAZReg7AGUfYByAFC-" + "A5RDgHIEUBoA5RigNAFKDsopQGkBlDZAOQMo5wClA1C6AKUHUPoAxQMoA4AyBCgXAOUSoFwBlGuA8gOgPACUR4DyBFCmAGUGUOYAZQFQngHKC0" + "B5AyjvAGUJUD4AyidACQFKBFBigJIAuRxvAJRNgLIFULYByg5A2QUoewBlH6AcAJTvAOUQoBwBlAZAOQYoTYCSg3IKUFoApQ1QzgDKOUDpAJQu" + "QOkBlD5A8QDKAKAMAcoFQLkEKFcA5Rqg_" + "AAoPwHKL4DyG6D4AOUGoIwASgBQbgHKGKDcAZQJQLkHKA8A5RGgPAGUKUCZAZQ5QFkAlGeA8gJQXgHKG0B5ByhLgPIBUD4BSghQYoCSALk0NwD" + "KJkDZAijbAGUHoOwClD2Asg9QDgDKd4ByCFCOAEoDoBwDlCZAyUE5BSgtgNIGKGcA5QdA-" + "QlQfgGU3wDFByg3AGUEUAKAcgtQxgDlDqBMAMo9QHkAKI8A5QmgTAHKDKDMAcoCoDwDlBeA8gpQ3gDKO0BZApQPgPIJUEKAEgGUGKAkQC4nGwB" + "lE6BsAZRtgLIDUHYByh5A2QcoBwDlO0A5BCg5KKcApQVQ2gDlDKD8ACg_" + "AcovgPIboPgA5QagjABKAFBuAcoYoNwBlAlAuQcoDwDlEaA8AZQpQHkGKO8AZQlQPgDKJ0AJAUoEUGKAkgC5nG4AlE2AsgVQtgHKDkDZBSh7AG" + "UfoBwAlO8A5RCgHAGUBkA5BihNgJKDcgpQWgClDVDOAMo5QOkAlC5A6QGUPkDxAMoAoAwBygVAuQQoVwDlGqD8ACg_" + "AcovgPIboPgA5QagjABKAFBuAcoYoNwBlAlAuQcoDwDlEaA8AZQpQJkBlDlAWQCUZ4DyAlBeAcobQHkHKEuA8gFQPgFKCFAigBIDubQ2AMoWQN" + "kGKDsAZReg7AGUfYByAFC-A5RDgHIEUBoA5RigNAFKDsopQGkBlDZAOQMo5wClA1C6AKUHUPoAxQMoA4AyBCgXAOUSoFwBlGuA8gOg_" + "AQovwDKb4DiA5QbgDICKAFAuQUoY4ByB1AmAOUeoDwAlEeA8gRQpgBlBlDmAGUBUJ4BygtAeQUobwDlHaAsAcoHQPkEKCFAiQBKDFASIJf2BkD" + "ZBChbAGUboOwAlF2AsgdQ9gHKAUD5DlAOAcoRQGkAlGOA0gQoOSinAKUFUNoA5QygnAOUDkDpApQeQOkDFA-gDADKEKBcAJRLgHIFUK4Byg-" + "A8hOg_" + "AIovwGKD1BuAMoIoAQA5RagjAHKHUCZAJR7gPIAUB4ByhNAmQKUGUCZA5QFQHkGKC8A5RWgvAGUd4CyBCgfAOUToIQAJQIoMUBJgFzONgDKJkD" + "ZAijbAGUHoOwClD2Asg9QDgDKd4ByCFCOAEoDoBwDlCZAyUE5BSgtgNIGKGcA5RygdABKF6D0AEofoHgAZQBQhgDlAqBcApQrgHINUH4AlJ8A5" + "RdA-Q1QfIByA1BGACUAKLcAZQxQ7gDKBKDcA5QHgPIIUJ4AyhSgzADKHKAsAMozQHkBKK8A5Q2gvAOUJUD5ACifACUEKAmQy_" + "kGQNkEKFsAZRug7ACUXYCyB1D2AcoBQPkOUA4ByhFAaQCUY4DSBCg5KKcApQVQ2gDlDKCcA5QOQOkClB5A6QMUD6AMAMoQoFwAlEuAcgVQrgHK" + "D4DyE6D8Aii_" + "AYoPUG4AygigBADlFqCMAcodQJkAlHuA8gBQHgHKE0CZApQZQJkDlAVAeQYoLwDlFaC8AZR3gLIEKB8A5ROghAAlAnLpHAGUBkA5BihNgHIKUF" + "oApQ1QzgDKOUDpAJQuQOkBlD5A8QDKAKAMAcoFQLkEKFcA5Rqg_" + "AAoPwHKL4DyG6D4AOUGoIwASgBQPoBcuh2A0gUoPpBL7xOghAAlAigxQEmAXPobAGUToGwBlG2AsgNQdgHKHkDZBygHAOU7QDkEKEcApQFQjgF" + "KE6DkoJwClBZAaQOUM4ByDlA6AKULUHoApQ9QPIAyAChDgHIBUC4ByhVAuQYoPwDKT4DyC6D8Big-" + "QLkBKCOAEgCUW4AyBih3AGUCUO4BygNAeQQoTwBlClBmAGUOUBYA5RmgvACUV4DyBlDeAcoSoHwAlE-" + "AEgKUCKDEACUBcvE2AMomQNkCKNsAZQeg7AKUPYCyD1AOAMp3gHIIUI4ASgOgHAOUJkDJkctgA6BsApQtgLINUHYAyi5A2QMo-" + "wDlAKB8ByiHAOUIoDQAyjFAaQKUHJRTgNICKG2AcgZQzgFKB6B0AUoPoPQBigdQBgBlCFAuAMolQLkCKNcA5QdA-" + "QlQfgGU3wDFByg3AGUEUAKAcgtQxgDlDqBMAMo9QHkAKI8A5QmgTAHKDKDMAcoCoDwDlBeA8gpQ3gDKO0BZApQPgPIJUEKAEgGUGKAkQC7DDYC" + "yCVC2AMo2QNkBKLsApQFQTgFKC6C0AUoHoHQBSg-gXACUS4ByBVCuAcoEoNwDlGeA8gJQXgHKG0B5ByhLgPIBUD4BSgjkcv0DoPwEKL8Aym-" + "A4gOUG4AyAigBQLkFKGOAcgdQJgBlCuTiNwDKMUBpApQclFOA0gIobYByBlDOAUoHoHQBSg-g9AGKB1AGAGUIUC4AyiVAuQIo1wDlB0D5CVB-" + "AZTfAMUHKDcAZQRQAoByC1DGAOUOoEwAyj1AeQAojwDlCaBMAcoMoMwBygKgPAOUF4DyClDeAMo7QFkClA-" + "AEgKUCKDEACUBcrnZACibAGULoGwDlB2AsgtQ9gHKAUD5DlAOAcoRQGkAlGOA0gQoOSinAKUFUNoA5QygnAOUDkDpApQeQOkDFA-" + "gDADKEKBcAJRLgHIFUK4Byg-A8hOg_" + "AIovwGKD1BuAMoIoAQA5RagjAHKHUCZAJR7gPIAUB4ByhNAmQKUGUCZA5QFQHkGKC8A5RWgvAGUd4CyBCgfAOUToIQAJQIoMUBJgFxGGwBlE6B" + "sAZRtgLIDUHYByh5A2QcoBwDlO0A5BChHAKUBUI4BShOg5KCcApQWQGkDlDOAcg5QOgClC1B6AKUPUDyAMgAoQ4ByAVAuAcoVQLkGKD8Ayk-" + "A8gug_" + "AYoPkC5ASgjgBIAlFuAMgYodwBlAlDuAcoDQHkEKE8AZQpQZgBlDlAWAOUZoLwAlFeA8gZQ3gHKEqB8AJRPgBIClAigxAAlAXIJNgDKJkDZAij" + "bAGUHoOwClD2Asg9QDgDKd4ByCFCOAEoDoBwDlCZAyUE5BSgtgNIGKGcA5RygdABKF6D0AEofoHgAZQBQhgDlAqBcApQrgHINUH4AlJ8A5RdA-" + "Q1QfIByA1BGACUAKLcAZQxQ7gDKBKDcA5QHgPIIUJ4AyhSgzADKHKAsAMozQHkBKK8A5Q2gvAOUJUD5ACifACUEKBFAiQFKAuQyngKUGUCZA5Q" + "FQHkGKC8A5RWgvAGUd4CyBCgfAOUToIRALncbAGUToGwBlG2AsgNQdgHKHkDZBygHAOUUoLQAShugnAGUc4DSAShdgNIDKH2A4gGUAUAZApQLg" + "HIJUK4AyjVA-" + "QFQfgKUXwDlN0DxAcoNQBkBlACg3AKUMUC5AygTgHIPUB4AyiNAeQIoU4AyAyhzgLIAKM8A5QWgvAKUN4DyDlCWAOUDoHwClBCgRAAlAXKZbAC" + "UTYCyBVC2AcoOQNkFKE2AkoNyClBaAKUNUM4AyjlA6QCULkDpAZQ-QPEAygCgDAHKD4DyE6D8Aii_" + "AYoPUG4AygigBADlFqBMAcoMoMwBygKgPAOUF4DyClDeAMo7kMm_j7_9--O3Pxvhtz-b37_92fmVbstvf_" + "bO062Tbt1066VbP928dBun2923P43bb39Osr-rfUi3dPzJU7rN0m2ebu_plh7j5OPbn7Otb3-6aXx3km6v3_70NtLtM93S8_XTdn8z3dKY_" + "na67aRbM91a6Zaer3-Zbj_SLc2p_zvdRumWHqufnq-fnq-fnqefnqefnsdLj-Wlx_Gu0y0d46Xx3k26pWO8NFcvPaeX_" + "RlsO93SuQ3SuQ3SuQ3SuQ3SeQ2G6XaRbunYQZBu03RL5zM8SLfsj1rTnIZn6ZbOf5j2DbO-53R7S7c0j2Gax0V6_os0_iKt40Uj3Y7TLfsj1_" + "ScF-k5L9LzXaRzuviZbot0S8dfpnO-3E-3NN9L_9ufq7TPT_f7L9_-3O-m21667X_7j41pukXf_uOwl27ZCt7NlsputkR2sxvpbvb-" + "PcjenQf4a7lswTay5djIlmEjW36NbNk1suXWyK5-jeyq18iudo3sKtfAXwzhjyiy91Eze_" + "80sxM1s7dIM3trNLNreDO7dp9kj5Qn2aPkSfYIeZK9w0-yN-ZJ9oY8yQ5wkh3gJHvjnWRHOcmOcpId5SS7R5xk94aT7HgnOF62oE-" + "ytXuCf7KcTaaFf9SVJdTJHm072SNtJ7vQdrKZd7IRnWzpd7JhnSz7Tja2ky3tTnY57Ga30G42rJul283S7WbpdrPLTjerSzerRjcrYjd7f3Xxu" + "-WsiL3s0tbLLmm97LLUyy5Hvewy1Muy72XZ97Lse1mde9k1oJcdqpfl18tS6-Hb3ey8w-yUw6xCw-" + "ytN8yuK8Ns2DC7jgyzscPshRpmCQ2zV2aYTXC4-PZvf7Z_f_u39E2a_fxPAOU_A5T_AlD-K0D5bwDlvwOU_wFQ_idA-V8A5X8DlP8DUP653h-" + "l260aYzXu1Jioca_" + "GoxozNeZqPKvxqsabGu9qLNX4UCNUI1IjWzj7QSZqBGqM1bhTY6LGvRoPajyq8aTGTI25Ggs1ntV4VeNNjXc1lmp8qhGqEauB5G-V_" + "K3Ke6vkb5XzrXK-Vc63yjlrTNWYqTFXY6HGsxovaryp8aHGpxqhGpEasRrIeayqjpXYWKUbK5-" + "x0hjr7GMNv9OU7zTlOx3wTge800zvlOqdynun8t4p-YmqMVEaE6UxURoTpTHRAe-Vxr2Wzb0qf6987vUS3CuxeyV2r5Peq_L3Ote9Kn-" + "vgt9rtdwXz_6uxlKNDzVCNVD5B03nQad40CkedMAHHedBx3lUeR81r0fN61E5P-" + "qAjzrgowr1qJwfdYpH5fyocz3pgE86zpOGP2nuU8VMVcOpajhVDacaPlUa0-" + "LwNzVCNWI1sKJmeilneilnmvtMp5iphjMdcKbpzDSdmUqXNT7VwLnmOsVcR56rqnNNcK7VMtdM55rpXGefq_JzTXmuKc9VurnmPtdLMFfOc-" + "U8V85z5TxXznMVKmtEanzNAhVbaDoLTWehWSw0i4VmsVANF0p-" + "oVQXSnWhDBfKZ6FzPWumLzrpi871onO96FwvqtiLKvaik74Uj7NQ402NdzWWaoRqYO6vOvubzv6mWbxp-" + "JuSf9Pwd43KGoEat2qM1bhT416NBzUe1XhSY6rGTI25Ggs1ntV4U-" + "NdjaUan2pEasRqoPJLJb9UzkvlvFTll8p5qZyXSnWpVJdKdalUl0p1qVSXSnWpDJfKcKliLpXYhxL70Nk_dOQPHflDU_7QvD40_" + "FPDPzWvT70Enzrgpyr_qQN-6sUNNfdQp4g001jHiTWLROdKlGHC6Zw8_78fm0G6_Uq3m3R7pCdu5yLdfqfbc1nnW7rdMyjJPgXhj1rznyF_" + "RvwZ82eSfQLJ4_Az5M-IP2P-TLL_" + "CE8eh58hf0b8GfNnFnfEuCPGHTHuiHFHjGswrsG4BuMajGsw7phxx4w7Ztwx4475h7jNXf4VLxqhGpEasRqo3Jb-5HdLf-67pT_13dKf-" + "W4peFvB2wreVvC2grcVvKPgHQXvKHhHwTsK3lfwvoL3Fbyv4H0FHyr4UMGHCj5U8KGCjxR8pOAjBR8p-" + "EjBDQU3FNxQcEPBDQa3VLqWStdS6VoqXUula6l0LZWupdK1VLqWStfaU_" + "CegvcUvKfgPQWrdC2VrqXStVS6lkrXOlDwgYIPFHyg4AMFf1fwdwV_V_" + "B3BX9XsF6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6U1teLcqzgYwUfK_" + "hYwXqntJoKbiq4qeCmgpsKPlHwiYJPFHyi4BMFnyr4VMGnCj5V8KmCRwoeKXik4JGCRwoOFBwoOFBwoOBAwbcKvlXwrYJvFXyr4LGCxwoeK3is" + "4LGCJwqeKHii4ImCJwq-V_C9gu8VfK_gewU_" + "KPhBwQ8KflDwg4IfFfyo4EcFPyr4UcFTBU8VPFXwVMFTBc8UPFPwTMEzBc8UPFfwXMFzBc8VPFfwQsELBS8UvFDwQsHPCn5W8LOCnxX8rOAXBb" + "8o-EXBLwp-UfCrgl8V_KrgVwW_KvhNwW8KflPwm4LfFPyu4HcFvyv4XcHvCg4VHCo4VHCo4JDB7U0GoxGqEakRq4FgXZ_buj63dX1u6_" + "rc1vW5retzW9fntq7PbV2f27o-t3WHbesO29Ydtq07bFt32LYu5m1dzNu6mLd1MW_rYt7Wxbyti3lbF_" + "O2LuZtXczbuiK1dUVq64rU1hWprStSu6XgloJbCm4puKXgOwXfKfhOwXcKvmNwR0u0oyXa0RLtaIl2tEQ7WqIdLdGOlmhHS7SjJdr5UPCHgj8U" + "_KHgDwZ3TxmMRqhGpEasBoI7Cu4ouKPgjoI7Cu4quKvgroK7Cu4y2NPa8LQ2PK0NT2vD09rwtDY8rQ1Pa8PT2vC0NjytDU9rw9Pa8LQ2PK0NT3" + "dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT-" + "vZ03r2tJ49rWdP63nwm8FohGpEasRqIFhLdKAlOtASHWiJDrREB1qiAy3RgZboQEt0oCU60FV0oKvoQFfRga6iA11FhxsMRiNUI1IjVgPBelGG" + "elGGelGGelGGelF8BfsK9hXsK9j_CladfdXZV5191dlXnf2-gvsK7iu4r-C-gj0Fewr2FOwp2FPwQMEDBQ8UPFDwQMFDBQ8VPFTwUMFDBV8o-" + "ELBFwq-UPCFgi8VfKngSwVfKvhSwVcKvlLwlYKvFHyl4GsFXyv4WsHXCr5WsB4CfT0E-noI9PUQ6Osh0J8qeKrgqYKnCp4qWE8yvp5kfD3J-" + "HqS8fUk4-" + "tJxteTjK8nGV9PMr6eZHw9yfh6kvH1JOPrScbXk4yv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96CvJxlfTzK-" + "nmR8Pcn4epLx9STj60nG15OMrycZX08y_" + "lLBSwUvFbxU8FLBkYIjBUcKjhQcKThWcKzgWMGxgmMG32iCN5rgjSZ4owneaIIj1XmkOo9U55HqPFKdR6rzSHUeqc4j1XmkOo9UupFKN1LpRir" + "dSKUbqXQjlW6k0o1UupFKN_pU8KeCPxX8qeBPBge6WwW6WwW6WwW6WwW6WwW6WwW6WwW6WwW6WwW6WwW6iga6iga6iga6iga6igZ6-" + "gr09BXo6SvQ01egp6-greC2gtsKbiu4reAzBZ8p-EzBZwo-U_" + "C5gs8VfK7gcwWfK1jPSIGekQI9IwV6Rgr0jBToGSnQM1KgZ6RAz0iBnpGCnoJ7Cu4puKfgnoJ1Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0" + "Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0A5roc8pEn1Mm-" + "pwy0eeUiT6nTPQV3ERfwU30FdxEX8FN9BXcRA-" + "uEz24TvTgOtGD60QPrpOpgqcKnip4quCpgnUDmugGNNENaKIb0EQ3oIluQBPdgCa6AU10A5roBjTRDWiiG9BEN6CJbkAT3YAmugFNdAOa6AY00" + "Q1oohvQRBfGiS6ME10YJ7owTnRhnOjCONGFcaIL40QXxokujBNdnye6Pk90fZ7o-jzR9Xmiq-hEV9GJrqITXUUnXx-lb_9sHP-59FP-o_-" + "wWL4n-0cHazuxp31UHb3W9w__Q2Zqr-8Kiu2S7vWokuNWH77kLNUnqz7neD14XHnOceX4knOOS86ZvYLmhfmn8J3cp_" + "sClXSuesK6YW7nqieqG-" + "Z2rnriumFu56onqRvmdtqFVlOZupi1gKo61cWsBVRVrS5mLaCqhnUxawFVFa2MyT6xVMzUdkXVXXF119e5wsp1Hdat67VhYd0wt7Mk-" + "7JhbmfJzMqGuZ3Vsy5f18VhpWvWGV0XU71maw5SWq7SNVtzkNLila7ZmoOUlrJ0zdYcxMTYZfhZ3RVVd8XVXV_" + "niirXdVS3rteGhXXD3M6S7MuGuZ0lMysb5nZWz7p8XReHla5ZZ3RdTPWarTlIablK12zNQUqLV7pmaw5SWsrSNVtzEBNTsa7Xu8Lqrri66-" + "tcceW6juvW9dqwsG6Y21lS_bJhbmfJzMqGuZ3Vsy5f18VhpWvWGV0XU71maw5SWq7SNVtzkNLila7ZmoOUlrJ0zdYcxMRUrOv1rrC6K6ru-" + "jpXUrmuk7p1vTYsrBvmdpakWDbM7Sypd9kwt7N61uXrujisdM06o-tiqtdszUFKy1W6ZmsOUlq80jVbc5DSUpau2ZqDmJiKdb3eFVZ3RdVd-b-" + "0MK97YY_9MG_CxmVhYzfMfK4fV0y5alDZKdb6_uGn4pJP1cWP0yWfo0s-" + "QHNXyXGrD19yluqTlZ3zn6oP7YWe9YtK6bCwbpjb6ayPqmFup7t2Koa5nc7yrhrmdrJsdSUp61z1VJakrHPVU1mSss5VT2VJyjpXPZUlKessv4" + "aWjK6LKb-G_uUgpeVau4b-5SClxVu7hv7lIKWlXLuG_uUgtYWtW3J1MWsBfyts5TosBvytsJWrshjwt8JWrtFiwN8KuxZTcpcq74qqu-" + "LqropzrVXVdlWca60CtuvrXOVfRhV6yq_" + "X5V9GVQ1zO0sqVfllVOmwuG6Y21lS4covo9aGjetKUtZZ8qKVDSsvybiuJGWdJS922bDykpQthPLrde33cyWj62Kqr8V_-36u7iBVVauLqb4W_" + "-37ubqDVFW0Lqb6WlxxkMqVV3otrjlIbWHrlmNdTPW1uOYgtYWtW6qVMSUfOMq7ouquuLqr4lxrL03F9Xq9q-JcZl7lX7IWesqv1-" + "VfslYNcztLKlX5JWvpsLhumNtZUuHKL1nXho3rSlLWWfJWKBtWXpJxXUnKOkte7LJh5SUpWwjl1-va751LRtfFVF-L__" + "a9c91BqqpWF1N9Lf7b9851B6mqaF1M9bW44iCVK6_0WlxzkNrC1i3Hupjqa3HNQWoLW7dUK2MqrtcVX-" + "iXd8XVXRXnWntpKh6917sqzmXmVf7Lg0JP-fW6_JcHVcPczpK3UOUvD0qHxXXD3M6SClf-" + "8mBt2LiuJGWdJa9M2bDykozrSlLWWfJilw0rL0nZQii_Xtf-PqVkdF1M9bX4b79PqTtIVdXqYqqvxX_" + "7fUrdQaoqWhdTfS2uOEjlyiu9FtccpLawdcuxLqb6WlxzkNrC1i3VypiK63XFL6rKu6Lqropzrb00Fdfr9a6Kc5l5lf9SrNBTfr0u_" + "6VY1TC3s6Qclb8UKx0W1w1zO0sqXPlLsbVh47qSlHWWvDJlw8pLMq4rSVlnyXIvG1ZekrKFUH69rvqdWFVl6mKqr8U1ByktV-" + "m1uOYgpcUrvRbXHKS0lKXX4pqD1Ba2bsnVxVRfi2sOUlvYuuVYF1N9La45SG1h65ZqZUzF9Xq9K6zuiqq74vKutZem4nq93lVxLhUnaBV38z8R" + "_U_p9_32D0jKv-8vjVkLiP6Fg7gxawHxv3AQN2YtIPkXDuLG_L0Y1VWonX71vGsnXD3T2imud_5z3dyx_rUsuPwqusLqrqi6K67u-" + "kqr5GtM5w-aql83N6Z6idUcxI2pXmI1B3FjqpdYzUFKa1JbjOoq1E6_et61E66eae0U1zuLy9B8ibs-" + "n4pluN4VVXfF1V1faZV8O2OTKf92pjSm-nJZcxA3pnqJ1RzEjaleYjUHKa1JbTGqq1A7_ep51064eqa1U1zvLC5D893U-" + "nwqluF6V1TdFVd3faVV8qHTJlP-obM0pnqJ1RzEjam-XNYcxI2pXmI1BymtSW0xqqtQO_3qeddOuHqmtVNc7ywuQ_ORe30-" + "FctwvSuq7oqru77SKnmWtsmUP0uXxlQvsZqDuDHVS6zmIG5M9eWy5iBuzN-" + "LUV2F2ulXz7t2wtUzrZ3iemdxGZpPEuvzqViG611RdVdc3bX6u17sW_2xrrMvKtkXl-" + "z7Ol642vdZsi8q2ReX7Ps6XlRyvKgk56jkeFHJ8eKS48Ulx4tLco5LjpeUHC8pOV5ScrzE5pz__S7-X7Rsdr-aFwdq_" + "nPdiFft40WhHa7azbNC2y-0C38MfDIptB9W7fZnoV045nnhb2jP71dt_O-E1W6v2vifXKldOM7I_tUlJ_ylXaOc-Ndqazh_" + "18gCrNz5a0kWYuW-" + "47fWWZSVP1hvfzrunO88cPzeOou18rZ1Fm3lzvFXxQtt8UJbvNAWL3SKFzrFC53ihU7xQqd4oVO80Cle6BQvdIoXOsULneKFTvFCp3ihU7zQKV" + "7oFC90ihfZ4kW2eJEtXuQUL3KKFznFi5ziRU7xIqd4kVO8yCle5BQvcooXOcWLnOJFTvEip3iRU7zIKV7kFC-" + "2xYtt8WJbvNgpXuwUL3aKFzvFi53ixU7xYqd4sVO82Cle7BQvdooXO8WLneLFTvFip3ixU7zYKV5ii5fY4iW2eIlTvMQpXuIUL3GKlzjFS5ziJ" + "U7xEqd4iVO8xCle4hQvcYqXOMVLnOIlTvESp3hJoXjjVeHGq6KNVwUbF4o1LhRqXCjSuFCgcaE440JhxoWijAsFGReKMS4UYlwowrhQgHFh8uP" + "CxMeFSY8LEx4XJ2vvjivtGuXEnbvjylkA5-64chbCuTsW_NY6i-LcHVfe_nTcOd954Pi9dRbLuTuunEVz7o4Ft__-" + "c1W80BYvtMULneKFTvFCp3ihU7zQKV7oFC90ihc6xQud4oVO8UKneKFTvNApXugUL3SKFzrFC53iRbZ4kS1eZIsXOcWLnOJFTvEip3iRU7zIKV" + "7kFC9yihc5xYuc4kVO8SKneJFTvMgpXuQUL3KKFznFi23xYlu82BYvdooXO8WLneLFTvFip3ixU7zYKV7sFC92ihc7xYud4sVO8WKneLFTvNgp" + "XuwUL3aKl9jiJbZ4iS1e4hQvcYqXOMVLnOIlTvESp3iJU7zEKV7iFC9xipc4xUuc4iVO8RKneIlTvMQpXuHuiN9A5oVjs_" + "vVRMH4K8pG4deVKJTa4aqNAqntF9q3qzaKovbDqt3-LLQLx0QR1L5ftTF5tdurNiatduE4I_ubPU7Y3B1Xyonbu2PBWQB7dyw4C2HvjkW_" + "tc6i2LtjwdvOb__azvlYJHt3LDiLZe-" + "OBWfR7N2x6Pb3UavihbZ4oS1e6BQvdIoXOsULneKFTvFCp3ihU7zQKV7oFC90ihc6xQud4oVO8UKneKFTvNApXugUL7LFi2zxIlu8yCle5BQvc" + "ooXOcWLnOJFTvEip3iRU7zIKV7kFC9yihc5xYuc4kVO8SKneJFTvMgpXmyLF9vixbZ4sVO82Cle7BQvdooXO8WLneLFTvFip3ixU7zYKV7sFC9" + "2ihc7xYud4sVO8WKneLFTvMQWL7HFS2zxEqd4iVO8xCle4hQvcYqXOMVLnOIlTvESp3iJU7zEKV7iFC9xipc4xUuc4iVO8b7ujvxfA2XVyf43q" + "QXb0v8uyPSFpi8yfZHpi01fbPoS05es-lb7818UUFYB2p39jzhPthnx1cz3FiZk9Ks3tL2h7Y1sb2R7Y9sb297E9iar3p1Vz05hr811x-" + "a6Y3Pdsbnu2Fx3bK47Ntcdm-" + "uOzXXH5nq46jks7LW5HtpcD22uhzbXQ5vroc310OZ6aHM9tLke2lyPbFZHNqsjm9WRzerIZnVkszqyWR3ZrI5sVkdOVoWe1Ur-" + "6tgyHbCGnUfDzqNh59Gw82jYeTTsPBp2Hg07j4adR8POo1HoMfNoFGKK82g9fsWwme81syvoV29oe0PbG9neyPbGtje2vYntXc2u9bTqeVrtna" + "72Tgt77QymdgZTO4OpncHUzmBqZzC1M5jaGUztDKZ2BrNVz6yw1-Y6s7nObK4zm-vM5jqzuc5srjOb68zmOrO5LlY9i8Jem-" + "vC5rqwuS5srgub68LmurC5LmyuC5vrwub6tup5K-y1ub7ZXN9srm821zeb65vN9c3m-" + "mZzfbO5vplc25tfPWzme02uBf3qDW1vaHsj2xvZ3tj2xrY3sb2FXLdWPVuFvTbXLZvrls11y-a6ZXPdsrlu2Vy3bK5bNtctm-" + "veqmevsNfmumdz3bO57tlc92yuezbXPZvrns11z-a6Z3PdX_XsF_baXPdtrvs2132b677Ndd_mum9z3be57ttc902u-f8l6au3oF-" + "9oe0NbW9keyPbG9ve2PYmtreYVaGneKdjx5bpyMzb_" + "YphM99rZlfQr97Q9oa2N7K9ke2NbW9sexPbu5qdt1rL3l5hr83VrmXPrmXPrmXPrmXPrmXPrmXPrmXPrmXPrmVvtZa9_" + "cJem6tdy55dy55dy55dy55dy55dy55dy55dy55dy97qOc87Kuy1udpnUs8-" + "k3r2mdSzz6SefSb17DOpZ59JPftM6tlnUu941XNc2GtzPba5Httcj22uxzbXY5vrsc312OZ6bHM9trk2Vz3Nwl6ba9Pm2rS5Nm2uTZtr0-" + "batLk2ba5Nm2vT5Dr4_dXDZr7X5FrQr97Q9oa2N7K9ke2NbW9sexPbW8j1edXzXNhrc322uT7bXJ9trs8212eb67PN9dnm-" + "mxzfba5rq7Ig5fCXpurvXsM7N1jYO8eA3v3GNi7x8DePQb27jGwd4-BvXsMXlc9r4W9NtdXm-urzfXV5vpqc321ub7aXF9trq8211eTqz_" + "66mEz32tyLehXb2h7Q9sb2d7I9sa2N7a9ie0t5LpaA_5LYa_N1a4B364B364B364B364B364B364B364B364Bf_" + "WZwX8r7LW52s8Mvv3M4NvPDL79zODbzwy-_czg288Mvv3M4NvPDP77que9sNfm-" + "m5zfbe5vttc322u7zbXd5vru8313eb6bnNdrnqWhb0216XNdWlzXdpclzbXpc11aXNd2lyXNtelzbVwzsL5CucqnCeyM4jsDCI7g8jOILIziOw" + "MIjuDyM4gsjOI7AwK4wpjYptrbHONba6xzTW2ucY219jmGttcY5trbHIdrVbx6L2w1-Q6sqt4ZFfxyK7ikV3FI7uKR3YVj-" + "wqHtlVPLKreLRaxaNlYa_N1a7ikV3FI7uKR3YVj-wqHtlVPLKreGRX8ciu4mD1pBgcF_aaXAP7pBjYJ8XAPikG9kkxsE-" + "KgX1SDOyTYmCfFAP7pBisnhSDZmGvzdU-KQb2STGwT4qBfVIM7JNiYJ8UA_ukGNgnxcA-" + "KQarT5XBSWGvzfXE5npicz2xuZ7YXE9sric21xOb64nN9cTmer7qOS_stbme21zPba7nNtdzm-" + "u5zfXc5npucz23uZ7bXLurnm5hr821a3Pt2ly7NteuzbVrc-3aXLs2167NtWtz7a16eoW9NteezbVnc-3ZXHs2157NtWdz7dlcezbXns21v-" + "rpF_baXPs2177NtW9z7dtc-zbXvs21b3Pt21z7Nldv1eMV9tpcPZurZ3P1bK6ezdWzuXo2V8_" + "m6tlcPZvrYNUzKOy1uQ5srgOb68DmOrC5DmyuA5vrwOY6sLkObK7DVc-wsNfmOrS5Dm2uQ5vr0OY6tLkOba5Dm-" + "vQ5jq0uV6sei4Ke22uFzbXC5vrhc31wuZ6YXO9sLle2FwvbK4XNtfLVc9lYa_" + "N9dLmemlzvbS5XtpcL22ulzbXS5vrpc310uZ6teq5Wu29Xu29_tqrP2OaFtqzQnteaDt_ncQxK585Pnfc-QOd1fjQGR8640NnfOSMj5zxkTM-" + "csbHzvjYGR8742NnfOKMT5zxiTM-KYwfF8aOC-" + "PGhTHjYrxT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77Gtt_6p5bTQnhXa80Lb-" + "ReUHGPrXfS5484_IlyND53xoTM-dMZHzvjIGR854yNnfOyMj53xsTM-dsYnzvjEGZ8447_qrT8lPr_5Vvjb4dzQHC-LHamlo_" + "HL5UGAJn9hQ0NQ46DQI8WXof0fafP0IGveD7NmJ8_jI2uPVrtxRb7M_li5tYmIHv5V9KYOCe0_ot1G-yVvZ_8crP-an7bwb4SbO9_-" + "P2ob96k"); static string all_emojis_str = gzdecode(base64url_decode(packed_emojis).ok()).as_slice().str(); - constexpr size_t EMOJI_COUNT = 7539; + constexpr size_t EMOJI_COUNT = 5064; #else string all_emojis_str; constexpr size_t EMOJI_COUNT = 0; @@ -302,10 +212,20 @@ bool is_emoji(Slice str) { CHECK(all_emojis.size() == EMOJI_COUNT); return all_emojis; }(); - if (str.size() > MAX_EMOJI_LENGTH) { + auto len = str.size(); + if (len > MAX_EMOJI_LENGTH + 3) { return false; } - return emojis.count(str) != 0; + if (emojis.count(str) != 0) { + return true; + } + if (len <= 3 || str[len - 3] != '\xEF' || str[len - 2] != '\xB8' || str[len - 1] != '\x8F') { + return false; + } + if (len >= 6 && str[len - 6] == '\xEF' && str[len - 5] == '\xB8' && str[len - 4] == '\x8F') { + return false; + } + return emojis.count(str.substr(0, len - 3)) != 0; } int get_fitzpatrick_modifier(Slice emoji) { diff --git a/tdutils/test/emoji.cpp b/tdutils/test/emoji.cpp index 47764e638..22b04d99f 100644 --- a/tdutils/test/emoji.cpp +++ b/tdutils/test/emoji.cpp @@ -11,7 +11,7 @@ TEST(Emoji, is_emoji) { ASSERT_TRUE(!td::is_emoji("")); ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤‍💋‍👩đŸģ")); - ASSERT_TRUE(!td::is_emoji("👩đŸŧ‍❤‍💋‍👩đŸģī¸")); + ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤‍💋‍👩đŸģī¸")); // invalid, but used in the wild ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ")); ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģī¸")); ASSERT_TRUE(!td::is_emoji("👩đŸŧ‍❤ī¸ī¸â€đŸ’‹â€đŸ‘ŠđŸģ")); @@ -35,9 +35,13 @@ TEST(Emoji, is_emoji) { ASSERT_TRUE(td::is_emoji("Š")); ASSERT_TRUE(!td::is_emoji("Šī¸ī¸")); ASSERT_TRUE(td::is_emoji("đŸ•ĩī¸â€â™‚ī¸")); - ASSERT_TRUE(!td::is_emoji("đŸ•ĩ‍♂ī¸")); - ASSERT_TRUE(!td::is_emoji("đŸ•ĩī¸â€â™‚")); + ASSERT_TRUE(td::is_emoji("đŸ•ĩ‍♂ī¸")); // invalid, but used in the wild + ASSERT_TRUE(td::is_emoji("đŸ•ĩī¸â€â™‚")); // invalid, but used in the wild ASSERT_TRUE(td::is_emoji("đŸ•ĩ‍♂")); + ASSERT_TRUE(td::is_emoji("🏌ī¸â€â™‚ī¸")); + ASSERT_TRUE(td::is_emoji("🏋ī¸â€â™‚ī¸")); + ASSERT_TRUE(td::is_emoji("🏌‍♂ī¸")); // invalid, but used in the wild + ASSERT_TRUE(td::is_emoji("🏋‍♂ī¸")); // invalid, but used in the wild } static void test_get_fitzpatrick_modifier(td::string emoji, int result) {