Bloom index
README.bloom:
contrib/bloom provides signature file based index.
Authors: Teodor Sigaev (teodor@sigaev.ru) and Oleg Bartunov (oleg@sai.msu.su)
Notes: This is a *working* prototype, which can be finishing up to production
in case of interest. Particularly, it misses wal support, because of
common limitation of contrib modules.
This index is useful if table has many attributes and queries can include
their arbitary combinations. Traditional Btree index is faster than
bloom index , but it'd require too many indexes to support all possible
queries, while one need only one bloom index. Bloom index supports only
equality comparison. Since it's a signature file, not a tree, it always
should be readed fully, but sequentially, so search performance is
constant and doesn't depends on a query.
Implementation of Bloom filter (http://en.wikipedia.org/wiki/Bloom_filter)
allows fast exclusion of non-candidate tuples.
Since signature is a lossy representation of all indexed attributes,
search results should be rechecked using heap information.
User can specify signature length (in uint16, default is 5) and the number of
bits, which can be setted, per attribute ( 1 < colN < 2048 ).
For example:
CREATE INDEX bloomidx ON tbloom(i1,i2,i3)
WITH (length=5, col1=2, col2=2, col3=4);
Here, we create bloom index with signature length 80 bits and attributes
i1, i2 mapped to 2 bits, attribute i3 - to 4 bits.
Todo:
* add more opclasses
* better configurability
* add support of arrays with operations contains and intersection
Example of usage:
select
(generate_series(1,1000)*random())::int as i1,
(generate_series(1,1000)*random())::int as i2,
(generate_series(1,1000)*random())::int as i3,
(generate_series(1,1000)*random())::int as i4,
(generate_series(1,1000)*random())::int as i5,
(generate_series(1,1000)*random())::int as i6,
(generate_series(1,1000)*random())::int as i7,
(generate_series(1,1000)*random())::int as i8,
(generate_series(1,1000)*random())::int as i9,
(generate_series(1,1000)*random())::int as i10,
(generate_series(1,1000)*random())::int as i11,
(generate_series(1,1000)*random())::int as i12,
(generate_series(1,1000)*random())::int as i13
into tbloom;
create index bloomidx on tbloom using
bloom(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);
select pg_relation_size('bloomidx');
create index btree_idx on tbloom(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);
select pg_relation_size('btree_idx');
=# explain analyze select * from tbloom where i2=20 and i10=15;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on tbloom (cost=1.50..5.52 rows=1 width=52) (actual
time=0.057..0.057 rows=0 loops=1)
Recheck Cond: ((i2 = 20) AND (i10 = 15))
-> Bitmap Index Scan on bloomidx (cost=0.00..1.50 rows=1 width=0) (actual
time=0.041..0.041 rows=9 loops=1)
Index Cond: ((i2 = 20) AND (i10 = 15))
Total runtime: 0.081 ms
(5 rows)
Seqscan is slow.
=# set enable_bitmapscan = off;
=# set enable_indexscan = off;
=# explain analyze select * from tbloom where i2=20 and i10=15;
QUERY PLAN
--------------------------------------------------------------------------------------------------
Seq Scan on tbloom (cost=0.00..25.00 rows=1 width=52) (actual
time=0.162..0.162 rows=0 loops=1)
Filter: ((i2 = 20) AND (i10 = 15))
Total runtime: 0.181 ms
(3 rows)
Btree index will be not used.
=# drop index bloomidx;
=# create index btree_idx on tbloom(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12);
=# explain analyze select * from tbloom where i2=20 and i10=15;
QUERY PLAN
--------------------------------------------------------------------------------------------------
Seq Scan on tbloom (cost=0.00..25.00 rows=1 width=52) (actual
time=0.210..0.210 rows=0 loops=1)
Filter: ((i2 = 20) AND (i10 = 15))
Total runtime: 0.250 ms
(3 rows)
--
Teodor Sigaev E-mail: teodor@sigaev.ru
WWW: http://www.sigaev.ru/
Attachments:
bloom-0.2.tar.gzapplication/x-tar; name=bloom-0.2.tar.gzDownload
� ��MK ��{wG��;����s�&eJ�����jY^G�h[��:���������1Ip��f��g���� ���r�Ym./����;"_N�G����)��m�"����[����p��U��P��tU��*��X�9��G��Q����������>��������d�_N�g�����q�4��/�W��J���kkW���)}�OE�!���?�����x���`\|t2��_��g��|4.?���g��^��GG������|t8}����`���WG�����hr���l>=����������q�W�s�:�Og������#"�|����GO��pw������=����������l>����K;��|4/g�������hz����x>�q>������>�������`0�?;=��w��iz�������_���������;��O�����������F��/G��m=������S|3��8;9o�g';�����������l<����tzX�����w
���)fw'��w�Yq�7�^����7^��|_�)��}}c{��L�ckL�xr0�1I�N���M�[;���������o~�������tW�jz��n}�zt����c�t��l|�*�����8�j�����Yq�N��8�59����xro������K����vR�z�m�����l�]i��y���{��t��5x4:�N�����^~�����o����%�fc}q�)M�4�������}������/v�=�����[�������������g�����4>(N�K7>K�^1�����ps�xp<�_��;E� ���������5��g�g�k��q��[i�<�1�x\O�����8��e����"
��������_��=>��q���f����/�g��x�yA�
������x��q�������m�<��t���~��[�g�}��������+�>�k,�W�y�T������"�����t���'H�s�z�q�Y��z`G>8~5-��[���\~qc��~q2*.������q���W���I��s:>d�f�/(��X1���Qo���Hr���������/m���"��_��� ��������������m���{���� ��P�+W�}<:�k����M���$����b�f\��\���#_�N���i_��{�����]���r��U^���w��B?��������_��&e�vZ`S���zo-��V��
I/|�0���x����4��B�����Y6���#n+!(��8I����(����w>|r�������_������G?���������p��������y�f`���p�e���x����-���
Y,��"�M��'����[r8��� �eq�p:���q2��p�@���>�y��:�������O�����S�������"��P?k�e;-6��YZ��W��u�/p�������2��/�R�<��{����g�*NgI�g����HV��
t��\���,��������w�d�b|w<�G����uw�7x�?N�,)�U������x����i�/�����g{I�����{�}���&�\w��_��K��F����di��t�8-N����QKm�kDn��<)��L�l�{o���]_�^j��^��>�������l�1�+O��;-�9���|�~;K���F?M���$-��M��������x��U:��'�,f|������w�otu����p�p=�=���������w�����c�����T~��'L^���1�2~�����b���\������%�fe4�a����
��F?���*X�����W���K�|��6��0�B�X�w���d�����D��W����wc.
���do��V}������O�<�{�d����w��|���O����y^S�������KG��&7IC�m�������z��/�w��/����$�%��K�����W�5���v���/�wgh/���M2�}������O!�=�9���se����u�����i1�a����OV'=��ldq������Oy.��t����|��"�������bIg���$�o�QR`�'��U�js���4�k��
�[\;������ �[������O/- ���$��wx�_B��G�6DGkq�O��u�6t�|n����E1
�����D/��������
����j�c���+��s�B���MD�n��U1(�,�8�+����m��!��T^�f^��$ef3�[<��k�{��M��i��-��/�<y�%��b��u����Z����|�{\��+[_�����k-�WW����/��B�c�u��~�7�����x���;e�7�s7~������}��� ����o��>{ro0p+_=|��������>>��[��ONF)�2Em!��W�f=;8�8}�*���������p�z�H�����:��mq����o��U[�����s_��}��b��`������YW�2���<��s�KA��{~2���s<����x�G�5��^v��_h�6]�����K0���+���j2?��y7\3���M?�_������O���)�����N5���Ij�<��z7��!���l1�Dn��`���}�{����$���W���4f���$X������{�������}?:M�[(1:HN������|z���8���(���o���3r�p|�z�����l2>����=x|��E��n�O���X��A��Z[�D���`��}��t����������_?��������|x�w����Y(���>yeC�
o�����O�!�
*`{{qt�<
��-V�~d��6\[�(
T��O��+���`u8����v�����������������mx������Y*��@�����g������������6��`�m^L���\��������o}��,������{��oh}�$�vI���lz�K��m���.�<lm]��
�\����&�u6�_%�gY�4ToF�7__�sCz�!%<�����qqz�7:����0�����y�o��a�����_y���{���#[J&��A�+`���;}2+ffW^M�w��d��r2>>00�sO��S=�N1�'i�O�N��{N�v������v��O��46��OF��U�^��X����i1s����6�F��'m}a4t�;i�4������P�ft:.���Mz���$)����b:�B��lhc�KM^`�'��_��.Y�z��Z��j�K?����/���>�7�����������w��������O����8]cu�=x���^�&�W?|�������)�G��W\�@+����x�����;3�7���uc{�GS~)��o��'�vWnPl�nN�R�a���
����/�(&�w(,��y�>K���b�y�lo���?/��r�z�l�Pr,�w���+J��])������/�Y��������t�������� ��n:��S��mv����eQ�<go�$}�c�c1��a�������k�o�"d�����������W�� �I �����T�/�����!^W>����
��4$��L]O����<��9 ���K?�|a��WSf����yb��=L7�����k����e^�o�����O^�����W�=���5�'4����/��a��=�����`�_x�����������y�}7������O�g9�L&�\��O/����_��?��o���^MS�=!Y����7WL>�4g�lD�&)��������x+�*� ��l��m��^��'��};��JM�/�����[��)I�g�,����GT��mI(X�.� ,�:Y��~9�p�N���1���8��Qs�+xK�����1�������y mc�j�<�������0.^f�Cz�������Od�����-o�!���4�s���7�XL��9�a�Uy1�����c��r��[�M������8�B�w�|��]a��2��[| gF�������V�[��z�QE
���$ �w�+��M�I;�OGI_)���>J���G���t>M���5�����0ebTu��V��qq0=�d^�0:60�8�p��g��q��L�2���j+=�ty���|����NG�[�{���Q�S]���I!���8�������tM��������&���I
�_��B'�&�
���Z������0nl7��O������Az�<�I4���|��l}uv�of�W���}��Sy��,)C<��U`j,�{���?�(��l��������uy�P�.��^�wh������@���Z���&6�#�6)~��L��L�����
L���d�����
W����\d��d~�No3�~zql��K�t��������
�k�����z8ar�:��
����9{�jP�\ ��&'�=���?�53��a��20*���pXh�D�Qc�qH�%m����w��yj���7������`=U�"VAF���dTs�����m'7�����T�K�3V}��'�j�.�H��8�O����������|�!F��"�u����vo���4X��Q^��,������
�m
�jk<�{�6������$g;��,:O���k4����&6Z�"��t�%g>���.�dr�{|�.�������M�g����tB���d'�+3=�����c���O��g�p��a��jcI
�����[a������K�����V`�6��"��`Z�z��_�������x���D$K$DZ|�e ��zz�2� ��4��]��������l�������g��4#��\g������O'��voF�b6=O��jNk��J]G��ft�&Mz.���h��,Y��K/4��Z�7��=��\�/8�K�� �\���u���)X�X������h��w6�����'K�"j"����,�{����\�n�����������K��4��nng?���L�=��e���l{t�&Y+���������������wE�n�v����f#���C�~=%�kW���{���W9'\S`�t���~b���GZ8�?����o��������:�zN:�we]��������{�+N�z���+z�7(T�b�����S����!���������YFJ����W>g��Z�?��N��Q����b������������|���� t[�a�^J~��A���,���.����)���q�hz7�<����)��r�V����n}������..|���b��{175X<���;�_o���]���"�q���U���'�s]�%�Kp��2��� "8'���dq���.z@�������e�xi0����b7�{{���A�W������_��ICH�
�[�tE��VfT��\���v�����U�Cqz��t��w[��v�����oY-�L����S�{5eI�E�J�c��o��;�3�����t�W����a<�_�}'�RNu�sr�Gy.�#.��?=�O���X{����I�:."���h�I\/H��_U�v�!Y��^�<���4i����w_|�H�h��)q��@m1�GC[v*�D��J�=Il&�Y�-?<W�d�*_�dt:��S��t�9*������B�
2i����.vl������^����\���O������
�V!���XO�?��+:��D0�����Y��H�����l~zpv����mV������w��B��$��+�U�K/;��j�x9���A�m�>�
�I�o��;����J~����,��u��@����Kt�i�v���X���e�Y�'���������/%��������4��|�{\��/��������i��:T�����.���uZ�������s�PFu��������_�������t���]��g
���n������g���$���������v�?_�{���o��&���������W�6��zoz�j�zh_��S�?[�7������q����'�LJ���/���j.gg/&��({:y����|z�s��[�>�uk��_o6;�_,�[��/G���MGpd����:���w���K���rkr������_��]��P5���*������y�����G��o�?:s�������?I������/v�'�������{�E�q/zG��9n�</�O�w��d�����o�}�������_{�����u���'>�
�@������uz��������{#}�;�N�;�~��H�4?���x=����ht�!���������C�DV}�p<:>��/c.C������:?�}�"3/���0:*�@FGM��gt��?���������������lOOhc�������A���Y���R(4I,K�����o@*���Zu�o��t��dv�������%,���1���
�_I����!��/�~������a�����o�P�����QW&j��g����w~��<
���OvR�y��~8p;���r�?�D��_q.�3r��~j.|�9J��>�'k���Y[�b9}�7X��s_hB�=�rf���[|�����/�K��b��K�n�A����>�0p�B�����cq7��7YX����|�e��*��_Q������h-��_��^�>�)�w�'�&z�v��g�*�����$���O�f< lR7oNO�G�Y����z��������=���S�MOf�0w�)�J�Qja_������3������?}�wL��p�j#G��.}e\��#�o_vsc.^rs�5]ysz#q�����[��9\F��
��pM����;��*TV�_�U����/���O����������Z�����u���������||�a�����}a���u������0�?����Uh�?��������?��������%"k2'�-���\����G����j7�M��{��B�y �\����r
z�S���]BIC[���I���?�2��J~��k7~����`�A����v����s"5G������!���,���G��ot.��� ����~�F;CWW�eG�q��N�~������OF��A�,p.fS�q�(?Y~��u���J��AD}����+]�_A��b#�������\~����zl���w�Mo~�i�z@�����)��n��\�Z�Wo�����-?R����Bo��<����87�O#?+��=�Q�tt4�~������$�����p�%�K���2�K���������
_��Br/=�HF���(�?A���uq�6��O��\���b�.=$���}x��`:V�Y��
��g�BLO����G���M�I�����cl�?��/P������x�+�(�y�����xp�K�^�`�1yd'/?���w2���j>9�e��
mTf��ol����xt���B"��wqj��|;x9�mX[�j��������x��&�7�������m���=���j5����M��������y;J��g����E_�����d������H�5��x7�=���E�*���x�r�����]
(���������q��<�A����yz��F5�I�l�/�~Z<o�><3dq���V!�jzv��dYt`�����������=x�mp~�
q0��W�J���`��k��N�����N_�W>��~d�|������B�u�*���SE.�B�����{_~��w���o��6�+6�+6���7i*2�?��u����7����x�+��}P�Yow��������"�
��`1f"�Zuzfh�;]l�����}u��� ��w�g_>�{�����������uL����"���{��_�����q�W�����_��a��Vr���������l���WK������I������bAI^��E�7�����������+J���QU��Uh�$U�4����+deUp7)+>�x�F��j��+������ d�_�4I~�A��{F��f2[����c�/W����w�PX���v�����C��ug��5��\�]�]�
���E-�UG*��-�D���t�;�������[���k���Z�M
�+��+��K���2|w�����(E��e�z����hd���Fg���3��O�y��� ��D�E�p���r���Z�Z��u�����Y��p���QS����Lw�����
�0[������a����{��������������I��_ko�m_��yg��]��Q��^M���*�?r�.����]��)�X�@Z�wN4w#��d����(y_�u�p'��V���R�����fo����s�������������[���W����:�n���w,���WA�Kri����7_H|�9��*D�7�����7�h22��m���/��/��}���{8��{z�n��"����:�6"���:�1����5���z�9�{�c��O����\���`eg�K������d���_5tt�X}(5����
CJ�C�z���J�B�S���Y�t�C,G�8����/��c���+�%7��2���Q��L�1��s��x�������H����:I��+��\y�KW~����h.���CGq��-/�4���o��Y�kiq�����z��$s��^� )���e���%����i����������q��^,���[�k\�Y?_k};�;��O���l�n��rI}��^O�-���a�����M/�����+��k\�^�:�?������]�������m�@�^�5���|��x�}���S�����u���&�+����kN��xt��?�{�����Q.�_�����^���R�#)}]��{G�^Ku
���u����O�������#�J����?i���e���gx}�-��g�������i+;t�fi���e��\\��|�Gg������=��`��g��l��j�,�7q�7�Q�X�g|Q�{�,��xqzv���&���)��xG���������Sir��p���Yl�f~e�y��=���l�(xx �W`��;�T���mV$��;Wyk(�o�������M�����_�4m��P����?���qv��:J���g�R�l|�*)����g_-���~��^�}_}�����(��������O��9�v��K�n�5��''��o�������^v����������}��>��l<����!��1=��O���+o|~oz��Djg'|~�z�^v�z��/�����'7���'��?�|o]Q��W>1�����0��L�^�W���'�!�����7^��e������p2�V�FEz��`U���~������d�������<���p�;x4���k�(9��l��n��~����O���6?
?m���ln���/
A��'�~���c����
oM]��������m�R����->�����#�9���o\��s���(�k����#���5��x�k������K����B~���"?��=yz���W��<�R�Zw|���{w���.�W���e�|�P��_={�(7n��7��vs��;��@Z��f�;by�]hW�����e����b���
�_����]���MZ���}W�����Ry��6tGy�����]���������-�����r�����C�h�������3����+��?|���u��_�g�^qr:�~r�<�eWb�����E�6z����LOg�-^0&���h�}��!�_3��uz�Mo�'������9O�A������&��fg�fg�����iZt�r���mtQ��az������l3�O��S��f�����#�O�'3
�Nl��t����pr����s1+8��[��� �������[�XGkR�0:�kqv�-���C��Y&�0��s��zy���t��*�zfB��K:�������T1������[��)���c�g)�H�����x83�����)G�o���^N��I����������rn�����`�Y�r<�,�+��<Oo��Aq:�����q��q8"�?
\_�d��6�H�=���[5���|Oa��Z��-�����z3:Lw� ��=:��������>O��l��Em'o%f��<���
go���f�v��Z��C�I{G�e�M�'�i_s2>}5=M/����iN���}�l���xfC,7�Nw��~{�>8:9[��b���� m�����'�������&�MN�����������8tO�n-=��f���EW<��L������o
54+M�m����&2'I�W��LSy�"a;�0�)����W/�^l$��#-#���H�dWM��m��L��v�a�]����|�v����������q��>������l<��vl~��]lV��?=|��gM����������8� ���k��%����d����5q;�3���>U��/�)���w����������������*v
`�5��j"���n���az�b��~����|�aX���*n�7�66KJ�ER��-�7��|R0�V��*����I�������L>�_�&����ys��Ms��4�����l,u9�����g���a��,��[y������v��.�o��bi����[��K�����i��N������Nk����~���wZ|����;���y�{��{OAq�P[��o���^(��Vu���p]��$�I2��3�M�4f���.���
���`��!����I�O������������W��
�w�9i��C��("�"�{C=�K��fl&'��Rz��w\�d���������?O�}<��K��\b��Y7��]�Xcy��w����u�������;.���~������R�0p|��U6��[�O���OO�)�60�dQ������VR�w���.�>��,�+�������_���,X<�B �������g\������������N?����Z����[��FW��[
�N����P`���,�5��-�ka|l�����\(>}������s_�r������H�u��iz}��w����m���6I�Wx�?qZ]���������9����h�N�'��%���)�_%�:I��4IH���$�'�* k4���_��\�?��g�����?��-�?C��OS���������?����{G�����l�Y?�N��|{�g3����yb��x�l��sn�����_>�-��������;�6W�����������b������'W�����[���v������`O�]��\�;����������I����{/DW����<�=��T��!�Q�e�~\=��3����X�����M�I�L|���qP�W\2��=���:7&��u|�h�#�������G������H�?�[el��W�~[_��?]��s_,��5��e������u�?�������_�������������������r
��7��9�z?�{����]5�{h�����=��&�w�\K#���P?�����?�������������m��|��������_����A5��f�
�f�uU
���� ;��U��a�A=���a�}:����m�>����n�E�a�����>o�.}�o��v����y�N���hg�t�fK�d�k�ZS�O|m�T�>��������M�Kve��������9;��tP�Wz������I��Gmc7�G��K�����������^m���*=T��%�
�k������+:oO��k�aU���,y]����=~����*�����At��E�#vUz�����](��*{����r��w�p!��W
C�+�!n�s��w��
�����:����`���7H����$���V�����]�����N7wiz����uH�t��i����#���!�K�4��s�K�O�a�!
|��������
P�%oO�J��I�U��I��F�M�t��p��������u6i�o4�6m���]�.y]��[r�j�I�I��3 DH�KR����$8=�M)�Rgol6���JO�q��� ������F��t��jgs��%M����y��,
KgUwz�����4�;���'M��0��k^�f���P��Cz�`OZ����������VH���L]erP�iLw�����#��;��c�����V:?��6&�
��rj8�
�.M���� �~� It�j`�
Ho����I)��w���&��4�nZ[i�Y��g��ZlZ��L}0�m�2��\kgy�h���&���`�m�/�Gm���Ib�*�_�=<C���Ifm�\����N� 'I���+���V`m�W�WN�m��[�b��)1�I��Z�<p�l@��3)�=��TV�j����P�>u�i���������I5�P�6)6�iN������Gu��lS�L;�S������c���N�i��f(��`j��X������X��������!v6��*�b5#V���
�]�nm���Q1��D�-m����my�J��9������o�Z����LA�sl�������d�[�Z��$�����+���e�Y�5��s��3�6�i�Uu���H��B��O>�
�YV�Sl:}Dv�R�]�^`���xt�������c�K��
���� v��`�V�A�5CbK�,p�Dg����j����T[*]� ;\!��=��`��b M"=g�K��-3�lUT�]9:TX0���JS:
���L]��"����S�4&YjY���
�tf��������� 5F�v+>�=]r8��Y�-J�C�93�������=$�qoX�M��vXl{��*��3m�f�������h�����A�'����e2�l�`��� ,hS������z����K�D�,��Xv���p��� �A5�����s]dxXZMe7q�d�9_F�~���`�"�WkS�U,�N���9T� �h���<.A�����U�z��k�� ]�k�U��o�Q���
���V ���m������D\��Mai�M�����7=��g�&��k�1&m`�=B�d�4-r�[���F�c;���{�Qga�,��Q�H��O���6���q*M�����`�Z1�n�5��D�#nS��7�f���S����u�g��D�T`�p;�F�?�T���x�(W�i��7��T`��G�(�Sc�}��T<.(�n���5C��Isr�:0��3U�oZ��G�,�q���b]v����:��V�i�:�Zk�CM��WA��=�Mz��U��3��t5#�aH������:,��y����l���T���_��o���T�NZ��-/����v��xz8j��~[,P�Z�t��S��h����m�A:���jyd6_-J�<��`!��#�q�E���3�
�kY��L����h�����afq�z�flf�p��D/'�)d�{��tz�EWrf�w��Y�,�D
e�r��^��@�����
�[�>�wAqwM�������e����:_�H�����x�����kltb,q/���Y�Pr���-��
�a�^����;"�_<���NQ"j��,���m���I~���������t����*�)�V���/�m�Y���GKZDmB�5���od]�O��`�`�}�k��
d+��E�U��f��/%#f�I
x��.����n%+[p� o� �Z�����}i������1`����x#
���@�'�Aw���R���Xy��$�u�����x�Y��\��;��+0��6�/�!H�=�G�,p�x91����Nr�L8�&`0\�KB����:4�MvS��,�j��q��!�u�:A�:����4{ �J|����+d{`% ���1��!�N�#\-q��VbSe�p0���}��a�x\0����8?x���l�D,��w�3��W t��N��������mLN:$$*���$�B�� 2�~�d�?-f<�j�)�0 �����#�;������s!P��
������ ��R%���R�C��D�X1�-1i�aOPag3j��\
��@3"����XJ��c�t1�z����)`` ���!�U@�u(%O�n76c����m�m�����T7����V�
qD���r�_�r���p(��4�aN�Y[�f���L��T5��'�h�j��.�a�0.h��%(4���;������GsH���
��=u����Z���K [�����l~�\����4Mv�o+P��z�,K�Z5+�!���@\��1d�H�E?)�N`�m������ ��[�
�W:Y�ugsqG"n���ZlW
2��G*&��<�2������
9`>����T����
�_G�� �[�
��^N���-��EkU�-��g��Y �-�kM�-M�������0� ��C�H�|�nd��������8g���Q��vI������&\r@���|��)�M��zbJ_K�poF�Rk�y��B���_zV�
��h�b!+{(s�k@�6��`u|���k����H��E�;&O�4<��������` J����Q�U�R��E�t ���o�d��6��C��!�}[-���3mA^��p�O� �Q�A�W|����@hZ=��,*hPyf&�R����
�S�|O����^��R� �fr��f I�m���Lj�D
[�o��F�y���A��1���8d��A�lsP������,>���@n���+5�q[��;�����DP��6g��0S(���(�/�
�]��4~���V k�Q�`�����GO\a/�`�|�!]�e�>Z!H�T,��%i�����sP "��`�����\�(y�}Z�O<)�X�U����y�hds�"��"F��� P� {4��q��;2�Z�
^FS� ��T,b��
5 ��:��9f������
s��=0�������8D���yYt����H5���Ah��Hd�a���C���F�3�ksv�A���;B���azkb<���@�+��$�J�x��� {�$5��[�DCF���,�C�[��L��"Y� ���BO�|�_A��������8�97H�X,e�'�z$d4���5����j �?�^�@p�?�3hKLG�����=���1�_d+y�Z����!������%���d�r �z���L��EL�>M�
�m���{�V���F`) Pgs�{P
{�*C�y�����P�2$ }�*M��5�������a�tZv+�`2[%Q�X��u��m�S:�@��Hna�<��VGh��.�B���j3�b�Z�� � ��X>�'�%�"�s
Lq�L�j� �N�H��0���j����S#��[�csR[�+&��
�r��[�2�1C�e6��� O��<a
�,/��o��$���B�,�OV��E�[m���C��v�
2TM��T������)��7��^#�E��� �\���,���p~a�Sc���{���[9/W �s3� �Nf��%��|+�������%�Sx�b%!Us���xax���������p%����5iT��os��!)Q�l�d��jk S�x� Qq��Z����#v��!�0d�H�����5`{�Z����)�H����M�����67�iJ��H@1���d������������@�G�%<�@b��������9[��\3���/g�s��7�l������CY��]��H��lS�@�;��JCC����g]�;d�L �����h1�l����P��| r��s��5J��&I�)�Q����"�8� 8�mW��f
���!��kAzKP�\7��"0f��I$����5�g[�ZgY��� c�8V���M��12�`?���(HOB8]�u`L#��l[�"����M��8�x 9h�"� ������a����3&�
hO-�O���������BSE%/Z�I|Q<2�M�bd"����5D4A�Rl����������L�����T�X j��(�������^p��L�{�������i�('�!�\���(�<-��b��T�� ���4O )#������:F�!��9iR�K��G�?���}�tU�P]��������"�e��TU� a��Y�:��w9��<�-TE�6W��b1{/�����5 ���-\���;4OI�+|����+���� �7�&d'�����~���� ��p�$�3q�@��q<i@GZ��t%��P�,4�t��A� �2��Y����f��1GC���%�1�k��L������qw����_�R��=)�R���6o�l3�[�*��U`%l^^2���^���V��x�F��.7m
|�a����$�Z���/��_<��"U-�+��8��NJM�
�u,kH��hS � j���B�&��-&A��@uHL$sQ�5;��$g �RR�rE�M@��@� z�G��x^��Dl�T�w�^���|I1 ����c��+�w��RR��4��;C�b�����&�rJb��<�����X�f@�Y_��h�,�4H@�
�����t�J=��U�� �&VJu��-#�������������JG����R
�#����F�P�����=T�V�U�`��+['H�!��M�-^�U-$��PK_��1�U���U��"�&{�J��
O�[U9�HtGn��i)�B�� #�h�>, V,A��b�v.q"N�6=��L�sHW��+���d�
�(FK�������*2�B�-��)9dQ�v��;\������h��$�~�P�>����6���$��{�`�d�z&g$���U*� mN���aM-�-.r�
n�#q���5"KZ@���/��jEZ�!�tD ���X'�5h�RUx�.VY�'W���V�!��E�L���3�pV�JQ����AdF�i�$A�����@�?�#-�t��5!A`*������\��H�*.� �ei��Q����V���z�d2�^��
�U�I��k���,s4��Mcn�D�6��F^"Q�f�F��� ���u[��L'��F+ $��l[�� /M0�Vac��!Tia�kB��`��*(�L)�e�_Z*8d-A5��1kD
�b� ��'�dk���vK���!|m�x����r�6����R:sH�#O�q7�LTd�US��&c�bt7��@��\y�wID���:1t��^.��+�8��� '���[�9Af��Q>I?�H��-�Py\�^r�]#X�"����@�'��f6�b�F�^85F]���l-��
������6����{a1A�g��o�y]v� �01"�,� ����f���$m��������ve��Z��5���=���s� ��\�b��{�d��> �
�L'�����HG�1 �W�[�H<��v�t���������w����C��X�`�����d&�kn��!�Q�����U�~+��X+�E�!7"�3 �SIQ�HhI*fbz��0/j2�y������EJ�\�@�%�@������c���PF<������I���������>C������rd� ��
�HL�^G�����2b<VE"��X�����e��r�j]TYzD�i��������#6L�;�������22=�f
��\R)jj��E�x�6�d��0����v����3��Ab@rPJCt�-o #Z�X� 2]��<�1� R�5�#���o�G�8�}-G[Q���E|�Z�L%3��+U*f�4[�T�\fZK�{F��� Ln��x��B�w,I�3��f���e�QjD]� D����~���"x�,1K���GTu������)��m��6'v�KP���Z���h�(�-��0TmRPY����)o�H���!�P��IRD�SY��PO*H|s�����p�k���]����U���r Rb#w*�#�/���8�cSL�/.|���������4���\/���M����#����hE����cU��CHa�18��d� }����lrm�����)�5����AY�!��
��C���;YfA���-t6xDI�W"���g�^��?�U��2p�`�H!�"JV��/
��f��q������Fd�%{���nz�;��F�=��pJ X���5�e��V�0���J��B�&q�@|��^�p�2�r���%i�T�W��:1�/%22\��+Y��C_�����|�QL�*�v( OjM ���Fz@f��v� hx�F�?���a$&U�v���Q
�pl� Q^bO���N�y�/r;5FjBn�
��e�F����@��!3���4D������#_
a�E9#�Q5"�O��O����&,��+�����"����[�����^�Y�����5���N�9)�k�pOt�rT������;\A�t���C���<�&�)���b*�C9��"�MH���-�A����Mq�I�j�#&�5���8�7��c���Ye���5��
��W O�SP������~�����"�����W=7���$a����Z|�"�VE+��tn82��jy"����*�PZ��e�+d��2����C�k%�+�@�QE��_:8�-2LL�4�2+0�|k����x~��"�d2� xf�r�Q��XF�����gA))X�9>T�,<BRQKT�Vg.~�+L�q������������rb�wA����
@�Z�6M*����Z: ��0��8���=�&3QU!���P9sMW��W*��(U��U�d 0]Q�YC�� 0P�d"<��~�0J �"��sh�pY;�"���C��@�����J��M�������J;8�$$�J2*7�-��
�Z���X��"����l ����R ��{]c��L-3�o��T�;^�S]��l�(*`VD��t���9��2�, �
�G�
�Y��GT�)b������T�j@\��p'�VnLr�T� �����X � N�C�:u��zh����d� _D���eY�pr[�N���� aF ��3������6��R��_��"�
�-�R���)O&�
D�8�"��"��V�B���������u��4�b<�u�;��/U�i����
X����@Nl�������R��T�'"�@��kV�S�$���!��{��e��4�i�X���Nm �����WdPA���k�J>��}5�"��`��rJ�&x����S��V.=���S�D�&��@_�L����KQ7�S�0V
��������\C�%��D�i����;j�Z�����Y7�9w�P5�M�t��'�a��Ox9�E�����5� l���)��/�l��tN�����KZ o�ByD�!���l�{X4�Bzt�x�����ZTmM��=�C2��?W���������*U�XQ� �G���(���wt=9I���T@�'�WC��2�gp������b����`��u�m�4UF
A��>
�VB�����ir���5R�8zG8�����U�l� IF�U`IB��r��T�5��20�9>u�h3NT����39f�)Z/iw�eg���pd<:���������W@�6t����w��vb:������{����i�����M�Qq�U���8)�� LrQZ��Zx�gk
�����@���x���RWU�e��>��]����9��mN�G\��g���m"��"au���!����])��L�������U� �E7�P��&��>!�����J��~�VcX���VoYW���
B�pZ�H��*1�AeMh3�^Qa�z���S������, �nG*����HJ�Sxx�WB�gB"���C�Y�}"Y�F�<�S2��}�F�9OU��vcY�4{�Q�PP�=M7��`**��r�a &q�����o����Q.�A8U�2���P��6�w������VL%��dC�}m�� �"��,�B��V�i��4D80�I��0t<�f+����O=�<�K��zx���� �^�h���nF�<�����H���g7�����\�3�%�q��h��42G�gU�;%=T�M��Q#d'���:��:U���3s�ix)M�>S�_�e��`;0�ftY����TE
����k��b��V��
YW�J�X7��[J<����hE�aE��m3���P�+B�A\*�G9��i��G2>��w�]�c�^2z��H����� �n��s���Zb~J��$"�H88��sa��_ a�$�*-R��������
�
�*�AZ/�@>3^���{���Z:4����S~}��H���%�:B}�2P��<c��+�X�>
��A�!D���H�����8��������*T��-��a�����Z ��R����� 4v��b���b$;z�YN��u�@,9[��Z��9nR�g���CR�(��Mx��8%"(�JiS�SQ����x.�z\T<�D��2BZ�V:����-�X��R��Y�s�<.�FT��M(���U5Z�6`�^#$����AB�j����J�)
rk��\.9��mfk�]Q��R�!hAJP�'��NOD`F�q�����@uo�Z8����VF���Rm������\mC!,��FL���2��,�X7eN�����0���MI����D��U� 2���V������!��Fy� ��8�6XX�b�t���W��0��Z����xO�����RU}P M��i�Q����Rs��{un�r����4+hJ&���������# F��}�T�~0��Q�y~(y8��d��$�h*��S���7,� v�sD%�H�Qu��)�$�(FQ���]�O�i@EV�������Tx�z|1�b�>Z��h8"�{N�GX����O� ��}m�0��|+�k���h3�����Y^�2���a� �6�(()H:�B)��+�S�]:�,+B<�Vm�%W� m��Y�;!���j�i�)��TL
�Yy�N�^��Z�Cs��U�L��uJ���85��J��Y��t)s�R(��>���N�v�Za�=��0����0W�vLT��L����i(Y��7)(�M���8L�T�F3�VT��By�����+�Q��`P
�+@en)s��?m+j�
Z19J����c�*`W���j�n0@7����*�/.m,�T����*�R�I4���Z��Z���"B]>�*
���*��KK���X��Q����L��2� ��9"h
�
pEL��*r����Pb�������Ur�l��'�C%�b
j��dfT<�O�%Gz���s��e���\p��{�5��������y���*ns�o |4"R�?���o.�[��A�gKh��4-���M-�1
�vTy D��:�J~z
2���Z�R��d[�����1�y�H��iA�X�R+�JE��r//
qT�@���/�F�b�[9Q�k���,�R%�Q������"2�@b�Ef��
"�)A��m���Mj�X��5������������#~m��<Y�V"6��p��9]E"�P�������c��L5����j?$�h/}g��p�z�y��p��j�[�*����f���������$N���Lu�25������P <�R~���
�i�^
��<����6�+WF-kp��v�A&"���/���:�u�E&���e�P5M�zz5�����F�n��3�S������� �#�����{u%=7���m����s��m0T'2b�{[��
��Z%�j��o(|�N����j��
VU���x�j�`#C^=~����zm�W^����5�����3����������*r��k|F�@�4"T��@;h��A��.�$S)�>I�7;����@2�����4pj_��HtV5;�c�
��SG�
4��DR]�T{��u� ��'��g?MmK;u��D2��J�&�N7jh�.�����D]�v*�->[f�9h���Q��u���"@���(����E�Ri @c����=>�B��34j��i�����<2>5;N
&j�
�'�(!VV.P�u���������T4Du�n2��b9�_3y
��V
�0s�J�D�*2U��v���m��6B�� ��)%E"0R��@�@��b�b��8P
�o�,�-���Y�l�w��=VyQ�ujU��8qj�����/��1�
���,� ��tY��\�"�&��)`������RvF��"�����U��VxS������AY��P�J�f����]����Gb)� �!w� S�]�(&J7�RTL�=�����dP)�FuK�e@��/�<������5�R�Jd���������f\"Fm� ��n�uN?jt`�MN�8d�������5Iv
�����
�g�H�����1=+=��;|�����R�#���=���f���\��B����N�����
%'���R���Z���VmP`��K3��6@��,�!O�&��XCH �4��� %4�"��f����94(^u9V6��T7/ �L&������%������r�e�/���,�����g����D��0�Q�I�Z�!����-d�VLk��i�����r����]*���� FT
�T`�]a;`e�D���,�qz���Q1�zF��^���b��z�-;b���2�����=���
n��(� j(�V��T�Zt_%�j�c���Goyo-vz
�&w��;S�JuaQ7s��rt:R�NLp��g�6���y%PQ�9 Yux{���t�����UPGzt >b�!U����N-�p�i,��y:5����!��[m���6�*�h�+�3�\�&BQ�8��p�������N�=dX��Rn0�-���Fz�d��v�+#��Z�nQg������7x��Y�6XE���A���c�~� �?�(����}������*;�m���
���W��eP' 06}QRXTt~��A]��fs�UX
D�Mh�:�����T���
�=�en_��&!���
$E����C���WU.�"���<��R������U�S}W��2�����N
0������-t��*�Z�2�`�
J���z��W�_������[!�c���'RT��^���]�����#�[m\����/O!�kA�`>`��efe��U.:1���^5�mp\�;���}�����xD���Z���A�ZMV��b��m�;�J�Ia�@`�gS�T�*5�gk5�8�����:��XyU6�>������z_�8�w�R���%��Z����,�*"l�����F(hg-=�G^}�ri��b�+ �R�e>PM�T���0�{��\��D�}�\�S��h�R��� x������Fk�j+���)��Nv�W?j������u��������W5�,3�(�)������H��VFF�����7H<}�QK��2�P�9>�}�eP��'��R�m���a$�!��ST�#�h$��^
n<�Ka��)�����P95~�6��w4"��:��W����J���dC���~�{���y�b
>����W9�d��� �(�������J;x���j>9P�f il��G
��n�[�2IuT6�y�� Z,\�P�[����b6=�5�'!�P����P�@&.@���;�R�s�\U�")�#_����P?B
��J���F #O[�Q���k
|�����G���Vb�0��jgw�JY�%ZT�:Qk�H�Q��]�� �%A�(L�� Tx�p-F����3%"
��S�
;yM���� rB�@$��n%������MH���(� ��6�U�<�G�oZp4�R��j�"`^m2�"Lp��dJ�J9T�e&Y�}���n��_'dI��:#�#����������[u1��� �d�el�����Np��5���C��r��V�Q�0�������W��2J������E'���zQ�h]&�J�%�����W�Q�]V�v�X�����~7.���8�p�;$#�������S����J �t?h��P5#(G�Qk�Ebq�uA]�;u_$�&d�oR����(�����rV��� 8�� �p���v�^������
+��� ��f�O;Y)������B�jo��7���w}���;���N@��Je*5��j�2@���Fu��o����\��i;Xc"~��� jn�
+���TU�!gg�&j��M�<a�����O��#�r�9��(c�`\�W �a����\P��mlUsS�Cq��u��T(��
BK1k��1�b0&*I�Ps17r$����
��P�E�R�_�5T�VV�����Fp�P�h+����7����nr'D>Q��6�jITz�V�&_��2m�~5����E�
H��@��7U�Cj��+A� �����O��NE�������\9�g600�C��+ ��bIC��s�W�g�b�V�A�"�x�`�
�2R�� &PD���T�(Q�A q�����Tl-�~r�>ij�Ba��7}-*��yh�\�&�]�r��dE
����Qy��=u:P]O�%����Q��Sy0�z�V�F6y�&��R�G�,�PU��j�2��F�Pz�J��U�����'O=�������]�f��Fe"�7h���s~���V"���0im���k1v_h���E(L
��2���*�a�:t�Zx�:,�o'nO�Q"�J�W=��n��l�+FD&�3����r�
3����;(~���
��N)[��7�����D��PK!�v��~{N����9�6��V�3��\IS���p�VRU��'{r�EEbg�����.W%��� 3a,VS��<)�lW.b�Z(�6��/]�{������b��7����M�\����K� ��WEd��%�D������5������<�_��l�AV�C��^=5S��+Ac ���t������lQ�� -�h���u.&Tan���=��(��B�� PW�����7�Q3���m����"��V�
�SMos��*Z��k�r.,F�@x��62MB�1������B�+��[��J�c��)jK��R��<jD�1>]�\Yks����p�Q����R���v��(m��er��*^4��G?V�������f��/�%*C�� ����@��98Z��/�>5���D�-'��;��XZ����8h�VB�Pb�����,k��3 [�3�X����x6��1R�1�?H��>^�u�U�r���f5���j3Q=��.�P"��2O���<Q>;u�#���T } �Wu�P��T���b��-T[������M# ^� -H&Mm�;m� ��bWa���#�[}�D�� O#W��W+�4�eX��� ���M{��O���cYt^�=��v!
���&�n%j����]Z��!�r�`,�qG:��{Q��*V���,��s�6�H������i�'�e�5�D���� ��o(d��! �
�O�hB,���.���j[\�T;QM�=8 .�#FG���o���%�mQ�>?���t��{;@����Z�)]v��G������|�,�6��������h�E�� !�
KC�&��b5xU)���MP�NMI�F5�Q���k��C�O� z�?�������������~3�F��K2lbL��ev�T�^1j�q���^$e���G�S��=(���h*t�&5������Q�v�� ��.�&���"j��
#j�zD�����#U*h��*� �
���bd��J���Jy�*������Faw����������%����rB�b;���
�r�R[��� �nH������lA�1��L���4��&p���V{|u�S#�Z� ��6�S'W�V">��P�-C��v=W��������q��kv�Z�����l6�����3"�����]���j5Q88j����"@��x��iw2��A��1#���\&:%��a���fE0)�R�%,S�r �$[�@�*,)�NA�H�3���N���h�k��B�� �����NE���`���V��F��CH�z)�-�ErUc*�����%�P� D�m;7d��}l��R�xF�LM�*�y�+�*��bVJ��=R
T�a��G����c�m ��5D��wq�����Q��Hm���u<�o�0��{�6��ZKO�T ���������C�v���}�8�`74x�u�+��RN85zZ ��56.�_m�����[�����m3R��e��3ySd'�
������U��
�O+��%��:�� �r���S�GxV�
��
F����p;E��*p�p�^����W��/�#���j?�zu7^5��d�s�����[xE��&�����3C���W��R=��sFJ.���+<Q�A�a�R�U'��
�����At>�����| �p������AUy%hS1��{Q)��p�R)���T8e��F 9�i 3T6�;()%�vB��j{gm���b��.^��Y�8S!��h
�����*&D��e
�t�u�)�[�F�jk1���LM���m'��Z] �T�-��)��cZRe�h��)�E�R
s*���Q�D]��1P����.W����W�L��;|����J�fK*����1S�Hq�c��/f�����F��
��S�
�����P�[hM'4Om]����*����t�f�*����f���Zm���D Q�>��e}q~yZ�J�n��bE;t�������*�~���VT�i��,D��N[4���A_��Q����8 O���������a�{3"S��j:@�Qj� ��iO1�RN"��@�t�#������!���� �gs��V�Tm+#j�DT������9�.�@�-W
���d�4E90�1���R�+J�xT*: }����bCQ1��]+
�U��b�Z���D@O@�mD�k*��
����g������kS��0jg����3�A�s��*�M7��X_�
��|Y�/�?�"�u��jY[1������Mr���Pe�y{��0�Q:C���N���p1��z�U�����_!X������&�m�q�I����k��2[u�V�>{$�$�P�m9$r���E0K�6�EB)+�U����im�:"qO���u-|����A�Q�f����G([`������R_P����mG��[I#>;9?�6aLvM���"��-���������x�D���H|
D7�9��I:��~)���6.�@-Wj�P�B�U�zH����G2�^��P"�*A��>/����]J1�/�Y�����
��(>�i2�Y�p�4�A����f{����YhCp�,����$��$I�sE��������:�C�P]d1�w3]o|�V����p(B�t�g�lh��k���O���0�����%��I����#��>�Kv�� {���]�>�I�-��P1�'�?Fv c�)+���1]��;���9��|1S�0�e81��2J5x2��nz��M�iM��r��s��Y2����b��k���u��:y�X�f�3Y^m�<cV��Ua�F���r��z#S���q���L����xu|��8Q��/�C������T�N�gZ��5r��O�����])?������Z�
��z�w�V�J����B��L���h�8>3�X����@m�������b�-3��������^�;_Q7�����)��U-PGK��`u�_�5��@D�A������ _���W��gs�T��8��{QR��Q����A�
U��y������+���,��=a=���vsW�>�<*��h���������E���BV��+JcrW�.������s{?%�)�0����F����+��#��������kX����w�M�j5�n2Hx6�'�}2_�������.�?�p6�"���/]��!l����R-YI%6��A���h�����J�~3�9w�<��)c��S�S�hx�!9l!N����6���SHh�Hd��u��n*����g������o�n8�D�9�'*��8�1}1E%��[a��#�n���IqD���~`R� �@C'1M�E" q���E�J~�a������gUM6�!��-��=i�sM����q:���- �XI�z�
c&s�] n}�4��z��^b6�B�4��r=�6uL���sX|03��'<�S ��'C �������-�%����x�({�u������ �|�ev���p���\=J.���,�Iw}���TK����GUM
� ��
j����6���A�8C b��t+��H�QY����+����z1 �L��QZ��r�0��<���
�~K,~�4�Q��H>O~S�Jr�lp��a��I[������I���+�X���9�BH-]�g��S2�����
r[6�����_>����o�.=��E��g���Zl��<l��Hv��V ��g
^��H5��/*
j�����?��X��������
����98���3B�;rc��NR+�g{���h��������bx�����6�[�W��OQ]K%����M��F�iI�����3x���?*�
v�I��
�� �������fDia����*c���Z��W��H�-S�5BB����.4�L����Ysb�����O���q%�>��UUk����\.m�S��"/����|>s7�Levh�D�}�_���x70��i�kg�����wo�M��j5I�g�W
�moo�<�+�q�NDG���+���Qh<U��
��=s^X"��rb ��nb�V��@R_��+�$^����l��e�{a�&|8�_7�~4��Z��C����]G�6C������akL"!j2l���!_|����p+���e%�Q=�f3��g��Q���������������u��'�JR��Upw4�w�pM_V����n6�R�>�G �3 ��0�]�
���[��%�W�e���K�����E*�V���;" ��a��;���Z��~K����C����mZj8�����H�7�]��3���!�����61�]�u��r�VD���KW����P�����5��D��f� D:����*��u�b�5�dS�(�K�N��1kh�l�p|�������z��e�F������GO9���I(O���0��2����[�`����u4��kM�d��8�Qp��mg&XJ�n�^l��S����K���w��M�x�c5FM(�1(������WP*���g,k�@\�bb0�y��[k�/��v:��3 )�1'��Yz���LK����_�R�K���i��t��Mf���4����L'k����iD2��}�H�c��}F�6�?����e���lr[�PKwP��7V7�03tO���<