applyMask behaves differently at different UI scales
-
In this project you will find I used *2 on width and height of mask to ‘fix’ what I thought was a different issue, now I see that actually there is an issue with scaling - perhaps related to mac retina?
The applyMasks are located in LookAndFeel.js for the horizontal slider
HiseSnippet 18210.3oc6ct0jabjkeGcgtnDoHoD0HEi83I1EC8LRjCIaVHqKnfnlQMA3klh8sAfhCkzLA2h.UytFhFUG.E3Eswrt8ZuNVGq8d2OrN7C6y9gMlGrevQ3HLC+IveDlMh8CvDN76iypJbIQAzcmHq7OZfgnCETntfB+pL+exyIySVUtcK+Ztsa62JyRm9AuZe2LKcV0pupYvtk20wqYl6cqLK8Npa59hb27ogaW5U66ztsa8LKsT16FtikN8xYh9627YkbZ3zrl6fckIyC88p4tt2ddAC161qdeuFMtiSc2G3sGyYar58p42rreC+NTXxppkYemZOy4ota5DdZJpYV5T2ttWfeqpANAtsyrzxk7q+pp65+hlwm+C8Z68jFtgajOSU5EJd22wuQ8PhC+blx650n918toamIyRWX6AEAYiKB9.0M7p60e+CJJdunCjav2fs7XIkgwK6P3kmEOMF7FCRKwfzxwHcA0p0Z4sevfiDW0bulAts1wgVryhR74lQ4O6cTetSqbOyKXaOW52K2OJ2Welbz+95KR+Ua5bwqlq+GJ9yuZuC0xo8tOd8vCtdtnMneLOIwwqDd7JCNtd+iul2tNAgGs2GL5en66U6YgGo6+Oe+Cr09tMq1zoka3QC2HWusFbcq3UO5vc++18OP+uXuOLf0p62HluAeJ+feUZUULO89Pds9G6A96837gGi9gbgevbnCQ5cnvOXMzgzCOzcZ362JGcS5FEnG9meiyPk2sCx0vYGZ0vsa9TultqTqkKUrb2F9OwoQbk1599O6lMqeGW2FW5x23LmwqYsFcp6doKxbfU9EsuX3whtfmIrFttSfyVO4WL3B2v2o9cZ4u2mWcqMuzEWYkqeyVAd05zvIvyu4snmM8Z327hC8K7E2q2EdmNMqEdh4h4aC+5cZ3do.pR7p4ZRMGuZt8oEzMCtbt+vn6aucxEczUB7W2+EtsJ6z18RWN2O5Gk6hsc1a+FtstXuSM7uPhCOcJtOoCU761Zkp9cZV+ttMca4PMgZuR0.5u7ddMeZ03u+Mh9x+xbtMZ6NgWo9sl08Zblyz6atWz8Ey2M91cL2nWs+oDcktWy5tuzs8J2xqkasfKGega4FzoUytWzabF5uSxxw36EZ8zk1YynKdS+.27w+OxUy0v+gtMtZtc8h9eUpb2V9c1O20+gW5Wbk7W9Gd8bWM2s5reCuZzqDcuZz8zqPM7lwOp5ePQyc7ZD0z4mjK9Gq+Ap36G7Ic+o6uy08uu6qFYuq4Mt8tdHmeRWbYN2n8FS+fer36hOo2GFbj92KexfOFWAciyvVdRuuBKKCuE6VGPuMipT6VcUJdugVK8qGa35DsinuVrDbCm8Ca9iZGFsu.+82O5RoEuimFRWYp1Iftuqk+FmYGp46kh1aNul8Lv5UfO3ruxUtQ+pfn8FVXSuD8ay8qGbt+7uN+O+F4hN8n+45WuL0B1ug6J62xqYvk5+8ubhqYWi.5kcHCxK1c+zlX5+UuZNste6d+029tpaP2uvMCBZ48jNT2T8r3i9FIKnB2WTwvtdALEBw2Q+7vxhS2+doGusZEUOG5pY3S+qoWje9JckAsuQhuTUuuw8P+JgGb3uv5Nuxs0g8aDevg+BQR3C472L7Xid5ji3zI23Lm9zm9LQ+W34WqqvQ6Fmt+0IpjyKZm47x8o8KYnackqPK7nU+QmiqSsc6cvtW0SOTEXzE5WDeg9EQWnnRqO5i59y9ocKNnGM5BGWqz6uZrpzd+MzFmdfBIR.T0uUPWg41g5xdZjbI9K7Femtx8K9Gtcks97aW9AO9Nas9stcke4EyckXQI8+ewqEtUnHJ7yas1i2HZGwzS20Juv44W7Fib8GYG84j1DieMufWsgCsUfift31DEnw2nlbG0TZrT02pYk86zd2KQ+MGGNgtH6pR9Qcqu5pA1Zy0+xbUu4Cuc0bk2ZisW+1O31zMC+Ptp29AUG4JkrUiKRMiCt3XHM7utgCTuyd6ey1QACzG2qNn9oev.I+5+xyb3aE2F7S62nBSyWQgeTs2OT+3P5+Sy7K8KYcJe8qGVL0qs4ebNiKm6IzJumEVLstavG2NWfyybyQERsa3+hHWr8ZxemFgE9W9F8c452LzPcqlW5xmgZQPO2bIOzN6L1iQKcCZ42H7NZbGNrWKsNpu3kZ1Yum315pTEXiNt8OQZn7C2+.0Cu+ArcegFjW.MBDlSzmF+gWPXPxwaOZOHxTN9KQ6KgQWpnmZPTOINe2dRTsAML5VY7pG1kunNArsWPscyDQMam3xvwU3LcuBNMS02+gzyRnueu6.Zkgf2AmWsaecRQovY6eMDsbn+UP3RhA2GoornhDJKpj5xhJotrnRpKKNqZTuXSksQ7UPbainueJrMh+8EuL3cTC6udJJBNc7EPzRf3u9XJ.90e1Dfu32+WPcvHRjhRg2k8xHZYA6EQXIwP2PoQWDNTLisD4CdMeUrQWfQKK9xU4+qKboPW7SSaCoURbF0zoF598SQaCoUCbN03AVKEEBuSuKgnkB8t.BWLz+lHUZgvwPLcZgnqPJzBge+znEh98SSYPzXklpxf3qf3kAQe+TTFD+6m1x.x3aTbU9uGHorLfjxx.RJJCdO09i9cJbNbdlqhnkELWCgKOXuaNjxju3dgCodXla51wKZmwn8fMvKredKcK2m6UyMNONmV8VtseFsCtzewx96sueyvtoszaE+qett+52aOmm5F8iurZo6l4kzNKtT3uyq58gc5N3tYV5JpIG4knub6qugiWyRT64vdk2r9J627oYdgW8fcoLbpWpFy8ttdOc2vbycJkrw6YHpNWP2zgESEsXvIvq4Se.8GOBtObLGPOj1tEM+p+iq9p9a7+4e8p8986mwu9+982S7vsyvPTAP2R0GzsP5lzdb+bufWsta8LO4oroLzKvcudaeVUCRAaBgXaXyb.RuijunllsVl.2WFvdIhpIWxUMbfduXXutCS425NOwswE+jb63znczPoeQ18dwMt2st2Ei18Wz1MJ2gNA6NzoWxosqkAygt3EOyuLT90+F8rGSg8oT+Je+8XJc29uhozk92vktq1JYo6AeMOktumZ4NsC72qpaP3OealB3gJ1XKoGtjmvTNp7mrTbA4sZ48b2VCUjDaVLzt1pSv9cBFtfqyN63FMfmCs63AWphSvv6NNSZk1digO4dISZC+5gmePqNcOPMmFt2woVfeK1cGk15atW3n0sQmFAd62vKA6kCSvPXsY4xiAq08qEkmsD2tOoSO.FrWpdILT76t9vWlAbstW6vBj3z1psh4U69gBc+T9Uz58AR+c08CjUzn++edBglHV0DFcWl+bFc2AOKoUcPRc2p+A7n6Nq5MW6VUqb2VN6u6QXT+NpFljhTKZ87IsoI4sLHVZ1V5GhM8mGKE6OPY2qdncX9b27VqUsRr4aTh8n6MpL8h2wuQC+W7S8a8r166LPpln77Pa6lFVZXSuk20cm3hucB+6+5+pUiZFuvPMi+QGVy3QWhZzKwPsfurd3eW4kLk0Q6oZsUYQ6LCiF0MpaiHzdK0M7dI0+FSs5mx1ZhWxZ0+SC9kN0GoDuuA0Rm9T8ZDhstZb6kvta1poA6coMYtCde9FzRl6i+r3h2eO5GaG7pFQRq07a48MT0lSiL64UudC2s8a6EZgx19IsxXu1Azek3ZvkdeUpwYt5t63PaCHW6m40LSCulOys9C7ilNJ88l9oYR5M8rc2ydryPlO30647R1fA2uQmm50bamVTEPfaqXgv4husxEeeMhgSuJt1At6G1nX306+7eW3e+O9r1TmUOLL1js82uy9gbrTWNBOxCnE1k76GJQ6Zgiw8OcWWphfovOCWk8LC26nk71yBk7isr8c5U1R49vKYO7RwwWjEWIep+K+13+hqjOU8deoAUTmR8vqNXK2e6CqAkSGyebDg8Zc8+Pbod8gZN4e4HMmb+l9Oo80Cm1UsJc2giFL6Hkhed2a4CsPhE2SeXMxz0BMJJo3XX+CxFECaWze8evpgs.DdUiNwADs8HDQxbLD4D1TcY5+9DZLuznt+Npka3Q+zUyslOMxibeTta0x4oTMwSGB9+E7jRBV1oeXf99TpgEqGlx9fMeMqYZugrbnFE9xgaT3Rq1lFui2Kij4IMKt3g4iHnkSy1Q0oi2LY6CsBFTS3i0567cs9nkncnaen0j6Ov+7.ow98tV2KJT3n4dXyN6UMr3oMqQJMps1tUcaFVWD1GgAks++9rI1ztaSPOb3N78O60rJnOjujRMnR9kcam7+8RbpiRSKjjC0RZZV022oVTQwDzzalw0hIytOpVj6MwT+eMpux+tOiO+bIRJHig5e87cTFuauarY63LFJgpiV5O6Fow4FT9NmFqw6z6NXnnM96+qmYi1nusJS7FGr7Xi23z8N0YqHNFJ4+r7uHlCQc77d8sCmnnNnAZGOG3mKi6HwT.YPU8m9W+FWjGLN5l6h8nx3i83f+l48XOpLeD6QkwE6QuR+Y4XOpL2G6QkwD6Qt+1Y3XOpLRrG+5CK1iJylwdTIQrG+5Ewdj1XOpjlXOpLmF6QkwG6w+y+l2.i8nxbZrGCMoWYLWe47dtUhtsl0ysR+oK7nk7yx4VoaY6batUh3enHNN3algysRDtri0wRGRtUhNwYsbqzeJsyx9hXMDO2JwVeSXtUhkFym4Vg4gZXPk7u4kuAlaktM7NmEiA6CUBiU5iluCw3rQ2Uy1QXL3owYzx8Y2.LNS2R14z3Kd6H7GJ7hLNyrgWDabxNyMxzM5hO3e3t+ieyeaunKNUz4MaEbwfmVLVxWDag3NXhL7lnPK5pKlGirf8oEbPM7q+523Brnmqr4r3JF8g0jwNs07czEuOy81rcLFIeVWGsNXpEog5RayT9GW4eHCXKao6bZbFmm4lX3AyHXlMZCVSVlXNxM9Qz3rLm8rUjGIe1rYuKVD+gn9g9VrlkSTTHuiZ+WqfykghL5ioOyHcz5Mt.RF162b2vcL3ck.ig6e579vcDdWMqObG8dISLZ49r7vcDWxN2NbGg3O7Spx+9Y3g6HjVlPOxL9GTkSEcdyZC2QuWBJrjuHbCwGtiHCuIb3NhzEymC2wfWBNLOiJ+ouANbGwM3N2MUMF+Hcr679T0XNXPNXd6MMZI+r7T0X9dHNNs5nitQl8lgmpFIGXiWm4PlpFyfioAyaXLV1WDeg3SUCAFIidRi4yopwXG.ies2afSUi4ywtX32weLCo7e47cPFmu680rcTFrudDGsre1MLiy1uzcNMNiyz8FX3mBk+pY1.M5YlxlBkw+Pn71cOyYqPMXeMdxR+hXMD+IPnqI3DErQe0w7XzFC+pbk44O4u7MtvMF3da9aLMF7tzM4Kdt45wzH71ZleLM58VHdzR9Y5wzHtrc9cLMB4e3Dl7WLKOlFg3xNlFG1q1qnSblaLM58lxlk8EwYjBOMQVeS5XZDIMlSGSiAuqzYRaxe9ahioQbCuycwXv7tpmwL8OZdOFinaqY8XL5+V9ezR9Y4XL5V1N2FiQD+CGiwAyvwXDgK6qTiC6QbM5Dm0hwn+JQAK6KhwP7XLhs9lvXLhVFmmSiwfYsHgYhe9G8FXLFca3ctLFCxHwX7G+6BwXPlGhwfjHFi+34iXLHy4wXPFNFi+My3wXPXhwXUkiHFCxrXLFj9wXzk8EwXjtXLHhDiAYNNFCxHiiwe7anwXPl6hwXj0ZMFS0+j463LtvfasY6XMRrR0MZMvra7FuKaY7bZLGmav8vvwc7ualMtCFqVlXO96GerGuyfSd1J9iDqthr2CKhAQ7mxwAVjBDGh9bYbHirFaxDKxexabwhLjiuYm3Q5uv4kYok6sXQtge8NMbB7aUd2Pc18tU3NCkbcOPXESoWsuS61tzp4kxduvk7u1CI19Me1RJ2ttG8ZTMvIHbESc4R90eU3RuYyvkuu7YdnWaumDVwGtV9UkVFF+o632nd3UM7TxTdWuF06SX6v0GS9v8BpQwVLddUFCuYx.m2r8VoSu8N63VKX.rKqdmGMT4IbT9twn79p8WDMiWiKaEwSukmIVjhZvgo1sjSCml0FZAyMZA1bcu87XV6W+9qdeuFMB8B+.u8bYWSXuWM+lrqlia2xsguS8gcX75UGrRgNXu+pUYVKOY+s5dSTwceWmfvUkyAG7sWsRk61xuy9I+Vu8pQJkGzh59LzIIy83VMcoE5Ar6pbK+1s2gd6DcsZyd6ucmVOMrrZvdp3Rc.2d38sYm8nU7MogLzNr8uv1eoshEVQ6UaCGZqauj8ri9UzdfSTkMsIsnsymXaRhs0SrsQhsMSrsUhsKLX6kTGVHdpCWHlmQHtgy9QQEwblk75JwnGKdOC2dByoNpzcoSMpYzGnFst61a+rsTEdfbC9FGkkUV9rrDugnz2tovHtjBCiuaLiuU7BxZDZ8V+thVoTGhqM7a5u+t9M8pMrblJOe5ScawR6XuEtYP3rGnbmVOenFHtkaMmWMxdiO4Q2y5TqmFr6dMZyaib4FDXcqUq1ocvPMScoWWwsgqSaWV3tcM+gaZXhJxyezE4pbJKNmZ7MYtnlEmdZBdksmuGew0Byd.dV0np+Y0xu2UsqXbls.77pcsMNIKBe6X.Oi5CoN+qE9KF2lY20Txd67Xgi5BsqSK1VlndeCbS1jgGsi4Is+68CEcMhWVoMU0sVI5umaEXYUN7CaE7nxadk01csR1waS+mctR34TLd6LRqgDoDmaVthyUJUjhGa6TPnGG3QN5uXqfYxlxhB6JWXTxSS7p32IbkfuWTmpzPSqRCGulKa.pgqJ3c2Vq232U0sY8nMBGBvtGLeunYCOX9dGLSsdWJ58S2OGaek0sYnwVT2wZjzSOy3.kocTk2dgQMpFWZUl1xp+ded0s1LSUmm6FaLGSVhX7iIZCuZ8FNgvxK0ajYPT7N6smyPkteu3eOZSS2o+fKd0QF6on1mtVz+93R9u3Zas1i23Z4W4ENOmVp52+ER35922s+f0ulGyFq6+P1a4eymsl2P63185tB6fzbqN62vqFsZOTbjQbPIn.UQxfpiBzrRFTCgA8fauZBP+BjU8ln.U1U8Vn.U1U8EDFzU+h9fdp+U85iEtpdaTfJ6p9hn.k6p9qcjfd65O0cbs3+6yR5uOKo+9bz9zmIjYOujRPQphrIUGEoRu12PbRWMYSTaAs12DEoRu12BEoRu1ufvjdvVIHc0eJzZeaTjJ8Z+hnHk6Z+U3skeMwQ8mJG29biZdTnpHcTInPURBfx65+rw56OGKp4XQMGLe+biJAEpJRGUcTnJeAfg3nJI2+bipIJTku.vBEpxW.TPXTkUD.bipMJTku.nHJT4V.bctcAnINqRJH.9YMOJVUjOqDTrNdM.2SLlSqtd2k482HlZLevhoFyhoFyajSMl2smg9hIGyhIGyhIGyhIGyryji4862zzhoGyhoGyhoGyhoGyzb5w7WLl908Ii1utv1md75Wq6++wkbaz3wzJgNMp61ZbCe5my1EuOmsKdeNGCzGQnAOQHrInvVAJ15nvNKTrMPg8xPw1Tbr0SNFlkldZaKTXiUaW.E1X011nvFq1tnvXePojXeegz12PH2MZn3VAK24QwcVrbSPw8xX4VbOkGb+jbWYJpuMPwMX8sIJtAqusPwMX8s3dKWsRBtO3gSQ8sMJtAquKhhar5ahFJtwpuIh6u70OLoc4WO8z2DBJtwpuI5n3Fr91.E2f02h6ub0uVNS4.w31BE2f02EPwMX8sMJt4VeaxG2Ova+wMhfavR7FrDuAGC1ioPsbOoDSPQrBJh0QQbVTDaHNwVqJkGpxIkXSTDCSUXghXXphBBS7HOcfGr0TQUXihXXphhnHlaUg0j5AQSbg71x4wvchQNOJjUfgLAEx3DFh62i4QJs6N9poivv.Ex3DFlnPFmvPbWeG7Uxo6TSLxEPgLNggMJjkX.FG0zSn.KwEXIt.GAJeUPAXbTyLAIRrBJh0QQLLUgAJhWFEwlnHVEEwVhS7JIit3SmJVdEPQLLKOaTDCyxqHJhWVdN8NxYbfDQVEFxovq2ORNC1xDiLAExJvPVGExYggrAJjwY9YhBYbleh65az24UqOcL+JfBYble1nPFm4WQTHCy7ingBYXleDw89cv5IGvyexTw7iPPgLLyOhNJjgY9QLPgLNyOSTHiy7Sbueu9mLsF79ibxAHQjwY9YiBYbleEQgLLyOcMTHCy7SWbueiL38G7noh4mNAExvL+z0QgLLyOcCTHiy7yDEx3L+Rg2uGkrEie1zw7q.JjwY9YiBYbleEQgLLyOCMTHCy7yHEd+9YSq7.m.YBJjgY9YniBYXleFFnPFm4mIJj417S6XQ9Pl0u4YgMOKr44HAkqHjeuI.VBJXU..qNJXyB.VCTvtL.XMQAKBCLKwgUKoy3eLZCrBnfEgAlMJXQXfUDErbafkeBbJnghVUDzlBeXeVxtadGgLwlDZInnUAAs5nnMKBZMPQKDqLSTzBwJKENxtax1D1DtUVATzBwJyFEsPrxJhhVDVYDMTzhvJiHturC1LAsutBZqLBAEsHrxH5nnEgUFw.EsPrxLQQKDqrT3KqpbdKrLIzV.EsPrxrQQKDqrhnnEgUltFJZQXkoKturQdGeH3S82jPKAEsHrxz0QQKBqLcCTzBwJyDEsPrxD2WlrdDJmDZKfhVHVY1nnEhUVQTzhvJyPCEsbakQNVZOz0aPKVbsXw0B15M3DgKAEtJPvUGEtYgfqg33Jo0dvIBWST3hQLXgBWLhgBBiqrVGBmHbsQgKFwPQT3xsXPehbSnINuRZMIbx3MOJdUvvKAEuodsIrxaRqMgu2h0lvEqMgugt1DVYwZS3h0lvEqMgKVaBm8VaBqrXsIbwZS3h0lvEqMgm.qMgaOAqwUU512tJG+ZS35rcwac1t3sNGCFXQot9scjXSPgsBTr0QgcVnXaHN1eRxAI7dSOQhIJrwJRrPgMVQRAgw9f6ImYSmPXaiBarhjhnvN0qUGGs6FMwE2ImUMY9RotlEczbmGE2JX4lfhav5Dw8Tt5Whcs+4n41.E2f0Iln3N0ulTSv8g7zztIKwaxR7lS80PmCiXBJhUPQrNJhgoJLDmXvqgNGFwlnHFlpvBEwvTEEDlXzqgNGFw1nHFlpnHJhS8K7hC0Chl3BYvqgNGJx4QgrBLjInPFmvPb+dnWCcNTjMPgLNggIJjwILD20G50PmCE4BnPFmvvFExRL.iiZXzMXI1fkXiSvNibTiftDIVAEw5nHFlpvPbhmZcF4nFxbIRLLUgEJhgoJJHLwSuNibTiQtDIFlpnHJhkXnEG4HiOQB4oVmQNxAEWhHq.CYBJjwILD2u2zqyHG4nfKQjwILLQgLNgg3t9ldcF4HWCcjHx3DF1nPN0u56Ff7gjTjhrvVjE1hvlNOS.rDTvp..VcTvhPFXfB1kA.qo3vJoYWzD.qEJXQnYKfBVDZVaTvhPyVTXXk0jcJ+D3TPCEsJHnMOJZyhfVBJZWFAsovKljl9USBsFnnEht0DEsPzsVnnEhtUbOYxZ5fMIzZihVH51hnnEgtknghVt0sjik1C8UYiMKt1r3ZyQj32VpuvJFKtDT3p.AWcT3lEBtFBi6nKTreAdwfIJbwHFrPgKFwPAgwkY.GSkKsIBWaT3hQLTDEto7UWxaotl2tNAuY7hK4CV7hKYwKtj2HewkbtXy7Eu1RV7ZKYwqsjEu1Rlcdsk7dcaXZwKsjEuzRV7RKYwKsjo3KsDkewRioWcWcjd0E0.00VasGWc+Fz90MtwQ6dr8m6dr8m6dG0H8jpdKyInDTfpHYP0QAZVICpAJP4dDeuxQ.J0bYry8lqxx4UY47pvVde4iSBJNUjKm5n3Lqb4z.EmRVeZJNmRZ0wkONsPwoj0mEPwoj0m1n3Tx5yhhyojVZYuJesyqgBTEICZdTflUxfRPA5xRFzT3SRRKLqbBpAJPksF0DEnxViZgBTYqQE2ujrVVS4DTaTfJaMZQTfJYMJQCEnRViRRgmIIsnfxInDTfJYMJQGEnxViZfBTYqQE2yjrVRM4DTKTfJaMZATfJaMpMJPksFMEdljzi.HefpqgBTIqQ0yiBTIqQ0In.kaMp9Q.Z2mgxGeGuV6MtgG86vx62gk2uCrGMwIiWBJdUvvqNJdyhgWCT7BR+ZJNuR5wTbx30BEufzuEPwKH8qMJdAoeKJLux5QVzXx7WngBXEP.mGEvYAALAEvKCB3T3iSRO9hSHvFn.FkF1DEvnzvVn.FkFVb+bx5QYbBA1FEvnzvEQALHMLQCEvo3Uevn.eS42OtUjzqqiCEVBJXU..qNJXyB.VCTvhPyZhBVU.vlBOZRZd5LAvV.ErHLvrQAKBCrhnfMEufFNbmBZnnUEAsovGljlpQSBsDTzpffVcTzlEAsFnnEhUlIJZgXkkBGYRZxRMIzV.EsPrxrQQKDqrhnnEgUVJ5N1wPKBqLRJF0wMQ8pn6vokfhVDVYDcTzhvJiXfhVHVYlnnEhUlDGlQAmvZSBsEPQKDqLaTzBwJqHJZQXkoqghVDVY5h6KSVS4tIgVBJZQXkoqihVDVY5FnnEhUlIJZgXkItuLYMoAmDZKfhVHVY1nnEhUVQTzhvJyPCEsRcT7KI+zjcUXiheI4mlrqBaT7KI+zjcUXiheI4mlrqBKMYkjeZxt5pfMvRQOxVI4nz7onMvJfBVDFX1nfEgAVQTvJUWXkReZxNZZUQPaJ7g8ijy5W4jPKAEsJHnUGEsYQPqAJZgXkYhhVHVYon6Xi7dqdc3VYEPQKDqLaTzBwJqHJZQXkkhzjcLzhvJKMoIa8jCD5OAsUVZRS1QSKBqrzjlrilVDVYoIMYGMsPrxLQQKDqLw8k85ehbVgKlDZKfhVHVY1nnEhUVQTzhvJKEoI6XnEgUVJRS1HqUwG7HzVYoHMYGCsHrxRQZxNFZQXkkhzjcLzBwJyDEsPrxRgurGkrMgeFbqrBnnEhUlMJZgXkUDEsHrxRQZxNFZQXkYjBeY+roWxn6QKAEsHrxLzQQKBqLCCTzBwJyDEsRMWYkmmRFc44ojQWddJYzkmmRFc4TmL5oX9cKCNYzHzrElKxuaYvIiFgls3bQBSKm9jQOESXZYzIiNKBZIyEILsbpSF8zLEjkScxnmlofrbpSF8zLEjkQmLZH51ByEI0qb5SF8TLodkSexnmhI0qb5SF8TLodkScxnmloIqbpSF8zLMYkScxnmloIqbpSF8zLMYkScxnmlIdpbpSF8zLwSkScxnmlIdpbpSF8zLwSkSexnmhoxob5SF8TLUNkS+yr4TLUNkS+yr4TLUNkSexnmhIGob5SF8TL4HkSexnmhIGobpSFsrRNBOuso2Ze2lySus+Gv67wa6+A7Ne719e.uyGus+Gv67wa6+A7Ne719e.uyGus+Gv67wa6+A7Ne719mwew7wa6eFfmOda+y.77wa6eFfmOda+y.77wa6eFfmOda+y.77wa6eFfmOda+y.77wa6eFfmOda+yzSiS921+qb3.+.u8Oz0rsUXQcEVTWA17FiaTInPUQ5npiB0rRGUCTnJespIJTUkNpVhipjlZabiZATnJeyJaTnJeyphnPkaypqysK.MTrpJeVSg+JIM+63mUBJVUjOq5nXMq7Y0.Eq.rsLQwJ.aKwcZIq4HH+rV.Eq.rsrQwJ.aqhnXU91VDMTrJeaKh39sj07XjeVInXU91VDcTrJeaKhAJVAXaYhhU.1Vh62RVy0R9Ys.JVAXaYihU.1VEQwp7ssz0Pwp7sszE2ukrlOn7yJAEqx21RWGEqx21R2.Eq.rsLQwJ.aqT32RRyYU9Ys.JVAXaYihU.1VEQwp7ssLzPwp7ssLRgeKIMuZ4mUBJVkuskgNJVkuskgAJVAXaYhhUtsstxQy5MmUxWLebdxmrX937jOSw7w4IeZh4iSyS7DuxGmVm3YckONKbhmxU93z9DOeq7wYwS77WdU9ZmW6DO4kbBZ9S7LWxInjS7zVxIn5m34AjSPMNwSBHmfZdhmAPNA05DO8ebBZgS77owIn1m3ISiSPKdhmIM9.MMo8URoQiSPyehmWJNAkbhmTJNAU+DOiTbBpwId5n3DTyS776vInVm3I2gSPKbhmYGNA09DOsNbBZwS77jvGn5Zm3IIgSPyehmgDNAkbhmdDNAU+DOeCbBpwIdxF3DTyS7LMvInVm3oY3XF5oRyICceo4jgtuzbxP2WZNYn6KMq73cwGmVy5oXnzrxC1EebZOqmhgRyJORWWku14O4edt3Dz7y5ICozLySxEmfpOqmLjRyLOCWbB5I+CvEmfZMqm0lRyLO5VbBp8rdVaJMy7PawGny.OwVbBZ9Y8zKUZl4Y0hSP0m0SuToYlmRKNA8j+QzhSPsl0yCVoYlGNKNA0dVOOXklYdrr3CzYfmIKNAM+rdB6JMy7zXwIn5y5IrqzLyygEmfdx+PXwInVy5YVrzLyieEmfZOqmYwRyLO3U7A5LvScEmfleVOEnklYddq3DT8Y8TfVZl4IshSPm4eLqJK+b0ZhHGSkketZMQjioxxOWslHxwTY4mqVSD4psbpyUqkbxbCebZghSIqOKfhSIqOsQwoj0mRbDwOXKDA1WN04p8X.UQxflGEnYkLnDTftrjAME9j1dpLrnkSetZ2dpLrnkSetZ2dpLrnkSctZOFPksFUhSl8U+JjZTaTfJaMZQTfJYMZJxU6w.pj0noIWse0TYbGJm9b09USkwcnb5yU6WMUF2gxoOWse0TYg13vVtDSWO6JhXEA3vVoDkHpJRGUcTnlU5nlhnnjz5MH2nZhBU4K.rPgp7E.oXduIoErOtQ0FEpxW.TDEpx5ER1gtBHNQhUIsb2wOq4Qwph7YkfhU.ZfTjSmubp7hI7PWsCkHq.z.lnXc7Zfsa4Wysca+VYV569fWsOcmuuZ0fVtN6407oUitQZk4d2JyRmR89d0dVlRuZem1scqG9kuqiWyd+5+29+9a9rRNMbZVycfFLSlG56Uyccu87BFr2u+p22qQi63T28Ad6wb1FqduZ9MK62vuCklrpZT3ba36Tup22vbZud0Rc1YG2VCu2e0pQ+T2bO+NMG52p68PE28ccB1vuNy24s6Yhj7a81qtsWPscePKmZOiVLvFq0VMcqtqe.6tJ2xuc6cn2NQWq1r29a2o0SCKqFrmJtO2sU6g22lc1q7tNMa51ncXManAvWz1sZfSfWsMbBZ48R1yN5WQ6ANOIThonFuc9DaSRrsdhsMRrsYhssRrcgAauj5sq6E32JjOWJvmpje8WQKSdQyvJs7YdnWaunyMbipzZy35xMb1eaG5sHyYVxqqBidr38Dpnn0QcZPu08axbpYJuqWi58EqsyP+cYjtYiktef5Fd085ueZgJUfFJdeunCjav2fUFujxv2PYO7aHMlanQQh0XZ4Xhn+vw2NCSyv2mCQy8ZF31rsWvqXkXRCwkTXX7ciY7sTu4Z2pZkHzNajUdtadq0n6fEqM7a5u+t9M8pMrZlpNe5SoMQv.6XuCtYP.0XpbmVOen1GtkaMmWMxdiO4Q2y5TimFr6dM+F0G4xMHNnVqVsS6.lVoxj4RuthaCWm1trvc6Z9C2xvDUhm+nKwU4TUbN03axbQsJN8jD7pZOeO9hqEl8.7rpQU+ypkeuqZWw3LaA34U6ZabRVD91w.dFUZjL90B+EiK7hZWp+9NV1nNP65xhsgIpu2.2jsX38D2FIM+68CEcMtkSfSlkLU0sVI5umaEXYUN7CaE7nxadk01csR1waS+mctR34TLd6LRqcDdqDufZTrK76cISFH0iccIeN0aSCVqVv..WV8NO5j0+64UiC6HG8WrUvLYKYQAckKLF4oIdU76DPi2sWLmpz.SqRCFulKa3og84o61ZgaG06S2l0i132R+q6Ay2KV1vClu2AyTq2khd+z8yw1WYcaFZrEdepzHoi91zP9CQhF+Y2tWsWXLipwkVkoMr5u2mWcqMyT044twFywjkHB+Xh1vq119zhQp0QX4k5MxLHFdm81yYnR2euwzcte3HcmKr4oqE9OOth2XWRpuHaO4tHaO4tHrQJmKLInvTQpXpiByrRESCwwTRiNNWXZhBS4VoagBS4VoWPXLk0HhyEl1nvTtU5EQgYJlCgiq4cMwEmRZTv4iy7n3TQtbRPwojq2E2SjrF4a93z.EmRtd2DEmbWu+QGNmiKTtuOKheeVD+9vBk6XQjfBQEognNJDkWEsg3HJov2NVDMQgn7pnsPgn7pnKHLhxJjsiEQaTHJuJ5hnPj6J5O9Xa5VSbwnjBS63YLOJFUjGiDTLJw5Zw8vHqPyNdFMPwnDqqMQwXJmDBmUMblRjqZSmVtG5TQHLZgemYpH7dKlJBKlJBuQNUDdeFa8ESHgESHgESHgESHgYmIjvGx15zhokvhokvhokvhokvzbZI7eeLcrSejN1E1HUTaTWaye5ii9vgM+DtDam7tDam7tDr2MOSFuDT7pfgWcT7lECuFhyqjdW3LY7ZhhWP5AKT7BROTPXdk06dlIiWaT7BROTDEubqGLlL+EZhKfkzK5kID37n.VADvDT.iRRHtONY8dUYBA1.EvnjDln.FkjPb2bx50XxDBbAT.iRRXiBXtkDE4BX+FMd75996OttanxRsJK0pv5tgHTSPQsBRp0QQMTEhg3TKoNfHB0lnnFpBwBE0PUHEDlZY0kDQn1FE0PUHEQQM2JjOQDuLZhKrkTmTDB67nvVAJ1DTXiUjHt+QY0sEgv1.E1XEIlnvFqHQbWjxpiLBgcATXiUjXiBatEIk3A6xtMCba83Jc1YmGWsg+KbaMtd27sYw+ayh+2F1SHPpvmfBekoB95nve5HdLDGeI8TGjJ7MQg+zQ7XgB+oi3ofv3KqmjgTguMJ7mNhmhnvmawS4T41RSbwujd5HRG+4QwuxzgeBJ9mR5Gw87Jqm3hzwuAJ9mR5GST7ys94FSH+iKd4Ojk6Ojk6ODV7xhwMAE2JX4VGE2f0IFhysjBMVLtMQwMXchEJtAqSJHL2xJJXw31FE2f0IEQwM25jOUL+NZhKvkT.uBBddTfq.FbBJvQKUD2morhsUPvMPANZohIJv4VprJOfe65O083FB3uEK7eKV3+VvBoMEvSPAuxT.dcTvOMjMFnfe4o.7lhCujBOOEvagB9oglu.J3mFZdaTvOMz7EEFdY0UialBmTZnnWYZPedTzmcZPOAE8KOMnOEdYkTOmRC8Fnnepn6MQQ+TQ2agh9ohtWbOsxpafogdaTzOUz8EQQ+zP2SzPQ+xRch+1m9w0O1KvR8EXo9Bv5GqHTSPQsBRp0QQcVjTaHN0RpWehPsIJpgpPrPQMTERAgoVV8QRDpsQQMTERQTTK2oWcRuLZhKrkT2IDB67nvVAJ1DTXiUjHt+QYE6sPXafBarhDSTXysHwh+7FMtfU+HVj+HVj+HNBfhHTqHSLxDTHq.CYcTHiSXXfB4kggro3HqmrM5RSGsrEJjwokKfBYbZYaTHiSKWTXjOnTRjuuPZ4BSrqDMTLqfi47nXNKNlInXdYbLKtGvCteRlqLkzyFnXFnd1DEy.0yVnXFndVbufqVI4a2gGNkzy1nXFndtHJlwomIZnXFmdlHtevW+vj1fe8zQOSHnXFmdlnihYf5YCTLCTOKtevU+Z4LvWSNyVnXFndt.JlApmsQwL25YCdGcwwMHceLKveLKveLrLJOg.SPArBHf0QAbVP.afBXTZXSwAVR47dBA1BEvnzvEPALJMrMJfQogKJLvxJq7lSniCMTDqfh37nHNKJhInHdYTDmBucRZpCLoDafhXX5XSTDCSGaghXX5Xw83IqY2vjRrMJhgoiKhhXT5XhFJhk6vUTwau165GLtd3cYVluLKyW9nBmG+vULDyDTLqfiYcTLmEGyFnXVtYu9QUCFr.XODx+.Vj+ArH+CNYmUQrHSPgrBLj0QgbVXHafBYbZYSwQdZNqhXQ1BEx3zxEPgLNsrMJjwokKJLxS0YUzPtRzPwrBNlyih4r3Xlfh4kwwr3d.mpypngX1.Ey.0ylnXFnd1BEy.0yh6EbpNqhFhYaTLCTOWDEy3zyDMTLiSOSD2O3TcVEMDyDTLiSOSzQwLP8rAJlApmE2O3TcVEMDyVnXFndt.JlApmsQw730ya2xula619sxrz28AuZe5Nee0pAsbc1yq4SqFcC0Jy8tUlkNkZEu5tYJ8p8cZ21sd3W9tNdMYGXkRNMbZVycvtxj4g9d0bW2aOufA686u588Zz3NN0cef2dLmswp2qleyx9M76PoIqpFEN2F9N0q58MLm1qWsTmc1ws0v68WsZzO0M2yuSyg9s5dOTwceWmfM7qy7cd6dl6I+Vu2pa6ETa2Gzxo1ynECr2ia0zs5t9Ar6pbK+1s2gd6DcsZyd6ucmVOMrrZvdp39b2VsGdea1Yux65zroai1g0rgFweQa2pANTYwFNAs7dI6YG8qn8.mmDJ0TTi2NehsII1VOw1FI11Lw1VI1tvfsWR8108B7aExmKE3SUxu9qnkIunYXkV9LOzqsWz4FtQUZsYbc4FN6usC8Vj4LK40UgQOV7dBUTz5nNMn259MYN0Lk20qQ89h01Yn+tLR2rwR2OPcCu5d82OsPkJPCEuuWzAxM3avJiWRY3anrG9MjFyMznHwZLsbLQze33amgoY36ygn4dMCba11K3UrRLog3RJLL9twL9Vp2bsaUsRDZmMxJO2Mu0Zzcvh0F9M82eW+ld0FVMSUmO8ozlHXfcr2A2LHfZLUtSqmOT6C2xslyqFYuwm7n6YcpwSC1culei5ib4F3fu0pU6zNXnVotzqq31v0osKKb2tl+vsLLQk34O5RbUNUEmSM9lLWTqhSOIAup1y2iu3ZgYO.OqZT0+rZ426p1ULNyV.dd0t1FmjEgucLfmQkFIiesvew3Bun1k5uuikMpCzttrXaXh56MvMYKFdOwsQRy+d+PQWia4D3DN+AzsVI5umaEXYUN7CaE7nxadk01csR1waS+mctR34TLd6LRqcDdqDufZTrK76cISFH0iccIeN0aSCVqVv..WV8NO5j0+64UiC6HG8WrUvLYKYQAckKLF4oIdU76DPi2sWLmpz.SqRCFulKa3og8Wq61ZgaGMwsbaVOZieK8utGLeuXYCOX9dGLSsdWJ58S2OGaek0sYnwV38oRijN5aSC4ODIZ7mc6l0dgwLpFWZUl1vp+ded0s1LSUmm6FaLGSVhH7iIZCuZa6SKFoVGgkWp2HyfX3c1aOmgJcexX5V20GoacgMOcsv+4wkbaz3wOva+wMEFLY6NmIa24L4HS02VngtheVInXUQ9rpih0rxmUCgYcjkvcAWKz4mUSTrBPCXghU.ZfBByJyhucpFxO9Y0FEq.z.EQwZJdZURvJ0UbmF0G+aJq0XAdMVfW63a35fsjzCvzQBLAEvJf.VGEvnjDFhC71xosgIDXST.iRRXgBXtkDqbT.6+hCKfQcVT0YQUmi.aVQn1G3FUBJTUjNp5nPU9B.CTntrzQ0TbT0RF.1OFqV0BEpxWqV.EpxWqZiBU4qUKJNpeVx48xcjemvFxEfFJVUjOq4QwZV4yJAEqKKeVSgGq6lzzZSv5UCTrBPuZhhU.5UKTrBPuJtWqC1TNuTC3mUaTrBPuVDEqxWuRzPwp70qjT32ppbliz7yJAEqxWuRzQwJ.8pAJVAnWE2u0Hyy0U+Jv5UKTrBPuV.Eq.zq1nXEfdME9s9poPBOFZvgzPwp70q54Qwp70q5DTrxsdU+XX8nxMyMX48Fr7dCNF5sOSn1XmLdIn3UACu5n3MKFdMDm2US1+qslB5AST7BROXghWP5gBBy6Aakz+6OcJnGrQwKH8PQT7JmL2Np+BMwA9mNExb6n.mGEvJf.lfBXtkDW8H.t7t9Oarubk+TVP+TVP+TXubk4DTBJPUjLn5n.U1U8FhCpjdmDyInln.U1U8Vn.U1U8EDFTY8p7kSPsQAprq5KhBTtq5uFmM3qItHURu9a4kz7nHUQ1jRPQpzq8E26jrdowxKoFnHU509lnHUJy7kpdey2zX7CUz8YQ89rndeNBNwT5S8ogPkfBUEoipNJTku.v.EpKKcTMEGUqUkxyfD2nZgBU4qUKfBU4qUsQgp70pEEF0QdldD7wi35b6BPCEqJxm07nXMq7Ykfh0kkOqovi013e19FlUCTrBPuZhhU.5UKTrBPuJtWKlmWNXSijgY0FEq.zqEQwp70qDMTrJe8JIE9slBSijgYkfhU4qWI5nXEfd0.Eqo7Uh2aoF8966Mi2Idevh2IdKdm38F46DuyEalu3kh2hWJdKdo3s3kh2ryKEu2qaCSKdq3s3sh2h2JdKdq3MEeq3o7OeItlhGwuoy6uZDNtbmdI19ycI19ycIX4NkSPIn.UQxfpiBzrRFTCTftrjA0TbPkTNS4DTKTfJaMZATfJaMpMJPksFsnvfJqbkdMNavWCEoJxlz7nHMqrIkfhzkkMoov6jjxQJujZfhToqSMQQpz0oVnHU55Tw8PIqbixKo1nHU55zhnHU15ThFJRksNkjBeTeEpod73IkfhTYqSI5nHU55TCTjxsN07HIMZwLaqlrqSlCQ76xR76xR76B6QiaRIlfhXETDqih3rnH1PbhkzSM2jRrIJhgoJrPQLLUQAgIVVOPcSJw1nHFlpnHJh4VUXModPzDWHKom0tIF47nPVAFxDTHiSXHteOY8X3MwHafBYbBCSTHmhYKXWjCo7wkoe4m0dbQa98XY86wx52aJthKcXrRPwph7YUGEq.z.FByJtUboCiUSTrBPCXghU.ZfBByJtUboCiUaTrBPCTDEqoWCD49prayfw+TZ+Qrr9Qrr9Qbzl0GI21AFgUBJVUjOq5nXEfFv.EqKKeVMQwpp7Y0RbVuTReAVfssJfhU.1V1nXEfsUQTrxsskF+9BzPAqJ.XSgmqBIyt+pBYcMAvRPAqB.X0QAaV.vZfBVDFXlnfEgAVJbecyjsFbGzFXEPAKBCLaTvhv.qHJXAXfQzPAK.CLh3dvN3NIaM39fMvHDTvBv.iniBV.FXDCTvhv.yDErHLvRgGr0SB61nMvJfBVDFX1nfEgAVQTvBv.SWCEr.LvzE2C1qSNyUWsJXCLcBJXAXfoqiBV.FX5FnfEgAlIJXQXfItGrCFY9F7PzFXEPAKBCLaTvhv.qHJXAXfYngBV.FXFh6Aa0jKXbu9QfMvLHnfEfAlgNJXAXfYXfBVDFXlnfEgAVJ5C1WlLd1uFsAVATvhv.yFErHLvJhBV.FXlZnfEfAlYJ5C1WKmYwyD.KAEr.LvL0QAK.CLSCTvhv.yDErbafczOKY2t9SG6hV1GyR5GyR5Gyw7MYE.OwqCHkfhTEYSpNJRyJaRMPQ5xxlTSTjJcKJKwIUKY2C+wPsnJfhToaQYihToaQUDEooXg13PZ4WCEppRG0T3k5yRFv5cjz5WygfJAEpJRGUcTnlU5nZfBU4aVYhBU4aVkBWU2MYK.ah0rp.JTkuYkMJTkuYUQTnJcyJhFJTktYEQbuUGrobdB14FUBJTktYEQGEpR2rhXfBU4aVYhBU4aVkBuUIy61AODqYUATnJeyJaTnJeyphnPU5lU5ZnPU5lU5h6s50OTNuy63FUBJTktYktNJTktYktAJTkuYkIJTkuYk3dqj0qnOtQs.JTkuYkMJTkuYUQTnJcyJCMTnJo7AWwau165GLtLVcYVXuLKrWliLAbU.S3hgfkfBVE.vpiB1r.f0.ErKC.VSwgckjCdwmhVyZgBVDZ1BnfEgl0FErHzrEEG1ejbV+KxOANEzPQqBBZyih1rHnkfh1kQPq3dwF8MT05v0sFnnEht0DEsPzsVnnEhtUbOYGLxCF2OAtt0FEsPzsEQQKBcKQCEsHzsDw8k85ehbdSKNIzRPQKBcKQGEsPzsFnnEhtUbeYirZebvifqasPQKDcaATzBQ2ZihVH5Vw8k85GkzJ6mgV2pqghVD5V87nnEgtUmfhVD5Vcw8ks5OSNIDYRn0.EsPzslnnEht0BEsR58w5iNzUtne.Kq+.VV+AvVoh4mUBJVUjOq5nXMq7Y0.Eq.zqlhypjV0h4mUKTrBPuV.Eq.zq1nXEfdsnvrJqUvXM98EngBVE.vlGErYA.KAErKC.1T36RRqlwS.rFnfEgl0DErHzrVnfEglUb+WxZkMdBf0FErHzrEQAK.MKQCEr.zrjT3A6qlFu4OFBVBJXAnYI5nfEgl0.ErbqYuAGu4OdbkN6ryiq1v+EieoG5ayx82lk6uMrgNPLtIn3VAK25n3NKVtMDmaI0kcw31DE2f0IVn3FrNofvbKqtJKF21n3FrNoHJt4Vm7oh42QSbAtj5epffmGE3JfAmfBbzREw8YJqtEJH3Fn.GsTwDE3nkJh61TV8FSPvKfBbzREaTfysTwfWvGWOd9PVf+PVf+PX83YBAlfBXEP.qiBXTRBCT.uLHfMEGXI0arIDXKT.iRCW.Evnzv1n.FkFtnv.KqdJZNgNNzPQrBJhyih3rnHlfh3kQQbJ71IoNxNoDafhXX5XSTDCSGaghXX5Xw83IqdYOoDaihXX53hnHFkNlnghXT5XRJ74Iog.XRIlfhXT5XhNJhgoiMPQL253hG6K5liK6reKVp+VrT+sfMVEhPMAE0JHoVGE0YQRsg3TKoQBPDpMQQMTEhEJpgpPJHL0xpe1hPsMJpgpPJhhZtUHehHdYzDWXKotvJD14QgsBTrInvFqHQb+ixp+gBgsAJrwJRLQgMVQh3tHkUmuDB6BnvFqHwFE1bKRH7g835MyEXw8Br3dAX8lYhvkfBWEH3piBWLhACwwURcbYhv0DEtXDCVnvEiXnfv3Jq9nLQ3ZiBWLhghnvkawf9D4lPSbwqj5NxjwadT7pfgWBJdAoGD2ylr54wjwqAJdAoGLQwKH8f3N2jUmLlLdKfhWP5AaT7Nd8v1s7q41tseqLK8cevq1mty2WsZPKWm87Z9zpQ2LsxbuaQugTqteCm16lozq12oca25ge86530jMR1RNMbZVycvtxj4g9d0bW2aOufA686u588Zz3NN0cef2dLmswp2qleyx9M76P4IqpFEO2F9N0q58MLm1qWsDs7xs0v68WsZzO0M2yuSyg9s5dWTwceWmfM7qy7cd6dFLI+Vu2pa6ETa2Gzxo1ynEDr2ia0zs5t9Ar6pbK+1s2gd6DcsZyd6ucmVOMrrZvdp39b2VsGdea1Yux65zroai1g0sglBeQa2pANAd01vInk2KYO6neEsG37jPglhZ714SrMIw15I11Hw1lI11Jw1EFr8Rp2ttWfeqP9bo.epR90eEsL4EMCqzxm4gds8hN2vMpRqMiqK2vY+scn2hLmYIutZL5wh2SnhhVG0oA8V2uIyolo7tdMp2Wt1NC82kQ7lMV79Apa3U2q+9oEpTAZn788hNPtAeCVY7RJCeCk8vugzXtgFEIVyokiIh9CGe6LLMCeeNDM2qYfay1dAuhUhIMDWRggw2Mlw2R8lqcqpUhP67csyycyasFcWrfsgeS+820uoWsg0yT84SeJsYBFbG68vMCBnlSk6z54C0Bwsbq47pQ1a7IO5dVmZ9zfc2q42n9HWtAuG6ZsZ0NsCFpcpK85JtMbcZ6xB2sq4ObaCSTYd9itLWkScw4TiuIyE0t3zSTvqt8783KtVX1CvypFU8OqV98tpcEiyrEfmWsqswIYQ3aGC3YToQy3WK7WLDsKzqko968Xoi5DsqaK1lln9eCbS1lg2SbajrAfd+PQWia4D3DN0WzsVI5umaEXYUN7CaE7nxadk01csR1waS+mctR34TLd6LRqkDdqFufZT7K76gISFH0jccKeN0aSCXqVv..WV8NO5j0GL0QWTnG4n+hsBlIaKKJvqbgwIOMwqhem.ZLu8h6TkFbZUZ.40bYCQMr2Oc2VKb6n0kR2l0i132R+q6Ay2Kd1vClu2AyTq2khd+z8yw1WYcaFZrEdepzHoq91zv9CQhFCZ2NZsWXbipwkVkoMs5u2mWcqMyT044twFywjkHJ+Xh1vq119zhQp0QX4k5MxLHNdm81yYnR2OXLcr6Ri1wtPmiWK9eGSVWtKau4tKau4tKG4EnnPidBGPRPAohDgTGEjYkHjFnfbYIBoo3P9IIGAx6gRSZgBRYpIKfBRYpIsQAoL0jEEFxCt2QtHiysl7xbzXtFJJUjIk4QQYVYRIAEkKKSJSgWmjqR2Y9RX5RCTTJUcoIJJkptzBEkRUWJtmmU+R4jEFdnzFEkRUWVDEkxTWRzPQ4xoKuPukZDkuYjVn2dQZgVjVn2HSKz4hMyWjUnEYEZQVgVjUnYmrB8dcaXZQRgVjTnEIEZQRgllIE58GSe49gi1WtnrVest+uwjVnax1Ytax1YtaB6gwgKLInvTQpXpiByrRESCwwTROzMbgoIJLkaktEJLkakdAgwTVObMbgoMJLkakdQTXxck9U3p4cMwEmR5gngONyihSE4xIAEmRtdWbOQx5gkgONMPwojq2MQwojq2E2YjrdnX3iyBn3Tx061n3LaZS1wC72KW9EOCLKR1whjc76xI6HxLeQxNVjriEI6XQxNlkR1QbCSKR1whjcrHYGKR1wzLYGjwzatqORu4nsO837WK5e69hfdbY7PisGcZr8nSiiwneEgFYD9YkfhUE4ypNJVyJeVMPw5xxmUSwYUK4HN9iAqWsPwJ.8ZATrBPuZihU.50hhy5mkLyH2QH8pF+9BzPAqB.XyiB1r.fkfB1kA.aJ7cc2j1WahVyZfBVDZVSTvhPyZgBVDZVw8ecvlx4AUbBf0FErHzrEQAK.MKQCEr.zrjT3AK4iz1AODrlkPPAK.MKQGErHzrFnfEglUbOXu9gxYlTLAvZgBVDZ1BnfEgl0FErHzrovCljlEH7CqtFJXAnY0yiBV.ZVcBJX4Vyd0iD1Jd6MtwjkvBJgETBrYgNmfRPAphjAUGEnYkLnFhCpjlK5bBpIJPkcUuEJPkcUeAgAUVyHcNA0FEnxtpuHJP4tp+Zb1ful3hTIMuz4kz7nHUQ1jRPQpzq8E26jrlc57RpAJRkdsuIJRkdsu3NnjUuS3kzBnHU5091nHUJyScxh4o9h4o9h4o9uqOO0IKlm5Klm5Klm5Klm5yZyScxh4o9h4o9h4o9h4o9Tcdpqw87njD0eNxQLO0uFaO5tFaO5tFGifOQhy62wwJAEqJxmUcTrlU9rZfh0kkOqlhypdxQerDX8pEJVAnWKfhU.5UaTrBPuVTXVOnTRVuuDmWOi0WfFJXU..adTvlE.rDTvtL.XE220A2OIrUPqYMPAKBMqIJXQnYsPAKBMq39uVsBx476Xg0FErHzrEQAK.MKQCEr.zrDw8fMxj8LyWCVyRHnfEflkniBVDZVCTvhPyJtGrU+Zjy42wBqEJXQnYKfBVDZVaTvlx47aOXOj4760YA85rfdcXKHobBJAEnJRFTcTflUxfZfBTYqQMEGTIs.kxInVn.U1ZzBn.U1ZTaTfJaMZQgAUVKXoWiyF70PQphrIMOJRyJaRInHcYYSZJ7NIoEvTdI0.EoRWmZhhToqSsPQpz0oh6gRVKno7RpMJRktNsHJRksNknghzTt3l9Np2ogueqbTdWLWpWLWpWLWp+c24R8EFXpuX9TuX9TuX9TuX9TO6Lep+.lFmVLmpWLmpWLmpWLmpmlyo5qx8b9SOpuc5Gwbp9Jr8t6Jr8t6JvdOyvOqDTrpHeV0QwZV4ypAJVWV9rZJNqR5kiC+rZghU.50BnXEfd0FEq.zqEElUY8F8QieeAZnfUA.r4QAaV.vRPA6x.fME9tjzahnI.VCTvhPyZhBVDZVKTvhPyJt+KY89SZBf0FErHzrEQAK.MKQCEr.zrjT3AC56j1wBKAEr.zrDcTvhPyZfB1TNup5A6gL+T+DVP+DVP+jo77ScDPIn.UQxfpiBzrRFTCTfJaMpo3fBc9oNBnVn.U1ZzBn.U1ZTaTfJaMZQgAE67SczF70PQphrIMOJRyJaRInHcYYSZJ7NAc9oNJoFnHU55TSTjJccpEJRktNUbOTXmepiRpMJRktNsHJRksNknghzwqSmF4fdOmZs7ebM+lAs7ixD8aGsmLKksYTQyoU2Hb6b4y7bmFcBykrp1JZY1yqt2iqUKbJLbs7YxL9uCQfuit.eGCA9NlB7crD36TPfui8Q9cBmHm2rSf+dwSoEpRobbsW3rUdo2gcC0k9NCOSKdG0voMQqcbp4lI525dMq69xdhg34.ByTM31Mqy14p6zoQiQNmvcl37p9L2WDt8E+m9mZ9GcmrqF8aRukB22e3G7Ob2+wu4ea3Lgrk2S5DpzOuZkbka4zd2s6zr1tYFL0jnl.ar8simRDKc6ASIhL++wZ2aOI
-
@Fergler said in applyMask behaves differently at different UI scales:
LookAndFeel.js
Your snippet doesn't contain the "LookAndFeel.js" file, you have to provide that file as well
-
@ulrik Oh, first timer snippeting. I thought it just bundled all xml js into one.
Here is the look and feel:
namespace LookAndFeel { const themeColour = 0xFFEBEBEB; const themeColourTrans = 0x99EBEBEB; function drawArc(x, y, g, path, start, end, color, arcThickness, scale) { path.clear(); // Clear previous path data path.addArc([x, y, 1, 1], start, end); g.setColour(color); var pathArea = path.getBounds(scale - arcThickness); pathArea[0] += arcThickness / 2; pathArea[1] += arcThickness / 2; g.drawPath(path, pathArea, arcThickness); } laf.registerFunction("drawRotarySlider", function(g, obj) { var isBiDirectional = obj.min < 0 ? true : false; var startOffset = Math.toRadians(126); // Convert degrees to radians var minArcLength = Math.toRadians(4); // Convert degrees to radians var centerX = obj.area[0]; var centerY = obj.area[1]; var size = obj.area[2]; var p1 = Content.createPath(); var normalizedValue = obj.valueNormalized; // Static white arc (background) drawArc(centerX, centerY, g, p1, -startOffset, startOffset, themeColour, 1, size); var centerAngle = 0; var startAngle = -startOffset; var endAngle = startOffset; if (isBiDirectional) { var centerDeviation = minArcLength; // Deviation at the center if (normalizedValue <= 0.5) { // Scale the left deviation based on normalized value approaching 0.5 from 0 var scale = 1 - (normalizedValue / 0.5); var leftDeviation = centerDeviation + scale * (startOffset - centerDeviation); startAngle = -leftDeviation; endAngle = centerAngle + centerDeviation; // Minimum arc on the right } else { // Scale the right deviation based on normalized value approaching 1 from 0.5 var scale = (normalizedValue - 0.5) / 0.5; var rightDeviation = centerDeviation + scale * (startOffset - centerDeviation); startAngle = centerAngle - centerDeviation; // Minimum arc on the left endAngle = rightDeviation; } } else { // Non-bidirectional knob starts a little after the far left startAngle = -startOffset; // Adjusting start point to include minimum length endAngle = startAngle + normalizedValue * (2 * startOffset); // Stretching end point based on normalized value endAngle = Math.max(endAngle, startAngle + 2 * minArcLength); // Ensuring visible minimum length } // Draw the dynamic arcs drawArc(centerX, centerY, g, p1, startAngle, endAngle, themeColour, 6, size); // Math.pow(0.001, size) g.setFont("Oxygen", Math.pow(size/3.4, 2)/(size/2)); g.drawAlignedText("PUNCH", obj.area, "centred"); }); laf.registerFunction("drawLinearSlider", function(g, obj) { var left = obj.area[0]; var top = obj.area[1]; var width = obj.area[2]; var height = obj.area[3]; var normalizedValue = obj.valueNormalized; g.beginLayer(1); var border = Content.createPath(); var innerMask = Content.createPath(); var midline = Content.createPath(); g.setColour(themeColourTrans); g.fillRoundedRectangle(obj.area, 4); border.addRoundedRectangle([left, top, width, height], 4); g.applyMask(border, [left+1.5, top+2, (width*2)-3, (height*2)-4], 1); g.endLayer(); g.beginLayer(1); g.setColour(themeColourTrans); g.fillRect([(width/2)-0.5, top, 1, height]); var center = left + width * 0.5; // Calculate the filled rectangle dimensions var filledWidth, filledLeft; if (obj.min < 0) { // Check if the slider is bidirectional if (normalizedValue < 0.5) { // Fill from center to left filledWidth = (0.5 - normalizedValue) * width; filledLeft = center - filledWidth; } else { // Fill from center to right filledWidth = (normalizedValue - 0.5) * width; filledLeft = center; } } else { // Non-bidirectional, fill from left to current value filledWidth = normalizedValue * width; filledLeft = left; } // Draw the filled rectangle g.setColour(themeColour); g.fillRect([filledLeft, top, filledWidth, height]); g.applyMask(border, [left, top, (width*2), (height*2)], 0); g.endLayer(); }); }
-
Example:
-
@Fergler sorry but your snippet reference to a lot of "included .js files" so it's impossible to read it without those files, could you provide a small example that shows the problem?
-
@ulrik Here is an example snippet as simple as I could make it
HiseSnippet 991.3ocsV0saaaCElxIJX1sqXcnO.B4JE.OOozttALLz1jXGXzjTi3ztATTTPKRYyYJRARpznFz61yydE5yReC5av1ghVwJqFosFX9Bac9kemCOmO4QJYBUqkJjW6yJyoHua6OtTXls+LLSfFd.x6N9Gi0FpJvoZuxbrVSIHOuMNzpvq8lnpOe7Q6g4XQBcoJD5ERVB8HVFyrT6nG+TFmO.SnmwxZ38Cd7vDoXeIWV.3YC+HTNNYNdJ8Dr0sV9Hus5SXFoZrAanZvm8jjxwyjuQ37+ELMaBmZEhQigD4Ti1eFiSFUWqZDxayQKq7MbU987OlQXWoeYG36pLDrLhl8.uV2Djh+JfjWCHsoCR20ebhhkaVZwhma4OT.WHoXnU2DJNeQs98V96KAODldY34zAJP3pHBeXTT2.3qc90NP2VaB33zfeKnuXJSP6knnPcbHWNAyc46Hob9SDjATJODhoC3dOEcJyNSLnPjXXRQ31DE9MmJMXU4XNiPUa2MHs13ztAxI+4NAW1oS6o8l.wJNBWRUgwP9.MZpwcoG59QC4m3LkBCJmRSLgPB5gArYU2o84XUPdLf555zA6QXyrPmG4w8vDxoxBAgRrY.KlxogurNOuL5U+3tcuRJ9ZR6dMo6CRupaPbjCR37bdIrRLOLOtpvp7pafQUPcm8zdTAwUgfh2YaZtNstp0z.1.DepPNIb6ynZy1ci5ZOi59VfTbhzPelHbmNWB48ccB9ulRSWoMa5URN2BfUX1t0oto.CEEYSnptAmi4PQU6HLVd8Y8s9xl0SbUaCGkhgBl4Y4zExCjbhcF197mtYfVztr6HKPH3poZC4NK1PbScHFjjs7scSTE1aREgd9vCvFbcVfDBGRNUYX1Zw6.54.Ukauqs+AT8biLux2rbovd7d29yclWf778rGUY8CZSosgrku8dFkwHDNcjTyrM7FTmuG1lxGydaEfu7d+8ge3s+0ixZxthPY3KZR1pKRSYWTQKBaIYZC.ogY.aIx668etlFPno3BNL0MGxCmIlSImIq7G8oLM.GmjTvwlqS7YY3WXvB3lrMVFEATHkMA0WAaXzMxF9kBw65OhYRlsZL1ZEXDt9++.iKdGx252OMEXaVBvM8G7Gq6KL9LGOvtYXhoGigqd6j2IEYiA5yDJb5BAkqsCgsr6ON4n5gxw.+Tkv+.eVXL1J6svXbsQXnKQIechaqy9VpuoRCfIQ0KkaC+6.PNHtdey2OpWjcPm85jDa4+CwHzpiY20Hl6uFw7f0HleZMh4gqQL+7ZDyubiwX+uJOovHybqCfhQ8q38775KvvjU0TH5eA9EXuz.
-
@Fergler Yes I can see the problem here as well.
I made a gif of what is happening.The path (p1) is used as a mask (the black rounded rectangle) , I also draw the same path with
g.drawPath(p1, obj.area, 4);
the white rounded rectangle
As you can see, the mask is not following the scaling but the same path alone does.
@Christoph-Hart this looks like a bug.
HiseSnippet 939.3ocsV8taaaCDmzIpX1scnAXO.B4SJ.BtVoo+AXXnoIwtvnwoFQYECnHnflh1lyTjBTzISsneauW6YouA8MX6nnUrbi65fwp9frNd+ti+ti2czC0JJKOWoQ3lWTjwP364EWHMSOdJgKQ8OAguuWNkH3xIYDyTzQEYj7bVBBi25kVH3laiJe97yOhHHRJa4RHzaTbJ6TdJ2rb0gG9JtPzijvtfmVC8AG1mpjGqDp4.c1xqCJiPmQlvNiXg0vCguS2DtQoiMDCKGg29HURQ7T00RG92vy4iDLqPDJFbja4dJQhkw1UQGOkKRFVE14HvKCWlD1xkD9IuA7D9MquLY7fRE9Ksnd9.2XU5s0JzKpN85TidqgR3ZTZaGk1wKlp4YlkZr74td8kFldLAR60ohCKpwe0v6XEfPZZmRlw5oAgarH3Ic5D5Cu16maAY9biufL1+W76Jmvkr1TMChiWJTiHBm+NUol8BYROFSD.1.naqYS34f+5MWRMbkLX2DM45yUFhtHVvSX5cC8GWobRnuZzuum+GZ0p4j14Li6zNv8SN3sDvufpwPEx4LpI.f2l.DwtbqlWQz9YQ.EqBJGGGBUlANDSZOBXj7TRASGXzyY1kyhZSRRNWMWB0AV2RjSDrf2V47214xva9Np126e4C2eozi.oKC8i533HIKSTLfjOKHKpLtJQE5uXWsPXxDGSpH2sC4qmxMLmCsYtxPw5uMjbGX24OZe4NQyKOCpkwfDwqjpQA6dAK2raXmPazTc.4qjmoLrWKC1q0G.F+wV9eopwiWqNq60JgvFqqQssSW+uYXfbd5HlNz+Jh.ReU.gx+U6o7958T0a4otnsFPkrujadcFS90FDfVjhr8eKXE.0T188iK59bkzHNzjcGOaFDUx25i7P+Z+SHFRkW.GBaRFSa3V9iOgcELRz0S2z6DV9LiJqDaZlRZ2dr22ZO+C.C1tUEUe.sfYw72WQjC+z6+ymit8PDX7kJYtfXVcllcP9BEvgxJCRrCKj4bSQ8A8+uMn6+JE2waH2PmtdN1XMbDx9eO33hqGtuW2wigwHKI31d89suO2EffwVF312ADilaO3OadZLL4fxfcWJYBaSAtgs70I2oplHFl9TJ72vyBkQVY7BkQUJQoDpV8Npqn2dAzOTtBvIY4cuM8FXk8itc4dJbe36nzUc0sLb+M0vGsoFdvlZ3i2TCexlZ3S2TCe121P6eW4EyMpTWaCBMXX2xwSXbWIAp.KqVQ+CffzY8m
-
I should mention this also applies to the plugin preview window if you changed zoom scale - but I have not tested a built plugin yet.
-
This issue is still present on the latest develop build. I'm getting inconsistent results when testing across platforms.
OSX - scaling bug in plugin preview, but compiled plugin has no issues
WIN - scaling bug in plugin preview and compiled plugin
Added a UI zoom tile to the prior snippet for convenience:
HiseSnippet 1196.3ocsVstaaaCElxILq1ccqEXO.B4WJ.FdVtYa.aXnIwWxBpcrQbZ1.BB5nkns4BEofDUxbCBv9wvds1yxdC1aP2ghRwRINaMAq5GRjma76bz4BGEI8nwwxHjU0iWDRQVeJd7BgZd64Dl.cPGj0yvwdDNSLKjnli1aQHINl5irrVaesHVUWGk972uZOBmH7nKIgPmHYdz9r.lZI0Q67ZFm2i3SOlETP5s24.OonsjKS.3rFtIJj3cNYF8PhVrJXj0Fc8YJYzXEQQiQVqumzew34xKEF4OgEylvo5MtnwfgLj6I49ZDqohZOmw8Gk61wHvJiVFDVyDD9B7.lO6F5KCFOOkg8RMJFOrpTFdqUBdtEgWyBvaEPxp.jV2.oWfG6EwBUK4nwySwGHTznoDHrWDJFYQU9yJ31RPBgpQ.4bZuHXyMZ370MaV2Fds02UCh7wJaNYp82a2ULiInM7hnferOWNgvM1quTd9tB+dTJ2AzAjtQDcFKFrWuDgmhIENa5GQt7HohDsXLm4Si1rt8zblypaKm7KaYeUsZUm0HlpL+scLehAq4C1EXMExPNh5ob.waP.fnIWq5EjH6PW.h4NkAiifLSGiDyZLAPjnOYAMxQEkP0jCcaP78ORlHf7.sYIhYbpyo4F+zlmU+l0tEV25rur0xcuD1cVca2lFLRBC4KFPhO2IzM0uRkptc1opEgJ7MHIGb20kubNSQMFTG4RcEs8djfaa8Ies9k4OZb5+fBQLHP7ZgbhylGSiUaVuYcs2j+CxVJNTpnCENaU6J.wWWy91rlNck7zlORx4ZecEr0U5Q+aJ5HRBlPipaeAgCgubAgz+x0T36ulpXIumwaKHnTbffoFFRE2Wi.TVHRW+kgJPTUZ02mkU8YRoQLnHaCrNBhRwawVdn2bPGhhjaEvfvgDRiTLM9s5Pu.ZIZpoqh6PiOWICgtaskAgRg93sv+Wm4uBxXoOpE4KfRvvwr2kCjc9q286uBUvjUUY80LlrGWRTPK8iYPnSa3OGWjjq9Dx7neityha17yzcx7IiC7bb6jXkLXLUo0MFMYVd+6pa.x+dsRP9cPIpnxTaUjbZnqxeXgupls8lchXW.cP9V6oDdLsdJoz3WIRCSTgIpRj1KY5TZjNhTh7XRPHmdDjJUhroG2diFTVXETWE.t0.o+sLCLPj1i3A4k.cc8dJ4zgc6F.sYTCR3JVHmcKv2lSIQ5IHsauBb0W5QzUE2xemjbWD7lXpNUd+92Gt5CckAdmBjssa13qpms3axV41nY9hV2PJaQqFMgumU6ZXV8clCAS.k9Ibhp7XQ8cAxX.dPoYQ54MhXlZQw6J7+1rxOTH9B7Hlxa9pwXkUfQn.9iAFytgwyvcgLTO0R.tNt2O8w45DHXxmt7b.QEwz8NNLIXLT34QgSWHnbceUqJ5Nfl8MyaqLFFfkt48vSFSW8dqLlt4LQADuH4a8L8M02g4IoT.LIRu91mf62ans6c6WF.kCu0yqrgtkZsdbp8xGmZa+PUCiOoa+GpRafOb3wcenZ8D7Q6dXmgCdn58T7fgcr+wen6GBP0cn1MA5qaJTPnAi5l1X1xpqf.4bo4mn+APXBroF
I keep coming back to this commented-out line 191 in PostGraphicsRenderer.cpp:
if (scale) { other = path; Rectangle<float> area(0.0f, 0.0f, bd.width, bd.height); PathFactory::scalePath(other, area); pathToUse = &other; } else if (scaleFactor != 1.0f) { other = path; //other.applyTransform(AffineTransform::scale(scaleFactor)); pathToUse = &other; }
@Christoph-Hart should there be something in this spot to handle the non-1.0f scaling for applyMask? I've tried uncommenting the line, adding variations on the two lines from "if(scale)" to the "else if" section, and removing both conditionals/leaving the contents of "if(scale)", but no luck so far.
-
@Goodflow same as drop shadow from alpha.
-
@aaronventure I may be poking around the wrong part of the source code, then. The scaling op for that is in ScriptedDrawingActions.cpp, can't make sense of it though.
After a few tweaks to the snippet there's some progress:
-
"bool drawOnParent" should be false in the beginLayer call
-
the Path.addWhateverShape call should be done before beginLayer, then use fillPath inside the Layer before applyMask
This new snippet works on 50% scale and above on OSX , 75% and above on Windows.
HiseSnippet 1244.3ocsV0raaaDDdorYRjbZaBPe.H7IY.AUJY2jzZzFYqebMp9CVNtE0vHcE4Josd4tDjKsqhgA5gdtuQ8deM5aPeCZmkKoDorcpc.BunclYmY9lQyO6v.gCILTDfLJd7beBx3olilykyZNCS4nCagLdjojDJQ6O2GGFRbQFFqcfRlQw0Qwe+yq2GyvbGxRVHzIBpCoK0iJWxcXiumxXcvtjiodYt8NMNzQvaJXhH.GqYZi7wNmimR5iUWqfI.h1tToHXjDCfAYr99B24ilItjqu+IzP5XFQQTCMBLjlcGAyUgXEWTyYTl6vz3MDAVY3xneMcz+4l8ntzE7WlEdVr.qkZjMeXTHO7VKG7pkEd1Yf2s.IiLPZcMjdt4Hm.puboDEd1v7PtjDLACo8rPQeWTg+nfYSAbCtrpG9bRm.fXgFkegscEq511asaIHyGJsX3IVeiUa9TJmT0If.wwALwXLSautBw46wc6PHrxfNvsqFPlRCA60Ih6HoBd4McCvWdjPhClOhQcIAaVwZRpvoUrDi+ksrtpTohWfCrv0A2cJvpJFb1o0O6K1oxBpsyQAxpmSV8y1ErRohSqNAJm1iwJqKcBAL4Bnqn1E90.WjlCzgzPrblB+E8qUE65djHhC0GGQbjX9TFoLtdEqZ1ZSLs5XHB4cwyIAkmfYgDE+oUCIRs6V30oADBWKTAnXm3WKNfiwrVD12mMuGN77XYJOkZTkTB2U6oTmeS2b4LpLACpL8B2nL0NJyb8V6llusD79BIY.u7VktBL30krVUzjI2pLUBKPvXJnbKhUMtAuOEKyi7FSBpXcAlEQVbQnZNeKh4c2hjsC1Q++WlKJ3GxoxA9D9c0WiR9SW0NkfJ3px3loOMoYRWghntp4aGqluEi2rSvPu4vVXIN0JfAAm3SBjTE9MZQt.lvoaQKZ1hDdtT3CCqZJ77Ebk6Md7+mO+0k9i1X9RhusAzY4Oh9tT.03ue2u+5KotxYPly3u.NyHzoyjJpeBEGxK75FxjIYZu1gIvRJe5wTH6p78mYlkUsLfnwOmAD+FtQRXqiwmY1LJTJ7FQjJcCQimlNw9ol6T+kup1WYa+JaDTj5kcT9R55ZFwI0B+og4Ukrr1rU.8BXTwWq6FpDyJNyli0fHoejLGq8ilLgDnxQ4XOB64yHGAEY4XqGls+vd4urDZO8fnomvcEy3fYjNXGnhE3KChzri2psmGL2P1KhIo9L5JfuIifCTqJZ17VvUWgCV0urR7NN5lH3MgDUQ9AcuKb0EF+BxNEXaYYWsdkzCeY5osSOrS5gEhdQ5gWt3PhrZUsSOTeAqjC0qZC+dVoqQI0hoENQMRqGSKg62.cyUYvRTgaDCKyuYU8bhDAPtI25L0JKdHUNO6yMVcc652u0su+WCbeg6yMGRkNytc7V3VvKL.4iMdSd7xmX1F5IbjKA65lc9wONuTAAKOUyA5gkATXDhY+HuQPStCA7NmSXpY7FETilzz1JZU1XDrqKl3eguDg0TzFIBqkJD4gcBDu0QOCW87nmDyAvDO9kgO1ramAV0t4raOnA7sNN4MzJpU+CSss+vTamGpZllmzt6CUoGY1evwsenZ8Dyi1qeqA8dn5sgYuAsr9guq88AnpYh6EAKPzMMHTugsiWEXXzligZt35Sz+AH5Kxc.
-