@neoptocom/neopto-ui 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONSUMER_SETUP.md +55 -36
- package/README.md +25 -9
- package/package.json +6 -1
- package/scripts/init.mjs +200 -0
- package/src/assets/agent-neopto-dark.svg +9 -0
- package/src/assets/agent-neopto.svg +9 -0
- package/src/components/Autocomplete.tsx +279 -0
- package/src/components/Avatar.tsx +83 -0
- package/src/components/AvatarGroup.tsx +53 -0
- package/src/components/Button.tsx +51 -0
- package/src/components/Chat/AnimatedBgCircle.tsx +51 -0
- package/src/components/Chat/AnimatedBgRectangle.tsx +55 -0
- package/src/components/Chat/ChatButton.tsx +132 -0
- package/src/components/Chat/index.ts +5 -0
- package/src/components/Chip.tsx +38 -0
- package/src/components/Counter.tsx +69 -0
- package/src/components/Icon.tsx +48 -0
- package/src/components/IconButton.tsx +89 -0
- package/src/components/Input.tsx +29 -0
- package/src/components/Modal.tsx +83 -0
- package/src/components/Search.tsx +244 -0
- package/src/components/Skeleton.tsx +29 -0
- package/src/components/Typo.tsx +93 -0
- package/src/index.ts +31 -0
- package/src/stories/Autocomplete.stories.tsx +41 -0
- package/src/stories/Avatar.stories.tsx +38 -0
- package/src/stories/AvatarGroup.stories.tsx +46 -0
- package/src/stories/Button.stories.tsx +103 -0
- package/src/stories/ChatButton.stories.tsx +94 -0
- package/src/stories/Chip.stories.tsx +36 -0
- package/src/stories/Counter.stories.tsx +35 -0
- package/src/stories/Icon.stories.tsx +34 -0
- package/src/stories/IconButton.stories.tsx +116 -0
- package/src/stories/Input.stories.tsx +38 -0
- package/src/stories/Search.stories.tsx +228 -0
- package/src/stories/Skeleton.stories.tsx +43 -0
- package/src/stories/Typo.stories.tsx +66 -0
- package/src/styles/library.css +35 -0
- package/src/styles/tailwind.css +36 -0
- package/src/styles/tokens.css +72 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
2
|
+
<rect x="0.280273" y="-0.00195312" width="36" height="36" fill="url(#pattern0_385_669)"/>
|
|
3
|
+
<defs>
|
|
4
|
+
<pattern id="pattern0_385_669" patternContentUnits="objectBoundingBox" width="1" height="1">
|
|
5
|
+
<use xlink:href="#image0_385_669" transform="scale(0.00195312)"/>
|
|
6
|
+
</pattern>
|
|
7
|
+
<image id="image0_385_669" width="512" height="512" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAQAElEQVR4AeydB5wdVfXHz51XtqbtbkILHQQELIAFkRKqCiRRBBUIJAHpJQkICIJL94+SULIBgyAoioIgTaSKClKUpoAgvfeStvW9N/M/v9ndsOWV6fXsZ2bfm5l7zz3ne+8957yZefM0kj8hIASEgBAQAkIgdQQkAUhdl4vBQkAICAEhIASIJAGQUSAEhIAQEAJCIIUEJAFIYaeLyUJACAgBIZBuArBeEgBQkFUICAEhIASEQMoISAKQsg4Xc4WAEBACQiDtBPrtlwSgn4P8FwJCQAgIASGQKgKSAKSqu8VYISAEhIAQSDuBQfslARgkIa9CQAgIASEgBFJEQBKAFHW2mCoEhIAQEAJpJ/CJ/ZIAfMJC3gkBISAEhIAQSA0BSQBS09ViqBAQAkJACKSdwFD7JQEYSkPeCwEhIASEgBBICQFJAFLS0WKmEBACQkAIpJ3AcPslARjOQ7aEgBAQAkJACKSCgCQAqehmMVIICAEhIATSTmCk/ZIAjCQi20JACAgBISAEUkBAEoAUdLKYKASEgBAQAmknMNp+SQBGM5E9QkAICAEhIAQST0ASgMR3sRgoBISAEBACaSdQzn5JAMpRkX1CQAgIASEgBBJOQBKAhHewmCcEhIAQEAJpJ1DefkkAynORvUJACAgBISAEEk1AEoBEd68YJwSEgBAQAmknUMl+SQAqkZH9QkAICAEhIAQSTEASgAR3rpgmBISAEBACaSdQ2X5JACqzkSNCQAgIASEgBBJLQBKAxHatGCYEhIAQEAJpJ1DNfkkAqtGRY0JACAgBISAEEkpAEoCEdqyYJQSEgBAQAmknUN1+SQCq85GjQkAICAEhIAQSSUASgER2qxglBISAEBACaSdQy35JAGoRkuNCQAgIASEgBBJIQBKABHaqmCQEhIAQEAJpJ1DbfkkAajOSEkJACAgBISAEEkdAEoDEdakYJASEgBAQAmknYMV+SQCsUJIyQkAICAEhIAQSRkASgIR1qJgjBISAEBACaSdgzX5JAKxxklJCQAgIASEgBBJFQBKARHWnGCMEhIAQEAJpJ2DVfkkArJKSckJACAgBISAEEkRAEoAEdaaYIgSEgBAQAmknYN1+SQCss5KSQkAICAEhIAQSQ0ASgMR0pRgiBISAEBACaSdgx35JAOzQkrJCQAgIASEgBBJCQBKAhHSkmCEEhIAQEAJpJ2DPfkkA7PGS0kJACAgBISAEEkFAEoBEdKMYIQSEgBAQAmknYNd+SQDsEpPyQkAICAEhIAQSQEASgAR0opggBISAEBACaSdg335JAOwzkxpCQAgIASEgBGJPQBKA2HehGCAEhIAQEAJpJ+DEfkkAnFCTOkJACAgBISAEYk5AEoCYd6CoLwSEgBAQAmkn4Mx+SQCccZNaQkAICAEhIARiTUASgFh3nygvBISAEBACaSfg1H5JAJySk3pCQAgIASEgBGJMQBKAGHeeqC4EhIAQEAJpJ+DcfkkAnLOTmkJACAgBISAEYktAEoDYdp0oLgSEgBAQAmkn4MZ+zxOAWefc9ukDT/ntZQced+njBxxz4UsHHHHeuzO+f8bSGbNO7p6x/7zCjO8eWZqx77HFGTOOL8yY+cOeGbNP7Zrx/dOXzTj07I9Q9oCj578+49iLXzxw7sKnWcYjM0+4/G8zT7ry5pmn/e68WaffPO2I9nub3RgsdYWAEBACQkAIeE0AsQkxCrHKjFkcuxDDEMsQ0xDbEOMQ68yYN5tjH2IgYiFiImIjYiRiJcdMlEUMZRmPI6Yitnqts+sEYHb7DYcdePzP/8VBftn+e39f7/vbJU8XH/ntwcWnbv1c6X93rVt68e+T9Nf+OVZ/6z/1+vvPZfWPX9X0D1/M6O89m9XffrJOf/PxBv21f43RX3lwAsqWnvvLZP3ZO9Yr/vf2T7OMLQv//uN2hcf/sGfh4at/0PfA4huXPjR/+f7T9zdmfO/o4oxZP+oCpAPnLnpq5klX/Wnmj3937uwzb5p6hCQJXo8TkScEhIAQSC0BxBTEFsQYxBrEHMQexCDEIsQkxCbEKMQqM2Zx7Co+deuWiGWIaYhtiHGIdWbMQ+xDDEQsRExEbESMRKzkmImyiKEs43OIqYitiLGItYi5szn2ErnrEkcJwCE/uWvczBN/efuM/eYUex+84pLik7dspb/2zzHGsrcVkeFOo1q1DYOM7iWkf/RyRn/riQZAKv73tk0Lj1/3jcJDV5/Ue/9lNy19aMHy/fearZudw2cTZv7wV79D59USLceFgBAQAkIg3QQQKxAz8KkdMQSxBDEFsQUxBrEGMQexBzEIsQgxiTg2+UuOYx/HWMRaxFzEXsRgxGLEZCdt20oAZp15844HHL3gta4Hf7mk8MT1u+kfvJBx0qjvdQydjBXvKbNz+GxC4bFrv4PO22/P7xgz+HQLMreZP7ji3tmnX3+cU3C+2yANCAEhIASEgG8E4PsRAxALEBMQGxAjECsQM/CpHTEEsYQ4pvimiAvBiMGIxYjJiM2I0XbEWU4AZp105W19//zNPaXn7lnT6Flmp43olO3rJFx6QOZW+M8NO/Q+8Mufdf6tY8n+3z2iNOPQsz7mTOoOuwCjY5xoIgSEgBAQApUIwLfDx8PXw+fD9yMGIBYgJiA2EMeISvWjvB8xGbEZMRqx2qquNROAmWf8afMZB/94Rd/jf/h6XOFUhaEXyfj4NU1/5aHxnEnt2nf/4nv23/sQfcbhP/lg1slX3TDz7D99rmp9OSgEhIAQEAKRIwDfDR8OXw6fDt8OHw9fD59P7Psjp7QthcoU5gQGsRoxG7G7TIlhu6omALibsfjY7/6jv/5o07BaCd8wlr2l9Jfub+179LpvFu679PH9v3tk6YAjf/r2zFOu/tXsc29dL+Hmi3lCQAgIgdgRgG+Gj4avhs+G74YPhy+HT4+dQS4URsxG7EYMryamYgIw6/Q/zC08dv0PjO6Pq9VP/jHD4DMEr2qlF/62auGR383o/ftlL87Y79jiAXMufn72GTcekHwAYqEQEAJCIJoE4IPhi+GT4Zvho+GrjY9f1Yh9dzS19karWlIQuxHDEcsrlS2bABx09k27Fx6/aT4VuivVS+9+vUT6By9mSs/csUHvP35x1f7fPaLEA/C52affsF96oYjlQkAICIFgCMDXwufC98IHwxfDJxP75mA0iFErHMMRyxHTy2k9KgHAwwZ6//3nW4y0f/IvR6vMPlxL4gG4Ye8DV1y9Py4VzFn47KzT//i9MkVllxAQAkJACDggAJ96APtW+Fj4Wvhc+F4HohJSxboZiOWI6YjtI2uNSgCKz9//qLH0DTWyoGzXJoDTTqVnbt+o74HLf4snHh547MJnZp1+43dq15QSQkAICAEhMJQAfCd8KHwpfCp8K3zs0DLy3hoBxHTE9pGlhyUAs0/93fl4Yt/IQrJtn4DO16CKz96+cd8Dv/jdjH2PKeKRxrP/76bV7UuSGkJACAiBdBCAj4SvhM+E74QPhS9Nh/XWrXRSErEdMX5o3WEJQOHlh48ZelDee0NA//ClDB5p3Hv/b9/EAydmnnHDbG8kixQhIASEQPwJwCfCN8JHwlfCZ8bfquhZMDLGr0wAZv7w11fr7z+fjZ7KCdKor5PwwInCP355+YwZx/fNPOnKm4+Q3y1IUAeLKUJACFglAN8HHwhfCJ8I35jIZ81YBWK5nPOCiPGI9YMSzARg72uvzRRfekBuXBuk4vurgScS5gqP/2HPZY9fvvyAoxe8WukuTd9VkQaEgBAQAgESgK+Dz4Pvgw/U33s25/tvyARoX9SbQqxHzIeeZgLQ/JQ6wVjyuvkeO2UNjoDRs4RKz92zVs99l986Y+YpPbNOuebnwbUuLQkBISAEgiEA3wYfB18HnwffF0zLyWrFrTUGx3rEfMgxg76+9F15oA1ohLkaOulv/7uu75HfHDLje0cXZ57862vCVEfaFgJCQAh4QQC+DD4Nvg0+jtjXeSFXZDgnMBjz+xOAj19d37koqek1Af2jlzOFR3//3f2/c3hp1klX3TR4usbrdkSeEBACQsAPAvBZ8F3wYfBl8Gl+tJM+md5YrA/EfO3gs29aRf/gBb4G441gkeIdAZyq6Xv8uql1191dOPDEK+7ae/61Dd5JF0lCQAgIAW8JwEfBV8FnwXfBh3nbgkjzggBiPmK/VuxacTaVCl7IFBk+EcAPWRSfuGHnun/c3nnA8Zf/45Cf3DXOp6ZErBAQAkLANgH4JPgm+Cj4Kvgs20KkQk0CnhXgmI/Yr+nL39vZM6EiyFcCxor3VOnJP36l6+Grlxx43KWPHNR+e4uvDYpwISAEhEAVAvBB8EXwSfBN8FFVisuhCBFA7NeMvu6xEdJJVLFAwOj6kIpP3bpl75PXfjDz5F/daKGKFBECQkAIeEoAvgc+CL4IPslT4SKsDAFvdyH2a9TXVe+tWJEWFAFk24VHr502Y/+5xZnt158RVLvSjhAQAuklAF8DnwPfAx+UXhIxt5xjPxIAuQEw5v2ov/98pvDglafOOPjHKw4+59ZvxdwcUV8ICIEIEoBvgY+Br4HPiaCKiVbJc+MKXTm+BNCZ8VywCAyBgEH66482dd9/xfUHHL3gzYP/765NQlBCmhQCQiBhBOBL4FPgW+BjiIyEWZhOc4zezoxGvcvlp3+T1P+lPjxZcPWeB3753wN/cNmjM356R1OSzBNbhIAQCIYAfAd8CHxJ6bl7Vif2LcG0LK2MJuDDHo79OAPgg2QRGTYBo2cZFf9z0xbGv25YPvPH110Stj7SvhAQAvEhAJ8B32H6EPYl8dFcNLVKwOjrJI2y8mwZSvCfsfRNVXjoV4fNOPTspQeee8eWCTZVTBMCQsAlAfgI+Ar4DPgOl+KkukcEfBHDsV9T9ePkgo4vdKMk1CD9lQfHlh761SMzf/ir26OkmegiBIRANAjAN8BHwFfIdf5o9ImfWiD2a6phTMnPRkR2dAgYPUup8Ni1u+0/84e9B515y/ToaCaaCAEhEBYB+AL4BPgG+Iiw9JB2KxHwZ7+qH1PSKN/U5494kRpVAsbbT+Z7Hrrqjwced+l/ZrbfK8+BiGpHiV5CwEcCmPvwAfAF8Ak+NiWio0igrqlXU3XNnVHUTXTymUCxB08T3Lz0vxs6Z7XfcLzPrYl4ISAEIkQAcx5zv/jUrZsT+4IIqSaqjCDg16bKN3dqKt/wgV8NiNzoE9A/elnre+iqnx5w9PzX8YMe0ddYNBQCQsApAcxxzHXMecx9p3KkXvwJqHz9e5qWzT0ff1NGWqCI6seSmrAuqdW3ILXBzqRtvg9pX/g+aVvNJu3z+5P2me+Qtum3SG28B6kNdyO13hRSa29DavIXSa26OamGFP3OjlGi0nN/mdz1xI0fzTrj+oNH0pRtISAE4k8AcxtzHHOdeM7H3yJrFsCXmz4dvh0+Hr4ePp99P2KAGQsQExAbECM4ViBmmLFjwrpmLCHimEJhBkuM7QAAEABJREFU/PnXppbNPq9l6uuv868JnyUr1R/kN9qdzOC+3Qmkfe3/SJt+KWnfWEBqyo9IfflIUp/5HhF3OK35ZaK1tiFadwrRBrsScT316W+SQod/bn9SW84m9cVDSX1lDqmv/5Qye15EGmR+dl9S62xLqoUHQybvs1HhiTc+fpXPBvzmspnHL34oPC2kZSEgBLwmgDnd99BvLsMc91p2ZOSxb4aPhq/W2GfDd8OHw5ebPh2+HT4evh4+n30/YoAZCxATEBsQIzbkD4QcM8zYwTEEscSMKYgtiAecJCjEDiQHHIMiY79NRbS63DXa0s0brqF8fB4WpxpbORhvR9qXj6DMHheSGeT5k7wZ3Ns2ImpsI9KyNlGUL27kmAtkrr8TqS1mktrhR6RNXUTarueY7auNvkFq3JrlK8d1b6mPCk/e/KUZs07unnnGzV+IqxmitxAQAkSYw5jLmNNJe5IffC98MGKB6ZPZN8NHw1cT+2xi3236cC8GAmIKYgvLRKxRHHMQexCD0L5aZztCbPKiqaEyfHvPMX/N3BvXa9fts09Ja12/x7eG3ArO1pNa7fOkcdaGTlZfO4/UFgcSrb4leda5dnRExte8itm+2nQvUju1k8ZnC7TP7Udqlc08Sz7sqORHWf2t/9QXH732nzNP+c0v/JAvMoWAEPCXAOYu5jDmsr8tBSSdgzB8LHwtfC58L3wwYgHBJ8M3B6TKYDNmDOJYhJiE2IQYpXGsQswijl2D5aL2qrWu193e3q5rUEybsNqzeI3SimxK++z3+FT++aS2PoqIr9uYnRwlJQd1wf0C6+1Iapu5pPFZCQ2XHfhaE9WNGSwRy1ejZwkVHvndQQceed47B7Xf3hJLI0RpIZAyApirmLOYu5jDsTaffSjuzYJPhW+FjyX2tQSfG0XDkIhwrELM0r5xPiGGIZY5U9W/Wtq4/phvJgDZOnWxf03Zk6zGr00artXsdi7R+jtTlLOospYh61t9C8L9BOa1ox1OJpymUmNXL1s8+jsNKr7w91V6n7np/Znt1x8RfX1FQyGQXgKYo5irmLNxfZoffCV8psa+Ez4UvpTYp8YyFnAMUxzLzJjGsS0qIzOTp4ugi4Z/YydNukbl6vA2tBV3aWa2O57UjqcRTf4ikUrArxQrRdSyPuE0ldr5TDJvUOSzGmrSp4m0eNlnLHldK/zzNx2zTrziLyR/QkAIRI4A5ibmKOZq5JSrphD7QvhEfFqGj4SvhM+E7yT40Gp143AMsYxjGmKbGeNW3dyS1n4V4lhv6E1jfgf5ZgKwYN4+3ZmWyR9hR6Arg1FrbU3azqcT7tI02jYJtPnAG8NNJMgIv3ocabtfSNqWM0lNWCdwNRw3WOqjvidumDLj8J98sO+5901wLEcqCgEh4BkBzEXMSczNON3oB98HHwhfqNgnmmd84SM9IxM9QYhxiHVmzOPYRxwDg9aSY/3HV7bP6kG7ZgJgvhnT+m+8BrWqsWuQNuVHpLY6mGjs5KCajU47uQaitbclNeVU0nY8lfDVFcrWRUe/KproL93fmnnq+vdnnX3rblWKySEhIAR8JoA5iLmIOelzU96IZx8HX2f6PPZ98IEEX+iN9PhI4ZiH2GfGQI6FoxX3b482pvWJQemfJABjV7lqcKevr0ojXN/B6RAav5avTcVG+Ph1CF9d0b5+PuEOVzUu+gmR/sELmcI/r7l95mnXXhAbzqKoEEgQAcw9zEHMxaibBZ8G3wYfB19H49eJusrB6McxELEQMZE4NgbRqBo3aWWs1wYbvPzcQ6/KjFulMLjtx6sasypp2//QvCbu1Xf1/dAzNJnIhNfbkdROpzOnk0jhoRSaN8808MMmA78u+K/fHHvgcT//jx/yRaYQEALlCWDOFXjuYQ6WLxGBvey74MO07dmXsU8j9m2p/LRfqyvAadO92OdzbOQYieJ+rYjxV5xz2K8G5a9MALAjM3Hd+/Hq/apIbbALqR1/TNSynvfikyixdUNSX/g+ZXbnswJ4ahW+XhJFO/USFZ+6ZfMZB7d3zjz3z5LWR7GPRKfEEMAcw1zDnCOee1E0TLGvwqPX4bvgw4h9WRT1jJxOHBsRIxEriRT58ZcZEeOHJQBq3MQzvW5UNU0kbbsTSH3mu0SZ5D5G12tug/KMXDPhMcZq17Mps+3xpNbYkiiEG0eoxp/++iONxSdufmn22X+aWaOoHBYCQsABAcwtzDHMNQfV/a3CPgm+yfRR7Kvgs0zf5W+ryZPOMVJ95rv9MZNjp9cGjozxwxKAK8459N5s21orvGpUrf55wulsavuUVyJTLEeRMXETUl86gsynYOFRl3zqKEpAjCWvq96HfvXLA0+7dlGU9BJdhEDcCWBOYW5hjkXKFvZBin2R6ZPYN8FHkU+fXilNfxwzETsRQ70yG7EdMX6ovGEJAA5kWtf8M17drmrNL3GwOpzicme7W3sDrV8/jhR+7GK3n5BadwciLULPFOjrpOK/fnv4zJOu/FugTKQxIZBQAphLmFPEcysyJrLPge/R4IPYFxH7pMjoFnNFVqqPb0x86XBCLF25z8WbcrFdGyVv7LhT3QYUhR9G2Or7FMVT1ZSkv4YJpD4/w/xxIjwuk9To7gzFXL1Ihcf/sN0Bx170Wnu7ERGlQiEhjQoBxwQwdzCHMJeI55RjQV5WZB8DX4Nn3sP3EPsgL8WLrBEEcGmFYyli6ogj9jY5YSPE9hG1RjnnK8464n/ZSeu+N6Kc5U21wc6ktjiASCmSv4AINLYRHpep7XJWf7YYEfalZ+9c88U3zlh2yM/ubQuIhDQjBBJBAHMGcwdzKBIGsU/BJ1HTx2w5u/9XVyOhWNKUKGMP2HNMRWwtc9TSLsR0xPaRhUclACiQGbf6dXi1u2Y324PUZ77H1ST4M4Tgl+ZVSH3hENJ2PqP/ZkEKvx/01//V1P3Eze/MPutPWwUPRFoUAvEjgLmCOYO5E772yvQlpk9h3xLZH2QLH5TPGnA/cGxFjHXSUKWYXjYByObGtau6RsNOQw1f/jY1b7c31Y/ViBMWO1WlrNcExqxO5s2CO/2Y1Gqf81q6bXn6+89n+p744z9nnX7TgbYrSwUhkCICmCOYK5gzYZsN36HBh3zpCCL2KWHrk4b2K9mImIrYihiLWFupXLn9iOWI6eWOaeV2Lj7/0A+ykz/9cLlj5fY1brs/1W2xp3ko36hRU2uGMjllbsu/EAmMW5PU1kf3P3I55B+gMJa/o/oeuebK2af+7vwQiUjTQiCyBDA3MEcwV8JUEj/MZj6iln0HsQ8JUxdpm8xYipiK2AoeiLWIuXhvZUUsR0wvV1YrtxP7Mq2Tj6BM7afQNXzpW5TffBdUWblqWUVNLRnKNaqV++RNiAQmrGv+2JL5PIaAnzs9zOq+FdT7yO/mHfjDXzu6xDRMlmwIgQQRwJzA3CCeI2GZZf4+C57Z8pU5ROwzwtIjve2OthwxFLEUMXXoUcRcxN6h+8q+5xhuxvKyB4kqJgCXn3nw49nVN36hQj1zd3bNzfiT/1Tz/ah/iqhhbIYaxmuktFFHZUcYBNo2IjxpStv0WxTaQ5n0IhWf+MO3Z5505c1hIJA2hUDUCGAuYE6Edqd/Jk/wCfANxD4ianzSqA9iJmInYiip8gTqtphKiMHlj/bvRQxHLO/fGv2/amjOTlzrB6Or9O/RmidQ486HEqkK2lH/X65eI5y+yOarl+svLf99J6BliDbanbRdziS1yma+N1e2Ab1EhSdu2HPmib+8s+xx2SkEUkIAcwBzgXhOhGEyfAB8AXwCwTeEoYS0aRIY/IdYiZiJ2Dm4r+wrx17EYMTissd5Z7UYzocrnwHAwcvPPeLG7KobfID3w1YeKI27Hklaw9hhuyttaBlFjXxJoK65ar5Rqbrs94MAvjq4zVzSvshJXL21fvRUDUOnwr9v2GXmCZf/1VO5IkwIxIQAxj7mAPFcCFxlnvOY+4p9ALEvCLx9abAsAcRIxErEzLIFRuxEDEYsLpe8IXYjho+oMmyzZkTOtq79f8Nq8Ebj1ntTdtUN+Z29BcaZ1zM4IbBXU0r7RmDyF/lswNmk1t2Bmwj4LI1hcBJw4/YHHn/ZA9y4LEIgNQQw5gv/vnF74jkQrNHKnOvaLmcT8dwPtm1prRIBLaMIsRExslKZSvsRixGTRx4vF7tHlqmZAFw+f+7PMhNW6x6smFvn85T/7NcGN22/ZvhSgKXTG7YlSwXHBHKN/U8U3OGHpMZNdizGWUWDik/evPWBx136iLP6UksIxIsAxjrGPJGtb1q7NhJzW8Mc//wMIp7zrgWKAE8I4FQ/YiJio1OBiMmIzYP1EbMRuwe3K71qlQ4M3c8ZxhXY1sa0UeNO3+e3ilfni+JWcYNDvTwzwDlEP2q2rE9qx9NI2+zbFOxNgpwEPHXrlgfOu+Q/fpglMoVAVAhgjBd5rFOQwT+TN+c05jbxHI8Ki7TrwZfwzefmIBYiJrrjoczYjBgNOYMxG++rrRyKqx3uP6Yv6TpeG9NabNrtSFJ1Tf07PfiP7zWamU9WeSBNRHhCQGWIPvV1vixwFqlVP+OJSKtCik//afMDj134jNXyUk4IxIkAxjbGeJA6Yw5ru5xlzmnC3A6ycWmrIoEMxzzEPsTAioVsHkBsRoxGrEbMtlLdUgJw5ZXtPc1fO/b0zKT1rMi0VQbfbwSInDwzwBY33ws3tpL6yrGkfekwolyD780NNlB89vaNZxx78YuD2/IqBJJAAGMaYzswW3jOYu5iDhPP5cDalYZqEkCsa2rNEGJff2Hv/iNGI1YjZluRqlkphDJq7OQL+HUJr94vfAKgQZ4Z4D1XLySu8QXSdjqdVICnDvVn71jvgKMXvOqF+iJDCIRNAGMZYzooPTBXMWeJ525QbUo7tQngND9O9yPWEce82jUclVgyEKstVbacACzaZ9IKg4zFlqQ6LDR4MwS+B+lQhFTzg0Ajnw3Y/kRSfGmAfBy5NOSv9Nw9ax1w1PlvDtklb4VA7AhgDGMsB6O4Mueo4rkqn/qDIW61FcS0Jv7Ujxg3so6X24jRiNVWZVpOACAwU1QX82uRV98WfP8R34N08nUI35QSwYTrh2qzb1Pmq3OJ6sZSEH+l5+9d/YAjzns3iLakDSHgNQGMXYxhr+WWlcdzEnMTcxRztWwZ2RkKAcQyxDTENp8VKA7EaMvN2EoALt6r9Q1SxrWWpbsoGCA0F1qmr6oxaVPK7NxOatKnAzG+9OLfJ8047NwP9r722kwgDUojQsAlAYxVjFmMXZeiLFXHXMScxNy0VEEKBUIAAR+BH7GscoMeHuHYbMZoGyJtJQCQq5eM+XgNYg3qtEkQtiSpDaNuHKlt5pnPDw/i04b+8j9a6+95TpKAJA2ihNqC4I+xijHru4kqY85BzEXMSd/bkwYsE8CpfpzyRwyzXMllQSexWbPb5iXfnPgo1/k7r4EsgzdO4JkBAV1+DsSu2DeiFOH54fVuWo0AABAASURBVOYvDDa2+m6O/spD4+vvevajvduvzZP8CYEIEtibxybGKMYq+fyneM5h7mEOEuaiz+2JeIsE2C0iVuFmP8SuWrU8PP73gdhsS6TtBMCUroI7C2C2x//wfcmm1gzh+5O8KUtUCLRuQNpOPya1+ud910h/7Z9j6998Rs4E+E5aGrBLwPzkz2MTY9RuXbvlMdcw54jnnt26Ut4/AohNiFGIVf61UkGyw5isVRBXdffEx1pvMYier1rIh4MA3MhJAL5H6YN4EemQgJFrIvXlo0j73H5EWtahFGvV9Nf+Nabh76+/Zq20lBICwRDAmMTY9LU1nluYY5hrmHO+tiXCbRFATEJsQoyyXtGbkojFiMlOpDlKANrbla4M40InDbqtg7Nd+B5lCKdY3Kqe/Prr7UjalFNINbb4aivurD7wuJ8/5msjIlwIWCSAsYgxabG4o2KYU5hbxHPMkQCp5AsBnOZHLEJMQmzypZEaQhGLEZNrFCt72FECAEmFTN8v+fVjXkNZVt5kUadCaV8arUBg3FqcBPyIVMu6FQp4s7v49K2fn/nDX13vjTSRIgScEcAYxFh0VttaLcwlbcqPiHhuWashpYIgkOXYg1P+iEVO2vOozscDsdiROMcJwOI9V+9SpH7jqFWPKmkZRY0TMlQ/RpP7YDxi6oUY3JGstj2B1BpbeiGuvAzDoMK/b/zWzNOuPa98AdkrBPwlgLGHMUg8Fv1qCXMIcwlzyq82RK49Avikj5iD2IMYZK+2t6URgxGLnUrVnFZEPUMzfovXsNd8k0bIxDI5FbYq0v4ggUye1JcOJ7XRNwb3eP9a6qPC4zf8YNYZfzzEe+EiUQhUJoAxh7FHPAYrl3J3BHMHcyjYX+Z0p3PSayPGINYg5riz1ZvabmOwqwSgY8/WB9mMl3kNfdEGf12pSZKA0DtjpQKK1KZ7kbbVbCLNp+f49K2gwhM3X3rQ2bfstLJZeSMEfCSAsYYxRzz2fGmG5wrmDOYOkSL5iwaBPMcWBH/EmmhoRC8PxGDH6rhKAMxWDXWN+RqRf/VjMubZgAh1UkTIhKjGWtuQ9tXjiPJNvihhdL6vep+8/c6Dzr19A18a8EDo+eec/6kLzrxg/oKzFty54MwFV84/Y/4+HohNhAiwABOwASOwiqphGGMYaxhzvujIc8ScKzxnfJEvQm0TQCxB4EdssV25QgVPdnsQe90nABG5DDAU6OBpGnw1Y+h+eR8igbaN+m8ObF7FFyWMj1/V+p6997/7XXRbMD9UYMMKDmwzMqXMvw0y5pJBu3DVA5VSv19wxoKb58+f38DbqVxg+wJmABYM4ECwASOtpD1xwVkXfIf3RWrB2MIYw1jzQzHFc8O82Y/nih/yRaZ9AoghCP6IKfZr+1zDg9jrOgHomNr6NJv5JK+RWhSfOcNXMxonZEi5tjJSpsVXmaZJnAScQmrixr7YoL/zdE576tE3fBHuUOhFZ160Pge2Szmw1Y8SoWhPtUL9/toU/s4BbIbtfIZ7z1FciBoMw7jsgh9fsFaZY6HtwtjCGPNDAcwJ82t+PEf8kC8y7RFAzEDsQAxRHEvs1a5V2pPjTw7EXlfCPAmNhqEicTNgORL4qkZzW5ZC/qpGOdVSuQ8PMFHbzCW19ja+2K+/+vCYA4654HVfhDsQWjSKB3C1Rl7LL5wEvPncm5eWP5jcvabNbHsVC8dQjsCuSpHgDmFMYWz50SLmAuYE5oYf8kWmPQKIFYgZiB32agZX2quY60kCoHLmfQBGcObbawnZXMN4jRrGaRTRbM6eQXEvrWVJbTmbtM32Yku8T69L/7t78swfXP5PFh76opT6dE0lDDqYr4GfUbNcQgqYtrLNtczRdf0ztcoEcRxjCWPK+7aUOQcwF/x+gibJX00Cil0RYgRiBWJGzQoOC3hQzRiIua5Faa4lsICO3Se8yi8P8BrpJdegUVNbhoL8haZIAwlbuU99g7QvHETkw2wrPHnTF2aecs21FPafQVYfW3zqBWdecGjY6vrd/oCNp1ppR5EK/UwOxhDGkhV9bZXhMW+OfZ4DtupJYV8IICYgNiBG+NKAt0IfGIi5rqV6kgBAC0NF9zIA9BtcNTw8qCVDdWPYdEXyFzaBNbcm7YuHEKkMefpn6FR44g97z26//mxP5doUxtf+b7ZahcsuvPCsC79itXzcysE22GhVby5rmZ1VmXbKYexgDBGPJTv1apblsW6OeR77NctKAX8JcAxALGjkmIDY4G9jkO5+9TLWchR0rxAkFAulP+I1LmtdE58NaM1QJO/ujAtEr/Rc4wukbX0EeX4atNhLfY9df/KsM2+Z5ZWqduXMO23e37jOz3m1smR1Q//9z9p/1malcJzKwCbYxjpnebWy/HyAnZWynpfBmMHYIR5Dngrny1/mWOcx76lcEWabAHw/7vBHLLBdOcQKXsZazSs7Fu818W2WFblvA7BOFZeMPDyoIpvAD6z6Ocp85RjijMzTpo3eZXwm4I+Xzzrntu09FWxD2NLSUjaMkAhYqTU5m8n+2jAMZaVwHMrAFtjEuk7m1crytwFmVsp6XgZjpfDEHy/H2PFUeCbXP8Z5rHsqV4TZJpBvUubzYhADbFd2UcGDqk8OxFoPRBF5lgAMaHPnwGusXvCAh6YYnQKKFVwbyhqTNqXMNnOIsnU2atUuaqx4TxX/e9c9MxfcO752ae9LtLe391GJpnMg/K8V6Xzq+2sXnHXByVbKxqEMbIFNVnQ1GTErk5mVCh6XwRjBWMGY8VQ0j2mMbYxxT+WKMFsENL4EDF8Pn2+rYnQKexpjNS/tMjTyVDkvdaslK5PnjLAtQ3jwQ62yctw/AkbbxqRtM48o5+3zcfT3n8/oz//rBf80ry55bvvcJbqmf4NL4UwZv9RcTl9w5oIdapaKeIEBG063qObbYARWFst7XgxjBGPFU8E8ljGmMbY9lSvCbBGAb8eNfvD1tip6Vti9IK9jrOZepU8kdDUv+ztv9fAay0UpIjz4oVEeHhRu/7VuQNpXjyevHx1cevHvrTNPvOrusIw7/kfHv8rn3Pbg9lfwWmvhzyrqmgvOvmCVWgWjehy6KzK/IpyxoOMKsDEZWSjsRxGMDYwRT2Xnm/rHMo9pT+WKMMsEFEc5+HT4dvh4yxWjV7BnIMZ6phmj8UwWXTllXQT/+7yTGI6kbJ0iPAgCD4QIRwNplSasQ9q2JxDVjfEURuGpm3eadfqNcz0VakPY3FPmPsaBDr8DoNeqxqfNVyWDrsFT82qVjdpxU2fW3bShtnI6mJhsapf1pQTGBMaGp8J57JpjmMeyp3JFmGUC8OHw5fDpliv5VNADsfdd2R9jPRDVL8LTBAAiOcOK7WUA6D+4ImtsGK9RvTw8aBBJ8K/jJpO23YlE9R5eui/2UuHJW88/8Ce3bxq8Qf0tcqD7s1LK0mlxviY+5Y1n32jvrxmf/9AZulvUuB1MLJb1vBjGAsaEp3f885g1xy6PYc8VFoE1CSjFboN9dwP7cPjymhViUIBt8jy2ep4AlAzluZJh9k1eHh4UJn6iMauRtv2JpBpbPNPDWP6OKv3vvkf3DvEZ/EuKS84iRXdYMUopdcoFp1+wm5WyUSgDXaGzFV0Uqdvn/GjOWVbK+lEGYwBjAWPCK/kYqxizGLteyRQ51gkMPtQHvtt6Lb9LupfvR2z1PAG4ZFrLf9jUd3hNzII7RxtbMnw2WiOlSP6CJtA0idR2J5FqmOBZy8Zb/65rfOC9/3km0Kag9vZ2Pafl9uNqr/Naa1GGZlw9/6z5a9QqGPZx6AhdWQ8rM+W1bCa7v1LK4PKhLBgDGAteNY4xirFKPGa9kilyrBFQPOLi9lAfa5aZpd4ZiK3mhlf/NK8EDZNjqLuGbSdko65JM787igwzISbFx4zGVlJfnUde3hhYfPbO9Weecs3lYUE46uSjPlSG2pvbL/Baa2njsr/nxCFbq2BYx6EbdOT2rTzIqM9Qxt5gwOVDWdD3GAOeNZ5v6h+jPFY9kymCLBGAT25qzVAd+2iK4J9rlXyKqb4kAIam/8W1wREVoGUVNfLZgPoxmpwNCLqPxqxO2leOJcrkvWnZ0Knw5M2zDzrzluneCLQvZc5pcx7mWsfxamXZZmx27PFWCoZRZlxm3A+43W14tbLMm/ejef+0UtCPMuhz9L1nj/nlMWmOTR6jfugrMssTwKd++GL4ZPjm8qXiv9evmKr5gqZIcGq+iI6K0HwTnw1oyxAyz6jolAo9WtanzNZHEmkZb8ztXU59/73j+lnn3DbRG4H2pcw9de7FXOsGXmsu/An7tPnt8zeoWTDgAheeeeGGitRpFpv9A9vcYbGs58XQ1+hz4r73RDiPRXNM8tj0RJ4IsUQAvhff64cvtlQhtEIeNOxTTPUlAVj0zdZn2eRlvCZ60TJyNiCMDjYmbUbaVgdx04pX94v+0Sta8dXHn3MvybmETCZzGNd+j9daS4PKKKu/LVBLlifHDcNQOumLDTLqLQh8t1QqHW6hnG9F0Nfoc28aUOZYxJgk+QuEwLBP/eyDA2k03EaWDcRUz7XwJQHgc+PsC+hfnmsbUYHIQJGJIiONqIrJU2vyl0j77Hc9s0t/5cHxM0+4/H7PBNoUdMzJx7zPVQ7l1cqy44IzFsy0UjCIMheceQGyMUtPLTSUcejx7cd/EIRe5dpAH6Ovyx1zss8cgzwWndSVOvYJwMfC18Ln2q8dTg3XrRocS326UdafBAAWKxXa9T00H/SqcSba2JIhXI9Chhp0+6lsb/2dSW2MB+t5Y33hqVu3mdV+/Y+8kWZfCp8Wv5Fr/ZrX2oui8y8656LQLlsMKnhe+3mrkqKfDm7XeP01X/e/qUYZ3w6jb9HHXjVgjj0eg17JEzmVCcCnwrfCx8LXVi6ZwCM+xlLfEgCl6alKAAaHHTJTZKjIVAf3yat/BNSnv0lq3e28aaBUoMJ/bjnj4DNu3dIbgQ6klAi/HPimhZotekm/wEI5X4vkMjncv2DlSU1vUr9tvupTSTj6FH1L3MeVytjZjzGHsWenjpR1RgC+FD4VvtWZhDBruW/bz1jqWwJAuvFP96bHUwIyVGSq9WM1QuYaTyvio7X63AxSq2/hicJG5weq98X7Hti7/VqPvmpAtv7wQzhKVzilXrMeX2fbd/6Z879Ws6BPBeafNX8ai/42rzUX1vVg2FazoA8F9ua+RJ+ib8mDP4w1jDkPRImIKgTgO+FD4UvhU6sUTfYhH2Op5he5hdMmvsWyrXyS4WLJXPKNGiFzRQabTAsjYpXSSH3xUFKTNvFEIf2dp/MNH70Z2k2Bc348B08ItHSjn1Lqkp/+9KdNnhhuQ8hF7ReNVYaydCc/B//L5p0673Yb4j0tir5En3ohFGMMY414zHkhT2SUJwCfCd8JH1q+RDz2eqDlmwOx1ANRo0Voo3d5uie1ZwEGKSJzRQaLTFZ5c9P6oGh5HUpAy5L60pGkJqw9dK9s/rfIAAAQAElEQVTj96Xn/rL27FN/d75jAS4r5kv54zlwvlxTjEHrZHuy+P59zaJeFtA1/Ycsbw1eqy+KXinkC1afc1BdloOj6EP0pYOqo6pgbGGMEY+1UQdlhycE4CPhK+Ez4Ts9ERpvIb7GUM1XNko97Kv8GAlHJouMFpltjNSOl6q5BvNBQarBg98NMAzqe/qOuTPPvGXDMCAc2X7kCk3XDrXY9vELzl6wmsWyroudf9b5a5KiOWThzzCMQ0888cTlFop6XgR9hz4k7ku3wjGmzAf98BhzK0vqlycA3wgfCV9ZvkTc9nqgr88x1OcEQH/EAwSJEYGMFpktMlxkuokxLEKGGHXjSH3laPLiaYFG5/uq9NrjoY1hvhSAR2rjmwG1CDeRQWfUKuTVcc3QzuKzE/UW5N3Mp/5D+3Ew9B360IKe1Ytk8uaYwtiqXlCOOiEAXwifCN8IH+lERmLrKH9jqK8JgNanQvuxlSgPCGS4yHSzdSrKasZXt3FrkfaFg1l/93z11/45dubJV1kJwtye94tRMnD6vLemZINmXXj2hZvVLOeywPlnnP9ZFrE/r7WW3gxl5tUq5Ndx9Bn6zr181T+WeEyR/HlOAD4QvhA+0XPhIQv0onm/Y6jmhZKVZFz8rRbcBNhd6Xia9yPTbZyQIWS+yIDTzMIX21ffktQmUz0RXXjyz9Nmn3njzp4IsylkXvu8l7jKfF5rLRm9pJ9Xq5Db45qm4Tv/Nf2GMtSCY0495kW37Tmpj75CnzmpO7KOOYZ4LI3cL9vuCMDnwffBB8IXupOW2NrdAzHUNwNrTmRXLSt2AwaF4gRc6R1gZWS+yICRCQfYbCqaUpvsSWqNrdzb2reCCi88+Cf3gpxJyJfy53BNfKuGX6osir5+4ekX7lSlhKtDF5x+wW58qWEXC0Lezum5sy2U86WI2VfcZ26FY+xgDLmVI/WHE4Cvg8+D7xt+JElb7m1RiJ0cQ91LqizB3wSA29VJvcAvslQhgAwYmTAyYmTGVYrKIVsEFKmtDiI1fm1btcoVxtfIDpx36aPljvm9DzcEKkOdaKUdXdN/1t7e7vm8hkxDM6ydYVB0InS2oq/XZdBH6Cu3cjFmMHaIFMmfNwTg2+Dj4Ovg87yRmlwpQcROzx3FyO7gBOb5kftkuzwBZMTIjJEhly8he20TGLiBi+rH2a46skLx2Tu3mHXG9bi5YOQh37ePPfXY33AjD/Jaa/nceG28lWv0teQMOz5OG3cA7/gMr1UXReqhOafMubpqIZ8Oom/QR67F81jx6kZS17okRAB8GnwbfFxCTKpqhhcHg4idvicAnEDLGQAbowGZMTJkZMrImG1UlaKVCNRPIO3LR5Hr72+X+qj4zL0/P+Qnd7nPJirpWmG/Ym9gKAOPCTYqFFm5m8udPX/+/IaVO1y+MWUpOtOCGIMvERwDXS2U9bQI+gR9Q9xHrgRr2f6xwmPGlRypbBJQigi+DD4Nvs3cKf+sEVDke+z0PQEwDF3OAFjr7mGlkCkjY0bmPOyAbDgj0LIeaVvOclZ3SC38jGzPm089OWRXYG/n/WjeI5xQ/9JCg5O1To0zHgslLRQZkDW5ZlFFV805bU4ovwKKPkHf1NSxRgFzjPBYqVFMDlsgAN8FHwZfZqF4gop4Y0oQsdP3BIAMzfcsxhvc0ZOCjBmZc/04jeTJox70z5pfJvWpr7sWVHr+3jVnnvY7a9fDXbc2XIBS6mTes4zXqgt/FJ/D1+3zVQtZOAgZLGuuhaLLC8UCng5ooai3RdAX6BO3Us2xwWPErZy014evgs+C74IPSzsPx/YHEDs1x8pZrLhoWssbXLSHV1kcEsg3aNTclqVcA59PcyhDqvUTUJvuRWq1z/VvOP1v6FR8+o7jZ59763pORTitx9fX3zUM4yIL9Vfn6/au7wUYnxk/g9tajddaywUntJ/wTq1CXh9HH6AviPvEjWyMCYwNNzKkLpk+Cr4KPiutPDyyu2cgdnokrrwYrfxuD/fytUuWJl8FZAhuFmTVDeMyJFm1G4pcVylSWx1MqnkSbzhfjBXvq8LLjz/mXILzmvls/gKu3clr9UXR8ZwsqOqFKh9FXYMMK78z0JnL5C6sLMm/I+gD9IWbFjAWMCaIx4YbOWmui0/68E3wUfBVaWbhke0v8niseb+P27b8TwBMDeWrgCYGD/6tvK7W5Nive6BFzEXkGkh98XBye1Og/urD4w784a+vC5rGUScf9aEitdhCu5ssOHvBHhbKlS1ywVkX4Od+Nyp7cMhO6AKdhuwK5C3Yow9cNaZl+8cCjwlXclJcOc++CNf64ZtSjGHAdK9egomZgSQA/ElCbgT0alywHHxQqR+TIUy6TE7xHllsExi/Fmmf+Y7taiMrFJ++7duzzrl5+5H7/d7OlDI/4zZqPiJYGeoELudoUWTp2QN9utID/9VEMAd7R4YNqWSOAR4LQ3bJW4sE4Hvgg+CL4JMsVpNiFggEFTMDSQCIgslmKGV/mayiptYM1Y/R+GxRyoz3wtz1diS1xpbuJPUup+IL/7rNnRD7tY9uPxpPBrzSQs2vLjhjwdYWyg0rMv+M+dvy6f8vD9tZZoPLXDXvR/PwyO8yR/3bZTJn9m5aMPuex4AbGWmsi2APnwPfAx+URgaVbPZufzAxU/NO4cqSNE2+CliZjvsj+SbNPBuQqw+kO90rHCEJaotZpJomutJIf/Pxxpk//HXgD78xSga+iVCqqbwi22cBLH76L2Up+3812/e4AFiDuRux6HP0vRsZaawLH4NP/fA5abQ/KJuDipmBRAyN5KuAfg8c3ITTMF4jrHjvd3uJkc/XftUXDyO39wMU/3f3fjPP/fM6QXLBDwXxJ/BrLLQ59fxzzv+UhXJmEf70vykp+oa5UeWfIvX7oH/wB4zBuopatQ+Z1/25z7nvaxeWEiAAnwLfghXvsU/WkQS82w4qZgaSAFy054TXGY18FZAh+L0MZui5RuV3U8mRP2Ed0jbf25U9RueHZLzx5EOuhDipbNBPuFqtu4U1VVLHczlLi1LmfQO1BpChNHWuJYEeFgJjsHYj0uxr7nM3MtJUF74En/rhW9Jkd4i29gzETN9VCCQBoP6vAuJnTX03SBogxk3UMDZj3h8g1+jI2t/6O5Na/fPWylYoVXzx/lVmnXZdoA/DmXfavKeVoW6soNLK3YrUAee1n7fqyh0V3px/1vlr8qHv8VprueXYU459qlYhL4+DLRi7kWn2Mfe1GxlpqQvfgev88CVKpcVq53Z6WPMlduK1knpPmgsmATBVVfJNAJNDcP8G79Kta+ZulglcEzweA6saW2uWq1jA0Kn4/N/O2nv+tQ0Vy/hwQNf0cyyIrctlcnzeu3pJTiaO5BI5XqsuXM5Km1Vl2DkIpmDr5oE/6Fv0sZ12U1mWfQV8Bj71w4ekkkGoRgcXKzkyBGWpIY8EDgr1iHYwmZtbMyTf0x0BZsSmkWsi9SWOkVpmxBHrm3gefeMbHz5svYb7kvPwGwFEd9aSZJBxgGEYqlK59vZ2TZGy8vTAv8w5bU6gNoIp2FbSveZ+7lP0Lfq4ZtkUF4CPgK+Az0gxBgeme1kluFgZYAKgXvQSkciyR0DLKmqckCE8o1sF2Ov2tIxA6QnrkbbZt10pUvzfPZvPPvOmqa6E2Kys6zruBahai4P7uheefeG2lQqNV+N34mNr8Fp14UQi0Gv/YAmmVZWqcdDsU+7bGsVSexg+Ab4BPgK+IrUgImF4cLEyuFCgdHxvORJ406xEfuB3BfLyuwKVh8EGu5BadfPKx2sdKfZQ34sPXVurmJfHj/vxcfeyvJpJtm7oB3C5souhGTPKHhiyk4P/y3N/NPeeIbt8f2uyZKZOGzL7kvvUaf2k14MvkOf3u+tlT2sHGCsDSwC0Er3tKSQR5phAf7afMc8IaBnlWE5yKyoyvyOeb3JsovH2k3WzTrrqJscCHFRUSv2qVjW2bO/58+ePukfhpz/9KYz9loX6V3E7gdygBF3AECzx3tHKfWj2JSlH1ZNcCXMfn/jrx2VIBRYJkkzUG9uCjJWBdXtJKUkAvBkfnknB9T7c6JNvEuc4Cmr9ONI+Z+Vy+KiaK3cUnr1r6sxzbtl45Q6f3xhFAwlAreA8VnWp6SNVyXXn9uJ9SAL4peJiZCmLNioW8PIA2IGhG5lmH3JfupGRxLqY85j78AFJtC9Ym7xtLchYGVgCUHy35R3GVMs5cRFZgiSgFFH9mIz5JEG543cE+clfJLXGViN2Wt80updQ6bUn/2G9hruSc9vnvsIS/s5rreXAkQUMVfv0P9e57+hTj36ZXwNZwA4MnTZm9h33odP6SayHOY7AjzmPuZ9EG2NukzEQKwMxI7AEYPGhqsAWfcirLBEkkMkq87kB9WM1EsfwSQdpn+ezAPVjP9lh853+yoMts077fWBfmeNr9FfVVNGgnRecvWC1wXIXtV80md/vyGvVhWVb+e2BqjKsHgQzsLNaflQ57jOz70YdSOcOzGnM7abWDGGup5OCP1Z7LPXDgVjpsdjy4rTyu33bK5cBfEPrjeB8o2aeDZCnfvXzNPJjSNtiVv+Gk/+GQYVn7z3piPZ7m51Ut1unkC/8get08VptyZBB+w0W0DM63tfyBV11pbrrBuv4+QpWYEbMzmk76DP0ndP6SaqHuYxP/ZjbSbIrobYEGiNrTXpPGStDbgT0FKhPwrSMMn9TQJ77PQB41c+QWvurAxv2X4ylb6jOZc88aL+m/Ronnnjicv6kfkPNmgatvAxQ7ZsBQ+Rcf2T7kSuGbPv2FqzAzGkDZl9xnzmtn5R6Mo+D6Elv2wg6RgaaABhKEgBvh4u/0j755KD8bSgG0tVnvkuq0flTAovP/XWzWWfc+KWATK19GYBos/PPOP/zfClgC6XUp2vppemaFZm1xNQ8DkZgVbNghQLoI/RVhcOp2Z1v5Et6bRnCHE6N0QkwNOgYGWgCoJQR6OmNBIyH0E1Qiqh+bIaa2Zmk+o7hXANpW83m/mAg/N/2Uuii4lv//bPteg4qLCst+wtXe4PXqotG2gGk0wFVC/UffO2Y046BzP4tH/+bjJiVsyZUfx9xX1FK/zBHMVcxZzF3U4ohMLO9bijoGBloAmDocgbA6wETlDw8HaxxQsa8NIBTi0G1G6V2jLaNSa1f8165iirrrzw0YXb79XMqFvDoQHt7u64MdXVNcYr25TJWfvjn14o9E5f1dQEbMHLaCPoGfeS0fpzrYU42jNcIcxRzNc62pFn3oGNkoAkAOxE5AxDz0Y1TiuYNRU38SZiXmJtjW3212bdJNa9iu55ZgWd34aWHzjPf+/yvmC1aOWU/idXAyi+VFz5TYEVWZQEWj5hsmJHF4sOKoU/QN8N2pmGD5+Dgd/oxN9NgcnRs9F6ToGNkoAmALg8D8n7EhCBRsdPB94ibWzOEU44hqBBek5k8qa0OIqffldTffSY38+Rf40598vPv+JOPf5blWxoXZAAAEABJREFU/5NXV4tBxgPHnnrs866EWKgMJmBjoejoIjwgzT7hvhl9MLl7MPcwBzEXGUFyDU2RZUHHyEATgExJkzMACRrMONXYyJcFsOIUZIJMq25Ky/qk1p1SvUyVo8Xn/vqtfc+9b0KVIp4cMgzD9Sd3/vTv+3f/wQJMnBqt1uW+4D5xWj9u9TDXMOewYg7GTf+k6OuHHUHHyEATgLrGHjwN0A9uIjNEAuYnkbYM1TVrTj8YU9z+1KbfIqof70htY/m7Kvee/08IVBn1R0cKflLJKJaKbmV8Iq3CO7AAkwqHq+/mPjD7onqpRBzFp3zMMdzkhzmXCKPEiGEEgo6R2rDWfd742W6rdnITy3mVJWkEFJkJAO4PSMW1yFwDaZ+1cv9c+Y4uPn/vJjPPubXiT/OWr2Vv79xT5r6tDIVLAfYqflL6yePbj//gk03v34EBWDiVbPYB94XT+nGphzmFuYUEgHiuxUXv5Orpi2XLB2KkL8LLCQ00ARhQQC4DDIBI4gtOTzak5W7kNbYi5fSBM4VuKr36n5t9HwMaOf/6nuGirkXDTAbMwmLxYcVM9twHw3YmbAOn+HGqH3MKcyth5ok5wwkEHhsDTwAUybMAhvd5MrdwihKnKuvGaIRTl8m0kkjhFwMd3nymv/rQ+Fln/PEE8vHPMIx7nYo3NMN58mChUdgOBhaKji7CzE32o48kYg/mDOYO5hDmUiKMSpARfpgSRmzU/DCkmkyDVOBZTjV95Ji/BOqaNGqemKVcQ0LPWza2krbJVGcQDZ2Kz//jbGeVrdXKZXJIAAxrpYeVKvVl+6z8suCwSnY2TNuZgZ06g2VN5sx+cDtJr5grmDOYO0myS2ypTsAIITYGngBwZisJQPVxkLijikdZw7gMNbZkCD9HmjgDN9yV1Dj8oJ59y/T3ns3OPPk3vt1od9TJR+EXOP8zVLNisUgfvv8hvfT8S+aK99g3tAy/f/Skk05ayq++LLAZtjsRbrJm5k7qRrkO5gbmCOYK5kyUdU23bv5YH0Zs1PwxpbJU3aA3Kx+VI0kmkM0ramrNUP1YjRLl4FSG1OfxRF1nZzmKL/x92t7t1+bJpz9FyjyVv3zpcnrwbw/S3bfeTf/6x7/ouaefM1e8xz4cW76s/x5dg5xfOqhlxt5sK2wmR39sDVgzc0fVI1gJcwFzAnMDcySCKopKARAIIzZqAdg1rAmevpIADCOSvg38LGlzW5ZyjSo5xrfg2QDbO7LHWPqmauzp/pOjyhYq9ZZ6//7i/140g//Sjyt/qMexB//6IKFssVT07fQ/bIXNFlQfVUSty4yZ9agDMd2BOYC5gDkRUxNSp7ZfBitSgcfGwBMATc4A+DV+YiUXn3oaxmbMMwI49Rkr5Ssoqzbbi/j0RoWj1XeXXrx/p73nX9tQvZSzo3+79W97PP/M86Trek0BKIOy9/7p3mk1CzsocEj7LY2w1UFVk63J2FHlaFXCmMcnfswBzIVoaSfahEEgjNgYeAJQzGqBZzlhdKa0aY3AoCPEKdDYO8JcI2mfcfZsAGPZ26rpvc4/W6NmvdSuW+26S8koHWS9Rn9JTgS+v9uWu03p3/Luf1/PB7fBVicSTbbM2EndqNTBGMdYR/DH2I+KXqKHVQL+lQsjNgaeAHQ3ffyWfwhFclwJ4BQoToXm4n5ZYPIXSbWu76gbis/ft91+F9021lHlMpWmbjN1jDLU5WUOWdnFZyTp8q233tqzsxKwDTZaaXxkGZMpsx25P07bGNsY4xjrcdJbdA2GQBixMfAE4Mop6/YwTtyZzC+yCIFPCODTEU6J4tNRnG+GUpt/5xOjbLwzVryn8q+/fbuNKlWL9vb0bscF1uTV2WLQus09zV9xVnl0rfwbb98OG0cfqb3HKdPakv0vgbGMMY2xjTHuf4vSgl8EfJT74UBs9LGJ0aIDTwAGVJCzAAMg5GU0AZwa7f86lEZaRo0uEPU9LeuTcviEusKL930ZP47jhYmapm3pWk6G3MtgJWBT4YX7tua3theTJTO1XTHkChqP3YZxWnK//hoy34Q1H0pMDCsBkPsAEjZ6/TAn16ARnn+ej+FlAbXZt4m0rG0sRucHKvfhs3farlimglEy3Advw5sEgG26i20ro2WNXczQZFmjWNQOY8xi7GIMR0030ccpAV/rhRITQ0kADJJnAfg6lBIkXCmi+rEZap6YIfwgSmxMa5pIaj1n99CVXrxvq1nn3DbRra2GMjZ0KyNDGdcyZvz0jklsk6NkxGTILN3aEVR9jFGMVYxZjN2g2pV24k0grJiohYGNJ0Yo2U4Ytkqb3hAwT6eO5zMCrRnCNVVvpPorRdtkT6J8k+1GjK6PqPTh63fZrji6guv5bZDhWoZ655U7YdNo9WrsYXYmwxrFonAYY9K8zs9jFGM1CjqJDt4S8FNaWDHR9eR2CEUSAIfg0l4tk1PmNVXz19GyKtI4jFwTaRvv4UhH/YX7Pjv7/25a3VFlrjRzhx3q2am08FtXi6bRJMhyKuSAs25ZA7Y4qQ92YOikblB1NB6DGIu4ZwVjM6h2pZ3EEQglJoaSAOhG8E88StxwSblB5qnWtgxfHtBIaRGGsd6OpBycwjZ6llDp3bcd3Quw3y5TtynUNT/Hwdv1ZQRNU6tB1v677u7o2wDqozfuhC12e8hkxuzs1guqPMZc/ViN8Gt9GItBtSvthEXA33bDiomhuE6lSwLg73BKj3R8pxq/nJZvUqRUBO3WsuT0JrbSC3/f9KCz/rS2Hav223X32aTpf+E6zr/+x5VHLGsy3L/sv9se+MGDEYcqbx70sz+tXXrhvk9XLlH5iMmM2VUuEc4RjDGMNXPMNYbiPsMxXFr1lUBYMTGUEZypy4ZyusPXHhThoRGAU64fgxsFs9H8fYE1tnL0cCCjdxkVPnz5Dqtg99t1jzM5UOPBP3mrdayWM4jqeL1q36/t8SOrdYpv8rV/tsFq+cFy5kN/mNngdlRezQf5TMwSxhrGHMlfagj4bWhYMTGUBODirzd/wED7eJVFCHhGAKdl8bCVKJ6Wdfogm9IL928088xbat6Jb37yV2Q5ODuFrgw6c7/d9ti3Vv3ZZ/55o+IL932qVrlyx52yKifLi304xY8xhbGFMeaFTJEhBIYQ6BuIiUN2BfM2lASAP6Xwhwl6KxgTpZW0EdCieGNWi8OHA/WtIP2DV/5crQ/33233bXlOXVKtjMfHLp+x6ze+VE1m4cMXbiPWvVqZcsei9NAf3NSHm/twkx/GVDl9ZV8aCPhu41s8fxETfW9oZAPhJAD9WshlgH4O8t8nAiu/mjVOoyh8Ncvpde3SS/evP+uc28peS//617/Op+bV1YzQ89P+LLPSUq8r7epDttwyV67AQWffupn+4v3rlTtWdZ/m/H6JqnJtHsRYwRP88LU+jCGb1aW4ELBLILRYGF4CoOg5u5SkvBBwQgBPY8Mp3LoxGinNiQSP6jRNdPZwoL5OKr3zv9vKadGia0fx/rV4HbVomvu7IlVlERt0tq12yKhGeUfh3Rf/RKwzv7W1hP3QH4wNjBGMFYwZW8pL4cQS8N0wFV4sDM0dKkM96ztYaUAIDBLgQFbXpJH5a2xNvMHL4KEgX80H2+TtPxyo9NIDa888+0+fG6rrzB2mjydSJ1OFv2zG/fTO8uWUCuKx+7S9d9i7GW8G11ln37wFn7Eom5AMlin7ykxMNmUP+ryTx0KexwTGRh2PEeJtn1sU8UJgJYEwY6F7D7HSDHtvdIOesVdDSgsB9wTwKQ93cfd/ygve0xtOHw5U6Cb9/ZeuHUqgkC/M4O2KD/vJlj1BzzVsLDUSgEn5uu7vDRVXev/V3xPrOnSflfdhPfQn16A4Kcz039kfmje0QkjKhEPA/1bDjIXhDXlVlATA/7ElLVQg0H+dN0Pmdd66gBOB9Zw9HEh/+eEND2q/fWXANzQ1vYJ55m4Eb2W+c/iPK2dz/K9KdWXQSh2gG+u4Adn8C+OhP1nuc/R9w7gMYSzYVFmKCwHvCIQYCzXvrLAn6f3eiS8TGb32aklpIeAtAfNO7wkZauQ1U/10t3cNO7zZDU/UK3W+dT0U2Xf33Sdw8N0O7yutmYyixsZMpcM19zdx3Uyt+wgU7bT3wGWAUtdbN0DHmoJHFHB6c+QIMZY20cfoa6zoe0uVpFBqCfhvuNHbHwv9b6lcC6ElANfto0pESm4EJPmLAgHzE+HAo4UD+US4hrOHAxVf+5cZ9LWCtj1zy/JadWlo1KjWp3gq84ezBw0Ntd2DQVSXz/dsCxHFV/t1w3ura1AP/UGf4tG9TdzH6Gur+kk5IeAvAfVcfyz0t5VK0mvP8Eo1PdjPzkNuBPSAo4jwjgAeLYwgUdesUZU74D1p0MkDb4wlr2sHnvLby0gZk60qMaY5QwjoVsuj7JgxGavFSWm0FnRi3ZTlSgMFnTAYqGrpRbFG6Ev0KfrWUiUpJARMAv7/CzsGav6bWLWFp6selYNCIAQCg0EDz3vPNXIE8UsHhw8H0t/49wE6qdWsqoVLAePHZ8nK5QCUQVnUsSpfN4w1oJPV8oPl/H7oT477Dn2IBAB9OtiuvAqBCBEINQaGmgBoBj0UoY4QVYTAMAL8yZYaxmbMu8TxONhhBz3aUJt+k+yeatDf+W9eNbVNIZt/jXw5YMKELDXzGYH6Oo2yGWWueN/clCEcQxmy+ac1t+0EnWxV44hs2m6rkrXC6Ct8ywN9hz60VktKCYHhBILYCjsGakEYWamNvj6FBECvdFz2C4EoENCyivA42KbWDGXzyluVmlcltfqWNmUapGnaujYrmcXxyb6+XqNmPsU/npMBrHhfz9f7ccwsZPOfUpn1iPhkpo16ps1su40qNYuib9BH6Cv0Wc0KUkAIhEtAH4iBoWkRagKweJ+Wpcqg/4ZmvTQsBGwQwF3jjS0ZwopgY6Nq1aJq492rHk/iQS9tRl+gT7Cij5LIS2wKmoD/7SH2IQb631LlFkJNAKCWoegBvMoqBOJCYGjA8eSO8nFrkVr1M3Ex37Wepq1ss1tBYI+gjxV94lae1BcCQRKIQuwLPQHgU4eSAAQ56qQtzwgg6OD75E18VgDByI1gtVF6zgK4tRWswRzs0QduuEtdIVCOQDD7jNBjX+gJQEbTQ4cQTGdLK0klkMkrQjBCUEJwcmRn6wakJm7sqGqcKpk2sq1OdAZbMAZrMHciQ+oIgagQiELsCz0BuGjPSc9zh7zHqyxCINYEEJQQnHAjGoKVXWO0jfewWyV25Z3YCJZgCrZgHDujReGYEQhE3fcGYl8gjVVqJPQEwFRM0c3mq/wTAgkggBvREKwQtBC8rJpkTNyEVIujm/utNhFqOdgGG60qAXZgCJZgarWelBMCkScQkZgXiQRA6fSHyHeYKCgEbBJA0ELwQhBDMLNSXW2U3LMAVm0DKzADOzC0wk3KCAGvCAQhJyoxLxIJQN+7LX9h6B/zKosQSBwBBDEEMy2Nh7sAABAASURBVAQ1PKSmqoGrfZbUOMtP+a0qKkoHTZvYtmo6gQ0YgRWYVSsrx4RAjAl8PBDzQjchEgnA4kNVgQy6KXQaooAQ8JEAghoeUoMgh2BXvilFbu+SLy833L39NqmySoAFmIANGJUtJDuFQCAEAmiEY50Z8wJoqlYTkUgAoKSulFwGAAhZE08AQQ7BDkEPwW+UwfilwOZJo3bHdYeCLWzTSP1hOxiABZiMPC7bQiCJBKIU6yKTAKzSO+Eu7uylvMoiBFJBAEEPwQ9BEMFwpdFK47MA31i5Gfc3aiO2hW0atAO2wmbYDgaD++VVCIRNIID2lw7EugCaqt2EVrtIMCXa91F9ROpqkj8hkDICCIIIhgiKCI6m+WtuTaqhxXwb53+mDWwLbIBtsBG2wmbsk1UIpIuAuro/1kXD6sgkAMBhGMb/8SsnAvxfFiGQMgIIigiOTW0ZyjXmSX1qt9gTgA2wBTbBNtgYe6PEgIQS8N2svoEY53tDVhuIVAKwaHrr66Tol1aVl3JCIIkEMtn+Xx9s3HIKqfoxsTURusMGM/BnVWztEMWFgCcEOLYtQozzRJg3QiKVAMCkUkn7Cb8WeJVFCKSaQLa+jho+//XYMoDusCG2BojiqSLgs7GFgdjmczP2xEcuAbj0mxNeYRN+zassQiD1BHKb7kgq3xg7DtAZusdOcVFYCPhD4NcDsc0f6Q6lRi4BgB2anjmHX+UsAEOQJd0EVL6B6j+zSz8ELUOZ8avq2bU+26fV8+mB/r2h/4cu0Am6EesIhaAzdMd7WYVA9An4qmFhIKb52ogT4ZqTSn7Xufib4180iH7odzsiXwhEkkBGIy2XoUx9jnJN9dS83V408bCLabUf/p4mHn2J1rrfqXmVzU2Iiu7QBTpBN1NH1hU6Q3fYAFuIbYqKvqKHEAiSAGIZYlqQbVptS7NaMOhyi6a1nk/KuCXodqU9IRAIAY2DfDZLmbocZRvrKD+mgerGN1N961iq59f82CYO/g2cBOQp0zSGMhMnkzHw6brQ1UOK9EDUtNIIdIFOKAsdoaupc33etAG2wCbYBhthK2yG7RozIGaBurIKgbAI+NYuxzAzlvnWgDvBkU0AYJauZQ8kg17Fe1mFQNwIKKVIZTOUyeco21BH+eYGqhvXRPUtY6h+QjPlxzVSjvfhmJbPkbLwKVkvFEkvlIgM/lwRFSCsC3TSWbdaKsFG2AqbYTsYgAWYgA0Y4RiYgZ1SqpZIOS4EokmAY5cZw6KpnamVZv6P6L9L9hj/MXu677B6cj8AQ5AlggT406vKZjnIZynbkKdcc70Z5Os4yJsrB/wcf7rHJ16NP+0jqJGLoFbo6u2HwEG3/00E/g/oslI3JyoxE7ABI7ACMyQEJkOwBEdmC8aZfJYTqywRs3fSlNQRAsMJ+LLFMcv4Tn8M80W+J0IjnQDAwo7pbQ8bSs3h9xH6yMPayJIKAkopDjYZ0jjoZM1T2vWUH9PYf7q+Zaz5Sb4On+R5X7axnjJ1ebO8UspzPnpvgYwif/qHZCM6lwBoQBfoBh2hnperUspkCrZgnGPWYN5/5mCs2RfoE9xzgD5CXyGZUEp5qYbIEgJWCRiIWYhdViuEVU4Lq2E77S6a2rKISO1LRD28yiIEvCPAQcI8LZ3LcPDOUW7wejx/4qzDJ0+s/B4BJtvEAZ6TADPAZDSigONLX/fAp3/iPyNC+fAQXYbpyGr6vnAfmP3HCVqG+wZ9hL6q4z4b3n8NZt+a9x1wX6MOcd/7rp80EHkCHivIMUrt2x+zPJbsgzj2Yj5I9UFkx7SW35FGO/Ilgfd9EC8ik0yAg7WW5dP0fAo+y9fic3zd3QwQE8aY1+PrBm+64/0ZPq7lc+YnTqVUZKiUEPxLQz71D3zqjoSCQ3VhHU1dI6EYcYxXZl+iT9G36HvclFjHfW7ed8BjAGMB+zE2zASBx4p8a4HkzzYB433iGGXGKtt1w6kQmwQAeDr2bH1QqeyXSNEz2JZVCBBfB1bZDGkDnwDNT/AcyOHUzVPEg3fV4zQ978f1ZTh51FGaigVAgz9hF7uH/ESGXoye3kN0gq7QOXpKjtYIYwBjAWMCYwOJgHljIhIEjJ0JzeY9Hbg5EWMLZxkw1lCHeOyNlih74kXAI205JiE2IUZ5JDEQMVogrXjYyMKp418u9KitWeQVvA5cEOV3siSPADtYOFo4XDheOGA44mHBfdBB83VhXAPGpzyNP+mjXlIcdKmrl4YF1FIEE4AhOkFX6JyIATk4BnlMYWxhjA1eYliZYA6OQU4wMUYxVjFmkzQGE9GX/hiBGHQFYhJikz9N+Cc1dgkAUCzep2Vpx7TWg3TSN+Xta3kdcm6Ut2SJPoFBx1rtk/ugY01wcK/ZUbpOxd7C8GJDPm0PPxDi1gidTJ1Z9xA1Cq7pwbEsSUJwzD1qyYUYxJxrEYMQixCTXMgKrWosE4BBWpdMm/g/hv+dkmasRaROIKIneZUlLAI4oz7oDPk6akaCu+ueML9ax5cAhgoyhnzaHro/zPejdGKdTd3DVCpKbQ/OC5tJAuaQxnNJ8WUu84wW5liU7EqfLhxj1AmIOYg9iEFxRhDrBGAQ/KV7tr3ZMa3lpx3TWj9Dijbj9VA+tphIPUZEQy6e8pYs1gngJriMRnA+eJxrJp8jfM3KvFbaVN//dbhxTYSnvNW14Ia6wa/FNRGuo+LrWjhlilOnSTstbx2i85JGqUSlkZ/+IU4fcUYA+8Jey+gE3WFD2KrFpv0ySQLmEObSysteLWPJnGvjm/vvTRg4O4Y5ibmJOYq5ijlr3siIORwbAEErWrM9jh1mDFlsxhSOLYgxHRxrEHNq1o5BAS0GOtpSsWNq69O8Lu6Y1npox7SWLSf2toxRpH/BMNRhnDxfZpDxOAuMoAdlrfxfliqlVsA5aLms+bU3OA1ctzRvfmJn8omjQUDnddDR4NG0eKANB37zbun6PK28zpnRiOX6r33KWih09pS1WOm47Fj2UGg7K+lUyYbQFE1Aw+Zcw5zjswKYg7jnAHMSX4HEA5TMbzkMJOb4poO5Dr2cNnCvAuY+bn6EL4BPYLkrGM9SXtO4FBAbzBhhxgr9C4gdiCEdiCVTWxdzXHk6aWC0pBk00p72fVTfwmkTH1k0veXnC6e1HrJoWtsWWq5ljEGlDRWpr5JhfItfDyeDfqwMYxHX/4NBdB+//o/XJbxGYWGVaIUiepuVeY4UPUpK/RW/laCIruF9i3k9nwu18+tx/HoIkfqeZhi7aJr2OU6A1sg1NsytG99cx58emhHk82MbKceOAE4j01BHpiPgU/aKnQrxJxGWT/IXHgE8VlfHI3/LqTDienu5IoHvq6ATbNAtPCI4cH3T1KBShDmNuW0mDAOXITD34QPgC+AT6lrGNNexj4CvgM+A74APIfYl/T6F4FvgY84nosUKvkcZt7CvYF/EPonoOd4HH4VEgqtwqfAX+PD/sTLw6X8wfbzBvp7U4QO+/6uIBYgJiA1mjDBjxcRHEDvCV99fDTR/xUdT+sXfUL2Lpk16YeG0ln90TG/7I79e2jG99YyF09uO7JjWuveiaa3b8evGvE7gLLCOr/dMzmilTxGfAiKlb6kr2lpX2g5s3a6k1J4GGXsZSu1LZMwkRYfy9tF87DhF6kTDoHnmNu9XBs3mfTP49bsYfMR1+f3XDNJ35Prb8r4vQ34pozankr5Roaiv3k362I6pLRnWZczCaa2r8+tGHVNbt+qY2jKlY2rbVN63L+/jsx2tx7Pep/P7+fx6Wce0lt9dPL3tbqrPa7mxzf/INOQWqIxWz3rJEgMCVa+fF8qfGQjVrCo6VbUlVKWl8ZEE4CPgK+Az4DvgQ+BL+n1KK3wLfMzxHdNaDzV9z9S2qf2+iH3StNaNeB981Bjel4Hvgg+DLzN9GvtO+Dj4Ovg8+D74QN73LX7/3QHfOJvYVxpkHA3fyftOZB058TCOxn74WK6/Lx/fi9h/8rFddfbF8MnwncQ+Gr4aPhu+m/WcwOvGrD98+t6mj4evn9bCPt/0/f9YxLEAMYFlpW7RUmexTYORBeJ6z0V7Tnq+w7y8MPGxS6a2PnTJ1Al/44F1V8fUllsXTWu7YdHUlms6prVd1TG1dTFvL+yY1jp/4bSW8xZNb12waFrbQuxfOL31l7zvan79fQcnHh1cl9/fsWjaxHu5/v287+GOqRMfu3SPlqc6vjXxucV7TXz7imkTl5Pi6WFT7yPufa957j3df8rX5x7Vctl1bFaX4iESwON08VjdSioYhe5Kh0LbX00n2AKbQlNOGrZNAD4DvgM+BL7EtgD2WfBd8GHwZaZPY98GH7doasv98HnwffCBvO+P/P73A77xlx0DPnQR+07ed14H+9JFAz4UPpbrX8PbN3Sw/+yY1nrXJeyL4ZM7IJ99NHw1fHY7n/2trLccAQFJAEAhYevcuztPbtDGfajVZb/ByYNKmHmJN6fW43RVlU/bYcGppVMtm8LSW9qtQkApBR8CXwKfUqWkHIopAUkAYtpx5dQ+9o7l2827t/strT5/NmW0fLkysi/aBEp44l8JXzGuoifOAGiZKgUCPpRhXaBTtWbZJtO2amXkWDQJsC+BT4FvgY+JppL2tJLS/QQkAejnEOv/c29f2jL3nq6/Zhvr/6Zy2dVibUyKlccT9Ao9Q37wpwILnG5XuejkdypXR9Cpgrord8M22Lhyh7yJFQH4FvgY+Br4nFgpL8qWJSAJQFks8dk55+6un2iN9e9qdbntSU72x6fjymhaxNf+dKPMkeG7VLGHtHx07ufU8g0EnYZrWWaLbTNtLHNIdsWEAPsY+Br4HPiemGg9Qk3ZHCQgCcAgiZi9HnP3iq8d99feDzL1uRNJ07IxU1/UHUHAKBTLP/RnRDkqFYj0EqkoJQB1DaZOpm4j9R2xbT4ciG0dsVs240aAfQ58D3wQfFHc1Bd9+wlIAtDPITb/cept7l+6Hs7V1/2ZslprbBQXRSsT4A/9vfj0X7nEyiODp9qzYyPS9UpRdmyLqd+gbuZGlX+mrWxzlSJyKC4E2AfBF8EnwTfFQW3R8RMCkgB8wiLy7+betWKW1lD/tpbPfTHyyoqClgkUu3qISjVu/BuQpgZuttPy9ZQd0x94Bw6F8pLlRERl++9HGNStpiJsq2lzzYJSIC4E4JPgm+Cj4qKz6EkkCUAMRsEhtxiNc/7SdZ/WUHeF3N0fgw6zoSK+I1/s6bNeY8hXALMtq1qv51PJ3FAdhuhWqznYDNtrlZPjMSKQ0fLwUfBV8FnR1Fy0GkpAEoChNCL4fs7dndObx/Z9kMnnvhpB9UQllwT6LJ76X9nMwBkAbOcnrUlKy+BtKKvKZCk/cfInbQ/R7ZOdld/Ztr2yKDkSIQLwVfBZ8F0RUktUKUNAEoAyUKKwq/1eIzv3nu4/Zeryf1QZrSEKOokO3hIodfeS7U/BxU+eAojLAPnV1/dWKRvS6tbYgPAVwJVGGrT3AAAQAElEQVRVhui2cl+VN7AdDKoUkUMxJQCfBd8FHwZfFhUzRI/hBCQBGM4jElvH3L18yjLVO/Akv0ioJEp4TYCvgxfw0B+7cvt6htWon7whB+H+a/DDDvi8geSjbvUNhrcyQrfhB8tvmQyYRfmjsjfWBBSRVpf9BnwZfFqsbUmo8pIARKxjj71nxTW5urq/qGxmbMRUE3U8JNC3ggO54eBW+BGn2RWfhm9Y77MeamZFlKKG9T9LKjPi8sMI3axIImZgsrBUWArFkQB8GXwafFu4+kvrIwlIAjCSSEjbx9zRuSW+U5utq/suKRWSFtJsEARKvX2kF4vOmioTZPNtq1Pdmhs5k+egVv3aG9Owm/8GZZTRbfBQtVewAJNqZeRYzAmwT4Nvg4+Dr4u5NYlRXxKACHTlnHs6F2Ubc/+S7/VHoDN8VsEwn4bX66wVPASoWL5uw1obU75tDWdybdTCjYf1kz9VvgZ0g47lj1bdW+zsJbCpWkgOxp9AVmuFrzv2rs5LgjZG2htNQBKA0UwC2zPv7mWfmndv9xuZuvzhiv8Ca1gaCo1AobObnD4P3+hdXlXvxo22pLo1RlyXr1rD3sG6NTakxg23qFqplo6VKoMJ2FQ6LvuTQ4Bdnco25A+D74MPTI5l8bNEEoCQ+mzOXZ1nUb7+GZXL+v+xLSQbpdnhBPS+ImEdvtf6lurtrFGYr82vs6kZpL38eiBkNX5qC2pY59M12ieqrSNV/AMbrBULyIFEETB9H/tA0xf6bpk0UI6AJADlqPi47+jbPhw79y/dz2Qa8qcoTQl/H1lHSjRudrP7nf8RBlj9dI3T9GO22Inyq6zFEtzcT6JMGaasiWuyrNqLVR0rSTKfDcCsKh2X/ckioNgHwhfCJ8I3Jsu66FujRV/F5Gh49F1dX841Nb+t5bMbJ8cqscQKgQIe96tbe9xvJXmqd0WlQ6P2a3UN1LjB52nM53egulXWpmHf1x9VevgOlEUd1IUMyBpeovKWHR3LSmFGJquyB2VnUgnAJ8I3wkf6YaPILE9AEoDyXDzfO+fuFSfk6rP/UBmt0XPhIjDSBMwH3vQU3OtY4x6Acg1kGsdSwwafo3Ff3I2aN/8q1U3+FOEMQW78JMIxrHiPfTiGMiiLOjhWTmbVfQ50HCmvxKzAbOR+2U42AfhG+Ej4ymRbGh3rJAEIoC/m3d19e6a+7v+UUsI7AN5Ra8Kz77nXvAegmuWK8MM9DWtvQriRr2nTrfnswBRzxXvswzGUIXJx2cCVjrTyzzNmKyXKmzgQgI+Er4TP9E5fkVSJgASkSmQ82D/n9s7V5v21+01Vn93NA3EiIoYE8Kt3RqnkXnN8x153+OwA961blwAdoav1GmVLghnYlT0oOxNPAD4TvhM+NPHGhmigJAA+wZ9zV+fumYbsKyqbXd2nJkRsxAnohSIVnTzut5xdHpxaLyfWl30e6Qp2YOiLjiI08gTgO+FD4UvdKCt1KxOQBKAyG8dH5t7deXKmPncLZbTgH9LuWGup6CUBPNSmb8UnP9zjWraNGwBdt+VWgIe6giFYulVJ6seUAPtQ+FL41JhaEGm1JQHwuHvm3N15mVafP5v4YpbHokVcjAgUlnPw1x0867+SjT3WvwFQSURg+73UlRmaLANTXhqKHAH2pfCp8K32dZMa1QhIAlCNjs1jc+7pvDNTnz/YZjUpnjACxa5e58/6r8SiL0YJgMe64rcCwLQSGtmfDgLwrfCx6bA2GCslAfCAc/u9RnbuX7qfytTld/FAnIiIMQGjUOLr/uWf1+/GLKOn+mOA3cj2uq4fuha7ewlsvdZV5MWLAHwsfC18rhXNpUx1ApIAVOdT8+jc25e2LKOe17R8dtOahaVAogngefa9Xl73H6Rl6KQKXYNbkX81dWWdvVYUbMHYa7kiL14E4Gvhc+F746V59LSVBMBFnxx9z5L1VX3dKyqXXc2FGKmaEALmtWpd994a3FRneHg/gfcaDpcIXaHz8L3ut5itydi9JJEQcwLwufC98MGVTZEjtQhIAlCLUIXjR9+9/NP5bMPTKpsZU6GI7E4RgRKfovbtK2s9y+JH0iedwRis4wdENPaaAHwvfDB8sdey0yJPEgAHPY2sM5/LP0oZrc5BdamSMAJ4bG2hy/vr/oOYjO4lg29j8+qnzmAN5rGBIYr6R4B9MHwxfPLIRmS7NgFJAGozGlZi3h1da+ayDf/h4F8/7IBspJIArknj2rSfxqvupX6K90W23zqDOdj7orwIjReBjFYPnwzfHC/Fw9dWEgAbfXDs3StWoTrtafxohY1qUjTBBAoruolKPlz3H8oshgkA+a0zMzfZD+Uk71NLwPTJ7JtNH21SkH9WCEgCYIUSl8Edp5ls9llcd+JNWYQAlXr6SO/z+fn8Rb60UOyJH23oDN191Bzs0Qc+NiGiY0QAvhk+Gr46RmqHqqokABbwH33bh2O1+vrneICNt1BciqSAAH6sBteifTe1J37X/1cyCUB39AH6YmWb8ibVBOCj4avhs1MNwqLxkgDUANV+r5HNNTT+j7Jaa42icjgtBAyD+pb3EPGr7yZ3xfAbAINQgtCd+yCwvhi0S16jTYB9NXx2O/vuaCsavnaSANTog6XU/XeVy65ao5gcThGBQmcPBfapsyd+NwCuHAoB6Y6+QJ+sbFfepJwAEXw2fDfJX1UCkgBUwTPn7q6faLnc1lWKyKGUESj19lGptxCc1d0xvgQQoO7okxL3TXAdIy1FnQB8N3x41PUMUz9JACrQn3NX5+6ZuuwJFQ7L7hQSMApFKqzgU/9B2Y7H6frxRL2g9IfusCGg9tA36KOAmpNmIkpgqFrw4fDlQ/fJ+08ISALwCYuV7+be07VGJp+9gZRSK3fKm3QTKOmE754HCcHoXkYUYAD13DbW3bTBc8GVBZp9xH1VuYQcSRUBpRR8OXx6quy2aKwkACNAtbcbmtLUI5TR8iMOyWZKCeCBM73Lu4l0I1ACKqBr6H4aFbgN3EfoK/SZn3aJ7KgSKKMX+3L49Hb27WWOpnqXJAAjun/ptt134gaSEbtlM8UECsu7grvpbyjn7hhf/x+0IwQbzJsCuc8GVZBXIQCfDt8uJIYTkARgCI85d674nlaX22nILnmbcgK4u1wvlMKhkIAzABSSDegz9F04HSethkWgWrvw7fDx1cqk7ZgkAAM9jtNDWj7784FNeREChKfMYQ0NBe4BCK1xjxoO0Qb0HVaPLBExCSAAHw9fnwBTPDFBEoABjEu+2nWJyspP+w7gSP2Ljjv+OwO8438kcdxBX+obuTd+27ABtoSkOc4CoC9Dal6aDZRA7cbg4+Hra5dMRwlJALifcYeols8dzG9lEQLmj/sUcNNfmCy6PgqzdW/bDtkWsy/lmwHe9mmMpcHXw+fH2ATPVJcEACgV3aw0JSzAIuUr7h7vXd5FeA0VRecHoTbvaeMh24K+jESfegpVhI0kYHVbwdezz7daPsnlUh/0jrmrcxpnhFskuZPFNusECsu6yYjCp8XOBJ0BiIAt6FP0rfWRICWTTAA+H74/yTZasS31CUA2l/mFFVBSJvkECiu6SS/6/PO+VjCWCkQ9y6yUjEcZ2AKbQtYWfYs+DlkNad4XAvaFiu8nSnUCcOwdy7dT2Uyb/aEjNZJGoNQd8DP+qwHs+rDa0Xgei4hNpd4Coa/jCVG09pIAfD9igJcy4yYr1QmAls20x63DRF/vCeh9RSp0hXjH/wiTjBXJSwCiZBP6Gn0+ArtsxpiAU9XTHgPSnQDkMl91OnCkXjIImNeG+dR/lKxRId817weLqNmESwHoez9sFZnxIaClPAakNgE49u7OQ0nTcvEZqqKp5wR0nXqXReCO/6GGGQZR18dD9yTjPWyCbRGxxvxmAPc98RiIiEqihmMCLipyDDBjgQsRca6a2gRAU9qxce440d0dAUM3qCeCAcDAs/P1CNyI6A7v6Npsk2nb6CPh7eHgjzGAsRCeEtJy2ATSHAtSmQAcfduHY1U+s3HYA0/aD4cAPv31Le8yH/gTjgaVW43aqfLKmto/EknbSjphLGBM2LdIakSBgFsdEAsQE9zKiWP9VCYAWl3d4Yr/4thhorNLAnwauo8/+RvFkH7gp5b6ncm7AXClyRG1DWMBY4J4bKzUVd6khgCHAoWYkBqDhxiaygRAkfYVkr/0EeDL63140E9Ugz96ZEWATwBUiggrBfQXpG02TepPArqJeIzYrCrFQyXgTeMqpTEhpQmA2oTkL3UEcKoXD4OJrOF9fFmiGODXEbWcQViDAgLbYGNQ7dlsB2MDY8RmNSmeAAKK0hkT0pkAZNXqCRizYoINAnDskf9VuIC//mdomSJWGxjdFw3YRrsKY4xgrNitJ+XDIeBVqyqlMSF1CUD7vUZWaVqTVwNH5ESfAL7zHYsHvwT8ozlKyxawBtqDAdvoxDaMFYwZJ3WlTjwJICYgNsRTe+dapy4B+KjQuX2g1z2d943U9IBAsbOH8PhXD0T5LyLoH83RMr2E1X/LPmkhaBs/adnWO4wZjB1blaRwwAQ8bE4pMmODhyLjICp1CYDKaDvHoWNER/cEil29VOzpcy8oCAl6kahnaRAtfdKGlu0mrJ/s8f8dbISt/rfkugWMHYwh14JEQCwIpDE2pC4BYIMnx2I0ipKuCOAHX4rdva5kBFoZ18aNgG9B17QVhDVIQ2EjbA2yTRdtYQyVumOSRLqwM45VvdY5jbGBbfYaY7Tl6URy/T/aXeRauxJ/6scPvrgWFKSAMH4ASGWWE9Yg7URbYdiKdh2uGEsYUw6rS7WYEEhjbEhdAqCRIQlATCakEzX13gIV+Lq/k7qh1gnjU7GWWUpYgzY8DFtd2ogxhbHlUoxU94yA94LSGBtSlwAQqQaSv0QS0PsK1BexX/azBppP/YcRFDXtI8JqTUnvSpm2ss3eSQxEEsYWxlggjUkjIRBIX2xIXwKgSBKAEKaW303iru2+5d1+N+OLfKN7GVGp4Ivs6kLVh0RYKdg/ttW0OdhWPWkNYwxjzRNhIsQxAV8qpjA2pC8BkDMAvsydMIXi+mycv7etujgOhwFQy7xPWENoOzSbPbAVYw1jzgNRIiJSBOQMQKS6wydlcj7JFbEhECh298bzmv9QViF9N97QtH9jHapKYO9Dstkr+3BPAMaeV/JEjh0CvpVNXWxI3RkApYyAv2zt22BNveBiVw8Vu2L0Vb8KPWaE8nQ8Rfk6uhsrkaKg/8Kx2VsrMfaKPAa9lSrSwiKQxtighQU7rHb1Er0XVtvSrncE+j+BJeD72YUeUiH8QI6RayhcMGvKEqx4713PWJNk2sy2Wysd3VLF7r74n4GKLt6ymvm1M42xIXUJAJHxtl8DSOQGQyBR12DNO+KD4Ta0FZVv+Ghwe+j7wX2BvIZku9e24X4AjEmv5Yq8oAmkLzakLwFQ9EbQw0ra845A3/Ku+Dzb34rZKz6wUsr7Mtm6V1YKeuNp1wAAEABJREFUHfp+5c4A3oRluw+m4ZsBGJs+iBaRwwj4uJHC2JC+BKBkvOTjEBLRfhEwiPqWdRF+qc2vJkKRG9I3AIxs7qlBe4e+H9wXyGtItvtlG8YmxijxWPWrDZHrI4EUxobUJQAlpT3v4xAS0X4QMIz+4F8o+iE9PJl80ZG6w7knVWnZBwYNH/p+cF8gr7AdDAJpLJhGdB6j/UmAZAF+EPdTZhpjQ+oSgN6ehv/4OYhEtrcEDA7+vfjkX0xY8AcmfAI2dLwLfC1R/R2DjQ59P7gvkFfYDgaBNBZcIzqPVYxZjN3gWpWW3BJIY2xIXQKweE/VZZT0eD4yzu0Ij1l9OFB8mjKKpZhpbk1dY1lIX0jJ1pUuPfwrbw5qab7nfYPbQb6GxsBnIzFmzbHLCazPTaVIvH+mIiYgNvjXQjQlpy4BQDcYRV1uBASIKK8lnfqWdhIcaZTVdKObWvGum+rO6+YbR193KLfPeQuWa4bGwLKGzgti7GIME49l51KkZhAE0hoT0pkAkPHvIAaVtOGMABxnzzIO/kl2nMVeCuv6P2XqXh/VM+X2jSrkww7cBwAWPoiOgkj+ZEnmWE7oWawgGfvZlpHSmJDKBEAZxr1+DiaR7ZyA3lugXg7+pCf8JqrlIZ3+R9fk8s/gZdhabt+wAj5uhMnCR7NWiuaxjDGNsb1yn7yJFIG0xoRUJgBGkf4YqdEnypgE8Gx1/OQqJTz2m8auCDEByGT/buow9F+5fUOP+/k+TBZ+2jVUNo9pjG2M8aG75b1VAv6WS2tMSGUCcMHXmt7m63IJeI6sv5MiSOl4kloxAc/1t8xs2TuWi3paUGmUq9euoRF/5j4+NmJ3MJthsQjGumGtYIxjrA/bKRvhEijpfWZMCFeLUFpPZQIA0npJfwGvsoZLwLzTf2nCnu5XA6kR5nXvuubleP7/SBXNfXxs5P5Atou9ZDIJpLHwGzGfGshjHmM/fG3ioYGfWqY5FqQ2ATBKulwG8HNWWZGt6/0P+Ckm8Dv+VexXYZ7yzjc/W1G1ascqVvLmQKhMvDHBlhSdxzy+Jkg8B2xVlMKeE0hzLEhvAqCMiz0fSSLQMgHzTv+Ef82vIowQb3pTufw9lfSqdqxSHc/2h8jEMxtsCkr1HLDFyt/CRopjQWoTgAt3bn6XJ+DH/g4tkV6OgN6HO/27iHSj3OFk78OjbztD+gEgJqtT/lf8UnapdqxsBS93ggnYeCkzDrJ4DvTiSZc8J+KgbtJ0RAxALEiaXVbtSW0CAEB6UV/5PHRsy+o/gVJ3H/Ut7yYyUhj8gbeLg39YgS7X0LfoyO1HfwUQevFqHuMy/Db4BUzAJviWw2+R5wLmBOZG+MpETwM/NUp7DEh1AkBG6Qo/B5fIHk6g0NlNha6e4TtTthXqo2/rml+ridtKmZpCnBUIlY0zlT2thbmBOeKpUBFWnUDKY0CqE4ALdhlzA+l6ofoIkaNuCRg4zbm0i0o9glqFea071/CPmn1ppUxNIc4KhMrGmcqe18Ic6eW5gjnjufBYCvRRafb9ZgzwsYmoi051AoDO0Qul+/Aqqz8EjEKRepeuIKOYrjv9y9Is8NmPntGP4S9b1o+dudy1NcVaKVNTiMMCYANGDqsnpRrmijlneO4kxaYo2iG+nyj1CUBJL/44ioMzCTqVunsJNzgRnwFIgj2ubQjz63+ZnNFx6JQ/17LBLMNla5Xz7XiYjHwzyoFgnjOYO5hDDmonpoqfhojvlwSALtpl7P1GsbTEz4GWOtnmTU1dfL2/N3WmVzU4zNP/dWPeJaVq33mJMihb1RAfD4bJyEeznIoudPVS3/IuSu1Ns07B1agHnw/fX6NY4g+n/gwAepgHw/V4ldU9AaOk8yn/TtL75JT/KJrL3x21K6gdRrbhcatt2SlrVablciEysqxjwAUxl3rxzAyeWwE3HXJz/jUvPr+frSQAzEEn4xTJsBmEywXf7+8TR1WWovmo22J4Z0RUPv/7soqV2WmnbJnq7nYxI5OVOymJq43EGnMLcyxxxgVtEJ+hNH1+0O1GsD1JALhT8CAIvVB6jt/K4pBAsbOHT1V2cx5V+yyzwyZiXU2F+ck2m9ffa/voaqsAzbJcx2p5r8uFysprYzyUh98O6FveTZhrHoqNrCi/FIOvh8/3S36c5EoCMNBbul46auCtvNggYOgG9S3tomKP/LhiVWwr3qt62NeD9eNeum6ffUpW2zDLch2r5T0vFyYrz43xXiDmGuYc5p730pMvURdfv7KTJQEYQMEZ4V16ofj6wKa8WCBgFEr91/vlK37VaeEpd50fVi/j41GVa7rFrngndey2UbE8WIFZxQJyAD8mZN4XwHMwmTT8sQo+Hr7eH+nxkyoJwJA+48Fx3JBNeVuFQLGrl3qXdRLJr5lVoTRwKMzn3CtFysjOH9DE8otZh+taruBlQQR/MPNSZhJl8dzDHMRcTKJ5ftgkPn44VUkAhvC4cNcx1xnF0vtDdsnbkQTgdHDKvzu8G9pGqhT1bSPM6//1Y5dcfMyUN+wyMutwXbv1vCofKjOvjAhITpHnIp4emKRk3A908O3w8X7IjqtMSQBG9JzRVzptxC7ZHCCg9xaod0mnPNVvgIfVl1AfcZtvvt+qnqPKuak7Spi9HaEys6dqJEobfBkOcxNzNBIKRVAJ8e2jO0USgBFMFuzadKlRLIX4vNYRCkVgE3cfF5Z3U9+KbrnL325/4NG2Pcvs1vKufL7h546FuanruNGBimAGdgOb8lKbAOYp5ijmKt7XrhHVEt7rBZ8O3+695HhLlASgTP/xYDmvzO5U7mIWhJuNSn3yQz6OBkCYd7Rn64sdh0+51ZHeXMmsyzL4bThLmOzCsdiTVjFXMWcxdz0RmAAhzEJ8epl+lASgDJQFOzedY5T0rjKHUrULNxfBkVBJT5Xdnhob5vX/xnHPuLbFCxlOlQiTnVOdo1KP5yzmLuZwVFSyqofX5eDL4dO9lpsEeZIAVOhFo1DqqHAo+bvlRj/v+jjEZ9sbucbr3BrihQzHOoTIzrHOEasoNwgSpdqX1xiPkgBUADTu/oaT+JNv6m51x01EuJnIKMqz/CsMDcu7ja6PiYohDSEtQ/nGzMXk8s+UwbJcinFWndmZDJ3VlloDBDCXMacxtwd2RfjFY9VKeq/pyz0WmxRxkgBU6Mn2dqWXCsUrKxxO3G4DT/Rb3iU3+nnZs8ve9lKaPVkN49+9YNYU179yacpgWfYa97B0mAw9NCNsUbgpEDcI9vEcx1wPW5+g2ocPhy8Pqr24tSMJQJUeG39/4xFGqdRZpUgiDpV6C9S3ZIX8gp/HvalCDF5G/Zg/emWOl7Ls6hQmQ7u6xqG83lc05zrmfBT19VIn+G74cC9lJk2WJABVerQdZwF6i4dVKRLvQ3ytv29ZJxXk633e92NfF1F3SN8m5VP2xWzdGV4ZZcpimV7JsyUHDMHSViUpXI0AzgZgzmPuE/uAamXjfKzEvhs+PM42+K27JAA1CF+4a/PVnDX/t0ax2B0u9fSReV1QniXuT9+F+OmfGie8sfjQ7Ty7/mDKYpn+gLIgNUyWFtSLaxGd5z58AHxBNGzwTgv4bPhu7yQmU5IkABb6tVCgPThrTsZ34Uo64ZfECp098lAfC33vuEiYQau++RrHeleq6IfMSm2N3B8my5G6JGyb/RrBF8AnEPuGJJjHNunw2UmwxW8bJAGwQHjhbg0v672FX1soGukipe5e6lnaSfglsUgrGnflSgWiFR+EY0Uma2jFMWd53bgpk2V7LdeSPLAEU0uFpZATAvAJ8A3wEU7qe1HHKxnw1fDZXslLshxJACz27vj7G2cbxdIKi8UjVczgzB4PBSl09RJ/7I+UbolUBg+wMUI6YdTY8tLFx3zZ82cPmzJZdij9BZZgGkrjKWrUMAg+Ar4CPiOOlsNHw1fHUfcwdJYEwCJ13ExiFIqHWiweiWJ8Ksw8vde7ZAXxxIiETqlQYqlnl9/t46prusJ+JYs1/JRdS4UwmdbSLWHH4SvgM3BpAD4kGPO8aQU+Gr7aG2nJlyIJgI0+XrBL82+NvuJTNqqEVhQ39mAS4zU0JdLYsPlp9Z1wLM/m9c6GzHy/Gjdlcxt+ya8qdzkzBduqheSglwTgO+LkQ+Cb4aO9ZJB0WZIA2OzhvgJNNfToeiLOgAmn8JC9k27YtE6KuybQydf+Q7perRpb/nvlrCk9rm2oIACy0UaFw/7uBlOw9bcVkT6SAPsQ+BL4FPiWkYe92nYrBz4ZvtmtnLTVlwTAZo/j5hK9r3CZzWr+F9d1wlO+epd1yel+/2lXbiHEU9V6rumSyop5cySINipqGiLbijql5IB5WYB9C3wMsa+JmtnwyfDNUdMr6vpIAuCghy7YuekwzobfdFDV+yr8IR+/+NWzpFOe5Oc9XdsSjaVv2a7jSYVsfXHS+1Mu9URWFSFmG9xWlSK+HQqNrW8WxU+w3lck+Br4HGLf440F7qTAF8Mnu5OSztqSADjs92Khbwqfdio5rO5JNc56qWfpCsIvfsnd/Z4gdSXE6F5CqtDtSobTyqqp5ZH2duX7Vw/QBtpyqqebemALxm5kSF0PCBiG6XPge+CDPJDoWAR8MHyxYwEprygJgMMBcNGu4543+gqnOazuqppRKpkP8+lbzsGm5LvPd6VrmiqrEE9R69mmk4NiHWRbI20Kk/FIXVK/zb4HPggPEYJPcsrDTT29r+9U+GI3MtJcVxIAF72/YOemc/S+wr9diLBVFV/JKXR2Uy9O9xeLtupK4QAIhPXEusYJHy46cod7A7DQbMJsi9s0N4L+FxbjoO2MUXt4iBB8EnwTfFRQqsP3XrBz87lBtZfEdiQBcNurfYUdqaT3uhVTq/4nX8kp1Coqx8MggFP/3UvCaJmofvwvAm84jDZhJBiDNd7LGikCpZ4CfzhZQaWePht6OSwKnwvf67C6VOsnIAlAPwfH/xd8bdxHnInOdiygRkWjUCR8BQdfxSE9Infd1NA5lYfDOv2frSt1NmXag2ZutsltB92u2V5YrM3G5V9VAuyj4Kvgs+C7qpZ1cRA+F77XhQipygQkAWAIbhc8fELv7bvTrZyh9fG1G/xcp3ytbyiVCL8P69T0mLZ/4Pv5QZMx2+S2g27XbC8s1mbj8s8KAfgv+C74MLyvVMfJfvha+FwndaXOcAKSAAzn4XhrnNa4Ow/09x0LGKjIMgiTBhm0Xgj1SwYDGslLTQKlItEK111fs5lRBZQiyo85YdT+oHagbegQVHuD7YA1mA9uy2tkCcCHwZfBp8G3uVWUZbwPX+tWjtTvJyAJQD8H1//bp6hib8n4ApV0RxfpeWBL4HfdCyEJWPEuURgPh2xsebfj0G0fDslqMttmHQJvH6zBPPCGpUGnBMonAjalsW+Fj4WvtVlTilcgIAlABTBOdnfs1PCq3lPci2zcCiuB3wnpiNUJ6Zq00TjO9yf/1SIdmg4hMa/FQ7b0jyoAABAASURBVI5XJ+A4EWCfCt8KH1u9BTlqh4AkAHZoWSi7YLemW0q9xfNqFZXAX4tQTI4bBhF+qCZgdY1cfXHSu9rZATc7qjnoAF1GHfB7B5iDvd/tiHxfCCARsHNpAD4VvtUXZVIsVBIAHzr/gp0bT9J7C/eVEy2BvxyVGO9b8QFRMYCvPY1ApBpb721vn1IcsTvwTegAXQJvGMzBPvCGpUEvCVhJBOBL4VO9bFdk9ROQBKCfg+f/x93XsINRKPHF4X7Rel+Bepd28dpJGPT9e+V/7AksC+HZ/1rW0OrHHR4VdqYurFPg+oTBPnAjk9rgcLvgE3FGAD4SvnLwKHwofOngtrx6S0ASAG95rpTW3q50Q9e3LHX3LulZsoLwyExDnt63kk9S3hhhfCVtzKRHLj50mxejwtDUhXUKWp9Q2AdtZMrag4+Er4TPhO+ED4UvTRmGwMyVBMBH1At2anyz0NV7OZXkef0+Yg5NtNG9lFRfV7DtaxnSc2MODrbR2q2ZOrFutUt6VwLs0QfeSRRJQRGo2Q77TPhO+NCaZaWAYwKSADhGZ62iIv3v1kpKqdgRWPpm8Co3tz15yRHb/Sf4hqu3aOrEulUv5cPRMPrABzNE5GgC4jtHM/F6jyQAXhMdIa+UyeFmQDkFMIJLIjaXvBGsGUojPT/mkGAbtd6aqRvraL2GByWD7gMPVBYRlgjoA77TUmEp5IyAJADOuFmudcke4z/mwk/yKkuCCODUs+pdEaxFzW3PXXLElIeCbdR6a6ZurKP1Gu5Log/QF+4liYSIEXhywHdGTK1kqSMJQBD9qehvQTQjbQRIIPBTz4qoYdxRAVrorClTR9bVWW1ntQLvC2dqSq1+Apb+i8+0hMltIUkA3BK0UN8wDEkALHCKVZGgTz03t73WcdgOd0Wdkakj6xqonkH3RaDGpbMx8ZnB9LskAAFwLmp53AhoBNCUNBEAAZxyxqnnAJrqbwI/uNM49pj+jRj8h67QOSBV0Rfok4Cak2ZcEbBU2RjwmZYKSyHnBCQBcM7Ocs3Fe479gAv/l1dZkkAg6FPOzav8u+OwHW+KCzpTV9Y5UH2D7pNAjUtdY/8d8JmpMzxogyUBCIy4gbMAgbUmDflIIMhTztk63ciP3dNHa3wRberMuvsivJzQIPukXPuyzxIBa4XEV1rj5L6UJADuGVqSoAwl9wFYIhXtQjjVjFPOgWk5dvUrFh25/euBtedRQ6bOrLtH4mqKQZ+gb2oWlAKRJyC+MrgukgQgINalbOZObirgx8Zxi7J4SyDIU83145ZN/GCnQ701IDhppu5sQ2AtBtk3gRmVpIYs2dI14CstFZZC7ghIAuCOn+Xa+E6rIvqN5QpSMJoEgjrVrBSp5kkHx/k56NAdNhDbEkhnBtU3gRiTzkYU+0j4ynRaH7zVkgAEydxQFwfZnLTlLQGcYsapZm+llpdmjFnl8YVH7HBd+aPx2QsbYEsQGqNv0EdBtCVt2CdgqYb4SEuYvCokCYBXJC3IWTi95Un+NPRXC0WlSBQJBHWKuWH8kmLDal+NIgInOpm2sE1O6tquE1Qf2VZMKtQkoNRfTR9Zs6AU8IqAJABekbQoxzB0OQtgkVXkigVxijnf2KfGT9pi8aFbJeZ+EdgCm4ht871Pg+gj341IYgO1bRLfWJuR1yUkAfCaaA157/e24vvcsburu4ZZiT+MU8s4xeyrodm8boxZ42sLv7/9y762E4Jw2ATbiG30s3n0EfrKzzZEti8EXh/wjb4IF6HlCUgCUJ6Lb3uv20eVDEMt8q0BEewPAb9PLSuN1PjJRy46cod7/TEgfKmwDTYS2+qrNn73la/KJ1N4LavgE+Eba5WT494S0LwVJ9KsEChmsr/gcj28yhIXAn6eWlaKaMJaFy88YqdL44LDqZ6mjWwrwWanQmrV87OvarUtx50Q6BnwiU7qSh0XBCQBcAHPadWBx1z+1ml9qRcsAZxSxqllX1rN1pWMlvWO7Dhql2N8kR9BobAVNhPb7od66Cv0mR+yRaYTAjXr/HbAJ9YsKAW8JSAJgLc8LUsracZpXHg5r7JEnYBfp5Qbxn9cbFnnM4uO3DF1l4RgM2wnZuBL9/vVZ74om2qhywd8YaohhGW8JAAhkb90z7Y3+cTvqSE1L83aIeD5KWXu+XGTH3hv7U1W/flh26X2R6JgOxgQsyBiJuThn+d95qFuKRNVzVzu9VPhC6uVkWP+EZAEwD+2NSW/29uykEg9RvIXWQJG9xLCKWXPFGxqe0tvW/+bHcd+fZvr9tmszzO5MRUEBmABJsRsvDIDfYa+80qeyPGDgHqs3wf6IVtkWiEgCYAVSj6VwV2vhtIPY/E6r7JEkcDHHn1js6HlfdW2/n4dx31zjUuOmHJjFE0NUycwARswImbliS5e9Z0nyqRVSEW7dfg++MCKJeSA7wQkAfAdcfUGFk1t+xeRuoTkL4IEDFJugkgma9DYVZ9WbRvu0/GDvSYtPGJHufGzRi+DEViBGdgRGNaoU+lwf98ZlQ7L/lAJqEv6fV+oSqS+cUkAIjAECr10Cl8LezsCqogKQwmseJ+o2DN0j7X3dWO61IS1flVq+dSqHXP23AzPw7dWUUoNEgAzsANDsCRmOnjM8iv6Dn1ouYIU9JpAOXnwdfB55Y7JvmAJSAIQLO+yrS3ep2UpHziWV1miRMDOp3883KZ54mtG63qHdJz43aaFR+924KWHb/NelMyJoy5gCJZgCrbEjAmsrRpjpw+typRybgkcO+Dz3MqR+i4JSALgEqBX1RdOa71OKVrglTyR45KAXiKy8lUynKIet8b9pbYNtuiYN33tRUfudJnLlqV6BQJgC8ZgTczc0uUB9CH6soJM2e0ngdGy4ePg60YfkT1hEJAEIAzqFdpse6zleFJ0W4XDsjtIAsv4ikypWL3FMau8oNrW+2zHsd/Y9tLDt3+8emE56hUBsAZzsKcxk16oKhd9iL6sWkgOBkKAfZvp4wJpTBqxQkASACuUAirT3q70bkP/rjLoqYCalGYqEfj4tUpHiOrHddLETx3UMXfqhgsP3f7JygXliJ8EwL5j7rQNqW2D71P92M6KbVXry4qV5IBbAkPrw6fBt8HHDd0v78MlIAlAuPxHtX7FtInLi4a2J5Hx/qiDsiMYAsVeouXvjm6Lrz2r1rWveW8dGtdx+PZXjC4ge8Ig0HHElF+8t44aRy1rX0vcR6N0QF+iT0cdkB3BEDDeh0+DbwumPWnFKgFJAKySCrDcpd+c8IphqOmcBHAkCrBhaaqfAJ4iZxj97wf/Z/MGta1/7MIjd933un32KQ3ultdoEECfdBy163eMlnXnUYb7aqha6Ev06dB98t5nAoPijV6DfRl82uAeeY0OAUkAotMXwzRZNL31Af4w811JAoZhCWZj5J3j+cY+vW29XTsO3+GiYBSQVpwSWHTkjguM8et8zcg1FobJGNmnww7Khj8EjF74MPgyf+SLVLcEJAFwS9DH+gv3bLtRM2gPbqKTV1mCINC7gqjro09aahi/RB+71iaXHLLt3Z/slHdRJrDoyO3vzLSsswlx363UE32Kvl25Q974SYBld8J3wYfxe1kiSkASgIh2zKBaF09vu1tXtDNvf8yrLH4TGPpJsXniKw2rfGryJUds+5LfzYp8bwlcfOg2LxqNbWsS9+FKyUP7duVOeeMDgY/hs+C7fJAtIj0kIAmAhzD9EnXJ1NaHlKG2Z/nv8CqLjwSMjwfu/m8Y/3GhafKmPzvgs3L2xUfefopedOSUFehDPhNgJs8r+9bPRkX2O8pQ28NnCYroE5AEIPp9ZGq4cHrLk0plvkKKHjV3yD/PCRidH5Hq6ySDrx+r8ZO2XHzoVl2eNyICAyWAPkRfmn3ax33LfRyoAmlqjH2TYh8FX5Ums+NsqyQAMeq9hVPHv6xlW7YhUh0kf54TUEv4038mZ9DYyXss/P72L3vegAgMhYDZl9ynxH1r9nEoWiS9UdUB3wQflXRLk2SfJAAx682Lv6F6O6a1HGUYtDerjt8Q4BdZXBNgoLTkLcNomfwD3ETmWp4IiBQB9Cn6Fn1M6OtIaRdrZZYyzr3hk+CbYm1JCpWXBCCmnb5oeusfCkV9E1b/Kl5HfGmd98hijwAeFjN2lasXHb7z+fYqSum4EDD7lvu47EOe4mJEdPSEz7kKPgi+6BO15F2cCEgCEKfeGqHr4r0mvt0xrXUmf6LZmhT9c8Rh2bRBQOmlazqO2vUAG1WkaAwJoI/R1zFUPToqw9cYxtbwPfBB0VFMNLFLQBIAu8QiWL5jetvD3YYuXxV02Df8Uebudxs2n+GwulSLGQH0Nfo8ZmpHRd2P4Wvgc8opJPviRUASgHj1V0Vt8ZxtRbSwYgE5UInAa0Ut973r9lHyeN9KhBK2H32NPmezXuNVFhsE4GPga2xUkaIRJiAJQIQ7x65qfVoOj6qVr65ZB9ej6/q3Fu859gPrVaRkEgigz9H3bEsPr7JYI9A14GMqlJbdcSMgCUDceqyKvnBqfHgxr7JYI3DkJd+cKM9VsMYqcaUG+v7IxBnmn0GLB3yMfy2I5EAJSAIQKG7/GyuVCudyKx/yKks1Aop+3jGtVX7StxqjFBwzxwCPhRSY6tbEDwd8S0U5ciB+BCQBiF+fVdX40m+t+p5B6tiqhdJ+0KAHJ/a0HJN2DGJ/PwFzLPCY6N+S/+UIwKfAt5Q7JvviS0ASgPj2XUXNF01r+Q0p45aKBdJ94N96NrN7+z6qL90YxPpBAhgLGBO8/W9eZRlJgH2J6VNG7h+2LRtxJCAJQBx7zYLOyjAOIzLet1A0PUUUPaPl8rtcssd488dh0mO4WFqLAMYExgbxGKlVNl3Hjff7fUm6rE6LtZIAJLSnF06b+Jam0x5snnwrgCHw8pIy9J0v/sYYSYoYhiyjCWBsYIzwEfn5Z4bASxd8CHwJv6+6yMF4EpAEIJ79Zknri7/Z9k/DUN/lwmn/jvvrJV3bSRwZjwRZqhLAGMFY4UKv85rmpQTfAR+SZghJt10SgIT38KLpLbgX4BA2M61JwJsZrbTTpd+c8AozkEUI1CSAsYIxwwXf5DWNC3zFIQO+w4L9UiSuBCQBiGvP2dAbX3UyyLwcsMxGtfgXVfTPQlH/wkV7Tno+/saIBUESwJjB2CEeQ0G2G4G2lsFXwGdEQBdRwWcCkgD4DDgq4hdNa729lFHbsD4v85r4xSDj6s4xy7aXHytJfFf7ZiDGDsYQxpJvjURL8MvwEfAVdtSSsvElIAlAfPvOtuaX7tHyVOfYZZ/ma3s/5MpJPRugK1InLprWNuPKKevKY165o2VxTgBjCGMJY4ql6LwmcVkGnwDfAB+RRAPFpvIEJAEozyWxe02HNr3lJwUttz47Nfx4UDFBxi7VSU1dOK3lvATZJKZEgADGFMYWq7KU16QsRfgA+AK+3v8T+Ab7hkmNOBOQBCDOvedCdzzTm53a0VTSN+VV9yB4AAAHVUlEQVTs/0YXoqJQlc/Sql8b2dLGl0xr+VMUFBIdkkcAYwtjjAz1a7aOL5Xz/5gu5pznuQ8fAF8QUzNEbZcEJAFwCTDu1Tu+NfE5zv6/qemZDcgwjlUG3Ulk9MbIrif4U8y2HdNbDli0+6R3YqS3qBpDAhhjGGsYc6z+E7zGZDF6zbnNcxxzHXMec9+t8lI/3gQkAYh3/3mm/cXfHP9ix/S2ixZOb92tob7YSsqYroguI1KPERECq86vtZYedjJPcb0bDKL7uDC/8H8/FkUfEakjJj7esiV/ivkHyZ8QCJAAxhzGHvEYJHMskl9/Bk+i+zCnMLe4ESv3tWCu8pxVj3G9yzCXMacxtzHHMddZjixCgCQBkEEwisDPdlu1s2Nq200Lp7Ue0jGtZcuOaa2rTRzbUseeaC0+S/BlUmpPPg26u2YYu+hK24FH0VdKurYuO8QmdjKbc729Fk1r3Y4/aWzIDuhMMujVUY0422EoMv7G8r5f6FHrdUxruaS9XcHZOZMmtYSACwIYexiDGIsYk+bY5NNnLkR+UpXnDOYO5hDmEuYU5hbmGOYa5pzOcw9zkAy1O5lz0vgy5ijmagfP2Q6eu1zvEMxlzOlPhHv1TuTEnYAWdwNE/2AItE9RxUXTW1/vmN72cMfUllv5NOhtF09vu/uSqRP+1rFn64N4eAoc4lBt8EmDHdBp7IjWVcrYiR0Vrp12Di1j8f2z/CnmFMpq6y6c1rZDx/TWXyzepyVJN2NZxCDFokgAYxFjEmMTY9Qcq0TPOtC1E3MEcwVzBnMHc2ioHMwxzDXMOcw9zMGO6S239c/JtocX8RzFXB1aR94LgUoEJAGoREb2e0eAPdrCqW1/YUd1wMTelhYq6RsZGu1Gig4lUufyJ51riOgBXu/i9Qo+5dnOpztn49MNfwLaoGNa6yYdU9vO6dh9gldnErgZWYSA9wQwRs2xymMWYxdjGGMZY5pbu4JXjPEH+se8OhdzwJwLPCcwNzBHMFeI5wyXjfQiysWfgCQA8e/DWFnQvo/qw81Hi/ZsvbNjauvijmktJ/MnnX07prVuw+uuvB7EpzxP59Odv8Snm5GfgGJlrCibagIYuxjDGMsY0xjbvGKMb9M/5ltOxhww58K3Jj6HuZFqYGJ84AQkAQgcuTQoBISAEIg7AdE/CQQkAUhCL4oNQkAICAEhIARsEpAEwCYwKS4EhIAQSDsBsT8ZBCQBSEY/ihVCQAgIASEgBGwRkATAFi4pLASEgBBIOwGxPykEJAFISk+KHUJACAgBISAEbBCQBMAGLCkqBISAEEg7AbE/OQQkAUhOX4olQkAICAEhIAQsE5AEwDIqKSgEhIAQSDsBsT9JBCQBSFJvii1CQAgIASEgBCwSkATAIigpJgSEgBBIOwGxP1kEJAFIVn+KNUJACAgBISAELBGQBMASJikkBISAEEg7AbE/aQQkAUhaj4o9QkAICAEhIAQsEJAEwAIkKSIEhIAQSDsBsT95BCQBSF6fikVCQAgIASEgBGoSkASgJiIpIASEgBBIOwGxP4kEJAFIYq+KTUJACAgBISAEahCQBKAGIDksBISAEEg7AbE/mQQkAUhmv4pVQkAICAEhIASqEpAEoCoeOSgEhIAQSDsBsT+pBCQBSGrPil1CQAgIASEgBKoQkASgChw5JASEgBBIOwGxP7kEJAFIbt+KZUJACAgBISAEKhKQBKAiGjkgBISAEEg7AbE/yQQkAUhy74ptQkAICAEhIAQqEJAEoAIY2S0EhIAQSDsBsT/ZBCQBSHb/inVCQAgIASEgBMoSkASgLBbZKQSEgBBIOwGxP+kEJAFIeg+LfUJACAgBISAEyhCQBKAMFNklBISAEEg7AbE/+QQkAUh+H4uFQkAICAEhIARGEZAEYBQS2SEEhIAQSDsBsT8NBCQBSEMvi41CQAgIASEgBEYQkARgBBDZFAJCQAiknYDYnw4CkgCko5/FSiEgBISAEBACwwhIAjAMh2wIASEgBNJOQOxPCwFJANLS02KnEBACQkAICIEhBCQBGAJD3goBISAE0k5A7E8PAUkA0tPXYqkQEAJCQAgIgZUEJAFYiULeCAEhIATSTkDsTxMBSQDS1NtiqxAQAkJACAiBAQKSAAyAkBchIASEQNoJiP3pIiAJQLr6W6wVAkJACAgBIWASkATAxCD/hIAQEAJpJyD2p42AJABp63GxVwgIASEgBIQAE5AEgCHIIgSEgBBIOwGxP30EJAFIX5+LxUJACAgBISAESBIAGQRCQAgIgdQTEABpJCAJQBp7XWwWAkJACAiB1BOQBCD1Q0AACAEhkHYCYn86CUgCkM5+F6uFgBAQAkIg5QQkAUj5ABDzhYAQSDsBsT+tBCQBSGvPi91CQAgIASGQagKSAKS6+8V4ISAE0k5A7E8vAUkA0tv3YrkQEAJCQAikmIAkACnufDFdCAiBtBMQ+9NMQBKANPe+2C4EhIAQEAKpJSAJQGq7XgwXAkIg7QTE/nQT+H8AAAD//6eFpzEAAAAGSURBVAMAXYW+hhZmwFkAAAAASUVORK5CYII="/>
|
|
8
|
+
</defs>
|
|
9
|
+
</svg>
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useId, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { IconButton } from "./IconButton";
|
|
4
|
+
import Typo from "./Typo";
|
|
5
|
+
import Avatar from "./Avatar";
|
|
6
|
+
import AvatarGroup from "./AvatarGroup";
|
|
7
|
+
|
|
8
|
+
export type AutocompleteOption = {
|
|
9
|
+
label: string;
|
|
10
|
+
value: any;
|
|
11
|
+
image?: string;
|
|
12
|
+
group?: Array<{ name: string; image?: string }>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export interface AutocompleteProps
|
|
16
|
+
extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect"> {
|
|
17
|
+
/** Label text displayed above the input */
|
|
18
|
+
title: string;
|
|
19
|
+
/** Array of options to display */
|
|
20
|
+
options: AutocompleteOption[] | string[];
|
|
21
|
+
/** Currently selected option */
|
|
22
|
+
selectedOption: AutocompleteOption | string | null;
|
|
23
|
+
/** Callback when an option is selected */
|
|
24
|
+
onSelect: (option: AutocompleteOption | string | null) => void;
|
|
25
|
+
/** Placeholder text for the input */
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
/** Whether the component is disabled */
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
/** Maximum height of the options dropdown */
|
|
30
|
+
maxHeight?: number;
|
|
31
|
+
/** Optional id base (for accessibility hooks) */
|
|
32
|
+
id?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default function Autocomplete({
|
|
36
|
+
className = "",
|
|
37
|
+
title,
|
|
38
|
+
options,
|
|
39
|
+
selectedOption,
|
|
40
|
+
onSelect,
|
|
41
|
+
placeholder = "",
|
|
42
|
+
disabled = false,
|
|
43
|
+
maxHeight = 152,
|
|
44
|
+
id,
|
|
45
|
+
...props
|
|
46
|
+
}: AutocompleteProps) {
|
|
47
|
+
const inputId = id ?? useId();
|
|
48
|
+
const listboxId = `${inputId}-listbox`;
|
|
49
|
+
const [searchQuery, setSearchQuery] = useState("");
|
|
50
|
+
const [open, setOpen] = useState(false);
|
|
51
|
+
const [activeIndex, setActiveIndex] = useState<number>(-1);
|
|
52
|
+
const rootRef = useRef<HTMLDivElement>(null);
|
|
53
|
+
const listRef = useRef<HTMLUListElement>(null);
|
|
54
|
+
|
|
55
|
+
// Normalize options
|
|
56
|
+
const normalizedOptions: AutocompleteOption[] = useMemo(() => {
|
|
57
|
+
if (Array.isArray(options) && typeof options[0] === "string") {
|
|
58
|
+
return (options as string[]).map((str) => ({ label: str, value: str }));
|
|
59
|
+
}
|
|
60
|
+
return options as AutocompleteOption[];
|
|
61
|
+
}, [options]);
|
|
62
|
+
|
|
63
|
+
// Filter options
|
|
64
|
+
const filtered = useMemo(() => {
|
|
65
|
+
const q = searchQuery.trim().toLowerCase();
|
|
66
|
+
if (!q) return normalizedOptions;
|
|
67
|
+
return normalizedOptions.filter((o) => o.label.toLowerCase().includes(q));
|
|
68
|
+
}, [normalizedOptions, searchQuery]);
|
|
69
|
+
|
|
70
|
+
const anyOptionHasImage = useMemo(
|
|
71
|
+
() => normalizedOptions.some((o) => !!o.image),
|
|
72
|
+
[normalizedOptions]
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const displayValue =
|
|
76
|
+
selectedOption != null
|
|
77
|
+
? typeof selectedOption === "string"
|
|
78
|
+
? selectedOption
|
|
79
|
+
: selectedOption.label
|
|
80
|
+
: searchQuery;
|
|
81
|
+
|
|
82
|
+
function openList() {
|
|
83
|
+
if (disabled) return;
|
|
84
|
+
setOpen(true);
|
|
85
|
+
}
|
|
86
|
+
function closeList() {
|
|
87
|
+
setOpen(false);
|
|
88
|
+
setActiveIndex(-1);
|
|
89
|
+
}
|
|
90
|
+
function handleSelect(option: AutocompleteOption) {
|
|
91
|
+
onSelect(option);
|
|
92
|
+
setSearchQuery("");
|
|
93
|
+
closeList();
|
|
94
|
+
}
|
|
95
|
+
function handleClear() {
|
|
96
|
+
onSelect(null);
|
|
97
|
+
setSearchQuery("");
|
|
98
|
+
closeList();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function onKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {
|
|
102
|
+
if (!open && (e.key === "ArrowDown" || e.key === "ArrowUp")) {
|
|
103
|
+
setOpen(true);
|
|
104
|
+
setActiveIndex(0);
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!open) return;
|
|
109
|
+
if (e.key === "ArrowDown") {
|
|
110
|
+
e.preventDefault();
|
|
111
|
+
setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));
|
|
112
|
+
scrollActiveIntoView();
|
|
113
|
+
} else if (e.key === "ArrowUp") {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
setActiveIndex((i) => Math.max(i - 1, 0));
|
|
116
|
+
scrollActiveIntoView();
|
|
117
|
+
} else if (e.key === "Enter") {
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
const item = filtered[activeIndex];
|
|
120
|
+
if (item) handleSelect(item);
|
|
121
|
+
} else if (e.key === "Escape") {
|
|
122
|
+
e.preventDefault();
|
|
123
|
+
closeList();
|
|
124
|
+
} else if (e.key === "Home") {
|
|
125
|
+
e.preventDefault();
|
|
126
|
+
setActiveIndex(0);
|
|
127
|
+
scrollActiveIntoView();
|
|
128
|
+
} else if (e.key === "End") {
|
|
129
|
+
e.preventDefault();
|
|
130
|
+
setActiveIndex(filtered.length - 1);
|
|
131
|
+
scrollActiveIntoView();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function scrollActiveIntoView() {
|
|
136
|
+
const list = listRef.current;
|
|
137
|
+
const idx = activeIndex;
|
|
138
|
+
if (!list || idx < 0) return;
|
|
139
|
+
const el = list.children[idx] as HTMLElement | undefined;
|
|
140
|
+
el?.scrollIntoView({ block: "nearest" });
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return (
|
|
144
|
+
<div
|
|
145
|
+
ref={rootRef}
|
|
146
|
+
className={["relative w-full", className].join(" ")}
|
|
147
|
+
{...props}
|
|
148
|
+
>
|
|
149
|
+
<fieldset
|
|
150
|
+
className={[
|
|
151
|
+
"w-full min-w-0 rounded-full border bg-[var(--surface)] transition-colors h-16",
|
|
152
|
+
"border-[var(--border)] focus-within:border-[var(--color-brand)]",
|
|
153
|
+
disabled ? "opacity-60 cursor-not-allowed" : ""
|
|
154
|
+
].join(" ")}
|
|
155
|
+
>
|
|
156
|
+
<legend className="ml-4 px-1 text-sm leading-none relative">
|
|
157
|
+
<Typo
|
|
158
|
+
variant="label-lg"
|
|
159
|
+
className={[
|
|
160
|
+
"font-normal select-none",
|
|
161
|
+
open ? "text-[var(--color-brand)]" : "text-[var(--muted-fg)]",
|
|
162
|
+
disabled ? "text-[var(--muted-fg)]" : ""
|
|
163
|
+
].join(" ")}
|
|
164
|
+
>
|
|
165
|
+
{title}
|
|
166
|
+
</Typo>
|
|
167
|
+
</legend>
|
|
168
|
+
<div className="relative flex pl-5 pr-3 pb-1 h-full">
|
|
169
|
+
<div className="flex w-full">
|
|
170
|
+
{/* Input */}
|
|
171
|
+
<input
|
|
172
|
+
id={inputId}
|
|
173
|
+
role="combobox"
|
|
174
|
+
aria-expanded={open}
|
|
175
|
+
aria-controls={listboxId}
|
|
176
|
+
aria-autocomplete="list"
|
|
177
|
+
aria-disabled={disabled || undefined}
|
|
178
|
+
type="text"
|
|
179
|
+
value={displayValue}
|
|
180
|
+
onChange={(e) => {
|
|
181
|
+
setSearchQuery(e.target.value);
|
|
182
|
+
if (!open) setOpen(true);
|
|
183
|
+
setActiveIndex(0);
|
|
184
|
+
}}
|
|
185
|
+
onFocus={openList}
|
|
186
|
+
onKeyDown={onKeyDown}
|
|
187
|
+
onBlur={() => setTimeout(closeList, 150)}
|
|
188
|
+
disabled={disabled}
|
|
189
|
+
className={[
|
|
190
|
+
"w-full rounded-full border-0 outline-none bg-transparent",
|
|
191
|
+
"text-sm text-[var(--fg)] placeholder:text-[var(--muted-fg)]",
|
|
192
|
+
"pr-2"
|
|
193
|
+
].join(" ")}
|
|
194
|
+
placeholder={placeholder}
|
|
195
|
+
onClick={() => !disabled && setOpen(true)}
|
|
196
|
+
/>
|
|
197
|
+
|
|
198
|
+
{/* Action button (clear or expand) */}
|
|
199
|
+
<IconButton
|
|
200
|
+
icon={selectedOption && !open ? "close" : "expand_more"}
|
|
201
|
+
onClick={
|
|
202
|
+
selectedOption && !open ? handleClear : () => setOpen((s) => !s)
|
|
203
|
+
}
|
|
204
|
+
disabled={disabled}
|
|
205
|
+
aria-label={selectedOption && !open ? "Clear" : open ? "Collapse" : "Expand"}
|
|
206
|
+
iconClassName={[
|
|
207
|
+
"transition-transform duration-300 text-[var(--muted-fg)]",
|
|
208
|
+
open ? "rotate-180 text-[var(--color-brand)]" : ""
|
|
209
|
+
].join(" ")}
|
|
210
|
+
/>
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
</fieldset>
|
|
214
|
+
|
|
215
|
+
{/* Options */}
|
|
216
|
+
{open && !disabled && (
|
|
217
|
+
<div
|
|
218
|
+
className={[
|
|
219
|
+
"absolute z-20 mt-2 w-full overflow-y-auto rounded-3xl border border-[var(--border)]",
|
|
220
|
+
"bg-[var(--surface)] text-[var(--fg)] shadow-md"
|
|
221
|
+
].join(" ")}
|
|
222
|
+
style={{ maxHeight }}
|
|
223
|
+
>
|
|
224
|
+
{filtered.length > 0 ? (
|
|
225
|
+
<ul id={listboxId} role="listbox" ref={listRef}>
|
|
226
|
+
{filtered.map((option, index) => {
|
|
227
|
+
const active = index === activeIndex;
|
|
228
|
+
const selected =
|
|
229
|
+
selectedOption != null &&
|
|
230
|
+
(typeof selectedOption === "string"
|
|
231
|
+
? selectedOption === option.label
|
|
232
|
+
: selectedOption.label === option.label);
|
|
233
|
+
return (
|
|
234
|
+
<li
|
|
235
|
+
key={`${option.label}-${index}`}
|
|
236
|
+
role="option"
|
|
237
|
+
aria-selected={selected}
|
|
238
|
+
className={[
|
|
239
|
+
"flex items-center justify-between px-4 py-2 text-sm cursor-pointer transition-colors",
|
|
240
|
+
active ? "bg-[var(--muted)]" : "",
|
|
241
|
+
index !== filtered.length - 1
|
|
242
|
+
? "border-b border-[var(--border)]"
|
|
243
|
+
: ""
|
|
244
|
+
].join(" ")}
|
|
245
|
+
onMouseEnter={() => setActiveIndex(index)}
|
|
246
|
+
onMouseDown={(e) => e.preventDefault()} /* keep input focus */
|
|
247
|
+
onClick={() => handleSelect(option)}
|
|
248
|
+
>
|
|
249
|
+
<div className="flex items-center gap-2">
|
|
250
|
+
{anyOptionHasImage && (
|
|
251
|
+
<Avatar name={option.label} src={option.image || undefined} />
|
|
252
|
+
)}
|
|
253
|
+
<Typo variant="label-lg" className="font-normal text-[var(--fg)]">
|
|
254
|
+
{option.label}
|
|
255
|
+
</Typo>
|
|
256
|
+
</div>
|
|
257
|
+
{Array.isArray(option.group) && option.group.length > 0 && (
|
|
258
|
+
<AvatarGroup>
|
|
259
|
+
{option.group.map((member, i) => (
|
|
260
|
+
<Avatar key={i} name={member.name} src={member.image || undefined} />
|
|
261
|
+
))}
|
|
262
|
+
</AvatarGroup>
|
|
263
|
+
)}
|
|
264
|
+
</li>
|
|
265
|
+
);
|
|
266
|
+
})}
|
|
267
|
+
</ul>
|
|
268
|
+
) : (
|
|
269
|
+
<div className="px-4 py-3">
|
|
270
|
+
<Typo variant="body-sm" className="text-[var(--muted-fg)]">
|
|
271
|
+
No results found
|
|
272
|
+
</Typo>
|
|
273
|
+
</div>
|
|
274
|
+
)}
|
|
275
|
+
</div>
|
|
276
|
+
)}
|
|
277
|
+
</div>
|
|
278
|
+
);
|
|
279
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useState, useMemo } from "react";
|
|
3
|
+
import { tv, type VariantProps } from "tailwind-variants";
|
|
4
|
+
import Typo from "./Typo";
|
|
5
|
+
|
|
6
|
+
export type AvatarProps = {
|
|
7
|
+
/** Person's full name (used for initials and alt text) */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Image URL */
|
|
10
|
+
src?: string;
|
|
11
|
+
/** Optional custom background color (CSS color). If omitted, token bg or a derived pastel is used. */
|
|
12
|
+
color?: string;
|
|
13
|
+
/** Accessible alt text; defaults to the person's name */
|
|
14
|
+
alt?: string;
|
|
15
|
+
} & VariantProps<typeof avatarStyles> &
|
|
16
|
+
Omit<React.HTMLAttributes<HTMLDivElement>, "children">;
|
|
17
|
+
|
|
18
|
+
const avatarStyles = tv({
|
|
19
|
+
base:
|
|
20
|
+
"relative box-border flex items-center justify-center overflow-hidden rounded-full " +
|
|
21
|
+
"border border-[var(--border)] bg-[var(--muted)] text-[var(--fg)] select-none",
|
|
22
|
+
variants: {
|
|
23
|
+
size: {
|
|
24
|
+
sm: "w-[28px] h-[28px]",
|
|
25
|
+
md: "w-[60px] h-[60px]"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
defaultVariants: { size: "sm" }
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
function getInitials(name: string) {
|
|
32
|
+
if (!name) return "…";
|
|
33
|
+
const words = name.trim().split(/\s+/);
|
|
34
|
+
if (words.length === 1) return (words[0][0] ?? "").toUpperCase();
|
|
35
|
+
return ((words[0][0] ?? "") + (words[words.length - 1][0] ?? "")).toUpperCase();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default function Avatar({
|
|
39
|
+
name,
|
|
40
|
+
src,
|
|
41
|
+
color,
|
|
42
|
+
size,
|
|
43
|
+
alt,
|
|
44
|
+
className,
|
|
45
|
+
style,
|
|
46
|
+
...props
|
|
47
|
+
}: AvatarProps) {
|
|
48
|
+
const [imgError, setImgError] = useState(false);
|
|
49
|
+
const initials = useMemo(() => getInitials(name), [name]);
|
|
50
|
+
const computedStyle = useMemo<React.CSSProperties>(() => {
|
|
51
|
+
const s: React.CSSProperties = { ...style };
|
|
52
|
+
if (color) s.backgroundColor = color;
|
|
53
|
+
return s;
|
|
54
|
+
}, [color, style]);
|
|
55
|
+
|
|
56
|
+
const textVariant = size === "sm" ? ("label-md" as const) : ("headline-md" as const);
|
|
57
|
+
|
|
58
|
+
const showImage = !!src && !imgError;
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<div
|
|
62
|
+
className={avatarStyles({ size, className })}
|
|
63
|
+
aria-label={alt ?? name}
|
|
64
|
+
role="img"
|
|
65
|
+
{...props}
|
|
66
|
+
style={computedStyle}
|
|
67
|
+
>
|
|
68
|
+
{showImage ? (
|
|
69
|
+
<img
|
|
70
|
+
src={src}
|
|
71
|
+
alt={alt ?? name}
|
|
72
|
+
className="absolute inset-0 h-full w-full object-cover rounded-full"
|
|
73
|
+
onError={() => setImgError(true)}
|
|
74
|
+
draggable={false}
|
|
75
|
+
/>
|
|
76
|
+
) : (
|
|
77
|
+
<Typo variant={textVariant} bold="medium" className="pointer-events-none">
|
|
78
|
+
{initials}
|
|
79
|
+
</Typo>
|
|
80
|
+
)}
|
|
81
|
+
</div>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
export type AvatarGroupProps = {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
/** Maximum avatars to display before showing a +N counter */
|
|
7
|
+
max?: number;
|
|
8
|
+
/** Overlap offset in pixels (default 8px) */
|
|
9
|
+
overlapPx?: number;
|
|
10
|
+
/** Adds a separating ring around each avatar to improve contrast */
|
|
11
|
+
withRings?: boolean;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default function AvatarGroup({
|
|
15
|
+
children,
|
|
16
|
+
className = "",
|
|
17
|
+
max = 5,
|
|
18
|
+
overlapPx = 8,
|
|
19
|
+
withRings = true
|
|
20
|
+
}: AvatarGroupProps) {
|
|
21
|
+
const avatars = React.Children.toArray(children);
|
|
22
|
+
const displayAvatars = typeof max === "number" ? avatars.slice(0, max) : avatars;
|
|
23
|
+
const extraCount = typeof max === "number" && avatars.length > max ? avatars.length - max : 0;
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<div className={["flex items-center", className].filter(Boolean).join(" ")}>
|
|
27
|
+
{displayAvatars.map((child, i) => (
|
|
28
|
+
<div
|
|
29
|
+
key={i}
|
|
30
|
+
className={[
|
|
31
|
+
"relative",
|
|
32
|
+
i > 0 ? "" : "ml-0"
|
|
33
|
+
].join(" ")}
|
|
34
|
+
style={{
|
|
35
|
+
marginLeft: i === 0 ? 0 : -overlapPx,
|
|
36
|
+
zIndex: 100 + i
|
|
37
|
+
}}
|
|
38
|
+
>
|
|
39
|
+
<div className={withRings ? "ring-2 ring-[var(--surface)] rounded-full" : ""}>{child}</div>
|
|
40
|
+
</div>
|
|
41
|
+
))}
|
|
42
|
+
{extraCount > 0 && (
|
|
43
|
+
<span
|
|
44
|
+
className="ml-2 inline-flex h-7 w-7 items-center justify-center rounded-full border border-[var(--border)] bg-[var(--muted)] text-[var(--fg)] text-xs"
|
|
45
|
+
aria-label={`${extraCount} more`}
|
|
46
|
+
title={`${extraCount} more`}
|
|
47
|
+
>
|
|
48
|
+
+{extraCount}
|
|
49
|
+
</span>
|
|
50
|
+
)}
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { tv, type VariantProps } from "tailwind-variants";
|
|
3
|
+
import Typo from "./Typo";
|
|
4
|
+
|
|
5
|
+
const buttonStyles = tv({
|
|
6
|
+
base:
|
|
7
|
+
"cursor-pointer inline-flex items-center justify-center gap-2 rounded-[var(--radius-2xl)] px-[18px] h-12 transition-colors " +
|
|
8
|
+
"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-cyan-500/40 " +
|
|
9
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
primary: "bg-cyan-500 text-white hover:bg-cyan-400 active:bg-cyan-600 disabled:bg-neutral-400",
|
|
13
|
+
secondary: "border border-cyan-500 text-cyan-500 bg-transparent hover:bg-cyan-50 active:bg-cyan-100 disabled:border-neutral-400 disabled:text-neutral-400",
|
|
14
|
+
ghost: "bg-transparent text-cyan-500 hover:bg-cyan-50 active:bg-cyan-100 disabled:text-neutral-400"
|
|
15
|
+
},
|
|
16
|
+
size: {
|
|
17
|
+
sm: "h-9 px-3",
|
|
18
|
+
md: "h-12 px-[18px]",
|
|
19
|
+
lg: "h-14 px-6"
|
|
20
|
+
},
|
|
21
|
+
fullWidth: {
|
|
22
|
+
true: "w-full"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
variant: "primary",
|
|
27
|
+
size: "md"
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
type ButtonVariants = VariantProps<typeof buttonStyles>;
|
|
32
|
+
export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & ButtonVariants & {
|
|
33
|
+
/** Icon component to display instead of text */
|
|
34
|
+
icon?: React.ReactNode;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
38
|
+
({ variant, size, fullWidth, className, children, icon, ...props }, ref) => {
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<button
|
|
42
|
+
ref={ref}
|
|
43
|
+
className={buttonStyles({ variant, size, fullWidth, className })}
|
|
44
|
+
{...props}
|
|
45
|
+
>
|
|
46
|
+
{children}
|
|
47
|
+
</button>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
Button.displayName = "Button";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
|
|
3
|
+
interface AnimatedBgCircleProps {
|
|
4
|
+
colors: string[];
|
|
5
|
+
delay?: number;
|
|
6
|
+
stretch?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const AnimatedBgCircle = ({ colors, delay = 0 }: AnimatedBgCircleProps) => {
|
|
10
|
+
const uniqueId = useMemo(() => Math.random().toString(36).substr(2, 9), []);
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<svg viewBox="0 0 64 64" fill="none" className="h-full transition-all duration-500 ease-in-out w-full">
|
|
14
|
+
<style>
|
|
15
|
+
{`
|
|
16
|
+
@keyframes colorCycle-${uniqueId} {
|
|
17
|
+
0% { fill: ${colors[0]}; }
|
|
18
|
+
25% { fill: ${colors[1]}; }
|
|
19
|
+
50% { fill: ${colors[2]}; }
|
|
20
|
+
75% { fill: ${colors[3]}; }
|
|
21
|
+
100% { fill: ${colors[0]}; }
|
|
22
|
+
}
|
|
23
|
+
@keyframes fadeIn-${uniqueId} {
|
|
24
|
+
0% { opacity: 0; }
|
|
25
|
+
100% { opacity: 1; }
|
|
26
|
+
}
|
|
27
|
+
.animated-circle-${uniqueId} {
|
|
28
|
+
animation:
|
|
29
|
+
fadeIn-${uniqueId} 1.5s ease-in-out 1.5s forwards,
|
|
30
|
+
colorCycle-${uniqueId} 4s infinite linear ${delay}s;
|
|
31
|
+
opacity: 0;
|
|
32
|
+
transition: all 0.5s ease-in-out;
|
|
33
|
+
}
|
|
34
|
+
`}
|
|
35
|
+
</style>
|
|
36
|
+
<g style={{ mixBlendMode: "overlay" }} filter="url(#filter0_f_241_319)">
|
|
37
|
+
<ellipse cx="32" rx="20" cy="32" ry="20" className={`animated-circle-${uniqueId}`} />
|
|
38
|
+
</g>
|
|
39
|
+
<defs>
|
|
40
|
+
<filter id="filter0_f_241_319" filterUnits="userSpaceOnUse" colorInterpolationFilters="sRGB">
|
|
41
|
+
<feFlood floodOpacity="0" result="BackgroundImageFix" />
|
|
42
|
+
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
|
43
|
+
<feGaussianBlur stdDeviation="4" result="effect1_foregroundBlur_241_319" />
|
|
44
|
+
</filter>
|
|
45
|
+
</defs>
|
|
46
|
+
</svg>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default AnimatedBgCircle;
|
|
51
|
+
|