���� JFIF  XX �� �� �     $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222�� ��" �� 4     ��   �� �,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu��� #ډb���_�N� ?� �wQ���5-�~�I���8��� �TK<5o�Iv-� ����k�_U_����� ~b�M��d��� �Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F� ?_�'ϔ��_�Ջt� �=||I �� 6�έ"�����D���/[�k�9�� �Y�8 ds|\���Ҿp6�Ҵ���]��.����6� z<�v��@]�i% �� $j��~ �g��J>��no����pM[me�i$[�� �� s�o�ᘨ�˸ nɜG-�ĨU�ycP� 3.DB�li�;� �hj���x 7Z^�N�h��� ���N3u{�:j �x�힞��#M &��jL P@ _���� P�� &��o8 ������9 �����@Sz 6�t7#O�ߋ � s}Yf�T� ��lmr����Z)'N��k�۞p ����w\�T ȯ?�8` �O��i{wﭹW�[�r�� ��Q4F�׊�� �3m&L�=��h3� ���z~��#� \�l :�F,j@�� ʱ�wQT����8�"kJO��� 6�֚l���� }��� R�>ډK���]��y����&����p�}b�� ;N�1�m�r$� |��7�>e�@ B�TM*-i H��g�D�)� E�m�|�ؘbҗ�a ��Ҿ���� t4��� o���G��*oCN�rP���Q��@z,|?W[0 �����:�n,j WiE��W� �$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S�� ��VN;� }�s?.����� w �9��˟<���Mq4�Wv' ��{)0�1mB ��V����W[� ����8�/<� �%���wT^�5���b��)iM� p g�N�&ݝ� �VO~� q���u���9� ����!��J27��� �$ O-���! �: �%H��� ـ ����y�ΠM=t{!S�� oK8������ t<����è :a�� ����[���� �ա�H���~��w��Qz`�p o�^ �� ��Q��n�  �,uu�C� $ ^���,� �����8�#��:�6��e�|~� ��!�3� 3.�\0�� q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�< ���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y� |�y��� ~�6�@c��1vOp �Ig�� ��4��l�OD� ��L����� R���c���j�_�uX 6��3?nk��Wy�f;^*B� ��@ �~a�`��Eu������ +� �� 6�L��.ü>��}y���}_�O�6�͐�:�Yr G�X��kG�� ���l^w�� �~㒶sy� �Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT ��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2�� #I/�׍qz��^t�̔��� b�Yz4x ���t�){ OH� �+(E��A&�N�������XT��o��"�XC�� '���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�| Lp�d�H��}�(�.|����k��c4^� "�����Z?ȕ ��a< �L�!0 39C� �Eu� C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf�� �M}7����]��� �s2tcS{�\icTx;�\��7K���P ���ʇ Z O-��~�� c>"��?�� �����P ��E��O�8��@�8��G��Q�g�a�Վ���󁶠 �䧘��_%#r�>� 1�z�a�� eb��qcP ѵ��n���#L��� =��׀t� L�7�` ��V��� A{�C:�g���e@ �w1 Xp 3�c3�ġ���� p��M"'-�@n4���fG� �B3�DJ�8[Jo�ߐ���gK)ƛ��$���� � ��8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`�� �?��K� ���QK�d ����B`�s}�>���` ��*�>��,*@J�d�oF*� ���弝��O}�k��s��]��y�ߘ ��c1G�V���<=�7��7����6 �q�PT��tXԀ�!9*4�4Tހ 3XΛex�46�� �Y��D ����� �BdemDa����\�_l,� �G�/���֌7���Y�](�xTt^%�GE�����4�}bT ���ڹ�����; Y)���B�Q��u��>J/J � ⮶.�XԄ��j�ݳ� +E��d ��r�5�_D �1 �� o�� �B�x�΢�#� ��<��W�����8���R6�@ g�M�.��� dr�D��>(otU��@ x=��~v���2� ӣ�d�oBd ��3�eO�6�㣷�� ���ݜ 6��6Y��Qz`�� S��{���\P �~z m5{J/L��1������<�e�ͅPu� b�]�ϔ ���'�� ����f�b� Zpw��c`"��i���BD@:)ִ�:�]��h v�E� w���T�l ��P� ��"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u� )]կ��� ��7x�� �s�M�-<ɯ�c��r� v�����@��$�ޮ}lk���a�� �'����>x��O\�Z Fu>��� ��ck#��&:��`�$ �ai�>2Δ����l���oF[h� �lE�ܺ�Π k:)���` �� $[6�����9�����kOw�\|��� 8}������ބ:��񶐕� �I�A1/� =�2[�,�!��.}gN#�u����b ��� ~� �݊��}34q��� �d�E��L c��$ ��"�[q�U�硬g^��%B � z���r�p J�ru%v\h 1Y�ne` ǥ:g�� �pQM~�^� Xi� ��`S�:V2 9.�P���V� ?B�k�� AEvw%�_�9C�Q����wKekP ؠ�\� ;Io d�{ ߞo�c1eP��� �\� `����E=���@K<�Y�� �eڼ�J ���w����{av�F�'�M�@ /J��+9p ���|]���� �Iw &` ��8���& M�hg ��[�{ ��Xj�� %��Ӓ� $��(��� �ʹN��� <>�I���RY� ��K2�NPlL�ɀ )��&e� ���B+ь����( � �JTx ���_?EZ� }@ 6�U���뙢ط�z��dWI� n` D����噥�[��uV��"�G& Ú����2 g�}&m� �?ċ �"����Om#� ������� � ��{� ON��"S�X ��Ne��ysQ���@ Fn��Vg��� dX�~nj� ]J�<�K]: ��FW�� b�������62 �=��5f����JKw� �bf�X� 55��~J �%^� ���:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v��� g�8�1��f2 4;�V���ǔ�)��� �9���1\�� c��v�/'Ƞ�w����� ��$�4�R-��t�� �� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃���� ��A��20�c# �� @    0!1@AP"#2Q`$3V�%45a6�FRUq���   � ���^7ׅ,$n� ������+��F�`��2X'��0vM��p�L=������ 5��8������u�p~���.�`r�����\��� O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;�� ����S�T���1���i[U�ɵz�]��U)V�S6���3$K{� ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u� !��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� � ��D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v��� ��멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$� JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4� [�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ� dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il� �d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J� �oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.��� 3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R =X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N��� ��#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%�� �JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$ I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$�� �L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����) �H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>� dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\� y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~�� ����Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7� �ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz�� )�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!) '��8Ϣ�ٔ� �ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'� L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���( }��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3������� QT��a�� ��x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3� ,#c�co��q�a)*P t����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O��������� m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l� O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m� ��PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q� �����~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~� |,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@ l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)` 7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ��� �}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i���� >J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0 ��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q�� nxҍ!U�f�!eh�i�2�m ���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{ / �?�͟��|1�:�#g��W�>$����d��J��d�B�� =��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H�� ��O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l�� ��l�cGs�ځ�������y�Ac���� �\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6� ���N6�q�� ���� N    ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td��  ? � ��N����a��3��m���C���w��������xA�m�q�m��� m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4� ��r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0����� �u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ���� V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�� ���Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q� (v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9� �3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M��� �A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#y w��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa� ���Q�#� WeF��ŮNj�p�J* mQ�N��� �*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]�� 陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv :��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WP w���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp �BGv[]�u�Ov��� 0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND ��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R�� � ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`( �>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG�� {+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/ ��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�> e]�����Q�r�:����g�,i"�����ԩA� *M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f��� ��֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ�� �˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)� �h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~��� ��� G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W� I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��B S�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c� ��]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪ �\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W����� 6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}����� 6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@ �P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6��� ��m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw� k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ��� �mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e�� R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1 [y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN�� ĕ�� 0    !01@Q"2AaPq3BR������ ? � ��@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j �ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^� ��ԯ̾9Z��F��������n��1��� ��]�[��)�'������ :�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0�� ;_�� 3     !01"@AQa2Pq#3BR������ ? � �ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6�������� ��4B>��o��](��$B���m�����a�!=� �?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{ E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)��� �I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a �84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b� �$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7� �k�� 403WebShell
403Webshell
Server IP : 127.0.0.1  /  Your IP : 10.100.1.254
Web Server : Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.0.30
System : Windows NT WIZC-EXTRANET 10.0 build 19045 (Windows 10) AMD64
User : SYSTEM ( 0)
PHP Version : 8.0.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/xampp/MercuryMail/RESOURCE/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/xampp/MercuryMail/RESOURCE/daemon.h
//**
//**  Mercury Mail Transport System - Daemon Interface Definitions
//**  Copyright (c) 1997-99, David Harris, All Rights Reserved.
//**
//**  Note: the structures defined in this file are all BYTE-ALIGNED.
//**  This is very important - if you are using a Borland Compiler
//**  and your project uses WORD or DWORD alignment, then you will
//**  need to add  "#pragma option -a1" before you include this file
//**  to ensure that the compiler aligns the structures correctly.
//**  Getting the byte alignment wrong will almost certainly result
//**  in your Daemon crashing when you load it.
//**

#ifndef _DAEMON_H
#define _DAEMON_H

#ifdef __cplusplus
extern "C" {
#endif

#ifndef INTS_DEFINED
#define INTS_DEFINED
//  INT_16 and UINT_16 must be 16-bit Integer types
typedef unsigned short UINT_16;
typedef short INT_16;
typedef unsigned long UINT_32;
typedef long INT_32;
#endif


//**
//**  Section 1: Data type definitions and constants for lists
//**

#ifndef _LISTS_H

struct _l_node
   {
   unsigned int flags, number;
   struct _l_node *next, *prev;
   void *data;
   };

typedef struct _l_node LNODE;

struct _lv_node
   {
   unsigned int flags, number;
   struct _lv_node *next, *prev;
   BYTE data [];
   };

typedef struct _lv_node LVNODE;

typedef struct
   {
   LNODE *top, *end;          /* pointers to start/end of list */
   int icount;                /* number of items in list */
   unsigned isize;            /* size of *data in LNODE */
   int ilimit;                /* maximum size of list - no limit if 0 */
   int ialloc;                /* whether or not to allocate space for items */
   unsigned int last_acc;     /* Last data accessed using get_list_data */
   LNODE *last_data;          /* "   "   "   "   "   "   "   "   "    " */
   } LIST;

#endif

//**
//**  Section 2: Data type definitions and constants for
//**  Job Management
//**

//  Rewind flags - passed to ji_rewind_job

#define JR_CONTROL 1
#define JR_DATA    2

//  Diagnostic flags - passed to ji_set/get_diagnostics

#define JD_ELEMENT 1
#define JD_JOB 2

typedef struct
   {
   int structlen;
   char jobstatus;
   long jobflags;
   char status;
   char *from;
   char *to;
   long dsize;
   long rsize;
   int total_rcpts;
   int total_failures;
   int total_retries;
   char ip1 [16];
   char ip2 [16];
   char ip3 [16];
   char ip4 [16];
   char jobid [20];
   } JOBINFO;

enum                 //  Job types, for ji_scan_* and ji_create_job
   {
   JT_GENERAL,       //  Local and newly-submitted mail
   JT_OUTGOING,      //  Only mail destined for the outside world
   JT_ANY            //  Any type of job
   };

enum                 //  "mode" values for ji_set_element_status
   {
   JS_COMPLETED,     //  "date" is ignored
   JS_FAILED,        //  "date" is ignored
   JS_RETRY,         //  "date" is used for requeuing if non-NULL
   JS_PENDING,       //  "date" is ignored
   JS_TEMP_FAIL      //  "date" is ignored
   };

enum                 //  "type" values for ji_get_next_element
   {
   JE_ANY,           //  Any type of element is OK
   JE_READY,         //  Only return elements ready to be sent
   JE_FAILED,        //  Only return elements marked as failed
   JE_COMPLETED,     //  Only return elements marked as completed
   JE_PENDING,       //  Only return elements marked as "pending"
   JE_TEMP_FAIL      //  Only return elements marked as temporarily failed
   };


//**
//**  Section 3: General Mercury data type and constant definitions
//**  Many of these structures are not directly used by Daemons.
//**

#ifndef MAXFPATH
#define MAXFPATH 128
#endif

#ifndef size
#define size(x) (sizeof (x) / sizeof (x [0]))
#endif

#define MAXUIC 128
#define MAXHOST 128

//  Statistics manager constants.

#define STC_INTEGER 0
#define STC_STRING 1
#define STC_DATE 2

#define STF_CUMULATIVE 1
#define STF_PEAK 2
#define STF_UNIQUE 4

//  Logging console manager priority constants

#define LOG_DEBUG 25
#define LOG_INFO  20
#define LOG_NORMAL 15
#define LOG_SIGNIFICANT 10
#define LOG_URGENT 5
#define LOG_NONE 0

//  Constants that can be passed to "create_object"

#define OBJ_USER 1
#define OBJ_ADMINISTRATOR 2

typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned long ULONG;

//  INT_16 and UINT_16 must be 16-bit Integer types
typedef unsigned short UINT_16;
typedef short INT_16;

typedef struct
   {
   char auto_forward [60];
   char gw_auto_forward [60];  // Mercury uses this field for forwarding
   char from_alias [60];       // Alternative From: field value
   unsigned flags;
   char security;
   } PMPROP;

typedef struct
   {
   char *name;
   char *domain;
   char *login_name;
   char *password;
   } SERVER_ID;

typedef struct
   {
   char *name;
   char *groupname;
   char *hostname;
   } GROUP_ID;

typedef struct
   {
   char *match;
   char *rewrite;
   } REWRITE;

typedef struct
   {
   char lname [48];
   char fname [128];           // Name of container file for list
   char moderator [80];        // Primary list moderator (if any)
   char title [80];            // Title for list (used in "to" field
   char welcome_file [128];    // File to send to new subscribers
   char farewell_file [128];   // File to send to unsubscribers
   char ispublic;              // NZ if open subscription is available
   char matched;               // NZ if the address passed in is a moderator
   char moderated;             // NZ if mailing to the list is restricted
   char allow_enumeration;     // NZ if anyone may use ENUMERATE
   char reply_to_list;         // NZ if replies should go to the list
   int limit;                  // Maximum allowable number of subscribers
   char errors_to [80];        // Address to which errors should be referred
   char restricted;            // NZ if only list members may mail to the list
   int fanout;                 // Number of jobs to "fan" the delivery to
   char anonymous;             // Whether this list is anonymous or not
   char title_is_address;      // If NZ, the 'title' field contains an address
   char digest_name [14];      // Name of digest file
   unsigned long digest_maxsize;
   int digest_maxwait;
   char archive_file [128];    // File into which to archive messages
   char digest_default;        // If NZ, new users are default to digest mode
   char list_headers;          // Use IETF draft helper headers
   char list_help [80];        // Help URL
   char list_signature [128];  // List's signature file
   char concealed;             // If NZ, do not publicize via the maiser LIST
   long maximum_size;          // Largest message that may be submitted to list
   char password [128];        // Moderator password or password filename
   char pwd_is_filename;       // NZ if "password" is a filename
   } DLIST;

#define FS_BOLD               1
#define FS_ITALIC             2
#define FS_FIXED              4
#define FS_OEMCHARS           8

typedef struct
   {
   char fontname [LF_FACESIZE];
   INT_16 fontsize, style;
   } FONTSPEC;

typedef struct
   {
   char alias [60];
   char obj_name [48];
   char server [48];
   long flags;       /* Unused at present - might be handy later */
   } CHBIND;

typedef struct
   {
   char alias [180], name [180];
   } ALIAS;


//  IMESSAGE structure definition:
//  The IMESSAGE structure is used internally to represent messages
//  and pseudo-messages. This structure exactly parallels a structure
//  used in Pegasus Mail v3.x and later for the same purpose, and is
//  included in this way to allow maximum code portability between
//  the two.

typedef struct
   {
   INT_16 dsize;               //  The size of this data structure
   INT_16 mtype;               //  User-defined message type field
   UINT_32 flags;              //  First bank of message-related flags
   UINT_32 flags2;             //  Second bank of message-related flags
   char fname [14];            //  Recommended filename for message
   char from [42];             //  The sender of the message
   char subject [50];          //  Can you guess what this is?
   UCHAR cdate [8];            //  Timezone-corrected date from message
   UCHAR date [8];             //  Raw RFC822 time and date for message
   UINT_32 fsize;              //  Raw size of this message
   UINT_16 colour;             //  Display colour for this entry
   UINT_16 charset;            //  Character set for message
   char unique_id [34];        //  Unique ID for the message
   void *folder;               //  Currently unused in Mercury/32
   char filename [128];        //  The file containing the message data
   } IMESSAGE;

//  Explanation of fields:
//  "dsize"      The allocated size of this data structure
//  "mtype"      The user can define message types that can be used for sorting
//  "flags"      Can contain any of the flag values shown in Group 1 below
//  "flags2"     Can contain any of the flag values shown in Group 2 below
//  "fname"      Recommended filename for any storage to do with the message
//  "from"       Display version of sender's address
//  "subject"    Display version of message subject
//  "date"       The date as shown in the message's RFC822 "Date:" field
//  "cdate"      The date the message arrived at the local system.
//             - See below for more on the date format
//  "fsize"      Raw size of the message, including headers and formatting
//               Note - no allowance is made for CR/LF conversions.
//  "colour"     Index into colour table for message display colour
//  "charset"    Index into character set table for message charset format
//  "unique_id"  Guaranteed unique persistent global identifier for this message
//  "folder"     The folder in which this message is currently stored.
//
//  Date format: dates in IMESSAGEs use the NetWare 7-byte date format plus an
//  extra byte containing the offset in half-hour units from GMT. The date is
//  always pre-corrected to GMT by WinPMail. Note that byte 0 (the year) is
//  always the actual year - 1900, so the year 2000 is represented by 100.
//  The NetWare date format is as shown:
//
//    Byte 0  - Year - 1900 (i.e, 2005 = 105)
//    Byte 1  - Month (ie, January == 1)
//    Byte 2  - Day (1 .. 31)
//    Byte 3  - Hour (0 - 24)
//    Byte 4  - Minute (0 - 59)
//    Byte 5  - Second (0 - 60)
//    Byte 6  - Day of week (Sunday == 0)   ("255" == "not calculated")

//
//  Group 1 flag values - these can be used in an IMESSAGE "flags" field.
//
#define FILE_MAILED              1  // The message contains a mailed file
#define UUENCODED                2  // The message contains uuencoded data
#define FILE_ATTACHED    0x800003L  // Use this as an attachment mask.
#define ENCRYPTED                4  // The message is encrypted
#define EXPIRED                 16  // The message is past its expiry date
#define FILE_ASCII              32  // Flag in attachment to indicate ASCII file
#define HAS_BEEN_READ          128  // Hey, what do you know! It's been read!
#define ALTERNATIVE          0x100  // The message is Multipart/Alternative type
#define IS_HTML              0x200  // The message is Text/HTML type
#define IS_CIRCULAR          0x400  // The message is being circulated
#define CONFIRMATION        0x2000  // Sender wants confirmation of reading
#define FORWARD            0x8000L  // The message is being forwarded
#define IS_RTF            0x10000L  // Message contains MS-RTF data
#define COPYSELF          0x20000L  // The message is a copy to self
#define DELETED           0x40000L  // The message has been deleted.
#define MIME              0x80000L  // The message is a MIME transmission
#define REPLIED          0x100000L  // The message has been replied to.
#define FORWARDED        0x200000L  // The message has been forwarded.
#define URGENT           0x400000L  // The message is urgent/high priority.
#define BINHEX           0x800000L  // The message is a BinHex file
#define IS_MHS          0x1000000L  // The message originates from MHS
#define IS_SMTP         0x2000000L  // The message originated via SMTP
#define IS_ANNOTATED    0x4000000L  // The message has an annotation
#define ENCLOSURE       0x8000000L  // The message has an enclosure
#define HIGHLIGHTED    0x10000000L  // The message has transient significance
#define MIME_MULTI     0x20000000L  // The message is in MIME Multipart format
#define TEXT_ENRICHED  0x40000000L  // The message is in "text/enriched" format
#define READ_ONLY      0x80000000L  // The message may not be deleted

//
//  Group 2 flag values - these can be used in an IMESSAGE "flags2" field
//

#define IS_NEWMAIL               1  // The message is in the new mail folder
#define IS_NOTICE                2  // The message comes from a noticeboard
#define IS_TEMPORARY             4


//  MIME parsing definitions and structures

enum     //  Content dispositions
   {
   MD_ATTACHMENT, MD_INLINE
   };

enum     // The primary types
   {
   MP_TEXT, MP_MULTIPART, MP_MESSAGE, MP_APPLICATION,
   MP_IMAGE, MP_VIDEO, MP_AUDIO, MP_UNKNOWN
   };

enum     // TEXT subtypes
   {
   MPT_PLAIN, MPT_RICHTEXT, MPT_HTML, MPT_RTF, MPT_UNKNOWN
   };

enum     // MULTIPART subtypes
   {
   MPP_MIXED, MPP_ALTERNATIVE, MPP_DIGEST,
   MPP_PARALLEL, MPP_UNKNOWN
   };

enum     // MESSAGE subtypes
   {
   MPM_RFC822, MPM_PARTIAL, MPM_EXTERNAL_BODY, MPM_UNKOWN
   };

enum     // APPLICATION subtypes
   {
   MPA_OCTET_STREAM, MPA_POSTSCRIPT, MPA_ODA, MPA_BINHEX, MPA_UNKNOWN
   };

enum     // IMAGE subtypes
   {
   MPI_GIF, MPI_JPEG, MPI_UNKNOWN
   };

enum     // VIDEO subtypes
   {
   MPV_MPEG, MPV_UNKNOWN
   };

enum     // AUDIO subtypes
   {
   MPU_BASIC, MPU_UNKNOWN
   };

enum     // MIME transfer-encodings
   {
   //  Note that ME_BINHEX and ME_UUENCODE are handled as special
   //  cases and as such must always appear after ME_UNKNOWN.
   ME_7BIT, ME_8BIT, ME_QUOTED_PRINTABLE, ME_BASE64, ME_UNKNOWN,
   ME_BINHEX, ME_UUENCODE
   };

typedef struct
   {
   char charset [20];
   char *table;
   } MPT;

typedef struct
   {
   char boundary [71];
   LIST partlist;
   } MPP;

typedef struct
   {
   char fname [96];
   char type [20];
   } MPA;

typedef struct
   {
   int primary, secondary, encoding, disposition;
   char p_string [20], s_string [20];
   char description [48];
   char encryptor [16];    //  For encrypted attachments, the encryptor
   int encryptor_flags;
   int section;
   char fname [96];
   union
      {
      MPT mpt;
      MPP mpp;
      MPA mpa;
      IMESSAGE mpm;
      } d;
   } IMIME;


//**
//**  Section 4: Constants for message composition functions
//**

#define OM_M_8BIT 1

#define OM_MT_PLAIN 0         //  A simple, single-part text/plain message
#define OM_MT_MULTIPART 1     //  A multipart/mixed message
#define OM_MT_ALTERNATIVE 2   //  A multipart/alternative message
#define OM_MT_DIGEST 3        //  A multipart/digest type

#define OM_MF_TO 1            //  Set the master recipient of the message
#define OM_MF_SUBJECT 2       //  Set the subject field for the message
#define OM_MF_CC 3            //  Set the secondary recipients of the message
#define OM_MF_FROM 4          //  Set the originator of the message.
#define OM_MF_BODY 5          //  Set the filename containing the message body
#define OM_MF_RAW  6          //  Add a raw header for the message.
#define OM_MF_FLAGS 7         //  Set the message's "flags" field

#define OM_AE_DEFAULT 0       //  Default encoding (MIME BASE64 encoding)
#define OM_AE_TEXT 1          //  Simple textual data, unencoded
#define OM_AE_UUENCODE 2      //  Uuencoding
#define OM_AE_BINHEX 3        //  Macintosh Binhex format (data fork only)

#define OM_AF_INLINE 1        //  Write the file as a simple textual section
#define OM_AF_MESSAGE 2       //  Write the message as a Message/RFC822 part


//**
//**  Section 5: Protocol Module parameter block definition;
//**  Daemons are passed a Protocol Module parameter block.
//**

#define GV_QUEUENAME 1
#define GV_SMTPQUEUENAME 2
#define GV_MYNAME 3
#define GV_TTYFONT 4
#define GV_MAISERNAME 5
#define GV_FRAMEWINDOW 6
#define GV_SYSFONT 7
#define GV_BASEDIR 8
#define GV_SCRATCHDIR 9

#define SYSTEM_PASSWORD 1
#define APOP_SECRET 2
#define PASSWD_MUST_EXIST 256

//  Messages that protocol modules can send using the
//  "mercury_command" function in the protocol parameter block

//  GET_MODULE_INTERFACE:
//    - "parm1" - char * pointer to name of module to locate
//    - Returns: the command interface function for the module, or NULL
#define GET_MODULE_INTERFACE 1

//  ADD_ALIAS
//    - "parm1" - char * pointer to alias to add
//      "parm2" - char * pointer to real-world address string
//    - Returns: NZ on success, 0 on failure
#define ADD_ALIAS 2

//  DELETE_ALIAS
//    - "parm1" - char * pointer to alias field of alias to delete
//      Returns: NZ on success, 0 on failure
#define DELETE_ALIAS 3

//  RESOLVE_ALIAS
//    - "parm1" - char * pointer to buffer to receive address (180 char min)
//      "parm2" - char * pointer to alias to resolve
//    - Returns: NZ if a match was found, 0 if none was found.
#define RESOLVE_ALIAS 4

//  RESOLVE_SYNONYM
//    - "parm1" - char * pointer to buffer to receive address (180 char min)
//      "parm2" - char * pointer to synonym to resolve
//    - Returns: NZ if a match was found, 0 if none was found
#define RESOLVE_SYNONYM 5

//  QUEUE_STATE - enable or disable queue processing
//    - "parm1" - 0 to query current state, 1 to set state
//      "parm2" - 1 to pause processing, 0 to enable it
//    - Returns:  The state of queue processing prior to the call
#define QUEUE_STATE 6

//  DISPLAY_HELP
//    - "parm1" - section number in MERCURY.HLP
//      "parm2" - unused, must be 0
//    - Returns:  Nothing.
#define DISPLAY_HELP 512

#define NOT_IMPLEMENTED 0xF0000000L

#define RFC_822_TIME 0
#define RFC_821_TIME 1

typedef DWORD (*GET_VARIABLE) (int index);
typedef int (*IS_LOCAL_ADDRESS) (char *address, char *uic, char *server);
typedef int (*GET_DELIVERY_PATH) (char *path, char *username, char *host);

typedef int (*IS_GROUP) (char *address, char *host, char *groupname);
typedef int (*PARSE_ADDRESS) (char *target, char *source, int limit);
typedef int (*EXTRACT_ONE_ADDRESS) (char *dest, char *source, int offset);
typedef void (*EXTRACT_CQTEXT) (char *dest, char *source, int len);
typedef int (*DLIST_INFO) (DLIST *dlist, char *lname, int num, char *address,
   char *errbuf, LIST *modlist);
typedef void (*SEND_NOTIFICATION) (char *username, char *host, char *message);
typedef int (*GET_DATE_AND_TIME) (BYTE *tm);
typedef INT_32 (*VERIFY_PASSWORD) (char *username, char *host,
   char *password, INT_32 select);
typedef int (*WRITE_PROFILE) (char *section, char *fname);
typedef int (*MODULE_STATE) (char *modname, int set_value, int state);

//  Job control functions

typedef void * (*JI_SCAN_FIRST_JOB) (int type, int mode, void **data);
typedef void * (*JI_SCAN_NEXT_JOB) (void **data);
typedef void (*JI_END_SCAN) (void **data);

typedef int (*JI_OPEN_JOB) (void *jobhandle);
typedef int (*JI_CLOSE_JOB) (void *jobhandle);
typedef void (*JI_REWIND_JOB) (void *jobhandle, int flags);
typedef int (*JI_DISPOSE_JOB) (void *jobhandle);
typedef int (*JI_PROCESS_JOB) (void *jobhandle);
typedef int (*JI_DELETE_JOB) (void *jobhandle);
typedef int (*JI_ABORT_JOB) (void *jobhandle, int fatal);
typedef int (*JI_GET_JOB_INFO) (void *jobhandle, JOBINFO *ji);

typedef void * (*JI_CREATE_JOB) (int type, char *from,
   unsigned char *start_time);
typedef int (*JI_ADD_ELEMENT) (void *jobhandle, char *address);
typedef int (*JI_ADD_DATA) (void *jobhandle, char *data);
typedef char * (*JI_GET_DATA) (void *jobhandle, char *buffer, int buflen);

typedef char * (*JI_GET_NEXT_ELEMENT) (void *jobhandle, int type, JOBINFO *job);
typedef int (*JI_SET_JOB_FLAGS) (void *jobhandle, long flags);
typedef int (*JI_SET_ELEMENT_STATUS) (void *jobhandle, int mode,
   unsigned char *date);
typedef int (*JI_SET_ELEMENT_RESOLVINFO) (void *jobhandle, char *ip1, char *ip2,
   char *ip3, char *ip4);

typedef int (*JI_SET_DIAGNOSTICS) (void *jobhandle, int forwhat, char *text);
typedef int (*JI_GET_DIAGNOSTICS) (void *jobhandle, int forwhat, char *fname);

typedef void (*JI_INCREMENT_TIME) (unsigned char *tm, unsigned int secs);

typedef long (*JI_TELL) (void *jobhandle, int selector);
typedef int (*JI_SEEK) (void *jobhandle, long ofs, int selector);

typedef void * (*JI_GET_JOB_BY_ID) (char *id);
typedef int (*JI_GET_JOB_TIMES) (void *job, char *submitted, char *ready);

//  MNICA functions

typedef int (*GET_FIRST_GROUP_MEMBER) (char *group, char *host, char *member,
   int mlen, void **data);
typedef int (*GET_NEXT_GROUP_MEMBER) (char *member, int mlen, void **data);
typedef int (*END_GROUP_SCAN) (void **data);
typedef int (*IS_VALID_LOCAL_USER) (char *address, char *username, char *host);
typedef int (*IS_GROUP_MEMBER) (char *host, char *username, char *groupname);
typedef int (*GET_FIRST_USER_DETAILS) (char *host, char *match, char *username,
   int ulen, char *address, int alen, char *fullname, int flen, void **data);
typedef int (*GET_NEXT_USER_DETAILS) (char *username, int ulen, char *address,
   int alen, char *fullname, int flen, void **data);
typedef int (*GET_USER_DETAILS) (char *host, char *match, char *username, int ulen,
   char *address, int alen, char *fullname, int flen);
typedef int (*END_USER_SCAN) (void **data);
typedef void (*READ_PMPROP) (char *userid, char *server, PMPROP *p);
typedef int (*CHANGE_OWNERSHIP) (char *fname, char *host, char *newowner);
typedef int (*BEGIN_SINGLE_DELIVERY) (char *uic, char *server, void **data);
typedef void (*END_SINGLE_DELIVERY) (void **data);

//  Miscellaneous functions - Mercury 2.11 and later only

typedef DWORD (*MERCURY_COMMAND) (DWORD selector, DWORD parm1, DWORD parm2);
typedef char * (*GET_DATE_STRING) (int dtype, char *buf, BYTE *date);
typedef char * (*RFC822_TIME) (char *buffer);
typedef char * (*RFC821_TIME) (char *buffer);

//  File I/O and parsing functions - Mercury 2.15 and later only

typedef INT_32 (*FM_OPEN_FILE) (char *path, UINT_32 flags);
typedef INT_32 (*FM_OPEN_MESSAGE) (IMESSAGE *im, UINT_32 flags);
typedef int (*FM_CLOSE_MESSAGE) (INT_32 id);
typedef char * (*FM_GETS) (char *buf, INT_32 max, INT_32 id);
typedef INT_16 (*FM_GETC) (INT_32 id);
typedef void (*FM_UNGETC) (INT_16 c, INT_32 id);
typedef INT_32 (*FM_READ) (INT_32 id, char *buffer, INT_32 bufsize);
typedef INT_32 (*FM_GETPOS) (INT_32 fil);
typedef INT_16 (*FM_SETPOS) (INT_32 fil, INT_32 offset);
typedef INT_32 (*FM_GET_FOLDED_LINE) (INT_32 fil, char *line, int limit);
typedef char * (*FM_FIND_HEADER) (INT_32 fil, char *name, char *buf, int len);
typedef int (*FM_EXTRACT_MESSAGE) (void *job, char *fname, int flags);

typedef int (*PARSE_HEADER) (INT_32 fil, IMESSAGE *m);
typedef int (*MIME_PREP_MESSAGE) (INT_32 fil, char *fname, int headers);
typedef int (*PARSE_MIME) (INT_32 fil, IMIME *m);
typedef void (*FREE_MIME) (IMIME *m);
typedef int (*FAKE_IMESSAGE) (IMESSAGE *im, char *dest, char *src,
   IMIME *m, char *boundary);
typedef int (*DECODE_MIME_HEADER) (char *dest, char *src);
typedef int (*ENCODE_MIME_HEADER) (char *dest, char *src, int raw);

typedef void * (*OM_CREATE_MESSAGE) (UINT_32 mtype, UINT_32 flags);
typedef INT_32 (*OM_DISPOSE_MESSAGE) (void *mhandle);
typedef INT_32 (*OM_ADD_FIELD) (void *mhandle, UINT_32 selector, char *data);
typedef INT_32 (*OM_ADD_ATTACHMENT) (void *mhandle, char *fname, char *ftype,
   char *description, UINT_32 encoding, UINT_32 flags, void *reserved);
typedef INT_32 (*OM_WRITE_MESSAGE) (void *mhandle, char *fname);
typedef void * (*OM_SEND_MESSAGE) (void *mhandle, char *envelope);

typedef int (*ENCODE_BASE64_STR) (char *dest, char *src, int srclen);
typedef int (*DECODE_BASE64_STR) (char *dest, char *src, char *table);

typedef INT_32 (*ST_REGISTER_MODULE) (char *module_name);
typedef INT_32 (*ST_UNREGISTER_MODULE) (INT_32 mhandle);
typedef INT_32 (*ST_CREATE_CATEGORY) (INT_32 mhandle, char *cname,
   INT_32 ctag, INT_32 ctype, INT_32 dlen, UINT_32 flags);
typedef INT_32 (*ST_REMOVE_CATEGORY) (INT_32 mhandle, UINT_32 ctag);
typedef INT_32 (*ST_SET_HCATEGORY) (INT_32 chandle, UINT_32 data);
typedef INT_32 (*ST_SET_CATEGORY) (INT_32 mhandle, INT_32 ctag, UINT_32 data);

typedef void (*LOGSTRING) (INT_16 ltype, INT_16 priority, char *str);
typedef void (*LOGDATA) (INT_16 ltype, INT_16 priority, char *fmt, ...);

typedef INT_32 (*CREATE_OBJECT) (char *objectname, INT_32 objecttype,
   char *id, INT_32 flags);
typedef INT_32 (*SET_PASSWORD) (char *username, char *host, char *newpassword,
   char *oldpassword, INT_32 select);

typedef INT_32 (*ST_GET_NEXT_MODULE) (INT_32 mhandle, char *modname);
typedef INT_32 (*ST_GET_NEXT_CATEGORY) (INT_32 mhandle, INT_32 chandle,
   char *cname, INT_32 *ctype, INT_32 *clen, INT_32 *cflags);
typedef INT_32 (*ST_GET_CATEGORY_DATA) (INT_32 chandle, void *data);
typedef INT_32 (*ST_EXPORT_STATS) (INT_32 mhandle, char *fname, UINT_32 flags);

typedef INT_32 (*SELECT_PRINTER) (char *devicename, int maxlen);
typedef INT_32 (* PRINT_FILE) (char *fname, char *printername, UINT_32 flags,
   INT_32 lrmargin, INT_32 tbmargin, char *title, char *username, char *fontname,
   INT_32 fontsize);

typedef struct
   {
   long dsize;                              //  Size of this structure
   char vmajor, vminor;
   HWND hMDIParent;
   GET_VARIABLE get_variable;
   IS_LOCAL_ADDRESS is_local_address;
   IS_GROUP is_group;
   PARSE_ADDRESS parse_address;
   EXTRACT_ONE_ADDRESS extract_one_address;
   EXTRACT_CQTEXT extract_cqtext;
   DLIST_INFO dlist_info;
   SEND_NOTIFICATION send_notification;
   GET_DELIVERY_PATH get_delivery_path;
   GET_DATE_AND_TIME get_date_and_time;
   VERIFY_PASSWORD verify_password;
   WRITE_PROFILE write_profile;
   MODULE_STATE module_state;

   //  Job control functions

   JI_SCAN_FIRST_JOB ji_scan_first_job;
   JI_SCAN_NEXT_JOB ji_scan_next_job;
   JI_END_SCAN ji_end_scan;
   JI_OPEN_JOB ji_open_job;
   JI_CLOSE_JOB ji_close_job;
   JI_REWIND_JOB ji_rewind_job;
   JI_DISPOSE_JOB ji_dispose_job;
   JI_PROCESS_JOB ji_process_job;
   JI_DELETE_JOB ji_delete_job;
   JI_ABORT_JOB ji_abort_job;
   JI_GET_JOB_INFO ji_get_job_info;
   JI_CREATE_JOB ji_create_job;
   JI_ADD_ELEMENT ji_add_element;
   JI_ADD_DATA ji_add_data;
   JI_GET_DATA ji_get_data;
   JI_GET_NEXT_ELEMENT ji_get_next_element;
   JI_SET_ELEMENT_STATUS ji_set_element_status;
   JI_SET_ELEMENT_RESOLVINFO ji_set_element_resolvinfo;
   JI_SET_DIAGNOSTICS ji_set_diagnostics;
   JI_GET_DIAGNOSTICS ji_get_diagnostics;
   JI_INCREMENT_TIME ji_increment_time;

   //  MNICA (Network interface) functions

   GET_FIRST_GROUP_MEMBER get_first_group_member;
   GET_NEXT_GROUP_MEMBER get_next_group_member;
   END_GROUP_SCAN end_group_scan;
   IS_VALID_LOCAL_USER is_valid_local_user;
   IS_GROUP_MEMBER is_group_member;
   GET_FIRST_USER_DETAILS get_first_user_details;
   GET_NEXT_USER_DETAILS get_next_user_details;
   GET_USER_DETAILS get_user_details;
   END_USER_SCAN end_user_scan;
   READ_PMPROP read_pmprop;
   CHANGE_OWNERSHIP change_ownership;
   BEGIN_SINGLE_DELIVERY begin_single_delivery;
   END_SINGLE_DELIVERY end_single_delivery;

   //  Miscellaneous functions

   MERCURY_COMMAND mercury_command;
   GET_DATE_STRING get_date_string;
   RFC822_TIME rfc822_time;
   RFC821_TIME rfc821_time;

   //  File parsing and I/O functions

   FM_OPEN_FILE fm_open_file;
   FM_OPEN_MESSAGE fm_open_message;
   FM_CLOSE_MESSAGE fm_close_message;
   FM_GETS fm_gets;
   FM_GETC fm_getc;
   FM_UNGETC fm_ungetc;
   FM_READ fm_read;
   FM_GETPOS fm_getpos;
   FM_SETPOS fm_setpos;
   FM_GET_FOLDED_LINE fm_get_folded_line;
   FM_FIND_HEADER fm_find_header;
   FM_EXTRACT_MESSAGE fm_extract_message;

   PARSE_HEADER parse_header;
   MIME_PREP_MESSAGE mime_prep_message;
   PARSE_MIME parse_mime;
   FREE_MIME free_mime;
   FAKE_IMESSAGE fake_imessage;
   DECODE_MIME_HEADER decode_mime_header;
   ENCODE_MIME_HEADER encode_mime_header;

   OM_CREATE_MESSAGE om_create_message;
   OM_DISPOSE_MESSAGE om_dispose_message;
   OM_ADD_FIELD om_add_field;
   OM_ADD_ATTACHMENT om_add_attachment;
   OM_WRITE_MESSAGE om_write_message;
   OM_SEND_MESSAGE om_send_message;

   ENCODE_BASE64_STR encode_base64_str;
   DECODE_BASE64_STR decode_base64_str;

   ST_REGISTER_MODULE st_register_module;
   ST_UNREGISTER_MODULE st_unregister_module;
   ST_CREATE_CATEGORY st_create_category;
   ST_REMOVE_CATEGORY st_remove_category;
   ST_SET_HCATEGORY st_set_hcategory;
   ST_SET_CATEGORY st_set_category;

   JI_TELL ji_tell;
   JI_SEEK ji_seek;
   JI_SET_JOB_FLAGS ji_set_job_flags;

   LOGSTRING logstring;
   LOGDATA logdata;

   CREATE_OBJECT create_object;
   SET_PASSWORD set_password;

   ST_GET_NEXT_MODULE st_get_next_module;
   ST_GET_NEXT_CATEGORY st_get_next_category;
   ST_GET_CATEGORY_DATA st_get_category_data;
   ST_EXPORT_STATS st_export_stats;

   JI_GET_JOB_BY_ID ji_get_job_by_id;
   JI_GET_JOB_TIMES ji_get_job_times;

   SELECT_PRINTER select_printer;
   PRINT_FILE print_file;
   } M_INTERFACE;


#ifdef USES_M_INTERFACE

//  Convenience macros: allow calls to internal Mercury functions to
//  be made in the same way as they would be in the core code (good
//  for portability).

//  Values for the "flags" field of print_file

#define PRT_MESSAGE 1         //  Print as an RFC822 message
#define PRT_REFORMAT 2        //  Reformat long lines when printing
#define PRT_TIDY 4            //  Print only "important" headers
#define PRT_FOOTER 8          //  Print a footer on each page
#define PRT_NOHEADERS 16      //  Print no message headers
#define PRT_FIRSTONLY 32      //  Print only first line of headers
#define PRT_ITALICS 64        //  Print quoted text in italics

extern M_INTERFACE *mi;

#define get_variable(x) (mi->get_variable (x))
#define is_local_address(a,u,s) (mi->is_local_address (a, u, s))
#define is_group(a,h,g) (mi->is_group (a, h, g))
#define parse_address(t,s,l) (mi->parse_address (t, s, l))
#define extract_one_address(d,s,o) (mi->extract_one_address (d, s, o))
#define extract_cqtext(d,s,l) (mi->extract_cqtext (d, s, l))
#define dlist_info(d,l,n,a,e,m) (mi->dlist_info(d, l, n, a, e, m))
#define send_notification(u,h,m) (mi->send_notification (u, h, m))
#define get_delivery_path(p,u,h) (mi->get_delivery_path (p, u, h))
#define get_date_and_time(b) (mi->get_date_and_time (b))
#define verify_password(u,s,p,e) (mi->verify_password (u, s, p, e))
#define write_profile(s,f) (mi->write_profile (s, f))
#define module_state(m,v,s) (mi->module_state (m, v, s))

#define ji_scan_first_job(t,m,d) (mi->ji_scan_first_job (t,m,d))
#define ji_scan_next_job(d) (mi->ji_scan_next_job (d))
#define ji_end_scan(d) (mi->ji_end_scan (d))
#define ji_open_job(j) (mi->ji_open_job (j))
#define ji_close_job(j) (mi->ji_close_job (j))
#define ji_rewind_job(j,f) (mi->ji_rewind_job (j,f))
#define ji_dispose_job(j) (mi->ji_dispose_job (j))
#define ji_process_job(j) (mi->ji_process_job (j))
#define ji_delete_job(j) (mi->ji_delete_job (j))
#define ji_abort_job(j,f) (mi->ji_abort_job (j, f))
#define ji_get_job_info(j,i) (mi->ji_get_job_info (j, i))
#define ji_create_job(t,f,s) (mi->ji_create_job (t,f,s))
#define ji_add_element(j,a) (mi->ji_add_element (j,a))
#define ji_add_data(j,d) (mi->ji_add_data (j,d))
#define ji_get_data(j,b,l) (mi->ji_get_data (j,b,l))
#define ji_get_next_element(j,t,i) (mi->ji_get_next_element (j,t,i))
#define ji_set_element_status(j,m,d) (mi->ji_set_element_status (j,m,d))
#define ji_set_element_resolvinfo(j,k,l,m,n) (mi->ji_set_element_resolvinfo (j,k,l,m,n))
#define ji_set_diagnostics(j,w,t) (mi->ji_set_diagnostics (j,w,t))
#define ji_get_diagnostics(j,w,f) (mi->ji_get_diagnostics (j,w,f))
#define ji_increment_time(t,s) (mi->ji_increment_time (t,s))
#define ji_tell(j,s) (mi->ji_tell (j,s))
#define ji_seek(j,o,s) (mi->ji_seek(j,o,s))
#define ji_set_job_flags(j,f) (mi->ji_set_job_flags(j,f))
#define ji_get_job_by_id(i) (mi->ji_get_job_by_id(i))
#define ji_get_job_times(j,s,r) (mi->ji_get_job_times(j,s,r))

#define get_first_group_member(g,h,m,l,d) (mi->get_first_group_member(g,h,m,l,d))
#define get_next_group_member(m,l,d) (mi->get_next_group_member(m,l,d))
#define end_group_scan(d) (mi->end_group_scan(d))
#define is_valid_local_user(a,u,h) (mi->is_valid_local_user(a,u,h))
#define is_group_member(h,u,g) (mi->is_group_member(h,u,g))
#define get_first_user_details(h,n,u,ul,a,al,f,fl,d) (mi->get_first_user_details(h,n,u,ul,a,al,f,fl,d))
#define get_next_user_details(u,ul,a,al,f,fl,d) (mi->get_next_user_details(u,ul,a,al,f,fl,d))
#define get_user_details(h,m,u,ul,a,al,f,fl) (mi->get_user_details(h,m,u,ul,a,al,f,fl))
#define end_user_scan(d) (mi->end_user_scan(d))
#define read_pmprop(u,s,p) (mi->read_pmprop(u,s,p))
#define change_ownership(f,h,n) (mi->change_ownership(f,h,n))
#define begin_single_delivery(u,s,d) (mi->begin_single_delivery(u,s,d))
#define end_single_delivery(d) (mi->end_single_delivery(d))

#define mercury_command(s,p1,p2) (mi->mercury_command(s,p1,p2))
#define get_date_string(s,b,d) (mi->get_date_string(s,b,d))
#define rfc822_time(s) (mi->rfc822_time(s))
#define rfc821_time(s) (mi->rfc821_time(s))

#define fm_open_file(p,f) (mi->fm_open_file(p,f))
#define fm_open_message(i,f) (mi->fm_open_message(i,f))
#define fm_close_message(i) (mi->fm_close_message(i))
#define fm_gets(b,m,i) (mi->fm_gets(b,m,i))
#define fm_getc(i) (mi->fm_getc(i))
#define fm_ungetc(c,i) (mi->fm_ungetc(c,i))
#define fm_read(i,b,s) (mi->fm_read(i,b,s))
#define fm_getpos(f) (mi->fm_getpos(f))
#define fm_setpos(f,o) (mi->fm_setpos(f,o))
#define fm_get_folded_line(f,l,x) (mi->fm_get_folded_line(f,l,x))
#define fm_find_header(i,n,b,l) (mi->fm_find_header(i,n,b,l))
#define fm_extract_message(j,n,f) (mi->fm_extract_message(j,n,f))

#define parse_header(f,m) (mi->parse_header(f,m))
#define mime_prep_message(i,f,h) (mi->mime_prep_message(i,f,h))
#define parse_mime(i,m) (mi->parse_mime(i,m))
#define free_mime(m) (mi->free_mime(m))
#define fake_imessage(i,s,m,e,b) (mi->fake_imessage(i,s,m,e,b))
#define decode_mime_header(d,s) (mi->decode_mime_header(d,s))
#define encode_mime_header(d,s,r) (mi->encode_mime_header(d,s,r))

#define om_create_message(m,f) (mi->om_create_message(m,f))
#define om_dispose_message(m) (mi->om_dispose_message(m))
#define om_add_field(m,s,d) (mi->om_add_field(m,s,d))
#define om_add_attachment(m,f,t,d,e,g,r) (mi->om_add_attachment(m,f,t,d,e,g,r))
#define om_write_message(m,f) (mi->om_write_message(m,f))
#define om_send_message(m,e) (mi->om_send_message(m,e))

#define encode_base64_str(d,s,l) (mi->encode_base64_str(d,s,l))
#define decode_base64_str(d,s,t) (mi->decode_base64_str(d,s,t))

#define st_register_module(m) (mi->st_register_module(m))
#define st_unregister_module(h) (mi->st_unregister_module(h))
#define st_create_category(m,c,t,y,l,f) (mi->st_create_category(m,c,t,y,l,f))
#define st_remove_category(m,c) (mi->st_remove_category(m,c))
#define st_set_hcategory(c,d) (mi->st_set_hcategory(c,d))
#define st_set_category(m,c,d) (mi->st_set_category(m,c,d))

#define logstring(l,p,s) (mi->logstring(l,p,s))
// "logdata" has variable parameters and cannot be accessed via a macro

#define create_object(n,t,i,f) (mi->create_object(n,t,i,f))
#define set_password(u,h,n,o,s) (mi->set_password(u,h,n,o,s))

#define st_get_next_module(m,n) (mi->st_get_next_module(m,n))
#define st_get_next_category(m,h,c,t,l,f) (mi->st_get_next_category(m,h,c,t,l,f))
#define st_get_category_data(c,d) (mi->st_get_category_data(c,d))
#define st_export_stats(m,f,l) (mi->st_export_stats(m,f,l))

#define select_printer(d,m) (mi->select_printer(d,m))
#define print_file(f,p,l,m,b,t,u,n,z) (mi->print_file(f,p,l,m,b,t,u,n,z))

#endif  //  USES_M_INTERFACE

#ifdef __cplusplus
};
#endif

#endif  //  _DAEMON_H


Youez - 2016 - github.com/yon3zu
LinuXploit