From b0d3c2e4da9c9042e41eff14d6daa4cdf4f8350c Mon Sep 17 00:00:00 2001
From: Sergey Poznyakoff <gray@Pirx.gnu.org.ua>
Date: Fri, 12 Jun 2009 23:37:53 +0300
Subject: [PATCH] Keep a pool of sockmap connections.

This patch eliminates the sockmap bottleneck by
keeping a pool of open sockmap connections. The
sockmaps in the pool can be queried in parallel.

* include/sm/map.h (SMPO_MIN_OCONN, SMPO_MAX_OCONN)
(SMPO_IDLE): New constants.
* include/sm/mapcnf.h (struct mst_socket_S): New
members: mst_socket_min_oconn and mst_socket_max_oconn.
* include/sm/mapcnfdef.h (mst_socket_defs): Handle new
keywords: min_connections, max_connections and timeout.
* libsmmap/t-sockmap-1.c: New file.
* libsmmap/Makefile.am (TESTC): Add t-sockmapr-1
* libsmmap/mapconfopen.c (sm_mapconfopen): Initialize SMPO_MIN_OCONN
and SMPO_MAX_OCONN.
* libsmmap/sockmap.c: Rewrite to keep a pool of sockmap connections.
* libsmmap/sockmapimpl.c: Likewise.
* libsmmap/sockmap.h (struct sm_sockmap_instance_S): New structure.
(struct sm_sockmap_S): Remove sockmap_fp. Add sockmap_lock,
sockmap_inst, sockmap_min, sockmap_max and sockmap_idle.
---
 doc/README.dvi         |  Bin 290916 -> 0 bytes
 doc/README.ps          |10229 ------------------------------------------------
 doc/README.txt         | 4723 ----------------------
 include/sm/map.h       |    7 +
 include/sm/mapcnf.h    |    2 +
 include/sm/mapcnfdef.h |   18 +
 libsmmap/Makefile.am   |    7 +
 libsmmap/mapconfopen.c |    2 +
 libsmmap/sockmap.c     |   97 +-
 libsmmap/sockmap.h     |   17 +-
 libsmmap/sockmapimpl.c |  465 ++-
 libsmmap/t-sockmap-1.c |  264 ++
 12 files changed, 683 insertions(+), 15148 deletions(-)
 delete mode 100644 doc/README.dvi
 delete mode 100644 doc/README.ps
 delete mode 100644 doc/README.txt
 create mode 100644 libsmmap/t-sockmap-1.c

diff --git a/doc/README.dvi b/doc/README.dvi
deleted file mode 100644
index 8da450a91621f4b3455819a31410cdf840c1cf0a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 290916
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
McKV|=U(rARFORVE3;+NC

diff --git a/doc/README.ps b/doc/README.ps
deleted file mode 100644
index 3439a24..0000000
--- a/doc/README.ps
+++ /dev/null
@@ -1,10229 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
-%%Title: README.dvi
-%%Pages: 87
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%DocumentFonts: CMR17 CMR12 CMBX12 CMBX10 CMR10 CMTT10 CMR7 CMR6 CMR8
-%%+ CMTI8 NewCenturySchlbk-Roman Courier Times-Roman CMTT8 CMTI10 CMSY10
-%%+ CMMI10 CMTT12
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -f README.dvi
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2009.06.02:0823
-%%BeginProcSet: texc.pro
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: f7b6d320.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10
-%     cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8
-%     cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10
-%     cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10
-%
-/TeXf7b6d320Encoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
-/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
-/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
-/suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand
-/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
-/period /slash /zero /one /two /three /four /five /six /seven /eight
-/nine /colon /semicolon /exclamdown /equal /questiondown /question /at
-/A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X
-/Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
-/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
-/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
-/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
-/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
-/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: 09fbbfac.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9
-/TeX09fbbfacEncoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
-/Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown
-/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla
-/germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam
-/quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft
-/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
-/two /three /four /five /six /seven /eight /nine /colon /semicolon /less
-/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N
-/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright
-/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l
-/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
-/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi
-/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown
-/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
-/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
-/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: 74afc74c.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10
-%
-/TeX74afc74cEncoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
-/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
-/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
-/suppress /exclam /quotedblright /numbersign /sterling /percent
-/ampersand /quoteright /parenleft /parenright /asterisk /plus /comma
-/hyphen /period /slash /zero /one /two /three /four /five /six /seven
-/eight /nine /colon /semicolon /exclamdown /equal /questiondown /question
-/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
-/X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
-/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
-/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
-/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
-/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
-/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: 8r.enc
-% File  8r.enc as of 2002-03-12 for PSNFSS 9
-%
-% This is the encoding vector for Type1 and TrueType fonts to be used
-% with TeX.  This file is part of the PSNFSS bundle, version 9
-% 
-% Authors: S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry, W. Schmidt
-%
-% Idea is to have all the characters normally included in Type 1 fonts
-% available for typesetting. This is effectively the characters in Adobe
-% Standard Encoding + ISO Latin 1 + extra characters from Lucida + Euro.
-% 
-% Character code assignments were made as follows:
-% 
-% (1) the Windows ANSI characters are almost all in their Windows ANSI
-% positions, because some Windows users cannot easily reencode the
-% fonts, and it makes no difference on other systems. The only Windows
-% ANSI characters not available are those that make no sense for
-% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
-% (173). quotesingle and grave are moved just because it's such an
-% irritation not having them in TeX positions.
-% 
-% (2) Remaining characters are assigned arbitrarily to the lower part
-% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
-% 
-% (3) Y&Y Lucida Bright includes some extra text characters; in the
-% hopes that other PostScript fonts, perhaps created for public
-% consumption, will include them, they are included starting at 0x12.
-% 
-% (4) Remaining positions left undefined are for use in (hopefully)
-% upward-compatible revisions, if someday more characters are generally
-% available.
-% 
-% (5) hyphen appears twice for compatibility with both ASCII and Windows.
-%
-% (6) /Euro is assigned to 128, as in Windows ANSI
-% 
-/TeXBase1Encoding [
-% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
-  /.notdef /dotaccent /fi /fl
-  /fraction /hungarumlaut /Lslash /lslash
-  /ogonek /ring /.notdef
-  /breve /minus /.notdef 
-% These are the only two remaining unencoded characters, so may as
-% well include them.
-  /Zcaron /zcaron 
-% 0x10
- /caron /dotlessi 
-% (unusual TeX characters available in, e.g., Lucida Bright)
- /dotlessj /ff /ffi /ffl 
- /.notdef /.notdef /.notdef /.notdef
- /.notdef /.notdef /.notdef /.notdef
- % very contentious; it's so painful not having quoteleft and quoteright
- % at 96 and 145 that we move the things normally found there down to here.
- /grave /quotesingle 
-% 0x20 (ASCII begins)
- /space /exclam /quotedbl /numbersign
- /dollar /percent /ampersand /quoteright
- /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
-% 0x30
- /zero /one /two /three /four /five /six /seven
- /eight /nine /colon /semicolon /less /equal /greater /question
-% 0x40
- /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
-% 0x50
- /P /Q /R /S /T /U /V /W
- /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
-% 0x60
- /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
-% 0x70
- /p /q /r /s /t /u /v /w
- /x /y /z /braceleft /bar /braceright /asciitilde
- /.notdef % rubout; ASCII ends
-% 0x80
- /Euro /.notdef /quotesinglbase /florin
- /quotedblbase /ellipsis /dagger /daggerdbl
- /circumflex /perthousand /Scaron /guilsinglleft
- /OE /.notdef /.notdef /.notdef
-% 0x90
- /.notdef /.notdef /.notdef /quotedblleft
- /quotedblright /bullet /endash /emdash
- /tilde /trademark /scaron /guilsinglright
- /oe /.notdef /.notdef /Ydieresis
-% 0xA0
- /.notdef % nobreakspace
- /exclamdown /cent /sterling
- /currency /yen /brokenbar /section
- /dieresis /copyright /ordfeminine /guillemotleft
- /logicalnot
- /hyphen % Y&Y (also at 45); Windows' softhyphen
- /registered
- /macron
-% 0xD0
- /degree /plusminus /twosuperior /threesuperior
- /acute /mu /paragraph /periodcentered
- /cedilla /onesuperior /ordmasculine /guillemotright
- /onequarter /onehalf /threequarters /questiondown
-% 0xC0
- /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
- /Egrave /Eacute /Ecircumflex /Edieresis
- /Igrave /Iacute /Icircumflex /Idieresis
-% 0xD0
- /Eth /Ntilde /Ograve /Oacute
- /Ocircumflex /Otilde /Odieresis /multiply
- /Oslash /Ugrave /Uacute /Ucircumflex
- /Udieresis /Yacute /Thorn /germandbls
-% 0xE0
- /agrave /aacute /acircumflex /atilde
- /adieresis /aring /ae /ccedilla
- /egrave /eacute /ecircumflex /edieresis
- /igrave /iacute /icircumflex /idieresis
-% 0xF0
- /eth /ntilde /ograve /oacute
- /ocircumflex /otilde /odieresis /divide
- /oslash /ugrave /uacute /ucircumflex
- /udieresis /yacute /thorn /ydieresis
-] def
-
-%%EndProcSet
-%%BeginProcSet: bbad153f.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9
-%
-/TeXbbad153fEncoding [
-/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
-/plusminus /minusplus /circleplus /circleminus /circlemultiply
-/circledivide /circledot /circlecopyrt /openbullet /bullet
-/equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal
-/greaterequal /precedesequal /followsequal /similar /approxequal
-/propersubset /propersuperset /lessmuch /greatermuch /precedes /follows
-/arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast
-/arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup
-/arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional
-/prime /infinity /element /owner /triangle /triangleinv /negationslash
-/mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur
-/latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K
-/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection
-/unionmulti /logicaland /logicalor /turnstileleft /turnstileright
-/floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright
-/angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv
-/backslash /wreathproduct /radical /coproduct /nabla /integral
-/unionsq /intersectionsq /subsetsqequal /supersetsqequal /section
-/dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
-/plusminus /minusplus /circleplus /circleminus /.notdef /.notdef
-/circlemultiply /circledivide /circledot /circlecopyrt /openbullet
-/bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset
-/lessequal /greaterequal /precedesequal /followsequal /similar
-/approxequal /propersubset /propersuperset /lessmuch /greatermuch
-/precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: aae443f0.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9 cmmib10
-%
-/TeXaae443f0Encoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
-/alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa
-/lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi
-/omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf
-/arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft
-/arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle
-/twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle
-/sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash
-/greater /star /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N
-/O /P /Q /R /S /T /U /V /W /X /Y /Z /flat /natural /sharp /slurbelow
-/slurabove /lscript /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p
-/q /r /s /t /u /v /w /x /y /z /dotlessi /dotlessj /weierstrass /vector
-/tie /psi /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
-/.notdef /.notdef /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta
-/theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon
-/phi /chi /psi /tie /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: texps.pro
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginProcSet: special.pro
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
-@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
-savematrix setmatrix}N end
-
-%%EndProcSet
-%%BeginFont: CMTT12
-%!PS-AdobeFont-1.1: CMTT12 1.0
-%%CreationDate: 1991 Aug 20 16:45:46
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-1 -234 524 695}readonly def
-/UniqueID 5000833 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E
-C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E
-3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B
-426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D
-D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161
-E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32
-6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5
-A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE
-0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC
-85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF
-F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4
-C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC
-12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D
-048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8
-0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725
-741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB
-9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE
-306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371
-CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666
-1353CC1FC512D59DFF847ACCD66E868716B07631ED493CC0B5CD5121D74044B1
-86F0D238B7EDCF98BE535F20A264003C318ADEC465E0E2AA8C80801769FAA1B1
-463751CA34EE1ED37A239ADC87188BF8979156246E21031269126422D5013303
-CB0E2FF2842023CDE591925A8519BAEA6D9285718CDDB59C3D2B371108C144EB
-49EBF9FEDA1DFDF313178E0887B69DFD903F97C1166BE3BEF22C7C3160753F2D
-2410CC8A7687B263B8B3026C5BC8167A9247C64D61D0EE0B6F0EE975A97CFD12
-D8659F17E2EE819D2D7EDB69BE2B73A00221D3E659CEBE07D25CD89545624DC2
-15113168C7A4FFDD0D93D8BF3684CBFC294A1AD5160225F2E182DB50B47669A9
-597FB948C78DF0EF572733B14E4E7C55948817E8402AE3D7C55386904771573B
-0C922BAAE28BA9CB5774403E65BC89A792D77B2B99C55343B16BF783C722EC0C
-90548B6F07858D3E7316FC7813A92F9DA4CCF539E4E20B095CB72B08C9B507F3
-C57B8E74818B6B550166088C5B812F04FC09BDE1B1F0B92F4425BB7CC88F83E6
-9447A665505CAB667026C78438192E0EA02472A16E593B979AE480296EE177C6
-0C7DAD7656551278C45708FAA4004A0C6FD6C5ED1E32E9AE5B6757A24AB800FF
-6106A0B6516CC36A41EAF630F91A8C7ABE42E91DC24AC1EF49707BC5D95FC410
-F206FEF5768F9A8D23FE1B6A2984523D147F8F5C13DABB8D56C29821CFB0AEB6
-264B2A70F62FBFC397EEAE121CF0E107C9FF60A1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-/UniqueID 5087385 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-956017667271C1FD06DBA26AC7504FCD81979D968F25E6DD3ADB119ADC427250
-5C19086788E2334374EFEF154D897B2382A710AA11B906714CC87ADD800F54A9
-874258BC9C1B6CAE14A9708C6CF64AD55A72022B27A67A545F47BC8EF8302AB3
-A8870EE3A02AA718C467374AB328F348188FC82242CFB6DE2354E7C9C4158E02
-63E077396B5D94CD70F67C9E97280EE6423EB73AD9A479E98C301E72FB02C96A
-F6806B3D96386A66C229B98BECEE46D1AFAC321A691E987A004659840FB1F2B5
-4EBF572DCC5FECF297F09FDE70988A5082BED4225C169DFB23366D659A99872D
-A0B194A71A451E89BA1178D2F3598192EF59A155E487AA9049FB3952F89CF5E5
-1BD48AA7B1E2DDBD96272D543DEAA54928E0385BF86F64668EC2BC10BFA9A948
-F00D7F8F0EF3A08C80E97B88141E02C092B4C9D64B821127116079C35A21C34F
-571629B2C1077345FE3C726BFB3306C6D048186D644B3162C17C60816ACB74DE
-710E70DBD4D6718765488340CEF4B11A48870528D2E5BA2784405AE9E09A88BB
-B4E14CB8915C732620C291F4D45A3260ED0F3E11BDD693636F1915B635D04230
-C6EDBAF92BD113B4F0BD40EFA5F407FD1D9A6D3F34939BA18A41704D7B827C2F
-6D80C3CC388929C2D29AE88D6AAEC58A1672E3FAD4D11F1E05604A46D171FA15
-176E3209CB25D3854DF80F9B898CC8B2033BBD1484BFA70272D2BC4766B40BF2
-E2911495A868B5E6B098F40F3AB0EA4929DB175503AC2A2866F82243C897B536
-ED642660E8A67984DC1107FDE055BAEB2B23A1CDBA01641471D1FADD357D201C
-59C4B6F9E5E8C7BCCA154A1593EDCC4E0C79942BBEF4DE6D5887B268498FFD00
-817F6447C74879292CE44D43B983C6B894CECE8445F077BBF8BD5BF3FCF2321E
-2F4EB2C612870AEDE6FEA3ACE4CE6939C18F16B3FC3C8FA4AFE448BB584EA6FD
-42E6DFAC67C3900CFC1C421A2B289087193F4DB7702EC2E15E6B13E09532014B
-C86FFD3AF9406C4434AD3C1ED63E5A28EBD864D482562A2A990179464D6EF4B5
-0E7F878038B01A7FE0A3248DA6C57EB4D9C50C6B256691BC98A7C04D0E14AE68
-D1BCBFF635FF9214B3CE7BD257DBE4640029ABCBCE072FA6C1CB4CB4A326DF31
-516EDF0210CC62B01F13B7F797B90C98A2F958811D7BFF6ADEBD15D77F5EB60E
-C6F0021E46AF4058A99758E41BBF6A04C5DAD4C0C4151EEA3CDAC4FF62B384E1
-35DD95ED7CC5A6105E84E3949FBC1F04F44043A55087A51EEF532967616F1827
-0801CB6A707EA375F7541BD5051403BB8C41B1A52226F261509D526BB99B0016
-CD1ABBF1B4E36D96DBA2E334ACFAAD73F1EABA42AD2AAF
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-/UniqueID 5000820 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
-515DB70A8D4F6146FE068DC1E5DE8BC57033D79919697C81395D5B94C3AAAB11
-52D73938D5FE866AA42FB6A7B16B9DF113A49D2FB8949B3511490D79FAC4809B
-9C04692444006B2C534D8BAA282E038DF4A35E4695D34787103439BA8A96A1D3
-991FF7871E6C4950FA28668DF57B2FC103A67FD13E263649687066DDF04E84AA
-9DA2D8D34D6AD2CA501D0154CDC7E0CCB91FCAF781A357261AD0A4CA70E2AB14
-F0A018C383F784512ED187FC37D7ECFDBD5F6121D967203857F85960D40BE0C8
-59F2208F5EF5AD2776B2BB59CCDD41AFE1C5D6C709A8A2A7AB03301F5A4873D2
-DF31C7C01F62964879CCA5395D0CC6A873A1F35A3DD45D4BDD88039AAB007D0C
-CFFD30C2EC8F1D6CD1CCB97FE678619215B14E1CD22FE6A498DF4BBB772A5D26
-1EB60E529379EE0567205AE338D9AD9AC898CDB1BF058129244C9AFD0BC96E1F
-B9435AE1B0A2F676A66FA08F19A3A691022CE74BF22FA57FFE560E12C86ADECA
-4B3336A891AA39C3D3FBF0D263B841835C05FC8BFD322032A01CEAEBB6312596
-3A1E467423D09313B351BADFFF8BC3EFBFDC36FD6713F01A66C2F2AFB74FA1EF
-164FBC249A424AFC33D20C5832585675D1FC2AA54F679C203987D663E4A6BE31
-11034C5EE4F2AAAA77955A9AEF95F7FB46DBA7C1B0D27EF32AAC52DBFCA0AE1C
-690374624A4C509CB90FD85AF06D4B5667668EFF4555FA9FDF61E1FFC174CC3B
-C707AEB4D8489B695DBE7362EF623B9741DB8034DD45E2BA116D0FDB7151E580
-AB087E72A1C0999012C8DCA992A683DF947016E69ED8BD5621514434A077AE77
-5256F0D939602215BB33AA84F94A6C65C4564A7E16369AA0CA4C6897FB913E6A
-3A5414FC45E0EB8724C525AE219E48C021153BFD5C6DC4912FC1845A504BFDAF
-A111CCB0C68739ECD0125F5B66C30C8CC7E53A8B1104C0E31FA9DF5D73F9BA7E
-9D3F5F53B99E1C2ECA1BDFE05C585284049C27F27640BA3599B7E22E2797D527
-63E4CD7D8825A4408FAA186BE46A9B3721E08B71E614433E8467B9AE3D0D0577
-6A488BD12A01C5F4C7813FCEB413D1BA5F6326DC2121CD2FAC85FFC91507
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTI10
-%!PS-AdobeFont-1.1: CMTI10 1.00B
-%%CreationDate: 1992 Feb 19 19:56:16
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-163 -250 1146 969}readonly def
-/UniqueID 5000828 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
-21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
-06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
-55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
-B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
-0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
-1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
-7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
-7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
-356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
-19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
-C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
-244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
-AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
-5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC
-D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D
-993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363
-2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B
-E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3
-309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513
-F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7
-E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66
-AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9
-17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D51E
-6DC3005C821622476DB88946944FBD830DC0293272497557825CF153F8E257E4
-1C9A2C1C27CB7610BED918021BCF64795D6571584830231C7EE85AB23906C085
-B17C9070C59EE450E6124FA3488AAF61751160F6CE1A0618FEA94397D1EFA9E0
-621AC7E9AC853CCAE73DEF3F7438E921BDD42D7E139C431530AF569FD8592D99
-8DA4F085A207616874D71D6005F57219784B5B33CDCF2CD8F0660940D13DCA5D
-EB779847324323DC8E8CBBFE8364043C6BE6E6D7E0BB0A3B8A84D1D47283B193
-B44251715BACC173875E956620DC7B2E9DD5AA3778A12615332FDF4F9C664DD0
-4BB459C4CAEF7CB1B3C663AE0B57A0933FCF3DBA2BDA4997E4F9D7EA86B74AB4
-C71C485AB20B371B66B8217F3A7079D048A8DA3CB9A1066D25D54CADD3B069F6
-33A58C6281347F0E0F0B773E692FB2A257781C910DBF6267618F523ABB585BF6
-97AA47EED8C30681848596EAAFCDEA87ACEB38C657CD2B42A80F5ED94462B1CE
-BC8D8CB6571726095DC6ED03AC8DB4B4EB65DEA536D55061C71BC6A4873FCFFE
-96A1E935F2C98F1B820DB99CFD0E2473092357B544F7954E69C48B739C913902
-B4975CB18E936A096B3AD378E3E9A42A84F483C7484369710E8A979B46579168
-CC1157F85AC1FB0AFF87159E335E8F0D2F94E809805FEAC03766B0B01DF7E81F
-6A769CC9483EB8A5DEFE66AF0B105218765267B69EC07EFC280594740644A749
-B386798796B625346D8A711F6F96BEFC10943D73C7FF7F279B1B5B73A2667AB8
-1D6A81B90B539C6AFFE26C925B24776225FA8C7B422E27CA00C3FF74ABDCF930
-44FE58EA15D99B212DCA92014C3B206866299A598E2B5684B4DDAA560D750FC3
-98714F4C5E99B03548FD1E7EE2F8E67838BED34BE7573E4E4917F89D590C3D4B
-BABA6B371A45C648AD8D936BF1649EB771E15A6F6CFBE68879359E33C1FCBC6F
-9252BA1D5D90D1B35CCC92806224D77B898B5ACA6D014DA5BCD3469C4418FDC2
-2B77F766CD37284508B20DB56979E00282483F49DE7B13C0B6784E18989B0B32
-3F67C207D86BC6010EF407FC4F041112AECC2696833394385814BBF7B6DCC3AB
-EAB09D94B0A06AAA79744422EB1D604F8E1864CA921BEFC92D9C4F3738D70A06
-26DFBC89CF2BE538862BCFAC6AC595275F3120485ADDA4220F79C0594471A17C
-6FC8BC16D78D269AD80D396BC87A08D12FA415BBF52A4933A84BBDEFC81A8ED3
-24795433153F7D944509DCC6B6A807EC6F54436F795136E43E1B2396177B4B93
-614E80901CE657572D61625A11231DE959D91E57154EE6EBDCCC7372474A6D75
-583B528267745E6C5DCB8EDC2CBA2691C2CCBE17B31B5A940E13E656817CF725
-88C18F0CD42291C2005C16389CD236FFEB7E3BF5499BA6DC3B21C3C3B7C571A1
-E0EC625C814E6C99448F56E17C3E628DA2477CD7F8F102CD52ADBC43059887B1
-7CF74E996AE83C087036E90634C636528965BEB2781C1D057BD70505A9B35F78
-2195A1EE3BC777B61E1A1C41668080A108E47D63E62674C1E653CBECBA84F704
-A49E94571F03CB168854A941151F0FA423B806384197C7D8788806743C4F8480
-B9F293E7A5D6926A222D4078ACFE150A81C272642D51F25725BF746501B0BC3C
-B7AA70C3134B19C3B10DBAA76FF6566FE9C79A82DCD81729198FF3389A07FCFA
-9068D8DDFA31B9F2169CA8CC6FEB2F2A91D08CBBF536E4D79F2A7228A9EF1EB9
-4ED89A5402FCAB1C36B097AB46CBB57E1AFED44292820F43712DAA122F88D323
-663E6CBF03384E56556636EEFF9B535C809891D147D7543761A6867B34F0A375
-79DE8AFB65C51AD11E6BC296E993C06B13369ED913BD1CD1A47BEC677794FBBF
-9192F36A1E5ABBBFB895DC37C8279CD2EFA2EB437DC17A1A70CF38EC0BC448BB
-FA6E5E20BAC175C47F0388DB0FD708F7C0A7AC1A6FD58C8EA489E5B7FCC60431
-F6A83CD0D1A5CAA2CDB1CB1B6802E7860232FAC1634102CBAFA4A386E94FB722
-B8ED43C8B386350256129B346FE48B64CD74ED302F5185D88858C7AC3B3FCE4F
-CADC9E0828594B8CE8DAADA0027FF333D5DBAEAD2623C8763D6B4F018F180A0A
-97B83E0C115ED16F793FD1B4C17E67C7812B3AD69B6EDC5670AE505A01933331
-FE05D3E53D2FA05A9FD306F4EB9B5C3D3CBF2A038F24BEDDD833738125E4FC2A
-446987CE8F2EB79CF3AE962A00A62CAA3B8026A82F2BA13B12EFF80594533445
-BB7FBDAD6D0B8B215F0FEC88A5CD6F6A2ECAE398841EDA620130CD8EB26464EC
-366E4157CD499E68F522FBAE5024A17FE846F53057F403AA63BACBF1B77A28A1
-4C2776E4292CC2345A93043959AB4A93978D2E361EEF7BF701B107AEA752C33B
-43A7098F08461063DCD158D14A26C97C07F73E5BEC7E012183DEB0D938B83252
-A60195E0F861255526117478E68D2AA025F876C19F848094A70A776CED44E87D
-6B11520A1BBBEC5038F41D33F82F3EE01E78986EB5FD0C2463D0E56B7A68ED82
-6D83E4667A88EC1275A53C31EF26FA879FD97CBE371036CA416CE099782E0A87
-216EB84FBB66E0FFB2AA0FACBC7198FBB04D681C43F07EBB47F05FA7237D89E2
-60F7B680CCBEE75106A272555E93A35345A6D0701B744BA904D6DCF9909FD6E4
-84D52A8CDDBC138E8BFBD478390E04E2699FE5883AE5C70EB034EF3E00EF2AE4
-5A9427B6AEA59708577C18556BC7D1E407C3C6D006BC4494B45A4D141E0CD527
-D63A4B01EFA7D2EB62E564CC395EEC48B2C433A6137854DE05C3F45D4D39E7B8
-101627828D18CBCD0606989EB0576B231F61C6E0FB9EE2910EF8081D9F6177FA
-6DD5108D60F8215B384EF0A4B12C96010455B403708988220C3A3979B111067B
-DF228F5997115F9F6600AE84223E9887BC25819F6E6D2044DF25BD2BF7FFEB62
-BFE45C9A44D7DE223F436F138EACDDAAA92AC0E425C7CA1B41D2876E3A296E6F
-614723239104ED266D695783E931A7C96B0A0545675E0B6B70A01E0F2C9E433A
-0FA1CBD0435E14053AEA258D08697D385CABB30F65FF839FC9C33E1B1E487B9C
-014042D2D38FE9E4BDBFF30E5D84384623CB7F1B3DFB5113154D331BE2E34713
-3CE3BFBDFDFB1A87021097AE13FC3FF3F2652EC2B6C2B1906ABC0FBBB8B52408
-5961D7F9E85CA96878ED1C711F25E4DB9BCBEB8E7CAFB28FAFC3456B5F30DF81
-5E8CD61A5AD8AAF683CC5E94B131A9888D031FBDEA82B589E143B3EEA253B816
-9F251F80B9AFBC9A17D374441B4EB205102D0FC412F5D8B913B23B27BBBBB583
-7B888785E821C7A49CA27E34D89891D5387F073E9549D539484CABF06A83E1D7
-988E133DE02D3A7AE82EAE1011C3639FA28BBC5D14F8E6F64C942699E44508D8
-AD2B01BBB6073ED41AAA0BF24EFB06D64AB2AE54C916AB426D804A37BD33ED43
-77DF370D466C355CA05A86A6BD6EC956B8CD092C5136F5E6C0F27BEE142130A9
-8C44225491E22872A65382F962026D57201CCB5596D8CADC57F4AA664C1EB6D4
-938DF12332686B7A560275712FAC87884533701262A6AD9EF6CF11BBFB66FD4A
-5E6A29688E4C10735B0F088C61838AF22610E8D46493DF76BC0A2C7AFD815D83
-FA072FDD70C775E4D06FFC2B8E6CB163D9928A38DB87A8E217AACAF17B32E7E8
-0EEDF03677DBC791465AAE880CF2FCC47E65F98CD1EA22AC82E2B77A76606AC9
-42F4E67D9F928124919FD58331EAE87CAAC7FEC28E9BAD6E59A34CAFC40701F6
-84A9FDA9CE1D03D2E55639D17D95D5228EB8506826B80329150D28C6C43B14AE
-7238F3880CE4D4622163AA1CDB481031446385994476BFCAD4CB46518B462E24
-89B5614C28C7A995C183D95E99A765E842CA69BD4BB3E71DCB0C47E35D92E1EC
-0DA8287416E704819946EA9AD0EE099B57068A0A5B89DFC624850A809DB7B5EB
-500394BA3CCA239CA2DB983A0C16A63CD139808ECAB6D463B0C6110BC285338D
-6BA6CA883456631FA87FC0904675606B1D73A19BE396505B0CC52AE192B1506B
-87A8862F935E1DE909B0A98FD861EB0F95202D02183221FEA7CD587E6A0FB001
-4A5E03A717FD2EDAFC9B4BB9E4F84B7EACACE04B2B01DA4D547C409BA3B7E9F9
-05927B4791C70274B5D6C6C3F9DE1439F3A8178B211E2A646411BFA360728498
-F6270E120B34310DC2012D285F0F92C0B71C50DEA249FF01392B9136E631C4C6
-04DE488C269958F130A10ABB1FEC111BF44C16E39782570E9B96105CD0566D0A
-08A3312BC64E20C3680EDE0CD0C06AAFCCB32DE4A84F855DE3D88421028D6557
-84AB689FD5D5767D288B88E750818FB3032203C367FAEF8A984373147C6CC5C2
-E8A509DA07DF51D4248BFB6712A833C6B70AB8F2ACDBF8F2088718589E075C95
-DB9D19CDA0A60D0B568C6B5F76F1C943E07AF443A2700B8D89F4CB6E7BF7B4E3
-53B7D95D9E26E0A64D50A20076AAA6D63F05A958C20DDE41125F62FB411E7104
-BFD4E6AE68857C7C6F2878E8DB15D7C691C667A2497FA385017BC6D3C4FD1C87
-24E9939A6E37E77B286CAE4552CC19700E561F44C3BB24B00D87975F0665BE79
-B5C3A5C087CA91C1987B3999A6E4AE001714C81430C0537409BF0D4199D773F4
-E737926B84B1AE20BE0969E635BB4CDEE5E074EBB47BBA6DAEF049F52B6CB318
-2EE37EDA0C4365FE4D776199F5FF4E2B8D2794A4CE74AC7FBF961029322FD2AC
-F8EECD817C011515F23FB59959DCB544F452F3E3BE75CD1F836EC0EA0DB34921
-205A8F5B0BEA0661D3BF2C4316B0662B698FB7DCFD81E703CF0820C927585513
-0CD331008CED4B7862C7E0DC09AC15369AC029829627D8DF36C5D0D3E962B2CC
-0CEEE942BE5A1D2B1E33AB4C39D4F5305A2D6EC2AEFD4DBFA1D980ACC188114C
-3802B711CF4DFE226DA7FF0859462AD6804CC200EC05DA5C9958B6E6ADCDF3EA
-F9B05C497F394524378E04BFF58FA66FBE0D4C1BD02D0539264050F53D7FAC89
-5430781492602855B6A700AB8ABA9C7B87EC58D63ABDAA86538C407E7AE2AA54
-26305C4691844F6B679EB8C13B7EE7A63C5229450916925E22EB52EA7E593FA7
-047C85176DFC74C9E493522BEE8043F011B85A33189FA591FBDA3BA55F7F1910
-E1FC4C3ABEBDA759D3D6DDC283537B19C6780543394609A1F4DD5C4FC1563F22
-21C8E77ABFE4023DC971BC0A21ABFD3240F31C045543813C6935B89F520D79A2
-EFEE0A2858B40F1BEB0BBBE32ACE91CE8435FDC1FC5E0C26C38E90C939DD0F68
-A30A75C485122882FC9F4E4A3C2020F5416E657B000EB941D4B3C24D7A07CADE
-4ED90DE2ADD8BAE0B0C4508B14B444AF29DC4E5294F0DE56CEFEA61457573D00
-0B2CA4BD3164CED244C8B8530ECB2DB4B0B623BC999E1B15EAFB3A84DE79513C
-D026CA7C91495D6E1832E0784E459787084C95984DD108EB6E5837BE3C463017
-9CB1186507025668C21607FC1AD05F45B965639F2103E01001ADF2D87F268035
-7B97B3A4B30AADC458A042292B0A7E43EB151E3C205D88CCB9863CE42076ACCC
-234272DDD992F2242F87577D6D300C4EC7F7D14669DE8519DB22CDDBDCAA710A
-783528541297F2490604CA13000D2982F48AD8171723F122DBEE321753654DBA
-4936F00200B28B6A14433821864108C290C7303E8AFF9170086E7D95F8AB70FF
-A478755474287D86CC88C8AE1B824982668D42957FB5A4B755320EB5742C1309
-133AD25A3094AE015B56A922C40B3112775134219B86B9AA0712EB2380D6471A
-D26DE5C1A221AED9B12C34A96D7A779201C4648526F80041920AD09B102F77DE
-85767974B70FAAC630D6F541AF40DECB3A460FFAA0A3F6CF77EAFEB772FF47AF
-B737E8EF1BDA7B094A1CF2F7B6B21B7BE2FEA8DB2999EC6060C7B4B2ED749BD5
-353259D0E52D4AA26A9540417B3C691282C749C9BC0319438539FAAFD8224950
-3309BB4B12961F168ACB2896FB370FEBEA71CE3CC8B861D991478D343BEEF7A7
-716C04EDE4F971DEAC667ED0AB7CDF83EBCBB98159D13DA62FF7ADE7DC4748FC
-68D59DE982A63B688FC4AFA442E5E57A3C411353F018D512B90058803A3B4B51
-D448A92595E81875FFCFC920C1C2325CAD1F8A359538416C6112BA24BE0D6564
-6DF1296666C7D96D96CBC902C0AA3B1D55CF4A9D96AE312B2EBFBBF997183E53
-A3F0209998E21E46F41A872140CED33D0C3E21975012AE1437094287725B6864
-D8320E3696545DBD3B86A522B8759A40A93D3B5D9C1177B7CB1539755FB3EBA4
-7569C1536E88797C9171046FAE52A6A3B9827833721D72E74E29BCE6A18FD4EB
-CA65E40838C0B6A071832B84750C10128A99ACCA918A1A3CA3B720E655E1D4EB
-0846F9180310DA03CD0DE83AE5561F3D067AA2E8F7717682023E0480BA1E3A9D
-CB080443B44916D9FF918FA3FE240E5A7B82F1A66EDCAB429DBCFDD56F1C0F9D
-293E30B580855AB5B5448C2C087104108F5DDEC530AA2F8180C97E9848593E77
-9A5C36BD38DEC1A5AAF8C54DCC317C58E5F192560FF0E39B612041A72061A9DF
-6C43741DAE0AA0AF78B160516530D950DB66B332D67C7B951DE77B5DE631AF5B
-1E2AAFEDD2A3D4A7B2F02890604ADDC085A059D186F871DB4EF507B8AFFA3E99
-70419CE3966BCDB1541A7B5588251C1409CED2045CA654866C9294C953ACB36C
-E66DAF8ED42744D33D260FC3D34674EED613404237E4ECEC36DF5B42E5FD817A
-8C9B235DAFF765C9B683334C200757F44AB52B01A6F79494EE973226A5CFFF60
-93DDC77A71E3073DE83C9D3BDFAAF5AE6CF66BDB1C9D6757A407D59AB53125F2
-F3636A5E05511D5706E7A7D7E5E649DEDD0A9B293EB5BAD66A99B94649841D87
-CF49043CEEE713D2FD8DDD6F9C672C63F8A548BD0AA2CC332B95B2D82B875FF9
-E63254DFADD0C66B7C5FF40B52D98170107CCFDF6BE38E44D7841234931B57D2
-E9B9B006C4DE7E1905314012A81DD03E2F7D9D7D54F0FF9B53D7DD05039947C7
-C54D4291E5D7D9C503F8EE4E3983CF19C0F3B2AE9BCAAD1F5D836120583161FF
-D244FD1A632AB933E295679EEA1F4733AA825A28AF2BC2FFC8E79A388F9F93D0
-BA56B948AC593AB7A1DF19F8B418966A9126B28CF8A81D88A4ED14D2C95E9866
-74BB9196099A978A96A8E9418D0C9C905493867322C78664EF00F60A5861AF06
-5E85B2A9A6538A81110F3FCB73124EB308085FC037324CA1B147C860C00BD922
-60CAB472F65A63CF1C95F0F13B3AF972963017A2EF3F2793AB91C41AFBFA8496
-4AAAF3855BD87C96B7FBD823E7B2EE0D4F9368191B294459EF2AAF4C83526B82
-08B35E9AF18F21C64A0591E558357552713B43F576A54ED9492550E6E3D4ED63
-D8E2C119A8ECD1FA9ABFF49DADA15894214F597D5C58B0972FFC686A4E659FFC
-1DF5E3572279EBA9165B7FC394576EC58A9E960EFCE619BE11E2C283CB990A8C
-AE6C0B178F64725CB12E71A255BFF65605556FBF541976D40F0246F18DB058DF
-E3EC4AFEA6AB3AC4AEC3F15F2601B34DCB1E74A5CFBE4F12AB0C268F331172A6
-1A5B8A912AAC4D6A4F40AC124A81017AB82B3FC9B071E96163419A3E299AA23E
-34AA908E3C017FDAFD9196258E96E9B1950D0B2BA85477E0D56076ECA06824E5
-012CF90B2D225B2E334BD2CEC1EC07D89CC45E71761442F27F7794D6D96BAB94
-E87E05385961FF3D4F1788EEA5BE1CCED1D1E29C12BB7682527A52E009A47E49
-30A4A2DEAC13CD38BE08979C4565BD200132DA555BA99761838CC3E238186336
-A993885BFEAA30087A05DAE84E37CA3560F35396838B8E9EAA700F7E71804ADF
-A0ED5A4E8754121593DD20051BEB94159A902EA0B5808AF508DFCE82F94CA99B
-A3C68FC42DF211A9DE7B597C56F1165308889C7C13A198C7B9A7849530818248
-442907CCD99667704FD54593DC7DC4DAB695D23A3CB0244D1669FADD4848B53B
-21DE9FA91C25CE0BE9A05EC695CB450D0AFD84E11315C036A4AF13AC1ADC4EBF
-446F89F2B8CA9F604A834944DA82B6F04390D7BC4EE7AD96B7A75E3A5AFEBFFF
-DA9ACCDE418E94BCDA3F2006E358F7910061B2A404E7A3FBD3E220D7B5E2BF80
-F4F613D615D0BA07026799DA0CDFF8ED88EFF02C1AFBC82C70DD60B42442D2F4
-84902D7C0E37D13EBDC8B1A1011043C62384082A6ADEF0B3DF884DDB83B6A29F
-0FDB813DECA522E591C123182EEC01824C272419F162D049E3238592557A4D42
-01EF7FA240B9C2ED9C6C62D151AA7D441C12ABBB8F532E65093CF04FBD3C2545
-E12AAB4C835068664ADFD44F91A301F7EB8F26E5FEB7246C795D93A631436B64
-18677DFE41A892F89AF615D2AAE9AA270DE26D7DFD7D13051A20EB446CCEBEDD
-D30F856356497EC0FC6D4088A0666171DDA39072EE266AD888227B4063EF4AB9
-EEC4A048294FF74421D57CB35B7386A49EB969A61C993F7FACE9CDB52E631AC1
-675CA9BD0D0DD31987B753973A6322782088B0A3D8ED402229189525406CCEB1
-84B46E5385EC6729E0AB995832CC14BEF6D08BBBAADA964F43F1331FFD2CBCD1
-3BB8FF6DE5581425653734D3AC2C1B2E285FE7FD32EF418FD1612AC32EA54E85
-15F68719148B2FA883EDFAFCC93A719CAF1B90361F21C33AAEEC956C1A81B4D9
-3FFFFB6D18B05A55D62998099541B8CD5A47E7D8A720147C5D6802D414E5653E
-21B4AFA9E4984611C7F37AD9861C46DAFD2D5AFDE5B46C33D276846781B8ADCD
-F5CB8B8F4B4B879CC1C36DE43370149E996FFF97E8367B41D498330C180DA93D
-0547EC22A936379B14725329BD1F684FC938D4B08B075F6D6951992AE08A9416
-F91BD3A62149063D42CF260B423302CAF7DCC69E13BB4EEA7678FDBE6799C734
-4C078A41A0E63DCD8C77A512328E46E9E32FBF0FC466199EDEA62494B8B86471
-69FEB5C120A330D2354FCB5925AA254AD05A41088AEA845BD83357272FCFBD72
-2DB4C5A67F6CD5FC04694A280765BA516ECBA2B522FB66437479298AA793B8A8
-48DF53F9B38DFDB80B5E7C467D18E1E5CE0DE51542BDD4BB4ED00EDCB5CBBCCA
-C96DE2F83554EFEFFDFF4E11E02ACE5599CC7EDFD065FAC2D63C00029A0F1E68
-1B1D39FB032BA279F40DCD0A22AAC8D7B77228CE928E8B9A78E272455AFB9807
-1AFCB6271305BC093DB5D9B614C091018EA46CFD05CDD26CE371FEE565E78937
-AA0C5257C2D405DB39D5BE042A747709D4D18BB1E27E2E5D3EDC4A9CD262BDF6
-D7A0CE1CF3213AD47F4A005FC9C6758C03B9BADC410FA6C121358EDA51F1639C
-47BFB168D22A06AEEDA5E1BAA6E08342C6FD0512486ED2E68B3B1B07DA24CCA1
-7D9C3965724C1C795E1B6FA41B9A1D305553443392E6F0473641A77FC5188565
-934AF1AC8D598BE23EDBB510C806F99EE59450548806D09A8F2138404BFA93EB
-2DB794A7C684D1540D3720661B0DF088F5BFB732261035AD6E659B6BA81E233B
-68047CBD05DD4A8F13F597EA37EFC35F227CA00DFED3F36ACFFF8D76056F4CB4
-E35850B3606E4CB63360556437E56A5216E2073C6164205A9286992B7C71C691
-86C2BD628312056392850121D90819A16C8EDC081980B1C6C21EC9EE3B286C81
-2320B8AE3FACCFD30BCC0C074219FDA6ED6DE71D65996804EC2E2148E08E0FAF
-BDCC6915D46F8F4837BA10220E14160D017E560EEF814C0CE04D9B68E23E20A2
-AF20C2DD5B95126F66F350CE3A77E3963DC3C979BEC987C4762E1FD727F524B6
-D9741B01101A4BDC32ADCDBDF2CF2FAF790F3AB2D4FE9833C979246619FE938B
-3690DB7C0F8C8FA67AB4E1B4A4D492C31C6A7F35B4CE30019C349F6F35483540
-6CF64AC7A0B2C26E8D42EB9DAD73C6878195B1F62923CF116775B829F982446F
-91C3E256B2C8685803762EE758E11FA2F1034AAD9BC98003FC2184E2AD739D08
-E37E18DC5D8834F5BF7DDB7A4BF428B98D582D7679A95BB2916A3490C5F6566D
-FAEF1754B0784EC470ED8A323655E0FF53E40D07D5157551C4444855446B6F15
-1BB4F803108A14C9BD664365018ECDCC77BCBA7BD7799A8B66082263E3EC2933
-602C2FEAA3A80F55566DE64BCD92CBBF94D3605E3A8F925183E60C24E47E84AB
-509292DCD021A70BC541C1B09FE51AD58E026C4F6A28830CE167F48F42F8D6DF
-1F3B6E9BDFE149F79095A9115E8853279C205A335BA6F1631F954BB27B522401
-22E3D6B452842B6745B942AFE67795E891DE1EB460DC38071211208F9152A1B2
-6A6F8B8F49C4C3A37FC4926EEA4AE6314891122AC7F59E6B0608E4996BDAB224
-BCF62D947E2F8266B379F6BCC952C7E319903785D4D5A4F9C67A04F4AFB69F6C
-50A9341B06062BDF159507C67A535623ECECC710FB6AED3A21D03A39DD134B0A
-F0C209D6F17EF1E5443C107CB1BC6F66CA5BC2DEEFB56E8FD86662268A4D5770
-F62C38AA2739E9938E7A40ADAE120B7D11E210C4EDB3DF6630B24D855302FE3A
-C79ED1F05AF15D1B0A598924C1FCF81A56B0F6001434434E9600D3134B199A79
-5E16B56DEE442E41ABD76204DC6A8B22E65BF0D3B2CEEF581BF00770FC8DDB95
-BBDBBEF252ECEC98F3715A0799EBD12C31EE68D30C00BF49225A63BAC9E7F20E
-BA4AB683C17F61F33E799F4F6A6EFCF57584D7202373694F46E629A252AE264A
-AB11AE1BB0BF765291226731EFFC89F92C5389AF3F4BCD75C3E225CE3846BA99
-AAEA8279D358BB5ED87FC9483B9CF1F99E0F37D7248F41C11B637BEA2B86981E
-7950D5D56E375C205BC775F43FFDF63769574EA035048B3360E2191CE2974270
-27F66B4930919BDC6D11D83A9F473B29114D29545B97F1942D44E11FDDDDDC7E
-1D5377205B8491B63FE72A046736C3322DAFE21493F0780CD9D2ABE0D5198AE7
-B4836A9111BCD4B3DB566505DA34B029F3AD2AE121D1E2B1A013A78235CFE8F5
-C019740627B5B5B61FBE1E1001736F88D581E1A1C1D060622C564678BDAA5005
-4B336C2B95D720D9D22BA4351F8766CCC0825B0DE50A1C98D78F3E3646E91C44
-3AFC7E47297AFD436E739B56B3CB0D87C5EF28E31B909987C12255A7689AF1BC
-4F1E286783CEE8E996612CF359EA1175DFBC93862D9A575CBB4969803B76F9B0
-B0D5795F9E934B4120225BEAB7C78195C1F554E0955DFEE14D2EE7C619FF3126
-A0EF46BD897570B5689798941003248F52C9902D2739288123C43D9A5C884965
-E1640D4DF348FCEED0152E9BA6108096FF4CDA
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-/UniqueID 5000830 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA41150BCBB9773FAEA8074D8BD9EA
-37F030D986E98005CBED3F1C881FA27E1FA541900C9D9D6753E61AA26474A3C1
-8389D2A3861945081DB622F4406AD09B70087A2D85C32ACB29E4ACCD1272505F
-989DE12DED7925F9EA0757ED3AB062BB64C6DDC9D054479F0DB1A5ACF43C9776
-6BD4B00206794786BC38E08B3D2B033C9BAAD1325ED96AC7E5D4A2A23F469C16
-D782AE2B1FFEFC81EA3AA836FBCADC5A7840D3E5D9F5B98252294A47D26BF60E
-9BC5BF87DE734F0A9E4714530494C5BEAEEF434A3ED8E817A43F1D7EC7457FBA
-91C7C1D92E096390B5887A567EB178B9A2C5B2F75FD8761F91F3714637D10857
-DA45DCD34CBF608892BCD88EB7944DE89DD223787D122F91FA6B638619363D4B
-FAE6917B63C4D5528F67F502AE7095149CA1EF3831067AF1B2B177E73412A96E
-F2C2F2A65E83A2B10AF03097D9A625AE7FB72B0C017E0FA3979B8A1306DFAB04
-CEAF96702819DBBDF671B284CACC6FDF7DF040AF4CF5D16B57C4006D6E72D2F4
-1091E222E3BF2953EF97A4F77F6B9685522205B51E9B660473177A30F4A2DBC6
-BE2C99A5B8BF2F4786A9857CC714D50025057A23B4814D522E00D27DE7C8A094
-21A49737889A9CCBB42026EF706D88790E009865F9B5F9F2FFD734A16B54B3F5
-D02B1FE63AAC3A337BAC81A969E5446CF00AE58A755E56F0F03DBC5EE0867127
-400FEA610B2A096AD7C6CDBBB72F6B2DD6EB77551455E3D5E7032C99FB4D5166
-031D7E406C22EC67A1B2AA8A6DF817030E2B5B2CD19E68D5979945A64AF2FD09
-F2C12E5CF0F5FCAE69D6335FC542501205F5E66C54B8177C137E7AFDC6E17357
-09A6F6175584AEDD24E560F9066CFDA052742AAFF5227A10A6936C4133A49E7D
-8F0F9BBEFF25865B0FF3367697FA90ED3184B218C2C7AC1E90B0789273B157A6
-4AF3283D60CB8250BC0D76CA7FC99CEBB8A322EC7052CD6A35F4611B8CF0A2F1
-18C1A5AA63A7C4392DEDB5204A37F3B8EA8ED25ACD983E9E7639F16E87E39734
-36B82D5832845D2FCA0E5AC014F1489E9B1306BB84856134F3FFB574A4B4E755
-7105B91B9ED788E153AC99E84962EAD3DB5178C93C72D39DA3619371B1580CFD
-6D191BEC45CA2D0C4B91ED9114EA9EB5CDCA5A3DC08352F13277004039ED744A
-03E7F446763B6559632238F834720FBFAEFD6227E96563EC0640F92BDF2FC687
-31EE15C298F4BF75AEFDD16838BFE1B26B96664DF94E20135F95629E27241BFF
-ED40791377E313BEBE4907EF2CCC98FD4385DB604F138FD47322CC3D91368E3E
-C3718962A799AADB1B6A6D41C0F3165EB4FEE9E536773EE63E0D6EE9402FD6CB
-37DD07FB58DC3E8B08A97BCA38533CDDCC075F74E0440AC10BFDE7B1AF01064C
-9EE1F956048114A40F85072C6AB91CD629939CF45080CACDAFA1EDC60D6C2F25
-FE4EB51BE6C4642784B30FB573B971F75B6BB8659C77F3B68B6D5A1ADBF527C7
-A276E1560C88121703B8F08514F147105E24071D09F856C2AE175B3612D02707
-1BB380B3E2EB766847B6D2BB38F8BAB0EC387F252069FA96EECEB5A7ABF00DFF
-BB766E6C391F1AAE89BF6EBC0293A47817A283FF1F90197B5E6E4245CCBC0BF2
-0A1E13113598B9C9FE4174E7B9893067AD9C501FCE5759C0800599295556B390
-07A818CA68D66A05398BB25E4CF7F43CBA1CE3F32AC5D2EAA2BA6889E20240F6
-9FB201ECE90A7C5854879E8995B4B41EE2C02764BF9BE39ABC1E22636164F8B9
-88ADAE35CD656647B404703CEC1273B930BABA916312B25A9A6BF14BAB5262D4
-50F5AD54E066BC879CDB1252BF2C7747F5872B3B6F25D801351DAEFD20B77A48
-8E1BED27114124DAF235955DB154D7715C6F1EA421031896BA67E1F5AFD8A5C6
-240F61710F714051EF1FD7B263D928D7AFAEDCE6B6BA20166EEDF5E8069E7F19
-9774DFCA74524E00D226753CB13C78EF906300CE6ED0F06A432C81EEB833D24E
-713298C1414070BEAE6AC69A8733AAFA4625C739F530EF445582BE09F6B05ED0
-4B265D5C61161B525DBFFC464ED3F837DB7606D0A25511F9F6D1BF78A36647FC
-A2DC2832C313B482150B670FF71225126387C4E3D7676CDBDFC45BF16A4068A1
-458F51188A909714ACF1DFEBBB782EB540533F5B9F67E80B7F051A2804A4822E
-F6E81F2FFD90CBDDFF206D6DA1146C07D6048370CD4EF5B37FB2D1ABF83E0A18
-BD02294B7E458B0901953A7E353A9D052BC38A6C2A0FE3F7DC8F5B6AA8EF9B89
-58D08CC03166717017C1D0FF1FA0C637A81EE3BAB5F0F8C02EC7D88F1A8AAFBD
-BE61DC736E330DBE273CEAE8166A1666A172B4BCBD7C7EFBEA85FCD8B00E5A01
-FADD2D594C6C2A2BB623F5CCB7A27946C29B4B0826D384D0D1269217D71A20BF
-6C1BD0EE2AC91904F2C0C0B1354B4C3A5A3DA352C6DDE31F3955BB09B8FDA477
-BA54B605F859D84190F2C848EE0B42E49DA4249D6D2C7275D216B2438919769E
-EF50097B92063CE1B31BB14B6EF7DDA32333111CB74257882B0A1EF6FBDC0043
-954F18722951B2C97A82344F47E6FBA80DF86F60B4F12F007C2CDD6FCF0418AF
-8BB6FA3CA9D8962F902FC888094246F4F0015DDC4AF92061A0F239D9EF6941F3
-CBA1D0DC78BABECD226B9E7EE3166EFF28CDF4FB52ED7EE0AA71FC3BD87B5CD6
-7844A58E9B42AD0F1090E3C9A73B109080D501A3FB905B5B497EAA6E25139467
-47E45A3A5F33D9EA41ACE3F1843AEFE34D035879078F28686EFD5F3DF0C89FE4
-02B4B5952D675678EE4D32EE2F1713CD3CE4774F669D0BBFB822630D8E59A4C3
-E4BF1221CFC3FEBC3B246015D41B729424D0C57DCBF1E1522D7AE45CBD9E6C5A
-924BBD99D782D851BAD6E40DC25A758C66210652D55EA5E404954D343510A128
-CDB06A3E130C1D54AFC64FB3518E322D8121A8723BCB415FE8688602247696F0
-04BCBCDD8397254186F0E19DAB9C4252E4D10707F2EE17D3CAA66816E2BC9988
-6B9EA912000C0C46F6C3B1164BE71574D2CF09947F65ACE2DDEFF0E1F0ADFFD6
-09C67DD6BF724EA14223BB5D8834FE45466A2FF4BA8FFB1C007FBE62EFE9D60D
-1148A36020DD910328DA027261FC5D091610E52159DB64CA02A5F1A54FD9956A
-41ED832F9B606676E881D3675FDE421D5979B6BFF00AAD7F7D34A031AC4F1E5A
-AC731AA51981C8FB0BDE52261385869202C99E006228E52E57DBE413CDD4835F
-CBE148F5FA9601C87354CB0C6AD90F174B6683FCA7C25B831DEAD1FBDFD876C7
-44F9432E3228DCC73F709512E77C42F7171DC465386144B91CF5DA1A2F9BC560
-52EE4DE9928A4894D9F7E9D8DDA084369097CF5A8C4E5ADEAAD0954551FC8C5F
-586AC2B37AE93864C1ACFF984F0C68E58D1468FC5E6138C57EAC28AB272D998D
-B01E27D3E5FAA9ED80698CCD5CD09611AAE12A6BEC41A832029C4054CF2AC377
-7586FF553B077B85862549CBAEF9F112B5E3CE57B910329801D8980F5646A64A
-8021F2961F835B48EB29AAB2A5CA1E1044E2DFBC174651C36E516E79EB67478A
-7C77A370DAE6A3638B42446862CE927325173A8F8BD01E4620A1793B5A7D481F
-CCF92DE60F8CEE01691991E6A141CA148E8A9B6941BF5E0A8EEAF3CF068E0031
-EA5FA6F24A9B03E7249A2799389645165D55FE15DADBAA62A312809A3F52C577
-059CFF339A222C7F27D61D614A1857CB88DE2AAD8A8E2AB758827E8C02097BFC
-EC909CFA5709FCEB8E8BF0D50D579F39E2E4E2FE092303D10314630A73D69975
-5E718ACEA576D2B08F2254314B3CAB9B7EFE15019071310C43849A5C7F92A7FD
-3B9A460914E51AF0EF517E7231F8920941D60FCD98FAD72631D1A4953F4AD484
-CA7897BFBB862C0162BB206F85C5CE2ADFF784F243306BB751ADB5F415E16889
-E791F45BE5DCDA621A5D858F8238D98E45A58E5FD549CAEC1F518825E2F5912C
-B55A5CEE32C0AEEF1B88C24C4F1292E4C9DCAAF717A9AFAD20F7C0DD3CAE4D01
-53A67FE4A9E0239437DA4071B1FAFDA2B972A7C664605AF2CB1B2781E4AFE7FC
-1491F75F285FF1F5AE3CA7730EB242A06F757940971F2E6A17ABABCDE62279EE
-73536CD04016A6B3C69ECF1B0370F10ABAE0A34E654FD0215F39E7BD1FE9AB59
-52BBAB718C2FA826BF7D5EAB0AFEDBE7C722AA56C7D9AF78DD629E30EBF593E1
-7C1475A3FD76C12ABAC6E839DD489A09BDFF813D376F1D7CE5669F470D3966F4
-AE6D6F9817EFB89F9D0997BDDD02E82B3159EA68012427B9947A329AAA92DAC0
-EBBB2AEA2111F006DFD5CE3BE06145B126F42ECF0A5F40F7D8E9DB6BD61B44E2
-D861780B035F93F7149B9E6120A8956B8879BDC43D46F8A5F7ABAA0BDC61B282
-27C3FB0D4CED0C76120F3FA3279A8238D9122A51BAEEEBACE95D017B6DC042CA
-883C9285F52A0BC78C608CB8FC00AB033FF8BA84157688E3FD91B8D0D967A6C0
-1BADD713C9724936774E440B347DA2F1BAA110B16E5213F2849F21FBBA4FD44A
-013D5225520C3A5E7199BD749F26081C93D93C3C575BA9CEFE1CDBBE68E49F3C
-D1B87FC02237A8C38A8F26734C49BF531D14F6C3BBC31E2BCCCF359C88C982FE
-24E30E07F48DE73A25D29D1D864A5A4C4C2B26525723DB636E6A23C243DB571B
-CB2DD9413DE17E8E2949799A519A651002E57619969B1882B4E08CD1DACB0DBB
-BC87D31FFD4EF8630525D912212053A038E85FC83E697E52C1CBB4F90435380F
-238B1AD9209A9B0655ED96A95E744AC1790D17FFDE9AA329F6A6B526200A0148
-84311C64B1DFAF53DBD27137D5B452B2B2ADC7A3871753E3A65AD42B786FE55E
-013915EE5FB83582494D60802F43ED571CB0B000FE42CF58EFBDC01811F43EE3
-543592D332FD6DC67C50D3A3E70D6AF593483AD08CD02244CAA321C52B7D2863
-631B5852D07C8DF3C19EBB7573B55B21B507862221F6A5820F442474C4E8D67B
-60C7291C9D4D95451EAF8ADB26EE18EF87D57230CD2DB6F56E20CAAA945708E9
-8610F57BD7F2DC6771D7A00DE9C90A0D7BAEF675B7BD8E6F8E45959C8106D063
-FE5FB50C647B754A1D6E76A6DEDFD548CB2272C65E90353DD91E0D36BAD77FAE
-E14059544A8A39004BEF860D29B966862DFF35ADD59B1B12114787D578689C51
-CF5DE1A7D71524CEFAA157BA099A55F796B3B3842346D0C179A693655A2A7168
-562FDD1C2944CCA200C46904FACF5057D38359AF51473200BA2B3B90BEA2939B
-B295E1EE03D469F9C3B97749D2868CFC974D13E06AE669DD6B60BA9E394824B4
-644548E79ADFF26F9C129E75B1E216F86D5CFB68027D088436EE5039E9555685
-B3D8DBCB332C11346A3974251ABF85473B01A577F5A3D7ABD83A9C58E5DBB2A4
-341AC45D9DCF84B6245F08791864DF071D1ECDA4677647551B4161D2019F5839
-6B78262EDCB74E036883AA9F04F3371C5517A4F410C146FE67AD5C9C4ED9A241
-5523EA9ADB2A8D62C9B212B4CA78BCBC1B23257C73F8BBB3EE1A439BF03F1D89
-F37B117DAB805594C0C35A05BA58C67A882D878988D32EC11369BEC25A77B854
-2D26064A5CE9E6B2BD56A507B1E3C1D3DE46984819D3CDA1BFB26A5F0148E508
-FCD735D46B10EB1953070B5E5AD9BC2508BE9EB3EB29E261CC9D3AA6533F4667
-1951CB63518B1198985FC4FE059D6EC85051C9E3162969A57119FBC2B13D0FAD
-D0F1D00CF15C71AD37C3C23D59C0442A0345D950B6FDBCCDD563BE2770674C04
-FE07BAAEF593876057FC067B7C0429312377CAA45A9F10BBA7CCAA6CD089CC48
-865B84F68161EF7A9E18E636F26E3B924F5512D2348E103A219369E58D1E33E2
-E8630BFD79E89AE5F72F443794F49B86A6EE7DE3FA091980A5025175F82D7102
-F553D8F8CEDFFCC8B2945062B851629245E2F41079C8D2DEF229D8A091AF1B20
-594BCC1E13E790284DF5AA2E0D04E2FE23AE9F2B5393C63888741B2023E9E31F
-CB30FE539401599D73D7CD405B0715C9BD59F85CAE4DA30B6B43F68185B839B1
-4D76801697E8F8CFD723DAEA9D551C08BD98E9CC84F45EA3D7E6765ACC2813A8
-38CF78708B77BAF7A2A82A31253074F8BBFA66A11594BDADC1622EF3A830F0ED
-DFE623CEAD49C77019F0CEC2734EBF5BAE77D6186861843CE8BB94808B95BEB7
-A8CD7EE1F58EB3CC3E511F862E8A90A238D49B96BA1A0794DF7E508680248321
-D0F275EAA3B8032E9862DEA9C21F8A2F32DEC1F4B766A2F859180B183B75259F
-1F3F8690B63E27B4238FCA4A892DE87D3237CCE9791EF007569A5A57C031EC47
-FE4396518FAF547BC4D54F949FFDCB8088C0FB9CCBC89FAE4F6F4EAB18C2D99A
-6620809F801E8F1D17C0FCD01457DFEBDE3304A4962228FD0A2971A19D5326FB
-8443C30F9F173313362983FC7093EBC66E8282E367C74F0B65FB53E3B9F69CDF
-B4AE981C0EADDF88739EAC10868D2FA352C0391513CE19AD89CE2FF3BA11C107
-89B4EEE8B4010512E937F5A817AC1D22DCBA7079940D0410AAE272E55055D84F
-75902B70AAA258E5AF8D97C948C5C8696832ECBAA52AB3B86C32C307B972909D
-E56EA1702F2BEBFA2ABE99141B3C6899AEC091DEB3E88F988DA104704D7F4101
-20400C5937166F3C5BB5A9ED982BB243470290EC204953F2849C505BDF003742
-E841B71595CC2BCE8E8FEB7EAD5030A12205380569488BC8BE2F94055233B21F
-2DF9917A711678024C408F0ED061C6AFE4AF57F2BEBB978D14282393670E7AB5
-05E6CFD3120BCD4415E38768B20AAA4F6FAD526361680F7A98C7E46091B4ABAB
-D776F5E7296D2B8DE5D59C8C2F46268954D70E127E9D67577952F783FEA99494
-3C09F6AD1C6C3C84147E2583B7F0A025E5E44C31341267FE386E6BF247D395DD
-CF1F19F85BCB7DF444745197FB18F54EAFAC3FB20013D0A45FB5DD155F4FC4F3
-CC22A2126902E50D071BC5FC665D79C3AACA16B5632A91AE8A555C1404BE9400
-521B49973D21CBC1338FCBCAD7DDBBA3E4B50C06B8F21A8BE18ECB179536D807
-9A77D05E8B9B9AE48C171B8CB8872903D55B211B6F3307DD1BCC090B1856BD7B
-0757C91625D5B3BA8AF2EA6AD4C358A60DD5D0D77EAFE30FB2EB8920DCE407A6
-A06140F22D5C4C4ACB6358127A97BA4BD12CDDCFCC466F9E82C30D8A430AD92D
-5EC24A35769EA23ADE6EF9BE6A4CDF72B8D9692334A2287292E62CCE07037A2E
-5B945BAAA7AD19A8B01A698DEE9F467049C76FA5F90633BFB5BC5EDDB8B0F86C
-33E1FA95BE3098E669055A26C40C7683825577E8A04221A4C1BE8CA903CD792B
-A4B2DBE56F8869EC5C075A6B9E1948E16C8F2B182A3029200DAFB74A4B1756C6
-774A1FAE3859A332E7D4C5FC6453403CA6B9146AA39EC246C758C113EE9AAD9A
-F3BA67A3155DFEEF32C2C314A912575D96E697CB75FA56360714C9566CD2D594
-BF07CEA597CA1E57ECCCE5719509434D2DDAC5FCF99FB0B7E77F4B4E2A0EE69F
-E3557902B77DB0BEC50DCE3F2A718113D331D47AA060869911D692E357EDEEE0
-304B4F396226E09BED8EBB4262770726FF1BA06FA1607B40873035454AC7560C
-D0C77E4C844AC42A56491297ED36E588048C4EFA1944C6DA7DF1C5096B1900F5
-33ABBA5BE0524DBE33CF1F684FF39E09961A28941E94A98A0ECD771FE85ECE09
-56B7A0EB67081BC2932DD9847452E85F3B0C3F304A1C7A79458556CFC56E4E82
-3BBB0BF1DC6642A6F2F0C86C784880114BEEA6757D975FF6DFACB615F55A86D5
-5B1D89DC30E0C6EE912490DB08D17082FAD7D17DF6533AA923C1D19BB4A5803F
-7CA8E82532ABC6251C2E57984F2C2E69EB2661622FDBAD9F0C8AFF1458A2EAC6
-1AD73E27CC93059F79AD3B6CAFBFFC07020059FDAFBB045E3042AE0AE2FF3202
-DC779D424E985ACD37077EA3C5396A50E3D83576F56F80EC339C7CB11D9446BC
-B8FBDB7EB310AEDA870ABB9E035C2FF605AC5A872C705B82E5A523149DBA25D2
-5F4D363440D3F465727EE9065070506764962892BDF0063436E6A1255ACE1C4B
-BB511858F710D6E8B7BC700DC117EC29AA1C7EC99CEF5105F5C50780F65DF76C
-BBD81316CFA93008F674BF7F3798DD652672C196D98F28DFFF1CABD1DD6CCCD1
-8BE95B10EEEF2C15705170F209F6E650356BB92FCDDA6DC3EA5501A500B45E38
-FAA888E8C27D6BE396069C084534963338E1F4F7FAF1B9E7E7154A66746B9D7F
-3A4E21CC955437352B756FD3CDAB8E5EED9A3CDF
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTI8
-%!PS-AdobeFont-1.1: CMTI8 1.0
-%%CreationDate: 1991 Aug 18 21:07:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-35 -250 1190 750}readonly def
-/UniqueID 5000826 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
-F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
-84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
-0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
-06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
-5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
-D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
-93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
-FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
-E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
-46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
-8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
-4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
-1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
-9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5
-BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2
-09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF
-3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C
-E8929A4D0B22D91F760BA9E9DD64471815F8089052D36C7D074B770540F47294
-FC731291658BA2276D24E9B6EC311E3B88715BFB9308744A7149661EFD03B729
-0ECEA17027BA0714E177250837A915EDC7D2857982D3802AD4847A4105C25105
-27F24BB5A5DC038AF9FB4CE9D865981BBB3B20C8D844F19381936063793EEEB1
-DE9D4B7C02F8BE03540A73E053A835FEC00A63BA40148BD2F142708DABBEF08D
-2F38FE3236EA9828D094949E20E153D46271BC7F966FF62C1EDB874807EA4F6C
-E29DB1AE48A52188401BC30CBD30BE8F85193608AFDAF7075E04B352F5A46444
-A80DEC0FA05931609B2640E4155B7F2BE60AC0E3111B10A21B5534B8AEA1A766
-31BBACD36E201D1C175AEB5311DF55B708597398B0429A10D80A57A6C6414249
-9A99C336B66DF8FC28FF84E6C1A9B3BFDB9AB1C6903798AAF0F1630E918A307B
-7B297DF4E970F8A87BE325837134755DCDAC0BDA235C2ACE579ACB9019F3B401
-47E52EEEC8B279E00CE6C76D623C1BCB96B2A60AD9D439EF97DD606279C3988F
-393C2EE57E5389A3BFABB98A5D63500264A4ED7CF781E4E7C06532C45C52EBD0
-3C9761A8532F538222DD0621C05A55AECF139CAB5639DB02B3C42FB377A1FA34
-83F0F059C843AA757CCA9B1D6FC48DD0DDBD947D959B9CDCCE329F79C45DAD18
-B1D96524C7D08B4553D4D92A8240DFB2B7D4303D3D4A5CA41A975B41BCF52E10
-2029DACAFC31CAD070E48CEDD46F8CE5E04BA1288A1810E97C5B71ED10C5A3D5
-C612473A7CB47086872AF0FBF84E209427198E419CECD209E141EFF39C824A69
-9A97CBF380AE9420B5E4897B7DA0C9A3B215861EB82A80358179674015AA1481
-37CBF8FA080BC6E50ED0BD65CB39E46E53C6314D74F708A8B4EE7EA0E2AE1B9B
-6C776C7B05F8D0063D8282D0513C7EFAF5A3C391F34F2AA671BC50B04CDA5B10
-E1A3FE0651481F9B3436030FCC07A727F8FA2228C6A79247E76E8DC0F3E86C90
-E3EB821C7F0D5CD5DB5E6F04AEE79427E676C477BC6801E832ED114AB9E0F0E2
-2518071DAFB3BD13F968BE3F4C2EC3A4E2861BBC81D8F61F8479D73CE5AB4C55
-CCF36FBB6AA61D6C7F1B3D93BC8FEBF224066F33B492A48937A04F3EFF2409B2
-04018EA09890E819E423F26225F2CF48387CB8814C423C9AF36266E46B193613
-0F78579FCDEF7CB537F5F64EADC859507B9BE059FAF8610D3003F632D82FDEC7
-067255483FD8B430340BCAF8983F010C6645C050AA7560321B438EABCF03AA1E
-6F593D52F9E9555F6B4FFB6290B9DEF7A7AC5D77BADC7EC02B7C89ECA3FD13C9
-3532C6B3D513F8E591884A4BCAB75613933953D97CBA3F2E6A3AA4813DA2E381
-984186D5114662AF4F52DDB401A7C78C30287FFBA9DDBCF7CC5CBAE252561DDF
-6FC5531A20F16C0BE7CB4C1F23C6798B5A62C5B1F38030C97B15B07E4B78D824
-7DD8E825C3B8BC1999484EDC701F1BA7F0A3EACA13DFD03C39D7368920CCD465
-B5401988580FB42931FBD405E5E0B053B3C687EE45B0FE34AA98CF908FCD218E
-B7F45649C03BFA8E67C7DCA11343B3721DB05746C42A6CDE0FCD78477D111E87
-BA65E8A05F22E9F93ACC689176F85CBC1D95CBD090754EFF17D7FAA6F348716F
-69B179642D0692736721FF2FB72E4C6C366483D034B480B6696259DAFD577528
-DCC059B2B7FC29B2A3B8FBD2CD0DF8E4487D3B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-/UniqueID 5000791 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
-044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
-A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
-23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
-19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
-1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
-8BF14A1B80CFC86EA87941C0D90D77302E6290267159F991DC9FB1B4B7889E81
-9FD2043B3DCCA402D792320BF9D6258CB1AC5DF63A7DD2CFE52F24F8476F4E88
-C8C3971192195BE2FF48B92DC53CFE45323991DE2BA6FFBB1B201244BA00689E
-AE19B123979212ACB4611E80F54AA5D9A9F678E8429E5EDAFA40D03D9B7E80F3
-96D344504F451976FE110983B458022397F01068A7DB03492A25B7D318162CD9
-462A201C0E59221F73B8AA45BE3539328603DA3C587E4FB9BC63DEF1E8069D5F
-CE3C3FF5178B5275C1D2A9835ECFFEA74E0B555B386A5433196830C5E06866FB
-868837523027DD287C8B2324D0B36D646CD59D68AFF231D2C58EDF1E56345CB7
-08EB24EB554480A5FCC15B1C8A211ECE6B83042C061D7D87EDF1C77AB78F2AB7
-752E32EC7EC79396AAA0F8EE3330EFFA75D870961A68EA3904913B669D11230A
-B8B762CC5D9E60F72C19017671419B31EA2D94287C6AB1385F7053F1B9A787BE
-FB3F1A5295BB765D090CE6088068265C90DA1EF5918F77EDD5B27781988014BB
-8760C78A318357393F490798C213CDE82A31B59FCB971E31DD7AC469ACA9D35E
-69FB703D13B4083D774BE0D3152869557318AA762EBBBCFE76F81293703ECE6D
-170010F08B480C46918CAC0C608650367CB5B1F70503D8E4264AB6671BFDFB8D
-A810CC6B5500A6F147ABFE2BC5D66AC681A37951811946A6DD168EAB3B547E4A
-44B4F89A81D0DC71A689577A5F92B0F79E30025AA994CC86641212D1501121A9
-14D6ED71E6D202B98BC0A2A7993ED5FDB2D0FFBF0917F31FD651937582B3BDDE
-A9F0BC591544E004B03E092E4197C86381D0000EB0239F21A9696CFB555774CD
-590120C1737138874BBFAEABA024198BAD39A0C391BD2FDF3067B9A04D1E406C
-ED3013B9123C78D8448740EBBFF00F998FBA4AEB6D87B474BB7DC1E68FCA3E90
-D23FA28575136576B4A645C65DB00CF5EFA7255F3E843ED280B59B0F3AA54D08
-9C03020A4B4FDC801972ECC5B8B9F42CB46F0EA91F0C25A5ED58A5F85A3BA278
-801C354E44B96D39391F4E1B0073708C231ECC1EF6E81EA90673B754DBB742B4
-1DE286BEBF4E748AEF915FD017BD552FA5B97F4D2EC8B98EFF1418D9026412F6
-20F4FE4C56A01CD97C6CAB49BB738AB86A7DD112333A0BDA5CEB70390CE12C9B
-FBDD5982B1C6C458815158B16551C517C1371B8062E297FBF4D936097F0071AD
-2A3E061AB1767F0240F9EE7E3EADEB5C66D180D2A28508F91E84CAB0E6839472
-4D178730F2B3CCFC10DED61D9D325B659F82B741B021DE4E251030D528170BE8
-D35BDFFA5A2410C2F0788649A1B026D80D848AB252666649622E3C9455827C75
-1573B1D08525FC443EF0BF3A83FF5279039F9555C7DA2A8D0E07234C5985282E
-1B49BD8EE56AD80AEFB203EB22FD1877CC307580ACDE659650597ADBFF8A5266
-DA3685E0C1A6D1B60CE7CACE5A11B29F4A20FA43A5228939B441C272B4CDCB9C
-E1E5AB15F1944EAE3F1C9E2FB7D268B3A773D2C1DAEE2E329F37C36F2D465C67
-C2E210A13B4BCBFA6EA6A2DFFBC58F211E52019BEFAD57A86466837EFF8C40E2
-A8EF77F7BBAB80BA010D6D24BD0B866ED0AA63A4708189CFBD6230104629B93D
-BE21D688629C6BE6F580070478BA411BB2D292A22F729C4352C8379ECE0D2F7D
-C347EAB1BEA58AF915DCA1637923F4B8090FE8D56660AA50E5D2498A532BF61E
-72DD906041E8A821F1A8239F09803C5AF00E956531B520D4A4128F3FCDCEFE9F
-0C8AF6BDF60F9E5731A04A5A187B48FE0ED44A93DE974478E8965A4515799022
-C43FE39572382226902008794D50FCDB59F972B331C7638C5C6773A5DF9003A6
-F66BBFB665FFCCDD0B6DDBC8BD7D6F5B32245E8FEA5A970F8BF0040256D335C8
-C515B7777096F10E93F16443A5CDF261538F03C4D4DABD66D70DC312D8DE84F6
-1E99B3A3E51BEFCDDA6FBC5BC113401B76B98C9C193172A330DC106C12E8A4C9
-99247177DBABBD84E3E50191B5892C0C619ABA073DBA529AD0B9E7669D58FD69
-CA6E1A8B098DC0F664D5B9409E103C6CCB690F5C1ECEF637BAA6FBAD0A723240
-6DAEF7A8A02F9456F5DBDC14BAFC10D0F6F545EE767EDDE674C8BB5C62DBAB5D
-6AFBD6138F245BA0EC856260D1044CFDB4C714FDFD704C00EF8E6B6D2543F695
-0DFDB4543B04ABF00F515E174DEB33770C1514B5E7E937050E53B26A9B2B5AA5
-787E50F1FAE31C6506DAEADEC37CDD59549B61C29CAFEA594C37DC0F9C45632F
-6269A800F20C73CC212DB710BF5B4E04832EEBF490F1E0D85E3CAF9CE860464F
-708B75F85C795D4F0DEF0F02781B6C9850315EC9C7973A9DD1AA663F4B10734E
-E8F44A2F1712581BD0009D6E7365D37731702AFC40EF41CB1E875A9FB5106447
-DCF41BB943B2076570F495CBAC8D314526CA7B00024DCA866C5BF11BD419C973
-290D56FDCB2C8629A378A2EADFA85E0E3E8230DF5E00E5A530931720E82F52AB
-3AD8AEF245B964D4A21EEDBF9F2027B5A49C1FD212C7425B8017E79510A90CB6
-30E61C59F46DC5F0222330CF03401903C69A5354785844877CAEADED40355C82
-88F222294108F47792FB442E4C64DDF24393E7778A0E022872BF11884C5FE470
-00AA48DEEEC6C96A6E0C390D6E3496F6093EA6FC70D81858833E9243C47A45C3
-33C4BA2A44914312932A086044392A1BBD6207DC3DD24966EB6F8ABBB9E84391
-90FF2A7B6422EA91C4C9D8DF68D53AC1D93ACC430F9B809CE0E32D93EF4BF2EF
-299FCD0AE594C0BBACC312447C72C2DB9FD3312D2F76C1CB2E6CF3C4F5739D66
-C2D464207052DF6BFE0EF599963340D95C16A03CCD0F5A501DB0F7CD22325584
-2A48FE10A4FAD4B3A5845A16C5C54A4A85532706CE291B480C1522C1B5F1755F
-07E6CBA667A7EEC349EBF3F128A0872193E5442DF506F6D2C2E22D104B16524C
-B88FEEA45A34458926F3A096572856333EEA7014924E9326CDED5018C29ED896
-972B44E63C08C191218566DA8E8D20C578D3AB2E992966B867353BB85D0A84B8
-60B20A615A74F684F3CBE65963C1D33B529488C0AC8375F37F9BFB4C9A3ADA8F
-D03A39DD1371EEB680C75F6F7FEE4008D1EB500C442FD1BD99DE74C0E3D00333
-9F871224A86A29AF3E043690862DBA2684E572AD2604C9A1FBB2CD0C28F7F11E
-BAD9ABBBDA7227F6D9B351B5A6294BC4723095D62ED96CE3010F6F2D319A2E15
-489E011D1BFEF7F5345FB944F63F7068626207434D7023C8690FAB66638B265A
-80C1B1C3D91510AA777B7A502FAAABFF1B548D6D3908AC9A07EA8182F5B5C1FC
-38239853EFDF25F42A52FB18CD1F294C120580B92D3441D2C0D13A22EE384E4B
-5DBCAA933533C895E853CAE0B387192D27E3BD09536FC3DA83E000E42C4FB0DC
-3D46FA1222A5263326E58305BEB6735F82DBF32EC40BA3E908A960A0931B4640
-A6A2FC32CD3E7C61ACF9D2B9F22D5173529D0B26C5531E3F6732EB7F1CE6B879
-779779DDC53AEA8BC17359C12D8D7BB0668BCAAEF885D980F7268BCB75136CE8
-965BC5F4C4C4E848AE781B95D708BA61A69BF213ED04B15A45353037B9ECC7FD
-BFE3792F4F572FFED4094B6620827FFF2706830AAC89F75F5A97A1B7329B46DF
-B143025B9F30B7D9B26660DF76FEF6EF3A3B0468077623A222FFF775C19C1460
-38C3B5E1767062B3D81AA596CE7817E0A4DF3910127476CEAD86FB7BA7A55F58
-618EFE3D350421D66B9E313860468F2EF90B4F111240EAE3E707AA30A885C1F7
-8F86BC2AAAF361F791FA539BBE593D121BB460980CC0F7BF7AF686B3D0748CD0
-9431086F4E5639508739231088D2735BAF229F2041E55077057FE940959F442A
-62D36A8C16147C3B2FCC2B76AFB6FD44EB4CFC1B748569D9D72CA699F73AC399
-52E3B1F4FED0F235BAB500A04D898093688EC108A8FFDBDD19DE52B3383451CB
-36AD1F04A4C541248ED84930B5A808B2F2DD797D811A5608DEF6F8B957C59075
-A1B4E1A29D78ACAC3A3CAB851AFC9042F6550C55B96E8544B75B03FA89C65DB3
-FCD904AA29CAD80DC5AF00CC1AFF016968C60BAB1D85FCCD56944FB30D9AB98C
-551656B960C1EDD74E1F5CC455F62C20830CA5AEB6BB83D533824BB9CB91182A
-822D15DF54799B44D63538A972067122BFDB0747BC4CC693F7D4A6B951EA16C2
-7F85F4BF6410B29A0F3B03ADC6661B70E7C4CD65E47E2C77636318FED667CFF5
-F2CD4EC2F9F9477652FB1D8FD838E6B3A4A5837335358B30753597734C201067
-0D9E4EDB28E125FE25337C2C9731DDAF2845B0F3A1DAD45C022888A6E243405D
-3C65D2197CA4A17B4EE675B784918E2F1F0576AF0786D2B40ABAD46A1ACE5B5F
-D4DE512CCBDE07B9A8D3647F36745DAD044AFEE839BA44A6916A79BB28092FBC
-785653B897EB2D694D6730F8B162F50B181B8DB664A94EB77E442F1CCAD9B91F
-AB2E4912806E9AB25237EFA5097E5E51F70067DD14DA6277F8F898C610B8FE17
-CE1DCDA7B444BEF50B5F709D6A7BE5945FC49DC833A405A737DC1B36C1BBF8E2
-9C38F60D78945559612E86D41CE7C1CA721BD61B5265C1E1817BC862F1D91885
-48E1E0C2BB3BB6D1876C406D43E98E72E0DCB8B97633042364CBFDE2899B4CFE
-0D26719C9E52ED40CE5FE47492EC8D7BEF457FCBB4278255ECEFDE45169882D6
-D7AF4E72ECC3F2D2B69189E8AF3694ED3CB87A2549C4508F3E4D6004B24CF325
-F95A93E5E775D47E67DBE2E15189BCC7A0BA3BFD5B640BAE0CEC139A92871D44
-0B19C6043F0957B7A5D4801A799BA5C5922C70F95C2B63760325A0375CABEB7C
-0A1DDC8A802A9C1C38B1053493656138BF56B9DD2174212A4815AE6E224CC09E
-03900897CAF4855AACEC7DB9B900CAE03E88F22272B6338281BDE74A6607F73B
-51937EF0125EA515B9A0A7C6A522A29B2F6BC10831A89B5A6EF8EC93AE8AECA9
-EDAA3E4546B637F66582874C28CDA1DE580DC2B50E8E81DF837054C45235303C
-F11674B44A4202C22482B54BEB3465E883E0B3D88FF92F0919F617F1DC83F686
-6C5A73E422A2A4B51B05EAC745AEB7647A9FFF28D8093E89D44908F73FBCEC9E
-B053F368D1223AD4DC83C0E10E36E34ECD0DC95100A3F264275D6B92FF320E86
-F7DF0158E6AE017A43614B6DE57155A31E857934752769D0C74A846B890F080D
-5AB823178E9A137A4632D3482656B06822709E33738A4297F3613CF9D0CA25F4
-543BB149E3712673AA2341A1035B405BC64B12311C1C248ED8AEBCB1EC14A93D
-435EE8237B989E5F3CC50B4DB6AE9E944F8AB5FB29CC83AD512A4DDB7C3805C9
-85192903A94E8A5457B3C44F8A3A691116B4627C70151A83339C7068B4FAFF6F
-6E78C0E2B80427124C32369AB384281369D61DB5BB73A8B31A4CB53A40FA2E89
-F077EF9A2F3087380189EC367F9E1A874E45202F5569A0BFCA384E0AB6468DBF
-17467EA8EE6BADCE96FBF33A8C71412CC27D4AF6823B02EECC9025EBA83F79ED
-F717C31858DBE1FA2AA23558601234FB04F653C059E3F5E054E5C6C028E09D03
-F84009FE152CC9E0579BD81BBA35529F0010080C32A8B95756EBB59DD334E1F5
-D3D36EE69DF0DC48B25FD1DE6C94F2F6DFCE2E42454B9BABDEA974C04E5A870D
-FC44999AE2C38B65BAFD0DE49FD2F414AC30FEA8DDCE2ED10C603BF4C6A424D6
-7F19DD07956EC412F3EB92A72C66FFABED9D5FE202C3A13AC50A2F959C4FFF19
-D103C251F836A7C24565F6FCC6DF2AF7A3D23727824A5CA6F552E6C95A43A32F
-F85F77FCBA49C0998FF15B855E46E5604AE7D5D5D1B50F7EE17F0AC2DDCBBB89
-D10F56A312581695995743E74C8950AC5B58268E32B0A2921CFCAE0045DB25B6
-EA75F1B5587F0375E4AD5849DA29AC8641B4C1C28E6E82101C3C31829E27FD5B
-86203B6D55185CF57688B1C10FF6AFC9B66FC95E0FEEF60F3201B79A93406105
-D6B4444603DD1748EEDEBDE3DDEC23E23693FA76BF47A5C3D6DBBE585712A1B2
-87AB906A81E20924067C001960A1BC3B13A3E0BEFE8FB79BE0EBA8E6CED17872
-6250005AA611C5C0CFDFB11A133FE14FED1AFCC31A8D30593C532F1519711DFA
-A9385A6642959178F2FCC67FD17A5EE8AEBB0C5D841ABF0BCAD002116DE51C28
-2798B4EA18FE4A5D947C1598F11512505AF16514338BB84C2501662E635D3F2A
-3E52DC99A291337D155F49BD6F35005208F9ACE1C8640E984C608C6A321420D1
-6705B57CFB6A53FBD11F808C3D7E6CEA990106D16D3E1C7460B00D482337BA02
-491D4036025E841F7E31345CDAB4D5BD7680994B9CC43CE39E1087B1F8FE67C3
-B38DAA6AA9C3469CFBA00EC22E8674A71BF9AF9C4CC099C88E68B407B5571182
-24D3AA59AB73916B344FA75D21C17FFCA0FF77CB219EA23381B0A9BDF18D905C
-B9D7F308CB9E0C9706A8111BF12D96E41D6CF3CE968B4C7BF6978182462E1235
-622026662FF0B61567E789CEA1A05C06B23A57FE1237C85A2AA7957379AE36AD
-238727AFF6616D47994E5321A2B33ACFBA44131CE06ECE6D1B1E984C844C2F97
-A433CD1C80572DEBE27E4DC4803897E366DC8BD279C52F1B27E86AFBE63853B0
-2C80A0FAE5D752FBEC36EBC28E2F2EBAB76B67DE54266EC36C72474252E8FF61
-775B07AC20B1D8F362FE5D9CB019C990D7BCDD89FC23B65147F20B7C42528E8E
-4028836C82D804A6CEA91931B26AB339A4BD16E6A409FFD5BE53BF9DEF87C14B
-345D4B419A0EFDECF4B6E38A5052EB17F8DBA13A366E899AE1E15E7F03604AF8
-BCD5F69BDD79CE7FFBDF4FC0F16959FEC98D644951D34C8BC06520D4C35D97B3
-FFFB9BD352B157801F18D46B6B9CEDD145BC9E600F6C87DEC9E0C8DB829D241B
-307B86E1D15B6A765F3D7A4E1ACBF2E7FED1ECDA0E135914E7E65FDDF4BFEEFC
-C4A444F035667E9AC1A3C114B0E1715A717A76F6F9B01340D88025A8B620AA7A
-676F56FB2FF61B8C52C103D5D925A8C0234E53D9557EF83C1E42BD4D8DCF1E02
-9AEE022478429DCE5ED10E3982388DAB82035BD2BC63DE9A0A06249FD2555C41
-8A22579452C7DF050AB63CD34C34E2E8008C7DD5E7B289849367372CB4F9BFC2
-018224687F9FA2604DC7F3C332801061568A1AECD3E6326BDB3B4E694EF1C6F3
-742B73C694250CCD558693FE3763E71A29EA1EDC95B0827562921D87BDAB85F3
-DF43098DDEEDC5C3CADFD9444430EF38A8EE51ECBED7A1D34284ED9FDA605C2B
-7483260C603504E23D7E73EE4295D47FE51EB2A94F9C796DBFB7BE0F8CA985F0
-0927654CC77F66B09916750F898551077F7012EB87420E684C9F01747449487A
-685C6E27E3BA4E7C688E263EF955B49C9C26F3B214A0160DE93617DD5099FAD5
-3E177C679ED0F310506C71E794C97473AE847C7B2D51E49B274BB72CCFAE315A
-9F2B429E0E802CA8870A0C118E986EA1884AFD6459BBF3B10D999439E639D270
-72DB9BBAF9A2D249EFA49028D0FB5A61FB4D8E328A13E89CC4E8370C01B46D86
-3C5EE96101ABBA2BACB1DADFC6A010FE08615F5168EB9CCAAEC199CB14D998AA
-8FC309E8EC5D5599396BE6F08A69A8481E4C11D98DD4AB5C38A8F8C2D5480269
-C4519C508F9DBB94A9831A587CB57CF2061EB6B86CD7747BE914A572081A7312
-4F1105CEF47289E49C90DC76226D790A9F7D32B3B3F53BE464E099F0A8871871
-CC15D32374BB1355AC8AB554A26DC956CB67D115E66A521683D5D7F5A7831D09
-DB08D64AD1D19DE9D0C308070C4195B4AD76474DD94644F7A16EB40475E38A30
-3E0A195293E8B1AB2E72D5B08714ECCC71EC7283AA357D652378F62E8BF1BFD1
-4492CD2D71BF8535271CECFB89A91F68C0708FC6BD944B3E17655A9D1CB783F2
-F265CBD51E20763763F197FD99A4CF2E817AE5AF3F535AA33EA74E0146FEE793
-9DADA7B9AE68EBB697DE352993FC9EB7A020D8069A63D892AA3E2FF59BAA6F6E
-BFE6677E854EB021C269746C017F472074B26A8F475401FF688688DE292B9D94
-61F0DE15A1510E1EFCEB61E130338DD99997CDE422F1A5ED1734AA02B8BE1715
-9D0262849FA9C025372C6FC2579FF1AEF6AF81A465E4DE49E5E424918C9C0B24
-B2DA71C411A8587CAECB3FE6566F848F65397122662AB37528F9F5D7285C5BFE
-3D8F9EF51F5745AA081154F659956CB1552DD8D47EB6086CB9B032A983F3584A
-1CB5F9FAE3791FDBA11725396AAC14F532696B16E8092BB6D3FD489D6D0D506F
-F52F91448A5A311248219B590F7D123A69AC6E0AA1D8CF389C6D21FDEB1913F3
-38C75D3684914CCAC1EA0A4644F42D669ECE5F16A49F02245688133EB9D3863D
-02E9FA92D9E5254CC359552833FDAF514C2CE9C3989CB2300D06E99E34C45594
-704CA31CE8006925644A528AAC637AEFA69EC0C77FAF258D3196D32B7BDBA366
-B5664F0CCDDD5F16BAF492D4DFAEDF344DF5369298D609769C1F9CB726FCC4D4
-102D475C6D211ED61B75EB9CB174FA1846E07D7A97F3B8B93EF9A0F3B9342507
-946DAF77AF6B4BBABCAFB946F4CD33B7CCA3A7EBD8A66BB47B7451EDEE73475A
-5AADC9910B81B96B568E64233F0A1F2DAF9D8641858E68ED0941197EA8491C76
-9D823EFFAA13F92CCBE830C7C32EB133A5963983F3CBBA36A9434DF675E1F06B
-4E6F3EB2F8AB8C0F6438F7F9EC8F5878FE7FF564E5B67454134A39BE7E27764B
-DABD4411ED22E14EB025F30F6AF60E2C4C0D854B79DE34A8FF5470568569B9A7
-1D733CD139EFDF0319D440D29D21CB0046838AC6BC9C5DCF7CB11BC5A2D177B8
-D6392C7A31AEFC7997CE788F09E31108E62F6BD3F959622443FC3BF85704FB71
-9202377E3B0B8A1C0D6CE986302272196EA62BDE76DA2001336DFE575C9EBBB0
-A729EAA93A78D9E5ADF352A78F5C792F5F4169D228A067CB3BC94BFB8D13F16A
-53A0291C4B91A8E0654AA622152674AF6B0B5176A645670D664589FD233EECA3
-3F513B48265C795E9649C0312FFE51F3EA291B76173DBA1B5B1FED466B8FBB21
-97580AB6838FB2AFC43F2A13594058FBE491845D327CDBDBAB257F248E12AE54
-78E499A685B290F3EE08ADBA0DB7B44DBBEAC8E2100BC729EAEE0081D15BF99A
-BD7B61641C0965DAF9C26EF15F5F3A6F3058532249FC49AFDF4000165EAD106F
-728D91EC9869BB9AC7665EA760F6C87A6842BB4873993129C1679527636917FD
-2AFE3E16AADFF862747BC33343BFC4F24EA3537BBE8ADE84BD638CC1E0D1878A
-08888408B94202672ED59F900E449D77B30F037EB0916CC11015AF49955487AD
-E322715A09E1F6351D2E046C1BA39BC73B275C18494AEC2F85AFA96E15882929
-E2D9A6907A5B9C4C10EC5B65B7100626A8FDA9466E51ACD39C06E46D6C9B3CC1
-893B3AF8DA48F05075CF62EBE43B295ADC0AA666644E2EBAF4E195B54FA4FB62
-89205A30A3DD06E85FB965DD72ABA98894618E3E76AD7D64B514CB7FC52BEB46
-EEE12E94995794E7B90C95D1A0E06A4AFBD8A141194087C8C8055DD579E4BE66
-D8F41DD45888FEA1FCC4DA54DAC5794B01CADFA2907D01D4C630F4D8BF04D410
-277410C7AFE71DD4D32B76B6858DE013CEAD8783B71477FBB32AF1EEFC9C26D5
-C2B5CC5873B7DDE46D2EBA30E638AF848EC27B8C4BC9460E518B07B9A39E56CE
-AD15E4D235D756AFB10BA05A4EDA896E500154D40EF497C846693426B865543E
-E56FF95076A33F772A63940B4F54F6C40A0A2EBD260336BF412D96B626FE321C
-3C327D8DFA5A392E2325B620E7FDBF85D27D4E473643F80266C2E25F4C201F6C
-B6083D37DFAA3B3B6A06B83A1C0E6BD191C4D0B4E48DBD0AF98A01689F990892
-C8FAE24D3B3F060566268914DC9B3004046EB4355C8A9103ACD6380315352E77
-C1C42AD28949947A1DBF7D03177DFC37F7B1004C480F6EA65B9D6A24E56FECFE
-8F228BF5B1972EF9B2121CBEF1CA159C1BE844AA7780EE6D7E147445683E7396
-B1AD83855A6CA67AAE7A4D9E2E0E1433BEC45D1CB90ECB16217CE6C1A8C9CCFE
-5B2502C671FE68D9BCB72D25C13DEE55FB7B81277A80031A0C157A5F0FAD0733
-893D772652B9729CBB7922EC0E475C3E99B2236398FAC5804D80FEC4B6FF35D8
-F2A9B022A96408083B2B242759239D9BE9555BA84FBD5E9ABBC9428C9709F487
-8430C56C6E34033A1745FF5A4ABC0FCBFE34277CFD0542C2B89CFB93DEF83BF5
-1F8E26B001287F9BA25D62F32D2AC4E031E1878552FD1519ADD1B3BD2B1ABC92
-E3A666E071950838FAB2C3C7D70A0A7503BD0AF56B16FFEF26BAACD38B42B333
-1C02DA9B71AF245687460B2BB40BDD62C2E99CECA60E6213E904219943AE30F6
-52C081AC9B2C8AF00284D9B4CA6122A58B7FDCB32BB7FFC4690A5A50C8E728BC
-23E4CEE0F9A392D27F48C5015EF4BF9E8B05FE9F0CFF7F281DABC81774EA2ECA
-6CA3B43F47F07474D443632EBB4639D2343CB06560B76FCA6957033BA0081FF9
-6F3B0274BE270645D69D60B8ECB87F984576E9A27BE318F71B45400494EFA5CC
-4C74004B3B9171E52083351C44A78CA7726A0E24CB4F65CCE0D28F9D21D6C92A
-DAAA3592CB158535274C4BFFB16357625A025965DE5021833ECC2EFFE16E0DC0
-55FD206DBFCA19AFDC893A50DCF2428E4BB19C8D9F68A3B50BF10D01102CE1F5
-AF608E672EFB001CC9F6913B21C3A7D30590E5E2FF3DA9CADB4B9E33E7D98445
-A6944CC86DD6AC37F2EB63D303F70EBE70509DA04B2EDA3117C25FD5D45AEE2F
-BBD9090BA4F81571DBDB6196AB5F331CDC5FF662903334EBF3C1D9C6779D20DB
-2B05787C187C0EF4E8E7A03FCEF9D48CB345B0C77919458DF1ED35BCEDB0E597
-7EE30947DB24A3E6AF18B17AF35466AE3E40D06A6A6AE3731F69D37E58EB6F4E
-2BAFCD651E8388E0CE24029B0692F9D44833E25BFC7335607D00508D7AB127EC
-1B4FF2652E339B8CAC02264BF31CD50E385DF397E44FEE105A77D0AF63969D2C
-BE01196598398737269925EC85D10727FE1B96F0B2D5CB69E36C6EB4338C4409
-A969FDA36C2A90F22E1501960877BDBF403BD37F5603E071ADDA4B360B301050
-706C5515738E647005507D5EF86729CABCD01937A16857FFE5F86273C06AD06E
-00333A66722247EBCD17757BBB842D757175F9B8881A3C0834CAE536B3A7C6DA
-A746818E5CAF8296B2DD0C5940AE85D20D6A7F6888C721ABFC75DD4C294E5424
-2549870AAED6CE8250A7D5902B2B1E99379F17C7D14D9B62A603CBDF3D5FEC98
-198E8360E1701554A0D97FBC876A7AF707134D5786E5D34E2D47F7CC87C869FB
-E992EC58BF8CC5B83ECBEE82C1C8EB9286D7137C5AE7F73E082EF8560305D4BA
-AD0CA91698FD989564BF6C98D68C7CE4FF7D97186547B52A362DE5339A0450AF
-A75DB23B4B9EDCDDEA3CC78BC1C75FC39A778C45E8FDBD1B3FCA9194F5E41A89
-9BFDA9F61FE3F20279257040E3B2ACEF5956A8D9C72570317C20057AE4A03201
-63DDB9CC4C1FAEEEBDE52371D5A17732DBEAB3B9712D0A17FD180687FDDD0BC5
-54C47835C61C94065455DF39620223BB710791DC0C13FD62997A252A8C56C976
-F67D8CA7E06C6F1ECCC4F5E2FCBA9CD86E47435C0BC97C7B274D7AAD7585C80E
-C8EEA3AAF912BFC5C3C4761445376AF71B8D0C390F41E18F50780C7B1BE14162
-5BD852540C5C64CE29BE4E24718B30445B3A048B7020411618FB48C3ED41FF8B
-C3179293DB012D5BED8BEF796AE94BF90C5DF029E4322F20431054C93D50AA33
-9C4658C5C3A80DC58C64E7348DE17E96344B6A0DC75A21ECD1CCA7CB06FA202B
-9898A9A87C859D73E00CC344B525933262503B0D8BAC14D23E8740BE08259CC8
-8A1EFFD85BF79515BF645E235C73B08E1069953D5D53E1A352E35B19F5828176
-67C28453F82963582DFE14FD14F4E3241B40C8BC1E9B4054B1C3B9CBC6
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-/UniqueID 5000789 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB62FBEFBEFA
-AD08ADD6648E354B05E584C970BFF36D9BC219EE88E98C75903F32254CB0F335
-039C46C343189C05057C16095DD1016930DDAB4414ED0A35B46B09F51E5F5DE8
-7F10D3D5CCAF8D75A33444FE3D6DB5DB7D233CBC0587B60A85E47F5372A7F8F9
-3996E1F286B2164C464B0BFAEB509C34F9B53B05B85D541B4681AA0BA36EF22A
-1CC3D8A897ECDFCD74317728B7A1B89FA432A89C9A24C1A0BEEA327DC2609ACA
-393E645DF186A13DE83E95DE6D0AED2BBFC859CD1686D08CAFE0F6540CA9B90F
-0C8C794B7DEA073844AEF6159A7B6822EF81FB60CD612C2639CFC88F0F49EFEF
-FE3633EBBEEE20D42914E06BD0FD5AF6C735531A47C077632EDA6577FE6A9706
-0952CAEDD5F4B03655B1DD687F5A00FF09F161DBF4EA3E03F5244B091191F519
-F982E6B6F2BEC5F4B06E1C42A037A344FC5AEC947757E37F19940D62E454E014
-A468BAAFC9992773DA2A6C93E791C6625ECACBFDEE8A8E9814052C7388084DB0
-675AB90416225FDB4C712C243491316A87FA36B06EEBBB8C35BEC83932D62376
-BC569B468D7B084450C4D276F290DDF0CB8D3D882BEDE809BD41BA1E0312B41C
-895C57F748221251B679CD25F7BB2FE0B48935C658CB14F3EDA656B0CA2595F8
-A8DA917A14EEFBDE26A7E4A2B10A63AC616A5B0F3997B4CEB45297D2419BE813
-BF36D0711DD3F69A701769C52BED618C0C4B93B7804A0DD3209F5667D62C6A56
-E58FAA269C5889BB31E3587D6845E5830219A09EC57BFEC51D73C60295ADC4A4
-C498F94320EED1213D8A84CEDBED63632E01C06479018CAC8C961B7BD63C71EB
-0E318D9C52638782DD17573790555FA3DC31E5FFA82594F597CB6EADEA7F2DF9
-BED2B4548CA1F7E898D4A756ACB4675C2CCD1229AFA84E4E95D5D843D9C41B8A
-44669C355A40375CB97CC318784B3C0F6B4AFE021551F19C63FD9721A767B423
-2DCFE6F617774255A85A0A4A8009DFBC1FA5033898A024749649F6FE48A81CCF
-E919D79F7D6EE1F36EB074B022324808A5627EC136773E33885561059B92173A
-84437DC6401D82F9C159AC336068FF78B6F032B2374FDC2878184E1AADD0DC20
-84C31498990ECACFA453B2D2C346553C76E6ADDC4007D15FE270582FEC9F63A5
-AE91F43A5EF1646B028DC9EB7D0004C9DE0A739AA3AB3951FFF6A1FC123DFCDD
-914597E7B735A9EA166B1DFAE48EE9037F98BB2EE8C8D01CB44158B6981FB846
-1CE1CC9547519B9675EAB1896E39DC9FD3A15248E90FC9F78CD0486ABBBBD986
-D9C9BD00354F68E184F8BFB043052BD038453FFB6E4EEFDC7421F10F6C35B205
-6693A86AB6DF76C9333A2C6D691211F65F6323A20F73FE
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR7
-%!PS-AdobeFont-1.1: CMR7 1.0
-%%CreationDate: 1991 Aug 20 16:39:21
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-27 -250 1122 750}readonly def
-/UniqueID 5000790 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
-E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
-47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
-8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
-78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
-1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
-01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
-C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
-F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
-8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
-A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
-455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
-9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
-EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
-52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
-563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F
-0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB
-7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1
-0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4
-1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A49A93DBF6953
-27E62C03870E8063F974AF7FAC75B50210C4D54D66B5B8C0D4614FD5611455BA
-3BEA2239FC8C365D607663D509D4373E9FAC1B4DF85C9C371BCA5345FE710867
-95C699C4CEF898A8195D49DDE3B8AF4AF8B6DA77AA76B49032FACCE93C3A5680
-7C0901FB01381F5C4ACD0C0102D9A125D8D710C845C25A4FE6A4CC1A559529C4
-83E4302DB39FC94B57089486EC697E7F4F94C5840DA6686F0F9C171A48DA948B
-587E6D30BC6A4610C55BC77F3D7163DCF8D3E43D1FDAD451C3C5D509DF09A9EA
-DDDBCB815806E57CC6328CD202A5184073C9C6069F6795228BBD9868F384C792
-0E04BF14C1EDFDBC07D78CEFB47CA4B74C354817A7B08C375E4B23B6865C505E
-3CA6D9540A0921A090D88782043E9FFEB012377F0979B1F0E075B6AFA05C8359
-839CB2F2E4906F1E28918B727EB5D3C5F5B509BBE712FC73D1E2D182645E56CE
-C58ADFF1CFCA77F9A8885064F8B2F12DACAC48225224069D0129AF964391B54F
-26DB52E1CAB8017317CA36FF2F729C17F860981BB1184E69B4672EEBC61B965F
-12E1AF3EE283268583753F6A3B6FAC90C60542A3312B5FCFB1D4D078CDA24274
-2C1765D4557621BC7748C1C3A73AB20EEB26877825A49026A099ADAB32F4EF56
-98FF28ADB6301F35B1B55E9AB880D452313993C909BA57CEC6942C9376BC13F9
-17F93DEA99E7DD43F9D4783AE970E955D2ED587B77ECE43DCAB0ACFA16A2197D
-E3D853EA9295B8CDB2786EDC4D061C632A8548CEAC7919302742BC63626C4760
-1611B677005823B7D35EF906146BEDD655D121DCEF12B62D19937A5853D8C24C
-5B24FF693D71C3D31D3D40981B94F9528C904A16CC80284B731AEBAAFE8A410E
-BEE8EE8CCB75EA13466E52E88043D8BABD3E328BCC7BA5669863EDB84C4E4DD2
-45171379BB36E2E69D71356A8582D98E3E2A62F8C662A5BE0E88ED51C8616CDD
-6FF860861E92ECFD82B133EDE7A4D8C14EE537B69C37403B225BA84EB0C036CB
-5209F415EC574B4A5967173EB3093E11E095CFABD44D9CF99DEBA69F4581D7AF
-C23EB781FC188651562FE3EA200864DEEC9916A836F96F0F18ED27ABA1CDCA1E
-194D83119CA38D64229BC77C421FEA55A7E39A82BFDFA2B5065446D9DC4DA36D
-201DD471B147679C565373E363363B558D9D117D0E44A389058F3E25D51403B2
-72FE3552296AC32D377419C447E44DAA0C743F0CF7DD340B934DAD8581C8BF8E
-1F026260F4CBBA9D25ED389863E8E17B5B2DFA6AD3DD0B1A41F9101E048ED3E8
-F5003CA9D4F02060F09CD867B6879019F4481F213D000B509BBD5732E3673F2B
-C31012A590381F4C19FEDD4740CA69BA
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-/UniqueID 5000769 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
-AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
-7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
-20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
-B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
-68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
-D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
-26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
-F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
-77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
-BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
-C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
-30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
-148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
-E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
-E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
-337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
-0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
-472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
-A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
-30F5D8CADBB3C1E3238EB07CFA0721C8370278CF3A76B741E00E5CE0FB24FB6A
-CB19AE8B78076E79F34B90E2710710766D7E7C90FD0F5F8EB484408C176D1DD9
-A6583C0D547E269B85AFA545C912057064D963A98C21A4B31061450DD09E1FAA
-303AFACA176EF65939CF1F21E9774EBE43C434ED02DC2D4267BEFEB6101563D0
-3F0BFD390A6CE04A4D7BFDC8F7FCBB0F350B636B4F6203D9972005456C97E4B3
-B898EDCD7A5D7964DC1F3D8752513F328A7BF73AC1B6E171662E7922D8D849C3
-7FF8AC6E4500F1B5595EC87B319AC7CE3929EFD75A547C76145F2C7A1589A90A
-0E0C2A8F5ADF56B03DC9AF40AEA131B348A225356157EA953BFB4E5C26D34C38
-E51B775DBF7E28FDBCC781B33C9257E9175C93943F62162AAEB15CB0FBE75D21
-A6B8187254E09711D2FB4E6D2232ED083FDC57A02853A025F0BC654C1B59229D
-EEA840086C34B28B82AE7A77C660C1D2937A8756540216E48193BC0A7DFF947F
-85F2F1C359D68E79F0D96CA5EA2244B5D8D04BBCE3B6DABAAECDEE6FBCB68406
-1374E5949FC944EE20AE973E55ABFC4E93D7635321AC74D21C076DD13F2FB3C2
-71078BF3097F5694E47875C06C2CA84F1254E0F6A9F7D9A799977BDFA46F81D2
-F65D26C5253DB040B7ECBCC49B4408DAA67E4FC690D3428A9BFFC3E7B6941B78
-658996D0B38768A2BA0A85A917856AAFD2AA481B833D288CEF2B93D76C5FF3AF
-C2640D8FE78FBB42FCF4D9853BE21FD2E3A76DED981CCB149558C73CCECB425D
-7814BF1167CC5BC5B31ACA9744854FFB212381961F0717D60ABFD435D9D6B9E2
-22BA6EEA3C8D71371B99DFA07F3C9091CCAAF4C10B7600C19BA6DACE418E0DC9
-07DF617FAAB5EFE1D8FDB7F4CCDA75E4F9EA3299B24AC0D1A08785F36C8D2388
-6BD58E21C325F9B10AED83AA70CC092EB75E9D01B7414B65599C8135F04322A6
-2DC7A30DC5F9A91B6DEBD9723180F9F7DE4D86BA884930A8948FD4BC9224CD94
-874E8DB9287D50D2FDB677D2F0A58D84FA63EA9418F95AC9E1DAD572D34824E6
-AF2B82BDC42704BBA8B6EF173AFE23705EAAD629D13CE6B6965913D3090CA6B3
-F701D7FD413D2B72D5A39D67F546CE25A42169557C936B0BF6C34E859787FA28
-2A1D1CD1AC3654AB3EB56660AA8C65D981515E60A7034B68CAEE003FD6BA703E
-C6706D244A94F11125CBB0D7DA10B5640EBA0949BDC1B7B06349119011673096
-2D3CB90B283AE4F3269CCA191343AD6EDCF5B0F93B5D10647C3D618F70BCB4BF
-BB147FA869A0F4A76B973EEC276E7DA74F83C0F1E87DF087E6855019D8855BF0
-EA2F74EBEF3DD2C206A882D74D97A6779D083EE1EF08B7FB84111AD2682E4DC6
-D4214A6D5CC94E588E4EE41CD7F25D5C5FF3805C141D2D454A2853F5405B08DD
-B429F70C92E0208C75CB523E30EF7A593D38940E5B30D3E1430438D6FAD536AD
-009720294800750F716796B091F85D01142A56320B5B4A475F85C07D82C64AE6
-660A5BAB54C0DE643EE05D149D7654D46F1A68C20DE9CA157BAD01AC881A8362
-572A1D6783830FD26F8EFFF07B7DA531C1535FFB30C1D41DC74BC5B4ACBCFC39
-4D8FA2FDB8DDFC8AFBF4E46AB28845F2033CCB32564BBE78DC960148923EDF17
-C2C1F57F8F2735E12DB86B690605356F78BB57898A7301E0F8DB7384A569F399
-4278CA31C8301A62B599ECECE5C6B75D79630DA11F6018736CD12A28D1BC5AD3
-20E617175790506F06AF1E8747DE6D1DA749D565068CD99A91E77AFD90C4C8DE
-75A0AC27E4277702B4D03906E7629D9CCD93B0D0947BFE8CED50AD45DD1C2DD5
-350BA03DF83F1713D7BCE3465A90DC16A10BC57268EA0317BEF379B18F41362A
-D2CBDE14CB27508511DA7B8B698997A7684AEB4D5C01871120692BD6C4AC288E
-FBAB3BA4AD6F3FF6B2DEA321A0C5A5BB6D0E4161ED1EE5D232EDC3107647FC91
-BA72DBC4172B1D873B859553343A0CAB6D51FFBCA67CE3714C9F60E049AD9F57
-00411419E6674C61FF7961B9512879B8FDCFB58DBB0E3435C771352D24B8E002
-F1B98F2D372C9179BD833E24EA39098FE78A0A033B103C6BB4613B16E7060EB6
-246F347EF94CE2DFC5EA257B25CF478934254F1856074AD3833468FAA5870788
-05BAC9A635803C61CD76101DB0FB3DB9B37DE7FBD283FEBBAFA846B314B2F26F
-70D7434DE12460873466932F395E455367177FEA70E1445EE03CFE4CBD8F7143
-C4DD27335B7E2750F1408E0AD360DA6A5DB9CB350A15E13F5378151DBE7DDD5F
-D93E714F4BA962A022FAA6D9FA9500C2EB8E5DDD0EDC10EC9DCCDA834616B964
-0706ACDD671ADAEF75CF878985B47A71B835FC4DB5B7439AF2133AA2AD9F777B
-B0BEA824B2B6584A653BBB2D9D1D812266AAF416190D8E7035AA69EA53732408
-4853AA355B175F49F811904176886CA13309F022716840753A9F77996DBE77AC
-171464E44764585C9E43CF9B54443C2B6DDC4542203BD278E2D7BF64FB0B612B
-774AF879D7E28B50B36A8236FFFD31EDD8708FCC92E696E54BED612EF4791959
-C4826BA74DADB2E3DCF5AC76AA7F836DC3394E7E793DD9AC6CC14034A50D7531
-4BD778FCDF2D0A61FC86F5F6A8D4FF4A93C3B65AD25D1E028D09BE630551B65C
-73B83D7EA5FCE6619CA46FF775854D845AF8D20EE985E10115738BA9ADFDCE87
-C80E01266283B4C4755C3DC3E8EA6978B8AE68373DE22D1045F682A994B7529E
-E07C67D28876CC1810F7318DDA88F98C84D00A1ACE09A8D3E16A0696EAC3A984
-281466A6A9A3FE39319C14F73871F7BE8F30306573692F213E44ABD8C98B4EF2
-907B75DBF65FDBF04D746BEC5B3D503A694C029AE055FA1EDFB43D6E7DCB5B82
-E2C54F603AFF715BA9F883E88BCC3F27FD423E9B264D9E722FC72A22182B1FA4
-1BEC7F6C0271C6D9CB087AF037BD20B20AA7D9F105D4893BA297DDDB90998FA1
-F4CA6A6C2D53CA489A9EC0ED0556F7719E3EA323C6A1448F7C188ECA317FAFF0
-5F4399DFA42E6814CA6BD84CA9AB83B4C4FBBCCDEA58B7DE23B86C6585768434
-53C36077C526137891C38F234D681AC21545289A6CC947228B6A458C71B74BAA
-E3AB364C7E171EE55BFB6AEAD61EF91641EED166CB9BE3572EC7A51C623ED55C
-855934B377FCD4E6B5F8888CBA436BF9A44E9338E912D82CAAA57ED228290ED8
-13CDEAA3982DB695E616FD2E2FF47F77CD79564D27205D74D1DEC159FDD94C52
-EEC1F0208EBC477EA9410EF86E45EBE08BF9FD78525CA05F41DE83F0B0BF1A93
-BF52DD41D84021CFF9B754F41D9CFC2C1F9D06D77DF649300679EEE8A176F1FB
-C6D551736F125344AABC9B4359AF4B9BDB85248A6A2AC6A3BF1C147F64963C49
-CD6F915545F638B366F6B0C8093CB7798F0AE7226410580831A14C934556A3C1
-C76BB4FB58F0DB91DE39135C80CDEC181069589CF34AF57050A7BB6F455A7AF2
-560F624C39BDAF45DC64F8DF51B8B62E258EB1A7E15476BEF6DACE8C0FE7088B
-F9814059507E97EED89D745634796174BA9D22180DD7161519F34739E4B2618C
-FE762F658D84C145C533D6EB543BDC9E41AD085F632378B3E1F3BD0F0083CCE5
-78782F8B5849F1E62974B5F5DC976B41FBB3B7044E5ED7E37D4D923338E40847
-3B184ECA261ED76FCC3002FBD2F3A667145739959A24D73B224CA64006DFA2EA
-08CBC37B1C326021A531D337B7732254DB505A1121DE5ADBA19C639A3071565E
-991BF42D970C3585D5E9B4F8EED928C8069BDFDE75E4C39BD3656132C1E23655
-74BEA13DCC3D63E9DF02ED8CBF29F807794579E6F19B9262BA2B6701C1821EC6
-D0585D4EECE7E8D7CA48FBFA450C17ADB040BBD691C2B42D8BB242E08D263BFC
-C5249145FEF683BBC0584B5568EB0CE727C1B7607FA20BD0EC58EAB7BC52B20D
-FC5930ACB039AFC4D005F5BD1E841734ED33B78A5D841C4EF427464E88D740C7
-715923D6C9DEC3754799F73134EB201696052B5F23C8D9C915B8411BE17D2774
-F44261D887CF230D4D4FF904BF0E7ED2016169EE6104B84ECCD1726FDEA306F1
-F50056A5CC50338624A3A9B32E0C739C1BEB45855752DC1D42F427C1FB731756
-634CF26FE8794BE99C8E31A694E6407AE3D5CB9CDAF9D73C8D0B7E4866A78013
-8161034D1D3628286AB0A281613902DC4DACEF59FDFB3FFA4024EA3E9124F782
-26F5413CB737F69B626507DB71CAD34101D780BBC93AD2FB6AAE5125C1CA42C2
-80C2A65EAD0FB23ADA752AD26639CDEA27ED4B5AC38FB8BAB916B41EDC4AA672
-E5251FBCC1B62C11E0F3200F1581FDC63ECDBD268921FD99848D48A7E9F8C5FC
-3E417B84DF31AC2AC24CCEE8B36B78F83B52F60C88806581FED1247AAF932911
-E777C20490751AB9CEDAB35389F6D3EBDE4AEE4801CD80B2D88635EB1890FEE0
-5D944857264FAFEA20E4344F767B7D33748859E77143A256FC766CCFC08C1FF1
-4D91184DD844067AA152AF9514CCB6A262A0848ECD7B9B38686D5F0FD13E39B9
-1BF5A32017B7B05E12D5D3E763650F5A89D9E24A458FC513F7C97D4A346C8433
-48CED904B3FDA3838915BFE49D0FF8059C7CD33078583E9A78EC433D2CDC4598
-3AB980C53B5854DFC6DD04A422D03AC49A3A8FAD8E8963ADE32CD52885F418D5
-76AE6A6EECC368854A1D152BF1ADAAF2EE7ACB50CBE5333EFB87ECE707B9A863
-ACF4DD6B432C5B7A292508580682091320C89A32AB9C6612BF5F3712EACEDE21
-69B3E7BF78968F9DDB054333733890BCF698E42A679FD69B34467D3CF61C5C7C
-D2A7A77C4138A28559B5CAFA565E20B7DBE83F9FD0DB1B22503CE7AC1D83996D
-167064FD03B57AEC675B139EE77D926309C9A934628A6507BA04A56790CED604
-140F816E2D8B06EEF474CA75BE463AE29B5C5CCEEABB14DE3597FCA2FF765C55
-FDEDAFB6E9621C4CB3133F65A6EDD4C1F5A19DA469AAF3A9C1951A6463284487
-AC8EEE3FEF5B04D880A64FB693974FFCD65DFAAC9ABFB25E2B1CB0545AC87BBD
-68401025F05BD01D167E7D18EB03EB815FF9DFBC66D8DB2242D497066ECDAFFB
-48E3B6E1F1361B93AE3DE1EE297E3C28901BAA190965FCA5455C55628B76D224
-C9616BFA422F9F0C221946592365AD6288A4546E90BF80FD859AEF0769C18576
-ACE16088FA59D9518EAABCD000A1252F23023E5EB21D8674D5C2DBF7E2032BE2
-67A8ED19F8573530AEB30DD50ACE85161C565517A04988BD52DBC78FCB8B97E7
-1146D5344E6EBB53AB6CB48BE9DFE66708B97BA59275C45B57BA3C64215FCEDC
-753912DC3618767C868D6FD1B51015DB906C57F27630206D685251BF738A17D2
-6361543850F933D4D11DEA765E80A33359A101938779B8F25709E2736A41763B
-847996EB189A894FE9290C8707DFAAA3FE2C7D144A1C71BF553B6C21BD6528FB
-0F48813E513A55418E3896769C850619CFD4A7C44F8C35717F0397E7F0711B1E
-86E0022045A9A1773D10BEC7633187CF89B5C4DAABE0EFBD6F2BB7BEA68B697D
-8248370E2677F09E0234BFFD337E196EBED0AE881D8A51D5DEAAF0D54F52A3C9
-0AC68E743C5A5B9751EB6E60793FB96233D90C57DA8CB768BC3253D78A6E8017
-D2FF51E5E502AC9E52D0714C33C6E8AE2367DCD8F413F7CBB4FBF0EF9EFDFE64
-C847E7F27205EF3C1241FA3CA85055F5ADBA30BB73862EEC0E9AF9C0515656B8
-6139D927D36D1537E9E7F00EF8D473BD30281722E553F2B23DD4CAF78A5C6F21
-A5BF2E72601A80B32403683E00A1FF1B328834590D76844E9041DE2DB5F9CD98
-E8D3A34131D4E6D2D15EF0EAE242D5EF864D92F9A469558C9A017862BE332750
-3EF5A7A1CB9C8C0626FB97710CD68D47D1B32D8A27CA38355D04D02C0D12537C
-1E934C1CB0DE195B806D8A5921CDD46BFF1FD0A56CB7CE9215E63CCDE43DB181
-F8C1D9924721403DC5F5EFB49464497C9A1AE096EA987AC1B6EB8DF77D08C9D4
-645EA2BEC06564003DCBB86A4307A1651A56A332A2F73BDD0299B5290CFCBCED
-8C1319972701DF20776C3881C3C0B48B86FE63DBE5E9C52C50FA1380DD8C7427
-C723D268DA40FBCF0A34A30BD709DC79EBA0FA59DE4F3CDA50679EC9CDD49D4A
-22A4244303C14CA858E8422D02CF114CA83F70743752F48254716BDABFD83626
-2F9D9A3FD588F839F1C7E5985470DCA4D6FF842C0E03A37E278CB81B02DA54F4
-E2ED8772158BC65F26CAEFFB2E24640B3EDC0D97BEE78C15D840F1F881FED872
-B2C6F3241C73EED5EF13F8AFC8D6F7220A0CB834F4F5811EFCA11EFF169AF7ED
-B5FAC0E00F773DF705E5E83ECB19810EBE9EF3FBC7D1808DE07E8F23A5E94500
-7363F16D82BCCAAFA4BADBCA975DDCF19C337D4ECC014C4433713E1285A9D7FF
-7432D68A0822BB5450D8D0239DADEAD85E15456E7F8A139DF7DC55B0343B1ADC
-37F0E6F0F0F0ABAED1BEA0796F4DD6A9603DD6C50AD468FAB2C6DA08B2CE5B2D
-BD1AD38E00DE67263007EEB81953D640BA9AFD5D34C8D2657E9B2F82E1A8F3F1
-DFFDD9E154EAA488E22842BCD680F64F54D450E7998A80ABC9C9C15CB7F44384
-54426ADC08CE26D47DD70908D7D58409F9CEA02F676095452458B100D97966B2
-70BEC6FB819853E028AB7C72497C90452487CFB69D540D87E93098201FEFBCC4
-EA4D8ADBCC2D90055DBBFAAC6A3E63E7DC6EE49718A855BB9438AD7DC732795B
-F88C08CA7BA615D3051477D59D3CB85FE24781D2343F108DBF41074D7745D281
-BD67ADE9C88CC15293ED8FF31FDEB76872976A9E82357AEDDA077A569491D143
-76FBD212A918EDD7D041029255ADFD2E0B16F6970D88F4E3A7D9AA49BB140137
-D9DC314F79B822EEB92CDEF4DF3727204981DC6F7BACCB095B5D1DE28CCA75D5
-259CDC2DEDA17B816E6E66614031AB672CCAF3CA2FEF7498BB550A57CF605B03
-4177BADDE590722DE77325EFA7A45F413475CC2DA3B68C4F7E383E313D42210B
-6CD0E349EBB1FCF49A29268A87DC4A7340910153FA863DBFF6E1368B88DBFA63
-7D654BD3200E2E40E15FC922775F04F5027FE9D2778BDBE3A51046887D4F4C22
-BC07E367AC6B2EDB3034B911C9EC99C57FD89C97F7C185B8A8CCA41CF6C3CC76
-E4C202840990030060CB16F0B5171470AA8E68BBA01C9F2CFC89C1482C23E8B4
-C55C32909437982806BA1DA8B33A8AF6502CA21BF54B92DBC71536140681659A
-A2E03A0BC6381B050828054CFEC8FE01F794E8FE3D4FA062E97C798FC755714D
-04825EFF10AA144B26E55D68F94A61513A0B7BE7D0CA7517CF955966F9DAD5E6
-3A124D67A900066A8C4AD6DBF988FD1ABF4FD3FEC3948D4152739332D93EDF5E
-674044564CFDFE69054693CDA64A0F181A0E9930A9697FE6515A754BFC5D70D3
-D0616884C40926A78FA2D06345D8B1F53195F9701CC6EC0547AAAF4F4DEFCB0F
-7FE3083289E8344993E2B01BC088A3007F0B5688B7B323C4A4144AD93D4B93AE
-EC9F80926C018BD562640283D69E75F50AF7E45553CDF612D7376E6984D504AC
-CE9276F4931FB7304796FE05856FC8D1C537222A081F5C012BA72E4DCD195657
-63D65F7E7BC015D96ECD74A2D372E75B5CABD1A18FB95F47E311FFA4882A9D54
-2D2A78EF886DA7A36B067811E5674234AC46D72BE4B7DAE821FD48C5ED4F84E5
-2F38E2398DA296EFED69D6DC0CD41F9C97317F266341EAD386C3A000B1AEC558
-8152E8D1880D3088CC6C56CC5C1689F2EB2D9AA180963C73754EE30703536A60
-3AC845C1220FD9216FC56F19771DFD08CEBF9EF9DB2C160CA4A934C4A3A815EA
-FAB63FF95F26FB0DEB5A3B09AEF44A5D5FADFB8A085E081822C8D84EFD9EA6DF
-1A4B6DCB03DDFAA1D735DBCA019603BCDD418E6B96B4BFE709696A8FCACE7C34
-AE302C62608AF2F7BDC73CCCB59EB5EAE27E75857A3FD95EE3E5BFC518D0CC21
-892BE6C7E0975DFC54909B0764F3E3C808AB0727BF03485230AD1730C80D4A2F
-AC3B62D50644C96D8937C786EB13D3C9E9BF7C3D2DE4D569FB05D42F5BB4ADD9
-18ECB3936ED5FAC44DFE809E23A283FDF7C4FD4B3FE1E804FE6F76B2EC232A98
-6640C8A0AB63563F8EDA7F7A9B14334D2B839FABCD595C93A4B21DE954F0600B
-FD5FFA0E98657EFCD62CA30D0240F77F80C6B82302C56C8C05CFC0A6194DF61E
-4314619E0CB1D14968F6C3629FCEFEFA132381CB32D0355EB4E2CBA3E6FD5782
-36B29018CB1860601064893A55543D531F483D98D1122617025CBDBCEE922E74
-293F9B0461BB463CFD879FBDF9FA751AC0CEBB9CA6AF656B2769118457D5A14A
-4644B38EDA81B57BD7EE201498A9C9ED76B36B8FE32C3B78FB429B39884CA451
-FF4A4628A4E2D1883451995D94D080098BC7FBFBF3EA1AAC6733ACB0B74A5A3E
-AFB6F7A754D3E1CB7C76888F728EE499B5637044C40C2C67C598C5122CCA6BB3
-6CF8723C35AA0308C8F3020BCA70DC07110EC74DBE2D1A9125D8AA110CB5F068
-ACFEB12E5F5488818E53639A29BEEB1B63514729BD84B287E60E266AAA7D4D7C
-4708875C6395E56E983D19F510F0EC5E8F2700B6006299A736477D969B9E1316
-42C2DF5F84E1423D4F46D00589DD847CC10330FD1067F6CE1710108958A09142
-DBB93C07D868E6E7652966C10E4C22513DCA44809FA5FFEFDFB48BA2A319F23F
-901A517F187F5A93C0A4B6025F41793B33F81E3A330C796E0BB28A9003937D32
-015B092D0EC485064B98524F68223E2018F44428E43625B9767B50BC29565618
-9D625614A1DA3F97E6A523BC03D8081A66AA84554C73B3C6E319F083DDE61E52
-626B34735137AE6A2DD6CF28DB743BA47411C95FB54D8562AB5EE53436FECC81
-27D3D9D3F02E8E668792A7204BE08252A3B2F652407924B74D8FE72E01A2992F
-705BF0173BCA937C97967B4A9003C64E980415E0FAFF524D238338D2D1E69E3E
-E0806E36033F6C5D34D0BC95A6C5889A89248F68AA539234F3C2579B8E15724A
-FC5A4E3C4E792BFB314B842751F25668AE8955126ACB12044D1EC17EEB263054
-9AAED4790073A48422FC7734F5891F348B1C50A808F13AC87E786984ECEB2024
-6608BB02145A730187E9D37554B061E133BC2A6E8B380AF3AD6D053E843843EF
-9B95F591117AB494041E71A2EFF2C32DFE37CC7FC2F7A42AC5E03F62D179AF86
-9D94076EF336B620FB5B48D75AECED2E10262A6AE856C77A535DB90420835CF0
-EA210934553AFF0DE2BE4F443A1A64B8F532FFF1B9C96AA94062801CCE3633C6
-B0B6B07AF472F86CC0D33742D4E56379AFDBA9FAAF71F15C3A5C28A98D3B5983
-ED2C092F90AEFF6AC20902DE86D04BBDF15882374F13630C449CFBCE9D843082
-D87AB4E9249C4AA70592B88B6010F1F7FC2DBB2460E50D895FCB2A8981F382FF
-2CF3C32CA257EE734565A6F4C13304032146E7A911DD85663E0BFE06E425A137
-FB7475873557A65DDAC0939E59072C6F282C32DDAA4F5D577B67FD6EEA5B7C39
-D97EAB74818589C12F83F88E0A8CD17499B13B0CEACB136EAEF21FF0C534CCAC
-DA1A42589F6147EC8DCD2AC111526464F6A691234F4535F1B12F6CFC082E6F6D
-8E35CAA659408EBDCDE8F414D093B511AC2D28F90141A9737B70E5C713BA7BBF
-B0BDE5AD44E9E8F190C783A42F6D039B3CAC9645FC8517013CB32B2E942BEC84
-C25DEC112937591364951598851104C7CCE26C97CFBDD6DF1F24891C38442335
-2A67D610364127378F7611C975934C813EB9E62FA58A71C9D92B2078DC80D29C
-620AD42EF20638C38817E2153BA17F803B78D9C15535A6162D5D0BB4FADA7E7C
-46A0D94AA03EFB261682AAD746B66E94D1B16359DA3105CC70264BA808D0336A
-86EF4A230488464FA7C6D96F36213DDAFF985C2BC93664F61EECBC15D58EB63B
-D7EEF4B63261D6F2A6B320B6B70E16C20905A0C450981D9543E5EB7E0FE33096
-08FA382B9DE007F685D06ECA78A649DAFE135403D2CC471C24AFD1F32DE28A7E
-F6CEBB3F54404F9E68BAD70498E60FD823E805DB168416D7BC672F20F02C9407
-3B793D17F548118B9B89EE72C03AE57F612038AF0353456FD7778291588257D0
-B8EE911AA0B1B9ABED5BD905207EE5B5D59595ED65EDC59D782EE7FA51065B82
-F28505729217685D63E3205D929DAB3B7C3F763B983C5DE2F460E3ECE28112CE
-A977826046189BB8D92E04C3F7C0E912A8976CD25711B79767163F273F09F03B
-44C03DE1405B61EE418C2563E6A2271604FDAA8790E6D8A274ADD55841F266DC
-45FE0A7A54411D22BB945BABBC6CAE21BE7A546B61F01E63448177E3E192D279
-C8A9B3C499DF252AD1A000B177BBF3E2872259F3224B1E0D968FEFCE29C8E882
-AD3F9A0841283F0E5D057FACC7EC155E76B3DC27332918153BB760345904B0AA
-B014DE3F263E4CD56B815094AD6EFF84209DB868B5F06A1D0E5B09AB0C77351A
-341FDE33459B6830CC2B424731B9BBD743791E851690A5B076886CAF4DEED207
-FD32FB00FA1B88F5273AF7891E9B37A95A683DF9D903A0D2AEDCDBCD8FEE8453
-335837FF9E22B12B95F3DF15DB5C281284BC5EE105906950758E5EE23A0FEBA6
-7E45252A1386D55C3864B3D7E3D2FEE5CEC303EEFBFE7B3BE8B23FC25BA8E1BC
-513EC52CA973BDFCED8E2C0200E386BDF9189FC41E9A2C860D23FCB610F94451
-DE062362128FC3886208B89D2CBBE78E4782BCDF6C8333FEE3E20F2242EC8021
-742AC1FADD3C5840690D73BF533A097B3C14D5392F7172B26B2DD8B8461A52CA
-2CD547AF7AFF8423C6F7EB1C0321070DC35F0704830EAAA4CD5C12D11BE45C36
-D9F80CDDA549C45DD239BC12C53A8103200169A583807B4DB82DBF08C662D66E
-4AFEE3127AB84CC9ADC90CB3F3D94C153D8A79BC2A35E8126731468AE773E816
-9FF96F5DB7C19270A279799A57B866FBE72E8A23ECE6B7B0B2F0C2C80663C61A
-B46E74BFDB2259F0372283C11A4A58137ED04A7DA682C4947846CB922FE674C5
-5548F120DA28B39AEB72F270B39312A9E4290B2756E27DF2CC3BF616C916E361
-415E917A6A4FDCD8E87BA6D9976395B901162802F235B6D49835445764B25CC8
-20C5E851853C98A94547872D0AF50C1E06925341855F4E6DBF65C902466F8A3B
-DFAD87F7288086BADE6F075BF467D1175C45C7CBDF61EC1E55DDC98A75C4E709
-C2459B4C435A6C45918DC6C542F3D4AF39424C7DC8EF0FFB681952AE0AFA3976
-6DA914DF4E8B617F5D639AD17407EF7DA76FD0935C79F3ABBA0CFD43B6197244
-DA6BB9F3D7AD25C3CC707A2AF6556366B2DFD23539618BA43FBBB8E6557E1981
-184D31520214F41AE3DF0E6ADC38668B3AC73FBA14740000C6B62FE4ECCBBF4B
-7D131D73717DDAE15C7FAC920EAA5EE481BCE609C14F68D655A67E95FDF0CC74
-0676C4786B47524FEB71BC449CBFA248F2D4AF136BAF74D458317202E52682EA
-2BCC6ADC2D8AA6C79C517BD075FBE4508A595C820A6601500148A61026702329
-F58323EB8B56C1EF43A3EC6072141919607E6E9183C01129F11F6B245AC9E793
-D8B29CEDB188E9B257A9977EF99CE48559F2A591DA863E0A4FABC0D748B6715F
-32F0510012F517BC375F77EDE42D9DCA0AB6E85E62A746F4B5632E0510EBAD0D
-9BD9BAF29392BAF9EBECB40F7726DAD7542B9EFE75C6C6911EBF19E1457ACE04
-61985EFC3AC241E376EB341998799150CC17411A3A4A8FA012DE65F667CB694A
-893E59DCCA2C34612DD40706A3715A5F295A9C66B12CB40A4FCA369571E906CC
-2B731C568C1B603725339A467C2D4DA384CFF50C94BDAD598908F77BBB21ED85
-FA71B3CCF57BDA87C9213E67A694E3958FC53E4C85ED2AE15B3DDB9F4B9AE269
-0D8C0332F588F2620A12A0D1562E5EBF67E79CF648FAFBB8ADCFC51701E88BE3
-D1FECEB48F2E425C7E7E2FFE8DBA4D8ECEF88556F858A6E95D1FAE8C5BE4A29A
-8A400BA136E6D75DC18D0CE2E075BA0DCD2FBF866D7A67851524469BA144AD17
-8318D239501FB31407EEDE16BF486EA620C9A28B94BBEFA516F82BDDA1BF2596
-B52893438CE2734CF67CAE55243BA6D510EFA9B6B093172014FFAC500BFB2C1D
-FA7F09280AF28B47904E6201EE13F15083B993B9CEC8822B674F08C41C3D9E05
-CAD74E77E7B6027FAE891614F2A07DDBBFBD35C4BDA6FE8505ED31D024476E06
-AECB4E0F6467B84CA9BACB119A538514E516343A74C8F733BDF86B4A12FE3BE5
-E49FE446DA0B1520726DE12575BED1CE75B174F232ED4E2E8DB550D72D078934
-7A0096E1171D9400BDC27738A54F3299EFF954425C1DD3E1BFD714C4C0BFC3DD
-80D852EDC774B1CFC0B352A6D4FA82D37F488A165065C1FE953CA6829A65212D
-FC491B495DF32B72C731FB4B80B0240698E873C71B14C6B7564AE31EC4B4B45B
-E28FC0A9228B9F025B16DE8B236D750199B04A9A6A67C4B420778581044AF5D1
-4317E90F444B0D8B53022A8B9DA5F08B0AAECB192D2769C142BEB2616937B1E4
-2AFB6CB78BE599813B2537655C34149B7244540EB0DD9B397DE672C560397DE2
-482F1D028D52B9DD70818CD4800F197676678DBEADDC29F43D96292E1A09F9EF
-6947DE3B2687FBFC16DDFD83D77A14ADE9964E81C5302053FC0885DDE5951661
-0B516B9033DA37D2B156743838A6F4B21D701C67B836FDF0333F5AF833C2B223
-27CEB8B167EE58F29924275B809D5304AFD17D1E56BBDE36A5DFAC01BA4569ED
-24772D239DAD2F7649BA0944E1DBDDD6BE0CEC7005F8F8B69E14AE52397F7DF5
-EF52C0BA3EC5F66ADBE7E52E6DF61979E05255C0F7C22D33A7968AFD22E650A4
-E26FE2C74D3DA6D5F557AD6409ACE4FB55B895B5649E8B98F7E857552405753F
-2A24C6C14A5DB6D038587B55F546DDC5799EC1A2DB39D07DB7E039F993A8D6CE
-7565AC51BA894685DF9CC55BC02D5B115A077BF80DA42655CDAD86373A5A596F
-1E6E44D927028A22ACF13249950CA2EDBC5EEB6B76A023A1024D9CC5848EA62A
-4947E06FF04CE266E1F03E17F39CD19063FDBF01A48EC94F02CA8B330B9E3451
-DB00D5BE11195BEB46A2208F8B8BD1D981B11BB329C3A55F999046BAD5B9231F
-B5EDCEBBF12DDD47D21F553F394F8A3D449DB930FF3B559D116DA97D45A61F04
-92A009DDFEE32B9283736130DEE80CB13B27DABCBB79E2B7058A2B8CB46B63D5
-1F82DB6647B12704D8366D70CDDE73DDDDCAC2D4F89EB49EE0E759518FAA77BC
-560B40BBA7AF1D3F7DC03E00D6DCFFF25E7154344AB093245A1822AE3791ABF5
-29CD2E9D25358A0834C69E0F22BC7CBB8B93F2B3D1141C8B4FDAB82B09EC0180
-6D7ACD072196DA13BF77705D0FC5CF9CB282B953602E5EB18718ABFAB8317605
-9153B1DDF0A35ECB889B7C1E1DFE9E55481462BCB580CDD1EDFCDA9BFF2543AD
-C6DFB20B134A08E29F36CA57088772C6FB7A4A9F26D8B9433405A7B2FAD96299
-A2EE806FE283BC485DE57C926FBD2438350D6BAB724ACB6B9482D16A5D887AD3
-0BFE2A4869C4C7E6B59F150535C88CA5E9596A29FC99F12BDEE25D8B76C32A53
-A2F93B6833FAF9EFA9495AC22672A10787579EF2942B6ED8F5DF29F9AF773F3A
-0219F18F51672D259B6F8C1AC351669ED34C0062FABC34325D25A3DE79F32FFE
-8351503A3DA11BCE6D037485DAFDA4C4B04DB26B90D796F4351E058296258BB6
-B4A281E42CB0EDB070D54AB2ED13367215BE0D98BC1D8766CB9D56E4F3B750E5
-81D814A4E926F4086EE8CF7C8193EED98C92D332AFF39C5541F1E95A94433C30
-0489EACF888861986BC3A0B3FC31857823C5C2E02CA5E665E2D169AEA4F8CEF7
-3F8264BE0ED30BE1734608678999E763DCB1BE098C02B11A5F1E549DB50A0673
-7F8D22C24EDA5B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMTT10
-%!PS-AdobeFont-1.1: CMTT10 1.00B
-%%CreationDate: 1992 Apr 26 10:42:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-4 -235 731 800}readonly def
-/UniqueID 5000832 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
-38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
-D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
-EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
-A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
-F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
-4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
-6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
-A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
-E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
-1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
-452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
-8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
-5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
-DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
-BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
-741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
-E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
-E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
-D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
-C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA
-726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227
-CEBEF0C9440DC034DAD9C19FB27DB399BDAEE22053591D6538587C768C1B7B0B
-7D1E222D2D8AF3A6473CC4C0D6C3E0DB49068CEB8C9BD1C5CD486A50DAA10BC7
-7D6286142355E3F21DD254E27C00C442728A0BAEC9D3F17AE9CE320D365152E9
-EB0D5E3874F2BCEDA98521D23FCFC30B4B69DAD2ADBE80E5964ED0ABEF6C73B6
-DAD30E2C5061E3747FE536E1A5D190D028F2130AF608F5DDF9DDDF1E77DC8437
-ECB3EC93B33505DF47884DDBD1DC6BBE4098DF04A29AF6FA3AE344600D0AAB53
-B3820DD7ECB600A3B8001C51AF2CA7A39AE1485A087FD1752DF68F55B52B4DA7
-48030F2AA7E570B3D56C4EAD367B9B73FBC0A7356253233006178B9A6BC19081
-B815B5988AE76FE6FAFD7AC239072B1106A3F509381AAEE79B2F2154CAC4727B
-D199CDC8B4D05DF4BA006982512ABD7539E28D937B0F87FF79A3F84C29ECF943
-A8DCB8BDF8EA9E7A0E7CD60BC2308C96B3E889C797D0FF28FF4847016B3DA141
-E76FC6BE78A6EE9CE07E651FF86E720A1A1F075972D36E5C55162E3FE26BCE3A
-814BFEB12D4C5FD24340CFFED499C7CA183E57EC4F12CFFBE3291D43F7270575
-C6C3306F832EF182ADD0AA14C4D8669A17C09F632406AFA195F90C4DDC39779E
-EC0A77E590211592D6EE19563963225C06C2F13265EBB5A6CFB7C17D9E77650D
-11958305727AF662AE73AD0E3ED5F7E7086C5A0C3548A8129575980B06C715AF
-DD55C8DF869BED0A7883491030B1A7E82C5EB04E5A7D952E716DD8F2EF6275EE
-087614CFAB55FCE2BBECD7E8D9C90FD8359E929D5E0A416A23BD58158318B4FF
-87B095EB63F7F052B3A77F136FD66EB2C52BD46CD7DB3091A4B78A607112B12C
-4D171B2A00B78B0E1C44B0D90C20D9244281F5123DC1F6063F91E9E3E48DE78B
-C862D848BAD073A4FCB5EEC9FF54B5AB8E234CCC3C7439C62ABC4A13EF1B8897
-ABBF21F900C564C9A305FC36FC7224932F766E6E72C2EBB55953DFE2AFC2E3FD
-33A0C6F0FDFF086E9FD796E7242596AE85B877223532667625E371D2156E4C04
-0D7FFCD3337B93DF066CB6FE1E13960719EB7CB409EE805C08ACD2C06303ED9C
-E34C898787A43C1B428B896551C6FEB50A831C6F8CE2073EFC662EC286CB7555
-A3B42E58772E82FEE206948B8C439FEC5E4ECB9E11DC3A4CBC7611E30890E408
-637A01A2118441B4F9467A98BB2A1B03BB2F5D8E3DB7D1D15C188D9E856088EC
-B762F07B1C06024F7EF53A2FBD60C0A1F4C0275D07164545250ECEEF8CB15B04
-A2D8AC44DDE818C4E23DFF5B846F412C1D28C52DA1EC7F6B68D2E63E6586EA41
-0B01DFF80C744F65C069047200AFBD969234842863A2CF78DD48BC0BA686C91F
-3B1382C42DC044F539B7089E055DDDE9E76F7EC4A120B4D8D3E14FEAD686B0F5
-3EB80AD386901D788C51B61A9C04955BE06E75B24FB77F501D9937DC244B7446
-60E9453930286D8112EDA6EB6291C0BDB909AA3B3EA0578815A4CE3AFC9C699C
-54C86466BA0F2FC9BF260DB773E29B2D4AF20562C31E83E45950A3A777E06C18
-0F29343F91938126514FB2B4A81C98E9CC420F54C8CCD614FC7AA290B7D42FF0
-429259B32D92836F4B71D517C130240B63949875D2423339FDEB14B1F1FEC58D
-49BC8B826DFD0C2DF5E94A4B4088A7E4029EF2B97B970A53A43F0D280CCDB41F
-8F9F3573F522404F634212E534EF3B2FA648D9BF218BAFA1135F6800478D711B
-9E3FC435C0D12C845F0B3E77DDA804A75EA9BE82DCB9435BF16A2B94CF7684E6
-748B2BB7C5EB08C5728DE734125E6E48B895FF3483E07558714F68F2FDC0F4F3
-D195335C8216499611CF9355764266CFB43B77B30E90BA64BC8EB301B5E2D060
-B1C053E8071EE600A76C8309801C7927F77D1FF4CBBDB83573EAF13DB5588412
-23B6F8EF8C388136CA0BD33DA6043043163E34E1B647A549136C33DCF3A816B4
-BFF8424CBC2C9EA6FBFFD26B7789815EE0D3576FB50A3D0D2101D4C43C0F67BF
-16984BAF98F16F7652BD26329516CF3979539C902F5BB43BFA0B1DE623E26CA0
-521BE8F6908E249743D1F7E62350986EF4385E7E617B1EC50F7408CB18A0352A
-9CF70E0FC30958BD6335211756B872801AA86C2F43801FDD42BE49F16DD74849
-40E5F5FE77FF2948CBCC494E3D9259938F26C916EF34919924CEBEA9315B603C
-5D618FEA13211BD46B019852FE26E305A4EF2362536C9FEA7475769262D3C2EB
-E4E5C2334FC9E57F57BA7CFB29AD573D3FC5CB5781419899DED8B473385280A0
-B375271DC9550455D9AFE5171CA247F90902D62F65F84D05B5F65B8BC80376EF
-A0DA23DEE61AEE96577629DA3835F2D50C36D181D714E5CEA92198F4EDBC4A3F
-17995EBCA8A6B3C86EFF6EBEA1991D3A3BC2EF33833103F462CDA92BCA15974C
-49B3F1E7D585E056666A2CB937B7B49572A12E9953438F334B727200C9D7A86F
-F995C454EFA2D0A5B6043E85A5D282F6C6CEBF5781A59AC4DEA90A6E4F2BCC54
-B77584E08B6FB01CD73D5BAE1AFB220EF723C9F99F0F8ED7EA821FF9BFC9D57B
-1F84B91A3CDE5B158D3DB7D1369D51CD9A2822D4CCF0DB935B56CF3A52866394
-0899E7A965B08BB808186D885D12335BDF0095C476462297D3AC3BE208B1CA01
-54CF223348B87BF3472AA2966C208D7BCC2AA07BE712AB448824D7DE9968C6F5
-7B6C957577BEBF7EDCFC01EE0D276501830548E6604D50E4C534CE727BADF7D3
-BBEC9CE7E326DCEFF2B5908BCF60495C7CD9E47448434353363A82096FA9E1F2
-1F8C780C4917DE4EC79CF95A42CD2D15E3D51BBDB9CD624F9C358390748A9A95
-5AB4DFEB92EFEF7FB8907751FA44DA024FA91C6C064B5E61069B2796590202F1
-2DFF657471BADB7A62F2ABCB770815750378DDF973CD4E11EFC3D19C27C02171
-4AD74C3CC0B96793A7E0EB9A0AA40C7A6D426100FF3FECF3E3CB60ADA80DCDCE
-870F74D04ED5B167D965F8AD2677298548FBD803C716488925CCBC9A3C515D3D
-86C03CDC708D2F95F403008963361C8E7EE7C5C62C15DBE6B22C2CDB249C4445
-21C8AD0C014BBE4B28827A5C84D714327904518E36EFBF4356DE0750B52035E9
-2E06426EA0395C4852AD2ED3129F4D43E3BB75B546F092C1E7CDFCFEC2F00331
-D9D0BBA5D76287C4CA7088332D5BCCBDBFD20B7A07DC6619A4AD3894C699B01B
-045D803FC5E36061648DD13B6BCD95844E171F4380CA89F7A7F948715630A623
-DD5E011B419FAAB28B814DAFBD3DA2EBC7B6CA635D62145E87679FC56843AC49
-FF421EFC70F30062D749120D1C492EF1070EAA096E283CECD8411964DEA10390
-147718F191A0A786C3A9862EDEE74767762BCB27D5621A5562EE1D22BE784FB4
-0BEACE3F8A806ED5257A038C8DD59D3D52CDB4EBC501C13CC9DC9BD89A51CF86
-B6C3F769C470912FFDA75C99C2EF55D78874558397C923C330CCAC3C149BA314
-C6CBCA464B176721E9C04D0C08ADA8BDEFEA62E3231FCA6A646F837115D0F479
-E51C7E509BB81045FE2F3DCD4A761E956BAF0561BCE5A0D20C0F1C45F40306B5
-B6A834974281675F2A33F258B6BF7F7AB717FB72A96C0D50DA6B6E4D3EDF9416
-6640E77C36BC882A09024789FA969E730CAC7948640EC203B610D8B02B0E8897
-6E0395D5C45E7D414331145412115E3DDD7D137716192A10F8D1F6E134210034
-0AC5572B33F6FD9D2B95D7D62D12919B23F7CBF114A5E1FF5C3C310CB947B914
-E7729E00E22E2F5E4614CE226310306FEFA46DC9ACD671478C026A15FD6668D3
-3562902F13842676E2A15F813364FBF3751A6BCA132596BB02DC0BCB18463F0F
-28C1A0E1DD23BBAB471ED0A91788353A27BDB2D3DF7F547A2E401DD536417F74
-5CF1285AACD4D96642200201BAB9EB201272A1D102FA7B4C293787CA1DB59847
-482B209F980BA3107F7538C5FA1CDC5DB36C5F0A7917FB0BF90F185CFDEDCDA7
-3B1D584F43CE6CFC46EEA3907B6E81BABC903DA628077D83A1F18C291729A92F
-77607547D61D0CE06750F927EA4F37AA39C1FFA07EDABD3147228D161F0D0FDA
-771EF1F476174134A27076EF9AE92D3F6DA91C9568C0E27BB954E27CA09345FD
-2AFB9150ADB7AEE906AEE84C5375F25C2210D3F5A3C57298BE1B6AE3CD38DEB2
-97904795D70A9F2082DAA0C6071AB9E8FF71508AC77052A242DF4D01C9139805
-C2F5BDEFD7BFA42D3B3335332B37983D213B6F7DDEA6217186A93B911DCC0FE6
-42957686973CA3E07AD6EA4895AAAD5D5CD878AD776FB9975EDC7EE3934EB131
-37EE8F063BC1EBC11D807BEE136A31A70EF2A46B36D99B98B8B1B933F032FB54
-B9EAFB5CFED5D813488D6A28250605034BBF2BEF55108CA0D6FF94BCB1650F91
-99071E1A1B3B2F1E8E7C89A5E4DA1F77DBF6AA289D331C35C2C2BFDE4A391C6E
-FB679CA42BCB2AF018303A3F55EBD657AAD46815B45DD067823B4BC3FE3B4245
-C9940627467C5F9AE0EAE53CB7CC118984272BCC5E1B8548494E812676FBCA78
-A70C417C270EB6E435A6A75CAB4AE742B1194E3F9811A7B581D9C552A3EE5B1B
-98E997DE7F74B3D85B46825B620B19357E4A7D82AE97C3B85609335B1B41A532
-FB2F53C79A4064C88C84FCE693FA6EDB086732B6F76D31F8A6FF27DD850DD1CE
-B9C29258680CE73A371B3613F17A3533C5EF5D4E3F833E563E976FD58B381643
-F097AD8D3BBD1E4F0C22A79F464FB1168E6B12E503DEE9D1D563B6F9B5A8D6DB
-D1FD6BF4A90DA086275F7F7AB784F8F945569601AE0499EFCBC5F5585A759D09
-6829A9649317B8C53F66C083170EAD52494006623FFED560D382CE663A1B4BC0
-D68B544A2D3F4AF0C1A6E50A4603CD433329F379B960A2E6822A381D91DADA65
-E5D973E67820C6AFDFB917126A4C4C7CCE0C00EA9762059E3BA7C3BA56F739CA
-2F89F58A2F058A78FA9F0F040A8B04B77F300343CEFEBF9357243118D9B62B83
-2EC312A4AEBD8BEEDE4DBF3CBA2F574BF9AD66B43C19615961A00D70ECE67C17
-6C93C248AAB0D3F9580ABDC833D52A5BE4A5C7F06C12E934BCB99C8D484A0CB3
-BC75FE276F26C6AC861A17CCE8EAE60AD5E4573D4DC2FCE59477702AEA956B2A
-0DB471C240961BF1402F6ADC61C3D7B72C78145B5FEB9853485C862FC428BE26
-F2FCA109EC1D6F77284C5ABA95359FDB4507D921934DAF4EDE1A1071F7157982
-3A9799E17F5377F27700EE7CB253ADB2371B228647FD11DC38F4FCD9D75ACC96
-D6B5508773BF71AD6B9D49829D6872CE8271A17C6FC89994159850529D5A8A32
-206A8BD5E688D5AEEDBE8E0195DFDD5ED07D11DC54131B7E22958959CD35E529
-F9DB957C31AEA4F25811C7E0B9ADCBFCD7AE1BB84D65C7EB2BE322E245F50CE9
-D611E6D52493244E89003784149E23DCE1624930D53B937405064775D2CF8103
-66D2FE6F360D5AFF017C7CD773F0303CA4F8C9FD08B91E414546CECECC770884
-87FA3D4EDA2E7D8474D5C30EBF966C9F40F4707E939C22779BC757DB50E9BACA
-80E0AD329BABE0AABBCD5C1C59E80CF55E63F84F49FB24D5F8F953D028568083
-015973AD8921C03794814AF609FEE8A5466BB982A15644C00BEDD08D351F661A
-AB6DE4FD2715935A73399ED21B074120B214C8E6BBDD346CE84E704A8DF4EB4A
-73C5ACF8E106D56287BF82A4C04C8AD092B9643CC1512154D04AA5213EC06B2E
-6B8A5452428EF353C92B18855E9C7BE2BFE82B568AA0A4B620EAE77EA0D60755
-E78C6FF41E2503A3868195127619E97805A628A0348CC7C92C3EBE700EF008A5
-86B6B5736A275BEB0431FD754D9866829C9B8218552737AE357B6DEB6DE5B17D
-5D86DFE33C9A4C93CAE5DC1777EA1DD2D810FC772C8855B4055A1B520BB0EF02
-9B1C32FFFEA106BDE7EEFD7C05FEBEA882C2FE39993EA2BB7CB9DDF009C08642
-B3B12A2752F8F6BDFDFDF83B0F8648C309248AC9274C823CEC96A0766C58488B
-EF98089D39CFFC48DB5076BC1DF598C450E76E32EAC21E2A63ED2F4CD9BFD34A
-23731B4BCE26D3500339CE43CCA5FB9FD2CE1BF78DE258A270490158921A8430
-BA9F37EA3BAE30895A57D8BE8A3DEA3DA9E35E3AFB9E650815E81F9252427FBD
-4B27B5C81F4F6D98CC7B7E289231FDEA58E629C4A414C5635B69B7ED30BD3583
-2C0CE0A350FA686F91C11AC4EF37F651FF61BB9D087E42A7ECABB2073D930C03
-E206ADC510961C03634984D380EE3604635695DB7B240CC9D60E31E684867FB0
-C7AF5D477F96C24D377970A9B0431780F0EADC1FCF162245EEBB2C99946C28D8
-E85A85CE650089EDDE2C11C224B3BBC65835D33D25DCDE8C9ECF38FC58D24972
-EB715C666E5598E6F6ED4268BBAC9F99D725B95F81B3A93EDEAEA3B33EC2025B
-C944E72BDEBEB532A01D263064123E1514EA9778E34DAD260C3EFB820E9B7B2C
-005FB6B60E44782CBB9AAAD0D84E2A7FB9B9A003B2E9C4BE6528537B909FA590
-F2AE7CA038C6912DD59455C76BFA330BD5801BB94B2869F9F4011DC70BD31FEC
-A18F3944CEE997E9D984425D95C28DD02D8E0E0DED0D1FAF045C6BA250868E80
-730180003EEE66D87118E677DB28B9F54AEF115FC1F1BDE48DC42BADB2F70A05
-0112E3E69AE8F24E90D2C020131BCB703D4BE761B59237786AA2565B1FBE6F13
-66F74844A3B2BD29F9BC483BF9931838BD701F8FE96B0751A3C2E93E326FF14A
-037BED6C2D42D93E06082DEF985E39557D9A0A607D5DA570E084CE011B3F96B6
-2F3633344FB5DEF35A48F468C019A9A881C036F095A4516AF9289085217C2556
-62808AEB100B2D3D049629C688392CC8A62BBC7494881B5F64F71F6A280F86DC
-288C82510A59277BBC18751679448EFDDB168F3BD63947E6C96897DDFF56A60E
-747AF59AE10C996931ED47E0567A0FB1EB9C2A7F062E04CB75174E05D9571D1C
-FA2EFBA213E13CA73D9FF1CC4661E04E4D1267CF8E792F6AC270F03C38B7DDFB
-9155F17C13DC7EFBEDD541AA9FD866F3214FB78FC78DFD68A4B8819144D9A28C
-DA70DF8489B06196672EAAA63953DC4987FE1BC025CFC38CAA8DD29A19E0B007
-F99DF8D4D56FF048A53A5A4919256A3918ED9C87A681B168120E65E24EBA3060
-EBB79FE24DBFCA590B47A732B5A84F68392E5CCD7F0AAF8AE46E8B2F7B9B629D
-984BE10229CE058AEBF5A5625F3EDAFC37D75C087BBA244FCDA5C6CA4D02EA1F
-3F64D397F84FE2AC9ED7D8F03BB56BB25DAFE7E691DC2F7F42B82B79EDA8111F
-B98941BF10B58EAF2D86FECA8239774A6AE2AF22F8A4103D0CAA22ED11E639EA
-899DC81867C0E3C42F6FEB53370D06AF2975843410C8114F5C1057D53F078FB5
-96E572702A18C71E09DD607BD6CCCB2CE9D3C84E9D626CE715805C0697204A81
-DBB43CD0B952BCD9EADA1FE80EE1E24B1C328FE08783FE66C8A1F615EAF8CFAA
-DD5A57695ED5BF8866603CFCB4EDF22FB010CE429278CCCD13B39C7AF2135FE1
-DEFED11CD2275ED4C51DAE380DF3CBD87A5502AB213D816FF6ADF4BDFC53F18B
-1BA97CCC685B11BB417FEFB94140FCE2733949AC3E2E1D25BEB6E6D2E5D83144
-463283C90090E110280FC2C220DA957E4F74568CADA115E02BA45417C09CC34B
-EE51F2452A50D20A5B8D532C283E46E6AFBBA38DECEB61836673F76E8B20FC0E
-238CE894EA5EA7C7D0AD342F87831DBDB01586AF952CA32796A6276B2AFE3269
-0A26B0D6473A5FBB2A7FDD47EB4CB0AECFE2EB581146A37B403EDF0E53C2F969
-450DD44BB534B0D1F8161CB2B04FBD5FB691FFBFF6AEA8664FD8F776A2C328A7
-30E745E7F8D46289C8CB4FCDAF7A42371604E47AA073B7200173E1D0075A7895
-747C48506669C5FB8EA2EDAC1BA526BF2A3629C7457CECEC6D8F0296C2107BB4
-AB5E3895B2DA8C0B2DD14E756EAE39CC14480AC37EF83226903389C6AE3A4109
-C93577F97BC888773C24DD888767B11C9628204AA55DFF463AE17936E6BCDD15
-F93C818EB1DF9F2664B1BC06BEEFD54A913448E69BDCBC969B7653B868D54B81
-8934B0E26F35BA405917D207E2C02266F89261C2566261D204DF7BE4E4FD30F8
-E5914FC6956A02F641A478DCF80C02A2B42BA2A326D2202673C65647475460EC
-99999A568C1B4C259E3B7A16B741004FF2901AF4F186D02F44B0C6D3F53A6F5F
-B4066C137C8687ACDD32F7062884391D6861FF0543A377F06B4F85490F096A1C
-6213247A6F0C7DFD5EF4940ACB1562927FC7EC5FFCB07A393CBF6FC21C94BF73
-453B75ABAD9FBEDC164EBAA111108CCA28F219C0003C488A54BB9B2BF0858419
-538058DEBA6C22CB17B7786C34D3F569B42D7065ED309A5AE6F8D457B9655ABC
-BF4AB6BA6BA1EB95AFE3CD45B37BCAAD8A715629142D9D1138CD3314CF2E777D
-BC790A63DD1B724741F23B4D3B39C2D3BED0023BD240C19E129B6CF5741A6ACC
-D6C0310DF5A560D7CA26AB6AF212131073CDA02C770A275F7DDED8C52D673019
-AC4A4D4F036F94FBAA1448A0BE735C2CA1193B0B3795B3B4AB693C5B97EE0DE0
-CA05AD896B47D71CE613090AB4B0F5FAFFAC48A7F52EC247ACC0CCB10A9DF052
-6D19E742A514CCFD71ED7EC2C7D86118990C93748459293FD21BFBBA03C57C59
-18572EAED78F8E0A39A03A7C8C1ACE30AB791FB6C477A4B74F21DBEC1DE8F611
-B1C849F0A01F93C4E1D76F5E0AF2537624C2A263EE163734F71701E05D77C1B6
-AD220682785BDE886373582908664529C9D081667C7354AB745600E3A610F672
-53AF7D1DFBF502594B2B50194406F831251EFE156C063B458BD4F42E7DA02833
-23CF0005BE43376DECD1A306F75261D6248A6DEDF5F56AFDC8CD410BE0213C4C
-BB9304DD363D0D60AB2B2D645A8ADAFAC099847344A7C010CD16E61236DBC4F6
-D9EA4FB7563A01E3F799123FAB7977699D1134E49A5E079A69D8E9296A062F30
-2F163064A215845D0D65B815FE0082852CABE0481120CFAA3B687B32EECA8F62
-CC327D1D7BD071F9945AB8B9539AE8E8C5A717FDA594DEFE8511BBBAAD08D7A2
-4072A4E4ECA0F3EA8FAB76883439ACB4727A36DF72DE574418B13CAEB099E9FB
-466DED499B8E01942E2D6F72035222BC90E6BBE16ED4FB2DBEFC64CD371A6FE5
-97D70A6E6319DAF2AF90064B7A240A6B11493984E63B84DD3D59B4243DE9160F
-D2657C215AADB68343D6ADA3268E20CD294301ED7C46F137DC50B152A2718BBF
-8EBF5880626E9DCA1DFABF1AF6828E8D5AA9150BDAF9701F288F864D8C91E976
-9E9BE865B6DEB2796C6C3FFA603A947B9F43790A98058936B3109610B502B2C2
-320E75318B535D194D764C0AC7A322B5DD0D4520F96036908CBB808212A7B27E
-CE14671E77725B8EC619C68EB5657863D3663208D21318F7F9415B93B1E72BB7
-83612E137E85645CC4A1327859818781CB1DF455AD4BFC77E49A90F893179F5D
-ECF976993082E64B63ED0533008AE77515453DA9B07AB2F1F0B1CE816E6E1D4E
-D0D7A445F75F126538FE849BE9A9CA6BF221DDF53BD7E9A45017D919A46B9287
-1D1D98703C6622F41A997BCE4F77456A23418E6BB7C0F9FA957FE88A449DBD23
-D713F39CFB2D4A639AB99409DC6DDA631A53CF8F5F617159E03BCBC89C688A22
-971129FD158E8AD10D39AD3D2E6A8A469BB27AB8F929B28A3459928FBBD0C33C
-4DE82E1E1DBC8DDB977706FC4B5C14087456D9634A65BF0C97D5C49593350CFD
-826633734D9B96E850FBD5F3F319ABBA61397724E8D21B14FE56B6367ECEBBE8
-2D7D0CCE1C2FBBE5817C3D60CF93CAEDF9886632B27DA37F7C1A0342911D160B
-E520A5D20B4013983021365E2BA6792766B0541F3262A83C4E863A94FAE921E0
-57EB7E291DBE76944B7CF7F0D7363681586B405EEDD879BB508FA7E4203C8854
-44027B509D69E1CAF1BAA5C1A239999E190C7B91D315AA81B289FE88E5C43D0B
-251FAB17BBF7D49A71F75364C6DCECAC2C22ABD8D215AFD535C9EFD9629F178A
-A75E11332FF6B05A4B1569306E3F3616EE35D8338F65B6601D3535B2C6EF7EAC
-C71EF79C4EE2A862A75531E4131866D6836F7569B1659A734F35C78FDA7F3DEF
-39397290CF54AA9C263E7AEF736798672CFD722612716938391A1053B727C7B1
-BEA9DA04AD5B47C42E7B8A53F98AF379F3353F0FD438D215B517A69DB1CA5F27
-B567D55144197A840F0BCF876AF832CF3F620A1E2EB286E45794ACF216062F88
-D70270FA4453AE510543FB2E62CAB84A3BD7E2F5881B20B5BFE7FAC1125F075A
-84070D639DDF28A73E73478FD27FFDDFC0246B3AAE90143AAA71DEC5E440C660
-857432CAB7E1E0DE1F6ECBA47F0E0448E21EA69126434DE576DD22996B9C4671
-1B5B07B923B59A56A39F22396B2BE68B14283BC384F7EC76C90DC17BF57AE82E
-AB5BC5D2F39C916F68167A22824BBDAEF18501224005E4E63D8A357F85CDAC2E
-1F7FA28FC65DC65FF10059A658F64A06E98152D580385B2DAA906ADC3840245C
-7AAA12C0945F8E14BDD097A4BA5F2BE5F6C1704C256FDE77DE6671FC25B05400
-61EB206F67B7C752E406CE88205485A27E626161E3FFEE0153BCA76E4F474E22
-57DECDFB9294B874FC26D354787AE7D53389C77AFDF711FA5D7552FE3FCFA9B7
-DAC7564C749913F4020389E4C7F4DC4FE13ED85AC8F57D0477D752BE1722B02E
-E2B54C21DA7A976EAF928B142D2E0A5591DCF14420BABDC027E06CE3CE027336
-C20703A85CD2D290AD1DC4D347A05FE5E3BB87889B74B7E0CC251A58B2F999B2
-F04EA13EF3C6CE11D6FFDE47712BE6C84428E7D95E26DE1BC6142876868B6929
-A8F88012693A34E2740818DE3FA7458EE6160364795A3DF3CE46A3BAEDB5E361
-B1BF48DCC0B9B9045F65A4E9D61BDB537FD76AB51C39CC123DDB09534FB63C1E
-A5F85BA1DF0EC2736D029EBBFA7D935A20B087832EE66475FC2AF6E938363F3F
-708949FCCCD04CB56E8A00628106F12D7D6B31D08D8A047C5B9E39F4C8F1A7E9
-8A06D46ACF7ABE91EF88322FC5C8346310953F9C61CAAB6B8AF4C489447D6A08
-125F9E06EA30D6B07DB76E305626581D69929EA0B06E104674747A436637D015
-34A880E798BB653C9AE9E8BD619FFA875FDE8F488CD798DCDB0C63532D0D1A7C
-C866EB30FAE071B43C02EE5C01198E81CADFF0686839C2D44FED8257A2BE9E88
-32A38671E067BE2A49D3BC5C0E7893E12A04355315FB0B46EB033DFB8C101EDD
-84749263790C308966FE76F6789F21CBDF83A280C6D6FE8BDB669E2F30795E46
-C6EDD896F762C9F3E647BB51E43A7BB4A949F51D5599C25DB872F75D72E9BBA1
-616BEA9E026069F0262868FAAA16B44DFD016F80A6DE44A4A69B5AA6AB8C0424
-C2932BB816DF4F7F74145AE2A0CCEBB71DDF61B2208823E42D3AEB663E3206F2
-340F7369C6645397100FE513FDBA478C5DE5C9A0839B5DD2430725529939B414
-89BA91759A62625E40B92E834A9EFB3C68005876010F9CAA8BABEEDB06B6A554
-21609C50731E2435361AB8F53BF71B878591F8E0BDECC464736D96271F8872AE
-ADBE8BE4A26B8145480F7EA4AFBA97EA46F6EFE3A52A20711ACF947EF3F8B580
-500DC99468972BB657E57245D4FC01F8665C939D385BEC9126193E1DB54E1078
-042F0B0984E812A44726C4B369EE9CE54083A417BC8ABB50A6F2B185E3B8BCBD
-53A75936812779305A859E533617E5192DA6C3531189CD57DB856B29807F383B
-530DE0218926F7A6FFAA401D3864931FDA344BDA891E32359EC567739B25CEC1
-A4C8169F251ADF4594215549F7F225DD1F20F1269CEBFC88CBA7CFF4B7214B3A
-C111FE9B511A8703810E222406D86F41996815618661ABB2C69F663AB97797B3
-81D7BA0172D90246E5B076662ADAA4D2BC8FA1BDA20F13F9CB5A70465667B32F
-EE2A1FE5DBB8BF41ADA4B7D3970DCE1972508929AB078E35391BD8D8C0FA2FC9
-A0C63973A0236E7582D4EF32D3213BEC05DF0ABF760767CC5020B609E8225CAD
-E64A95D1E7D032833DD90ACCE8B5E40A3D57D6D5F0B36617644E83AD6BB70DF0
-DCD7D9410B7F47763F7FE5533806A1DE39BE6241C07B2BEBCE630CF7550B1595
-81EE53E4C92D15FE69B8591DDA933337F7F789B3BBDCC5526B10BB959E76225B
-2569292E55B90B4465A44624AA45A4327E23650D4C9A941E8D86A2D619CDA196
-EEA705015C6EA8330D3C04F293512955F38C4170C12D709C55A2832C58930C13
-D9B37FB7D4C8B0FDCAB5BA07FFBFCD805FA6089DC09D2CEBF1DC3C894CFD93C9
-9BC945C25591C38596062BCF218F28DE9B4EE244182FDA170A07A7A6CFFFDD8F
-B08F7AD8857066E582F48C596F3C3B3AF67294D1C45C5E5E6C2B7BF67C8AE472
-79835988AAB90BFF38E234EB1F49E67200F77BA40CFE10463DF43FEF5FB13F1A
-7CBEDA0B168FB8DF78C793CE54D309AD9212A1EB5883C5FF17CB637390D2DBD6
-07F05E04CE60D3211C1A32304D1DF076EFEAEE3ABA07DB78D9C13F58FB5B3DF8
-1A92DBEDB9EA5C55E3752855AC1225A2345D3B9E37F4068272AA3E465C74D122
-782864FEC675506304AFE1EBF79D0972A652D452FA8F70F9C6BB5F7B521E534B
-1EC7CC493DE8D55C2F0007B2204D1E59383FD1380519DC4E699BF7AF8D81DA1F
-8B0E9626F17C2F620117230E9BF7C4A58F42F8CC037182D73D7DD884A04E0C38
-C9B7B80589278B76C2C858C9735A5816A0CEA72F099E038895151004E1DC8CBC
-B8D53BDA668D8F985BF4FECA6E8646042DBEAEF1AD6579B60FACA93175F3DA04
-40F034036E621E1C7F31A376B3765B285B7E4CA83CB8CC1014658C2004D777E2
-2D08F4B307A0E63DBB23B21D2A49101BB7CEACD2B40A686DD7C66F4FBC5B6163
-24F3A4F48706C45D54FE0056B5C4E748FF43EE41D34563867E41D8160500122A
-2115AB57213917F5B1BEFFDA531DEE363AE61D480B05F7F2F440B851B6CE6265
-2FFA0A0FCDACA7C1FB9948A63967B3E4E106A7D2194844E368623FA61D327321
-C0949D6495FD37433D8157365435FC316539671407676D347F7841CAF39E315D
-00B2F5878D64D0BD920D3E418CBEBE3EF5717D509F0AD20C2B9BF8B481F8D7ED
-B1ABF3595255DBF1DA8AE4FEB4EF00FCA5E681AC5C80F71ED707CE5B6D0DD8B3
-800B87042E1CA1C3FE1AC461FB47E7A8AF5977DEDEBD2B1FAE57780342CAD7B6
-205770B6D14E8C4387DF27056D3E3AD60FE0811A1F9D2D7DFB6D1D52CA8F8E6C
-3EDF8F78AE862AF1D75546E4C0C624CC57A18FD61968CF742FEA4B45C758CD53
-78DA3A32960328BD4079C7280F19AC3FB66D24DA8C9235AE7ECEBA537F09A958
-F5FD63C4E3A0C49F44F8CB0A828D2A7DE24949138C7206354D6BE8CDB99BA5D7
-C60CB286AE290268214AC0A0C3F775BC92DD5326A100CF4842EDC00AEC236CDC
-E4F8F8448596B7E59BCB5EFFCB7D8C90837FA5BA690B9FB4D4F24BE0EF5EE864
-717394793E045BA233A7B146AFECA0664577795ECACF06E811E1A0147A38A3B9
-2941416AFB19B4C82A73921AA970B08D68818AB2F159E527EB7C48B64C43AA2D
-D5DD0DAD15AD0161667D273BFD59BA13D7AFD709F43DA9E1E5B3B5CCFE7EB38F
-08DDDD02CC0CA2A60CEDB070D54AFD8F8EEF0B460E839A2904A8DE16CE73F632
-3CBA9A65DDC7DFF06E5FD2B074A6312D01F8D75491B87EDBDAF045FD2093AE79
-0C2CDF2CD7677D4639E412812A7E95224C3995631589DCFB5363C82E7D1F66D8
-3224A7172E5F0DBB88275EA86428DF0D223AD4079C9D233CCF7C83D3D488EA8E
-0D1A5710DB03D00B4729E51803322DB1C649D2C0FD6D3ECDD66DF8EF0FA80B1C
-C447EBBAFFFE5BCA6262F252CAA42FDB90837425645E57637A4FE5DE5CDF423F
-85E41136A2DB6EEF9FF48965C73E07A1FA4C9C0DB88E5FDD963E55528C8986E1
-030CD62EF13B3DCD4936080F90EDD2CFBBC294E666E0D78D448CA04113EFF2D9
-C467D9E7616C426F93C1AA8C3D31D26B2F14C4B1ED42390E613B4881D137F79C
-07A1E8874FB91F8C3F561945FD8903D4BE99F18212E8DB95BE4220E57876DA3F
-5D502316602D0CD1B1121FC930F08BCAC9D6E5B9ADF80B3C1CA1215756F11ECC
-7D2DA3D97ED094920C38CC4A68D7BFB6F75E8431A3840D5845CA8752F14AAF8D
-F5A80ACF8E703D88EDCBE251C10238BBAAA923DC490049E76DACCD2FD320C349
-7FF97E3E2A9EC49C5EBA951F0EEA06D48727CCEC45DFE86D667725454B700F97
-06B1A6521B25A0B5034BB64EFD4C7AD11E83F24BF7ED607789A1AE805881E4FA
-A5A8610DB42BC7341F81D63CE70A7E37715449BD850A4CA83A0C0EB1A33A29D3
-82630F9F62CAA98AF0AEAE3E0F450B925E24A82907A642366EF798CC064FF67A
-D3BC3D3CF3BD23641A91F2DB09680BBED2586A8869FC8015134901F7F4684B70
-73E4D6A466F013F76619BE61A4B9F66BF167EA7FF7DCCFDBDDE96DE78EBBC0C4
-A4DAC9DE8D709078F4C134FC1BBF53315977ED4C9C41CC4A02026E4C3443653F
-39B23880391A2320170337F211CD83794118E5A014922CFBD8482D88F5622059
-3DE77CCE12C636241FAE4F5B91EFEBEFF1EA36C91465BB15A49EE3202451B862
-BECD7D819A56F7D7E46F981BD96FF1FC2587943D90F4B0F7B4C6ED4B76D6050B
-01C551C265BCFADE1E2D72A0FD4C8AE9559C7F2723769B1E3254E33B7725321A
-1E57D149D9A3091EC5714180DD68B89D7BE2AEFEADCA9585069CEF9D5FBC51F6
-B526E00E168E72F5CC9A70349DE30D46C50D30536821A4D988488C72AA9A8E87
-52DF5FD0ACDBC377A37AB3140D89EE5803A70886696176D2CB7D226443866046
-174AF7D525A28D851AE35BC42A2FC7EE4777EFD0E1650F7BCBEF9DF1AB64870B
-CA1E15C7D67B3FC527B86723054D6C1EF1A869A9FCD5244D0BCE4182BAFF60BA
-C7DC0ABB04C31C92741C14627D5ABE692403C6624B6CA64544E905B11C6D8FD7
-1F28055E4BAA5CB25996FE88F502742F42E11D087F61117F9730652F493329A2
-453D9508DE874DD92BE4185F6A7BF99E562EB614DF01385B86F6F271F355FF1E
-ED5A84D534446E834B5435D483DC20A729E81CEB96EDAEE53D2E431BD905046D
-712133BB30F33DAF2FC62BDB3A171BAC8E33297C08360CF255050DDAD58DC96D
-280AEE9F9B66D2D8806E2CD32F8A08434FE91B7451AC5948A1DAAFD2D28CCA24
-8184E20D0F00EA9F2C663E7C4ECA2F9AF6EEA56F282AF32DBD960D40D4CF055F
-F33D5C25602C2D6040BDAFBED1926120464F183124F48D34BB54A06A6724DCBD
-DB2CD715999302DA068272B4E5742DD8D017E604C4114B1DB529A841F633160F
-CFE80EA9B3B52B940AC0F685DA509ECA4B420A996E8488933EAA721B562450B6
-554302451C9AD6A56A84B85EAC18F03535099C8363599D4397454E19C0AB2A34
-9EE7A3C94165E396B9EFB97067315FC4762F2BB4EFD7FC635FFF0593528D9079
-69A5556D34927059A46525E6445A881CFF4B5B790ECF680068973A47EB6849A0
-52B9F18FB039050940EA4F9B51A3B9A099F33147569AE9254322ED47A6C7612C
-46EA207F0A0FCB785E1DAEB571BB99C97D296CA1DE3838CAAD06A98FF8146056
-ED014E14180D505B17AFAE35F58696C16D8C46F13290F1600075A363489C9D63
-6CB4DB7FDCCF49E15B6825CBC4E04A2D6BA136289D198E2C851D794A9A3E8E45
-7790862DDC9EC0D12DF50176A194F39C7C13C88150D2DD1208F386BBA3B0FC1A
-77F94819F12D78D5C59139A1DE0F2DFB3A7FFEC4FC38067455003968A57F73B3
-6C15268401F75B5C843D46EC956AA677A8DB075B61E547DEC35A63124769324D
-BD64C1B1D38777BE93F60BF4D92C85CB8C9ED2C8A77EEE0A4EBFF3A44F237305
-EC57E50E3120CFB0DF8D573A96A740E1260A26C3174AD869CF2EEB226ECD812C
-480D45502C3A4BE2B4EF9A8EAC7DB836F0C843971067F690B653D9C722655066
-D113AAFB04FBDC5BCEE0FF67A38C1808943882E4CE60A6969939BEFE16C09B59
-CE50B529C3BE6377368C3E827E9441D96BB174BAAC8B518671E3A9B95D4F1722
-A26F4FFF48348CEDACCC4FD98F71147D0B760B320705C1C13C9815E2CE82C5F9
-D6CF04C81F1BCB9F12A188F9828498C220C6DF1738CA9F236B6D6A01D747BB6D
-F322F38D0D60A2E07E0BF1E259214C3F3EF0A72074C261ED09B05DB3915D0835
-B2BB52B6ECCB04E712B6BFE1A0DA7437DDD8C4C05CA45B1D5CA17EA99BCE6428
-7E635AAB8F2BA639F28C52CD0800BC348990D0E3832B0303A272D6C99D8A6044
-C5093A422D646898EF85ADB647544B2CE33DB5DC66717506CC90ACB01CF58830
-D50F4CF7BACAFA2311819C3F50A9F91249C624EEE17EF5752C6AF77D6B852703
-81F95A42593045A69334D6DC1280384CDFA0D8088D97332FDB06A02E5DE9F962
-1B41C68A0139BC5F03FF841D8E93FAD2DC08E645F476034919C218693989244F
-DBAFFDB4FC0436DA9D43C8A2D55CF8DDB0E7ACDF9D564BCBE38073E74D65C8AB
-0E89D87275D680F0FBC2389D1AABA196474E26BB4BA01527A72E554C29EDD3FE
-7B17BEF3AB22F2C7C0EFA69C708C36CDDA24C38A845EBA9E9A3E6052B54C188D
-2743EF1487B6DF0E6E622A697BBE91D5627DB3F32A57C0AC98368FE53BD09844
-A326B096D01FA3547FAF440D44E079EC0EFC2A482B05052B2D57DA79B8B811E6
-DD9D0E46E838F1402F32EC5FB127DF771049F7B79BCF62C14E3FB4D6D7BBDB80
-975272E6DEE0109857F51D57E304B74DE4AE99ECFCD0A40E57C5E51283D8F270
-291665EE714A6596DBBB5285FDDC4B6328BA6745998EAEF40EE717C63AEF8A59
-E87D8E3AC8161B6638FB5D0963F8795587949FFD6F58C5FD18741BA3483B7FD3
-FC31F188B096FEC566BA23ABC2B34B79DC293909C9E8393AC9A26E6538672756
-3FE2EEF3E04ABA6D344F2DF359AE718C7D0EB5CDA5AB3D09C62C990BD5BD7E73
-3F1F8AF93ED0FF3222D7411CB9AD3C3AE9EDA04DD1AFD21A4653AE6A890E6C07
-1607F1668E4B62730DA65DF88C3C63FD7816C32F26D21A87522C2097BB925D92
-CBB694A7F77E91F3FAB14D0A493384DF902DE5D5F4FEAB5F5BDF567878AC8B4F
-98FBFE8FD16D07A58E2211B87983D40D5CE6349A207FF195B7F09B914CB6D688
-B103A5206380A90713D3C872EF8C026D2E302BEA473BAB705DE58D802A47C249
-9C40EE6F20398E591A3878D4A9DE9F6EC097521DDB694503AA8FE3BBCF24A5FB
-3DD6CCF1247B5D9724508C63A3E107DE56F0802CB083399BFC3A9DA62E7575E2
-58AA589E85ABFF222717335997260A7F56965DE4DE551885BA8A1DAA5C97AC34
-ECDB36FEBE3D8428A4681871FEF7CBF2B5DCFE747550D296B419140C39EB3AD9
-D65B6146705DC3FEF0131533283A100D9DBCAEDB8A10CAE4C431136FD94089D7
-64402322603B7049D4D10F97FD54D03D81B7B134293004BFB852D50DE5C6C5A8
-29F3FC4855C34AE134EF939755B88270B114106573415FB185E395F6FB0A4698
-B105964A9F374AF011972D67BBE0B3CDBBD0D9918A0E0D2653726C630FC8A63D
-7C5BE82A965EDC1E0A57652688375FA60463EDEF222D4A6D726B768D8EA06584
-BE7D23F6FE42CF8541F4BCAE1B01C73D6500207B211720DF98B72D016CC513FF
-9109B59C4DBE5108CAE19687C1682A36F39AA8AD09C5AB7D69A13EB0BF2F50A4
-0766AC191B105EE28BF0A87862C377E47EDAA69F99B7793F5F76114940848E50
-CE05005B4E2C91103DB7BA7BCE79755E4324C0D0305EE203294CC82451EF3780
-106156CC6C6BD07296CA7B927B869F8A9755CF9173F22D30EBD3217A98616E3C
-8525AC8ACDB07F9311558AB53805673411836886A919BBB916416DC1C2061CF7
-448ADED96B2933FD25C207BD374AB495DF564F25554274A3D2129CF7E6562F56
-E3D7234B8660A536DF464418BD08E3DB7CC2A2A8B80A0CEA897505ED6367A460
-3B6C0CE70E7C5F482C6B3FCFDD8C8266E023C421481CDBD041469219AFAFF611
-97F1A2D6B13A90A76AF1FB2520D973DB1CA53BBB11A81115605A9ECEB0AA60CB
-972E5FC2C431F1A5EB305D09C8B4C6D5CE1E397CE7FE9DA819F132192B2B91D1
-2832F636D75DFC3A82143BDEE17461D536B13D21CDDC295EB617AFD850D59356
-7172AD007B843AA74DB797099AB440C40BE561612B4506A8E26D1C4C5A8DD4D6
-2B8DA07722FA903A6ADD179E0214071F1AA8A21022283E7380AF0B2656DAF629
-50E8EB7C686EDCBAB6E56C5198041DEB47AE8BCDB4C30D318D2CF076491894E9
-C9BBA0C6D9DC4B5962350AEF5B9DC1EFFB0C9B8F562660D677F376B2279089D0
-294FD57B5ED589C1D28C6E9F02C821134A221334E1B4AFCD618FD86BAEBB31CC
-28FF741E785DA99568AC909B091BDDEA56D6E3B75F4307E3A989C1BE6C92546C
-F518EE6BFA37355BF3A752C26A014FFD48B98F7C1B11B625A43E677DD04B16B5
-B1B5F666AA67EBD602583D810578ADF8FBCE669C3913DDFECB2F64745EFDF7DA
-13E21B44417230EA477D2E13452EE0E048FFBC3B3F3E32687948361AE63B2F3A
-C2393837699C356E580C995217D2BCADFDCCE3A6276B86DDA6DF06884B153369
-327D3461E0493B6CDAC5102E62040437522DBA5DB6B6A4B30BE8AF1E9AD4DA47
-AA79B1AC528F44184C40B9FC2E402F602FA679EFBF9F374BEE06E6332B112399
-D18B8822C21B3B1DA3A84B31023D39508C1F0C97CFB05298E67DDF6EE891E261
-67C5A17051C6DAEC3924E7E9FC00C98225CCDF01D885724122CBFD1354A59CC2
-35EF7E987F633164341E2074B26689C6797F81618EC137BA7AE502904A211920
-D7FA213A6F0BE82D49F7237690413AD381F5D2A3BB67D027C48455F48E717DCB
-E1D0ED373D62E180BF0AE16B91605EBB768E97242CA8DB982AC0C2DCFD4B5EE8
-95BDC8910A12F20439946D3CA70A5F67A62B82BEC253FF1C68B1DB9BE887923C
-1B4F803DEDBC42CB12082ED81E92F657D30E8652E76C6D93B1C7196BB77C0DBD
-C2DCB9E8734272157E4BD32B57FAD22278DF0B98DA7ACCE25626F453E8A7387E
-F75FB71ABECBCE09E6D35C7CDCD550EC6907A8832D6831B8F16C6FF757E3733A
-3D028A0456B64C686A35EFFED2BEC9A9A1D93E98745DD6036FD954AAC48ECCC5
-470FE468CC4AEEEC6D6E650378E5561990EF37879B517DA5D550B5DABF216D27
-26941BDBE7286F95F3DB4673BEA513C8AE8FAABD78ACF6AB6918308627EE223A
-BFCD0B05C18134AB378AA07512D71E7AF987C925AD05686B6891EA8573FD13E2
-790918687BD4DA3C12A9E0F33FCB6AA2BE3E3397B970E80338E5338F0F603B86
-A42FA5A6285CDEF0739EBEB1B9133E86BAEE66E1AC48F83BECD4FA2CA3F1D5EE
-8EA02DA4925191191A953FE68C13398E2D80796714C07FE16CAE171AC6BB0870
-0AA402B06C310DC99F0A07669C57B5292530FB8DF265DB909A86B8D076468B4A
-B24AA398EE42F29BB41E7A640883F9D6021F4CC7E949670DACA3233FFCBD64F6
-AAE2DFBB7B1E69F24A6C0A8D86081B2B09270D561B20EAD4D6B1D40B7F333A0A
-F1B2E915DA6709BA159E81455907510390AE7C870A4F38BC8DD19149558B9687
-37B0777DC5D7964E3B50F4CEF6EF43F38BE9F01A68B60FBAC4BEE09E197C2554
-C413B003ED8D8A095BEDCB291ACC0FB3AEC024D779BA9D69FD3D0F5D105F95E0
-EA00C1483DC52F2A37BDD09F1F416BF99C1299784AA46D36515387FBD61C1C27
-A2B6E55C6B086E87B32921BD7441F10E49DD10D7D82E81AED5FE4C5AC09F617B
-9BEED75211D3FED854D9414ADC9B6AA0529863DD90FD48A3F82DF1F7C634D83A
-261AB18F257A389AE958DC7315251E670296B0F415AB99D1FFB56AC1E7E61BBE
-0DD2A5C6DCB7E270957BAC7584BFA9A6E21CFB293F0F51C58199D2EB431037D2
-C44DB61F55B46B3F034CE7127628B7A3549AA2CA1FF18DD7AECFC4EE7B3AEC3D
-D0A1EBF2F7E045BCF177FFEC6A32B8BD47EDF924EDE5FAE04FFAE9904F4229AA
-DF5B82485C624F0B7319B147CAB299A6FC7EE302DB985DACE5B13F8FA8E73504
-96E522B8D32869418AFE99B2EE70F52CCFE638419454432B9688E631272806CA
-FDC72B2F2971931F3D32AEE7B8979EF969E122CFB6D7AE0C314C3CF64859DADA
-99AF547DF83E7B74AC852752D25B6EE4A29B6CBA28CB35FDCE44C0CF816E1420
-9456518D9DC7A31DDA813F7ECE178F6C80A53010BF2272F50E93F5EC18E91D6A
-BA5DD888E1E9FBAB51276F78875DC0E6EBF759FD1C92A7D9E86D57B9632E5D3B
-823FCB477610DEBF376FF0DAAF01A47E0CCBC52F0052C93C35EDAC9BD26C0CC6
-5D62756F5476CD1BD7581567F55A6F04352AFB226DC7087F9D5B254E454126DA
-1C12C7ECD608698A0B2E3595CAF63B8BB3C1DC9AC379FDB7F99F255C8AC29A46
-AA322BD508021592969A16DCBA6959C5B92D0510AC400844405C810D6E34D41F
-DC8867E6A9
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-/UniqueID 5000793 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
-0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
-B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
-AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
-97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
-FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
-20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
-0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD
-F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20
-3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DB5FF63F50ED7D
-7095D4E63D60F60B6407053A6C7C2B30C424C7BFAA7180D9D7080276A8B47BBE
-9E556034AFBF70B9B88D345869D96C57CAFCFA148BE140BCCDE6A4951646D953
-3BC0CCC8EBCEC593DCDB97D883FC8742B833E3899664CA77945407382F699101
-240F732E1BF75EF4832B592CBC9809C6CFD90AFB12DB06411FBB44CDE3E8E880
-7EC418659095F67B55AEFC7D54CCF036060946EBE6C68344E3446816E606E28E
-8EF2CCA98524AE18876BAB09470C9B2018FBBEFE76DBE58CBB9A252AC1E04F0D
-ABAD11178548AEF107FAF3D331C2F86C30A43B9829DFA844A2025DD4CC4A2EB8
-ECC146F42D7D9959F4CAF38396051C9B7C4A7E471E819A144106B44759C87548
-57187D6252FD8CE45D961736E69E7B4F51E96FD308E4C8E96CE72425EFAC417C
-875D0E0E051ACBD89B17BE738263FF6E003BF69B954F049B2C2FD3A316AA3443
-84AFBC9106890688CB5BC4118B391EF56519015D99800BBCA613B4A5DA78227E
-FD55D8692C3D1D8D8555ACAD3A3B9D648A7AE9B8A56104FE3F130A4A4A3521BF
-399E9FEFFC727E07AA69625D9F5F129F9798C718CAAABF43151F07E23574C92E
-1BE3B431A16AF35CFE19F096BC2AC3C9B4449E122CAC98B4F567B918ECD881C2
-FDF3704C02916A2263D67864681A19A246A39DB6AE3D942AC8C5EA5C7BB50B01
-017263FC1F0B028D6A21389CAE4567FE4C322E209889112EF5CA1B50299DC103
-19DB61B3764B6430F0C5C497011695C2F149F643983893E9955CA4FC88754A21
-3D1A5E9478038E356ED2FC535219B3DD3BCCEAD202AABA714833888B9D2F700E
-4438F4721B67481408A5CDC350C2ED16E28BEAE8ECD6892BFD2B0D73A848CF83
-9D942B3C03CA129259BBE4A2139458E1886F929B211E8BCB6F875483A4C947C5
-12FFC101D00D4B13C28573A8F4294D4B18551CB2D39026E2E0B2D12CFC039127
-1DBBA28BB71BD279AEE5D6DED289A3DBD48DAA0E8E47034C9C2B9606E88EFE8E
-3C610FD9C2F428FDD481EEBB3A5073344421BF251B88A190668ED326BD247958
-D77DE5ACEC88C068CED10EA78DFB8EE814C1EC2EDB7A935A5021A976D021C75D
-8FB1C8E66AF7CC62795289A79D89E6DE0B82F52BE05866BACEB92D5C6DE14E68
-55A820457A4275DC394324393A235C9006B2611AD62B2DCDB2B5E1583003CDBA
-B773AC5CC6E9DA21379D53F75FF5EC391F5D1D12A1B06B72A0634FC175E3C835
-B057B6D94B26513F993EE34C3D09D267824C3C44331E4E1229B15DCFE08B3574
-C44095E787DEA29E0061CB23317C49F434DCACF90DE4322F52C5B515318AC1D9
-EF5FB1F77C2FC36E31F19B1FDA6BFDA590B53356B5093ED0A0FF4E4F9EB50160
-5C852954FAFED3D47621376F2D4E48F45B1091E45AD558DEA4094E2687CD2437
-AFB39039101918D5560610120C6D62190EB9D3874EE02D9C9FC9734622264291
-C870C9799D7C6107D2F1560F9998FBF0C8F14FBB57279B0CEC736E3571C60ED3
-836783D0A8CDECEA0F0E676C29851EDECD5A7B4D0D2A1B932C5284AFF5A203B5
-FD5A01B9919391DF0E0E117D91663CFEA4CAE24278A9E02491756A9EB23D1F71
-0443326DF928CFB2E1F9246CCF09F5D21537213B79980DE90BB728159424B8B7
-BE76C4C0350BBC44C0215B0F1C08DDE499D19D0072BDCB33E8369B8AFC0C9F2E
-02B322DA228A35E302E80425F604146FA944B7E1A1148EFCC7D6FCB416B99CF1
-F3E2A0096C247D55F11511DCFCF722AF143E01EB4E7EF82D8CE7F160B7FD56A9
-499D756D3C0F5ED27A46EA1B787102D652D4567BD5A43E430D7CE9DC0869F9C4
-0347EC8EB0FDF0BA7CCB95CC1B9C67397D55C964285F7161904C968673BCD7AE
-7AC7DE5BC4E215F7D963C345826B6329646DD4B472892D7B736A867B4EDDA580
-445D53283E16B33EF88F34816D3E4E2DE13FB4B8C355ACA7F9C3E6CC1FA0C05B
-4FFAAD598D4AA3FD3576A56B40B762F9CBD9D965AEAC5D7C4DFB236B12E35978
-990F4DF760EF7EBBF367998BB2039D929E904EDBD700D476D851DC5499FDEAC9
-B4765B6BECCD0FC4607A1A42EF37B036E6D751A7972D9141CBE0B54D523FF501
-C8BF2D7B139E277E9B476B8FA993FF4E867941E996D895050BCAEF5C48A148F0
-6766C27991DA1164597F01788771512E64D3067D5D20465C243D48E8B33B8A02
-A5BF9E1D5153946BCB3128DE46008D2781E2710C21FD83D3997C175D01D9975C
-CE4FC1623309996B108F491D787F739854D42045627F619668F5E9230CE6A2E6
-9A3DC3CB8305629D860D47D9797A35B6C473610787C187A1C07CECD1B49AE8D6
-89D90FE37452610D29D46DACBDDDA477859AA8D6126590EFDEF664F232FD2DF3
-88A24FA3E2C60CFE269E3ABFD6B44FB47F3B20021E28FC3F08A8274443CA551C
-E6C98AEDD0FB7397BBB62E4D629A243A3F4A70408B370F6DB39F0383D8B88258
-62B61AC4B8991487DB209B382EF369B63EE1CB8155B74BFCFD94262DA5F961CC
-9CBDEE30A3940C9E2E1F3A40C44845D2F375AA9894C258DE71C0DE1BBBCC9011
-ECE644FE7B0D7B774C09189ED8FFA936490A0EBDF65FC78C3514BA8D699A9A2B
-BBECEFF3DA3F889A66C0D4ECC8906004F66A8E1D4B4CBCC789F4AA7E11705CAB
-2DB3F91167B4A67311F45EBB52906B7C92DBEDCC028D48DA38C0CB2349F726D5
-9F40A02DBA5554A36502590EEEED21A8CE969D7641ABF2F69821DF257B112B44
-CEF97664303B78D5C69B60B13533C8A2DDF4311091E2670E107569334A3DF749
-EF9947639CAAF7FD25C073A5FAA0EE4E502DFC82F77B8ED8B87C001187904C8C
-40F555E42DB3DAB6E3852F7999483CBC5FC776F9C04708D684BDF8F48A5F82B7
-CCAB5173A7F0A0352750E1000D7F1162C9746DC3FABC90B59A02DD15D5313B99
-148EE0458C3E00552E784A454990D1D0E69ACD492CFB135F98042B5261694695
-46E48530DFC77A46423093EE463A730DAC0005E5A81EC2312D856D56E1950ADA
-0D39607ED358F3192874E07A10F184B997299E38D91B5B30B6F69FB73109939F
-6B15DE0893E01752180083D0CFC4C58F0B5187C6FA93706E1AF158EBE420B9C5
-DACF90E293AF033525B01AA59928D1812A58635635AEDEFFDEEDDF8124849C7F
-054824E91BEB2774A2810DB70966C16874AB0D155DFC598128F28663D0A8C844
-FE4F62788F67255CD3C49316E24AF0B69D2864794A50F99E3D1A537AE48FC510
-764498724857D265D93431DB8728C7FD16E3708AA3E872637C811C242D68A7B7
-3786768CBD8661105E8D6E32519E2FBD817A81C3B860109032F14A0F0144EEB3
-BBAE40B8CFC1D7568FB086A8234DFF25619263A3864CD1515F60EA5F0FC473D7
-A5788361F21783C49FED8EE59E8FFBAC83F6347DFB438BD095B9FE86B292E307
-F2BA352C94D75C8F1E43297561145D0D18EDE7450C7829D3B52ACDAD2CF403CE
-69CD483A24274B150854606768903F0B540288E5A2ACEDE68DDCC66DA15B42B4
-0201A313D9D84AB0799774E90073351AA8AD6EABEF7B3F5B9F714EF6F653ECEE
-F1EA97986877754A6C568AE9002C4EB32DADB01D08EC4A7CD005761DA1860045
-6B96B35E70F226979D9107069240236DAF2086271CA12DBCDDF3FEF17A66831C
-2B4F11304A5F6D279B52282EAB5A7A2799F2F1B2A1C71D9C457FC37A8BB47645
-51439717B50E130A2D8538600F19DD02FEBEAF5C0A265D576EE86938B8E13903
-D75A437AEF9C31E0E57B3A55F7DAB170F2068ECDF9240CDB75F8442C4DAABA4A
-D12670C853A865879EA5CACFE346C30BFE7CB1ED47D0A2FF25A38CC4B41BE3A3
-960D5BE782BF619C16276C209A165AD8E552160D37C130CB1475AC550D9BD5A7
-B540B3096CC7CCD1C837CB5419CE30E5EE39C0E442B827C7DE9A91AF2CFD9F84
-DB541DF9BF8074EA15E3271038D41A00196FE0F569A0ABFCBD3AB6AA64BFEA7C
-503658EB6CF6E3F588F63ED2C0627256DB2DB340753AB822300C671330B57CB9
-4FEA970122B71F09CF17F2399EF7C300F16D09AD4F9A26273D46A93B200D8874
-47392010A8609EA068210758648AF367F4DE577B72DC97A8BD41820E33C42402
-600DD99C0E713F754B0C6445C42C3CD5D3F7E9A542B3592CA1893EF9EBC00BD4
-38870418537EDB096F064B0BB278C6AA9B7B4E208ED8B3DB1519DA3E7ED5A505
-E621F9642B3DF6B2FC315073D349E350775F3503210BB3BDE7D4113653CCACC0
-5CCFB46325729964BE728B772F6C1F67829AD09CBEF534FFAB8F8997380E22AE
-3B026926FE72CA2B5ED4156A85667095E2B4D951C720C5615795FFFC8424AF36
-B2C9328F1DEB7101120414274F27F1D806F024DFA57FBA9DBE98F60888A516DA
-F5E2AABE35B07FC96EBD0E8199DCCB2A62F795D965B9DF14BDC21F2A15DA68EC
-36247FFE1010AF9B91FC75E02DEA82456F48A39060B72CE7923A9BDFB0B39020
-B53ABED08AE275DF6B5CF216C7F7D7E587BFF10E6B06A0C525D575F7175E1156
-CD72D90E1DD6A50B93949B82DBB970912E2A27499DF0C3DDE3221852ECF8E9C5
-8143F15DA725D8A9CEB6DB25ADDAC73CC3BCDBE9AA576BCB0D067F05E77715E3
-2C70BD69F44A37D549FB5052AD80941CB6D08C4E949533BFBA6F82F5DD589296
-3521415EF71A3EF5DD1A83178A88E41C37B06C3D98518D00E7BD5F9B33650A67
-AE9CDB41B9D8BB6E4244F32F003CA06CFB1CFD3BDDCDA4B7A7657C362874B2C6
-0F190ECA2CD3A8C2800101BCAFC9F97D7DA45AFA4AB9DCF1B9BBCF1E4B6D8E05
-6A6C8964A56B069DC91287596D70C4D6DC0612F3EC34E04051E9AA1FE83368E8
-385B4ABB8B859FF2CF97DCDA031B954EA4BA8FB5C459351E35A1A90499992C70
-A6D5A7B084548285D2F3A04ABCB5C7F59B64166B2A2926084D9B924FFF91E533
-50FA59CA5F5AD82D28DB82812095576531F268ECFAA5680C1A61C917CABFCFF2
-0BC98FBA6FBE1BDAE2ED1CE7DC2D0C1D26045B8F59BDDA667179E50721A645B7
-5F6ED1A1588313C645D2452995597434B4A9D8772FD97A00EE5C140F77EB31A1
-34A49DC5DD78171B11E3539F9E1B2BA70C87F0F21CAF8B099E5E4FFDB9B996A5
-5077AC868697A8EC2CB2C516202CFC7D9516FA563AF28F2768B32F2D0FDACF25
-B35D2CF6CD204467AE0216DAEA552F3F08B64274725985DAE2AAB9081AA8B086
-130F5D3ED028DED37F098FC6C0E6AED9D9BDBDDE80B8F3B72A77AE9F1F67F4ED
-8D38B2BBD10C6070DF36CA07D51AEBF0B8D45C8D3632E5BECCF0F237CFE940AC
-0ED54621626485918BA102002DB3744D47E45E42791E6C0FE861E1D0287424D2
-FA7F14514F091EF01901C0CE55BD0F50964EE5A67C9360BDB5D4DF6ED5B181B7
-8A5D841C7EE1CAB75D8E8C618F0F224B877C6192A515C3C488C198C0A4032967
-894218087B8C81AE796B4243127A90FDB4156776B9C405A651ECAAD1CB49744A
-70ED17D817551FE3C2373CBECDCAD545B3B157519F8C4AF7CE8F8A78C08B3911
-7A18D0E62D3B77823D6AB74E3FA791E3BD1E402D7E4179D9FF05B3FDAD8F3289
-6F046181674F75DC42B9619D7480568F8458923A3F1458B8145E4B7C8BCB0C8D
-14401B86C5893960FBA65E3B4C65016D8BE9E98C57853E27D244E946C9BF0532
-287997DBE695EB984265BFBF32677C29EC3B5488EC8460329D419A2C0987B3CA
-B79BF3EB9A53E452D2A354324EC24A3B2BD42EA10EFD3A0BC7D9AA366CA783AE
-7C8DB6AD514F913C96837E99CFA81D645F7E83713E432B168AA56527DA1284B2
-0DCC88C7DECC367A0C0BA4DAB9D1DE72E8CA4D9411E4DFB92FBDF07CBEAC37A5
-A6DCBC6658554BACFF47DC7A9A18E0B833751625735A388EFA95B2BEB76D08D9
-14F5FD8F2BE65AE086F5C9C13EAC6EAA7B364BE125FEACD92AC2D1B915625AC6
-20005F47E645A7C6AF03A35E1DF084A7F5BE20A4555410F53B139E5267332E20
-FA509FD2F16DE9D8D388F67B8330F142CBBD151F3950C0B0CDCDB976667868E9
-279F98E04AE873A14FF9ED3C823745DB48D1402EF0F9F0383719D6BCE18B04A7
-B650E848AC680D43E1D6D79A73D3E1EABAA794B201CA4B8E24DFC70FE40D964F
-22EE3BDDEF5729EB941F41FEDC66A360F8D42F0E8CFD18BA3C8F86A268E424A9
-F3DEBBE933CE14EF381428AB9EF479C75A4A61FCA2A3AF072D04902CF177BB89
-FEB86CEEB9181DA7208B9D39C18AF86561575795D4A1533C7B5AC3889400A7A2
-F67CA71197E1EE6055D505F5B6D51F54E41AA5EA7F2338139E775E9E3036C244
-5AA88D894C02E9DBC9FAC8AA8818BF8A1CCE5DAA867D0430C1E4349328A08CE7
-0B93B1C45444A2290892DFA8AD1526996ABCF7D913DDF87C6D396E47D4337581
-3BA1205D59825176DD82539D74F7BA41C54A870C5DD8A992CA0CB9D110A8BA96
-6EAD44574F32CF679D2CB02A84FEA785150908D48214510BB1841DC7E07143F7
-96434EE80586A53FF4075518B5A352075265BAB2A95C00513A996E27A3947BC0
-C3CEE94873073A4700A757E774F2F20A186B2949ECAA49A1062018554C051EA9
-53EE606A67F7C5BDB25B621F7B33A0F89E5E098803D45402FDD5E95A1ADF7594
-53ACF240CD27EE946A257E8A49881DFEBEE0B4FC96578F132D134F7A6130051B
-4782D5439F97BA1621E6DB8527549115D5669A70D8C48A95D09F41BA17664A7A
-B1F031F9AD1E533B9390E2427EEA07135185E629CE772345179052357537F01C
-0860CE8A6989CB0B15827796B74D817F7F19ABBFA4BE25470A3D8F02B763B1F6
-F4C88D590ECB6EDF49908E31C66352A5A99C6AA798CE0D4A68BB5A3CA9EFE67C
-CC46A5D03C776F1881D96B27F107594C0D2E07EA449E8AC1030AC771324455BF
-279ACF071441BE6A095E2255CC0ABBDBC89F2F1474C3817CCBBC5E8D623E863E
-00332521B041693EA1BAD7487C1B9766FAA4D224E35798D3AEFADA4CA92C1F9C
-E491030422C3BD30B3E6A88B3ED0AF90CB1F28AFC0D06E9F6ED45E764440EF48
-62C1365903D0FF2C6BDA137610B97FA0027A96BEF3AA6962E9A75DA0AC253E1B
-ED965E0E866A53CF93885C010E097D8AE3729DBB8054B621BEE1F42BCB0C5DD9
-6BE3B110519656D495C622061C6A47E8B8F9B423F408840C91693B855E33EFEF
-6043534BFFAB8923D03A3A155543ADE84D5CA343FA46A824944F697642703E03
-2BA45892979CBB06DB9D47B56A24D28E39055407A50A19F8A551D9C0DBCB70DA
-F7DBA66F690299EFD7A8504F4BD7CF36AE627F08583B445995A037C949DB5D8B
-51F8DE74041057CAB908CFF67AD6282233E2CE92DB23C1188F0EF7368A617CD4
-972CF2F8596549DD95BE03676E1F58F6E24638AE8C7DBBE6EC0AC9F31867523A
-097B55BA89F52A9FA595C67C1241CCA76DFE1B4BC03599D63DF3133454EDCDBA
-024DB178BEC4460346367DDA3358698AB28468AAB6D67E86AED12A9974E7F517
-7D231A7092242E80F24CA30DCC5B03E19B890DDECE1C37ECED6ED092E1BB182D
-081632803208E53B7211C40AE01266DAC9F73488ADC9DB4960EF6CCF9336D374
-7391074D0C95E83B712DEA2059700F4FBC22CD89330227E9FF4B421FBC2812AA
-9965F92D5438A5B95E61BB1FCE0BD2337A39ACA1D9CEC95C37A82652745A84B0
-B9C90EE8B7A0AD51162B51754286859797971684D8CDE1987307D91B555EC84C
-5D45AEE0FCF4062E58A96B5834660F16422176BC7A6B58F34E3C2D8E54C52825
-1453C1F7EF626FF45077EFA76AACC5DA7E5D8B8DCBD178BDA4D2E8103F0A86D6
-33097153DE635BB4FE2E4A75C4F699872218684D0B0E51B69CF9E490F70AD35E
-4A4839EECBBBBBD7E7D12140DB9B9EA85B7F4C88F25D68ED2E9214EAEDE8B5B4
-EFDC90D6EA6598B0D0E9AA2532F2D9789C86473E9C2E0B9422501EFDBE800BC7
-3BEF94DEF85551A4F3DF7F57F885436FF116BF17663FC73838E8AA3D45CAB284
-51197A9600A914D53CF7343EBB46C2B3C81C3294F748344FB0EED2C6CA0CDEA0
-D506F7F3B7280A60D8D91906A107A1D83BA63919D52E5FEC355E0CDB98BCB9D4
-8D6A282FB4C51FF790AB03B42291616597D6ADC7BE4381340AAE967DAE31A421
-809EF994B79AB08C24E6B133712DE82CAE52EE64E884CB5EB219EC4A4FAE908B
-8EC25EF5DA204CF1DD9EE83B56CA1C039DAF2231070108A1AE17F0F3C53318BD
-5D313875D4B6BE299318F027E214FA0E9478D0B6B6F4E9152A5774762122ABEA
-F86B42F51876B45AEFB634C00554F342C5A89E4A826C205909BA83AA27FDF801
-D448B46FCF635AABFDC7A939658CBB04BAED3703457DF907379C37EB1E80A081
-BE3E732E01C6A5064C0DD2F673E36FF6D0F43E48978000C23712F38C45A845C3
-957780724DB88E8B7107984F083C914E104A8B43797D752CFF41BB6ACD6119EA
-1D18A404BDF3857328C3EBF3E9CC9576CD9085673068E09381ED8C9E246DB450
-4388398B36E123EE5F24EA2A4BB20B541CE4E15EC0E829513138F602EA5DCEBF
-7A11E16E9B2C3B1279730A769D58C511D87E4F9DD1D2E4D424B2EE086278EAD7
-C2419D6013CAAD5111CB9E659E0D4F5F7FF1791B81AB7302366FF305DF777710
-972A6F2B77790E381EB9B616F72B4DD3E9F12298D977B1F0D6239015384CA2A0
-ACC733C09ACD019CAB34854D8FAC451456FBD8BE0EA4E277EB306EA32B894AF2
-EEAB708D50B3D0A7316CBDBC6D92755D21DED8DBB1BE024CBBA3476286950F39
-10090BEB44D0E858D6F977CF10B8857E47B9420E63C8FADC90C7A29741F35CF8
-A79FB006DED8A76C108D59ED676CA1B10C41C2E261D6736C08F2B301CBC6BE20
-E6A249E5EE7451D8D2D3B5FA2B991A7AA5DA8AEE501B2467DEA909E659FDAF53
-3C990CD4FFE2E7FBF26386755AD2A74325A4CD324C39E78A0FD31A45567C5BEC
-F0003111EC559BA6BC623E4244D507D7CD9436E0BA3BAA156B05A8D0CDCCE42B
-429648ADA0B133B8B0AB63C2EAA1B0326EB55DFF8D169B937EC5402C355B0921
-A094A237115B9EF02365809474FDA0C24793E6F71D39E3E956F881BC394F8F5A
-143AD4F00FE1C4AECA056543B58BF4CDFFCD94AFA2FDB3D4B69BDA5F4812B86E
-4E8DC4F3B29F83EDBAB9F9A6582DC95098900BF52FEDA83B1E796B940194F242
-B49617099463ED76F552F5AEF369DFBE54465FB286D5CB03DA954683AA52BCA2
-9DAC9F104E02C0575A9DCB4AABB216306AFE5AEE9B903E0CA33C07E5206C610A
-09B71985022865471B6396834D45A2CDE1B36CCE0C265BBA035E4302E4DE9D53
-DF8D179AA111F3DC914E1D5F3A2CCD4C3DD9B23F033772EB9EA8B069D5DA6098
-42D7D4955419ABB3438EE197D058091A88200736CE8DA1557E8DB399997F5665
-E938542F9D201769B9AD834C78EDCFC047BDE68CC0D773E11B141143F2679566
-3D848A93988BCDC30D86DBB3EF3AE4E82FA43402156C385075144730EF9F7EEA
-0553A0C1694D70414D12DFC9D4E47486CFCDDFE71D88587A03902C9380237FF6
-9F672F33087E98C068CEAA5C3A3F57D66FA17053545F385871AA445C8EAAE137
-DCD09E0B30F7FF0CE9B7893EF9720AC0C7C0AB1B5BC8595FDE23038F1554EC35
-DCEC6D947F52FF01A18408266190EE44DF8CA9A1B76530D549BA5699B51EBAA7
-9E3BE3B7252481F697BFEAD643CC043DC09AAFD27FA6B8D39A83236B28414B34
-1D467C27E5126994BA4F200E3CA78D83BA8CC56E0BD4F2FBE89D2EEA89651F2B
-CF22F45A249628FD3C3E396955E6E09334F24E920109F20C6F6987451F6FB49A
-3DDD9B072E68A7EC450C8028FD97CB35FCA8DD545EA4C8C6684EAA8BB060BDEC
-B7B214D369C22944198C2FF847E01A3195CA590209307ABDC3AD0867DBD263A8
-D4C1004DB50D6C570C69E602EA1B7F6F542E2D9310392D4280CCE05C195FFC1E
-99A573A2F8D4D6374693B5DC8409422A7D0F6AA677C0ECF93CAAF745007450CC
-347977F2F0E50D2B3CD26D9F9B6CC79693578D3358D80EEEB55EFF0BE9182197
-9243E7E98541B12FC7BF34FED1644F14BADEE4586C28D54CF6CF8AF2C3155AA2
-C6DB1DE07E2A0BFE24097657E08EAED3BC60499A1E3BAF58872412CC89A592FA
-EE68889148088F7E617E24EA1827D79256909D59FC97E3FEB9EA13BD745A57DA
-065619B1CABD3C4EF0FE0639658936B18227487BC24CFD1E60BA6C895FFA8626
-001BE5D2168880CE06D7FBD654CAA41C9085CA2E4AC55501922B8384E565B7B3
-A21E68E161D456F722AC293C38B92FD21D89A407F0E5DAC64B2599B427ACF3C2
-B7E951C93D2EDF43C208D955BEBB9BCF856546CC398608179A7EB470E75BA5C1
-FE438B5D84FD8D51A8A5C2B42E1658CC6D5F686AAF3ED6A068AECE286C1AA3F2
-9E990221DDCAC43E7B457B5F38DAF1161AC570A4AC17817E702E048E2439CEBB
-6F7674F6A5060E1E864D9A201DD1DA14E12AF15BD53FB0798846C381A5FF18C2
-6FCC27E6BCB84A500137A7C991E97B037F585F909F572225780CFA937BEFBD59
-25DABA454121BF556C525D859AF72468CB36D8881028B0E82D2193CB77C8FC81
-D0EFEB810B36A6D4294FA63A2BC355980CBDFCA46ADAEE533EB582A4C6F383F6
-430EEBA70A27D580880A723D0CE5314F4CA65B07C0542A6E1BFB2A44EAB7062A
-7BB4BC7D5F9977433BA0862EF6BAF7C30BDF317098C0341527FD7E182F43A8F2
-CB5763A66852600B970A457672BD50178B16F37E4972EF22CC35083835AF934C
-75EA220358DDB07FA8EBE1AC8EEA949638419D1D93A5C558AF5D83B222BF1188
-AF5E167B501DDFB7FFD0AC3BE3F327A3DECE57A4B526A744FE41F68FE22C60B7
-73B9BCD923B3BABB98AAAC629D101C8D91F20D2ED7BD38486EC9617A73038FB5
-2A79EF9358F1B2560AD5AC9E56E0064192E6728A59621933E995CD3138667D7A
-F6B06ABB67D21FDAE07655CFD75C66A5EEF6FACD236849C768D2EC47CDA54AAF
-C763AC09BCB867D3DD255646A5D48FF7C176552E95EEAC08B235F6FA29B1B414
-B63F2BC817E0B2A23D9C55D84D9FD20302AFD9E0C6B2A986BC36E034CA05EBC7
-FEC81CA1732C2D251BB035753715EACBCDC04933C4B3B6470974D992F3075CC5
-EA65EA2DEBE6A89323719E39C292803F9F0972C9D6279D9BA770C974AB4B4BD2
-F177BD7C42C7DD13F1D5CEC057ED0FB18F200D1DC624DCABA5F6CD7C9B9D7F41
-244928AEB24CDCF31559561FA5F7471B401E4153C0BB6A14FCAF6E33A680A31B
-318F08056EDE6CCA39A015BD7867CD75D547678A009DE8F9077C7B975872CC49
-44A901B5271298E3E1D2E4E3DF433090E55259106509F62551DE2C23FBF84229
-D9AA4C9644B9620EA49D5028A0C766260775B2F1D9D07AF5C9FA2A92E3A08F8D
-95854C9195EEF55DDECC8F7BD38616E4196A75667A6B2452FFB10635B7DABEAF
-F2542282DD88BB616490FAA4B194AA0DA5F3DF44925FC33C2CC1EF4BCDA42350
-5AABA0FED7AF13A2258F0C80EC35B4F9E9C8D6E2FE6601E84B8A403C0A3D4305
-CBFBC13A71330A520A6B15433AA878DA13D78703E4DCB38822AABEE4D4A43730
-86D515B3EC28751A6E059D30AF945541039C5414C0814D04CBBD6DBACC2223B2
-5DDE2AA500F4CCDAD8F3E9F466BB8197F03126F39CC1E176038E927C50BAABA2
-C630864E7EF45BA2709DBB60AF6218484B7B00CB92BC2EF6ED4F2BFD791B0AEE
-3292224A4AB40B8F96267079CB4F985D83F956C24E9E3C4B7671D84C74558CDF
-4F6D8346A7C863CF7824B4970C4B8F7EE81CF88EFB91CA000FAA43CB69F1E323
-F95E9AC517636F42F95775B9B7CA83B4126C1A9D3824110095D1C41F3B3E61CC
-D0A6C922D5DDE8FC4600685584B1DC47B7C566CDB0244E1DB7143139189A21A3
-4716AC0061D12B88AA137E3986A3321F6913AA1A594AEC708D14E69C837DC7C0
-9239AE84BA178F7D2E86F3165E71F906303AB91FAA13F566C5ADD44B9A8DCC96
-C0F0684BEA830ED0163334C062E4C96BC5AEB4A41E36312359C176DCC9CDB7FF
-A6FD1180A3E1ED4B2538E33080155307AD4A71D70EE926ABE4ADE1B3F6758506
-A6F44E826C7DF2505E57ED63C535142B706D9741485C16B6CD14D50FE93A4226
-B5E9C793A0A9B8CEA2157715F974D7B6FB0E3499CFDDBAA64073E87317E69EC0
-33C33435A0C3098F9D96063B21393DDD6566467C9EFAC8DDA8933665C0DA2709
-2631AC7EEB745570D2298339F669199F60B4B1B6C87DF15144A9B480AB72C127
-F300204C364CEDDF7B82A522F7A5E84E0ADBED642CBB1490F83E713194A149D4
-0F8EDC1909D1103F972BC61E62EE41C4F70685398671501F1957764252393701
-4CF8307E7D17BF01250233A54FE74A0C0301BFFD5C6ED9019816CFD3DF0CEB0E
-06AAD5A78826D8B7B3AD1708433B373C52992712423E17638B58EB4CCB13A57A
-941A1A6CC5A4F5BCBD20B561133D6C2A9D7FEAA728D0BE1E29C8503C1FF126AF
-5B5F4A9B470E9BAA573C4CBEB12653F3154974129D339F5BB4BE78A0520F2A45
-AA3B2E7283D394B514E00CC34EA4F26727C7CCE5F362FB4FE58A3730326C01CC
-63B42F4B16DEC193AAEDE56055DFBAD3DB7C306FEA3CEAAB3C5DE8BB5F10F475
-80B2781A6E7FD9C84A449786D8219976D269B1D6892AD7B61E3677CD27F6CCF1
-A71A025A5AA0940938759DE27F2399D7B10EE3FF3E87DBF737B618484F638EB0
-73500C5E5EFDA98ED16D4083DCC3C550A41E011F6AEDF631F15AB47DCAD54EAB
-1F51714DC21CD4E1502D184595E0015858C06013DFE3B5C23470F39F6D2FF47B
-3A806CD554BFFBF979BC5EB5C4982630DB513535A6A7B4D58FB95AA3AB57D4E2
-A3E8E515F3D7B5EF419020DC9B8548ABD1721B1C84E7DFFD6C19119F2C32C40B
-518C6FC5E316AC52CD44599E41ADD5C384352114F693F7A936076EC3DDC26E8D
-93F258BF38FEF6FC5E6EE27902A572BD5F4FCA6966FB09B716BF5006C78A716B
-3BD84E823E911294CEB5A1C2F01B77A4CCC834AF11BB2B27843480FAC752A959
-FE09FE60A872387B2C4C35B1040F22A2A5BF96A64BDA6CAADD23C73961D664DC
-755723A618322DC608584ABC62455DA3AB0F39ABB6CFA36CB1CA2F44EF969919
-9DD7D38FBFC61D73EF3F2EDE5427E95697E837F048387234FFEE1654168E8928
-3FC884BDAD421DD647C739DA4DDF47A8A1B9721B856A1E10D517DC3DD99CE724
-337E4E63F614B418A7E8B8BD89F3F52375A6D67F3633851FECC9559094CDBA3F
-12405CED7F8887F54AC96010FD12DAC7064F11E381710AC21DF1F8D3D20F929D
-626DCDDA1FF92E4CB7EAE8F23D0E5E62CA475B9675D04B05D8C69EC5BBE3D0FD
-85A4687DB304C23972470FCF10F49FD1B17C9DBA81CB6D93CB01A0E127E992E0
-40379266999CC2380FEEEE676A65E47AF72A3DEBC18FD7FD4AA416E4680EA97E
-FCD679AAA6A752B6DBE43088A1726ED8A96FF700AC9156C0357293A7A57B61CC
-BB79E5551A1235288959045CE9E83BFDE4B3E3ED6FC9A3223C3FE15C17085DAD
-987E5066BC509508583FDA7A9E621440AF3C06DE34B3444766C89E1E7DE44ED8
-EC9BC244E700D62079F298749EF931EDC9A3AD600B42B27FC791C56A6E8B4FB4
-81E7C9767B539BE7DA2F6FE3BA919042C2AD3C93DCB46CF516A3B6624BDB6F22
-9FE0D2EF492B5BC2ECE7A52E3F5726F0E51A7F21A1B617856BF4F9D350D253F5
-544AC08D257486F6D3948F40E56C19B0388EC42456B904F1237363FC18191B82
-B6E7C6A60154E7AC5BA66E4B19B338E8043B4FEBCBF1699D3762C18715342C4F
-226D24F085263782A2C95F5E383ABA7338D1481F1DCC3BAD9FA29F7150352A2A
-D5D4E0699AA98905424F318F74D4F5D411E0F2231AA20F247E55D8DB6BE3570E
-40D90EC91CF2C669BA1DF484D87BF8BE295FDB3381FBC5AE6EC93D530B2F86D1
-F3CC1F0C8778DF2392D8AF2340940A157D51A6BE8B21CCEC6C1391F5985FD417
-E222CADF1C38E9F1C745D93E7F85C0F916A3FACC63D4DA66021BA75797EC8234
-34BFF82D79F80DD5193EE7558AAFB2104E221C7D22B2FDB61EFA87F464EF759B
-E7289FE63E13E13F7100E3A98741E513BF1ADB1A84DDAE8DD7E52EF83128C015
-611D3B559D4E00D609AB14538DCB340F327801B8871FAC2A9B86B1A2E43581D0
-2ABD8A6A80457CDC66AA1B3DADEA474C74FF0306DD39E327D339B26265CA4D0C
-B1CE1B6C0BB8894094436AA791E19A7059856032171B9B8D908B65C44310D3EF
-2646CC68CE584E108F821088021F938D56BB811822677D0CBB52339A41AAC1CB
-1E00C00D71E4487E4C4DD73C3F9E6A11B883D0A456EC9A36795C899EA395AFCC
-BABDA4842D17766243CFFA6F4EFA0C1126ACC68D0E301BA1B7599A8A9ED30177
-C4B3BC0C885B388765619F0F8D8A9D6EC66187CB2099F4D033198E1A30BDEFC0
-FAFB5DB72C9FFF8319409552C4DD5CB57F78B24CF3FF7BB0ADC40526105E27E0
-F25CE258E3582A8E21FB3C98F08D4BFADC20074B1FA8D53D41D6576422DD081D
-A907E13E277CD55F30C8226068B979DEDB917F5B00959713E36D834E98D14A8C
-C44E0A7CE11AC30825DE99E2850D3A85F7F6290F77919B87AC04676A98B2E4E7
-48B87B9D52A50E0BCF7CDC348C76A39DB631C24CABF14103A465E90626F2836E
-1279B8312D76573803A7F43DA396D813DE3CF4C503E372A668082010CC2F1E94
-05DADF555E05118A3F5DE5BF50A96959EEFDD872BDA6DC20AC0ED1C7DC1E1797
-BAD69D3F25B34E8156CAD0D17C2A15BBDEADCCCE021307B2F24B822C4805C4E4
-9B08CD76552C50A15CA68B1DD34D8B1F6FF1C365EC2B7992F29ED478C165AA3C
-790A26CFF3817E559D1F5ACC0FAB00ADE9B53FEBAB501FFDF13A2C3025865889
-9DF506626A738841E9CE4EB1E773F25873C05C87482E92257F1401BEED54ABDA
-0E50F555E0154720FFE532DA4CCE16E5D28495BAD18C0AEE12C02E1F1F8A53E2
-D8486034CF7D8B55E5565495CC953873CFD2A8DE90356A65BE8C177CF1ABB06F
-FD1A42635B75182CB22710109AD28C5E7EB9CEACB2DCE9BFF5A2D16F6D89E90E
-42BDD9499D7E8E65808313912BAFAAD7CEE2476F0D7AFCBD69A4F4999B6B76F9
-C3D873DAE63A8D37F6AA266604F7E07B8504B694CC03DFAC701555F4C9EDD059
-8E33F23EAA07CEEBF3EEC3CA8B3811BE15E1F580A9D433F7813E654EF7716C73
-464B5F921310D7BBEE984006053D194D28655D23CA1DD13D8F547A7C6081DCF6
-F26F3DE3A8ACEE9DDF1CF4539F6150401FB47551D01514E582208788E4310D26
-278F838C4AA0CF9C624DE6C278306038721E67A3AF8AECC427B2FCCE85001032
-6AD521122DB620831A63AF7764359C33CFA8AB55EB2E3AFB265D31675D372BDD
-2C509FB96C5EC18BBCA5C6A6DA6D8FB3B10FFD8179A7C4BBF4B44CE9DF3E5C0C
-F4E22289EEEBAC17AE0A0CBF4033DA0098BAF51D907AB6AE3CBB18285C9BE01A
-D4C78D416DAA8510CDC2B6E2FFD1FD48D3B55A02EA192E91DC819CB7E7DBF670
-767EF0EEB4B56229933392F0597D1C5171ADAF7545C483D08D0D7165CF04A46B
-8352D4B2A7FD5076AACA863B8433B640F87036C461558F07C6F7C6A9D4662F1B
-8EDB054F319E28125B93E45FC86A7AECE563126E71C4F209E923EE6D18D318B4
-5DEA60298668534030F29A51AAAE6AFBD7E54BD69D3540CE62E3C424A19F2B79
-9EC12BCCD362E40B3F918018C95F59B2C1C872FB2A39A959058C6DC809E7B1D8
-A3B7FBC8B0B83CC5C0205209EF605459E6F2B0724D614B083B9144FDCDA96A34
-C5968722B4136B98D9DDD41F9221DEB24F17BEB9029ABF00DC7BE32F9F4E2060
-95C49D98468BAA020E392733110F36C70EEF55B67E4F424403F1A4CA9D09B9C9
-5F5C370B5CC45E6431D70A932BB8AF8125B9291B2BC0501C835C6BC27387E43A
-50FA573896C88C8C9F04987DC8445EEDD65113095D46A364E314FAEC4686787A
-B857B43E2F0965FE1FB8F21AC2EA3CC336EEE9FDC8336942E3D2CCBB27BACEED
-04658E1B8DB7EA959BADFE12EA2822C120734AF2F6288F9290E997A7FE6308D1
-1AC32DA2FCA9539679920DB053BB1F035B126795749FA897CE1ECABE46BD4B84
-F483677F7955BB3E5CEBFA40198DCAE3EF45A986AFF650D1A3ABA5317E0E3D5B
-F7C3C78D61A6140C06540C4986AF3DB5C6352780849981FB6D167F7EF9982220
-7CE3022B5A3033C61012E2F12D3A3F78B66518AD2622EB37E138886C02E7027F
-BB6127C082221ED9168B71828BF8C544850645526377656AB731B643D5291F21
-3591541FC1ABC6EE895A0292A1C01C6513C6118B7A04795652D5D09659E1CCF3
-A83472143966721C927ADFC7DA682A49516BA641A27549F3782A2E754FF03EDB
-05308F6704FAAF25158A8690425488A428879B0C8A26D2026722444D270BBF12
-BBED114F6CB5A5703D5E55C42611DF8D174C6143E917DB1632B119E524DC7F18
-748E6D9EB165F5B7F61E6A7FDD396302EE2B61C948EDC6CCB5C909F9057A8558
-02BF308AC21D9EDA60ED2B86C77E9D44ED0F16209E900645B4580C846290AB9C
-9BA0D162F856D751BF1BAA7F32CA75B96256C7DA5DE39930410F5E23C5EA7EEB
-5E05C87EE87F9A997E0472EAE92686F0D9006F655D6DE638861E425F41F489BE
-350CFA2347313161E3F2405B90EFBC128D3EE838E7EADD2F4E9C13A7C138C859
-6DF459C0EECF70D7BCB04069F443CF7DE32DD584122B0F6B3087FBC0FC8012FC
-85EEE77AA41B5F951B1C98714296824F2426B45AC6791B50CCBBF85AE27B3808
-D4DBE36021108FB666FFBC8029B80672A0B0BBD32501031C8AF8C26A84045D06
-1508895126DA872C9C9088C76FECF046FAAA99BA09747CB1C15B2DFBD7BD135D
-505A8360C5EFC97878A73B4330C4EF1E15BEE3E9BF90F0ADE96FE02E179D83EE
-18AD9713C7DBC8211EC46AA12011E720DEBB4E36A7AC7C368FFD41C692E1C9E7
-4C7A4961A864B104F7CF7FAECD685D76B65CD5C37F26126B9319EED38BFCA9CE
-6C82FAE5CCC40DF8AB6F5047EB6C35FE3E5D1D18969E7459A3819CBDC04E66D4
-DF3FE238C69E132D1D7DDF68642BB93F075B3DE24BCE78804E617C1CE2F34632
-705E766EBF67DFB2643E80D887E78113395A693DE73A1F7680CDB9989727E31B
-95439385A5D4907EBA92A5CED721C189BDB8276C101D4E9E27ED29C66405B167
-E076921A1DAD725E3780B254E001D8F153F14F6027F1FC2810D110BFAE546193
-2006CE9E653416E6FEF423F4080886F3568F0E31B041E6514262A4970A4397D5
-A58792228CA938EA13E958322C22474F5580EBDAAF04F8E1EFB12868733EE9BB
-80703E1E9840F920536ABD8CA9F5091E8A9830599296AE5E97D0E9137F7FA3BD
-D747F44752460DD72609FD774E3FBC0D8CEAF089A92FA249CE089AE26CEC65AE
-1A6879429ED62113AE68FBDC0A42B4FA377D528B12416C70CBE39FBEADEDFE31
-C8A748E807C38ACB86908544CF78E3BACCFE3167A5C40FD1B98A8B0BD8B95DFF
-BC1D52D08AC901AB5697248DB5846DAFB1F0685E8387DA8753D7D0EAD7F1A1F0
-A63F8FEF5544624DB211ED6A728B901FE0668B3693B539669C6064A39C97BEDE
-F108BC3F10E931396BAA969C9FB6D23A5A82DD34445C54C3EB667E80A4BF016C
-A8057FAB1966C1F69A58490D2DD4CCF1DDEFCE78E7D82238B5F8A1E23608D10A
-068545C57D10878748AAB507582832DCE8D75E0DAD6C42CEB39D2FE66B6F87D6
-A655A0444038EFEDA8BD89C63296311F5540FC6D7FAB788E27CE03565D132C4C
-96CC6DEA6EDFC4E0D30BE4F3248C95AAFFFA9BEDC2887EAD54D1830D4BC84270
-B63F9AB573CADB7E720367FD3CA18DDC2938B5E7502AFAC6410BA0DF7E6E8B9F
-7153014FE2B690EFD7C8B93DB1BCF5CB2ED7A8D5AEB0F3BB5F960A6718FDD1FC
-9F5D230554935FF47BD6C0434699B44B587480733D2429DF88975A32D51E2CEE
-0280E7F4F715E6F6B7EAF741D5CCFB4152CD283307618DADE3D0034D34A8539A
-B80549EB41C46EB5164377C8A77EADDA82DF05D50788DBD2330228CA555F12AA
-6D045CAB8F3F0BDD5B50F497C5BB074F9CF9127E5A6F13B0DC18372979ECCD4C
-7352A8853C44313DC6324979ECF2BE0E052CF33C70A7335C500DBBEB7B437335
-E146B6FDD7AFE11539B590E8F3A7E8019CC25DA13A7123203A2B39EB6D4288DA
-4F30194E30248116BBF60BC5B4F326CBE550E2CDAD42C58008353BB35D634CDC
-D5AD5DC3AD09F273CE4A65785F4703A9DA2E9F79D3EF1EE8F31A32CDB123CBB8
-032351A7C8EDBCA024F299E0B97EA93ACC30D8AF21F8E87F000F3EFB7152C71C
-39A10C0B32AA1220197BE941B184431719B16975B1F38C9464D742807253A5B4
-0C96AE037F52D66BF1CC9F9899F51468094FB75F462A4EB907D7F41C02F91B68
-F5EBB2DC94DAE3DDAFE3F930DBB32062886C93C4F78969E950656BB0D3E475AC
-873277C0A094B7FA5B2F5B9D5183747D34FA9367BA0EBA68E478A1AC5D17D32A
-BDE55AE03099B90417055ADD71513EA9FDB4E45BBD60EC967E58EF1C556F66F8
-4019495AA6921D173BACE8D97544613ACD9E251BEF43B1ED4BC617160062C2C2
-BBF5834F368304BD217E3DBC4197278A170BCA1F96F724914F1DD496D86BAFC4
-BFEA978877EAB2605C76AE0797792EC3242B69EF0894D47790795C2FE8ABCB86
-0F84727E8FC73A456B1F8A5631CF09C445789EA8EAACCF0ACED0469C465B495E
-40F36C3619EC96DCF6F78E23586C02BED2023A8584FDDE2E54C6B583E05E804A
-AE42CD879E602E814E66390F740BFED677B6982DF2DF0298264BC35262BCB16B
-500DEE6AED56F561D14662C5BA0A966BA50B3440F532452F698554DEDEF77504
-0EC17E5B0BAC3E4898BD615367F01F2DA40E4241D16E68799470843CB5B65569
-1F7349565738E94E9BEE6C7950E2051AE3E88F215ED69D6485BCCA6B5499EAB4
-338CB8BCB758A0C27E3EBAADE3B27CE29888D0B12CEB105351A7727B05933218
-D49AD5992B0FB3DD8AE76EFF16C560C8B15F8C6F39A33408AD1C78C395219B52
-DAE812C5E015AB02E170A4D5C6FBC246DA7837F14388D117747F933FFBE0DA95
-67370FEC2D4757DFD0DC8BAC60864561188B7A4EF8EE5AE0A57E6D16E233ECD2
-96169DC97D959F2186F21F41E3EE66A4E618690E4FE507199114D52322B46747
-2016EFF537B5E33C8EE5EA62CC839F159464CA79461F4019995F32528FD23A2E
-90AB852FA84AC3C9FD9AC73E19F7BB3378BE9239211A01BF2370142FA7F6834C
-F68B9C191738B12EC57B5B32C84B0DF6C0573759E70731F8D018D11246AC3F77
-77ABEEB0894A7A5593958321ECCA8FC92EFFAE2C24F92F567E9815AAEBA09F2B
-D1B6872BFB73296B196440B95F9AD1991943B2274C667C1A23ECC37EC9214393
-08A20EA18292803B8BCFB5D51780A995E397B6C73F895E6B10B9182731912366
-884658F00E726D315EC0501A357A009D592BDCBB9016F1D25F45ED1AEB6A3E1B
-855C5F5F71D8463A33A616CF4EE7289735806751DC1267CDA62320ECF760B254
-1F9A52733EEFD6F6AFEDE308DBD62577B94E01DA7DFF53061BE85D97943DBFFC
-504F66DE52C820BAA54593336F8725F65DBA718558484433EC4083C855372F22
-EC9A684E82FBAE1D09ADC8A34E96FBFEC4177AFAD426B244149183B6A4937816
-D2197C7BB04DBF383A6B669B7C42ACA1D10E2814F58A066D12A5166739AB706D
-24C65AFE4D3FC725181A2DD9EE7F10D8114A0BD40A5B7D50503F3A308167F5E1
-416C0F4898615FAEC0CBC99EDFEC29BB30049B83AAD905B4F7421790B044CDEC
-4318AB55B5396264BAC93E13F542B3C1E20BF83B630009F4270E07C314DB9D5D
-5F5E284063593990A19938B1DAAA6EF8254076FF6D432FBD6EF500DB169F39D2
-3F8A0DFE840D2EC1CB3C4760C3AC0DDDE5637ED19E2E20D9B2394F8A17D573A7
-58E0DAB14BD1B08209EE56E5189AF9CB72E8D8FF2EFDB0C0CF071E2DE5A7AC11
-05C977CEC7A5CFEC266712C58757427526581199E63414BBB393020DC7066493
-26B15043621DBE6007E21F1FE3E74E5771150E3C7171D24ED94BEDC5F27E9A2F
-DDF67E9DA6C8A7BDBD1BA1A1EA86568270B51649641792D895D26DC424441CC5
-A212F25A11ECF2AB7899773113F2969F63B45A0FFCF56A3C75E400302E21CA16
-78C19B2013689993A19E6952159AC719D08E852FDF54CE2CE5CC6C3349756FB8
-2C5D506ABA8A3E1509A7B5495813601F52F3D256716486D414C847F99B7842C9
-46E5390B5F480821730B7C980E4FC4FE83F1EFEE6DE8EC722CCF774223790554
-875A4CC6F4E04980269A4E2B2F6AE18FAB7E99B015498730B71C2FA51C4C6521
-F73AF3828A3974A518923BFA08083A9BE1F8FEA4535A59C7B4280B5E2E65C0B5
-59763DF53F8409BF5810204E337D1E62A171A8B0F01B312CF3946E2C76BAFA4D
-9C216E36CBD1BBF973D9B2F2399BBD6B49C59E7977A4ECDB0B01CF7B33A16FF1
-DD6285BACDAE8DEF665A9C1188878EC499E7A3060915484B52C49868BEA41F21
-C6B3E5384EC04BC64B35170F2898C331FF5CBE2789C64EE66EDC7BD67020F260
-E4C2826CB6A0ED1978D3D1AA334F47D993929F0762EC83B50D8896711976C1AB
-9CECB18FDD3241D9D097EAF6B9883EB2BEBDF39204C27C76A4D3CF003C0FC1EA
-A7078F28421D5AEA923218FE1304034B3FA89C8FFB052A125FC6A27E53BA617E
-A00ACD83C20A42E3ACC196C7BA7378C111694C9B37035E12C3BD1EAF1AC92644
-B25FAC3C56B34882E230E8B07B837320161330158721252A20C674C5B7D97C49
-D3A083CAD2BD8F96684AD4F65CD9C977F537AF84F58BC9A92CDE55A1A0E599DC
-3374887243F2BA7E64D77DC4505A9DE891F9362B1742C5B014BE202BFDC8FE23
-A3DD1B31D9EA3BF07CC0E5021E9D7948D391B35845B22EF63BDD5486CB4DFB6F
-35AE0DBB4FF97365D02F652DAE17ED50586192DED01F06EE8475E4BDD9A92013
-8FF03CDE727EEFD293A6666B28F6105FF18DD8C078AEB8
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-/UniqueID 5000768 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB73439CB0DD021D44A7C11BF295E81733
-4DFBA460FF3D654F9FB337E99E6D66FBA87A817EB9CA1536C84833870E3626DA
-55D48DE850D3E6F6B29DA0E7C9D681283586F208DB8D58042E3A7CE55BE84822
-C98237911453E479EAB65AFEBA3F61A763B40E74535BE56C9D8D06DDF9441741
-5C9D9D917439368736619717FAB4F06E2C329AE0BA411F3FD522D9C33AD8369B
-D7DCC9DF993778482F35F965973DE876FA19E109AA198A00658AB3F0D8E3DDD1
-08A573F2D525202AFC57E05D141E6C0BB811E1FE280EEA002B7A45BB363AD06C
-318D320D2C81AA5DCC842CEF66E7DF7670588CB39C9F42EE7763A3A17372432A
-173BDEF7ECCEA297CCDD76A835C36DCE9DB8F8CB66CC71B4920CF5BF055A5260
-5B41A5373BA6E4F63C85671D979EA5EC30D22163E6D206168A3827F465279870
-CA80E6632872F721BBCC622EE4214BF723551C846765495FA9921E11FE1A950A
-53150C3F5D8595958A47E0B16064CC3AFD65DA294FFD111153F4F233BC5468AE
-69585C16CFBFCA32C4B96C161F47B56661DF84FCD8ADD3EC086CFB6BB5179BC3
-A5469A1CFBC8620BC711F42D0D3139BCE4E38698D9C574450DB43B5A19FA6D54
-0368BA9F7A8DBF96DCD0B8968CD194264E6DD10A958846C278B8C2BAFE7AAF8B
-44C84C955F1A89A13E62A054BC76CABBBF6296DE00A79CD7C8C61C70F127618E
-9975B59A880685E126F57AD80F8F4D376E1B476BDFDAC868FB6AFAD9D694B561
-001623C4D9F55366D053B52F2B09EC08B81901AE0986C5350312E626006038AD
-AC15FE313FCEE1A2E61F8992AC00CA7BB7F997707EA377D37EA6FF35BFBC2866
-A572B31491F9B80445685DBA5E62F166E80589F768FC95BBC79158C23B2F1BD1
-25816F1486A64F76D99A638AC0DC101FDF390811B3C118C2D972B2E7587F6F24
-7F1DB2DD922D237A7D18FF08FD665355CFBBEE799D3BFF11CD94CFFDBA3E725E
-DCF4CDE4307E3B199D91893A365D04F43A5305BDD2538E28A0788E061F3A621A
-B4A04E5063B47F0109C1693A284FA43E8F1EA9B68145FF51C005D3FA40713BA8
-1879BFC3CAA881B9D885A0C1AA8BB9A8C848963020A5B15F862E7DCC78F25D7C
-56437215999EB78142C128C6CB1E6E75EBCBB1E4614E8516FEB1E68400C61326
-D9F9E8A41216901F77D9466455E2A0B45FF50B27B55A1E1DD4F243C92BA6B175
-8F7695CFA1E91CDD8651AEBA3D258FFABA6280BF2420A98FA7CECD552D152CFD
-A8CCC94C032087A28D68332769DD2CB4ECECB15717C245BA305CB616CC72644D
-C78326E77FA602364A7B1630CA0BD0282FA781E14282982C1AD13479B6178D28
-1CAA541FD3F4316F4FF81C53496DCDF5F86E0D7C870FFCD85B36C936B1E08D78
-CEF3823546BE4329B97EFA4E2880AF3361C0DD67F77C8BA6F1CE3822B7FBE567
-064ED0477949BDA06483F8DD04F891473C8FBF73A61F7C06B20FB8B5F0BF4B77
-1429190979A4BDB29D77E94D5FB486A93B8B61DBC84AE06B4E06CBDA3A942043
-9F9926F541DDE4E9B7306FD7A9FF7917C89D789205E574FA14895D289BC54C91
-EEF6697B45C81A07425589FF1A1EEE5481ACA674E621EF4FEFFDC25B93A76EA1
-2208D45389F863C7BDFD9BAB5F587C21254053FC6E1CB4C43BBADDA2740DAD85
-E278111292B85004B4980AAF9E27817FD8663E324CEA7EADABBC00A49FDC52ED
-E7DCE1652C7C22879519BB81D60EDF9327B2032D4252E6E4D12B7D35C9CC66C2
-791B827A451F31B4CC3C7F6D3F50F902F03265FAF92A1E586D32562E1346F043
-A8B57B7CCFFCC538E578AF5B8FCAA2E48CC48E4AFFC1B61D44C25A910688DAAE
-6D97511B2046183579756C1FC993461279BE30ABA487AD353B58E5C9247A405B
-FDC64A496B1E7B31E429A889A3B4F50A9454FFD1203E89ECE10E4CA98790E180
-426BC3D6A30015F2F8C1DF007E8F5389D537C4462C206207BF8C35953EB2009A
-9BDCD1331A8ACFBAEFEBA85109CD6C816F85B11E1F8EBC22B9E230B19E224B38
-0DACF1701BE6B001364000D97712248CFA7C1F29CDCECE7C6EE0F1E0917C9B1C
-CE257D760AE3CFEE834CD90E36E987886D2065F9E54B58842CB8A63B26A03CC3
-9A239CF1299CF3B11DE75C71DCF4EF14DFC034CAA1C53FE1FE84C17F5AA65B58
-887508A7CBA57605AF71564771849D435270B13AF75C0C7EBD272B51B9CD8165
-6ADB63289C18799ED0E9A11A6B99C6DE506A74F458D09B8FA9772D95264BFA06
-32C06E00C60C4A6CF4911681E3EBECBE23D44F63F8EF9BD6E1A00337E6BC2B9E
-65426659D3329585711C2B44F69D307ED9FD7809B13B2324847336F69C16134B
-60B6D3DA7A0D79951834D6225EA94C32ED8D61846A11B95DBB309FF115DCC31D
-102E7C57194E82B8B2D9E4770758AECEED369C1E41EBF7A51FDEA1C4E2E6E9B8
-5506F242B5E06B34E62D3B21C680439F14B5439AB4A4A5C5321A7EB4D73C7365
-86551E8E149EB6DF8FA73BB24F43DBB70CFB986ED0197B8C1CC209396870FC0F
-7A97FA9A2039327DE29EAB7C29D37F0F2B84C680B70D165C74271798355349A3
-DF56B7B52349B60F18E51D6D4FAF885FAB78B9E3CE97304F349D695A1E194DCA
-125CFE820A4C78E445FC3EB30A5864506ABF619BB246EFE98694F23E35AFE6B2
-CB8FCD779CF78DEFA733B1EF526B0EA5D23BDEFACCFA487CCEC90948D99BAEBE
-63E61312123277BC64C4F4AD478CA5AD2ADA911457B67BBE6D2911E760286FC8
-EB3F99DAC78F087BD54EF09FC289809C8D0ED6DA153722A8899250E1A4425ACF
-6A409D4CC1A0F7796611BBAAA984FA4799BD1AB39C664CF2AFD39C4DBCE9FF0A
-512CCC12ED9521F6248C31813AED9FAE15EA9BB0ED16518FE690BB108BC0495D
-D4BD1A7920B3BF3B2D410F6CDE03465B4D9702EA3C4D2B04FED4D2C3C056EA8D
-42A781E24BC1E131E43DCBB9CFDEAFCB8924A05312DB863148BBD66A665FC4EF
-801A8F8953B3AAA28AB616E009D0D91B15BB7D703740803097901D83D9EA53CD
-8BAF27A0C0EFE4C4B41CCD202C2D74E8D59B3745F88073C399CD994D2787FC4E
-41100ED8A5DF5F3F026B9E97C8AE235718F926A5F029E86229E2737CE5A352E4
-07C5E2AF2444D0A5E4BE4AA8118885D8A10F9F9FEF04CA7A3D858B98F8C2F844
-6AF77E315C733F8F39253D8845E0EC93FC0A51459B0424DC229AEC7C566F673F
-359D382EB48F7F57B038B40DFB84E8F631092C155FC9148FEDA067BA06E34774
-332678FA9B7248112B72E144E89CABCB891837E8104B7FBF8D73BFA21174935B
-70D1061B86D8EF295F05690DFDE11EFD19A72ECA2D03E441744CC9AE817E7D81
-FD321A79158392EAD7AD655CFFC5B3CD73AF01DFC4646FD5F9A0D38FBC890602
-0BC3DFA976F1E08EBE8C26FDD7406A704B0D12201CB63D02E8F67255318DFB2D
-BD8F3764CF300E6529DE8DF03BA91F49E9AC9183B9EE327F84B3C58D46C346D3
-903FFD441E89A468EACC18B62F5B510C05517D7DFF6331AD1564E2574B73F21D
-E9D2E9051A10E58D91EEB4EEC46AC2D6C65CB5C232DC10E9C9DE6FEFBEAF8248
-CDCC305658C9EE2D797E5DF1568ED497FA557ECB2586E90895DB67844580E06B
-4835406051756DD4A1F9B07650FA07729C5C6AA0FC59B6B1F6B2A9C827851B7C
-C0CBDCFC3A9E82E6E3A7459C83766C41950227AADF61D59AE7F60B252BB213D2
-F382379F209892E756052A01F4E44D5D218EBF04DCC5A558A3ED81F563DEB0D3
-233CDC1B47AE6796ACB2E0902A3278379EFB7132E81E5DBD6D720EAE2A35391C
-0C65A9D453A1FD2AA5D3EE828CD3F7D3C389987507DDCD18732CDC5206AAA7C9
-51FB079D4EF3C98C1DBDF81D9E509F3701CEC6A72399F51C588C9938F5AD59F9
-F3D828550FA39AACF71D530F43492668AB62986155E8980D514D26BB8404C930
-68685812BD7F60CBB33FC12E7D7244D573976FB495BEA68D0DA56F29F58C8F34
-421DA3A7CEBBE56F31D3174DD5DC2DA8948E5D0D071CB712F7F263E67D577C71
-00F24408C03E93328F8BA571CD37FB4276A94D6A1C94EF32BF4CEA6857F6ACE5
-C68062E7287DB8D7B451D9E7C6FD0B0CCDC5E91939BF5074ACCDDF95AFB9003F
-86EC54AA537C66C63DCA8B5E2E9C41D7F2F4BBD6A14E8643E676C90D717A81F0
-8C42ADC28B09155F8A112BD922EA25263CC9ECAD151150B14936F6BA1A3E0524
-9EFFF0C1CEEA0346F9069B6E32664906DE63B814E007E599EB44C51E93A83379
-8F621A09A1D47EFAF25A809549146FABFAD85B2BABC00309C378E42E2272C780
-A9A931FBF1AEDC7EE5A7A2836988D71D295A553FBA9DE73423BEA8DC9F4B88B4
-DCEBC7B547A1DD076C1CEA0F2C1DD630BB7EFE7E25BB538C3EC2ECD3564962AE
-7592CBC48C6980F2C67884C580D1342AB8091BB04538E2EE2899ED9FB3B39DBC
-52B6B5C74803F6DFD75C26F79FE52EB4E89328E8DC3EA8835682904E6653BD32
-C532CE68695793DA9F40141476D0CB01AFF5518B5EEB69FA36EA43662E46570F
-8E3E3DB13F4DCE7B6B41016931EBD6BAF54539566326476AEB9F28E9FA739A43
-00C14B7117D7F96047E5473AC31984F7CDA2EA93931D969B34DE352523477C44
-7561BE75424B5052AC9145645735EAEF4D2ED99DD1B90CE9D76DF2C78C9019FF
-8BD1DE5B026BA5A1A8F3B2ED1583C745453190A08A11EFE0A31B37BA7775F3AC
-DE280A5742794A4F51EFEFFA92A00AC3A7DB1F4561EE1952DF0CAE5DA8194EAB
-B424E62A55847138A4F70DBD045BA473C794C0AE9342D3EE6ECB1F85A45C9370
-9AE60B8127577A1646A33C85AE36BD9DFE5CD47FED29A5A0B7290334F96350AC
-83EA879A52974A6B0F36AD2E2D55B4D5F32AA3D479AB8086E67C345E38C67CE7
-C99237E0A58C864E279D3EE49393A9D98312C67CC3D4038B481A704FE1E1F2DB
-6FF997D32B7267138D5C48F672F495C2CA7EA2BF90C1DCB4B0D05B3A80FD0FEF
-4BD7CFE74ADD96DA091F8445322D5E7A8D38214E765EBDB20BF7FE405B8DFB1C
-1F1901AE9DE20733840832CBE8AB5803679B746C0E87468C57F1193E7E3565C8
-1C4034EB0CE9020C3B25E4F5BCB5F95D8CC0463E3E3F0EA1E0035A568ED0A842
-FA68FD08DF0431C69698A515688A22CC8D18505261A55BA0C3EAD252CC14CE70
-7EF861D171E5BB339A916E34244A707B338D83ED10AF04D01B8421AA49FACF0E
-3101FF8BC28BE995CC2455C81A4EBFE93DC1E795026B016E1E30660C5D639EAE
-C3DE894876F44A17FD6DDD2930D4AA80112EE068D57A9135763F52DC6A9FAB61
-FF13C69AB939784C84F14F5D05FC73E2A42986EB0B512F7E937247DDC94C1EB5
-07019C773C153F5F11EC2FEC245355E2ECC936854523DE27433DDB4EF43247D7
-FB83591AE1D693FD0FB36DDDF79F98EEDB5CD05A4E51BA576166378F2EA2C286
-7831B7AE43CEDF3A673D79A02198D674121E982FFEA282B484F001CBDFB9751C
-863571824B896FCE6376866E300CFE73C530FC34A308A561635613A58E5803FC
-22E6581249AFC8FD324970F557E9494192D475DE84676616580CF54216A57F7E
-678453A03EDA0CB6328156C662D3C421D4C8C754E678EE08F7FB08D3C60083B7
-A8B0944178293FE2CC836A8E6C2D44916840F3AE260FAB4DEDFD22B21175A902
-E7AD30469701F5E6ED97DC54898A706F8252A8165C80F069238296AE2713BE74
-2EEED9385C6D6BC5DFF5BF1DA15F2AD374E6AF8DAFB637153F3A4D7E6BA31100
-BEC9C750E8D7018BF34A24D36B089D3715BA57AA239586B924F3ED204BAC594C
-E3EECE4F20F3A686CB7E58BF81BAE2FC54A741A62A6E69D000F65560AEE11AA4
-E0F6401C9C931091084105F26E93B07E8092FBA882981EE91314C2F1994321D1
-9A1000B7C8B86D41E1B14503FDBE5F3841E2A8126DC601AFB44EBA359AB5D1C3
-3322A43D78D2ACB2F8075B82ED45759B520634A923122607334E28ECC917382A
-6B880F17B96BADCEC1BB3DFC03A4EB562B1B226D642C56DC932FF1F5EE0B4FD9
-31BDA0E522E700254671C31554B3389989B894AC20282FC43490180A51BC2300
-A0101D5BE646DBF758BE980EDFFEB0162780FAC44C64DBEF7041FBC8D7775BC6
-160C9B355AAEA5B68037C158111F7B15E3C03114BD0C63365FBD8F64D2AF3836
-0CE0F4F8598489583E547C1BC6DED69033453B74E4894809B1920590D6BCEE0D
-72981CD228C4690DD6DCE7E3155850452EA82172A746B7A8B0B225ACD647C667
-8F1F1E4A65483790045A04AC45434CE9BD3108BF1D294B1D7FE70A8E44AD241F
-0F4ADEAEC203BF55B30F2B3CE92EE2186F9665B581A1513D5F56C2FE9B0B54ED
-6CA1E375854E54B3FCA768D7E15C75F4CC2B9325B1EE1A5B220FFB317C6A9004
-6A27FF3A01092378CBDAEB0858461358D348D4E402C1DD47537479BDA0DBAEF5
-35AFE7F1BF7B03A96FAA60B237C72FC2C3FD8A76E4BC77271C9545D22EBE0D82
-943F871ABCF54814C72EED4CA64F5536562FD15D95B86D102647DF14C0DCFABD
-184B46ADA3850112A97AA11956E6B458FCF67F7BE6CF891920073DC1C27F9CC5
-E83016FF6DBEA0E5789B07F9057CACF9B3912B82C7F739E1D8E3FFF84A0B7F5A
-C86B7A07B4B6CD53A15728C3F35D5A9BA0101E514D7D3BFBFC8891EF1591229F
-ED0E065A981127F819F7389B02D9FEC6792E6FBCF7F231E950BEC5D7BB218C92
-5A845FAE27D50A5A566080927871608111FA32825DF4F69E444F5BC3FE70622A
-A48044D9DC7E7138B810E566ED42E6130233B9CDDDB25F3D0BC0B23428C9912E
-A60A2C5D18B1CA97C27E32AD76D449305C7DF370B5A8D23E4EC14E36AAE4035B
-B33EC54A7F7703275AE9FE3BB20B9F893F831A37E3341DEB2B3BFE9308CDE12C
-C8AA48CD8F2B4F9A8CF991A26F0394DC4803A00F38C95533A52DCD60F3873679
-7C40226A9DE6F657177D12E0B074941B9250585E5DC274494561E277AF40ACAC
-537D7A5713D7F29A8E0A523F07BEF15FA77C8A32170207F47A83AC2DF90009FA
-D2BE9B660ACC1F4D93E35D978164D79190017DD2814E89162BAD5D08C936A8C3
-DF71157C707BE7F6F89821A1FCDE773492332B77F1387DC016D8E097777FDB42
-71DA85F0985C33DE19F74435671DF8E8B39C6199D742787AA044268D20DCFED6
-D93A5A4F9A61A57404CBBFEF09F903C5FFE4699B215FCD82B4DE58DADD8CB1F5
-F9BF1373B46891013342D1922F530EBCB77A27B709CC2272CD515E7414BA9920
-EFDE9B6A8370420692596FCD77108C6D6C52EE732893EBB7133ED3AE573440BB
-9371F3F91F8933D08D881E86F59585C06A81A36FEA9EB77F3DA227D165162448
-EADFE5A310D2B433EEA5DCAA0ABC3EA326C593E382F9FFA51AD9C8AB8456C4E3
-E0055683BF721DA2F61EBF8F80AF8898D45D654643AB01E5E66877C0E4998A66
-63A11289D6844E6507F199F28A4CAE836A6E980F260DC0BF01D16E4431FA4F3D
-9AA3688C73CC869B3B2940F29816224E63672D57C5BEA23A33BF2E3725C5D999
-1760C2FCEEDC0256546E635D71270F32BF692A586E155F2005EEEB280C6E0A8A
-C9EE5243C4E3F72625C91A52AAEB2B2579DA65686616C171B7C5D3787CC00B80
-3613F57146655447EE4383B0209FB621B3A852498CBD4E44BF41BB0F40FEE91D
-D12576D37BFA78B11B2F6B688284533D4D62683897CE47074DD18D397C53EDE8
-F01C67A3F887B31F5D62AA0AB8ECB17B725C535AC65C0B3B42E2E72ADF24D2AC
-CF0FBE8F8B6FCFFC7DD742E5FEB4C4B26B4FDAB64509B1384D2ED4CBEC344F82
-EB24565F98BC17CCBC0AF6C53AFD3FE56BB844CFC2A91F41238601D4F92E74AD
-6890CC9C457A3C91A5E27BE25AEDED2808A909FFB0695C09BA90B78ED3916B8F
-B03AC06EA299CAA9F02B209D0E089F03A733F43467F209B1BD82B3780AAAF533
-DAABD765C58C2EF6A4A407D74525294E344532AAAED7CAD4F0B3D6F613785041
-D9D1AC4ABDA4DA7DB3690C18B485D0A3231586ABFA036376198719B0032ED153
-2BC51A787A0BF84B0CCBA3B3CE000AC64965CE4126596171D9B0247B16AFD919
-6A1BC3F5F3A3C5AE63B255CBFF18D2F7B08E3F00DA74928184BE4873AA0FB462
-A2DB6A38E8EE898C650DF5B616854336830359ED766CFBD4340C963B35B6C089
-6CC781BEA636191CD88EEDF9786CE101024AC1FAB4527389B9220DB65454351D
-C5A0E5E4AE9E9733AE81C4C1CA600467308B125DE1A57E929E2C7FD9A32D07A2
-916333730C82924980F28A250E3B6C9698F94779A2CDFFD74524385526A16726
-7551F56EAF95321B373AA0EC8BB2804D2FB2CB0552C30FB49B5B4BEA47B46B23
-A4A1A15CF20E6C26972F41B915B64EB1709B423784B256A452EA141D761D3202
-8C8B4F93637EC0F8F0A006B43FBE51EE7B803561D5A44A4CB710A301A1F2D67D
-D26A6A5AB0CB99777B87508DF73C630785170CA1C7407C82E48F2703A13BEA32
-18867CE753BB4A00142161A719894E952ED5A7A829E59B8AE4A5D8281B73FF3F
-0463BF3EEB22E08C918AE241693D3BF9C6113C91911B0BBA830CE43123DBCA42
-152576AF0C2891F2EF4A960896D06ABA7C76708F19A06177B815961CA623EB03
-D3E9713B0146E777F06E798B6F308AC9CE04E3EA51566318D42B6663C2944F41
-EA6FFA84413CADB4CC71F9A38B2A19E99A1FD168B3A1E90260C9CCEDE49C6953
-222AD8242157F4B7912EF29873EB8F33966D37C37C35097DD319D072C4390404
-87783C7DBD0F3E45FED47CC1F46BB3CE76B3AD77F10A6DD6C197670958D3AB5D
-E524F094ABC2F5BFE5E18668B46498B3089937DF128F84F4E76D1EF5B5CFF4D1
-27833019DFAB3DF42CE58374415166FDB515BD437A7D79E2C8949F42E7B838A6
-E6A48B6C6A9B626BC7D08D5F7C0D86DE17BA70025EAE7A6821D4C4478DADE190
-E5D2A7D3E8875D3AEB39625B52437F6E407A3224CD39D1B2A1D6F3B1D699045E
-A43C4908C4E17CC4D658E5A83ED189248B7697EAAB76125F9BF07F5F6193C932
-4C8CC04E9492C421F852925937E7AEE77148F8195D65ECC727E2C47B25DE95F4
-33DF42237EF6BBFFBDB24FD315D67173212FA7CF46E002DBEC83B8FDB4DB934B
-37DA41679645AD8F9338C330F41E9A1988C9CA7176C117B845282F4C3659F684
-AD38574C1B365F09ABFE8BA991C2E2887328595D6DFFD8ED8BAB65240C984E66
-97CA8F27BB60DCC3330D5D2AFF930B6A2C34E68E0EEFFE15D0B7214928CC0567
-6E80525D559EADBB97B348D3ADE86B54BA2F288CD080351B700D24BDD0B9338A
-9CA2FE492B5F2A64C312D7F6622373BD8DA16E98A8BED9F20D998103A864CF48
-A998CA03E9DF935432B5FBCC67A55753ACB54DB5EC66CDABC74FBDADE6AC9D0C
-BA8487EC99E5CC3C7275C9BABD227E398114C295583FB0319A3A2B6CBB35D1E7
-1BD4011121AC5FF9825697845EAC94DAD20C69505C8E8A9E76E229BEC530AC56
-5846C55839E42BFDAB0E2F300B50E14569249EF10479346E71F7EAC14C94A876
-C9ED6CDA2168F77D9D5298AF2EC5CD7A2DB3A17FBFDFA5047DB9D140137682C3
-AA488393E41981BF6D31FF6BD31000BB75B90818A74E604D9B2975F49FCBBB05
-44AB0B831EC44E490DE7B6729EB6769F02EA0D7D2C44EA5D49C992A123E8DE77
-47C62C78ED11D1E72C8A3BE10EAEC44688925EA33E8F0F98C8EF669889D563CA
-DEA428EBE8B70831B5FD5027DF0C2B41CB8E5F32B87BA139A9CA0360C777829E
-5336D83CF2BD078948D8BC4399D82EDF1A31828CBA5B2732B33117032A0172C1
-202830FBE8BCA62EB2F81CF6D1A5DDD1E4F83DD5DDE863AB99E81B2408D25D23
-06936521C34AE1DCE47977DD442E49B695D6DB51914BDFBB5521EA8A029E34B6
-B5873AB2E3FFBBB6C17FA91E4009773BA25A7DF6C98E84B93CCBDB965EDDF273
-C3640571896AFCCDCBA1639AFEC0BF3635B07A099B0D1C7A870962EFA1593F30
-8234A0D459F895468CF0515FA9EC4863E7CBDA36D96BCC95B58003E98B1C4D31
-159EAB47EEDFBFF5C11CC024E31F33C2587F533CB536730ABE560567C44F6510
-0A4EC71E5A6EAF54CA17607155BBF7826B1DEAE1BEB13BE2BD5DAA55F1F864EC
-8ECC9B262935CCFB07A7186A17D230DD5F0C797F0EF0137D8F93516D1590E0F1
-BB846CA217CA9E53430B208C653E8339D2F646707B5157E5DED3F388323A9E53
-FF4506420E5F61220007B1D580D8C1CFE67604D41878C45B5A7347B0E7AA095F
-AD7CD8CEB493E2C0A334758518AB2FDA6BD7CC154DCB4F186DD805660B9413B0
-302B90B2098CE09912944AAB80F02BB82FDB54BD5681F859C4812BCF7BEF6386
-3AA10A9DD7ADBBBB828A91B55A02D7EEB6E10A2B8746EC70FD9DD6FF32F7E501
-F568B85C3B35B63BFAFCEDC860F8AD9D1EB58E2359BE4FBEEA5C47219C106C9E
-91CFE749950365E5A75D0C0F265509338651EE124FC189A503886DE0A525BDDF
-F08F43A752E61B65FB79DB74D438C122A1F345F44CC0819505C5424B4812F0D1
-DCFBC29E6F71455329E0913E50755ACBAC66E0C5D03A1AFDEA8BF46F7A5E718F
-EE46284BB9C9D2EDBC7B94B94669D0C093C36C76F9CE74BF7E9BB5D917885590
-BE46A81AD67F6C67075444F012EBF4CA3D29786661211C12C3382AEF5B1D7DEE
-04CFC9FF0C684753BD7AC3E330AE2C7816F7455BF775ADF3CA37A1692B3B6B26
-30E0E35F03B52AF682F9B51CC2D3B30AFF066A8DEDE9A1ED6E8E13BA7999757A
-3E151B6BA055167E699BFEFBDA4EF755FDB4F4DA364FC2AD30F594E796254951
-56710CEDB64B589FD68FB2A8308F76BF44E067163637FFFD99A53BE0E12494C4
-91DAAE5CD14F66DF2676712648D992167189539EBAF168B498FF6DED41E0C2C3
-CFF85FFE0B6D054A8BF8AF20CDEA6BD6ECC584685AAA3B5EFB8F67ECCB766CC4
-3AE511C45C0C7F80827AAC1F878F967ACD4CC42FA68F53C7CB4A3AEB360D2665
-C62838C3CC99F6789435F9C4A63240AAD27C1124180CBD24E288E794B8BA9EF4
-2DB81E9608FEDD31EB1E62BA62CD46B5141018E42D9D1ABE9B549B0116563969
-B6001EF0D3FD723248102048F3BAF997112A3C7BC4CCA3C2BFD8AA94778AA5AB
-C13E48E6AEB602A9C26F0C5E9E718194CFA99A205585E126A854D750D5D6B5A9
-6D7EAEC86C750E0D79ED8C1C9044CECC3F83F3B8393A0AAB6386CE31819E4A24
-32029FC427C5E4639C634384067C9B9A88D557D19BCDC3EF8A21F45479F65F8F
-686299BB7B14A0D6960ADC2C4C5A1CB3FC8AC5EF13020FA618165524D005A788
-6DDF3A07371151BDC667027769F67B17250DC5120ABC34090FA4F4B1E9EA7C4D
-A0B56F33FD78F01DBE1570D3923BE0C4986319405F0FF17812247FA989815CF0
-0EABBC692F69D8CFDF1054A8D2C7D7A7C0E4BB302D64419A78CBC409E9B2A9BC
-E6B9E1ABCD4B5A15AB95AF89C7A1E95154AC2E98C2DEE7F53A32C3066CC36B96
-B27AA6F81A490C28D34B54F045636BD77FE8749BD190303313054AD3EFF98E77
-D257920CDA69876ED7A04347E6DE0F15C2135D8B9C87F69867C6BA3E1FA2CF63
-19B53C521DBD9905CCBDBCF44DAAA32212C5EBE2E2201428CAEEA1F75F5B051F
-01662BCE23E6FE97A80955E786309F2F799143BC40E3108CC05C0A6DD12CAA3B
-05AB0F8F246E8C00DC70C725F96117A3A8FEA4AF704ADBAFF613445A5E616BAD
-0EB0756DB7DFA55D680A4CB0042975B2A7D7E89552A4CC345F7578061B3FD3C3
-A0E082906EA1F9F9933E028638715F54B78C098065734BBB7E9670D583B18976
-038E01C5CDD817D8B4E44FAB6546A65BCD3364D2A2340AC806FC6438959EA3AB
-FAF2ACDA73CD645CB3DC4D7515F6592DF6C6ABCC71E49F903EF39420F069E7A5
-B619C472EFF0F7EC411F78A9FB1946C5010DA3AACFE46EB09085A779E52C464F
-8CB8E454E567A70346FDB71ACF79682870472C10B70DCEB7599B00E3F5FD679A
-90D628751EE62B1C93C7B4CA0651818882B300797B7DBE726CC3DA8148C776D5
-5BA39C49757C089C3596BCC6A97BD6E754C41B0C3E2C4E572BE54470BEB3F8D9
-0BFFE2B062748E356BFAD08D086D3301B8CDF722D5872548DFD8910CB631DD90
-090E272EA6CF3D88E50502405C08EA2749C27E58EED2FEDC7C6447FA2A40AB48
-03CA0C2ED4B0754A637A2BD5EFFC753C6CC616D322000CC3DC803CCD759E3FA9
-D3DF1CEE305BF8762898A2340A2124C1B5CFF69B5624E8286ECC4CEFA0C603DB
-16820055001382FB1F3EB1C07DE6C237F052C17ED0B4B6CF54133A272218B42E
-D0C071E07CBCDDD2D252ADC9C1C662156D9BB3EB3AC03D0DA88A7A9B801CF726
-5218F59FA52136746B6797DC054F8BB54DF3D92791C5C56BA2FC684EB5090986
-80CAB8D615920D2476D7F1F3BB3D620D15A3599D44DC76A96A5A5B8040AF0FE0
-61511F85796D371F33B4FAA4C682EEA185BBF957134B7EE70E07E386C5036413
-40781C4036B1EAE0DF1359FCA7DD2E4B3DA19B28297B8400D014D94BA6B9A4B9
-33C4A26615F770F7DCF39056F36315163687876253F6C7819CEC1AB35062BD4E
-3F0D2B420811B2C5DDC451726BFF18F5EC6F6DF0F4AFA304A1608386FBCDF243
-CADB792F3DCC642216B18E85624E8D273D888F90FBB871A0C6EE9C6D7C573F7A
-2C6CA7AE3D8E2F52F5E59246F0AF82C4175899BAB8F24ED954233E1823E4F33B
-5E8D3928B44D790F43D63B7884C1150FB6E72BCDBD02CDE81A75E071B5A05086
-F73095870B2192E0F5DA207315E814D973D1EDD78C66DC6D56175623E4BE1A62
-E113E91F0783FD6D0A5115C476E24A21F0819749EC64C55B9295232B112DD58C
-60293DABC481BA63DF63DE9DAC180E94302FB67501B98909205F3294DF0196EA
-2FA1FCB89A0B1D74F46C82D5CBF9DBFD3E98B4929F6B475343FA673B1CF0C56A
-76B903A679DE31AB98ADBAC2D08457DB8C21868169DA055E93C004BFE13160BC
-68B161ADD4B078BEA7B2FFAB6DADEFC3273D393B81F11B19D68EB69B524C4C69
-2D09F057CB99896335595E587976B8DABD67D0654D
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR12
-%!PS-AdobeFont-1.1: CMR12 1.0
-%%CreationDate: 1991 Aug 20 16:38:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-34 -251 988 750}readonly def
-/UniqueID 5000794 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E
-59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28
-51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23
-DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A
-AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F
-45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31
-821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE
-96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D
-9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379
-26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4
-140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213
-1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498
-1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB
-377D3061A20B1EB98796B8607EECBC699445EAA866C38E00420B0477533ADB13
-FC3B396C065B09769DAF0871076FB7FD0DC228CF3EE115446C7159B03F19BC6B
-8FDA91BAF28AD303E26F885EE238874B11FEE84C47AF37E871AB5A85B043190E
-E860B6443C43E27EA122F1E49241CA0D3B9F12495B0944DAB562A85D084312AC
-8A5FB7C4DADB70C8D6CB46D3A904810C8A2370F4DB0B95DE9F7CC2A3A3010A92
-CEC7D33F2EBC1ECEDA19CBB9A1B6B585AD17F92473794BDBDEAF6039C28138E3
-D86BFE8DA8607817AEE030753FCE8C7825450B44B1C8CFA47A5B7C5FD7BBA1B3
-9F2E6475558A93B2BA98D8A09E430B4AF3FDDBFF3780EA6F8934946F0C140677
-36129999765DB3EEAD50A9361CF7A62E7BEBB3E889E89C09E8858F16A5A1AEB4
-91547A9E9191A65547D1B5FAE6100779D077A421B10CA20543B1E314D48367A6
-986F72C7B0EFE220717357CF77A8DE4271D549EBFFF1A60BE9199FFB749A343F
-369CE00831FA4E14E251A63CFCB4CBDF460637B87FFDFF96D61143AD64F74C15
-D3275EE8E5FB9A15FFAE606EAD14EC2FD84A0241FF15AD17CA67931B0DE62AFD
-61DC67421FD0F33CC74663B31151B15A360D1CF66C81376739CDCF5033AAF1ED
-B31EB57DB41565B9351AD93D3FCF7A8FD6A0AD93A2AB02782E69D734D46DB3A8
-16AFDE40A7065C78318E97972CEF0B2A4894C7A69F36CFF3FAE5A1747F33E5DD
-60643D4B739C4F21768A58C4646915280FCD2ACE94B8DFA746424F44C1CB6CB7
-53824FAAF6104AE366DA71F1F3877D11873EE186F14C07AEDC343075F3244FE3
-617112401897CF83AB90EA239C92E6A9E7576CD2B197B549EEA3E567ADDE8696
-C08CAA8F28EE6BB0200E2F9F47933096EF4B5501E475640F98A3A60C457789A2
-4523AC41AA94C1ED307218981BD438A1F2002EF99C26C442775812BB91C22F9E
-C0BCDB1A45629C6D211B7360D9B38EC36EF3786566BD442A5FEB82319A510ADF
-F5B6677673075625BCB1904B9893608610A5062680C2480BE4B8D019A3BF9637
-07CD13A4C76D2D24995BEB4A36D2E8C8BE4620C543B9DA56E9C6A251F78BE52F
-D30234C3D77AAC9AC84C32E52D2B17F3F83239C20F31E01D7C00EA7FFA7C235D
-19E3FA0E1D3E8BD969C18DBA194BEEB35030DFB56A5194A7C22C19DE9F24520F
-1F392E4477948386B0392FBB26983604ABF42E941016963436CEDAD3D6C0F84D
-A7EF79BDA85628324ADB51DF1C56868E615C20B044AC98EBCFB11BA68BDE1FCE
-29F4A3B52F8D03D246523D3654D260BDB3B4D5130B225B85B6C59CD896BB0B02
-2796D085A19115D28014868E1D27B76C80B212AF99AD1DF4C91F0797EC9362ED
-01A5297AF7C7B2BB7475A5FFCE8C2773056B0CBB4F4DFA5F9AD9BC04EADF8FB4
-5E14F7D11D4F132065682CA1CB4B3C7B244C4BBD0A6DF919400040E98B37559F
-CB7BCD587B5E9A5ACE99F1598E77C47060C021882F6CDC951E48D07EE13915F3
-AFDD3B8DE365EC99E0130DA3951A3973932CA5BA07953B121F4ED5961C396347
-357767A10C75917BE815BBDD8A2C62F28CDCE980A70D577481ED07A93C4A8846
-95F3CC1370978DE7FF1462B5A6B640F575060F82F0DB86E40D022F40F0F72B2B
-4C172C10E1997F0242E6FE4499E619EA5C64D935E3299A0058781465B11F06FD
-70415603CC8430F57192A8911D38C68E1A9A081E2F91E731110EAC208D288824
-7AD1C9C1A8F9EF44A8C94FEF88197C9051D53160C34D8B887D66C329A71A1B9E
-50953535592DD191AA1C3F468E906BCBDBD441D96B611A45972341671377A6DA
-203E165A80FD021FF198A0805ACE8D306E91E5C3BBEEE93D38F6E69F05581240
-3A7E0881BC7C7AF28E839A5D6A11331F835FFB88A60105EFA343F878C9D2EE3A
-1BF097F88C99AEA7B96D6D04E0FCC80CD09BB8EA5694AF5D2F2685CC311BD952
-750398103CB0D3F495615DC6A783EB100DD5DAFFE327A178563D0E957BBABB3F
-A063A84D36CF9D0EF8C3F1C3A50E1627A55EFBA1CDFC2F7CF6B1D1C35E0D247F
-90A67162D3670A036C555C7D2D1E9B68C579C1310816CA82132A32534DBF3951
-C7B568D21240AD08521DAC285B9695CAFB9C6286BCA4360044A0BD00395FC620
-F9C7637090ECB691F99F80365604B628C233B37B312955A5D765120ADC65934E
-414823DF5B00B1934F5D8C84C336255DC8B11FDD0ACBFDEF963168124DF804F0
-13572E484B95D4A584E80F9831E9888B8E31ADBC427D09A54927D37CAFF5A982
-6E6604D161F07317946AED3BA78C5050A895ED237C03DC6F2B82A6D5EFA5541E
-B5CF3CDC1226FDC9BFB291CE9817C724D13B3485618D29D2C0AE9F68431910DA
-3460EE4586DC29E46674B2124F6C84FBF0A6B022B89433E5DAF73793EEE1EE3B
-339077B6DB5D9020F5552746996AF3DB2FF789968329775D6B2754EE9D3CB11B
-A9C44B45D0AF772CD041AF2E4D9D528B313F34A66537826D2D7C20E1FAE25D19
-3E56EC362FAF639D3B77848CD98255D5BAD543101E03F4604B9EC135FB985D06
-047F7691187A18E5A2A48ECB2A35F477E8DFEB31E414C920F86E8DA6551CCD29
-07B5D0E0A514961094B30DCD7F42A2C1BEEC12FE7B6355DB040E11A660D6B5D9
-E4DA3FF7030F9FA1983C5AA93BAB3FCF63892D76D39819BB9120C25102E62CC2
-6D68DF3B29ED924D4ED269A8BE67B76BEEABDF8BFC86F10CCEE6F30C79C7BEFA
-D6B99B8091D519E8E4D8206501A78BE930248EB6DA69A88FE7E7D27C29474B71
-185EBB5EBAA9C61D36824070ED7E084C96AEF6DF56BB50B9B7E40A0B3A69F965
-4A767BB92FF108BBEF85FA3558C30924F7D373683F5959E496B6CFBBA29DE98D
-526261FFE01C512DE6CF5619F3EC6560E0EDC7DFB8091F493FBD9614BDDED545
-5F4611CC3859E441AB68E2362277282203364F5D563EB0F83A87B0FCEE9DC20A
-CAA0290881C8348F8CECFB07D9E3F1F396FAE05030EF8004579BE14381C08A06
-08A00FCC409BA57BFFC3C112391416289C6C884CFB13DBD74DCAC1DB035D38FF
-ACF2C127A2A447FA8D15E8E6D2FB3A72DFCE4C1A5778458C739E37816EC53460
-F10FE7C51795A44E11A431713BE03DFF8A32D6D6DF482AF94D6BD8AFF8607257
-0F0E1B725F81A2B99A2AE559A8D02E8181E10E4F5F33479281EF2AC5A7AEA418
-385E1513A62589F9A7A379ACF9AD7E4ABC3C2880402AC9BC100B3CD29434A400
-F621EB805D8E5FCEE8731FD1BDAAAE4050C295466CEE03922A1A33354C99D02C
-6EE73EE9A1187149A02558200ED7DD918EAD46757B6A41D8461C67F02E8ABABC
-BF0E4131DC0FF6F0A90DB058B05696AC2FF26D0157884025066E659BBA18A04E
-559E46EC4ED2F4AE1F4A0D99CA1327F90E684F92FC4C0664CC5FC221417E238E
-F110115525DE2F223CF2A5221943DA96A5906EE2DD559B75BFD8715EDA3B51BB
-1E21ECBCD034FD2D92B87095E52DB35F0B4AEF4AA9D43FCE25A5F6ED84A990C5
-5CA01BD84007A6274D1800192CAC865126AE840A4C63699863AA05556A4FCB8D
-C3C4001727ACB6359217D2169B035A56519BB0611220231461B16BBAB6535CC5
-5229E74E33A926EE6E1B3B8E8E25E6D3150DF8C5958DB5BAD188AFA9909483A5
-03FDCE589CFE5B4A1C39BF0B8D7087A1C7EDD05A4D83FCA6F299D7241AD41523
-CAD0857FC5071E8778A913383576DC1014DA5687AAEA934F8287DBCF6575063D
-7C5E81F654AF528AC4602B36B394E68CA916CB4E8CBD1B71130D6D85B9812C60
-4A9253635B8A221EBB3270B4206E4CD0C63E69C4DC492673C8A4E7177B157A7B
-174C2F2435D4BD5FA717EE46FBF8872EBF5023F9020C4F452F2CB37515AF91CE
-2AE60F7807EBBB83BFAD4C0CD8E5711C56427CAC6BA6F29D738140AA1E8CEBC5
-053C646AEABBA1D01749BD4C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-%%BeginFont: CMR17
-%!PS-AdobeFont-1.1: CMR17 1.0
-%%CreationDate: 1991 Aug 20 16:38:24
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR17) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR17 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/FontBBox{-33 -250 945 749}readonly def
-/UniqueID 5000795 def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F075EA0A10A15B0ED05D5039DA41B32B16E95
-A3CE9725A429B35BAD796912FC328E3A28F96FCADA20A598E247755E7E7FF801
-BDB00E9B9B086BDBE6EDCF841A3EAFC6F5284FED3C634085BA4EE0FC6A026E96
-96D55575481B007BF93CA452EE3F71D83FAAB3D9DEDD2A8F96C5840EAE5BE5DC
-9322E81DFF5E250DEB386E12A49FC9FBF9B4C25C3283F3CEA74B8278A1B09DA7
-E9AE4FBAAF23EDF5A3E07D39385D521547C3AAAB8EB70549756EBA8EF445AF4A
-497CA924ACCC3DD5456F8E2C7E36946A5BF14E2E959895F7C94F49137256BE46
-4A238684D52792234869EAE1A6D8ADF4E138B79472D2A90A6CA99E2394CC20CD
-3841733046175B20CEBE372327BF13428EED6A3E2FDF84C2DBA4B0AD584EE9DF
-B51828D3B8F385846158C29C9AC3496CB9692DD10219697B2ED4D425C3957FD8
-C4600D76E045C561216EF05D38177243C314877A69A1C22E3BEC611A2EE5A216
-9B7C264CF6D1839DBBD78A40610F2C0D7C2FE09FFA9822FF55035AD52546970F
-83EED2D30EABB1F303091EBC11A5379B12BB3F405E371519A53EA9D66174ED25
-A2E55463EC71A97BE4C04B39E68112956117C8252DB6FB14AB64534B4BCD568B
-246DB833982B38CDE7268BBF74B6B0C18091E1B1F87D32D66F4DD023D1F10D2A
-7736A960F72AC01F733A11023832CD68FB6288A5977743F6F3F23E0C1657CF5D
-E8374835BDBD2DED3690C84A1EBB8E2383A5E49E610B6F5F0F5F5EC43CFD16FF
-24FEEFB92425CCB577E17FDE4EA6C50E1448DC5726A21888E25B6D6B52DA3D3C
-E4C4C6A73C176DFEB60B6B6191B336AC4F5BAA123E1B3B6FAE4B3FA9DC8F7E39
-335277EF2294315BE95F64EBDB1F393B293FD0FDB9DEE6C89082232013130D28
-9234FF12DF47D454558A1EE8603B2832772E5CA07D18B34A4763D5B890F7173F
-B8F6470B2BB92BA41AF521B112F2CA2BFA2CE30BB510C2855E98D39EF436AEFA
-A2C75E13F452E7EAFF5D31D61135B8328720C77161F81BC1F1679DEF9A49DA23
-97CEC1E5527D743ECB1E3EC829DAFE7C5501ED01F16C410DAD2B8D38B4918954
-C2960F21335076C6E9019C993C027C95C86558BBE86938A2B1863FC3D74A309F
-B561819949153EE30430E32E6D7A1C33319957696FFA5EBBA95EBBF14CB06538
-E524A78C55AFED2D3F21AE4B30DA4AE725EE3287130B30581EB399C0FA37F69A
-1ECC07B87067CB41EAD2A717490A413734C42B5396BE07C5B40FFDB31ED24C1B
-96EC2547B4F38A6163F7C00644F85F68C14EA7CD2C4DA2274382C575484F30B1
-E7B9618C78FBA2F343836DB53812A53107878071A5EB084D0FC3166B2F09403A
-A69F4A3A9E2CA8CA4CCAA69D6D49DA30C03F1D2F8FEF33CC0AF6C7537280FF06
-F3388D498D1823723168B9122707A6F6CC15A9223A66D73363CD28E88C5AF247
-4F72DDE6F49C907259605977F6D6806320B4DC6E0C9F987B8B6599DAFCD30EB8
-7C8CECD1C627E5FE18F45634C5467F675A7E9A771DECE093900422AD704FC2D5
-9F138AD9E79C9D49B7683CADE9EEB8E720D281D616FF985DBE5087E19179616D
-BE3DD38A08A6D35351FDACDEACAA086C66576F908A1F30591AD4BDF0291C3BAE
-312B32817CFB7121746BB0E7DCAC178CEFBD1ADF839F94BD92FEA13B2398B0F1
-A35391825765A596C6FEC491A0D1E9A1DB0FA129792BA705113FEECC39CCCFDF
-2ABE2E50442920228216530A6F455A015FC2DF5AF8803354C412F031187367D6
-15E73F222B69EA11725E481384B83357F187E6ADB8A5BD01CA9BCBA9F8F067BC
-C950C510B2B30E013DB35E952BFA07A63B1E6D698B35FED3DC05C3AAD19EDC36
-B24DEC3FF944C84285F2777912B87A7476DE924969C950D01AFFDD3178257C22
-E3BC95CFCAAC0038BC3AC7ED34DD34A84C2FDCEEEFAC14B1524B3B4C511B45BC
-C09D128B23DDBF366B64936FE57E7994E7F7179D3D978C082D9966E59C3B3AD5
-7D9788307A4F347827C3E337C27B0757449831683AF0CB0E4208D2320AE7DDBA
-60567F301870F35EB6B4E1ECE7F0F0995BB320795DCD51B51E67D6407F62AE86
-D8EB5633C774CCD734E233E33BD4AD2D44F2A154B7BC7647A3BB0BB5325698C1
-763BA4FDCC4BF877F4982A34C0C4479A142B5382D326413B1DA123D0E63BCDD1
-40A316437FD08A37C4E539411003F9D8EA28DABE21A9DF3F8A5DDF4FE8C6B368
-A3592F00BC19CF09B71F46B2F19343E9315AD5F016481A3BB7BA711512A4DF11
-B44B4129CA553D1959346A451FDB955572D14590ADF3E5229917B5C1667465A7
-D858CC72A228B83E2559D79959F9464129861E731A1433017884B5B2BA5164D9
-ABB72C9CF390593E9CACBF27F97DDCDDFFC4DFEBAA98A8E569CF58AECED5CAEF
-C1ADE621DD1F80AEAE56EBC126F2BB3F6A359408D9E68801236704356C8C19E1
-EA6C6B1491C1D40EA0AF309A5CFCA24366662E87D7FBD89452DD13EA1A8FA0AD
-CDA19E6FE272A1E980ED50E642A2F519606025EC41E9581419A7E87E1043714A
-EAA3A9D3AEC073D2DA0EECCEC207E5DB0B46E27324B1F3ED2B1A383043848A4E
-BD9BCF168BFD4BADEC3F0E79C72D59FF24426E502EB09A58E28E889D033B53BA
-215D2166854D375120444BA4EF33B1B8F8064E4BD84E12534CE651D078CD3BB4
-8E6C06DB5FBCD37FD2AB91D62C538395E795F546B63ADD840D044E9165756B97
-7BF8F91446A1072F60306832BFBEAF6C72C0B1401FC46B5D772F7881EAEB73B9
-CEC461027575D1C267F7EFBDE5E3C384D32BECC4B3B6EFD30A9E7B36A6246632
-843FFDC09C3E0957832FA22FDE31E4F49AA473CF98D454B04952047E206426EF
-2EF33BCCAA5F596CAB8E4B7902602D912F29AFC9A34863FCD1E0DC4122BAE1C7
-80E6351ECC95A730E552AA8B2E814F2D8A310862EF47
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont 
-TeXDict begin 39158280 55380996 1000 600 600 (README.dvi)
-@start /Fa 139[51 1[51 2[51 111[{ TeX09fbbfacEncoding ReEncodeFont }3
-99.6264 /CMTT12 rf /Fb 182[36 4[69 5[65 1[65 37[50 22[{
- TeXaae443f0Encoding ReEncodeFont }5 83.022 /CMMI10 rf
-/Fc 145[42 3[23 2[42 42 86[42 15[{ TeXbbad153fEncoding ReEncodeFont }5
-83.022 /CMSY10 rf /Fd 134[40 39 55 38 45 28 34 35 38
-42 42 47 68 21 38 25 25 42 38 1[38 42 38 38 42 6[51 62
-62 83 4[61 2[64 62 4[32 4[63 59 58 62 6[25 11[25 46[{
- TeX74afc74cEncoding ReEncodeFont }38 83.022 /CMTI10
-rf /Fe 135[35 3[35 35 35 1[35 1[35 35 35 2[35 35 35 1[35
-35 35 35 35 8[35 3[35 35 35 3[35 35 35 35 1[35 4[35 1[35
-35 35 8[35 1[35 2[35 35 35 35 35 4[35 35 40[{
- TeX09fbbfacEncoding ReEncodeFont }38 66.4176 /CMTT8
-rf /Ff 139[24 29 13[33 36 1[33 36 97[{
- TeX74afc74cEncoding ReEncodeFont }6 66.4176 /CMTI8 rf
-/Fg 134[37 37 51 37 39 27 28 28 1[39 35 39 59 20 37 22
-20 39 35 22 31 39 31 39 35 3[20 35 20 6[51 39 52 1[48
-55 53 4[25 2[46 48 54 51 50 53 6[20 35 35 1[35 35 35
-35 1[35 2[20 24 20 9[35 20 20[39 12[{ TeXf7b6d320Encoding ReEncodeFont }
-54 66.4176 /CMR8 rf /Fh 202[30 30 30 30 30 49[{
- TeXf7b6d320Encoding ReEncodeFont }5 49.8132 /CMR6 rf
-/Fi 202[33 33 33 33 33 49[{ TeXf7b6d320Encoding ReEncodeFont }5
-58.1154 /CMR7 rf /Fj 134[59 59 81 59 62 44 44 46 1[62
-56 62 93 31 59 1[31 62 56 34 51 62 50 62 54 8[85 116
-85 86 78 62 84 84 77 84 88 106 67 88 1[42 88 88 70 74
-86 81 80 85 7[56 56 56 56 56 56 56 56 56 56 56 31 37
-31 31[62 65 11[{ TeXf7b6d320Encoding ReEncodeFont }62
-99.6264 /CMBX12 rf /Fk 133[60 71 71 97 71 75 52 53 55
-1[75 67 75 112 37 71 1[37 75 67 41 61 75 60 75 65 8[102
-139 102 103 94 75 100 101 92 101 105 128 81 2[50 105
-106 85 88 103 97 96 102 7[67 67 67 67 67 67 67 67 67
-67 67 37 1[37 31[75 12[{ TeXf7b6d320Encoding ReEncodeFont }60
-119.552 /CMBX12 rf /Fl 139[75 1[79 1[108 7[108 2[88 3[94
-29[140 9[97 97 97 97 97 97 97 97 97 97 48[{
- TeXf7b6d320Encoding ReEncodeFont }17 172.188 /CMBX12
-rf /Fm 129[44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 33[{ TeX09fbbfacEncoding ReEncodeFont }94
-83.022 /CMTT10 rf /Fn 132[42 37 44 44 60 44 46 32 33
-33 44 46 42 46 69 23 44 25 23 46 42 25 37 46 37 46 42
-3[23 42 23 1[62 62 85 62 62 60 46 61 65 57 65 62 76 52
-65 43 30 62 65 54 57 63 60 59 62 65 39 1[65 1[23 23 42
-42 42 42 42 42 42 42 42 42 42 23 28 23 1[42 32 32 23
-4[42 8[42 10[69 46 46 48 11[{ TeXf7b6d320Encoding ReEncodeFont }84
-83.022 /CMR10 rf /Fo 132[48 1[50 1[69 50 53 37 38 39
-1[53 48 53 80 27 2[27 53 48 29 44 53 42 53 46 9[99 2[66
-53 72 1[65 72 1[91 57 75 1[36 1[75 60 1[73 69 68 72 6[27
-48 48 48 48 48 48 48 48 48 48 48 1[32 27 31[53 12[{
- TeXf7b6d320Encoding ReEncodeFont }53 83.022 /CMBX10
-rf /Fp 134[123 123 168 123 129 90 92 95 1[129 116 129
-194 65 2[65 129 116 71 106 129 103 129 113 12[162 129
-173 1[159 175 1[220 140 2[87 2[146 1[178 168 165 175
-15[116 3[77 65 31[129 12[{ TeXf7b6d320Encoding ReEncodeFont }39
-206.559 /CMBX12 rf /Fq 138[54 1[38 4[54 81 27 6[43 3[49
-22[50 6[70 1[73 7[49 6[49 1[49 3[27 18[49 25[{
- TeXf7b6d320Encoding ReEncodeFont }15 99.6264 /CMR12
-rf /Fr 154[58 16[96 1[98 4[122 7[90 101 2[99 15[66 49[{
- TeXf7b6d320Encoding ReEncodeFont }8 143.462 /CMR17 rf
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 1353 2306 a Fr(MeT)-11 b(A1)43
-b(README)1574 2842 y Fq(Claus)33 b(A\031mann)1621 3131
-y(June)g(2,)g(2009)p eop end
-%%Page: 1 2
-TeXDict begin 1 1 bop 0 1241 a Fp(Con)-6 b(ten)g(ts)0
-1809 y Fo(1)77 b(In)m(tro)s(duction)32 b(to)f(MeT)-8
-b(A1)2620 b(6)125 1962 y Fn(1.1)83 b(MeT)-7 b(A1)28 b(is)f(a)h(Message)
-e(T)-7 b(ransfer)26 b(Agen)n(t)63 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)143 b(6)315 2116 y(1.1.1)94 b(Main)28
-b(Comp)r(onen)n(ts)f(of)g(MeT)-7 b(A1)60 b(.)41 b(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)143 b(6)125 2269 y(1.2)83 b(Do)r(cumen)n
-(tation)53 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)143 b(7)315 2422
-y(1.2.1)94 b(T)n(yp)r(ographical)26 b(Con)n(v)n(en)n(tions)57
-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)143
-b(7)125 2575 y(1.3)83 b(V)-7 b(ersion)82 b(.)42 b(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)143 b(8)125 2729 y(1.4)83 b(Curren)n(t)27
-b(State)44 b(.)e(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)143 b(8)315
-2882 y(1.4.1)94 b(Pro)n(viding)26 b(F)-7 b(eedbac)n(k)82
-b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)143 b(8)125 3035 y(1.5)83 b(F)-7 b(or)27 b(the)h(Impatien)n(t)f(.)42
-b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)143 b(8)0 3271 y Fo(2)77 b(Building,)29
-b(T)-8 b(esting,)31 b(and)h(Installing)f(MeT)-8 b(A1)1912
-b(9)125 3425 y Fn(2.1)83 b(V)-7 b(erifying)28 b(the)g(Source)f(Co)r(de)
-g(Distribution)f(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)143
-b(9)125 3578 y(2.2)83 b(Building)28 b(MeT)-7 b(A1)68
-b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)143 b(9)315 3731 y(2.2.1)94
-b(Compile-Time)27 b(Con\014guration)f(Options)84 b(.)42
-b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(10)125 3884 y(2.3)83
-b(T)-7 b(est)28 b(Programs)76 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(11)315 4038 y(2.3.1)94 b(En)n(vironmen)n(t)26 b(V)-7
-b(ariables)27 b(used)g(b)n(y)h(T)-7 b(est)27 b(Programs)68
-b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)102 b(11)315 4191 y(2.3.2)94 b(Kno)n(wn)27
-b(T)-7 b(est)27 b(Program)e(Problems)34 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)102 b(12)125 4344 y(2.4)83 b(Installing)28
-b(MeT)-7 b(A1)36 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(13)315
-4497 y(2.4.1)94 b(Directories,)27 b(Files,)g(and)h(P)n(ermissions)60
-b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(14)315
-4651 y(2.4.2)94 b(Upgrading)27 b(from)g(earlier)f(MeT)-7
-b(A1)27 b(V)-7 b(ersions)48 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(15)0 4887 y Fo(3)77 b(Run-Time)30 b(Con\014guration)i(of)f(MeT)-8
-b(A1)2075 b(16)125 5040 y Fn(3.1)83 b(Ov)n(erview)75
-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(16)125
-5193 y(3.2)83 b(Con\014guration)27 b(File)g(Syn)n(tax)54
-b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)102 b(16)315 5347 y(3.2.1)94 b(Con\014guration)26
-b(File)i(V)-7 b(alues)62 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)102 b(17)125 5500 y(3.3)83 b(Example)27
-b(Con\014guration)f(File)54 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(17)1869 5768 y(1)p
-eop end
-%%Page: 2 3
-TeXDict begin 2 2 bop 125 523 a Fn(3.4)83 b(Common)28
-b(Global)f(Con\014guration)67 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)102 b(18)125 676 y(3.5)83 b(Common)28
-b(Con\014guration)e(Options)c(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)102 b(18)125 830 y(3.6)83 b(P)n(athnames)27
-b(for)g(Files,)h(Directories,)e(and)h(Maps)66 b(.)41
-b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(19)125 983 y(3.7)83
-b(Con\014guration)27 b(for)g(MCP)21 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(19)125 1136 y(3.8)83 b(Con\014guration)27 b(for)g(QMGR)76
-b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)102 b(21)315 1289 y(3.8.1)94 b(Con\014guration)26
-b(Map)i(for)f(QMGR)71 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-102 b(23)125 1443 y(3.9)83 b(Con\014guration)27 b(for)g(SMAR)34
-b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)102 b(24)315 1596 y(3.9.1)94 b(Declaring)27
-b(Maps)g(for)g(SMAR)85 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)102 b(24)315 1749 y(3.9.2)94 b(Con\014guration)26
-b(Options)h(for)g(SMAR)36 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-102 b(24)315 1902 y(3.9.3)94 b(Con\014guration)26 b(Maps)h(for)g(SMAR)
-61 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(27)315 2055 y(3.9.4)94 b(Greylisting)72 b(.)41 b(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(31)125 2209 y(3.10)41 b(Con\014guration)27 b(for)g(SMTP)g(Serv)n(er)
-43 b(.)e(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(32)315 2362 y(3.10.1)52 b(SMTP)28 b(Serv)n(er)e(Session)h
-(Con\014guration)69 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(36)315 2515 y(3.10.2)52 b(Multiple)29 b(SMTP)e(Serv)n(ers)f(with)i
-(di\013eren)n(t)g(Con\014gurations)20 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(36)315 2668
-y(3.10.3)52 b(Protecting)26 b(Recipien)n(ts)80 b(.)42
-b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(37)125 2822 y(3.11)41 b(Con\014guration)27 b(for)g(SMTP)g(Clien)n(t)
-52 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(38)315 2975 y(3.11.1)52 b(SMTP)28 b(Clien)n(t)f(Session/Recipien)n(t)
-g(Con\014guration)82 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(38)125 3128
-y(3.12)41 b(Lo)r(okup)27 b(Orders)62 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(38)315 3281 y(3.12.1)52 b(Lo)r(okup)27 b(Orders)f(in)i(Maps)57
-b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(38)315 3435 y(3.12.2)52 b(Lo)r(okup)27 b(Orders)f(for)h(An)n(ti-Spam)
-h(Measures)48 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(39)315
-3588 y(3.12.3)52 b(Macro)26 b(Replacemen)n(ts)h(in)h(RHS)72
-b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(41)125 3741 y(3.13)41 b(ST)-7 b(AR)g(TTLS)29 b(Restrictions)39
-b(.)i(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)102 b(41)125 3894 y(3.14)41 b(VERP)50 b(.)41
-b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(42)0
-4131 y Fo(4)77 b(Running)30 b(MeT)-8 b(A1)2857 b(43)125
-4284 y Fn(4.1)83 b(Starting)28 b(MeT)-7 b(A1)80 b(.)42
-b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)102 b(43)125 4437 y(4.2)83 b(Using)28
-b(MeT)-7 b(A1)27 b(only)h(for)f(Outgoing)f(Mail)80 b(.)42
-b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(43)125
-4590 y(4.3)83 b(Using)28 b(MeT)-7 b(A1)27 b(for)g(Incoming)h(Mail)70
-b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(44)315 4744 y(4.3.1)94 b(Lo)r(cal)27 b(Deliv)n(ery)g(and)g(Sp)r
-(ecifying)h(Lo)r(cal)f(Domains)43 b(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(44)315
-4897 y(4.3.2)94 b(Sp)r(ecifying)28 b(V)-7 b(alid)28 b(Lo)r(cal)f
-(Addresses)47 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(44)125 5050 y(4.4)83 b(Using)28 b(MeT)-7 b(A1)27 b(as)g(Gatew)n(a)n
-(y)46 b(.)c(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)102 b(45)125 5203 y(4.5)83 b(Using)28 b(MeT)-7
-b(A1)27 b(as)g(Bac)n(kup)g(MX)h(Serv)n(er)59 b(.)41 b(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(45)315 5357 y(4.5.1)94
-b(Note)28 b(ab)r(out)f(Bac)n(kup)g(MX)h(Serv)n(ers)19
-b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(45)125
-5510 y(4.6)83 b(Miscellaneous)27 b(Programs)57 b(.)41
-b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)102 b(46)1869 5768 y(2)p eop end
-%%Page: 3 4
-TeXDict begin 3 3 bop 315 523 a Fn(4.6.1)94 b(Do)28 b(not)f(run)h
-(programs)d(as)i Fm(root)f Fn(User)45 b(.)d(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)102 b(46)315 676 y(4.6.2)94 b(Displa)n(ying)27 b(Con)n(ten)n(t)g
-(of)h(Mail)f(Queues)34 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(46)315 830 y(4.6.3)94 b(In)n(teracting)27 b(with)h(QMGR)44
-b(.)d(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(46)125 983 y(4.7)83 b(Reloading)27 b(Maps)d(.)41 b(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)102 b(46)125 1136 y(4.8)83 b(Logging)62 b(.)42 b(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)102 b(46)315 1289 y(4.8.1)94 b(Log\014le)27
-b(Rotation)78 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)102 b(47)125 1443 y(4.9)83 b(Regular)27
-b(Chec)n(ks)44 b(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(47)125
-1596 y(4.10)41 b(Dealing)28 b(with)g(Errors)79 b(.)42
-b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)102 b(48)315 1749 y(4.10.1)52 b(Resource)27
-b(Problems)38 b(.)k(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)102 b(48)315 1902 y(4.10.2)52 b(Database)27
-b(Problems)g(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)102 b(48)315 2055 y(4.10.3)52 b(W)-7
-b(riting)28 b(Core)e(Dumps)36 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(49)125 2209 y(4.11)41
-b(Replacemen)n(ts)28 b(for)f(F)-7 b(eatures)27 b(a)n(v)-5
-b(ailable)26 b(in)i(other)f(MT)-7 b(As)35 b(.)42 b(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(49)0 2445 y Fo(5)77 b(P)m(olicy)32 b(Milter)3006 b(50)125
-2598 y Fn(5.1)83 b(P)n(olicy)27 b(Milter)g(Ov)n(erview)e(.)42
-b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)102 b(50)125 2751 y(5.2)83 b(Nativ)n(e)28 b(P)n(olicy)e(Milter)
-i(API)80 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)102 b(50)315 2905 y(5.2.1)94 b(Data)28
-b(Structures)20 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(50)315 3058 y(5.2.2)94
-b(Start)28 b(and)f(Stop)62 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(51)315
-3211 y(5.2.3)94 b(New)28 b(SMTP)f(Serv)n(er)50 b(.)42
-b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-102 b(51)315 3364 y(5.2.4)94 b(SMTP)28 b(Session)e(and)i(T)-7
-b(ransaction)39 b(.)j(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(52)315 3518 y(5.2.5)94 b(Set)28 b(and)g(Get)g(pmilter)f(Con)n(texts)
-38 b(.)j(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(53)315 3671 y(5.2.6)94 b(Accessing)27 b(MT)-7 b(A)28
-b(Sym)n(b)r(ols)e(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)102 b(54)315 3824 y(5.2.7)94 b(Sender)28 b(Mo)r
-(di\014cation)66 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)102 b(55)315 3977 y(5.2.8)94 b(Recipien)n(t)28
-b(Mo)r(di\014cations)67 b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)102 b(55)315 4131 y(5.2.9)94 b(Header)27
-b(Mo)r(di\014cations)22 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(56)315 4284 y(5.2.10)52
-b(Message)26 b(Replacemen)n(t)69 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(56)315 4437 y(5.2.11)52
-b(F)-7 b(urther)28 b(Capabilities)64 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(56)315
-4590 y(5.2.12)52 b(Miscellaneous)27 b(F)-7 b(unctions)48
-b(.)41 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(57)315 4744 y(5.2.13)52 b(Return)28 b(V)-7 b(alues)83
-b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)102 b(58)315 4897 y(5.2.14)52 b(Implemen)n(tation)28
-b(Notes)54 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)102 b(58)125 5050 y(5.3)83 b(P)n(olicy)27 b(Milter)g(Examples)
-80 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)102 b(58)315 5203 y(5.3.1)94 b(Compiling)27
-b(P)n(olicy)g(Milters)80 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)102 b(59)0 5440 y Fo(6)77 b(Miscellaneous)2981
-b(60)1869 5768 y Fn(3)p eop end
-%%Page: 4 5
-TeXDict begin 4 4 bop 125 523 a Fn(6.1)83 b(T)-7 b(roublesho)r(oting)22
-b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(60)315 676 y(6.1.1)94
-b(Startup)28 b(Problems)22 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(60)315 830
-y(6.1.2)94 b(Log\014le)27 b(En)n(tries)74 b(.)42 b(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(60)125 983 y(6.2)83 b(Ca)n(v)n(eats)65 b(.)42 b(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)102 b(61)125 1136 y(6.3)83 b(Chec)n(ks)27
-b(in)h(SMTP)g(Serv)n(er)59 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(61)315 1289
-y(6.3.1)94 b(Strict)28 b(RF)n(C)g(Compliance)68 b(.)41
-b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(61)315 1443 y(6.3.2)94 b(V)-7 b(arious)27 b(Chec)n(ks)46
-b(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)102 b(61)125 1596 y(6.4)83 b(Securit)n(y)28
-b(Chec)n(ks)j(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(62)125
-1749 y(6.5)83 b(Restrictions)49 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-102 b(62)125 1902 y(6.6)83 b(Co)r(de)28 b(Review,)f(Enhancemen)n(ts,)g
-(P)n(atc)n(hes)66 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(62)125 2055 y(6.7)83 b(P)n(orting)78 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)102 b(62)125 2209 y(6.8)83 b(V)-7 b(ersion)27
-b(Naming)j(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(63)315
-2362 y(6.8.1)94 b(Snapshots)42 b(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(63)0 2598 y Fo(7)77 b(Data)33 b(Flo)m(w)e(in)g(MeT)-8
-b(A1)2668 b(64)125 2751 y Fn(7.1)83 b(Data)28 b(Flo)n(w)f(in)h(MeT)-7
-b(A1)25 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)
-h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(64)0 2988 y Fo(8)77
-b(Adv)-5 b(anced)32 b(Con\014guration)g(Options)2185
-b(66)125 3141 y Fn(8.1)83 b(Ov)n(erview)75 b(.)42 b(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)102 b(66)315 3294 y(8.1.1)94 b(Flags)21
-b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(66)125 3447
-y(8.2)83 b(Adv)-5 b(anced)28 b(Con\014guration)e(for)h(MCP)f(.)42
-b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(66)125 3601 y(8.3)83 b(Adv)-5 b(anced)28 b(Con\014guration)e(for)h
-(QMGR)82 b(.)41 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(67)125 3754 y(8.4)83 b(Adv)-5 b(anced)28 b(Con\014guration)e(for)h
-(SMAR)39 b(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(68)125 3907 y(8.5)83 b(Adv)-5 b(anced)28 b(Con\014guration)e(for)h
-(SMTP)h(Serv)n(er)47 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(68)125 4060 y(8.6)83 b(Adv)-5 b(anced)28 b(Con\014guration)e(for)h
-(SMTP)h(Clien)n(t)56 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(69)0 4297 y Fo(9)77 b(T)-8 b(uning)3267 b(70)125 4450
-y Fn(9.1)83 b(Size)28 b(of)g(Queues,)f(Cac)n(hes,)f(and)i(Databases)35
-b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(70)125
-4603 y(9.2)83 b(Disk)28 b(I/O)23 b(.)42 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)102 b(70)125 4756 y(9.3)83 b(Pro)r(cesses)26
-b(and)h(Threads)40 b(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(71)0 4993 y Fo(10)29
-b(F)-8 b(ormat)32 b(Sp)s(eci\014cations)2659 b(72)125
-5146 y Fn(10.1)41 b(So)r(c)n(k)n(et)27 b(Map)54 b(.)41
-b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(72)125 5299 y(10.2)41
-b(F)-7 b(ormat)27 b(of)h(Session/T)-7 b(ransaction)25
-b(Iden)n(ti\014ers)74 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(73)125 5452 y(10.3)41 b(Log\014le)27 b(F)-7 b(ormat)76
-b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(73)1869 5768 y(4)p
-eop end
-%%Page: 5 6
-TeXDict begin 5 5 bop 125 523 a Fn(10.4)41 b(F)-7 b(ormat)27
-b(of)h(Receiv)n(ed)f(Header)71 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(74)125 676 y(10.5)41
-b(F)-7 b(ormat)27 b(of)h(DSNs)83 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h
-(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)
-f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(75)0 913 y Fo(11)29 b(Setup)i(for)h(ST)-8 b(AR)g(TTLS)2651
-b(76)125 1066 y Fn(11.1)41 b(Certi\014cates)27 b(for)g(ST)-7
-b(AR)g(TTLS)63 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)102 b(76)0 1302 y Fo(12)29 b(More)i(Ab)s(out)g
-(Con\014guration,)g(Compilation,)f(Debugging,)g(and)i(T)-8
-b(esting)812 b(77)125 1455 y Fn(12.1)41 b(Compile)28
-b(Time)g(Options)36 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(77)315 1609
-y(12.1.1)52 b(Generic)66 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(77)315 1762 y(12.1.2)52 b(QMGR)77 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(77)315 1915 y(12.1.3)52 b(SMAR)34 b(.)42 b(.)f(.)h(.)f(.)h(.)g(.)f(.)
-h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)
-102 b(77)315 2068 y(12.1.4)52 b(SMTPS)59 b(.)41 b(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)102 b(78)315 2222 y(12.1.5)52 b(Debugging)27 b(Compile)h(Time)f
-(Options)67 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)
-f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(78)125 2375 y(12.2)41 b(P)n(ossible)27 b(Compilation)g(Problems)f(or)
-g(W)-7 b(arnings)39 b(.)i(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h
-(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102
-b(79)125 2528 y(12.3)41 b(More)27 b(Ab)r(out)h(T)-7 b(est)28
-b(Programs)55 b(.)41 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)g(.)f(.)102 b(79)315 2681 y(12.3.1)52 b(More)27
-b(En)n(vironmen)n(t)f(V)-7 b(ariables)27 b(used)g(b)n(y)g(T)-7
-b(est)28 b(Programs)47 b(.)42 b(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)g(.)f(.)102 b(79)315 2835 y(12.3.2)52
-b(Other)27 b(P)n(oten)n(tial)g(Problems)f(with)i(T)-7
-b(est)28 b(Programs)78 b(.)42 b(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)g
-(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)102 b(79)0 3071 y
-Fo(13)29 b(Licenses)3216 b(81)1869 5768 y Fn(5)p eop
-end
-%%Page: 6 7
-TeXDict begin 6 6 bop 0 1199 a Fl(Chapter)65 b(1)0 1668
-y Fp(In)-6 b(tro)6 b(duction)78 b(to)g(MeT)-19 b(A1)0
-2203 y Fk(1.1)135 b(MeT)-11 b(A1)44 b(is)i(a)f(Message)h(T)-11
-b(ransfer)44 b(Agen)l(t)0 2439 y Fn(This)22 b(distribution)g(con)n
-(tains)f(the)h(source)f(co)r(de)h(for)f(MeT)-7 b(A1)22
-b(whic)n(h)g(implemen)n(ts)g(a)g(message)e(transfer)h(agen)n(t)g(\(MT)
--7 b(A\).)0 2538 y(It)35 b(supp)r(orts)f(the)g(Simple)h(Mail)g(T)-7
-b(ransfer)33 b(Proto)r(col)f(\(SMTP\))j(as)f(sp)r(eci\014ed)g(b)n(y)h
-(RF)n(C)f(2821)e([Kle01)o(])j(and)f(v)-5 b(arious)0 2638
-y(extensions,)30 b(e.g.,)h(ST)-7 b(AR)g(TTLS)31 b([Hof99)o(],)h(A)n
-(UTH)e([My)n(e99)o(],)h(PIPELINING)f([F)-7 b(re00)o(],)31
-b(as)e(w)n(ell)i(as)e(other)h(proto)r(cols,)0 2738 y(e.g.,)d(LMTP)g
-([My)n(e96)o(].)0 2891 y(MeT)-7 b(A1)38 b(is)f(in)n(tended)h(to)g(b)r
-(e)g(used)g(as)f(a)g(secure)g(and)g(e\016cien)n(t)h(mail)g(gatew)n(a)n
-(y)-7 b(.)65 b(It)38 b(do)r(es)g(not)f(pro)n(vide)g(an)n(y)g(mail)0
-2990 y(con)n(ten)n(t)i(mo)r(di\014cation)h(capabilities,)j(e.g.,)f
-(masquerading)c(of)i(addresses)e(or)h(c)n(hanging)g(\(addition,)k(remo)
-n(v)-5 b(al\))39 b(of)0 3090 y(headers.)d(Later)27 b(v)n(ersions)e
-(will)j(probably)f(add)g(suc)n(h)g(capabilities.)0 3376
-y Fj(1.1.1)112 b(Main)39 b(Comp)s(onen)m(ts)g(of)e(MeT)-9
-b(A1)0 3583 y Fn(MeT)i(A1)34 b(is)g(a)g(mo)r(dularized)g(message)e
-(transfer)i(agen)n(t)f(consisting)g(of)i(\014v)n(e)e(\(or)h(more\))g(p)
-r(ersisten)n(t)g(pro)r(cesses,)g(four)0 3683 y(of)d(whic)n(h)g(are)f(m)
-n(ulti-threaded.)46 b(A)32 b(cen)n(tral)e(queue)h(manager)e(\(QMGR\))i
-(con)n(trols)f(SMTP)g(serv)n(ers)f(\(SMTPS\))j(and)0
-3782 y(SMTP)h(clien)n(ts)g(\(SMTPC\))g(to)g(receiv)n(e)f(and)h(send)g
-(e-mails,)h(an)f(address)f(resolv)n(er)f(\(SMAR\))j(pro)n(vides)e(lo)r
-(okups)g(in)0 3882 y(v)-5 b(arious)37 b(maps)h(including)g(DNS)h(for)f
-(mail)g(routing,)i(and)e(a)g(main)g(con)n(trol)f(program)f(\(MCP\))i
-(starts)g(the)g(others)0 3981 y(pro)r(cesses)27 b(and)h(w)n(atc)n(hes)g
-(o)n(v)n(er)f(their)h(execution.)40 b(The)28 b(queue)h(manager)e
-(organizes)f(the)j(\015o)n(w)f(of)g(messages)f(through)0
-4081 y(the)k(system)g(and)g(pro)n(vides)f(measures)g(to)h(a)n(v)n(oid)e
-(o)n(v)n(erloading)g(the)i(lo)r(cal)g(or)f(remote)g(systems)h(b)n(y)g
-(implemen)n(ting)g(a)0 4181 y(cen)n(tral)c(con)n(trol)f(instance.)0
-4334 y(More)38 b(information)h(ab)r(out)g(eac)n(h)g(comp)r(onen)n(t)g
-(will)g(b)r(e)h(giv)n(en)e(in)i(the)g(appropriate)d(sections.)72
-b(Complete)39 b(do)r(cu-)0 4434 y(men)n(tation)31 b(and)f(bac)n
-(kground)f(information)h(can)h(b)r(e)g(found)g(in)h([A\031m)n(b)o(].)47
-b(Section)31 b(7.1)f(describ)r(es)g(the)i(data)e(\015o)n(w)g(in)0
-4533 y(MeT)-7 b(A1,)24 b(the)f(follo)n(wing)e(is)i(a)f(brief)h(summary)
--7 b(.)34 b(Figure)22 b(1.1)g(sho)n(ws)g(the)h(in)n(teraction)f(of)g
-(the)h(v)-5 b(arious)22 b(comp)r(onen)n(ts)g(and)0 4633
-y(databases)353 4603 y Fi(1)389 4633 y Fn(.)53 b(Incoming)32
-b(messages)g(are)g(accepted)g(b)n(y)h(an)g(SMTP)g(serv)n(er)e
-(\(SMTPS\))i(whic)n(h)g(stores)f(the)h(messages)0 4732
-y(in)g(the)h(con)n(ten)n(t)e(database)g(\(CDB\).)i(The)f(en)n(v)n(elop)
-r(e)f(information,)h(i.e.,)i(sender)d(and)h(recipien)n(ts,)h(is)e
-(stored)h(b)n(y)f(the)0 4832 y(queue)23 b(manager)e(in)i(an)f(incoming)
-g(queue)h(\(IQDB\))g(and)g(written)g(to)f(disk)h(to)g(the)g(incoming)f
-(queue)h(bac)n(kup)f(database)0 4932 y(\(IBDB\).)33 b(F)-7
-b(or)31 b(a)g(deliv)n(ery)-7 b(,)32 b(the)g(en)n(v)n(elop)r(e)f
-(information)g(m)n(ust)h(b)r(e)h(transferred)d(in)n(to)h(the)i(activ)n
-(e)e(queue)g(\(A)n(Q\).)i(The)0 5031 y(sc)n(heduler)e(in)i(QMGR)f(tak)n
-(es)f(recipien)n(t)h(en)n(v)n(elop)r(es)f(from)g(A)n(Q)h(and)g(creates)
-f(transactions)f(whic)n(h)j(are)e(giv)n(en)g(to)h(an)0
-5131 y(SMTP)24 b(clien)n(t)h(\(SMTPC\))g(for)f(deliv)n(ery)-7
-b(.)35 b(An)26 b(SMTP)e(clien)n(t)h(tak)n(es)f(the)h(transaction)e
-(information)h(and)h(tries)f(to)h(send)0 5231 y(a)32
-b(message)g(whose)g(con)n(ten)n(t)g(is)h(read)f(from)h(CDB.)g(After)g
-(a)f(successful)h(deliv)n(ery)f(attempt)h(a)g(record)e(is)i(written)g
-(to)0 5330 y(IBDB)d(that)g(logs)f(this)h(information.)43
-b(The)30 b(deferred)f(en)n(v)n(elop)r(e)g(database)g(\(DEFEDB\))h(is)g
-(only)f(used)h(if)h(a)e(message)p 0 5404 1512 4 v 92
-5458 a Fh(1)127 5481 y Fg(the)c(term)e Ff(datab)l(ase)i
-Fg(is)e(used)h(lo)r(osely)g(here)1869 5768 y Fn(6)p eop
-end
-%%Page: 7 8
-TeXDict begin 7 7 bop 0 523 a Fn(cannot)27 b(b)r(e)h(deliv)n(ered)f
-(during)g(the)h(\014rst)f(attempt.)354 3473 y @beginspecial
-34 @llx 502 @lly 325 @urx 757 @ury 3401 @rwi @setspecial
-%%BeginDocument: overview1.eps
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 34 502 325 757
-%%Title: overview1
-%%CreationDate: Tue Jul 19 17:20:52 2005
-%%Creator: Tgif-4.1.43-QPL written by William Chia-Wei Cheng (bill.cheng@acm.org)
-%%ProducedBy: (unknown)
-%%Pages: 1
-%%DocumentFonts: (atend)
-%%EndComments
-%%BeginProlog
-
-/tgifdict 55 dict def
-tgifdict begin
-
-/tgifellipsedict 6 dict def
-tgifellipsedict /mtrx matrix put
-
-/TGEL % tgifellipse
- { tgifellipsedict begin
-      /yrad exch def
-      /xrad exch def
-      /y exch def
-      /x exch def
-      /savematrix mtrx currentmatrix def
-      x y translate
-      xrad yrad scale
-      0 0 1 0 360 arc
-      savematrix setmatrix
-   end
- } def
-
-/tgifarrowtipdict 8 dict def
-tgifarrowtipdict /mtrx matrix put
-
-/TGAT % tgifarrowtip
- { tgifarrowtipdict begin
-      /dy exch def
-      /dx exch def
-      /h exch def
-      /w exch def
-      /y exch def
-      /x exch def
-      /savematrix mtrx currentmatrix def
-      x y translate
-      dy dx atan rotate
-      0 0 moveto
-      w neg h lineto
-      w neg h neg lineto
-      savematrix setmatrix
-   end
- } def
-
-/TGMAX
- { exch dup 3 1 roll exch dup 3 1 roll gt { pop } { exch pop } ifelse
- } def
-/TGMIN
- { exch dup 3 1 roll exch dup 3 1 roll lt { pop } { exch pop } ifelse
- } def
-/TGSW { stringwidth pop } def
-
-/bd { bind def } bind def
-
-/GS { gsave } bd
-/GR { grestore } bd
-/NP { newpath } bd
-/CP { closepath } bd
-/CHP { charpath } bd
-/CT { curveto } bd
-/L { lineto } bd
-/RL { rlineto } bd
-/M { moveto } bd
-/RM { rmoveto } bd
-/S { stroke } bd
-/F { fill } bd
-/TR { translate } bd
-/RO { rotate } bd
-/SC { scale } bd
-/MU { mul } bd
-/DI { div } bd
-/DU { dup } bd
-/NE { neg } bd
-/AD { add } bd
-/SU { sub } bd
-/PO { pop } bd
-/EX { exch } bd
-/CO { concat } bd
-/CL { clip } bd
-/EC { eoclip } bd
-/EF { eofill } bd
-/IM { image } bd
-/IMM { imagemask } bd
-/ARY { array } bd
-/SG { setgray } bd
-/RG { setrgbcolor } bd
-/SD { setdash } bd
-/W { setlinewidth } bd
-/SM { setmiterlimit } bd
-/SLC { setlinecap } bd
-/SLJ { setlinejoin } bd
-/SH { show } bd
-/FF { findfont } bd
-/MS { makefont setfont } bd
-/AR { arcto 4 {pop} repeat } bd
-/CURP { currentpoint } bd
-/FLAT { flattenpath strokepath clip newpath } bd
-/TGSM { tgiforigctm setmatrix } def
-/TGRM { savematrix setmatrix } def
-
-end
-
-%%EndProlog
-%%Page: 1 1
-
-%%PageBoundingBox: 34 502 325 757
-tgifdict begin
-/tgifsavedpage save def
-
-1 SM
-1 W
-
-0 SG
-
-72 0 MU 72 11 MU TR
-72 128 DI 100.000 MU 100 DI DU NE SC
-
-GS
-
-/tgiforigctm matrix currentmatrix def
-
-% BOX
-0 SG
-GS
-   10 SM
-   GS
-      NP 64 64 M 576 64 L 576 512 L 64 512 L CP
-      S
-   GR
-GR
-
-% BOX
-0 SG
-GS
-   10 SM
-   GS
-      NP 192 96 M 448 96 L 448 128 L 192 128 L CP
-      S
-   GR
-GR
-
-% BOX
-0 SG
-GS
-   10 SM
-   GS
-      NP 480 192 M 544 192 L 544 224 L 480 224 L CP
-      S
-   GR
-GR
-
-% BOX
-0 SG
-GS
-   10 SM
-   GS
-      NP 96 192 M 160 192 L 160 224 L 96 224 L CP
-      S
-   GR
-GR
-
-% BOX
-0 SG
-GS
-   10 SM
-   GS
-      NP 480 304 M 544 304 L 544 336 L 480 336 L CP
-      S
-   GR
-GR
-
-% BOX
-0 SG
-GS
-   10 SM
-   GS
-      NP 256 192 M 384 192 L 384 320 L 256 320 L CP
-      S
-   GR
-GR
-
-% BOX
-0 SG
-GS
-   10 SM
-   GS
-      NP 224 144 M 288 144 L 288 176 L 224 176 L CP
-      S
-   GR
-GR
-
-% RCBOX
-0 SG
-GS
-   GS
-      NP
-         336 448 M
-         352 448 352 496 16 AR
-         352 480 L
-         352 496 288 496 16 AR
-         304 496 L
-         288 496 288 448 16 AR
-         288 464 L
-         288 448 352 448 16 AR
-      CP
-      S
-   GR
-GR
-
-% RCBOX
-0 SG
-GS
-   GS
-      NP
-         384 336 M
-         400 336 400 368 16 AR
-         400 352 L
-         400 368 320 368 16 AR
-         336 368 L
-         320 368 320 336 16 AR
-         320 352 L
-         320 336 400 336 16 AR
-      CP
-      S
-   GR
-GR
-
-% RCBOX
-0 SG
-GS
-   GS
-      NP
-         288 336 M
-         304 336 304 368 16 AR
-         304 352 L
-         304 368 240 368 16 AR
-         256 368 L
-         240 368 240 336 16 AR
-         240 352 L
-         240 336 304 336 16 AR
-      CP
-      S
-   GR
-GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      112 208 M
-      GS
-            0 SG
-            /Times-Roman FF [14 0 0 -14 0 0] MS
-            (SMTPS) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      240 160 M
-      GS
-            0 SG
-            /Times-Roman FF [14 0 0 -14 0 0] MS
-            (SMAR) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      496 208 M
-      GS
-            0 SG
-            /Courier FF [14 0 0 -14 0 0] MS
-            (SMTPC) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      496 320 M
-      GS
-            0 SG
-            /Courier FF [14 0 0 -14 0 0] MS
-            (LDA) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      272 224 M
-      GS
-            0 SG
-            /Times-Roman FF [14 0 0 -14 0 0] MS
-            (QMGR) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      288 112 M
-      GS
-            0 SG
-            /Courier FF [14 0 0 -14 0 0] MS
-            (MCP) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      336 352 M
-      GS
-            0 SG
-            /Courier FF [14 0 0 -14 0 0] MS
-            (DEFEDB) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      256 352 M
-      GS
-            0 SG
-            /Courier FF [14 0 0 -14 0 0] MS
-            (IBDB) SH
-      GR
-   GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      304 464 M
-      GS
-            0 SG
-            /Courier FF [14 0 0 -14 0 0] MS
-            (CDB) SH
-      GR
-   GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   NP
-      128 224 M
-      256 160 atan DU cos 10.000 MU 288 exch SU
-      exch sin 10.000 MU 480 exch SU L
-   TGSM
-   2 W
-   S
-   1 W
-GR
-GS
-   TGSM
-   NP
-      288 480 10.000 4.000 160 256 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      288 480 10.000 4.000 160 256 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   NP
-      352 464 M
-      -240 144 atan DU cos 10.000 MU 496 exch SU
-      exch sin 10.000 MU 224 exch SU L
-   TGSM
-   2 W
-   S
-   1 W
-GR
-GS
-   TGSM
-   NP
-      496 224 10.000 4.000 144 -240 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      496 224 10.000 4.000 144 -240 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   NP
-      352 480 M
-      -144 160 atan DU cos 10.000 MU 512 exch SU
-      exch sin 10.000 MU 336 exch SU L
-   TGSM
-   2 W
-   S
-   1 W
-GR
-GS
-   TGSM
-   NP
-      512 336 10.000 4.000 160 -144 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      512 336 10.000 4.000 160 -144 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [8 8] 0 SD
-   NP
-      192 128 M
-      64 -48 atan DU cos 8.000 MU 144 exch SU
-      exch sin 8.000 MU 192 exch SU L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-GS
-   TGSM
-   NP
-      144 192 8.000 3.000 -48 64 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      144 192 8.000 3.000 -48 64 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [8 8] 0 SD
-   NP
-      224 128 M
-      16 0 atan DU cos 8.000 MU 224 exch SU
-      exch sin 8.000 MU 144 exch SU L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-GS
-   TGSM
-   NP
-      224 144 8.000 3.000 0 16 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      224 144 8.000 3.000 0 16 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [8 8] 0 SD
-   NP
-      304 128 M
-      64 0 atan DU cos 8.000 MU 304 exch SU
-      exch sin 8.000 MU 192 exch SU L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-GS
-   TGSM
-   NP
-      304 192 8.000 3.000 0 64 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      304 192 8.000 3.000 0 64 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [8 8] 0 SD
-   NP
-      448 128 M
-      64 48 atan DU cos 8.000 MU 496 exch SU
-      exch sin 8.000 MU 192 exch SU L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-GS
-   TGSM
-   NP
-      496 192 8.000 3.000 48 64 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      496 192 8.000 3.000 48 64 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [8 8] 0 SD
-   NP
-      416 128 M
-      176 80 atan DU cos 8.000 MU 496 exch SU
-      exch sin 8.000 MU 304 exch SU L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-GS
-   TGSM
-   NP
-      496 304 8.000 3.000 80 176 TGAT
-   1 SG CP F
-   0 SG
-   NP
-      496 304 8.000 3.000 80 176 TGAT
-   CP F
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   NP
-      272 320 M
-      272 336 L
-   TGSM
-   1 W
-   S
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   NP
-      368 320 M
-      368 336 L
-   TGSM
-   1 W
-   S
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [2 2] 0 SD
-   NP
-      160 208 M
-      256 208 L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [2 2] 0 SD
-   NP
-      384 208 M
-      480 208 L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [2 2] 0 SD
-   NP
-      384 320 M
-      480 320 L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [2 2] 0 SD
-   NP
-      160 192 M
-      224 160 L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-
-% POLY/OPEN-SPLINE
-0 SG
-GS
-   [2 2] 0 SD
-   NP
-      272 176 M
-      272 192 L
-   TGSM
-   1 W
-   S
-   [] 0 SD
-GR
-
-% OVAL
-0 SG
-GS
-   GS
-      NP 288 288 32 16 TGEL
-      [2 2] 0 SD
-      S
-   GR
-GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      272 288 M
-      GS
-            0 SG
-            /NewCenturySchlbk-Roman FF [14 0 0 -14 0 0] MS
-            (IQDB) SH
-      GR
-   GR
-
-% OVAL
-0 SG
-GS
-   GS
-      NP 336 240 32 16 TGEL
-      [2 2] 0 SD
-      S
-   GR
-GR
-
-% TEXT
-NP
-0 SG
-   GS
-      1 W
-      320 240 M
-      GS
-            0 SG
-            /NewCenturySchlbk-Roman FF [14 0 0 -14 0 0] MS
-            (AQ) SH
-      GR
-   GR
-
-GR
-tgifsavedpage restore
-end
-showpage
-
-%%Trailer
-%MatchingCreationDate: Tue Jul 19 17:20:52 2005
-%%DocumentFonts: NewCenturySchlbk-Roman
-%%+ Courier
-%%+ Times-Roman
-%%EOF
-
-%%EndDocument
- @endspecial 1195 3705 a(Figure)g(1.1:)36 b(MeT)-7 b(A1:)36
-b(Ov)n(erall)26 b(Structure)0 3905 y(This)31 b(v)n(ersion)f(of)i(MeT)-7
-b(A1)31 b(do)r(es)g(not)g(come)g(with)h(a)f(lo)r(cal)g(deliv)n(ery)f
-(agen)n(t)h(nor)f(a)h(mail)h(submission)e(program.)47
-b(See)0 4004 y(Sections)27 b(4.3.1)g(and)g(4.2)g(whic)n(h)g(programs)f
-(can)h(b)r(e)h(used)f(to)h(ac)n(hiev)n(e)e(the)i(desired)f
-(functionalit)n(y)-7 b(.)0 4332 y Fk(1.2)135 b(Do)t(cumen)l(tation)0
-4568 y Fn(The)26 b(do)r(cumen)n(t)g(\\sendmail)f(X:)i(Requiremen)n(ts,)
-e(Arc)n(hitecture,)h(and)g(F)-7 b(unctional)26 b(Sp)r(eci\014cation")f
-([A\031m)n(b])h(pro)n(vides)0 4668 y(the)35 b(bac)n(kground)d(ab)r(out)
-j(the)f(MeT)-7 b(A1)35 b(design,)g(its)g(arc)n(hitecture,)g(as)f(w)n
-(ell)g(as)g(the)g(functional)h(sp)r(eci\014cation,)h(and)0
-4767 y(details)27 b(ab)r(out)h(the)g(implemen)n(tation.)0
-5053 y Fj(1.2.1)112 b(T)m(yp)s(ographical)40 b(Con)m(v)m(en)m(tions)0
-5260 y Fn(In)28 b(this)g(do)r(cumen)n(tation,)f(a)g(command)g(written)h
-(as)0 5496 y Fm($)43 b(command)1869 5768 y Fn(7)p eop
-end
-%%Page: 8 9
-TeXDict begin 8 8 bop 0 523 a Fn(should)27 b(b)r(e)h(executed)g(as)f
-(an)g(unprivileged)g(user.)36 b(Only)28 b(a)f(command)g(written)h(as)0
-759 y Fm(#)43 b(command)0 996 y Fn(should)27 b(b)r(e)h(executed)g(as)f
-(the)h(sup)r(eruser.)0 1149 y(If)h(a)f(command)g(con)n(tains)f(comp)r
-(onen)n(ts)h(that)g(need)h(to)f(b)r(e)h(replaced)e(b)n(y)h(v)-5
-b(alues)28 b(that)h(dep)r(end)g(on)f(the)h(en)n(vironmen)n(t)0
-1248 y(or)e(the)h(lo)r(cal)f(con\014guration,)f(then)i(it)g(is)f
-(usually)g(written)h(as)f(a)g(macro,)g(e.g.,)g Fm($LOGFILE)p
-Fn(.)0 1402 y(A)k(n)n(um)n(b)r(er)f(in)g(paren)n(theses)f(b)r(ehind)j
-(a)d(command)h(or)g(function)h(refers)e(to)h(the)h(man)n(ual)f
-(section,)g(e.g.,)h Fm(syslog\(3\))p Fn(,)0 1501 y(as)c(it)h(is)f
-(usual)h(for)f(Unix)h(do)r(cumen)n(ts.)0 1829 y Fk(1.3)135
-b(V)-11 b(ersion)0 2065 y Fn(This)27 b(do)r(cumen)n(t)h(has)f(b)r(een)g
-(written)h(for)f(MeT)-7 b(A1-1.0.PreAlpha29.0,)23 b(see)k(also)g(the)g
-(greeting)f(of)i(the)f(SMTP)g(serv)n(er)0 2165 y(and)g(the)h(v)n
-(ersion)e(output)j(of)e(the)h(main)g(comp)r(onen)n(ts.)36
-b(See)28 b(Section)f(6.8)g(for)g(information)g(ab)r(out)h(v)n(ersion)e
-(naming.)0 2493 y Fk(1.4)135 b(Curren)l(t)46 b(State)0
-2728 y Fn(There)28 b(are)f(still)i(some)f(error)f(conditions)h(whic)n
-(h)g(ma)n(y)g(not)h(b)r(e)f(handled)h(gracefully)-7 b(,)28
-b(i.e.,)h(in)f(case)g(of)g(some)g(resource)0 2828 y(problems)g(\(e.g.,)
-h(out)f(of)h(memory)e(or)h(out)h(of)f(disk)g(space\))h(the)f(system)h
-(ma)n(y)f(ab)r(ort;)g(ho)n(w)n(ev)n(er,)f(this)i(is)f(common)g(for)0
-2927 y(most)g(op)r(en)h(source)f(MT)-7 b(As)28 b(whic)n(h)h(simply)g
-(ab)r(ort)f(if)h(they)g(are)e(running)i(out)f(of)h(memory)-7
-b(.)39 b(See)29 b(Section)f(4.10.1)f(ho)n(w)0 3027 y(to)f(deal)g(with)h
-(those)f(conditions.)36 b(The)27 b(soft)n(w)n(are)d(is)j(running)f
-(since)g(2004-01-01)c(as)k(MT)-7 b(A)26 b(on)h(the)f(main)h(mac)n(hine)
-f(of)0 3127 y(the)i(author)f(without)h(an)n(y)f(signi\014can)n(t)f
-(problem,)i(i.e.,)f(it)h(nev)n(er)f(lost)g(an)n(y)g(mail.)0
-3413 y Fj(1.4.1)112 b(Pro)m(viding)38 b(F)-9 b(eedbac)m(k)0
-3620 y Fn(Please)32 b(rep)r(ort)g(bugs)g(and)h(pro)n(vide)f(feedbac)n
-(k)g(either)h(to)f(the)i(dev)n(elop)r(ers)d(list[A\031ma])i(\(if)h(y)n
-(ou)e(are)g(subscrib)r(ed\))h(or)0 3719 y(directly)27
-b(to)376 3689 y Fi(2)413 3719 y Fn(:)208 3955 y Fm(<)43
-b(MeTA1)e(+)i(feedback)e(\(at\))h(MeTA1)f(.)i(org)g(>)0
-4192 y Fn(F)-7 b(eedbac)n(k)38 b(ab)r(out)h(the)h(co)r(de,)h(the)f(do)r
-(cumen)n(tation)e(\(including)i(t)n(yp)r(ographical,)g(syn)n(tactical,)
-g(and)f(grammatical)0 4291 y(errors,)24 b(p)r(oin)n(ting)h(out)h(parts)
-f(that)g(are)g(not)g(w)n(ell)h(enough)f(explained,)g(etc.\),)i(as)e(w)n
-(ell)g(as)g(patc)n(hes)g(and)g(enhancemen)n(ts)0 4391
-y(are)i(highly)g(appreciated.)0 4719 y Fk(1.5)135 b(F)-11
-b(or)45 b(the)g(Impatien)l(t)0 4955 y Fn(F)-7 b(or)30
-b(those)g(who)g(do)g(not)g(w)n(an)n(t)g(to)g(read)g(the)g(en)n(tire)g
-(do)r(cumen)n(tation,)h(it)g(is)f(adviced)g(to)g(read)g(at)g(least)g
-(sections)f(2.2)0 5054 y(and)e(2.4,)g(and)h(the)g(appropriate)e
-(section)h(of)g(Chapter)g(4.)p 0 5442 1512 4 v 92 5495
-a Fh(2)127 5519 y Fg(Sorry)c(for)g(the)i(obfuscation,)f(replace)g
-Fe(\(at\))h Fg(with)f Fe(@)g Fg(and)g(remo)n(v)n(e)g(the)g(spaces,)g
-(but)h(not)f(the)h(plus)e(sign.)1869 5768 y Fn(8)p eop
-end
-%%Page: 9 10
-TeXDict begin 9 9 bop 0 1199 a Fl(Chapter)65 b(2)0 1668
-y Fp(Building,)76 b(T)-19 b(esting,)76 b(and)i(Installing)0
-1917 y(MeT)-19 b(A1)0 2452 y Fk(2.1)135 b(V)-11 b(erifying)46
-b(the)f(Source)f(Co)t(de)h(Distribution)0 2688 y Fn(The)35
-b(source)e(co)r(de)h(is)g(distributed)h(as)f(a)g(\(compressed\))g(tar)g
-(\014le)g(and)h(is)f(accompanied)f(b)n(y)h(a)g(PGP)g(signature)f
-(\014le)0 2787 y(whic)n(h)28 b(has)f(the)h(same)f(name)g(as)g(the)i
-(tar)e(\014le)g(plus)h(the)g(ending)g Fm(.sig)p Fn(.)36
-b(T)-7 b(o)27 b(v)n(erify)g(the)h(in)n(tegrit)n(y)f(of)g(the)h(source)f
-(co)r(de)0 2887 y(PGP)g([PGP)o(])h(or)e(GPG)i([Gn)n(u])g(are)e
-(required)h(as)g(w)n(ell)g(as)g(the)h(MeT)-7 b(A1)28
-b(PGP)f(signing)f(k)n(ey)h([MeT]:)0 3040 y Fm($)43 b(gpg)g(--verify)d
-(meta1-$VERSION.t)o(ar)o(.gz)o(.s)o(ig)0 3140 y Fn(or:)0
-3239 y Fm($)j(pgp)g(meta1-$VERSION.)o(ta)o(r.g)o(z.)o(sig)37
-b(meta1-$VERSION.t)o(ar)o(.g)o(z)0 3393 y Fn(F)-7 b(urther)25
-b(information,)g(esp)r(ecially)g(ab)r(out)g(w)n(arnings)e(or)h(p)r
-(ossible)h(errors,)f(can)g(b)r(e)i(found)f(in)h(the)f(do)r(cumen)n
-(tation)g(for)0 3492 y(PGP)i(or)g(GPG.)0 3816 y Fk(2.2)135
-b(Building)45 b(MeT)-11 b(A1)0 4051 y Fn(MeT)k(A1)22
-b(uses)g(a)g Fm(configure)c Fn(\014le)k(generated)f(b)n(y)h(GNU)h(auto)
-r(conf)f(for)g(con\014guration.)33 b(Hence)22 b(y)n(ou)g(can)f(build)i
-(it)g(\(after)0 4151 y(v)n(erifying)k(and)g(unpac)n(king)g(the)h
-(distribution\))g(as)f(follo)n(ws:)0 4359 y Fm($)43 b(mkdir)f(obj.$OS)e
-(&&)j(cd)g(obj.$OS)e(&&)h($PATHTO/meta1-$VE)o(RS)o(ION)o(/c)o(onf)o(ig)
-o(ure)37 b($OPTIONS)j(\\)87 4459 y(&&)j(make)f(&&)h(make)f(check)0
-4668 y Fn(Ob)n(viously)27 b(y)n(ou)g(ha)n(v)n(e)g(to)i(replace)e
-Fm($OS)p Fn(,)g Fm($VERSION)p Fn(,)e Fm($OPTIONS)p Fn(,)g(as)j(w)n(ell)
-g(as)f Fm($PATHTO)p Fn(.)f(It)j(is)f(also)f(p)r(ossible)h(to)g(build)0
-4767 y(MeT)-7 b(A1)27 b(in)h(the)g(source)f(tree,)g(ho)n(w)n(ev)n(er,)f
-(this)h(is)h(discouraged:)0 4976 y Fm($)43 b(./configure)c(&&)k(make)f
-(&&)h(make)f(check)0 5184 y Fn(Notes:)36 b(do)27 b Fd(not)g
-Fn(run)f(this)h(as)g Fm(root)p Fn(;)e(this)i(is)g(not)g(just)g(a)g
-(basic)f(securit)n(y)g(measure)g(\()p Fd(only)i Fn(use)f(a)f
-(privileged)g(accoun)n(t)g(if)0 5284 y(it)i(is)g(really)f(required\),)h
-(but)h(most)f(of)g(the)g(programs)e(refuse)h(to)h(run)g(with)h
-Fm(root)d Fn(privileges.)37 b(It)29 b(migh)n(t)f(b)r(e)g(useful)h(to)0
-5383 y(sa)n(v)n(e)d(the)i(output)g(of)g(these)f(commands)1284
-5353 y Fi(1)1349 5383 y Fn(for)g(later)g(insp)r(ection.)p
-0 5442 1512 4 v 92 5495 a Fh(1)127 5519 y Fg(using)d
-Fe(script\(1\))i Fg(or)d(redirecting)h(it)g(to)g(some)g(\014le.)1869
-5768 y Fn(9)p eop end
-%%Page: 10 11
-TeXDict begin 10 10 bop 0 523 a Fj(2.2.1)112 b(Compile-Time)40
-b(Con\014guration)e(Options)0 730 y Fn(Beside)26 b(the)h(usual)f
-Fm(configure)d Fn(options)j(lik)n(e)h Fm(--prefix)c Fn(a)j(few)h(MeT)-7
-b(A1)26 b(sp)r(eci\014c)h(con\014guration)e(options)h(are)g(a)n(v)-5
-b(ail-)0 830 y(able:)42 1066 y Fm(--enable-TLS)36 b Fn(Enable)k(c)n
-(hec)n(k)g(for)g(ST)-7 b(AR)g(TTLS)42 b(supp)r(ort.)77
-b(The)41 b(default)g(is)g Fm(yes)p Fn(,)i(i.e.,)i Fm(configure)37
-b Fn(tries)k(to)208 1165 y(determine)27 b(whether)f(Op)r(enSSL)i(is)e
-(a)n(v)-5 b(ailable)26 b(on)h(the)g(mac)n(hine.)36 b(Requires)26
-b(Op)r(enSSL)i(0.9.6)d(or)h(new)n(er)g([Op)r(e].)208
-1265 y(Note:)41 b(c)n(hec)n(k)29 b(the)h(Op)r(enSSL)g(w)n(ebsite)g([Op)
-r(e])g(for)f(securit)n(y)g(announcemen)n(t)h(and)f(b)r(e)i(a)n(w)n(are)
-c(that)j(due)g(to)g(the)208 1365 y(complexit)n(y)d(of)g(the)h(soft)n(w)
-n(are)e(it)i(ma)n(y)f(cause)g(\(securit)n(y\))g(problems.)42
-1531 y Fm(--enable-SASL)19 b Fn(Enable)24 b(c)n(hec)n(k)g(for)h(A)n
-(UTH)g(supp)r(ort.)36 b(The)25 b(default)g(is)g Fm(yes)p
-Fn(,)f(i.e.,)i Fm(configure)21 b Fn(tries)k(to)g(determine)208
-1630 y(whether)g(Cyrus)g(SASL)h(v2)f(is)h(a)n(v)-5 b(ailable)24
-b(on)h(the)h(mac)n(hine.)36 b(Requires)25 b(Cyrus)g(SASL)h(v)n(ersion)e
-(2.1.18)g(or)g(new)n(er)208 1730 y([Cyr)o(].)37 b(Notes:)284
-1896 y(1.)k(c)n(hec)n(k)d Fm(http://asg.web.c)o(mu.)o(ed)o(u/)o(cyr)o
-(us)o(/)33 b Fn(and)38 b Fm(http://asg.web.cm)o(u.)o(edu)o(/s)o(as)o
-(l/)32 b Fn(for)38 b(securit)n(y)390 1996 y(announcemen)n(t)23
-b(and)g(b)r(e)g(a)n(w)n(are)e(that)i(due)g(to)g(the)g(complexit)n(y)g
-(of)g(the)g(soft)n(w)n(are)e(it)i(ma)n(y)g(cause)f(\(securit)n(y\))390
-2095 y(problems.)284 2228 y(2.)41 b(If)34 b(Cyrus)f(SASL)h(uses)f(Berk)
-n(eley)f(DB)h(then)h(it)g(is)f(necessary)f(that)i(the)g(v)n(ersion)e
-(whic)n(h)h(has)g(b)r(een)h(used)390 2328 y(during)27
-b(compilation)g(matc)n(hes)g(the)h(v)n(ersion)e(that)i(it)g(is)g(link)n
-(ed)f(against.)42 2494 y Fm(--with-sasl-lib)o(di)o(r=)p
-Fn(pa)o(th)22 b(P)n(ath)27 b(to)h(directory)e(con)n(taining)h(Cyrus)f
-(SASL)i(v2)f(library)-7 b(.)42 2660 y Fm(--with-sasl-inc)o(di)o(r=)p
-Fn(pa)o(th)22 b(P)n(ath)27 b(to)h(directory)e(con)n(taining)h(Cyrus)f
-(SASL)i(v2)f(include)h(\014les.)42 2826 y Fm(--disable-inclu)o(de)o
-(d-b)o(db)d Fn(MeT)-7 b(A1)32 b(ships)f(with)h(a)f(mo)r(di\014ed)h(v)n
-(ersion)e(of)i(Berk)n(eley)e(DB)i(4.3.28)e(whic)n(h)h(is)h(built)208
-2925 y(and)f(used)g(b)n(y)g(default.)49 b(T)-7 b(o)31
-b(use)g(a)g(di\013eren)n(t)g(v)n(ersion)f(of)h(Berk)n(eley)f(DB)i(\(it)
-g(m)n(ust)f(b)r(e)h(4.3,)f(4.2,)h(or)e(4.1\),)i(e.g.,)208
-3025 y(one)27 b(that)h(is)f(part)g(of)h(the)g(host)f(OS,)h(sp)r(ecify)f
-Fm(--disable-include)o(d-b)o(db)o Fn(.)208 3158 y(Notes:)284
-3324 y(1.)41 b(If)26 b(y)n(ou)f(do)g(not)h(use)f(the)h(Berk)n(eley)e
-(DB)i(v)n(ersion)e(that)i(comes)e(with)i(MeT)-7 b(A1,)26
-b(mak)n(e)f(sure)g(y)n(ou)g(run)g(all)g(the)390 3424
-y(tests.)54 b(F)-7 b(or)33 b(example,)h(with)g(Berk)n(eley)e(DB)i
-(4.2.50)d(on)i(Op)r(enBSD)h(3.2/i386)c(at)k(least)e(one)h(of)h(the)f
-(test)390 3523 y(programs)e(fails)j(and)f(hence)h(this)f(com)n
-(bination)g(m)n(ust)h Fd(not)f Fn(b)r(e)h(used.)54 b(Moreo)n(v)n(er,)33
-b(if)h(y)n(ou)e(encoun)n(ter)h(a)390 3623 y(problem)26
-b(using)h(some)f(other)g(BDB)h(v)n(ersion)e(then)j(y)n(ou)e(m)n(ust)h
-(try)f(to)h(repro)r(duce)e(the)j(problem)e(with)h(the)390
-3722 y(shipp)r(ed)h(v)n(ersion)e(b)r(efore)i(rep)r(orting)e(a)h(p)r
-(ossible)h(bug.)284 3855 y(2.)41 b(Do)34 b(not)g(use)g(Berk)n(eley)f
-(DB)h(4.3.27/28)d(in)j(64)f(bit)i(mo)r(de)f(on)g(Solaris)e(5.8/9)g(as)i
-(it)g(crashes)f(at)h(least)f(in)390 3955 y(those)27 b(con\014gurations)
-1117 3925 y Fi(2)1153 3955 y Fn(.)37 b(This)27 b(bug)h(is)f(\014xed)h
-(in)g(the)g(v)n(ersion)e(that)i(is)f(distributed)h(with)g(MeT)-7
-b(A1.)42 4121 y Fm(--with-bdb-libd)o(ir)o Fn(=path)16
-b(P)n(ath)21 b(to)g(directory)f(con)n(taining)h(Berk)n(eley)f(DB)i
-(library)-7 b(.)34 b(This)21 b(option)h(is)f(only)g(needed)208
-4221 y(if)h Fm(--disable-inclu)o(ded)o(-b)o(db)15 b Fn(is)22
-b(used)f(and)g(Berk)n(eley)f(DB)i(is)g(not)f(installed)h(in)g(a)f(lo)r
-(cation)g(that)g(the)h(compiler)208 4320 y(or)k(link)n(er)h(use)h(b)n
-(y)f(default.)37 b(Note:)g Fm(configure)24 b Fn(curren)n(tly)j(c)n(hec)
-n(ks)f(only)h(for)g(a)h(static)f(library)-7 b(.)42 4486
-y Fm(--with-bdb-incd)o(ir)o Fn(=path)23 b(P)n(ath)28
-b(to)h(directory)f(con)n(taining)g(Berk)n(eley)g(DB)h(include)g
-(\014les.)41 b(This)29 b(option)g(is)g(only)208 4586
-y(needed)c(if)h Fm(--disable-include)o(d-)o(bdb)19 b
-Fn(is)25 b(used)h(and)f(Berk)n(eley)f(DB)i(is)f(not)h(installed)g(in)f
-(a)g(lo)r(cation)g(that)h(the)208 4686 y(compiler)g(uses)i(b)n(y)f
-(default.)37 b(Example:)208 4885 y Fm($)43 b(B=/usr/local/Ber)o(ke)o
-(le)o(yDB)o(.4)o(.3)208 4984 y($)g($PATHTO/meta1-$V)o(ER)o(SI)o(ON/)o
-(co)o(nfi)o(gu)o(re)37 b(--with-bdb-libdi)o(r=$)o(B/)o(lib)g(\\)295
-5084 y(--with-bdb-incdi)o(r=)o($B)o(/in)o(cl)o(ude)g(--disable-includ)o
-(ed)o(-b)o(db)42 5283 y(--enable-pmilte)o(r)22 b Fn(Enable)k(p)r(olicy)
-i(milter)g(proto)r(col,)e(see)h(Chapter)g(5.)p 0 5355
-1512 4 v 92 5409 a Fh(2)127 5432 y Fg(\\Priv)l(ate)d(database)h(en)n
-(vironmen)n(ts)f(on)f(64-bit)h(mac)n(hines)g(no)f(longer)g(drop)h(core)
-f(b)r(ecause)i(of)e(64-bit)g(address)g(truncation.)33
-b([11983]")0 5511 y([Slea])1848 5768 y Fn(10)p eop end
-%%Page: 11 12
-TeXDict begin 11 11 bop 42 523 a Fm(--enable-msp)16 b
-Fn(Enable)21 b(a)g(simple)h(mail)g(submission)f(program)e(\(MSP\))j
-(that)g(is)g(curren)n(tly)f(not)g(supp)r(orted)h(\(lo)r(cated)208
-623 y(in)29 b Fm(contrib/)p Fn(\).)39 b(This)29 b(is)g(just)h(a)e(help)
-r(er)i(program)d(for)h(those)h(who)g(do)g(not)g(w)n(an)n(t)g(to)g
-(install)g(a)g(di\013eren)n(t)g(MSP)208 722 y(but)d(need)g(only)f(some)
-h(basic)f(functionalit)n(y)h(\(whic)n(h)g(do)r(es)f Fd(not)h
-Fn(include)g(a)g(queueing)f(mec)n(hanism\).)36 b(Note:)g(this)208
-822 y(will)29 b(install)g(the)h(MSP)f(as)f Fm(sendmail)e
-Fn(th)n(us)j(o)n(v)n(erriding)e(an)n(y)h(existing)h(program)e(of)i
-(that)h(name)f(\(as)g(w)n(ell)g(as)f(a)208 922 y(man)f(page\).)42
-1086 y Fm(--enable-tinycd)o(b)22 b Fn(Enable)k(supp)r(ort)i(for)f
-Fm(cdb)f Fn(map)i(t)n(yp)r(e,)g(based)f(on)g Fm(tinycdb)41
-b(0.75)26 b Fn([T)-7 b(ok)o(].)0 1319 y(T)g(o)27 b(get)h(the)g(curren)n
-(t)e(list)i(of)g(con\014guration)e(options,)h(use)g Fm(configure)40
-b(--help)p Fn(.)0 1646 y Fk(2.3)135 b(T)-11 b(est)45
-b(Programs)0 1882 y Fm($)e(make)f(check)0 2114 y Fn(will)32
-b(run)g(all)f(test)h(programs;)g(curren)n(tly)f(those)g(tests)h(tak)n
-(e)f(ab)r(out)h(eigh)n(t)n(y)e(min)n(utes)i(to)g(run)g(on)f(a)h
-(standard)e(w)n(ork-)0 2214 y(station.)39 b(F)-7 b(or)28
-b(eac)n(h)g(of)g(the)h(test)g(programs)d(one)i(line)h(is)f(prin)n(ted)g
-(to)h(denote)f(whether)g(the)h(test)g(succeeded,)f(i.e.,)h(the)0
-2314 y(output)35 b(consists)g(of)g(lines)f(with)i(the)f(mark)n(er)e
-Fm(PASS:)g Fn(or)h Fm(FAIL:)f Fn(and)i(the)g(name)g(of)g(the)g(test)h
-(program)d(program.)0 2413 y(Additional)28 b(output)g(migh)n(t)f(b)r(e)
-h(generated)f(b)n(y)g(the)h(test)g(programs)d(themselv)n(es,)i(e.g.,)0
-2567 y Fm(2)43 b(of)g(2)g(tests)f(completed)d(successfully)p
-Fn(,)0 2720 y(or)30 b(some)g(debug)g(output.)46 b(The)31
-b(debug)f(output)h(ma)n(y)f(ev)n(en)g(indicate)h(an)f(error,)f(but)j
-(only)e(a)g(\014nal)g Fm(FAIL:)f Fn(indicates)0 2819
-y(a)d(test)i(failure.)36 b(Some)27 b(tests)f(dep)r(end)i(on)f
-(compilation)f(options)g(and)h(are)f(only)g(conditionally)g(enabled;)h
-(others)f(ma)n(y)0 2919 y(dep)r(end)i(on)g(en)n(vironmen)n(t)e(v)-5
-b(ariables,)27 b(see)g(2.3.1.)35 b(F)-7 b(or)27 b(disabled)h(tests)f
-Fm(SKIP)f Fn(is)i(sho)n(wn.)0 3072 y(Since)c(some)f(of)g(the)h(tests)g
-(ma)n(y)f(fail)g(\(see)h(Section)f(2.3.2\))g(and)g Fm(make)f
-Fn(will)i(usually)f(stop)h(after)f(encoun)n(tering)f(an)i(error,)0
-3172 y(it)k(migh)n(t)g(b)r(e)g(required)e(to)i(use)0
-3405 y Fm($)43 b(make)f(-i)h(check)e(>check.out)f(2>&1)0
-3637 y Fn(to)27 b(p)r(erform)h(all)f(tests.)0 3923 y
-Fj(2.3.1)112 b(En)m(vironmen)m(t)38 b(V)-9 b(ariables)38
-b(used)h(b)m(y)e(T)-9 b(est)37 b(Programs)0 4130 y Fn(En)n(vironmen)n
-(t)29 b(v)-5 b(ariables)29 b(can)h(b)r(e)g(used)h(to)f(disable)g(some)f
-(test)i(programs)d(if)i(required)g(or)f(c)n(hange)g(the)i(b)r(eha)n
-(vior)e(of)0 4229 y(some)e(test)h(programs.)34 b(These)28
-b(en)n(vironmen)n(t)e(v)-5 b(ariables)27 b(and)g(their)h(e\013ects)g
-(are:)125 4462 y Fc(\017)41 b Fm(MTA_NO_DNS_TEST)o Fn(:)23
-b(disable)29 b(tests)f(that)h(p)r(erform)g(DNS)g(lo)r(okups.)40
-b(These)29 b(lo)r(okups)f(ma)n(y)g(use)g(domains)g(that)208
-4561 y(are)e(under)i(con)n(trol)e(of)h(the)h(MeT)-7 b(A1)28
-b(author.)125 4726 y Fc(\017)41 b Fm(MTA_DNS_TIMEOUT)o
-Fn(:)22 b(can)27 b(b)r(e)h(used)g(to)f(set)h(a)f(di\013eren)n(t)h
-(timeout)g(than)f(the)h(default,)g(ho)n(w)n(ev)n(er,)e(it)i(ma)n(y)f
-(not)g(b)r(e)208 4826 y(ob)r(ey)n(ed)g(b)n(y)g(all)g(DNS)i(test)f
-(programs.)125 4990 y Fc(\017)41 b Fm(MTA_TEST_DNS_TI)o(MIN)o(G)p
-Fn(:)23 b(run)29 b(DNS)g(tests)g(that)h(are)d(timing)j(dep)r(enden)n(t)
-f(and)g(ma)n(y)f(fail)h(under)g(certain)f(con-)208 5090
-y(ditions)f(\(e.g.,)h(net)n(w)n(ork)e(to)r(o)h(slo)n(w\).)125
-5255 y Fc(\017)41 b Fm(MTA_TIMING)p Fn(:)23 b(run)28
-b(MT)-7 b(A)28 b(tests)f(that)h(are)f(timing)h(dep)r(enden)n(t)g(and)f
-(ma)n(y)g(fail)h(under)f(certain)g(conditions.)125 5419
-y Fc(\017)41 b Fm(MTA_STOPONERROR)o Fn(:)24 b(causes)k(most)g(test)i
-(scripts)e(that)i(p)r(erform)e(m)n(ultiple)i(c)n(hec)n(ks)e(to)h(stop)g
-(on)f(the)i(\014rst)f(error)208 5519 y(that)e(o)r(ccurs)g(instead)h(of)
-f(p)r(erforming)g(all)g(c)n(hec)n(ks.)1848 5768 y(11)p
-eop end
-%%Page: 12 13
-TeXDict begin 12 12 bop 125 523 a Fc(\017)41 b Fm(MTA_NO_LOG_TEST)o
-Fn(:)22 b(disables)27 b(some)g(tests)h(that)g(use)f Fm(syslog\(3\))p
-Fn(.)125 689 y Fc(\017)41 b Fm(MTA_NO_SLOW_TES)o(T)p
-Fn(:)22 b(disables)27 b(some)g(tests)g(that)h(tak)n(e)f(a)g(v)n(ery)g
-(long)g(time.)0 925 y(In)h(this)g(example)f(the)h(DNS)g(timeout)g(is)g
-(set)f(to)h(60)f(seconds)f(and)i(tests)f(that)h(tak)n(e)f(a)g(v)n(ery)g
-(long)g(time)h(are)e(disabled:)0 1145 y Fm($)43 b(MTA_DNS_TIMEOUT=6)o
-(0)0 1245 y($)g(MTA_NO_SLOW_TEST=)o(1)0 1344 y($)g(export)e
-(MTA_DNS_TIMEOUT)d(MTA_NO_SLOW_TES)o(T)0 1444 y($)43
-b(make)f(-i)h(check)0 1730 y Fj(2.3.2)112 b(Kno)m(wn)38
-b(T)-9 b(est)37 b(Program)g(Problems)125 1937 y Fc(\017)k
-Fm(connctl.sh)23 b Fn(will)29 b(fail)f(on)f(systems)h(that)g(ha)n(v)n
-(e)f(neither)h Fm(inet)p 2229 1937 27 4 v 30 w(pton\(3\))d
-Fn(nor)i Fm(inet)p 2916 1937 V 30 w(aton\(3\))p Fn(.)35
-b(Fix:)j(upgrade)208 2036 y(y)n(our)26 b(OS)h(or)g(write)g(a)h
-(replacemen)n(t)e(function)i(and)g(put)g(it)g(in)n(to)g
-Fm(librepl/)p Fn(.)125 2202 y Fc(\017)41 b Fm(t-evthr-slp)20
-b Fn(can)k(fail)g(in)h(some)f(circumstances)g(if)h(the)f(OS)h(is)f
-(busy)h(with)g(other)f(tasks)f(as)h(it)h(dep)r(ends)g(on)f(the)208
-2302 y(OS)j(sc)n(heduler.)36 b(Fix:)h(just)28 b(rerun)f(the)h(test.)125
-2468 y Fc(\017)41 b Fm(t-evthr-sig.sh)20 b Fn(fails)26
-b(on)g(Lin)n(ux)g(systems)f(that)i(use)f(a)f(thread)h(implemen)n
-(tation)g(that)h(is)f(not)g(POSIX)f(com-)208 2568 y(plian)n(t.)56
-b(The)34 b(test)g(is)g(curren)n(tly)f(disabled)g(on)h(all)g(Lin)n(ux)g
-(v)n(ersions.)54 b(Note:)49 b(if)35 b(y)n(ou)e(kno)n(w)g(a)h(simple)g
-(w)n(a)n(y)f(to)208 2667 y(\014gure)26 b(out)i(whether)f(the)h(OS)g
-(actually)f(pro)n(vides)f(POSIX)h(complian)n(t)g(pthreads,)g(please)g
-(let)h(me)g(kno)n(w.)125 2833 y Fc(\017)41 b Fm(t-hostname)22
-b Fn(fails)27 b(on)f(systems)g(where)g Fm(gethostname\(\))c
-Fn(do)r(es)k(not)h(return)f(an)n(y)g(F)n(QHN)g(at)h(all)f(\(e.g.,)h
-(default)208 2933 y(SunOS)38 b(4/5)g(installations\).)70
-b(Add)39 b(the)g(F)n(QHN)g(as)g(alias)e(to)i Fm(/etc/hosts)c
-Fn(\(see)j Fm(hosts\(5\))e Fn(to)j(solv)n(e)e(this)208
-3033 y(problem,)27 b(e.g.,)208 3249 y Fm(10.1.2.3)171
-b(myname)41 b(myname.my.domai)o(n)208 3464 y Fn(or)208
-3664 y Fm(10.1.2.3)171 b(myname.my.domai)o(n)38 b(myname)125
-3863 y Fc(\017)j Fm(t-parsesockstr)28 b Fn(fails)34 b(on)g(systems)g
-(lik)n(e)g(AIX)g(whic)n(h)g(treat)g(an)g(empt)n(y)g(string)g(as)g(a)f
-(v)-5 b(alid)35 b(IP)e(address)g(in)208 3963 y Fm(inet)p
-389 3963 V 29 w(addr\(3\))p Fn(.)125 4129 y Fc(\017)41
-b Fm(t-mts-icr.sh)24 b Fn(and)29 b Fm(t-mts-ocr-?.sh)23
-b Fn(try)29 b(to)g(test)g(incoming/outgoing)e(rate)h(con)n(trol.)40
-b(They)29 b(rely)f(on)h(the)208 4228 y(time)i(it)g(tak)n(es)f(to)h
-(send/receiv)n(e)e(mails)h(whic)n(h)h(ma)n(y)f(not)h(w)n(ork)f(on)g
-(mac)n(hines)g(that)i(are)d(signi\014can)n(tly)h(slo)n(w)n(er)208
-4328 y(or)c(faster)h(than)h(the)g(mac)n(hines)f(a)n(v)-5
-b(ailable)26 b(to)i(the)g(author.)125 4494 y Fc(\017)41
-b Fm(t-smar-0.sh)p Fn(,)26 b Fm(t-smar-3.sh)p Fn(,)g(and)k
-Fm(t-dns-1.sh)c Fn(ma)n(y)j(fail)h(sometimes)g(due)g(to)g(DNS)h
-(timeouts.)45 b(Run)30 b(the)208 4593 y(tests)d(again)g(or)f(increase)h
-(the)h(DNS)g(timeout,)g(see)f(Section)h(2.3.1.)0 4830
-y(Note:)43 b(DNS)32 b(related)e(test)h(programs)e(ma)n(y)h(fail)h(if)g
-(the)g(\014rst)g(nameserv)n(er)e(en)n(try)h(in)h Fm(/etc/resolv.conf)24
-b Fn(do)r(es)31 b(not)0 4929 y(resp)r(ond)g(prop)r(erly)f(\(and)h
-(reasonably)e(fast\))i(to)g(DNS)h(queries.)47 b(See)31
-b(Section)g(12.3.1)e(ho)n(w)i(to)g(o)n(v)n(erride)e(the)i(default)0
-5029 y(nameserv)n(er)25 b(selection:)37 b Fm(MTA_NAMESERVER)p
-Fn(.)0 5182 y(F)-7 b(or)29 b(more)g(information)g(ab)r(out)h(p)r
-(ossible)f(test)h(program)e(problems)h(see)g(Section)h(12.3.2.)41
-b(F)-7 b(or)29 b(problems)g(with)i(pro-)0 5282 y(grams)26
-b(in)i(the)g Fm(contrib/)c Fn(directory)-7 b(,)27 b(see)g
-Fm(contrib/README)p Fn(.)1848 5768 y(12)p eop end
-%%Page: 13 14
-TeXDict begin 13 13 bop 0 523 a Fk(2.4)135 b(Installing)47
-b(MeT)-11 b(A1)0 758 y Fn(MeT)k(A1)30 b(needs)f(sev)n(eral)f(users)h
-(to)g(pro)n(vide)g(separation)f(of)i(privileges)e(and)i(to)f(enhance)h
-(securit)n(y)-7 b(.)42 b(Curren)n(tly)29 b(there)0 858
-y(are)k(four)g(required)g(accoun)n(ts)f(\(the)j(n)n(um)n(b)r(ers)e(for)
-g(uid)h(and)g(gid)f(are)g(examples)g(only\);)j(the)e(last)g(one)f
-(listed)h(b)r(elo)n(w)0 958 y(\()p Fm(meta1)p Fn(\))26
-b(is)i(not)f(really)g(required:)0 1187 y Fm(meta1s:*:260:260)o(:me)o
-(ta)o(1)37 b(SMTPS:/nonexisten)o(t:/)o(sb)o(in/)o(no)o(lo)o(gin)0
-1287 y(meta1q:*:261:261)o(:me)o(ta)o(1)g(QMGR:/nonexistent)o(:/s)o(bi)o
-(n/n)o(ol)o(og)o(in)0 1386 y(meta1c:*:262:262)o(:me)o(ta)o(1)g
-(SMTPC:/nonexisten)o(t:/)o(sb)o(in/)o(no)o(lo)o(gin)0
-1486 y(meta1m:*:263:263)o(:me)o(ta)o(1)g(misc:/nonexistent)o(:/s)o(bi)o
-(n/n)o(ol)o(og)o(in)0 1585 y(meta1:*:264:264:)o(met)o(a1)g
-(other:/nonexiste)o(nt)o(:/s)o(bi)o(n/n)o(ol)o(og)o(in)0
-1815 y Fn(with)28 b(the)g(corresp)r(onding)e(groups:)0
-2044 y Fm(meta1s:*:260:)0 2143 y(meta1q:*:261:)0 2243
-y(meta1c:*:262:met)o(a1s)0 2343 y(meta1m:*:263:met)o(a1s)o(,m)o(et)o
-(a1q)0 2442 y(meta1:*:264:)0 2671 y Fn(Note:)46 b(on)32
-b(some)g(op)r(erating)f(systems)h(the)h(star)e(c)n(haracter)f(is)j(not)
-f(a)g(v)-5 b(alid)32 b(v)-5 b(alue)32 b(for)g(the)h(passw)n(ord)d
-(\014eld.)51 b(Chec)n(k)0 2771 y Fm(passwd\(5\))396 2741
-y Fi(3)457 2771 y Fn(to)28 b(determine)f(whic)n(h)h(v)-5
-b(alue)27 b(to)h(use)f(to)h(disable)f(the)h(passw)n(ord.)0
-2924 y(T)-7 b(o)27 b(c)n(hec)n(k)g(whether)g(the)h(required)f(users)g
-(and)g(groups)f(exist,)i(run)0 3154 y Fm($)43 b(./misc/sm.check.s)o(h)
-37 b(-p)0 3383 y Fn(\(in)28 b(the)g(build)g(directory\);)f(see)g(b)r
-(elo)n(w)g(ho)n(w)g(to)h(o)n(v)n(erride)d(the)j(default)g(v)-5
-b(alues)27 b(for)h(the)g(user)f(and)g(group)f(names.)0
-3536 y(A)f(shell)f(script)g(to)h(setup)f(the)h(directories,)f(\014les,)
-h(etc.)f(as)g(describ)r(ed)g(b)r(elo)n(w)g(is)h(a)n(v)-5
-b(ailable)23 b(in)h Fm(misc/sm.setup.sh.)o(in)o Fn(.)0
-3636 y(This)39 b(script)h(is)f(mo)r(di\014ed)h(b)n(y)f
-Fm(configure)d Fn(to)j(create)g Fm(misc/sm.setup.sh)33
-b Fn(\(in)40 b(the)g(build)g(directory\))e(whic)n(h)i(is)0
-3735 y(in)n(v)n(ok)n(ed)26 b(when)0 3888 y Fm(#)43 b(make)f(install)0
-4042 y Fn(is)25 b(called.)35 b(Most)24 b(defaults)h(in)g(the)g
-(installation)f(script)g Fm(misc/sm.setup.sh)19 b Fn(can)24
-b(b)r(e)h(o)n(v)n(erridden)d(with)k(en)n(vironmen)n(t)0
-4141 y(v)-5 b(ariables)26 b(\(default)j(is)e(listed)h(in)g(square)e
-(brac)n(k)n(ets\):)125 4355 y Fc(\017)41 b Fm(MTACONFDIR)p
-Fn(:)23 b([)p Fm(/etc/meta1)p Fn(])h(con\014guration)i(directory)-7
-b(.)125 4518 y Fc(\017)41 b Fm(MTAQDIR)p Fn(:)20 b([)p
-Fm(/var/spool/meta1)o Fn(])d(queue)23 b(directory;)h(comm)n(unication)e
-(so)r(c)n(k)n(ets)g(are)g(created)g(in)i(this)f(directory)208
-4618 y(b)n(y)k(default)h(to)r(o.)125 4781 y Fc(\017)41
-b Fm(MTALOGDIR)p Fn(:)25 b([)p Fm(.)p Fn(])39 b(logging)27
-b(directory)g(\(relativ)n(e)h(to)g Fm(MTAQDIR)p Fn(\).)f(If)i(logging)d
-(is)j(done)f(via)g Fm(syslog\(3\))d Fn(then)k(this)208
-4881 y(directory)d(is)h(not)h(used.)125 5044 y Fc(\017)41
-b Fm(MTAS)26 b Fn([)p Fm(meta1s)p Fn(])f(SMTP)i(Serv)n(er)f(user)h(and)
-h(group.)125 5207 y Fc(\017)41 b Fm(MTAC)26 b Fn([)p
-Fm(meta1c)p Fn(])f(SMTP)i(Clien)n(t)h(user)f(and)g(group.)125
-5371 y Fc(\017)41 b Fm(MTAQ)26 b Fn([)p Fm(meta1q)p Fn(])f(QMGR)j(user)
-e(and)i(group.)p 0 5442 1512 4 v 92 5495 a Fh(3)127 5519
-y Fg(On)c(some)f(systems)h(the)h(man)f(page)g(is)f(in)h(another)g
-(section,)h(e.g.,)e(4.)1848 5768 y Fn(13)p eop end
-%%Page: 14 15
-TeXDict begin 14 14 bop 125 523 a Fc(\017)41 b Fm(MTAM)26
-b Fn([)p Fm(meta1m)p Fn(])f(address)h(resolv)n(er)g(\(misc\))i(user)f
-(and)g(group.)125 689 y Fc(\017)41 b Fm(MTA)26 b Fn([)p
-Fm(meta1)p Fn(])g(generic)g(\(con\014guration)h(etc\))h(user)f(and)g
-(group.)125 855 y Fc(\017)41 b Fm(MTALG)25 b Fn(group)i(for)g
-(log\014les;)f(the)i(install)g(program)d(tries)j Fm(operator)p
-Fn(,)c Fm(sysadmin)p Fn(,)g(and)k Fm(root)p Fn(.)0 1075
-y Fd(Imp)l(ortant)i(Notes)p Fn(:)101 1294 y(1.)42 b(The)27
-b(users)g(and)g(groups)g Fd(must)f Fn(b)r(e)i(created)f(b)r(efore)g
-Fm(make)42 b(install)25 b Fn(is)j(in)n(v)n(ok)n(ed.)101
-1460 y(2.)42 b Fm(misc/sm.setup.s)o(h)27 b Fn(will)34
-b(not)f(o)n(v)n(erwrite)e(existing)i(\014les)g(or)g(directories,)g
-(hence)g(it)h(do)r(es)f(not)g(w)n(ork)f(for)h(up-)208
-1560 y(grading)26 b(a)h(system)g(if)h(con\014guration)e(\014les)i(or)e
-(directory/\014le)g(o)n(wners)g(need)i(to)g(c)n(hanged.)0
-1846 y Fj(2.4.1)112 b(Directories,)38 b(Files,)g(and)h(P)m(ermissions)0
-2053 y Fm(make)j(install)24 b Fn(\(i.e.,)j Fm(misc/sm.setup.sh)o
-Fn(\))21 b(will)27 b(create)e(all)h(the)h(required)f(directories)f(and)
-h(\014les)g(with)h(the)g(correct)0 2153 y(p)r(ermissions)33
-b(pro)n(vided)g(the)h(users)f(and)g(groups)f(ha)n(v)n(e)h(b)r(een)h
-(set)g(up)g(prop)r(erly)-7 b(.)54 b(This)34 b(section)f(explains)h
-(what)f(the)0 2252 y(created)27 b(structure)g(lo)r(oks)g(lik)n(e.)0
-2406 y(The)i(CDB)g(directories)e(\()p Fm(0)p Fn(-)p Fm(9)p
-Fn(,)h Fm(A)p Fn(-)p Fm(F)p Fn(\))g(m)n(ust)g(b)r(e)h(o)n(wned)f(b)n(y)
-h Fm(meta1s)d Fn(and)i(ha)n(v)n(e)g(group)f Fm(meta1q)f
-Fn(with)k(the)e(p)r(ermissions)0 2505 y Fm(0771)p Fn(:)0
-2741 y Fm(drwxrwx--x)83 b(2)43 b(meta1s)85 b(meta1q)346
-b(0/)0 2978 y Fn(Note:)56 b(this)38 b(means)f(that)h(ev)n(ery)n(one)d
-(with)j(access)e(to)h(the)h(mac)n(hine)f(can)g(guess)f(the)i(name)f(of)
-g(con)n(ten)n(t)g(\014les)h(\(see)0 3077 y(Section)26
-b(10.2)e(for)h(the)h(format;)g(the)g(names)f(can)h(also)e(b)r(e)i(read)
-f(from)h(the)g(log\014les)e(if)j(those)e(are)g(w)n(orld-readable\))e
-(and)0 3177 y(list)h(\()p Fm(ls\(1\))p Fn(\))f(them,)i(ho)n(w)n(ev)n
-(er,)e(they)h(cannot)g(access)f(the)h(con)n(ten)n(t)g(\014les)g(as)f
-(those)h(are)f(o)n(wned)g(b)n(y)h Fm(meta1s)e Fn(with)j(mo)r(de)0
-3277 y Fm(0640)h Fn(and)h(group)g Fm(meta1c)p Fn(,)e(e.g.,)0
-3513 y Fm(-rw-r-----)83 b(1)43 b(meta1s)85 b(meta1c)g(1993)42
-b(Jul)85 b(9)44 b(21:19)d(2/S000000000006B1)o(D2)o(00)0
-3749 y Fn(The)26 b(main)f(\(DEFEDB\))h(and)g(incoming)f(queues)g
-(\(IBDB\))h(m)n(ust)g(b)r(elong)f(to)h Fm(meta1q)d Fn(and)i(should)h
-(not)f(accessible)g(b)n(y)0 3849 y(an)n(y)n(one)h(else:)0
-4085 y Fm(drwx------)83 b(2)43 b(meta1q)85 b(meta1q)346
-b(defedb/)0 4185 y(drwx------)83 b(2)43 b(meta1q)85 b(meta1q)346
-b(ibdb/)0 4284 y(drwx------)83 b(2)43 b(meta1q)85 b(meta1q)346
-b(ibdb/ibdb/)0 4520 y Fn(Mailertable,)25 b(aliases)e(map,)j(and)f
-(other)f(maps)h(for)f(SMAR)i(\(see)f(Section)g(3.9.3\))f(should)h(b)r
-(elong)g(to)f Fm(meta1m)f Fn(and)i(can)0 4620 y(b)r(e)j(readable)e(as)h
-(lo)r(cal)g(con)n(v)n(en)n(tions)f(require:)0 4856 y
-Fm(-rw-r--r--)83 b(1)43 b(meta1m)85 b(meta1m)390 b(mt)0
-4956 y(-rw-r--r--)83 b(1)43 b(meta1m)85 b(meta1m)390
-b(aliases.db)0 5192 y Fn(In)30 b(general,)e(maps)i(should)f(b)r(e)h(o)n
-(wned)f(b)n(y)g(the)h(user)f(id)h(of)f(the)h(program)e(that)i(uses)f
-(them,)i(e.g.,)e Fm(meta1q)f Fn(o)n(wns)g(the)0 5292
-y(QMGR)g(con\014guration)e(map)h Fm(qmgr)p 1163 5292
-27 4 v 30 w(conf.db)e Fn(\(see)i(Section)h(3.8.1\).)0
-5445 y(The)g(meta1)f(con\014guration)f(\014le)h(can)h(either)f(b)r
-(elong)g(to)h Fm(root)e Fn(or)h(the)h(generic)e(meta1)h(user:)1848
-5768 y(14)p eop end
-%%Page: 15 16
-TeXDict begin 15 15 bop 0 523 a Fm(-rw-r--r--)83 b(1)43
-b(meta1)129 b(meta1)434 b(meta1.conf)0 759 y Fn(The)25
-b(directories)f(in)i(whic)n(h)f(the)g(comm)n(unication)g(so)r(c)n(k)n
-(ets)f(b)r(et)n(w)n(een)h(QMGR)g(and)g(the)h(other)f(programs)e(are)h
-(lo)r(cated)0 859 y(m)n(ust)k(b)r(elong)f(to)g Fm(meta1q)f
-Fn(and)h(b)r(e)h(group)e(accessible)h(for)g(the)h(corresp)r(onding)e
-(program:)0 1095 y Fm(drwxrws---)83 b(2)43 b(meta1q)85
-b(meta1m)346 b(qmsmar/)0 1195 y(drwxrws---)83 b(2)43
-b(meta1q)85 b(meta1c)346 b(qmsmtpc/)0 1294 y(drwxrws---)83
-b(2)43 b(meta1q)85 b(meta1s)346 b(qmsmtps/)0 1531 y Fn(The)29
-b(directory)e(in)j(whic)n(h)e(the)i(comm)n(unication)e(so)r(c)n(k)n(et)
-f(b)r(et)n(w)n(een)i(MCP)g(and)f(SMTPS)h(is)g(lo)r(cated)f(m)n(ust)h(b)
-r(elong)g(to)0 1630 y Fm(meta1s)p Fn(:)0 1867 y Fm(drwxr-x---)83
-b(2)43 b(meta1s)85 b(meta1s)346 b(smtps/)0 2103 y Fn(The)27
-b(log\014les)g(m)n(ust)g(b)r(e)h(o)n(wned)f(b)n(y)g(the)h(corresp)r
-(onding)d(user)i(and)g(ma)n(y)g(ha)n(v)n(e)f(relaxed)g(group)g(\(or)h
-(ev)n(en)g(w)n(orld\))f(read)0 2203 y(p)r(ermissions:)0
-2439 y Fm(-rw-r-----)83 b(1)43 b(meta1q)85 b(operator)127
-b(qmgr.log)0 2538 y(-rw-r-----)83 b(1)43 b(meta1m)85
-b(operator)127 b(smar.log)0 2638 y(-rw-r-----)83 b(1)43
-b(meta1c)85 b(operator)127 b(smtpc.log)0 2738 y(-rw-r-----)83
-b(1)43 b(meta1s)85 b(operator)127 b(smtps.log)0 2974
-y Fn(T)-7 b(o)27 b(c)n(hec)n(k)g(whether)g(an)h(installation)f(w)n(as)f
-(successful,)i(run)0 3210 y Fm(#)43 b(./misc/sm.check.s)o(h)37
-b(-P)0 3446 y Fn(\(in)28 b(the)g(build)g(directory\).)35
-b(Note:)i(this)28 b(script)f(uses)g(the)g(same)g(en)n(vironmen)n(t)g(v)
--5 b(ariables)26 b(as)g(the)i(installation)f(script.)0
-3732 y Fj(2.4.2)112 b(Upgrading)39 b(from)f(earlier)g(MeT)-9
-b(A1)37 b(V)-9 b(ersions)0 3939 y Fn(Curren)n(tly)25
-b(there)h(is)g(no)g(supp)r(ort)g(for)f(automated)h(upgrades.)35
-b(If)26 b(y)n(ou)g(ha)n(v)n(e)f(an)g(earlier)g(v)n(ersion)g(of)h(MeT)-7
-b(A1)26 b(installed)0 4039 y(and)36 b(w)n(an)n(t)f(to)g(upgrade,)i
-(here)e(are)g(some)g(tips)h(\(note:)53 b(all)36 b(programs)d(should)j
-(b)r(e)g(run)f(from)h(the)g(build)g(directory)0 4139
-y(unless)27 b(men)n(tioned)h(otherwise\):)125 4375 y
-Fc(\017)41 b Fn(T)-7 b(o)27 b(c)n(hec)n(k)f(whether)i(an)f
-(installation)g(w)n(as)g(successful,)g(run)208 4591 y
-Fm(#)43 b(./misc/sm.check.)o(sh)37 b(-P)125 4807 y Fc(\017)k
-Fn(T)-7 b(o)27 b(c)n(hec)n(k)f(whether)i(the)g(con\014guration)e
-(\014le)i(needs)f(c)n(hanges,)f(run)208 5022 y Fm($)43
-b(./misc/smconf)38 b(/etc/meta1/meta1)o(.c)o(onf)208
-5238 y Fn(If)25 b(the)h(\014le)f(is)g(syn)n(tactically)f(in)n(v)-5
-b(alid)25 b(for)g(this)g(v)n(ersion)f(of)h(MeT)-7 b(A1)25
-b(the)g(program)e(will)j(sho)n(w)e(those)h(errors.)34
-b(Use)208 5338 y Fm(-h)26 b Fn(as)h(argumen)n(t)g(to)g(see)h(the)g(a)n
-(v)-5 b(ailable)26 b(option,)h(e.g.,)g Fm(-u)g Fn(migh)n(t)h(b)r(e)g
-(useful.)1848 5768 y(15)p eop end
-%%Page: 16 17
-TeXDict begin 16 16 bop 0 1199 a Fl(Chapter)65 b(3)0
-1668 y Fp(Run-Time)77 b(Con\014guration)h(of)g(MeT)-19
-b(A1)0 2203 y Fk(3.1)135 b(Ov)l(erview)0 2439 y Fn(Con\014guration)20
-b(of)h(MeT)-7 b(A1)22 b(can)f(b)r(e)h(done)f(via)g(command)g(line)h
-(parameters)d(or)i(via)g(a)g(con\014guration)f(\014le)h(\(the)i(latter)
-e(is)0 2538 y(preferred,)26 b(the)h(former)f(o\013ers)f(only)i(a)f
-(small)g(subset)h(of)f(the)h(a)n(v)-5 b(ailable)26 b(con\014guration)f
-(options\).)36 b(If)27 b(a)f(con\014guration)0 2638 y(\014le)i(and)h
-(command)e(line)i(options)f(are)f(sp)r(eci\014ed,)i(then)g(the)f
-(options)g(are)f(curren)n(tly)h(pro)r(cessed)f(in)h(order,)g(i.e.,)g
-(later)0 2738 y(settings)d(o)n(v)n(erride)f(earlier)g(ones)g(for)h(the)
-h(same)f(options.)36 b(Information)24 b(ab)r(out)i(the)g(former)e(is)i
-(a)n(v)-5 b(ailable)24 b(b)n(y)h(in)n(v)n(oking)0 2837
-y(a)g(program)d(with)k(the)f(option)g Fm(-h)f Fn(\(MCP)h(curren)n(tly)f
-(uses)g Fm(syslog\(3\))e Fn(instead)i(of)h Fm(stderr)p
-Fn(\),)f(it)h(will)g(sho)n(w)f(the)i(usage)0 2937 y(as)j(w)n(ell)h(as)g
-(the)g(default)h(v)-5 b(alues.)44 b(The)30 b(syn)n(tax)g(of)g(the)g
-(con\014guration)f(\014les)h(is)g(sp)r(eci\014ed)g(in)h(the)f(follo)n
-(wing)f(sections.)0 3036 y(T)-7 b(o)31 b(actually)f(use)h(a)f
-(con\014guration)f(\014le,)j(the)g(option)e Fm(-f)43
-b($CONFIGFILE)26 b Fn(m)n(ust)31 b(b)r(e)h(used,)g(otherwise)e(the)h
-(programs)0 3136 y(use)26 b(only)f(the)h(built-in)h(default)f(v)-5
-b(alues,)26 b(but)g(not)g(a)g(con\014guration)e(\014le.)36
-b(Option)26 b(')p Fm(-V)p Fn(')f(can)g(b)r(e)i(used)f(to)f(sho)n(w)g(v)
-n(ersion)0 3236 y(information,)k(sp)r(ecifying)g(')p
-Fm(-V)p Fn(')g(m)n(ultiple)g(times)h(sho)n(ws)e(more)g(detail,)i(e.g.,)
-f(')p Fm(-VVVVV)p Fn(')e(will)i(sho)n(w)g(the)g(con\014guration)0
-3335 y(data)22 b(including)h(the)g(default)g(v)-5 b(alue)23
-b(for)f(\(almost\))h(ev)n(ery)e(option,)j(and)e(')p Fm(-VVVVVV)p
-Fn(')e(will)j(also)f(sho)n(w)g(all)g(a)n(v)-5 b(ailable)22
-b(\015ags.)0 3489 y(Some)36 b(con\014guration)e(options)h(can)g(b)r(e)i
-(set)e(via)h(maps,)h(these)f(maps)g(are:)52 b Fm(qmgr)p
-2669 3489 27 4 v 30 w(conf)34 b Fn(for)h(QMGR)h(\(see)g(Section)0
-3588 y(3.8.1\))27 b(and)g Fm(access)e Fn(for)i(SMTPS)h(\(indirectly)g
-(via)f(the)h(address)e(resolv)n(er,)f(see)j(Section)f(3.9.3\).)0
-3916 y Fk(3.2)135 b(Con\014guration)46 b(File)f(Syn)l(tax)0
-4152 y Fn(The)28 b(grammar)d(for)i(a)h(MeT)-7 b(A1)27
-b(con\014guration)f(\014le)i(is)f(v)n(ery)g(simple:)50
-4300 y(conf)199 b(::=)99 b(en)n(tries)50 4399 y(en)n(tries)110
-b(::=)99 b(en)n(try)27 b(*)50 4499 y(en)n(try)159 b(::=)99
-b(option)28 b Fc(j)f Fn(section)50 4598 y(section)99
-b(::=)g(k)n(eyw)n(ord)26 b([name)h(])h(")p Fc(f)p Fn(")e(en)n(tries)h
-(")p Fc(g)p Fn(")g([";"])50 4698 y(option)118 b(::=)99
-b(option-name)27 b("=")f(rhs)50 4798 y(rhs)237 b(::=)99
-b(v)-5 b(alue)28 b(";")f Fc(j)g Fn(")p Fc(f)p Fn(")f(v)-5
-b(alue-list)28 b(")p Fc(g)p Fn(")e([";"])0 4947 y(A)g(con\014guration)d
-(\014le)i(consists)g(of)g Fd(entries)p Fn(,)h(eac)n(h)e
-Fd(entry)h Fn(is)g(either)h(an)e Fd(option)j Fn(or)d(a)h
-Fd(se)l(ction)p Fn(.)36 b(An)26 b(option)f(has)f(a)h
-Fd(name)p Fn(,)0 5047 y(an)e(equal)f(sign,)i(and)f(a)g
-Fd(value)g Fn(terminated)g(b)n(y)g(a)g(semicolon)f(or)g(a)h(\(brac)n(k)
-n(eted\))f(list)i(of)f(v)-5 b(alues)22 b(separated)g(b)n(y)h(comma)3720
-5017 y Fi(1)3756 5047 y Fn(.)0 5146 y(A)k Fd(se)l(ction)g
-Fn(consists)g(of)f(a)h Fd(keywor)l(d)p Fn(,)i(an)d(optional)g
-Fd(name)p Fn(,)i(and)e(a)h(\(brac)n(k)n(eted\))f(sequence)g(of)h
-Fd(entries)p Fn(.)37 b(Keyw)n(ords)25 b(and)0 5246 y(options)31
-b(are)g(not)h(case)f(sensitiv)n(e.)49 b(The)31 b(la)n(y)n(out)g(of)h(a)
-f(con\014guration)f(\014le)i(do)r(es)g(not)f(matter,)i(i.e.,)g(inden)n
-(tation)f(and)0 5346 y(line)c(breaks)e(are)h(irrelev)-5
-b(an)n(t)26 b(\(in)i(general,)f(but)h(see)f(b)r(elo)n(w)g(for)g
-(strings\).)p 0 5420 1512 4 v 92 5473 a Fh(1)127 5497
-y Fg(A)c(trailing)g(comma)i(is)d(allo)n(w)n(ed)i(to)h(mak)n(e)f
-(writing)f(of)g(lists)g(simpler.)1848 5768 y Fn(16)p
-eop end
-%%Page: 17 18
-TeXDict begin 17 17 bop 0 523 a Fj(3.2.1)112 b(Con\014guration)39
-b(File)f(V)-9 b(alues)0 730 y Fn(V)i(alues)25 b(in)g(a)f
-(con\014guration)f(\014le)i(are)f(usually)h(strings)f(or)g(n)n(um)n(b)r
-(ers.)35 b(If)25 b(a)g(string)f(is)h(used,)g(then)h(it)f(should)f(b)r
-(e)i(quoted,)0 830 y(unless)31 b(it)h(con)n(tains)e(no)i(sp)r(ecial)f
-(c)n(haracters)e(whic)n(h)i(are)g(treated)g(sp)r(ecially)g(b)n(y)g(the)
-h(grammar.)46 b(If)32 b(a)f(string)f(is)i(v)n(ery)0 929
-y(long)27 b(it)h(can)f(b)r(e)h(brok)n(en)e(in)n(to)i(substrings)e
-(spread)h(out)h(o)n(v)n(er)d(sev)n(eral)h(lines)i(\(just)g(lik)n(e)g
-(strings)e(in)i(ANSI)g(C\),)g(e.g.,)87 1158 y Fm(somemessage)39
-b(=)k("this)f(is)h(a)g(very)f(long)g(string)f(which)g(is)i(spread)e(")
-218 1257 y("out)h(over)g(several)e(lines)i(because)f(otherwise)f(it)i
-(is)h(too)f(")218 1357 y("hard)f(too)i(read.";)0 1586
-y Fn(Numeric)33 b(v)-5 b(alues)33 b(can)f(ha)n(v)n(e)g(the)i(usual)e
-(pre\014xes)h(\(kno)n(wn)f(from)h(the)h(programming)c(language)i(C\))h
-(of)g Fm(0x)f Fn(for)h(hex-)0 1685 y(adecimal)25 b(\(with)h(digits)f
-Fm(0)g Fn(to)g Fm(9)p Fn(,)h Fm(A)f Fn(to)g Fm(F)p Fn(,)g(and)g
-Fm(a)g Fn(to)g Fm(f)p Fn(\))g(and)g Fm(0)g Fn(for)g(o)r(ctal)g(\(with)h
-(digits)g Fm(0)e Fn(to)i Fm(7)p Fn(\).)36 b(V)-7 b(alid)25
-b(b)r(o)r(olean)g(v)-5 b(alues)0 1785 y(are)27 b Fm(0)p
-Fn(,)g Fm(false)p Fn(,)f Fm(off)g Fn(for)h(false,)g(and)h
-Fm(1)p Fn(,)f Fm(true)p Fn(,)f Fm(on)h Fn(for)g(true)h(\(case)f
-(insensitiv)n(e\).)0 1938 y(In)35 b(some)f(cases)g(it)h(is)g(p)r
-(ossible)g(to)f(ha)n(v)n(e)g Fd(units)g Fn(for)g(v)-5
-b(alues.)59 b(Curren)n(tly)34 b(time)h(and)g(size)f(v)-5
-b(alues)35 b(mak)n(e)f(use)g(of)h(this)0 2038 y(feature.)h(V)-7
-b(alid)27 b(time)h(units)f(are)e Fm(w)i Fn(for)f(w)n(eeks,)g
-Fm(d)h Fn(for)f(da)n(ys,)g Fm(h)g Fn(for)g(hours,)h Fm(m)f
-Fn(for)g(min)n(utes,)h(and)g Fm(s)f Fn(for)h(seconds.)35
-b(V)-7 b(alid)0 2137 y(units)28 b(for)f(size)g(are)g
-Fm(B)g Fn(for)g(b)n(ytes,)g Fm(KB)g Fn(for)g(kilo)g(b)n(ytes,)g
-Fm(MB)g Fn(for)g(mega)g(b)n(ytes,)g(and)h Fm(GB)e Fn(for)i(giga)e(b)n
-(ytes.)36 b(It)28 b(is)g(allo)n(w)n(ed)e(to)0 2237 y(sp)r(ecify)31
-b(a)f(sequence)g(of)h(n)n(um)n(b)r(ers)f(and)g(units,)i(e.g.,)f
-Fm(1h)43 b(5m)g(12s)p Fn(.)h(Unless)31 b(otherwise)e(sp)r(eci\014ed,)j
-(the)f(default)g(units)0 2337 y(for)g(times)i(and)e(sizes)h(in)g(a)g
-(con\014guration)e(\014le)i(are)f Fm(s)h Fn(and)g Fm(B)p
-Fn(,)f(resp)r(ectiv)n(ely;)j(for)d(those)h(v)-5 b(alues)31
-b(these)h(units)h(can)e(b)r(e)0 2436 y(used.)0 2763 y
-Fk(3.3)135 b(Example)46 b(Con\014guration)g(File)0 2999
-y Fn(The)21 b(installation)f(script)h(creates)e(the)j(\014le)f
-Fm(meta1.conf)c Fn(in)k(the)g(con\014guration)e(directory)h(\()p
-Fm(/etc/meta1)p Fn(,)e(see)j(Section)0 3098 y(2.4\).)34
-b(Chec)n(k)22 b(the)g(commen)n(ts)g(in)g(the)h(\014le)f(and)g(edit)g
-(it)h(if)f(required.)34 b(A)23 b(con\014guration)d(\014le)i(for)g
-(meta1)f(con)n(tains)g(sev)n(eral)0 3198 y(sections:)34
-b(a)23 b(global)f(section)h(whic)n(h)h(sp)r(eci\014es)f(the)h(lo)r
-(cations)e(of)h(so)r(c)n(k)n(ets)f(and)i(directories)e(that)h(are)g
-(used)g(b)n(y)g(m)n(ultiple)0 3298 y(comp)r(onen)n(ts,)31
-b(and)f(one)g(section)f(eac)n(h)h(for)g(QMGR,)g(SMAR,)h(SMTP)f(serv)n
-(er,)f(and)h(SMTP)g(clien)n(t.)45 b(Other)30 b(sections)0
-3397 y(ma)n(y)d(de\014ne)h(services)e(that)i(are)e(started)i(b)n(y)f
-(MCP)-7 b(,)27 b(e.g.,)g(a)h(lo)r(cal)f(mailer.)0 3626
-y Fm(CDB_base_directo)o(ry)37 b(=)43 b("/var/spool/meta1)o(/")o(;)0
-3825 y(qmgr)f({)87 3925 y(AQ_max_entries)c(=)43 b(8192;)87
-4024 y(smtpc)f({)h(initial_connecti)o(on)o(s)38 b(=)43
-b(19;)f(max_connections)37 b(=)44 b(101;)e(})87 4124
-y(smtps)g({)h(max_connections)37 b(=)43 b(5;)g(max_connection_ra)o(te)o
-(=1)o(60;)37 b(})87 4224 y(max_errors_per_DS)o(N=)o(16)o(;)87
-4323 y(wait_for_server)h(=)43 b(4;)f(wait_for_client)c(=)43
-b(4;)87 4423 y(start_action)c(=)k(wait;)e(user)h(=)i(meta1q;)87
-4522 y(restart_dependenc)o(ie)o(s)37 b(=)44 b({)f(smtps,)e(smtpc,)g
-(smar)h(};)87 4622 y(path)g(=)h("/usr/libexec/qmg)o(r")o(;)38
-b(arguments)h(=)44 b("qmgr)d(-f)i(/etc/meta1/meta1)o(.c)o(onf)o(";)0
-4722 y(})0 4921 y(smtps)f({)h(flags)e(=)i({8bitmime};)c(CDB_gid)i(=)i
-(261;)f(IO_timeout)e(=)j(5m3s;)87 5021 y(listen_socket)38
-b({)44 b(type)d(=)j(inet;)d(port)h(=)h(25;)g(})87 5120
-y(start_action)c(=)k(pass;)e(pass_fd_socket)d(=)43 b(smtps/smtpsfd;)87
-5220 y(user)f(=)h(meta1s;)e(path)h(=)h(/usr/libexec/smt)o(ps;)87
-5320 y(arguments)d(=)j("smtps)e(-f)i(/etc/meta1/meta1)o(.co)o(nf)o(";)
-37 b(})0 5519 y(smtpc)42 b({)1848 5768 y Fn(17)p eop
-end
-%%Page: 18 19
-TeXDict begin 18 18 bop 87 523 a Fm(Log_Level)40 b(=)j(12;)g
-(IO_timeout)c(=)k(6m;)g(wait_for_server)37 b(=)43 b(4;)87
-623 y(start_action)c(=)k(wait;)e(user)h(=)i(meta1c;)c(path)i(=)h
-("/usr/libexec/smt)o(pc")o(;)87 722 y(arguments)d(=)j("smtpc)e(-f)i
-(/etc/meta1/meta1)o(.co)o(nf)o(";)37 b(})0 922 y(smar)42
-b({)87 1021 y(Log_Level)e(=)j(12;)87 1121 y(nameserver)d(=)j
-({10.10.10.9,)38 b(127.0.0.1};)87 1220 y(DNS_timeout)h(=)k(6;)87
-1320 y(start_action)c(=)k(wait;)e(user)h(=)i(meta1m;)c
-(restart_dependenc)o(ie)o(s)e(=)43 b({)g(smtps,)e(qmgr)h(};)87
-1420 y(path)g(=)h("/usr/libexec/sma)o(r")o(;)38 b(arguments)h(=)44
-b("smar)d(-f)i(/etc/meta1/meta1)o(.c)o(onf)o(";)0 1519
-y(})0 1847 y Fk(3.4)135 b(Common)46 b(Global)f(Con\014guration)0
-2083 y Fn(All)28 b(of)g(the)g(follo)n(wing)e(options)h(ha)n(v)n(e)g
-(defaults)g(and)h(should)f(only)g(b)r(e)h(c)n(hanged)f(if)h(necessary)
--7 b(.)101 2319 y(1.)42 b Fm(hostname)p Fn(:)29 b(set)18
-b(the)h(hostname)f(to)g(use)g(for)g(the)h(v)-5 b(arious)17
-b(comp)r(onen)n(ts.)33 b(This)18 b(can)g(b)r(e)h(set)g(if)f
-Fm(gethostbyname\(3\))208 2419 y Fn(do)r(es)27 b(not)g(return)h(a)f(v)
--5 b(alid)27 b(\(fully)i(quali\014ed\))e(hostname)h(\(format:)36
-b(string\).)101 2585 y(2.)42 b Fm(CDB_base_direct)o(ory)o
-Fn(:)31 b(base)26 b(directory)f(of)h(CDB)h(\(format:)36
-b(string\);)27 b(this)g(should)f(either)h(b)r(e)g(empt)n(y)f(\(whic)n
-(h)208 2684 y(is)g(the)h(default\))g(or)f(a)g(path)h(to)f(a)g
-(directory)f(including)i(a)f(trailing)g(slash;)g(the)h(CDB)g(library)e
-(curren)n(tly)h(simply)208 2784 y(app)r(ends)20 b(the)g(directory)f
-(names)h(\(see)g(Section)h(2.4.1\))e(to)h(it.)35 b(It)20
-b(migh)n(t)h(b)r(e)f(useful)h(to)f(mo)n(v)n(e)f(some)h(sub)r
-(directories)208 2884 y(to)27 b(di\013eren)n(t)h(disks)f(\(b)n(y)h
-(creating)e(\(sym)n(b)r(olic\))i(links)f(\()p Fm(ln\(1\))p
-Fn(\)\))g(to)g(spread)g(the)h(I/O)e(load.)101 3050 y(3.)42
-b Fm(SMAR_socket)p Fn(:)30 b(so)r(c)n(k)n(et)23 b(created)g(b)n(y)g
-(the)h(address)f(resolv)n(er)e(o)n(v)n(er)h(whic)n(h)i(clien)n(ts)f
-(\(SMTPS,)h(QMGR\))g(can)g(send)208 3149 y(requests)i(\(format:)37
-b(string\).)101 3315 y(4.)42 b Fm(SMTPC_socket)p Fn(:)32
-b(comm)n(unication)26 b(so)r(c)n(k)n(et)h(b)r(et)n(w)n(een)g(SMTPC)h
-(and)f(QMGR)h(\(format:)36 b(string\).)101 3482 y(5.)42
-b Fm(SMTPS_socket)p Fn(:)32 b(comm)n(unication)26 b(so)r(c)n(k)n(et)h
-(b)r(et)n(w)n(een)g(SMTPS)h(and)f(QMGR)h(\(format:)37
-b(string\).)0 3718 y(The)22 b(so)r(c)n(k)n(ets)e(are)h(curren)n(tly)g
-(Unix)h(domain)g(so)r(c)n(k)n(ets)e(only)-7 b(,)23 b(hence)f(the)g(v)-5
-b(alue)22 b(is)g(simply)g(the)g(pathname)g(of)f(the)i(so)r(c)n(k)n(et.)
-0 4046 y Fk(3.5)135 b(Common)46 b(Con\014guration)f(Options)0
-4281 y Fn(There)29 b(is)h(curren)n(tly)f(one)h(con\014guration)e
-(option)i(whic)n(h)g(is)g(the)g(same)g(across)e(all)i(mo)r(dules)g(but)
-g(is)g(not)g(sp)r(eci\014ed)g(in)0 4381 y(the)e(global)e(section)i(b)r
-(ecause)f(it)h(is)f(sp)r(eci\014c)h(to)g(the)g(individual)f(mo)r
-(dules.)101 4617 y(1.)42 b Fm(log)p Fn(:)35 b(this)28
-b(is)g(a)f(section)g(with)h(the)g(follo)n(wing)f(options:)243
-4783 y(\(a\))41 b Fm(facility)p Fn(:)31 b(see)21 b Fm(syslog\(3\))c
-Fn(for)k(v)-5 b(alid)22 b(facilities,)g(here)f(are)f(some)h(v)-5
-b(alid)22 b(options)e(pro)n(vided)h(the)g(OS)g(o\013ers)390
-4883 y(them:)38 b Fm(daemon)p Fn(,)25 b Fm(mail)p Fn(,)h
-Fm(auth)p Fn(,)g Fm(local0)p Fn(,)f(etc.)238 5016 y(\(b\))42
-b Fm(ident)p Fn(:)50 b(iden)n(ti\014cation)34 b(string)h(for)f
-Fm(openlog\(3\))p Fn(,)f(defaults)i(to)g(name)f(of)h(the)g(mo)r(dules.)
-59 b(It)35 b(migh)n(t)g(b)r(e)390 5115 y(useful)28 b(to)g(c)n(hose)e
-(other)h(iden)n(ti\014ers,)h(e.g.,)f Fm(MeTA1)e Fn(or)i
-Fm(MeTA1QMGR)p Fn(.)247 5248 y(\(c\))42 b Fm(options)p
-Fn(:)34 b(options)25 b(for)h Fm(openlog\(3\))c Fn(\(without)27
-b(the)f(leading)g Fm(LOG)p 2535 5248 27 4 v 30 w Fn(\))h(as)e(pro)n
-(vided)g(b)n(y)h(the)h(OS,)f(e.g.,)g Fm(pid)390 5348
-y Fn(or)h Fm(ndelay)p Fn(.)208 5514 y(Example:)1848 5768
-y(18)p eop end
-%%Page: 19 20
-TeXDict begin 19 19 bop 208 523 a Fm(qmgr)41 b({)j(log)e({)h(facility)d
-(=)k(daemon;)c(ident=meta1-qmgr;)d(})43 b(})208 623 y(smtps)e({)i(log)g
-({)g(facility)d(=)j(mail;)f(ident=meta1-MTA;)37 b(})43
-b(})208 836 y Fn(Note:)36 b(debug)28 b(output)g(is)g(curren)n(tly)e
-(sen)n(t)i(to)f Fm(stdout)p Fn(;)e Fm(syslog\(3\))f Fn(is)k(not)f(used)
-h(for)f(debugging.)0 1070 y(All)j(mo)r(dules)h(ha)n(v)n(e)d(an)i
-(option)g(to)g(set)g(the)g(amoun)n(t)g(of)g(logging)e(\()p
-Fm(log_level)p Fn(\))f(that)j(should)g(b)r(e)h(done.)43
-b(The)31 b(larger)0 1170 y(the)i(v)-5 b(alue)33 b(the)g(more)f
-(information)g(is)h(logged.)51 b(F)-7 b(or)32 b(normal)g(op)r(eration)f
-(a)i(v)-5 b(alue)32 b(of)h(9)f(is)h(recommended.)52 b(During)0
-1270 y(testing)28 b(v)-5 b(alues)27 b(of)g(12)g(to)h(14)e(are)h
-(useful.)0 1597 y Fk(3.6)135 b(P)l(athnames)46 b(for)f(Files,)h
-(Directories,)h(and)e(Maps)0 1833 y Fn(Most)18 b(names)g(of)h(\014les)g
-(\(including)g(maps\))f(and)h(directories)e(in)i(the)g(con\014guration)
-e(\014le)h(ha)n(v)n(e)g(a)g(default)h(name)f(\(compiled)0
-1932 y(in)n(to)31 b(the)g(binary\))f(without)h(an)g(absolute)f(path,)i
-(e.g.,)f Fm(aliases.db)p Fn(.)43 b(If)31 b(a)f(pathname)h(is)g(not)f
-(explicitly)h(set)g(in)g(the)0 2032 y(con\014guration)d(\014le)j(or)e
-(do)r(es)h(not)g(use)g(a)g(absolute)f(path)h(\(i.e.,)h(b)r(egins)f
-(with)h(a)f(slash\),)g(then)h(the)f(default)h(is)f(relativ)n(e)0
-2132 y(to)d(either)101 2350 y(1.)42 b(the)28 b(con\014guration)e
-(directory:)35 b(maps)27 b(and)h(con\014guration)e(\014les,)h(e.g.,)h
-Fm(aliases.db)23 b Fn(and)28 b Fm(cert_file)p Fn(.)101
-2515 y(2.)42 b(the)f(main)f(queue)h(directory:)62 b(pathnames)40
-b(of)h(so)r(c)n(k)n(ets,)h(and)f(databases)e(to)i(store)e(en)n(v)n
-(elop)r(e)h(information)208 2615 y(\(IBDB,)28 b(DEFEDB\))f(or)g
-(message)f(con)n(ten)n(ts)h(\(CDB\).)0 2833 y(The)32
-b(paths)f(for)g(\014les)h(men)n(tioned)g(in)g(case)e(1)i(are)e(tak)n
-(en)i(relativ)n(e)e(to)i(the)g(path)f(of)h(the)g(con\014guration)e
-(\014le)i(whic)n(h)g(is)0 2932 y(passed)27 b(via)g(the)h
-Fm(-f)f Fn(option)g(to)g(the)h(v)-5 b(arious)27 b(mo)r(dules.)37
-b(F)-7 b(or)27 b(example:)36 b(if)28 b(SMAR)h(is)e(started)g(as)0
-3085 y Fm(/usr/libexec/sma)o(r)38 b(-f)k(/etc/meta1/meta1.)o(co)o(nf)0
-3239 y Fn(then)23 b(the)f(pathname)h(used)f(for)g(the)g(aliases)f(map)h
-(is)h Fm(/etc/meta1/alia)o(se)o(s.d)o(b)p Fn(.)29 b(This)22
-b(applies)g(to)g(the)h(SMAR)g(maps)0 3338 y(aliases,)28
-b(mailertable,)g(and)h(access)e(\(3.9.2\),)i(the)g(QMGR)g
-Fm(qmgr)p 2060 3338 27 4 v 30 w(conf)e Fn(map)h(\(3.8.1\),)h(and)g(the)
-g(ST)-7 b(AR)g(TTLS)29 b(related)0 3438 y(\014les)f(and)f(directories)f
-(used)i(b)n(y)f(the)h(SMTP)f(serv)n(er)f(\(3.10\))h(and)g(clien)n(t)h
-(\(3.11\).)0 3591 y(The)d(paths)g(for)f(\014les)h(men)n(tioned)g(in)h
-(case)e(2)g(are)g(tak)n(en)h(relativ)n(e)e(to)i(the)h(execution)e
-(directory)-7 b(.)35 b(All)26 b(MeT)-7 b(A1)25 b(mo)r(dules)0
-3691 y(should)h(b)r(e)h(started)f(\(via)g(MCP\))g(in)h(the)g(main)f
-(queue)g(directory)g(\(default:)37 b Fm(/var/spool/meta)o(1)p
-Fn(,)21 b(see)26 b(Section)g(2.4\).)0 3844 y(See)i(the)g(v)-5
-b(arious)27 b(con\014guration)f(options)h(explained)h(b)r(elo)n(w)f(ho)
-n(w)g(to)h(o)n(v)n(erride)e(the)i(defaults.)38 b(Note:)f(relativ)n(e)27
-b(path-)0 3944 y(names)g(sp)r(eci\014ed)h(in)g(the)g(con\014guration)e
-(\014le)i(are)e(\(curren)n(tly\))h(alw)n(a)n(ys)f(relativ)n(e)g(to)i
-(the)g(main)f(queue)h(directory)-7 b(.)0 4272 y Fk(3.7)135
-b(Con\014guration)46 b(for)f(MCP)0 4507 y Fn(Ev)n(ery)34
-b(section)i(in)g(a)g(MeT)-7 b(A1)36 b(con\014guration)e(\014le)i(that)h
-(refers)e(to)g(one)h(of)g(its)g(four)g(main)g(comp)r(onen)n(ts)f
-(\(QMGR,)0 4607 y(SMTPS,)h(SMTPC,)g(and)g(SMAR;)g(see)g(Section)g
-(1.1.1\))f(has)g(some)h(options)f(that)h(are)f(relev)-5
-b(an)n(t)36 b(for)f(MCP)-7 b(.)36 b(These)0 4706 y(MCP)27
-b(options)g(are:)101 4940 y(1.)42 b Fm(start_action)p
-Fn(:)32 b(one)27 b(of)g Fm(nostartaccept)p Fn(,)c Fm(accept)p
-Fn(,)i Fm(pass)p Fn(,)h Fm(wait)g Fn(\(required\).)101
-5106 y(2.)42 b Fm(listen_socket)p Fn(:)36 b(this)30 b(is)g(a)g
-(subsection)f(that)i(sp)r(eci\014es)f(the)g(so)r(c)n(k)n(et)f(on)h
-(whic)n(h)g(a)f(pro)r(cess)g(should)h(listen.)44 b(It)208
-5205 y(m)n(ust)21 b(b)r(e)h(sp)r(eci\014ed)g(for)f(an)n(y)g
-Fm(start_action)c Fn(except)k Fm(wait)p Fn(.)34 b(There)21
-b(are)f(t)n(w)n(o)h(di\013eren)n(t)h(so)r(c)n(k)n(et)e(t)n(yp)r(es)i(a)
-n(v)-5 b(ailable:)243 5387 y(\(a\))41 b Fm(type)h(=)h(inet)458
-5519 y Fn(i.)e Fm(port)p Fn(:)36 b(p)r(ort)27 b(n)n(um)n(b)r(er)h(on)f
-(whic)n(h)g(pro)r(cess)g(should)g(listen)h(\(format:)37
-b(n)n(umeric\).)1848 5768 y(19)p eop end
-%%Page: 20 21
-TeXDict begin 20 20 bop 435 523 a Fn(ii.)41 b Fm(address)p
-Fn(:)33 b(IP)24 b(address)f(on)h(whic)n(h)g(pro)r(cess)f(should)h
-(listen,)h(if)g(none)f(is)g(sp)r(eci\014ed)h(the)f(pro)r(cess)g
-(listens)545 623 y(on)k(all)f(lo)r(cal)g(\(IPv4\))g(addresses)f
-(\(format:)37 b(IPv4)26 b(address\).)238 756 y(\(b\))42
-b Fm(type)g(=)h(unix)458 888 y Fn(i.)e Fm(path)p Fn(:)36
-b(pathname)27 b(of)h(Unix)g(Domain)f(so)r(c)n(k)n(et)g(on)g(whic)n(h)h
-(pro)r(cess)e(should)h(listen)h(\(format:)37 b(string\).)435
-1005 y(ii.)k Fm(umask)p Fn(:)35 b Fm(umask)26 b Fn(for)h(so)r(c)n(k)n
-(et)g(\(format:)36 b(n)n(umeric\).)412 1121 y(iii.)41
-b Fm(user)p Fn(:)36 b(o)n(wner)26 b(of)i(so)r(c)n(k)n(et)e(\(format:)37
-b(string\).)414 1237 y(iv.)k Fm(group)p Fn(:)35 b(group)27
-b(of)g(so)r(c)n(k)n(et)g(\(format:)37 b(string\).)101
-1420 y(3.)42 b Fm(pass_fd_socket)p Fn(:)31 b(pathname)c(of)h(Unix)g
-(Domain)f(so)r(c)n(k)n(et)g(to)g(pass)g(a)g(\014le)h(descriptor)e(to)i
-(the)g(pro)r(cess.)101 1586 y(4.)42 b Fm(user)p Fn(:)35
-b(user)27 b(name)g(to)h(run)f(pro)r(cess.)101 1752 y(5.)42
-b Fm(group)p Fn(:)34 b(group)27 b(name)g(to)h(run)f(pro)r(cess.)101
-1918 y(6.)42 b Fm(restart_depende)o(nci)o(es)o Fn(:)31
-b(list)c(of)g(other)g(MeT)-7 b(A1)26 b(comp)r(onen)n(ts)h(that)g(need)g
-(to)g(b)r(e)h(restarted)e(when)h(this)g(one)208 2017
-y(is)g(restarted)f(\(or)h(crashes\).)101 2183 y(7.)42
-b Fm(path)p Fn(:)35 b(path)28 b(to)f(program)f(to)h(execute)h
-(\(required\).)101 2350 y(8.)42 b Fm(arguments)p Fn(:)33
-b(argumen)n(ts)26 b(\(argv\),)h(m)n(ust)g(start)g(with)i(name)e(of)h
-(program,)d(see)i Fm(execv\(2\))e Fn(\(required\).)101
-2516 y(9.)42 b Fm(pass_id)p Fn(:)30 b(option)21 b(to)f(use)h(to)g(pass)
-f(a)g(unique,)j(n)n(umeric)d(iden)n(ti\014er)h(to)g(the)g(spa)n(wned)f
-(pro)r(cess)f(via)i(the)g(command)208 2615 y(line.)37
-b(The)27 b(option)h(will)f(b)r(e)h(inserted)g(as)f(\014rst)g(argumen)n
-(t.)36 b(Example:)208 2814 y Fm(smtpc)41 b({)i(pass_id)e(=)i("-i";)f
-(min_processes)c(=)43 b(4;)g(max_processes)38 b(=)43
-b(4;)295 2914 y(path)f(=)h(/usr/libexec/smt)o(pc)o(;)38
-b(arguments)h(=)44 b("smtpc)d(-f)h(meta1.conf";)d(})208
-3113 y Fn(will)25 b(cause)f(MCP)h(to)g(start)f(four)h
-Fm(smtpc)e Fn(pro)r(cesses,)h(eac)n(h)g(with)h(the)h(options)e
-Fm(-i)43 b Fb(I)7 b(D)45 b Fm(-f)e(meta1.conf)21 b Fn(where)208
-3213 y Fb(I)7 b(D)29 b Fn(is)f(replaced)e(with)j(a)e(unique)h(iden)n
-(ti\014er.)0 3449 y(Notes)f(ab)r(out)h Fm(start_action)p
-Fn(:)125 3669 y Fc(\017)41 b Fn(F)-7 b(or)19 b Fm(start_action)38
-b(=)44 b(pass)18 b Fn(the)i(option)f Fm(pass_fd_socket)14
-b Fn(m)n(ust)20 b(b)r(e)h(sp)r(eci\014ed;)h(in)e(this)g(case)f(MCP)h
-(binds)g(to)208 3769 y(the)27 b(sp)r(eci\014ed)g(so)r(c)n(k)n(et)e(\()p
-Fm(listen_socket)p Fn(\))d(and)27 b(passes)e(it)i(via)g(the)g(Unix)g
-(domain)f(so)r(c)n(k)n(et)g(\()p Fm(pass_fd_socket)p
-Fn(\))208 3868 y(to)h(the)h(started)f(pro)r(cess.)125
-4034 y Fc(\017)41 b Fn(F)-7 b(or)25 b Fm(start_action)39
-b(=)k(nostartaccept)21 b Fn(MCP)26 b(w)n(aits)g(for)g(incoming)g
-(connections,)g(and)g(then)h(starts)f(a)g(pro-)208 4134
-y(cess)h(to)g(handle)h(a)f(single)g(connection.)125 4300
-y Fc(\017)41 b Fn(F)-7 b(or)35 b Fm(start_action)k(=)k(accept)33
-b Fn(MCP)j(binds)h(to)e(the)i(so)r(c)n(k)n(et)e(and)h(then)g(starts)g
-(a)f(pro)r(cess)g(to)h(handle)g(the)208 4399 y(connections)26
-b(without)i(w)n(aiting)f(for)g(an)h(actual)f(request.)125
-4566 y Fc(\017)41 b Fn(F)-7 b(or)27 b Fm(start_action)39
-b(=)k(wait)26 b Fn(MCP)i(simply)g(starts)g(the)g(requested)g(n)n(um)n
-(b)r(er)f(of)i(pro)r(cesses)d(without)j(passing)208 4665
-y(them)e(an)n(y)g(op)r(en)g(connections.)36 b(This)27
-b(is)g(in)n(tended)h(for)e(pro)r(cesses)g(that)h(do)g(not)g(comm)n
-(unicate)g(with)g(external)208 4765 y(clien)n(ts.)0 4984
-y(MCP)h(is)g(curren)n(tly)g(a)g(generic)f(con)n(trol)g(program)g(that)i
-(do)r(es)f Fd(not)g Fn(ha)n(v)n(e)f(an)n(y)h Fd(builtin)i(know)t(le)l
-(dge)h Fn(ab)r(out)d(the)h(v)-5 b(arious)0 5084 y(MeT)e(A1)28
-b(mo)r(dules.)37 b(Hence)27 b(the)h(MCP)g(options)f(for)g(eac)n(h)g
-(MeT)-7 b(A1)27 b(comp)r(onen)n(t)g(m)n(ust)h(b)r(e)g(sp)r(eci\014ed)g
-(prop)r(erly)-7 b(,)27 b(there)0 5184 y(are)32 b(no)g(builtin)i
-(defaults)f(that)g(could)g(b)r(e)g(asso)r(ciated)e(with)i(the)h
-(functionalit)n(y)e(of)h(the)g(v)-5 b(arious)32 b(MeT)-7
-b(A1)33 b(mo)r(dules.)0 5283 y(The)g(default)g(con\014guration)e
-(\014le)h(created)g(b)n(y)h(the)f(installation)h(program)d(con)n(tains)
-i(the)h(correct)e(defaults.)52 b(These)0 5383 y(should)27
-b(only)h(b)r(e)g(c)n(hanged)e(if)i(really)f(necessary)-7
-b(.)1848 5768 y(20)p eop end
-%%Page: 21 22
-TeXDict begin 21 21 bop 0 523 a Fk(3.8)135 b(Con\014guration)46
-b(for)f(QMGR)0 758 y Fn(The)28 b(follo)n(wing)e(con\014guration)g
-(options)h(are)g(v)-5 b(alid)27 b(for)h(QMGR:)101 980
-y(1.)42 b Fm(AQ_max_entries)p Fn(:)j(maxim)n(um)35 b(n)n(um)n(b)r(er)f
-(of)h(en)n(tries)f(in)i(A)n(Q)e(\(activ)n(e)g(queue\))h(\(unit:)53
-b(en)n(tries\).)58 b(Note:)51 b(this)208 1080 y(v)-5
-b(alue)27 b(m)n(ust)h(b)r(e)g(larger)d(than)j(the)g(largest)e(n)n(um)n
-(b)r(er)i(of)f(recipien)n(ts)g(accepted)h(b)n(y)f(a)g(single)g
-(transaction.)101 1240 y(2.)42 b Fm(conf)p Fn(:)58 b(name)39
-b(of)g(con\014guration)e(map)i(\(including)h(extension\),)i(see)d
-(Section)g(3.8.1)f(for)g(details.)72 b(See)39 b(also)208
-1339 y(Section)27 b(3.6)g(ab)r(out)g(relativ)n(e)g(pathnames.)101
-1500 y(3.)42 b Fm(control_socket)p Fn(:)35 b(sp)r(ecify)30
-b(pathname)g(of)f(\\con)n(trol")f(so)r(c)n(k)n(et)g(\(for)i(querying)e
-(and)i(making)f(requests\).)43 b(This)208 1599 y(so)r(c)n(k)n(et)26
-b(can)h(b)r(e)h(used)g(b)n(y)f(the)h(query/con)n(trol)d(program)h
-Fm(qmgrctl)p Fn(,)f(see)i(Section)g(4.6.3.)101 1759 y(4.)42
-b(subsection)27 b Fm(DEFEDB)p Fn(:)243 1919 y(\(a\))41
-b Fm(base_directory)p Fn(:)31 b(home)d(directory)e(for)h(DEFEDB.)238
-2046 y(\(b\))42 b Fm(log_directory)p Fn(:)30 b(log)24
-b(directory)g(for)g(DEFEDB.)h(F)-7 b(or)24 b(b)r(etter)h(p)r
-(erformance,)f(this)i(directory)d(can)h(b)r(e)i(set)390
-2146 y(to)i(p)r(oin)n(t)f(to)h(a)f(di\013eren)n(t)h(disk)f(than)h(the)g
-(base)f(directory)f(of)i(DEFEDB.)101 2306 y(5.)42 b(subsection)27
-b Fm(DSN_handling)p Fn(:)243 2466 y(\(a\))41 b Fm(merge_delay_max)p
-Fn(:)31 b(maxim)n(um)c(time)h(to)g(w)n(ait)f(for)g(merging)g(m)n
-(ultiple)h(DSNs)g(in)n(to)f(one)h(\(unit:)38 b(s\).)238
-2593 y(\(b\))k Fm(flags)p Fn(:)35 b(con\014guration)26
-b(\015ags:)458 2720 y(i.)41 b Fm(header_only)p Fn(:)32
-b(include)25 b(only)g(the)h(headers)e(in)h(a)g(DSN;)h(b)n(y)f(default)h
-(the)g(\014rst)f(b)r(ounce)g(includes)g(the)545 2820
-y(en)n(tire)j(message)e(and)h(subsequen)n(t)g(ones)g(include)h(only)g
-(the)g(headers.)435 2933 y(ii.)41 b Fm(MIME_Format)p
-Fn(:)31 b(use)25 b(MIME)f(to)h(structure)f(a)g(DSN.)i(Note:)35
-b(this)25 b(is)g(not)f(\(y)n(et\))h(a)g(DSN)g(in)g(the)g(format)545
-3033 y(sp)r(eci\014ed)j(b)n(y)g(RF)n(C)f(3464)f([MV03)o(].)247
-3160 y(\(c\))42 b Fm(max_errors_per_DS)o(N)p Fn(:)35
-b(maxim)n(um)40 b(n)n(um)n(b)r(er)h(of)g(error)d(messages)h(\(failed)j
-(recipien)n(ts\))e(in)h(a)g(b)r(ounce)390 3259 y(\(DSN\))29
-b(\(unit:)38 b(en)n(tries\).)101 3419 y(6.)k Fm(double_bounce_a)o(ddr)o
-(es)o(s)p Fn(:)26 b(RF)n(C)19 b(2821)d(address)h(for)h(double)g(b)r
-(ounces;)k(defaults)c(to)g Fm(<postmaster@)p Fn(hostname)p
-Fm(>)p Fn(.)101 3579 y(7.)42 b(subsection)27 b Fm(IBDB)p
-Fn(:)243 3740 y(\(a\))41 b Fm(max_commit_delay)p Fn(:)31
-b(maxim)n(um)c(time)h(b)r(et)n(w)n(een)g(commits)f(to)h(IBDB)f(\(unit:)
-38 b Fb(\026)p Fn(s\))238 3866 y(\(b\))k Fm(size)p Fn(:)36
-b(maxim)n(um)27 b(size)g(of)h(eac)n(h)f(IBDB)g(\014le)h(\(unit:)38
-b(B\).)247 3993 y(\(c\))k Fm(max_open_TAs)p Fn(:)30 b(maxim)n(um)23
-b(n)n(um)n(b)r(er)g(of)g(op)r(en)g(transactions)e(in)i(IBDB)h(b)r
-(efore)e(a)h(commit)g(is)g(p)r(erformed)390 4093 y(\(unit:)38
-b(en)n(tries\).)208 4253 y(Note:)32 b(the)20 b(con\014guration)e
-(\014le)h(o\013ers)g(no)g(w)n(a)n(y)f(to)h(sp)r(ecify)h(a)e(base)h
-(directory)f(for)h(IBDB,)g(ho)n(w)n(ev)n(er,)g(the)h(directory)208
-4353 y(can)27 b(b)r(e)h(easily)f(mo)n(v)n(ed)f(elsewhere)h(and)g(a)g
-(\(sym)n(b)r(olic\))h(link)g(\()p Fm(ln\(1\))p Fn(\))e(can)h(b)r(e)h
-(added.)101 4513 y(8.)42 b(subsection)27 b Fm(IQDB)p
-Fn(:)243 4673 y(\(a\))41 b Fm(max_cache_entries)o Fn(:)36
-b(maxim)n(um)30 b(n)n(um)n(b)r(er)f(of)h(en)n(tries)f(in)i(IQDB)e(cac)n
-(he)h(\(unit:)42 b(en)n(tries\).)i(This)29 b(m)n(ust)390
-4773 y(b)r(e)f(larger)e(than)i(the)g(sum)f(of)h(all)f(recipien)n(ts)g
-(in)h(op)r(en)g(transactions.)238 4900 y(\(b\))42 b Fm
-(hash_table_entrie)o(s)p Fn(:)35 b(size)30 b(of)g(hash)f(table)h(for)g
-(IQDB)f(\(unit:)43 b(en)n(tries\).)g(This)30 b(m)n(ust)g(b)r(e)g
-(larger)e(than)390 4999 y Fm(max_cache_entries)o Fn(.)101
-5159 y(9.)42 b Fm(log_level)p Fn(:)33 b(logging)26 b(lev)n(el.)60
-5320 y(10.)41 b Fm(min_disk_space)p Fn(:)27 b(minim)n(um)22
-b(amoun)n(t)e(of)h(free)f(disk)h(space)f(\(unit:)35 b(KB\).)20
-b(This)h(v)-5 b(alue)21 b(should)f(b)r(e)i(signi\014can)n(tly)208
-5419 y(larger)30 b(than)j(the)g(maxim)n(um)g(size)f(of)h(a)f(message)g
-(to)g(b)r(e)i(accepted)e(b)n(y)h(the)g(SMTP)f(serv)n(er,)g(it)i(should)
-e(b)r(e)h(as)208 5519 y(large)26 b(as)h(the)h(maxim)n(um)f(message)f
-(size)i(m)n(ultiplied)g(b)n(y)f(the)h(maxim)n(um)g(n)n(um)n(b)r(er)f
-(of)h(incoming)f(connections.)1848 5768 y(21)p eop end
-%%Page: 22 23
-TeXDict begin 22 22 bop 60 523 a Fn(11.)41 b Fm(OCC_max_entries)o
-Fn(:)48 b(size)36 b(of)g(outgoing)f(\(SMTPC\))h(connection)g(cac)n(he)f
-(\(unit:)55 b(en)n(tries\).)61 b(This)36 b(should)g(b)r(e)208
-623 y(large)26 b(enough)i(to)f(k)n(eep)h(trac)n(k)f(of)h(outgoing)e
-(connections)i(o)n(v)n(er)e(a)h(time)i(span)f(that)g(is)g(at)g(least)f
-(as)h(long)f(as)g(the)208 722 y(maxim)n(um)g(retry)g(time.)60
-873 y(12.)41 b Fm(ok_disk_space)p Fn(:)32 b(amoun)n(t)27
-b(of)h(free)f(disk)h(space)f(at)h(whic)n(h)g(normal)e(op)r(eration)h
-(con)n(tin)n(ues)g(\(unit:)39 b(KB\).)27 b(Must)208 973
-y(b)r(e)h(larger)d(than)j Fm(min_disk_space)p Fn(.)60
-1124 y(13.)41 b Fm(queue_return_ti)o(meo)o(ut)o Fn(:)31
-b(maxim)n(um)d(time)g(in)g(queue)f(\(unit:)38 b(s\).)60
-1275 y(14.)j Fm(queue_delay_tim)o(eou)o(t)p Fn(:)i(send)34
-b(dela)n(y)g(w)n(arning)e(\(\\dela)n(y)n(ed)h(DSN"\))h(if)h(the)f(mail)
-g(is)g(still)g(in)h(the)f(queue)g(af-)208 1374 y(ter)k(at)h(least)f
-(this)i(duration)e(\(unit:)60 b(s\).)71 b(T)-7 b(o)39
-b(turn)g(o\013)g(dela)n(y)n(ed)e(DSNs)j(set)f(this)g(to)g(a)f(v)-5
-b(alue)39 b(bigger)e(than)208 1474 y Fm(queue_return_ti)o(meo)o(ut)o
-Fn(.)k(Note:)i(based)31 b(on)f(the)h(retry)f(sc)n(hedule)h(the)g(dela)n
-(y)n(ed)f(DSN)i(migh)n(t)e(b)r(e)i(sen)n(t)e(later)208
-1573 y(than)d(the)h(option)g(sp)r(eci\014es.)60 1724
-y(15.)41 b Fm(retry_max_delay)o Fn(:)31 b(maxim)n(um)d(time)g(for)f
-(retrying)f(a)i(deliv)n(ery)e(\(unit:)38 b(s\).)60 1875
-y(16.)j Fm(retry_min_delay)o Fn(:)31 b(minim)n(um)e(time)f(for)f
-(retrying)f(a)h(deliv)n(ery)g(\(unit:)38 b(s\).)60 2026
-y(17.)j(subsection)27 b Fm(smtpc)p Fn(:)243 2177 y(\(a\))41
-b Fm(initial_connectio)o(ns)o Fn(:)56 b(maxim)n(um)39
-b(initial)h(n)n(um)n(b)r(er)g(of)f(outgoing)g(connections)g(to)g(a)h
-(single)f(host)390 2277 y(\(unit:)c(en)n(tries\).)g(The)22
-b(sliding)f(windo)n(w)h(for)f(the)h(slo)n(w)f(start)g(algorithm)g
-(\(see)h(Section)g(3.8.1\))f(is)g(initialized)390 2376
-y(with)28 b(this)g(v)-5 b(alue.)238 2494 y(\(b\))42 b
-Fm(max_connections)p Fn(:)30 b(maxim)n(um)c(n)n(um)n(b)r(er)g(of)h
-(outgoing)e(connections)g(to)h(a)g(single)g(host)g(\(unit:)37
-b(en)n(tries\).)247 2612 y(\(c\))42 b Fm(lmtp_max_rcpts_pe)o(r_)o(tra)o
-(ns)o(ac)o(tio)o(n)p Fn(:)31 b(maxim)n(um)d(n)n(um)n(b)r(er)f(of)h
-(recipien)n(ts)f(p)r(er)h(transaction)e(for)i(mail)390
-2711 y(sen)n(t)g(via)f(LMTP)g(\(unit:)38 b(en)n(tries\).)238
-2829 y(\(d\))k Fm(smtp_max_rcpts_pe)o(r_)o(tra)o(ns)o(ac)o(tio)o(n)p
-Fn(:)31 b(maxim)n(um)d(n)n(um)n(b)r(er)f(of)h(recipien)n(ts)f(p)r(er)h
-(transaction)e(for)i(mail)390 2928 y(sen)n(t)g(via)f(\(E\)SMTP)g
-(\(unit:)38 b(en)n(tries\).)247 3046 y(\(e\))k Fm(flags)p
-Fn(:)35 b(con\014guration)26 b(\015ags:)458 3164 y(i.)41
-b Fm(lookup_rcpt_conf)p Fn(:)27 b(Lo)r(ok)21 b(up)g(recipien)n(t)f
-(con\014guration)g(data)g(\(see)h(Section)g(3.11.1\))e(in)j(the)f
-(access)545 3263 y(map)28 b(\(see)f(Section)h(3.9.3\))435
-3372 y(ii.)41 b Fm(lookup_session_co)o(nf)p Fn(:)51 b(Lo)r(ok)36
-b(up)i(session)f(con\014guration)f(data)h(\(see)h(Section)f(3.11.1\))f
-(in)i(the)545 3472 y(con\014guration)26 b(map)i(\(see)f(item)i(2\).)252
-3589 y(\(f)6 b(\))43 b Fm(rcpt_conf_lookup_)o(fl)o(ags)o
-Fn(:)29 b(If)24 b(recipien)n(t)g(con\014guration)e(data)i(\(see)f(item)
-i(17\(e\)i\))e(is)h(lo)r(ok)n(ed)f(up)h(in)g(the)390
-3689 y(access)j(map,)g(then)h(these)g(\015ags)e(determine)i(whic)n(h)g
-(kind)f(of)h(lo)r(okups)f(should)g(b)r(e)h(p)r(erformed.)458
-3807 y(i.)41 b Fm(full_adress)p Fn(:)33 b(use)27 b(the)h(full)h
-(address)d(as)h(k)n(ey)-7 b(.)435 3916 y(ii.)41 b Fm(detail_plus)p
-Fn(:)33 b(lo)r(okup)27 b(also)f(\\)p Fm(user++@subdomain)o
-Fn(".)412 4025 y(iii.)41 b Fm(detail_star)p Fn(:)33 b(lo)r(okup)27
-b(also)f(\\)p Fm(user+*@subdomain)o Fn(".)414 4133 y(iv.)41
-b Fm(star)p Fn(:)36 b(lo)r(okup)27 b(also)f(\\)p Fm(user*@subdomain)p
-Fn(")o(.)437 4242 y(v.)41 b Fm(domain)p Fn(:)35 b(lo)r(okup)27
-b(domain)g(part.)414 4351 y(vi.)41 b Fm(dotsubdomain)p
-Fn(:)32 b(iterate)c(through)e(sub)r(domains.)391 4459
-y(vii.)41 b Fm(dot)p Fn(:)36 b(lo)r(okup)27 b(also)g(\\.".)390
-4578 y(The)h(default)g(is)f(to)h(p)r(erform)f(all)g(lo)r(okups.)60
-4728 y(18.)41 b(subsection)27 b Fm(smtps)p Fn(:)243 4879
-y(\(a\))41 b Fm(max_connection_ra)o(te)o Fn(:)30 b(maxim)n(um)c
-(incoming)f(connection)h(rate)f(from)g(a)h(single)f(host)g(\(unit:)37
-b(connec-)390 4979 y(tions/60s\).)238 5097 y(\(b\))42
-b Fm(max_connections)p Fn(:)c(maxim)n(um)31 b(n)n(um)n(b)r(er)f(of)h
-(op)r(en)g(incoming)g(connection)f(from)h(a)f(single)h(host)g(\(unit:)
-390 5196 y(en)n(tries\).)60 5347 y(19.)41 b Fm(wait_for_client)o
-Fn(:)31 b(maxim)n(um)d(amoun)n(t)f(of)g(time)i(to)e(w)n(ait)g(for)g(a)g
-(clien)n(t)h(to)g(b)r(ecome)f(a)n(v)-5 b(ailable)26 b(\(unit:)38
-b(s\))60 5498 y(20.)j Fm(wait_for_server)o Fn(:)31 b(maxim)n(um)d
-(amoun)n(t)f(of)g(time)i(to)e(w)n(ait)g(for)g(a)g(serv)n(er)f(to)i(b)r
-(ecome)f(a)n(v)-5 b(ailable)26 b(\(unit:)38 b(s\))1848
-5768 y(22)p eop end
-%%Page: 23 24
-TeXDict begin 23 23 bop 0 523 a Fj(3.8.1)112 b(Con\014guration)39
-b(Map)f(for)g(QMGR)0 730 y Fn(QMGR)28 b(implemen)n(ts)h(a)f(\\slo)n(w)e
-(start")i(algorithm)f(to)h(con)n(trol)f(the)h(n)n(um)n(b)r(er)g(of)h
-(concurren)n(t)e(connections)g(to)h(one)g(IP)0 830 y(address.)51
-b(Initially)-7 b(,)34 b(it)f(will)g(at)g(most)f(create)g(a)g(\(small\))
-h(n)n(um)n(b)r(er)f(of)h(op)r(en)g(connections)f(up)h(to)f(a)g(sp)r
-(eci\014ed)h(initial)0 929 y(limit.)38 b(F)-7 b(or)27
-b(eac)n(h)f(successful)i(deliv)n(ery)-7 b(,)26 b(the)i(allo)n(w)n(ed)f
-(n)n(um)n(b)r(er)g(is)g(increased)g(up)h(to)f(sp)r(eci\014ed)h(maxim)n
-(um)g(limit.)0 1082 y(F)-7 b(or)32 b(incoming)g(connections,)h(QMGR)f
-(establishes)g(t)n(w)n(o)g(limits:)47 b(the)33 b(connection)f(rate)g
-(and)g(the)h(n)n(um)n(b)r(er)f(of)h(op)r(en)0 1182 y(connections.)0
-1335 y(The)c(Berk)n(eley)e(DB)i(hash)f(map)g Fm(qmgr)p
-1223 1335 27 4 v 30 w(conf.db)e Fn(\(the)j(\014le)g(should)f(b)r(e)h(o)
-n(wned)f(b)n(y)h Fm(meta1q)p Fn(\))d(can)i(ha)n(v)n(e)g(the)h(follo)n
-(wing)0 1435 y(en)n(tries:)101 1655 y(1.)42 b Fm(oci:)35
-b Fn(this)28 b(k)n(ey)f(sp)r(eci\014es)g(the)h(initial)g(n)n(um)n(b)r
-(er)f(of)h(concurren)n(t)e(outgoing)g(connection)h(to)h(an)f(IP)g
-(address.)101 1821 y(2.)42 b Fm(ocm:)35 b Fn(this)28
-b(k)n(ey)f(sp)r(eci\014es)g(the)h(maxim)n(um)f(n)n(um)n(b)r(er)h(of)f
-(concurren)n(t)g(outgoing)f(connection)h(to)h(an)f(IP)g(address.)101
-1987 y(3.)42 b Fm(octo:)34 b Fn(sp)r(ecify)28 b(the)g(timeout)g(for)f
-(an)h(en)n(try)f(in)h(the)g(outgoing)e(connection)h(cac)n(he.)101
-2153 y(4.)42 b Fm(icr:)35 b Fn(this)28 b(k)n(ey)f(sp)r(eci\014es)g(the)
-h(maxim)n(um)f(rate)g(for)g(incoming)h(connections)e(\(p)r(er)i(60s\).)
-101 2319 y(5.)42 b Fm(icm:)35 b Fn(this)28 b(k)n(ey)f(sp)r(eci\014es)g
-(the)h(maxim)n(um)f(n)n(um)n(b)r(er)h(of)f(concurren)n(tly)g(op)r(en)g
-(incoming)g(sessions.)101 2485 y(6.)42 b Fm(smtpc)p 433
-2485 V 29 w(session)p 770 2485 V 28 w(conf:)35 b Fn(see)27
-b(Section)h(3.11.1)0 2704 y Fm(oci:)p Fn(,)h Fm(ocm:)p
-Fn(,)f Fm(icr:)p Fn(,)h Fm(icm:)p Fn(,)g(and)g Fm(smtpc)p
-1299 2704 V 29 w(session)p 1636 2704 V 29 w(conf:)39
-b Fn(tak)n(e)29 b(an)g(IP)h(address/net)e(as)h(parameter)f(suc)n(h)h
-(that)h(the)0 2804 y(limits)e(can)f(b)r(e)h(imp)r(osed)g(p)r(er)f(IP)h
-(address/net.)35 b(F)-7 b(or)27 b(example:)0 3040 y Fm(oci:127.0.0.1)
-256 b(5)0 3140 y(ocm:127.0.0.1)213 b(10)0 3240 y(oci:10)521
-b(10)0 3339 y(ocm:10)g(50)0 3439 y(oci:)652 b(1)0 3538
-y(ocm:)g(4)0 3638 y(icr:10)564 b(5)0 3738 y(icr:127.0.0.1)169
-b(100)0 3837 y(icm:127.0.0.1)g(120)0 4074 y Fn(Note,)28
-b(ho)n(w)n(ev)n(er,)e(that)i(the)h(limits)f(apply)g(only)f(to)h(single)
-f(IP)h(addresses,)e(they)i(are)f(not)h(aggregated)d(for)j(nets.)38
-b(That)0 4173 y(is,)25 b(for)e(the)i(example)f(ev)n(ery)f(single)g
-(host)h(in)h(the)f(IP)g(net)g(10.x.y)-7 b(.z)23 b(can)h(ha)n(v)n(e)f(a)
-h(maxim)n(um)g(incoming)g(connection)f(rate)0 4273 y(of)28
-b(5)f(messages)f(p)r(er)h(min)n(ute.)0 4426 y(The)d(default)h(v)-5
-b(alues)24 b(for)g(these)h(con\014guration)e(options)g(are)h(set)g(in)h
-(the)g(binary)f(and)g(can)g(b)r(e)h(c)n(hanged)e(via)h(command)0
-4526 y(line)k(options)f(or)g(the)h(con\014guration)e(\014le)h(\(see)h
-(Section)f(3.8\):)101 4762 y(1.)42 b Fm(-C)g(n)28 b Fn(maxim)n(um)f(n)n
-(um)n(b)r(er)g(of)h(concurren)n(t)e(connections)h(to)g(one)h(IP)f
-(address)f([default:)38 b(100])101 4928 y(2.)k Fm(-c)g(n)28
-b Fn(initial)f(n)n(um)n(b)r(er)h(of)f(concurren)n(t)g(connections)f(to)
-i(one)f(IP)g(address)g([default:)37 b(10])101 5094 y(3.)42
-b Fm(-O)g(R=n)27 b Fn(maxim)n(um)g(connection)g(rate)g(p)r(er)h(60s)e
-(\(SMTPS\))i([default:)38 b(100])101 5260 y(4.)k Fm(-O)g(O=n)27
-b Fn(maxim)n(um)g(n)n(um)n(b)r(er)h(of)f(op)r(en)h(connections)f
-(\(SMTPS\))h([default:)37 b(100])1848 5768 y(23)p eop
-end
-%%Page: 24 25
-TeXDict begin 24 24 bop 0 523 a Fk(3.9)135 b(Con\014guration)46
-b(for)f(SMAR)0 775 y Fj(3.9.1)112 b(Declaring)39 b(Maps)f(for)g(SMAR)0
-982 y Fn(In)25 b(general,)f(maps)h(m)n(ust)g(b)r(e)h(declared)e(b)r
-(efore)h(they)g(can)g(get)g(used.)36 b(Eac)n(h)23 b(map)i(declaration)f
-(in)h(a)g(con\014guration)e(\014le)0 1082 y(is)i(a)f(named)h
-(subsection)g({)f(the)h(name)g(is)g(used)g(for)f(later)h(references)e
-({)i Fm(map)f Fn(in)h(the)g Fm(smar)e Fn(section)i(with)g(the)h(follo)n
-(wing)0 1181 y(options:)101 1401 y(1.)42 b Fm(type)p
-Fn(:)31 b(t)n(yp)r(e)21 b(of)f(the)h(map;)i(curren)n(tly)c(one)h(of)g
-Fm(hash)f Fn(\(Berk)n(eley)g(DB)i(hash\),)g Fm(cdb)f
-Fn(\(tin)n(ycdb\),)i Fm(sequence)p Fn(,)d Fm(socket)p
-Fn(,)208 1501 y(and)27 b Fm(passwd)p Fn(.)101 1667 y(2.)42
-b Fm(file)p Fn(:)35 b(the)28 b(\014lename)f(of)h(the)g
-Fm(db)f Fn(\014le)g(\(including)i(the)e(extension\))h(\(for)f(t)n(yp)r
-(e)h Fm(hash)p Fn(,)e Fm(cdb)p Fn(\).)101 1833 y(3.)42
-b Fm(mapname)p Fn(:)34 b(name)27 b(of)h(the)g(map)f(used)h(in)f(the)h
-(proto)r(col)f(\(t)n(yp)r(e)h Fm(socket)d Fn(only\).)101
-1999 y(4.)42 b Fm(address)p Fn(:)34 b(IPv4)26 b(address)g(of)i(inet)g
-(so)r(c)n(k)n(et.)36 b(\(t)n(yp)r(e)28 b Fm(socket)d
-Fn(only\).)101 2165 y(5.)42 b Fm(path)p Fn(:)35 b(the)28
-b(pathname)f(of)h(the)g(Unix)g(domain)f(so)r(c)n(k)n(et)f(\(for)i(t)n
-(yp)r(e)g Fm(socket)p Fn(\).)101 2331 y(6.)42 b Fm(port)p
-Fn(:)35 b(p)r(ort)27 b(for)g(inet)h(so)r(c)n(k)n(et)f(\(t)n(yp)r(e)h
-Fm(socket)d Fn(only\).)101 2497 y(7.)42 b Fm(maps)p Fn(:)35
-b(list)28 b(of)f(map)h(names)f(to)g(use)h(in)g(the)g(map)f(\(t)n(yp)r
-(e)h Fm(sequence)d Fn(only\).)0 2716 y(Note:)39 b(for)29
-b Fm(socket)d Fn(maps)j(either)f(a)h(Unix)g(domain)g(so)r(c)n(k)n(et)e
-(\()p Fm(path)p Fn(\))h(or)g(an)h(inet)g(so)r(c)n(k)n(et)f(\()p
-Fm(address)e Fn(and)j Fm(port)p Fn(\))e(m)n(ust)0 2816
-y(b)r(e)h(sp)r(eci\014ed.)0 2969 y(Example:)0 3206 y
-Fm(map)42 b(localusers)e({)j(type)f(=)h(hash;)f(file)g(=)h
-("/etc/meta1/loc)o(alu)o(sr)o(.db)o(";)37 b(})0 3305
-y(map)42 b(otherusers)e({)j(type)f(=)h(cdb;)f(file)g(=)h
-("/etc/meta1/othe)o(rus)o(r.)o(cdb)o(";)37 b(})0 3405
-y(map)42 b(password)f({)i(type)f(=)h(passwd;)e(})0 3504
-y(map)h(seq1)g({)h(type)f(=)i(sequence;)39 b(maps)j(=)i({)f
-(localusers,)c(otherusers)g(};)k(})0 3604 y(map)f(seq2)g({)h(type)f(=)i
-(sequence;)39 b(maps)j(=)i({)f(password,)d(otherusers)f(};)k(})0
-3890 y Fj(3.9.2)112 b(Con\014guration)39 b(Options)f(for)f(SMAR)0
-4097 y Fn(The)28 b(follo)n(wing)e(con\014guration)g(options)h(are)g(v)
--5 b(alid)27 b(for)h(SMAR:)101 4333 y(1.)42 b Fm(access_map)p
-Fn(:)31 b(this)24 b(is)g(a)g(subsection)f(that)i(sp)r(eci\014es)f(the)g
-(access)f(con)n(trol)g(map.)35 b(See)24 b(Section)g(3.9.3)f(for)h
-(details.)208 4466 y(Note:)36 b(only)28 b(one)f(of)g
-Fm(file)f Fn(\(1a\))i(and)f Fm(name)f Fn(\(1b\))i(m)n(ust)g(b)r(e)g(sp)
-r(eci\014ed.)243 4649 y(\(a\))41 b Fm(file)p Fn(:)36
-b(\014lename)27 b(of)h(access)e(map)h(\(including)h(extension\))g
-([default:)37 b Fm(access.db)p Fn(].)238 4782 y(\(b\))42
-b Fm(name)p Fn(:)35 b(name)25 b(of)g(access)g(map)g(.)37
-b(This)25 b(can)g(b)r(e)h(used)g(if)g(a)f(di\013eren)n(t)h(map)g(t)n
-(yp)r(e)f(should)h(b)r(e)g(used,)g(in)g(whic)n(h)390
-4881 y(case)h(the)h(map)f(m)n(ust)h(b)r(e)g(declared)f(as)g(explained)g
-(in)h(Section)f(3.9.1.)101 5064 y(2.)42 b Fm(address_delimit)o(er)p
-Fn(:)50 b(list)37 b(of)g(delimiters)h(\(sp)r(eci\014ed)f(as)g(string\))
-g(for)f(address)g(extensions)h(in)g(lo)r(cal)g(part,)208
-5163 y([default:)54 b Fm("+")p Fn(].)62 b(Note:)54 b(if)36
-b Fm(address_delimiter)30 b Fn(has)35 b(more)h(than)g(one)g(c)n
-(haracter,)g(the)h(\014rst)e(one)h(that)h(is)208 5263
-y(found)32 b(in)g(the)g(lo)r(cal)g(part)f(of)h(an)g(address)e(is)i
-(used)g(as)f(delimiter)h(in)h(map)e(lo)r(okups)h(\(see)f(Section)h
-(3.12\).)49 b(F)-7 b(or)208 5363 y(example:)36 b(if)28
-b(the)g(follo)n(wing)f(option)g(is)g(used)h(in)g(the)g(con\014guration)
-e(\014le:)208 5496 y Fm(address_delimit)o(er)37 b(=)43
-b("/_-";)1848 5768 y Fn(24)p eop end
-%%Page: 25 26
-TeXDict begin 25 25 bop 208 523 a Fn(then)29 b(for)f(the)h(address)e
-(\\)p Fb(<)p Fm(user/ext-list@)o(dom)o(.a)o(in)p Fb(>)o
-Fn(",)c(the)29 b(delimiter)f(for)h(map)f(lo)r(okups)g(is)g(\\)p
-Fm(/)p Fn(")g(and)g(the)208 623 y(address)k(detail)i(is)f(\\)p
-Fm(ext-list)p Fn(",)e(while)j(for)f(the)h(address)f(\\)p
-Fb(<)p Fm(user-ext)p 2598 623 27 4 v 27 w(list@dom.ain)p
-Fb(>)p Fn(",)c(the)34 b(delimiter)208 722 y(for)27 b(map)g(lo)r(okups)g
-(is)g(\\)p Fm(-)p Fn(")g(and)g(the)h(address)f(detail)g(is)h(\\)p
-Fm(ext)p 2156 722 V 29 w(list)p Fn(".)101 883 y(3.)42
-b Fm(aliases)p Fn(:)34 b(this)28 b(is)f(a)g(subsection)g(that)h(sp)r
-(eci\014es)g(the)g(parameters)e(for)h(aliases.)208 1014
-y(Note:)36 b(only)28 b(one)f(of)g Fm(file)f Fn(\(3a\))i(and)f
-Fm(name)f Fn(\(3b\))i(m)n(ust)g(b)r(e)g(sp)r(eci\014ed.)243
-1189 y(\(a\))41 b Fm(file)p Fn(:)36 b(\014lename)27 b(of)h(aliases)e
-(map)h(\(including)h(extension\))g([default:)37 b Fm(aliases.db)p
-Fn(].)238 1317 y(\(b\))42 b Fm(name)p Fn(:)34 b(name)25
-b(of)g(aliases)e(map)i(.)36 b(This)24 b(can)h(b)r(e)g(used)g(if)g(a)g
-(di\013eren)n(t)g(map)f(t)n(yp)r(e)h(should)g(b)r(e)g(used,)h(in)f
-(whic)n(h)390 1417 y(case)i(the)h(map)f(m)n(ust)h(b)r(e)g(declared)f
-(as)g(explained)g(in)h(Section)f(3.9.1.)247 1545 y(\(c\))42
-b Fm(flags)p Fn(:)458 1673 y(i.)f Fm(localpart)p Fn(:)30
-b(the)21 b(aliases)f(map)g(con)n(tains)g(only)g(lo)r(calparts)f(of)i
-(addresses)e(and)h(those)h(are)e(only)i(lo)r(ok)n(ed)545
-1772 y(up)28 b(for)f(lo)r(cal)g(addresses.)435 1886 y(ii.)41
-b Fm(local_domains)p Fn(:)34 b(the)c(aliases)d(map)i(con)n(tains)f
-(fully)h(quali\014ed)f(addresses)g(whic)n(h)g(are)g(only)h(lo)r(ok)n
-(ed)545 1986 y(up)41 b(for)e(lo)r(cal)g(addresses.)73
-b(This)39 b(can)h(b)r(e)g(used)g(similar)f(to)h(virtual)f(users)g(in)i
-(sendmail)e(8,)k(e.g.,)595 2080 y Fm(vuser1@virt1.tld:)93
-b(user1)595 2179 y(vuser2@virt1.tld:)g(user2)595 2279
-y(vuser3@virt2.tld:)g(user3)412 2389 y Fn(iii.)41 b Fm(all_domains)p
-Fn(:)e(the)30 b(aliases)f(map)i(con)n(tains)e(fully)i(quali\014ed)f
-(addresses)f(whic)n(h)i(are)e(lo)r(ok)n(ed)g(up)i(for)545
-2489 y(all)d(domains.)414 2602 y(iv.)41 b Fm(implicitly_match_)o(det)o
-(ai)o(l)p Fn(:)30 b(the)c(items)g(are)f(lo)r(ok)n(ed)g(up)h(according)f
-(to)g(the)i(algorithm)d(sp)r(eci\014ed)545 2702 y(in)37
-b(Section)f(3.12.1.)61 b(and)36 b(additionally)g Fm(+detail)d
-Fn(is)k(implicitly)g(matc)n(hed)f(when)g(the)h(pattern)f(is)545
-2802 y(\\)p Fm(user@hostname)p Fn(".)68 b(That)40 b(is,)j(it)d(o)n(v)n
-(errides)d(the)k(default)f(matc)n(hing)f(explained)h(in)g(case)f(1e)g
-(in)545 2901 y(Section)28 b(3.12.1.)437 3015 y(v.)41
-b Fm(replace_macros)p Fn(:)30 b(replace)23 b(macros)g(in)i(the)f(RHS)h
-(of)g(the)f(map)h(en)n(tries)e(b)n(y)h(the)h(appropriate)e(v)-5
-b(alue,)545 3115 y(see)28 b(Section)f(3.12.3.)414 3228
-y(vi.)41 b Fm(preserve_domain)p Fn(:)e(if)32 b(the)g(RHS)h(of)e(an)g
-(en)n(try)g(is)h(an)f(unquali\014ed)h(address,)f(do)h(not)f(app)r(end)h
-(the)545 3328 y(lo)r(cal)37 b(hostname)f(to)h(it)h(but)f(the)h(domain)e
-(of)h(the)g(original)f(address,)i(i.e.,)i(preserv)n(e)35
-b(the)i(original)545 3428 y(domain.)101 3601 y(4.)42
-b Fm(DNS)p Fn(:)26 b(this)i(subsection)f(con)n(tains)g(DNS)h(related)f
-(options.)243 3762 y(\(a\))41 b Fm(nameservers)p Fn(:)31
-b(list)26 b(of)f(up)g(to)g(four)g(IPv4)e(addresses)2080
-3732 y Fi(2)2141 3762 y Fn(of)i(nameserv)n(ers.)34 b(Note:)h(it)26
-b(is)f(imp)r(ortan)n(t)g(that)g(all)390 3861 y(of)j(these)f(nameserv)n
-(es)f(w)n(ork)g(prop)r(erly)-7 b(.)36 b(Curren)n(tly)27
-b(they)h(are)e(used)i(\\round)e(robin")h(without)h(excluding)390
-3961 y(nameserv)n(ers)d(that)j(do)g(not)f(answ)n(er)1549
-3931 y Fi(3)1585 3961 y Fn(.)238 4089 y(\(b\))42 b Fm(retries)p
-Fn(:)34 b(maxim)n(um)28 b(n)n(um)n(b)r(er)f(of)h(retries.)35
-b(A)28 b(v)-5 b(alue)28 b(of)f(0)h(means)f(one)g(query)g(only)-7
-b(,)27 b(i.e.,)h(no)f(retry)-7 b(.)247 4217 y(\(c\))42
-b Fm(timeout)p Fn(:)34 b(the)28 b(default)g(timeout)g(for)f(a)h(single)
-f(DNS)h(query)f(\(unit:)38 b(s\).)f(Notes:)462 4345 y
-Fc(\017)k Fn(the)33 b(timeout)g(for)e(a)h(DNS)h(request)f(is)g(the)g
-(pro)r(duct)g(of)h(the)f(n)n(um)n(b)r(er)g(of)g(tries)g(and)g(the)g
-(individual)545 4444 y(timeout,)d(i.e.,)e Fm(\(retries)41
-b(+)i(1\))g(*)g(timeout)p Fn(.)462 4558 y Fc(\017)e Fn(this)c(v)-5
-b(alue)36 b(is)g(only)g(the)g(default)h(timeout)f(whic)n(h)g(can)g(b)r
-(e)h(o)n(v)n(erridden)d(b)n(y)i(an)f(application.)62
-b(F)-7 b(or)545 4658 y(example,)25 b(QMGR)g(dynamically)e(increases)g
-(the)i(timeout)g(for)f(addresses)f(whic)n(h)h(did)h(not)g(resolv)n(e)d
-(in)545 4757 y(earlier)27 b(tries.)238 4885 y(\(d\))42
-b Fm(flags)p Fn(:)58 b(The)39 b(\015ag)f Fm(use_resolvconf)33
-b Fn(causes)38 b(the)i(list)f(of)g(nameserv)n(ers)d(\(see)j(4a\))g(to)f
-(b)r(e)i(read)e(from)390 4985 y Fm(/etc/resolv.conf)p
-Fn(.)d(This)29 b(\015ag)f(is)h(set)f(b)n(y)h(default)h(unless)e(the)i
-Fm(nameservers)24 b Fn(option)29 b(is)g(used.)41 b(Note:)390
-5085 y(the)29 b(list)f(of)g(nameserv)n(ers)d(is)j(not)g(up)r(dated)h
-(when)f Fm(/etc/resolv.conf)21 b Fn(is)28 b(c)n(hanged,)f
-Fm(smar)g Fn(needs)g(to)h(b)r(e)390 5184 y(restarted)f(to)g(ac)n(hiev)n
-(e)f(that.)390 5298 y(More)h(\015ags)f(can)i(b)r(e)g(found)g(in)f
-(Section)h(8.4.)p 0 5362 1512 4 v 92 5416 a Fh(2)127
-5440 y Fg(4)c(is)f(the)h(default)h(v)l(alue)f(for)f(the)h(compile)g
-(time)g(option)g Fe(MTA)p 1775 5440 22 4 v 27 w(DNS)p
-1907 5440 V 26 w(MAX)p 2038 5440 V 26 w(TSKS)92 5495
-y Fh(3)127 5519 y Fg(This)f(needs)i(to)f(b)r(e)g(enhanced)i(in)d(a)h
-(later)g(v)n(ersion,)f(a)h(patc)n(h)h(is)e(w)n(elcome!)1848
-5768 y Fn(25)p eop end
-%%Page: 26 27
-TeXDict begin 26 26 bop 101 523 a Fn(5.)42 b Fm(dnsbl)p
-Fn(:)j(sp)r(ecify)34 b(a)e(DNS)i(based)f(blac)n(klist)1594
-493 y Fi(4)1630 523 y Fn(.)54 b(This)33 b(section)g(can)f(b)r(e)i(sp)r
-(eci\014ed)f(m)n(ultiple)h(times)3326 493 y Fi(5)3363
-523 y Fn(;)i(it)e(has)e(the)208 623 y(follo)n(wing)26
-b(required)h(options:)307 787 y Fc(\017)41 b Fm(domain)p
-Fn(:)35 b(sp)r(ecify)28 b(the)g(domain)f(to)g(use)h(for)f(DNS)h(lo)r
-(okups,)f(e.g.,)g Fm(dnsbl.tld)p Fn(.)307 918 y Fc(\017)41
-b Fm(tag)p Fn(:)35 b(sp)r(ecify)27 b(the)f(tag)g(to)g(use)g(for)g(lo)r
-(okups)g(in)g(the)h(access)e(map)h(\(whic)n(h)g(m)n(ust)h(b)r(e)f
-(enabled,)h(see)f(Section)390 1017 y(3.10,)h(3b\).)208
-1182 y(The)38 b(clien)n(t)g(IPv4)e(address)h Fd(A.B.C.D)j
-Fn(is)d(lo)r(ok)n(ed)g(up)h(via)g(DNS)h(as)e Fd(D.C.B.A.)p
-Fm(domain)g Fn(querying)g(for)h(an)f(A)208 1281 y(record.)i(If)29
-b(an)f(A)h(record)f Fd(W.X.Y.Z)h Fn(is)g(found,)g(then)h(it)f(is)g(lo)r
-(ok)n(ed)e(up)i(in)g(the)h(access)d(map)i(as)f Fm(tag)p
-Fn(:)p Fd(W.X.Y.Z)p Fn(.)208 1381 y(for)k(temp)r(orary)g(and)h(p)r
-(ermanen)n(t)f(DNS)i(lo)r(okup)f(failures)f(the)h(en)n(tries)g(that)g
-(will)g(b)r(e)g(c)n(hec)n(k)n(ed)f(in)h(the)h(access)208
-1480 y(map)27 b(are)g Fm(tag)p Fn(:)p Fm(temp)d Fn(and)k
-Fm(tag)p Fn(:)p Fm(perm)p Fn(,)d(resp)r(ectiv)n(ely)-7
-b(.)208 1612 y(Notes:)307 1777 y Fc(\017)41 b Fn(DNS)25
-b(lo)r(okups)e(in)g(blac)n(klists)g(can)g(b)r(e)h(disabled)g(via)f(en)n
-(tries)g(in)g(the)h(access)f(map)g(using)g(the)h(tag)f
-Fm(cltaddr)p Fn(,)390 1876 y(see)k(Section)h(3.9.3.)307
-2007 y Fc(\017)41 b Fn(Some)30 b(DNS)h(blac)n(klists)f(return)g(m)n
-(ultiple)h(A)f(records.)43 b(F)-7 b(or)30 b(those)g(the)h(A)f(records)f
-(are)g(c)n(hec)n(k)n(ed)g(\(in)i(the)390 2107 y(order)23
-b(returned)i(b)n(y)f(the)h(DNS)g(serv)n(er\))f(un)n(til)h(an)f(access)f
-(map)i(en)n(try)f(is)g(found.)37 b(This)24 b(is)h(an)f(in)n(termediate)
-390 2206 y(solution)36 b(as)f(it)i(ma)n(y)e(cause)g(random)g(results)h
-(if)g(m)n(ultiple)h(access)e(map)h(en)n(tries)f(for)h(a)f(DNS)i(blac)n
-(klist)390 2306 y(exist.)62 b(Ho)n(w)n(ev)n(er,)36 b(as)f(long)g(as)g
-(all)h(of)g(them)g(ha)n(v)n(e)f(the)h(same)f(return)h(co)r(de)f(t)n(yp)
-r(e)h(\(i.e.,)j(temp)r(orary)34 b(or)390 2406 y(p)r(ermanen)n(t\),)28
-b(this)g(b)r(eha)n(vior)e(is)i(su\016cien)n(t.)307 2537
-y Fc(\017)41 b Fn(curren)n(tly)35 b(a)f(colon)h(is)g(added)g(as)g
-(delimiter)g(after)g Fm(tag)p Fn(,)h(this)g(ma)n(y)f(b)r(e)g(remo)n(v)n
-(ed)f(in)i(later)e(v)n(ersions)g(to)390 2636 y(allo)n(w)27
-b(for)g(more)g(\015exibilit)n(y;)g(e.g.,)h(the)g(con\014guration)e
-(option)h(itself)h(can)f(include)h(a)f(delimiter.)208
-2800 y(The)f(access)f(map)i(en)n(try)f(should)g(ha)n(v)n(e)f(one)h(of)h
-(the)f(usual)h(rejection)f(RHSs)g(as)g(explained)g(in)h(3.9.3.)35
-b(Example:)208 2900 y(con\014guration)26 b(\014le:)208
-3095 y Fm(smar)41 b({)j(dnsbl)d({)i(domain)e(=)j(dnsbl.tld;)39
-b(tag)j(=)i(dnsbltld;)39 b(})44 b(})208 3289 y Fn(access)26
-b(map:)208 3484 y Fm(dnsbltld:127.0.)o(0.1)80 b(error:550)40
-b(5.7.1)i(listed)f(at)i(dnsbl.tld)c(as)k(open)f(relay)208
-3583 y(dnsbltld:127.0.)o(0.2)80 b(error:550)40 b(5.7.1)i(listed)f(at)i
-(dnsbl.tld)c(as)k(spam)f(source)208 3683 y(dnsbltld:127.0.)o(0.9)80
-b(error:451)40 b(4.7.1)i(listed)f(at)i(dnsbl.tld)c(as)k(suspicious)208
-3783 y(dnsbltld:temp)299 b(error:451)40 b(4.7.1)i(temporary)e(lookup)h
-(failure)f(at)j(dnsbl.tld)208 3977 y Fn(If)38 b(m)n(ultiple)g(DNS)h
-(based)e(blac)n(klists)g(are)g(sp)r(eci\014ed,)k(the)d(DNS)h(queries)e
-(are)g(made)g(concurren)n(tly)g(but)h(the)208 4077 y(lo)r(okups)32
-b(in)i(the)g(access)e(map)h(are)g(p)r(erformed)f(in)i(the)g(order)e(in)
-i(whic)n(h)f(the)h(blac)n(klists)e(are)h(giv)n(en;)i(the)f(\014rst)208
-4176 y(successful)27 b(lo)r(okup)g(is)g(used)h(as)f(result,)g(no)h
-(further)f(priorization)f(is)h(p)r(erformed.)101 4341
-y(6.)42 b Fm(greylisting)p Fn(:)32 b(sp)r(ecify)c(greylisting)e
-(options,)h(see)g(Section)h(3.9.4)e(for)h(details.)243
-4505 y(\(a\))41 b Fm(grey_wait)p Fn(:)33 b(ho)n(w)27
-b(long)g(b)r(efore)h(greylisted)e(can)h(b)r(e)h(con\014rmed.)238
-4636 y(\(b\))42 b Fm(grey_expire)p Fn(:)33 b(timeout)28
-b(for)f(greylisted)f(en)n(tries)h(\(did)h(not)g(con\014rm)f(within)h
-(that)g(time\).)247 4767 y(\(c\))42 b Fm(white_expire)p
-Fn(:)32 b(expire)27 b(whitelisted)h(en)n(tries)f(after)h(this)f(time)i
-(if)f(necessary)-7 b(.)238 4898 y(\(d\))42 b Fm(white_timeout)p
-Fn(:)32 b(force)27 b(whitelisted)h(en)n(tries)f(to)g(recon\014rm)g
-(after)g(this)h(time.)247 5029 y(\(e\))42 b Fm(main_DB_name)p
-Fn(:)32 b(name)c(of)f(main)h(database)e(\(including)i(.db)g
-(extension\).)252 5159 y(\(f)6 b(\))43 b Fm(secondary_DB_name)o
-Fn(:)31 b(name)d(of)f(secondary)f(database)g(\(including)i(.db)g
-(extension\).)243 5290 y(\(g\))41 b Fm(expire_limit)p
-Fn(:)32 b(try)27 b(to)h(expire)f(en)n(tries)g(when)h(this)g(limit)g(is)
-f(reac)n(hed.)p 0 5362 1512 4 v 92 5416 a Fh(4)127 5440
-y Fg(This)c(option)i(is)e(mo)r(delled)h(after)f Fe(dnsblaccess)k
-Fg(written)d(b)n(y)g(Neil)f(Ric)n(k)n(ert)h(for)f(sendmail)g(8.)92
-5495 y Fh(5)127 5519 y Fg(Compile)g(time)h(option)h Fe(MTA)p
-895 5519 22 4 v 26 w(MAX)p 1026 5519 V 26 w(DNSBL)p Fg(:)g(curren)n
-(tly)f(set)g(to)g(8.)1848 5768 y Fn(26)p eop end
-%%Page: 27 28
-TeXDict begin 27 27 bop 238 523 a Fn(\(h\))42 b Fm(netmask)p
-Fn(:)31 b(b)n(y)22 b(default)g(the)g(en)n(tire)f(IPv4)g(address)f(is)i
-(used)f(as)g(a)g(k)n(ey)-7 b(,)23 b(ho)n(w)n(ev)n(er,)e(b)n(y)g(sp)r
-(ecifying)h(a)f(netmask,)390 623 y(e.g.,)k Fm(0xFFFFFF00)p
-Fn(,)c(the)k(least)f(signi\014can)n(t)g(bits)h(can)f(b)r(e)h(cut)g
-(o\013.)36 b(This)25 b(can)f(b)r(e)h(used)g(to)f(deal)g(with)h(serv)n
-(er)390 722 y(farms,)i(see)g(Section)h(3.9.4,)e(e.g.,)i(if)g(those)f
-(are)g(in)h(the)g(same)f(class)f(C)i(subnet.)101 888
-y(7.)42 b Fm(local_user_map)p Fn(:)31 b(this)d(is)f(a)g(subsection)g
-(that)h(sp)r(eci\014es)g(a)f(map)h(of)f(v)-5 b(alid)28
-b(lo)r(cal)f(addresses.)243 1054 y(\(a\))41 b Fm(name)p
-Fn(:)33 b(Name)22 b(of)h(the)f(map)h(of)f(v)-5 b(alid)23
-b(lo)r(cal)e(addresses;)i(the)g(map)f(m)n(ust)h(ha)n(v)n(e)e(b)r(een)i
-(declared)e(as)h(explained)390 1154 y(in)28 b(Section)g(3.9.1.)238
-1287 y(\(b\))42 b Fm(flags)p Fn(:)458 1420 y(i.)f Fm(implicitly_match_)
-o(det)o(ai)o(l)p Fn(:)26 b Fm(+detail)16 b Fn(is)i(implicitly)h(matc)n
-(hed)f(when)h(the)g(pattern)f(is)g(\\)p Fm(user@hostname)p
-Fn(".)545 1519 y(That)28 b(is,)g(it)g(o)n(v)n(errides)d(the)j(default)g
-(matc)n(hing)f(explained)g(in)h(case)f(1e)g(in)h(Section)f(3.12.1.)101
-1685 y(8.)42 b Fm(log_level)p Fn(:)33 b(logging)26 b(lev)n(el.)101
-1851 y(9.)42 b Fm(mailertable)p Fn(:)j(this)34 b(is)g(a)f(subsection)h
-(that)g(sp)r(eci\014es)g(a)f(mailertable,)i(curren)n(tly)e(y)n(ou)g
-(can)h(sp)r(ecify)g(exactly)208 1951 y(one)27 b(of)g(the)h(follo)n
-(wing)f(t)n(w)n(o)g(options:)243 2117 y(\(a\))41 b Fm(file)p
-Fn(:)35 b(\014lename)25 b(of)h(mailertable)f([default:)37
-b Fm(mt)p Fn(].)e(In)26 b(this)g(case)f(a)h(plain)g(text)g(\014le)g(is)
-g(read)f(during)g(startup)390 2217 y(and)j(placed)f(in)h(an)f(in)n
-(ternal)g(hash)g(table.)238 2350 y(\(b\))42 b Fm(name)p
-Fn(:)36 b(name)27 b(of)g(a)h(mailertable)e(map)i(that)g(has)f(b)r(een)h
-(declared)f(b)r(efore)g(\(see)g(Section)h(3.9.1\).)247
-2482 y(\(c\))42 b Fm(flags)p Fn(:)35 b(these)28 b(\015ags)e(can)h(b)r
-(e)i(used)e(to)h(select)f(a)g(subset)h(of)f(the)h(matc)n(hing)f
-(describ)r(ed)h(in)g(Section)f(3.12.1.)458 2615 y(i.)41
-b Fm(full_adress)p Fn(:)33 b(use)27 b(the)h(full)h(address)d(as)h(k)n
-(ey)-7 b(.)435 2731 y(ii.)41 b Fm(detail_plus)p Fn(:)33
-b(lo)r(okup)27 b(also)f(\\)p Fm(user++@subdomain)o Fn(".)412
-2848 y(iii.)41 b Fm(detail_star)p Fn(:)33 b(lo)r(okup)27
-b(also)f(\\)p Fm(user+*@subdomain)o Fn(".)414 2964 y(iv.)41
-b Fm(star)p Fn(:)36 b(lo)r(okup)27 b(also)f(\\)p Fm(user*@subdomain)p
-Fn(")o(.)437 3080 y(v.)41 b Fm(domain)p Fn(:)35 b(lo)r(okup)27
-b(domain)g(part.)414 3196 y(vi.)41 b Fm(dotsubdomain)p
-Fn(:)32 b(iterate)c(through)e(sub)r(domains.)391 3313
-y(vii.)41 b Fm(dot)p Fn(:)36 b(lo)r(okup)27 b(also)g(\\.".)390
-3445 y(The)h(default)g(is)f Fm(domain)p Fn(,)f Fm(dotsubdomain)p
-Fn(,)c Fm(dot)p Fn(.)208 3611 y(The)i(format)f(of)h(en)n(tries)g(in)g
-(the)h(map)f(is)g(explained)f(in)i(Section)f(3.9.3.)34
-b(Note:)i(reloading)22 b(mailertable)h(\(Section)208
-3711 y(4.7\))31 b(while)i(SMAR)g(is)f(running)g(can)g(b)r(e)h(done)f
-(only)f(if)i(it)g(is)f(declared)g(as)f(Berk)n(eley)g(DB)i(\(case)e(9b)h
-(with)h(the)208 3811 y(prop)r(er)26 b(map\))0 4097 y
-Fj(3.9.3)112 b(Con\014guration)39 b(Maps)g(for)e(SMAR)0
-4304 y Fn(SMAR)27 b(requires)d(a)i(mailertable,)f(and)h(it)h(can)e(mak)
-n(e)h(use)f(of)h(an)g(alias)f(map)h(as)f(w)n(ell)h(as)f(an)h(access)f
-(map,)h(all)g(of)g(whic)n(h)0 4403 y(are)h(describ)r(ed)g(in)h(the)g
-(subsequen)n(t)f(sections.)0 4673 y Fo(Access)32 b(Map)0
-4880 y Fn(T)-7 b(o)27 b(activ)-5 b(ate)28 b(the)g(access)e(map)i(the)g
-(\015ag)f Fm(access)e Fn(\(see)j(Section)f(3.10,)g(item)h(3b\))g(\(or)f
-(the)h(option)f Fm(-a)p Fn(\))h(m)n(ust)f(b)r(e)h(giv)n(en)0
-4979 y(to)k(the)g(SMTP)f(serv)n(ers.)48 b(All)32 b(en)n(tries)f
-(consist)h(of)f(a)h(left)g(hand)g(side)g(\(LHS,)g(k)n(ey\))g(whic)n(h)f
-(in)i(turn)e(has)h(a)f(tag)g(and)h(a)0 5079 y(\(partial\))27
-b(address)g(and)g(a)g(righ)n(t)g(hand)h(side)f(\(RHS,)i(v)-5
-b(alue\).)37 b(V)-7 b(alid)28 b(tags)e(are:)1848 5768
-y(27)p eop end
-%%Page: 28 29
-TeXDict begin 28 28 bop 50 510 a Fn(T)-7 b(ag)766 b(refers)27
-b(to)50 609 y Fm(from:)683 b Fn(en)n(v)n(elop)r(e)27
-b(sender)g(address)f(\(MAIL\))50 709 y Fm(to:)771 b Fn(en)n(v)n(elop)r
-(e)27 b(recipien)n(t)g(address)f(\(R)n(CPT\))50 809 y
-Fm(cltaddr:)551 b Fn(clien)n(t)28 b(IPv4)e(address)50
-908 y Fm(cltname:)551 b Fn(clien)n(t)28 b(host)f(name)50
-1008 y Fm(cltresolve:)419 b Fn(result)27 b(of)h(forw)n(ard)e(and)h(rev)
-n(erse)f(clien)n(t)i(lo)r(okup)50 1108 y Fm(mxbadip:)551
-b Fn(IPv4)27 b(addresses)f(that)i(are)e(not)i(allo)n(w)n(ed)e(for)h(MX)
-h(-)f(A)h(records)50 1207 y Fm(certissuer:)419 b Fn(DN)29
-b(of)e(CA)h(cert)f(that)h(signed)f(that)h(presen)n(ted)f(cert)50
-1307 y Fm(certsubject:)375 b Fn(DN)29 b(of)e(presen)n(ted)g(cert)50
-1406 y Fm(protectedrcpt:)287 b Fn(restrictions)26 b(for)i(recipien)n(t)
-f(address)f(\(see)i(Section)f(3.10.3\))50 1506 y Fm(smtps)p
-275 1506 27 4 v 29 w(session)p 612 1506 V 29 w(conf:)97
-b Fn(con\014guration)26 b(options)h(for)g(a)g(session)g(in)h(the)g
-(SMTP)f(serv)n(er)f(\(see)h(Section)h(3.10.1\))50 1606
-y Fm(smtps)p 275 1606 V 29 w(rcpt)p 480 1606 V 30 w(conf:)228
-b Fn(en)n(v)n(elop)r(e)27 b(recipien)n(t)g(address)f(\(R)n(CPT\))i
-(\(see)f(Section)h(3.10,)e(3g\))50 1705 y Fm(smtpc)p
-275 1705 V 29 w(rcpt)p 480 1705 V 30 w(conf:)228 b Fn(con\014guration)
-26 b(options)h(for)g(recipien)n(t)g(in)h(the)g(SMTP)g(clien)n(t)f
-(\(see)h(Section)f(3.11.1\))50 1805 y Fm(ehlo:)683 b
-Fn(EHLO/HELO)26 b(parameter)g(\(see)h(Section)h(12.1.4\))0
-1954 y(V)-7 b(alid)21 b(addresses)f(for)g Fm(from:)p
-Fn(,)h Fm(to:)p Fn(,)g(and)g Fm(smtps)p 1510 1954 V 29
-w(rcpt)p 1715 1954 V 30 w(conf:)32 b Fn(are)20 b(RF)n(C)h(2821)e
-(addresses)h(without)h(the)h(angle)e(bac)n(k)n(ets)0
-2054 y(\()p Fm(localpart@domain)p Fn(\))e(as)23 b(w)n(ell)g(as)g
-(partial)g(addresses)g(in)h(the)g(form)f Fm(localpart)d
-Fn(and)k Fm(@domain)p Fn(,)e(i.e.,)i(domains)f(m)n(ust)0
-2154 y(b)r(e)31 b(preceeded)f(with)h(an)f(at)g(\()p Fm(@)p
-Fn(\))h(sign.)45 b(V)-7 b(alid)31 b(addresses)e(for)h
-Fm(cltaddr:)39 b Fn(and)31 b Fm(mxbadip:)39 b Fn(are)29
-b(IPv4)h(addresses)f(and)0 2253 y(\(sub\)nets,)34 b(and)d(for)h
-Fm(cltname:)42 b Fn(host)31 b(names.)50 b(The)31 b(clien)n(t)h(host)g
-(name)g(is)f(determined)h(b)n(y)g(p)r(erforming)f(a)h(rev)n(erse)0
-2353 y(lo)r(okup)27 b(\(PTR)h(record\))e(for)h(its)h(IP)f(address.)36
-b(The)28 b(resulting)f(names)g(are)f(lo)r(ok)n(ed)h(up)h(as)f(A)h
-(records.)35 b(Only)27 b(if)h(one)g(of)0 2452 y(the)d(A)g(records)e
-(matc)n(hes)h(the)g(clien)n(t)h(IP)f(address,)g(the)h(host)f(name)h(is)
-f(set.)36 b(Note:)f(the)25 b(host)f(name)h(has)f(a)g(trailing)g(dot)0
-2552 y(after)h(DNS)i(resolution,)e(this)h(dot)g(m)n(ust)g(b)r(e)g
-(included)g(in)g(the)g(en)n(try)-7 b(.)36 b(The)26 b(result)f(of)h
-(these)g(lo)r(okups)f(can)g(b)r(e)h(used)g(for)0 2652
-y Fm(cltresolve:)32 b Fn(where)27 b(the)h(follo)n(wing)f(k)n(eys)g(are)
-f(v)-5 b(alid:)50 2800 y Fm(ok)317 b Fn(rev)n(erse)25
-b(and)j(forw)n(ard)e(lo)r(okup)h(matc)n(h)50 2899 y Fm(no)317
-b Fn(rev)n(erse)25 b(and)j(forw)n(ard)e(lo)r(okup)h(do)g(not)h(matc)n
-(h)50 2999 y Fm(tempptr)97 b Fn(rev)n(erse)25 b(lo)r(okup)i(\(PTR\))h
-(caused)f(a)g(temp)r(orary)g(error)50 3098 y Fm(tempa)185
-b Fn(forw)n(ard)25 b(lo)r(okup)j(\(A\))g(caused)f(a)g(temp)r(orary)g
-(error)0 3248 y(V)-7 b(alid)28 b(v)-5 b(alues)27 b(for)g(RHS)h(are)50
-3380 y Fm(relay)821 b Fn(allo)n(w)27 b(rela)n(ying;)f(curren)n(tly)g
-(only)h(for)g Fm(to:)p Fn(,)g Fm(cltaddr:)p Fn(,)1091
-3479 y Fm(cltname:)p Fn(,)e Fm(certissuer:)p Fn(,)e(and)k
-Fm(certsubject:)50 3579 y(ok)953 b Fn(accept)27 b(command)50
-3678 y Fm(error:)p Fd(XYZ)d(A.B.C.D)30 b(text)98 b Fn(return)27
-b(an)h(error)d(consisting)i(of)h(SMTP)f(reply)g(co)r(de)g
-Fd(XYZ)p Fn(,)1091 3778 y(enhanced)h(status)f(co)r(de)g
-Fd(A.B.C.D)p Fn(,)j(and)d Fd(text)p Fn(,)1091 3878 y(i.e.,)h(the)g
-(part)f(after)g Fm(error:)35 b Fn(is)27 b(returned)g(to)h(the)g(clien)n
-(t.)50 3977 y Fm(reject)777 b Fn(same)27 b(as)g Fm(error:550)40
-b(5.7.0)h(Rejected.)50 4077 y(discard)733 b Fn(accept)27
-b(command)h(but)g(silen)n(tly)f(discard)g(its)h(e\013ects.)50
-4177 y Fm(cont)865 b Fn(stop)27 b(curren)n(t)g(c)n(hec)n(k)g(\(e.g.,)g
-(map)h(lo)r(okup\),)f(but)i(con)n(tin)n(ue)e(others.)0
-4326 y(Some)k(tags)g(ma)n(y)g(allo)n(w)f(for)h(other)g(RHS)h(v)-5
-b(alues,)32 b(these)g(are)e(explained)i(when)f(those)g(tags)g(are)g
-(discussed)g(in)g(more)0 4426 y(detail.)0 4579 y(Optionally)23
-b(a)g(RHS)h(can)f(b)r(e)h(preceeded)f(b)n(y)g(the)h(mo)r(di\014er)g
-Fm(quick:)p Fn(.)33 b(F)-7 b(or)23 b(an)g Fm(error:)33
-b Fn(en)n(try)22 b(it)i(causes)f(an)g(immediate)0 4679
-y(rejection)28 b(when)g(the)h(en)n(try)e(matc)n(hes.)38
-b(Otherwise)27 b(rejections)h(can)g(b)r(e)g(dela)n(y)n(ed)f(to)h(the)h
-Fm(RCPT)d Fn(stage)h({)h(if)h(SMTPS)f(is)0 4778 y(con\014gured)j
-(appropriately)-7 b(,)33 b(see)f(Section)g(3.10,)h(item)g(3c)f({)g(and)
-h(can)f(b)r(e)h(o)n(v)n(erridden)d(using)j(the)g(mo)r(di\014er)f
-Fm(quick:)0 4878 y Fn(together)k(with)i Fm(ok)e Fn(or)h
-Fm(relay)e Fn(in)i(the)h(access)e(map)h(for)g(the)g(recipien)n(t)g
-(address)f(with)i(the)f Fm(to:)55 b Fn(tag.)65 b(Using)37
-b(the)0 4977 y(mo)r(di\014er)28 b Fm(quick:)36 b Fn(together)27
-b(with)i Fm(relay)d Fn(for)i(an)g(en)n(try)g(with)h(the)f
-Fm(cltaddr:)35 b Fn(tag)28 b(causes)f(it)i(to)f(o)n(v)n(erride)e(all)i
-(other)0 5077 y(access)e(map)h(c)n(hec)n(ks.)35 b Fm(quick:ok)24
-b Fn(for)i(an)h(en)n(try)f(with)i(the)f Fm(cltaddr:)33
-b Fn(tag)27 b(causes)f(it)h(to)g(o)n(v)n(erride)e(other)h(access)g(map)
-0 5177 y(c)n(hec)n(ks)g(unless)i(they)g(are)e(necessary)g(to)i(allo)n
-(w)e(rela)n(ying.)0 5330 y(Domain)21 b(names)g(\()p Fm(@domain)p
-Fn(\))e(m)n(ust)j(ha)n(v)n(e)e(an)h(exact)g(matc)n(h,)i(sub)r(domain)e
-(matc)n(hing)g(can)g(b)r(e)h(sp)r(eci\014ed)f(with)h(a)f(leading)0
-5430 y(dot,)28 b(i.e.,)f Fm(@.domain)p Fn(,)e(see)i(Section)h(3.12.1.)
-1848 5768 y(28)p eop end
-%%Page: 29 30
-TeXDict begin 29 29 bop 0 523 a Fn(Examples:)50 671 y
-Fm(cltresolve:tempp)o(tr)311 b(error:451)40 b(4.7.1)h(reverse)g(lookup)
-g(failed)50 770 y(mxbadip:127.0.0.)o(1)355 b(error:551)40
-b(5.7.1)h(Bad)i(IP)f(address)f(127.0.0.1)f(in)j(MX/A)f(list)50
-870 y(mxbadip:192.168.)o(25)o(5.2)o(55)93 b(error:551)40
-b(5.7.1)h(Bad)i(IP)f(address)f(192.168.255.255)c(in)43
-b(MX/A)f(list)50 970 y(from:@spammer.do)o(ma)o(in)224
-b(error:551)40 b(5.7.1)h(No)i(spammers)50 1069 y(from:@.spammer.d)o(om)
-o(ain)180 b(error:551)40 b(5.7.1)h(No)i(spammers)d(in)j(subdomains)d
-(either)50 1169 y(to:root)794 b(error:551)40 b(5.7.1)h(No)i(mail)f(to)h
-(root)50 1269 y(to:abuse)750 b(quick:ok)50 1368 y(cltaddr:10)662
-b(error:551)40 b(5.7.1)h(No)i(direct)e(mail)h(from)g(10.x.y.z)50
-1468 y(cltname:spammer.)o(do)o(mai)o(n.)93 b(quick:error:551)37
-b(5.7.1)42 b(No)h(mail)f(from)f(spammers)50 1567 y(to:@primary.doma)o
-(in)311 b(relay)50 1667 y(cltaddr:10)662 b(relay)50 1767
-y(cltaddr:127.0.0.)o(1)355 b(quick:relay)0 2032 y Fo(Discard)84
-b Fn(The)28 b(e\013ect)h(of)f Fm(discard)e Fn(dep)r(ends)i(on)g(the)h
-(proto)r(col)e(stage)h(in)g(whic)n(h)h(it)f(is)h(returned.)38
-b(If)29 b(it)g(is)f(returned)0 2132 y(for)h(a)h(session,)f(e.g.,)h
-(when)g(a)g(clien)n(t)f(connects,)i(all)e(transactions)f(in)i(the)h
-(session)d(are)h(discarded.)43 b(If)30 b(it)g(is)g(returned)0
-2232 y(for)i Fm(MAIL)g Fn(only)h(that)g(transaction)f(is)g(discarded.)
-53 b(If)33 b(it)h(is)e(returned)h(for)g Fm(RCPT)e Fn(only)i(that)g
-(recipien)n(t)g(is)f(discarded;)0 2331 y(ho)n(w)n(ev)n(er,)d(if)h(no)g
-(v)-5 b(alid)30 b(recipien)n(ts)f(are)g(left,)j(the)e(en)n(tire)g
-(transaction)e(is)i(discarded.)43 b(Moreo)n(v)n(er,)28
-b(if)j Fm(quick:discard)0 2431 y Fn(is)c(returned)h(for)f(one)g
-(recipien)n(t)g(the)h(en)n(tire)f(transaction)g(is)g(discarded)g(to)r
-(o.)0 2700 y Fo(Mailertable)0 2907 y Fn(The)41 b(address)g(resolv)n(er)
-e(implemen)n(ts)j(an)f(async)n(hronous)e(DNS)j(resolv)n(er)d(and)i(b)n
-(y)h(default)f(it)h(uses)f(a)g(\014le)h(called)0 3007
-y Fm(mt)e Fn(\(mailertable\))h(\(see)h(Section)f(3.9.2,)i(item)f(9\))f
-(whic)n(h)g(consists)g(of)g(domain)g(parts)f(of)h(e-mail)g(addresses)f
-(and)0 3106 y(corresp)r(onding)25 b(IP)i(addresses)e(\(in)i(square)f
-(brac)n(k)n(ets\))g(or)g(domain/host)f(names.)37 b(An)27
-b(en)n(try)f(consists)h(\(as)f(usual)h(in)g(a)0 3206
-y(map\))f(of)f(a)g(LHS)h(and)f(a)g(RHS;)h(in)g(the)g(case)e(of)i(a)f
-(\015at)g(text)h(\014le,)g(i.e.,)g(case)e(9a)h(of)g(Section)h(3.9.2,)e
-(those)h(are)g(separated)0 3306 y(b)n(y)i(one)h(or)e(more)h(whitespace)
-g(c)n(haracters.)50 3453 y(LHS)203 b(::=)99 b([)28 b(lo)r(cal)f("@")f
-(])i([)f(".")g(])h(hostname)f Fc(j)h Fn(".")50 3553 y(RHS)194
-b(::=)99 b([[)28 b(p)r(ort)f(")p Fm(^)p Fn(")f(])i([")p
-Fm(esmtp:)p Fn("]])d(hosts)i Fc(j)g Fn(")p Fm(lmtp:)p
-Fn(")e Fc(j)j Fn(p)r(ort)f(")p Fm(^)p Fn(")p Fm(lmtp:)p
-Fn(")d(hosts)623 3653 y Fc(j)k Fn(")p Fc(f)p Fn(")e(["proto)r(col")f
-("=")i("esm)n(tp")f(";"])h([p)r(ortdef)6 b(])28 b(hostdef)g(")p
-Fc(g)p Fn(")623 3752 y Fc(j)g Fn(")p Fc(f)p Fn(")e("proto)r(col")f("=")
-i("lm)n(tp")g(";")f([p)r(ortdef)i(hostdef)6 b(])28 b(")p
-Fc(g)p Fn(")50 3852 y(p)r(ort)208 b(::=)99 b(in)n(teger)50
-3952 y(hosts)177 b(::=)99 b(hostname)27 b Fc(j)h Fn(iplist)50
-4051 y(iplist)183 b(::=)99 b("[")27 b(IPv4-address)d("]")j([)h(")f(")g
-(iplist)h(])50 4151 y(p)r(ortdef)100 b(::=)f("p)r(ort")26
-b("=")h(in)n(t)g(";")50 4250 y(hostdef)102 b(::=)d("host")26
-b("=")h(hostname)g Fc(j)g Fn("ip)n(v4")f("=")h(")p Fc(f)p
-Fn(")f(ip)n(v4-list)g(")p Fc(g)p Fn(")50 4350 y(ip)n(v4)210
-b(::=)99 b(IPv4-address)0 4504 y(The)24 b(k)n(ey)g(\(LHS\))h(is)g(an)f
-(address)f(\(without)i(angle)f(brac)n(k)n(ets\),)f(a)h(hostname,)h(or)e
-(a)h(dot)h(\(denoting)f(the)h(default)g(en)n(try\).)0
-4604 y(The)j(v)-5 b(alue)27 b(\(RHS\))i(is)125 4823 y
-Fc(\017)41 b Fn(either)20 b(a)g(sp)r(eci\014cation)f(follo)n(wing)h
-(the)g(same)g(syn)n(tax)f(as)h(the)h(con\014guration)d(\014le)j(\(in)f
-(this)h(case)e(the)i(sp)r(eci\014cation)208 4923 y(m)n(ust)27
-b(b)r(e)h(enclosed)f(b)n(y)h(curly)f(braces\),)125 5089
-y Fc(\017)41 b Fn(or)20 b(it)j(uses)e(a)g(syn)n(tax)g(sp)r(eci\014c)h
-(to)f(mailertable)g(consisting)g(of)h(an)f(optional)g(p)r(ort)h(n)n(um)
-n(b)r(er,)h(an)e(optional)g(\()p Fm(esmtp)p Fn(\))208
-5189 y(proto)r(col)33 b(and)i(a)g(hostname)f(or)g(a)h(list)g(of)g(IPv4)
-f(addreses)g(\(in)h(square)f(brac)n(k)n(ets\))f(whic)n(h)i(are)f
-(separated)g(b)n(y)208 5288 y(spaces.)0 5508 y(If)44
-b(LMTP)g(should)g(b)r(e)g(used,)49 b(then)44 b(the)h
-Fm(lmtp)d Fn(proto)r(col)h(m)n(ust)h(b)r(e)h(selected.)86
-b(There)43 b(are)g(t)n(w)n(o)h(cases:)68 b(just)45 b
-Fc(f)1848 5768 y Fn(29)p eop end
-%%Page: 30 31
-TeXDict begin 30 30 bop 0 523 a Fm(protocol=lmtp;)38
-b Fc(g)26 b Fn(\(or)h Fm(lmtp:)p Fn(\))34 b(b)n(y)27
-b(itself)g(means)g(the)g(deliv)n(ery)f(agen)n(t)g(will)h(use)g(the)g
-(Unix)g(domain)g(so)r(c)n(k)n(et)f(sp)r(eci-)0 623 y(\014ed)j(in)h(the)
-f(con\014guration)e(\014le)j(\(see)f(Section)g(3.11,)f(item)h(2\),)h
-(if)f(an)g(inet)g(so)r(c)n(k)n(et)f(should)h(b)r(e)h(used)f(then)g(a)g
-(p)r(ort)g(and)0 722 y(a)e(host)h(m)n(ust)f(b)r(e)h(sp)r(eci\014ed.)37
-b(A)28 b(hostname)f(is)h(sub)5 b(ject)28 b(to)f(MX)h(lo)r(okups.)0
-876 y(Example:)50 1023 y Fm(localhost)488 b(lmtp:)50
-1123 y(SPAM.FILTER.DOMA)o(IN)93 b Fc(f)43 b Fm(port=2525;)d
-(protocol=esmtp;)d(ipv4=)p Fc(f)p Fm(127.0.0.1)p Fc(g)g(g)50
-1223 y Fm(LMTPHOST.MY.DOMA)o(IN)93 b Fc(f)43 b Fm(protocol=lmtp;)38
-b(port)k(=)h(525;)f(ipv4=)f Fc(f)j Fm(10.11.12.13)39
-b Fc(g)k(g)50 1322 y Fm(MY.DOMAIN)488 b(esmtp:[10.1.2.3])50
-1422 y(ANOTHER.DOMAIN)268 b(esmtp:MTA.SERVER)50 1521
-y(.TLD)708 b Fc(f)43 b Fm(host)f(=)h(GATE.WAY)d Fc(g)50
-1621 y Fm(.)840 b(esmtp:SMART.HOST)0 1775 y Fn(Note:)37
-b(curren)n(tly)27 b(this)g(\014le)h(m)n(ust)g(exist,)f(ev)n(en)h(if)g
-(there)f(are)g(no)g(en)n(tries)g(\(it)h(is)g(created)e(during)i
-(installation\).)0 2045 y Fo(Aliases)0 2251 y Fn(T)-7
-b(o)31 b(sp)r(ecify)h(aliases)e(for)g(lo)r(cal)h(addresses)f(the)h(map)
-h Fm(aliases.db)27 b Fn(\(Section)32 b(3.9.2,)f(item)g(3a\))g(is)g
-(used.)48 b(The)32 b(k)n(ey)e(in)0 2351 y(the)e(map)f(m)n(ust)h(b)r(e)
-125 2571 y Fc(\017)41 b Fn(the)28 b(lo)r(cal)f(part)g(of)g(a)g(v)-5
-b(alid)28 b(\(lo)r(cal\))g(e-mail)f(address,)125 2737
-y Fc(\017)41 b Fn(or)26 b(a)h(complete)h(lo)r(cal)f(e-mail)g(address,)
-125 2903 y Fc(\017)41 b Fn(or)26 b(an)n(y)h(e-mail)g(address,)0
-3122 y(based)d(on)h(the)g Fm(flags)e Fn(of)h(the)i Fm(aliases)c
-Fn(option)i(\(see)h(Section)f(3.9.2,)h(3c\).)35 b(The)25
-b(v)-5 b(alue)25 b(\(RHS\))h(for)e(an)g(alias)g(en)n(try)g(is)h(a)0
-3222 y(list)g(of)f(one)g(or)f(more)g(RF)n(C)i(2821)d(addresses)h
-(\(including)i(the)f(angle)g(brac)n(k)n(ets\))f(separated)g(b)n(y)h
-(spaces)f(\()p Fd(not)h Fn(commas\).)0 3322 y(If)h(the)h(RHS)f(has)g
-(only)f(a)h(single)f(address)g(whic)n(h)h(do)r(es)g(not)g(start)f(with)
-i(an)e(angle)g(brac)n(k)n(et,)h(then)g(it)g(is)g(con)n(v)n(erted)f(in)n
-(to)0 3421 y(an)33 b(RF)n(C)g(2821)f(address)g(b)n(y)h(SMAR,)h(i.e.,)h
-(SMAR)f(will)g(app)r(end)g(the)f(hostname)g(of)h(the)f(mac)n(hine)g
-(and)g(put)h(angle)0 3521 y(brac)n(k)n(ets)26 b(around)g(the)i(string.)
-37 b(Example:)50 3669 y Fm(myalias:)84 b(localuser)50
-3768 y(mylist:)g(<user1@my.dom>)38 b(<user2@my.dom>)g(<localuser@loca)o
-(l.h)o(os)o(t>)50 3868 y(owner-mylist:)82 b(someuser)0
-4018 y Fn(F)-7 b(or)27 b(mailing)g(lists,)g(the)h Fm(owner-)d
-Fn(notation)i(is)g(supp)r(orted,)g(i.e.,)h(if)g(there)f(are)f(aliases)g
-Fd(list)i Fn(and)f Fm(owner-)p Fd(list)e Fn(then)j(mail)0
-4117 y(sen)n(t)f(to)h Fd(list)g Fn(will)g(use)f Fm(owner-)p
-Fd(list)e Fn(as)i(en)n(v)n(elop)r(e)g(sender)g(address;)f(the)i
-(original)e(domain)i(will)f(b)r(e)h(preserv)n(ed.)0 4270
-y(Example)f(for)g(the)h(\015ag)f Fm(local_domains)22
-b Fn(\(see)27 b(3.9.2,)g(3\(c\)ii\).)37 b(Let)28 b(t)n(w)n(o)f(domains)
-g(b)r(e)h(lo)r(cal,)f(i.e.,)h(in)f(mailertable:)50 4423
-y Fm(first.dom)139 b(lmtp:)50 4522 y(second.dom)95 b(lmtp:)0
-4672 y Fn(and)27 b(these)h(en)n(tries)f(b)r(e)h(in)g(aliases:)50
-4804 y Fm(myalias@first.do)o(m:)81 b(user1)50 4903 y(another@second.d)o
-(om)o(:)g(user2)0 5053 y Fn(Then)19 b(mail)f(to)g Fm(<myalias@second.)o
-(dom)o(>)12 b Fn(and)18 b Fm(<another@first.do)o(m>)12
-b Fn(w)n(ould)18 b(b)r(e)h(rejected)f(while)h(mail)f(to)g
-Fm(<myalias@first.do)o(m>)0 5152 y Fn(or)27 b Fm(<another@second)o(.do)
-o(m>)21 b Fn(w)n(ould)27 b(b)r(e)h(accepted.)0 5306 y(Aliases)f(can)g
-(b)r(e)h(nested)g(\(curren)n(tly)f(up)h(to)f(5)g(lev)n(els,)g(see)h
-Fm(smar/rcpts.c)p Fn(\).)1848 5768 y(30)p eop end
-%%Page: 31 32
-TeXDict begin 31 31 bop 0 523 a Fj(3.9.4)112 b(Greylisting)0
-730 y Fn(MeT)-7 b(A1)27 b(supp)r(orts)h(t)n(w)n(o)e(forms)h(of)h
-(greylisting)e([Hara)o(])101 939 y(1.)42 b(simple)27
-b(greylisting:)36 b(only)27 b(uses)g(the)h(clien)n(t)g(IP)f(address)f
-(as)h(k)n(ey)-7 b(.)37 b([P)n(osa)n(].)101 1100 y(2.)42
-b(full)25 b(greylisting:)35 b(uses)25 b(a)f(tuple)i(consisting)f(of)g
-(clien)n(t)g(IP)g(address,)f(en)n(v)n(elop)r(e)h(sender,)g(and)g(en)n
-(v)n(elop)r(e)f(recipien)n(t)208 1200 y(as)i(k)n(ey)-7
-b(.)0 1409 y(The)22 b(idea)g(b)r(ehind)i(greylisting)d(is)h(simple:)34
-b(do)22 b(not)h(accept)f(mail)g(from)g(an)g(unkno)n(wn)g(source)f(on)h
-(the)h(\014rst)f(connection,)0 1509 y(but)36 b(reject)f(it)g(with)h(a)f
-(temp)r(orary)f(error.)57 b(An)n(y)36 b(MT)-7 b(A)35
-b(that)h(conforms)e(to)h(RF)n(C)g(2821)e([Kle01)o(])i(will)h(try)f(to)g
-(send)0 1609 y(the)i(mail)f(later)g(on,)i(ho)n(w)n(ev)n(er,)e(spamming)
-g(systems)g(often)h(do)f(not)g(do)g(that.)64 b(An)36
-b(IP)g(address)f(can)h(b)r(e)h(in)g(three)0 1708 y(di\013eren)n(t)27
-b(states:)36 b Fd(unknown)p Fn(:)f(the)27 b(clien)n(t)g(has)f(not)h
-(connected)f(b)r(efore)g(or)g(the)h(en)n(try)f(is)g(expired)h(from)f
-(the)h(database,)0 1808 y Fd(gr)l(eyliste)l(d)p Fn(:)48
-b(the)32 b(clien)n(t)h(has)f(connected)g(b)r(efore)g(but)h(it)g(did)g
-(not)f(y)n(et)g(connect)h(again)e(within)i(the)g(con\014gured)e(time)0
-1907 y(in)n(terv)-5 b(al,)32 b Fd(whiteliste)l(d)p Fn(:)45
-b(the)32 b(clien)n(t)f(has)f(connected)h(b)r(efore)g(and)g(it)h
-(connected)f(again)f(within)i(the)f(con\014gured)f(time)0
-2007 y(in)n(terv)-5 b(al.)52 b(The)32 b(time)i(in)n(terv)-5
-b(al)32 b(is)g(sp)r(eci\014ed)h(b)n(y)g(its)g(lo)n(w)n(er)e(limit)i
-Fm(grey_wait)c Fn(and)k(its)g(upp)r(er)g(limit)g Fm(grey_expire)p
-Fn(.)0 2107 y(A)e(lo)n(w)n(er)e(limit)i(is)g(used)g(to)f(prev)n(en)n(t)
-g(system)g(from)h(getting)f(accepted)g(that)h(just)g(send)g(a)f(single)
-g(message)g(within)h(a)0 2206 y(few)h(seconds)e(again)g(and)h(again.)47
-b(The)31 b(upp)r(er)g(limit)h(is)g(used)f(to)g(a)n(v)n(oid)f(\014lling)
-h(up)h(the)f(database.)47 b(If)32 b(an)e(en)n(try)h(has)0
-2306 y(made)24 b(it)h(to)g(the)g Fd(whiteliste)l(d)h
-Fn(state,)f(it)g(will)f(sta)n(y)g(there)g(\(at)h(least\))f(up)h(to)g
-(the)f(timeout)h(sp)r(eci\014ed)g(b)n(y)f Fm(white_expire)p
-Fn(.)0 2406 y(The)34 b(greylisting)f(algorithm)h(implemen)n(ted)h(in)f
-(MeT)-7 b(A1)35 b(uses)e(another)h(timeout)h Fm(white_timeout)29
-b Fn(after)34 b(whic)n(h)g(a)0 2505 y Fd(whiteliste)l(d)26
-b Fn(en)n(try)d(is)h(considered)f(stale)h(and)g(m)n(ust)g(go)g(through)
-f(the)i(greylisting)d(stages)h(again,)h(i.e.,)h(it)g(is)f(considered)0
-2605 y(to)k(b)r(e)g(in)g(state)g Fd(unknown)p Fn(.)37
-b(Eac)n(h)26 b(time)i(a)g(mail)g(is)f(sen)n(t)h(from)f(a)h(whitelisted)
-g(host,)g(the)g(en)n(try)f(is)h(up)r(dated,)g(to)g(a)n(v)n(oid)0
-2704 y(that)g(systems)f(whic)n(h)h(regularly)d(sen)n(t)j(mail)f(b)r
-(ecome)h(greylisted)e(again.)0 2858 y(Greylisting)h(is)g(p)r(erformed)g
-(at)g(the)h Fm(RCPT)e Fn(stage)g(of)h(the)h(SMTP)f(dialogue.)36
-b(It)28 b(is)f(only)g(done)g(when)h(a)f(v)-5 b(alid)27
-b(recipien)n(t)0 2957 y(is)j(sp)r(eci\014ed,)i(i.e.,)f(all)g(other)f(c)
-n(hec)n(ks)f(m)n(ust)i(ha)n(v)n(e)e(b)r(een)i(successful.)45
-b(Hence)31 b(clien)n(ts)f(that)h(do)f(not)h(try)f(to)g(send)h(mail)0
-3057 y(or)g(just)h(try)f(in)n(v)-5 b(alid)31 b(recipien)n(t)g
-(addresses)f(will)i(not)f(b)r(e)h(added)f(to)h(the)f(greylisting)g
-(database.)47 b(If)32 b(a)f(transaction)f(is)0 3157 y(sub)5
-b(ject)31 b(to)g(greylisting)f(then)i(the)f(session)g(is)g(ab)r(orted)f
-(with)i(an)f(421)f(error.)45 b(If)32 b(a)f(serv)n(er)e(uses)i(callbac)n
-(ks)e(to)i(v)n(erify)0 3256 y(the)c(sender)g(address,)f(then)h(the)h
-(option)e Fm(delay_greylisting)o(_e)o(rro)o(r_)o(unt)o(il)o(_D)o(ATA)20
-b Fn(\(see)27 b(Section)g(3.10,)f(item)i(3d\))0 3356
-y(is)34 b(useful)h(to)f(a)n(v)n(oid)e(unnecessary)h(dela)n(ys.)55
-b(Here)34 b(is)g(an)g(example:)49 b(host)34 b(A)h(is)f(the)g(main)h(MX)
-f(serv)n(er)e(for)i(domain)0 3455 y Fm(example.com)g
-Fn(and)k(it)g(uses)g(greylisting,)h(host)f(B)g(is)g(the)h(main)f(MX)g
-(serv)n(er)e(for)i(domain)g Fm(example.net)33 b Fn(and)38
-b(it)0 3555 y(uses)g(sender)g(callbac)n(ks.)69 b(If)39
-b(a)f(mail)h(is)g(sen)n(t)f(to)h(host)f(B)h(for)f Fm(<rcpt@example.ne)o
-(t>)32 b Fn(with)40 b(the)f(sender)f(address)0 3655 y
-Fm(<user@example.co)o(m>)18 b Fn(then)26 b(host)e(B)h(will)g(connect)g
-(to)g(host)f(A)h(to)g(test)g(whether)g Fm(<user@example.co)o(m>)18
-b Fn(is)25 b(a)g(v)-5 b(alid)0 3754 y(recipien)n(t.)35
-b(Ho)n(w)n(ev)n(er,)22 b(if)h(host)g(A)g(do)r(es)f(not)h(ha)n(v)n(e)f
-(host)h(B)f(in)h(its)g(whitelist,)i(it)e(will)g(return)g(a)f(421)g
-(error)e(after)j(the)g Fm(RCPT)0 3854 y(To:<user@example)o(.co)o(m>)30
-b Fn(command,)39 b(whic)n(h)e(\(dep)r(ending)h(on)f(the)g(implemen)n
-(tation)g(of)g(the)g(sender)g(callbac)n(k\))0 3954 y(will)h(cause)f
-(host)h(B)f(to)h(temp)r(orarily)f(reject)g(the)h(mail)g(for)f
-Fm(<rcpt@example.net)o(>)p Fn(.)61 b(By)38 b(sp)r(ecifying)g(the)g
-(option)0 4053 y Fm(delay_greylistin)o(g_e)o(rr)o(or)o(_un)o(ti)o(l_D)o
-(AT)o(A)33 b Fn(on)39 b(host)g(A)g(the)h Fm(RCPT)e Fn(command)g(will)i
-(succeed)f(and)g(the)g(original)0 4153 y(mail)27 b(to)h
-Fm(<rcpt@example.ne)o(t>)21 b Fn(will)28 b(go)f(through)g(without)h
-(dela)n(y)-7 b(.)0 4306 y(The)18 b(greylisting)f(implemen)n(tation)i
-(uses)f(t)n(w)n(o)g(p)r(ersisten)n(t)g(databases)f(\(sp)r(eci\014ed)h
-(b)n(y)h Fm(main_DB_name)13 b Fn(and)18 b Fm(secondary_DB_name)o
-Fn(\),)0 4406 y(where)30 b(the)h(second)e(DB)i(is)f(just)h(a)f
-(secondary)e(index)j(\(b)n(y)f(expiration)f(time\))j(for)d(the)i(main)f
-(DB.)h(These)f(databases)0 4505 y(should)20 b(b)r(e)h(on)g(a)f
-(\014lesystem)g(with)h(su\016cien)n(t)g(free)f(disk)h(space)e(dep)r
-(ending)i(on)g(ho)n(w)e(man)n(y)h(connections)g(from)g(di\013eren)n(t)0
-4605 y(clien)n(ts)30 b(the)h(MT)-7 b(A)30 b(receiv)n(es.)43
-b(En)n(tries)30 b(are)f(only)g(remo)n(v)n(ed)g(from)h(the)g(DB)h(if)g
-(there)f(are)f(more)g(than)h Fm(expire_limit)0 4705 y
-Fn(elemen)n(ts.)43 b(Ho)n(w)n(ev)n(er,)28 b(if)j(none)e(of)h(the)g(en)n
-(tries)f(are)f(expired)i(y)n(et,)g(then)g(the)g(n)n(um)n(b)r(er)f(of)h
-(elemen)n(ts)g(can)f(exceed)g(that)0 4804 y(limit.)0
-5071 y Fo(Greylisting:)41 b(Whitelisting)0 5278 y Fn(Greylisting)26
-b(can)g(b)r(e)h(disabled)f(for)g(selected)g(hosts)g(b)n(y)g(adding)g
-(them)h(to)g(the)g(access)e(map)h(\(see)h(Section)f(3.9.3\),)g(e.g.,)50
-5431 y Fm(cltaddr:10)400 b(relay)50 5530 y(cltaddr:127.0.0.)o(1)93
-b(quick:relay)1848 5768 y Fn(31)p eop end
-%%Page: 32 33
-TeXDict begin 32 32 bop 0 523 a Fo(P)m(ossible)30 b(Problems)h(with)g
-(Greylisting)0 730 y Fn(Some)h Fd(le)l(gitimate)i Fn(mailers)d(do)h
-(not)h(b)r(eha)n(v)n(e)e(prop)r(erly)h(and)g(will)h(not)f(retry)g(a)g
-(mail)g(that)h(had)f(a)g(temp)r(orary)g(error.)0 830
-y(This)26 b(can)g(cause)g(mail)g(loss)g(in)g(v)-5 b(arious)25
-b(situations,)i(e.g.,)f(b)r(ecause)g(the)h(receiving)e(system)h(is)g
-(curren)n(tly)g(out)g(of)g(some)0 929 y(resources.)33
-b(Ho)n(w)n(ev)n(er,)21 b(to)h(minimize)h(the)f(impact)g(of)g
-(greylisting)f(on)h(these)g(misb)r(eha)n(ving)f(mailers)g(it)i(migh)n
-(t)f(b)r(e)g(useful)0 1029 y(to)27 b(explicitly)h(whitelist)g(them)h
-(as:)50 1177 y Fm(cltaddr:12.107.2)o(09)o(.24)o(4)93
-b(ok)50 1276 y(cltaddr:64.12.13)o(7)311 b(ok)0 1426 y
-Fn(A)19 b(list)f(of)h(suc)n(h)f(brok)n(en)f(mailers)g(can)h(b)r(e)h
-(found)g(at)f Fm(http://cvs.purem)o(agi)o(c.)o(co)o(m/v)o(ie)o(wcv)o
-(s/)o(gr)o(eyl)o(is)o(tin)o(g/)o(sch)o(em)o(a/)o(whi)o(te)o(lis)o(t)p
-4247 1426 27 4 v 25 w(ip.txt)0 1525 y Fn([Harb)o(].)54
-b(A)34 b(related)e(problem)h(are)f(serv)n(er)g(farms)g(where)h(a)g
-(mail)g(migh)n(t)g(b)r(e)h(resen)n(t)e(from)h(a)g(di\013eren)n(t)g(IP)g
-(address.)0 1625 y(These)23 b(should)h(probably)e(b)r(e)i(whitelisted)h
-(to)r(o;)f(some)f(of)h(these)g(can)f(b)r(e)h(found)g(at)f(the)h(URL)g
-(giv)n(en)f(b)r(efore.)36 b(Ho)n(w)n(ev)n(er,)0 1725
-y(en)n(tries)29 b(in)h(that)g(\014le)g(whic)n(h)f(ha)n(v)n(e)g(the)h
-(commen)n(t)f(\\unique)g(sender)g(p)r(er)h(attempt")g(do)f(not)h(need)f
-(to)h(b)r(e)g(whitelisted)0 1824 y(as)d(this)h(implemen)n(tation)g(do)r
-(es)f(not)g(use)h(the)g(sender)f(address.)0 1977 y(Note:)37
-b(if)27 b(a)f(clien)n(t)h(authen)n(ticates)f(via)h(ST)-7
-b(AR)g(TTLS)27 b(or)f(A)n(UTH)h(suc)n(h)g(that)g(rela)n(ying)e(is)i
-(allo)n(w)n(ed)e(then)i(greylisting)f(is)0 2077 y(disabled)h(for)g
-(that)h(clien)n(t.)0 2403 y Fk(3.10)136 b(Con\014guration)45
-b(for)g(SMTP)f(Serv)l(er)0 2639 y Fn(The)28 b(follo)n(wing)e
-(con\014guration)g(options)h(are)g(v)-5 b(alid)27 b(for)h(SMTPS:)101
-2863 y(1.)42 b Fm(auth)p Fn(:)35 b(this)27 b(is)g(a)f(subsection)h
-(that)g(sp)r(eci\014es)g(the)g(parameters)e(for)i Fm(AUTH)e
-Fn(supp)r(ort.)36 b(It)28 b(is)f(only)f(a)n(v)-5 b(ailable)26
-b(if)h(the)208 2962 y(system)g(has)g(b)r(een)h(con\014gured)e(with)j
-(the)f(option)f Fm(--enable-SASL)p Fn(,)22 b(see)27 b(Section)h(2.2.1.)
-243 3124 y(\(a\))41 b Fm(flags)p Fn(:)35 b(\015ags)27
-b(for)g(SMTP)g(A)n(UTH)390 3237 y(See)i(the)h(Cyrus)e(SASL)i(do)r
-(cumen)n(tation)f(for)g(the)g(meaning)g(of)g(these)g(\015ags:)40
-b Fm(noplaintext)p Fn(,)25 b Fm(noactive)p Fn(,)390 3337
-y Fm(nodictionary)p Fn(,)e Fm(forward)p 1277 3337 V 28
-w(secrecy)p Fn(,)i Fm(noanonymous)p Fn(,)e Fm(pass)p
-2367 3337 V 30 w(credentials)p Fn(,)g Fm(mutual)p 3191
-3337 V 29 w(auth)p Fn(.)238 3465 y(\(b\))42 b Fm(trusted_mechanism)o(s)
-p Fn(:)c(list)31 b(of)g(SASL)g(mec)n(hanisms)g(for)f(whic)n(h)h(rela)n
-(ying)e(is)i(allo)n(w)n(ed)f(if)h(a)g(clien)n(t)g(suc-)390
-3565 y(cessfully)d(authen)n(ticated)f(using)g(one)h(of)f(those)208
-3726 y(Note:)46 b(the)32 b(name)g(for)g(the)g(Cyrus-SASL)g
-(con\014guration)e(\014le)i(is)g(curren)n(tly)g Fm(meta1.conf)p
-Fn(.)46 b(That)32 b(\014le)g(can)g(b)r(e)208 3826 y(used)27
-b(to)g(adjust)g(the)h(list)f(of)g(mec)n(hanisms)f(\(option)h
-Fm(mech)p 2054 3826 V 30 w(list)p Fn(\))f(that)h(should)g(b)r(e)h(adv)n
-(ertised)e(\(b)r(esides)h(man)n(y)208 3925 y(other)g(things\),)g(hence)
-h(this)g(option)f(is)h(not)f(in)h(the)g(SMTP)g(serv)n(er)d(itself.)101
-4086 y(2.)42 b Fm(CDB_gid)p Fn(:)34 b(\(n)n(umeric\))27
-b(group)g(id)h(for)f(CDB)h(\014les,)f(i.e.,)h(the)g(group)e(id)i(of)g
-Fm(meta1c)p Fn(,)d(see)i(Section)h(2.4.1.)101 4248 y(3.)42
-b Fm(flags)p Fn(:)243 4409 y(\(a\))f Fm(8bitmime)p Fn(:)30
-b(o\013er)20 b Fm(8BITMIME)p Fn(:)d(MeT)-7 b(A1)21 b(is)f(8)g(bit)h
-(transparen)n(t,)g(but)g(it)g(do)r(es)f(not)g(p)r(erform)g(an)n(y)g
-(con)n(v)n(ersion,)390 4509 y(so)27 b(this)h(option)f(should)h(only)f
-(b)r(e)h(used)f(if)i(all)e(comm)n(unication)g(partners)f(can)h(deal)h
-(with)g(8)f(bit)h(data.)238 4637 y(\(b\))42 b Fm(access)p
-Fn(:)34 b(use)27 b(access)e(map)h(\(in)i(SMAR\).)f(Note:)37
-b(curren)n(tly)25 b(this)i(\015ag)f(is)g(required)g(to)g(p)r(erform)g
-(a)h(rev)n(erse)390 4736 y(lo)r(okup)32 b(for)g(a)g(clien)n(t)h(IP)f
-(address)f(to)h(get)h(the)g(hostname)e(of)i(the)g(clien)n(t)f(whic)n(h)
-h(then)g(can)f(b)r(e)h(used)f(for)390 4836 y(logging)26
-b(and)i(the)g Fm(Received:)33 b Fn(header.)247 4964 y(\(c\))42
-b Fm(delay_checks)p Fn(:)31 b(dela)n(y)26 b(acceptance)f(c)n(hec)n(k)g
-(un)n(til)i Fm(RCPT)d Fn(stage)h(\(unless)h(explicitly)h(o)n(v)n
-(erridden,)d(see)i(Sec-)390 5063 y(tion)i(3.9.3\).)238
-5191 y(\(d\))42 b Fm(delay_greylisting)o(_e)o(rro)o(r_)o(un)o(til)o(_D)
-o(ATA)o Fn(:)15 b(if)22 b(greylisting)d(\(3e\))i(is)g(enabled)g(then)g
-(w)n(ait)g(un)n(til)g(the)g Fm(DATA)390 5291 y Fn(command)27
-b(to)h(return)f(an)g(error;)f(see)h(Section)h(3.9.4)e(for)h(details.)
-247 5419 y(\(e\))42 b Fm(greylisting)p Fn(:)j(enable)33
-b(simple)h(greylisting)e(\(whic)n(h)i(m)n(ust)g(also)e(b)r(e)j(enabled)
-e(in)h(SMAR,)g(see)g(Section)390 5519 y(3.9.2)27 b(item)h(6\),)f(see)g
-(Section)h(3.9.4)e(for)h(details.)1848 5768 y(32)p eop
-end
-%%Page: 33 34
-TeXDict begin 33 33 bop 252 523 a Fn(\(f)6 b(\))43 b
-Fm(fullgreylisting)p Fn(:)34 b(enable)28 b(full)i(greylisting)e(\(whic)
-n(h)h(m)n(ust)g(also)f(b)r(e)h(enabled)g(in)g(SMAR,)h(see)f(Section)390
-623 y(3.9.2)e(item)h(6\),)f(see)g(Section)h(3.9.4)e(for)h(details.)243
-751 y(\(g\))41 b Fm(rcpt_conf)p Fn(:)29 b(request)18
-b(SMAR)h(lo)r(okup)f(of)g Fm(RCPT)f Fn(address)g(in)h(the)h(access)e
-(map)i(using)f(the)g(tag)g Fm(smtps)p 3543 751 27 4 v
-29 w(rcpt)p 3748 751 V 30 w(conf)p Fn(.)390 865 y(Curren)n(tly)36
-b(the)h(RHS)h(for)e(this)h(kind)g(of)g(en)n(try)f(is)h(a)g
-Fm(flags)e Fn(option)h(and)h(the)g(only)f(p)r(ossible)h(v)-5
-b(alue)37 b(is)390 965 y Fm(greylisting)p Fn(,)23 b(whic)n(h)28
-b(allo)n(ws)e(to)i(turn)f(on)h(greylisting)e(p)r(er)h
-Fm(RCPT)p Fn(,)g(e.g.,)440 1078 y Fm(smtps)p 665 1078
-V 29 w(rcpt)p 870 1078 V 30 w(conf:some@local.)o(dom)o(ai)o(n)94
-b(flags)41 b(=)i(greylisting;)390 1193 y Fn(Note:)50
-b(this)34 b(will)g(c)n(hange)f(in)h(a)g(subsequen)n(t)g(v)n(ersion)e
-(\(syn)n(tax)h(and)h(features\))g(as)f(so)r(on)g(as)h(some)f(basic)390
-1292 y(concept)28 b(has)f(b)r(een)h(determined.)238 1421
-y(\(h\))42 b Fm(lmtp_does_not_imp)o(ly)o(_re)o(la)o(yi)o(ng)p
-Fn(:)51 b(ev)n(en)37 b(if)h(a)g(domain)f(in)h(the)g(mailertable)f(has)g
-Fm(lmtp:)55 b Fn(as)37 b(RHS)390 1520 y(do)h(not)g(implicitly)g(allo)n
-(w)f(rela)n(ying)f(to)i(it,)j(i.e.,)g(do)d(not)g(consider)e(the)j
-(domain)e(as)h(\\lo)r(cal")e(with)i(re-)390 1620 y(sp)r(ect)30
-b(to)f(rela)n(ying.)40 b(This)29 b(is)g(useful)g(for)g(an)g(MSA)h(to)f
-(a)n(v)n(oid)f(external)g(mail)h(to)g(lo)r(cal)g(domains)f(without)390
-1719 y(authen)n(tication.)261 1848 y(\(i\))42 b Fm(soft_bounce)p
-Fn(:)32 b(c)n(hange)24 b(p)r(ermanen)n(t)i(\(5xy\))g(SMTP)f(error)f
-(replies)i(in)n(to)f(temp)r(orary)g(\(4xy\))h(errors.)34
-b(This)390 1947 y(is)28 b(a)f(useful)h(feature)f(for)g(testing)h(to)f
-(a)n(v)n(oid)f(b)r(ounces)i(due)g(to)f(miscon\014gurations.)259
-2076 y(\(j\))42 b Fm(require_EHLO_befo)o(re)o(_MA)o(IL)o
-Fn(:)22 b(require)27 b Fm(EHLO)f Fn(\(or)h Fm(HELO)p
-Fn(\))f(b)r(efore)h(a)g Fm(MAIL)f Fn(command.)240 2204
-y(\(k\))42 b Fm(strict_EHLO_check)o(s)p Fn(:)31 b(p)r(erform)c(a)g
-(strict)g(syn)n(tax)g(c)n(hec)n(k)g(on)g(the)h(argumen)n(t)f(for)g
-Fm(EHLO)f Fn(\(or)h Fm(HELO)p Fn(\).)261 2332 y(\(l\))42
-b Fm(xverp)p Fn(:)50 b(o\013er)35 b Fm(XVERP)e Fn(extension)i(to)g
-(turn)h(on)f Fm(VERP)f Fn([Ber97)n(])h(supp)r(ort)g(for)g(a)g
-(transaction.)59 b(This)35 b(is)g(a)390 2432 y(parameter)26
-b(for)h(the)h Fm(MAIL)e Fn(command,)i(e.g.)390 2546 y
-Fm(MAIL)42 b(From:<sender@some)o(.d)o(om)o(ain)o(>)37
-b(XVERP)215 2674 y Fn(\(m\))42 b Fm(allow_data_before)o(_g)o(ree)o(ti)o
-(ng)o Fn(:)31 b(allo)n(w)c(a)g(clien)n(t)h(to)f(send)h(data)f(b)r
-(efore)g(the)h(initial)g(220)e(greeting.)238 2803 y(\(n\))42
-b Fm(prdr)p Fn(:)k Fm(PRDR)31 b Fn(is)h(an)h(SMTP)f(extension)g([Hal07)
-o(])h(to)g(return)f(individual)h Fm(RCPT)e Fn(status)h(after)h(the)g
-(end)g(of)390 2902 y(data)g(\(similar)f(to)h(LMTP\).)f(This)h(feature)f
-(is)h(turned)g(on)g(if)g(a)f(p)r(olicy)h(milter)g(is)g(con\014gured)e
-(\(see)i(item)390 3002 y(17\).)243 3130 y(\(o\))41 b
-Fm(lookup_session_co)o(nf)o Fn(:)35 b(Lo)r(ok)28 b(up)i(session)e
-(con\014guration)g(data)g(\(see)i(Section)f(3.10.1\))f(in)h(the)h
-(access)390 3230 y(map)e(\(whic)n(h)g(m)n(ust)f(b)r(e)h(activ)-5
-b(ated,)28 b(see)f(3b\).)101 3392 y(4.)42 b Fm(id)p Fn(:)36
-b(unique)28 b(iden)n(ti\014er)f(for)g(SMTP)g(serv)n(er)f(\(0\);)i(see)f
-(Section)h(3.10.2.)101 3553 y(5.)42 b Fm(io_timeout)p
-Fn(:)32 b(timeout)c(for)f(SMTP)h(op)r(erations.)101 3715
-y(6.)42 b Fm(max_threads)p Fn(:)32 b(maxim)n(um)27 b(n)n(um)n(b)r(er)h
-(of)f(threads.)101 3876 y(7.)42 b Fm(max_bad_command)o(s_p)o(er)o(_s)o
-(ess)o(io)o(n)p Fn(:)30 b(maxim)n(um)d(n)n(um)n(b)r(er)f(of)h(bad,)g
-(i.e.,)g(unkno)n(wn,)f(SMTP)h(commands)f(p)r(er)208 3976
-y(session)33 b(accepted)g(b)n(y)h(serv)n(er.)55 b(After)34
-b(this)h(limit)g(is)f(reac)n(hed)e(the)j(connection)e(is)h(terminated)h
-(with)f(an)g(421)208 4076 y(error.)101 4237 y(8.)42 b
-Fm(max_invalid_add)o(res)o(se)o(s_)o(per)o(_s)o(ess)o(io)o(n)33
-b Fn(maxim)n(um)39 b(n)n(um)n(b)r(er)f(of)h(in)n(v)-5
-b(alid,)42 b(e.g.,)g(unkno)n(wn,)f(R)n(CPT)d(ad-)208
-4337 y(dresses)23 b(p)r(er)h(session)f(accepted)h(b)n(y)h(serv)n(er.)34
-b(After)24 b(this)h(limit)g(is)g(reac)n(hed)e(the)i(connection)e(is)i
-(terminated)f(with)208 4436 y(an)j(421)f(error.)101 4598
-y(9.)42 b Fm(max_nop_command)o(s_b)o(et)o(we)o(en_)o(tr)o(ans)o(ac)o
-(ti)o(ons)o Fn(:)66 b(maxim)n(um)44 b(n)n(um)n(b)r(er)h(of)g(NOOP)-7
-b(,)44 b(RSET,)h(and)f(related)208 4698 y(SMTP)19 b(commands)h(b)r(et)n
-(w)n(een)g(t)n(w)n(o)f(successful)h(transactions)f(accepted)h(b)n(y)f
-(serv)n(er.)33 b(After)21 b(this)f(limit)h(is)f(reac)n(hed)208
-4797 y(the)28 b(connection)f(is)g(terminated)h(with)g(an)f(421)f
-(error.)60 4959 y(10.)41 b Fm(max_bad_command)o(s_p)o(er)o(_t)o(ran)o
-(sa)o(cti)o(on)o Fn(:)29 b(maxim)n(um)22 b(n)n(um)n(b)r(er)g(of)g(bad,)
-i(i.e.,)f(unkno)n(wn,)g(SMTP)f(commands)208 5058 y(p)r(er)i
-(transaction)f(accepted)i(b)n(y)f(serv)n(er.)34 b(After)25
-b(this)g(limit)g(is)f(reac)n(hed)g(the)h(connection)f(is)g(terminated)h
-(with)g(an)208 5158 y(421)h(error.)60 5320 y(11.)41 b
-Fm(max_nop_command)o(s_i)o(n_)o(tr)o(ans)o(ac)o(tio)o(n)p
-Fn(:)34 b(maxim)n(um)28 b(n)n(um)n(b)r(er)h(of)g(NOOP)f(and)h(related)f
-(SMTP)h(commands)208 5419 y(in)f(a)g(single)f(transaction)g(accepted)h
-(b)n(y)g(serv)n(er.)37 b(After)28 b(this)h(limit)f(is)h(reac)n(hed)d
-(the)j(connection)f(is)g(terminated)208 5519 y(with)g(an)f(421)f
-(error.)1848 5768 y(33)p eop end
-%%Page: 34 35
-TeXDict begin 34 34 bop 60 523 a Fn(12.)41 b Fm(max_invalid_add)o(res)o
-(se)o(s_)o(per)o(_t)o(ran)o(sa)o(ct)o(ion)30 b Fn(maxim)n(um)36
-b(n)n(um)n(b)r(er)g(of)g(in)n(v)-5 b(alid,)39 b(e.g.,)f(unkno)n(wn,)g
-(R)n(CPT)208 623 y(addresses)18 b(p)r(er)h(transaction)g(accepted)g(b)n
-(y)h(serv)n(er.)32 b(After)20 b(this)g(limit)h(is)e(reac)n(hed)g(the)h
-(connection)f(is)h(terminated)208 722 y(with)28 b(an)f(421)f(error.)60
-888 y(13.)41 b Fm(max_recipients_)o(per)o(_s)o(es)o(sio)o(n)p
-Fn(:)31 b(maxim)n(um)c(n)n(um)n(b)r(er)h(of)f(recipien)n(ts)g(p)r(er)h
-(session.)60 1054 y(14.)41 b Fm(max_recipients_)o(per)o(_t)o(ra)o(nsa)o
-(ct)o(ion)o Fn(:)31 b(maxim)n(um)d(n)n(um)n(b)r(er)f(of)g(recipien)n
-(ts)g(p)r(er)h(transaction.)60 1220 y(15.)41 b Fm(max_hops)p
-Fn(:)e(maxim)n(um)30 b(n)n(um)n(b)r(er)g(of)g(hops)g(\(Receiv)n(ed:)42
-b(headers\).)j(If)30 b(this)h(v)-5 b(alue)30 b(is)g(exceeded)g(the)h
-(incoming)208 1320 y(mail)c(is)h(rejected)f(b)r(ecause)g(it)h(is)g
-(considered)e(a)i(p)r(ossible)f(mail)g(lo)r(op.)60 1486
-y(16.)41 b Fm(max_message_siz)o(e)p Fn(:)31 b(maxim)n(um)c(message)g
-(size)g(\(unit:)38 b(KB\).)60 1652 y(17.)j Fm(policy_milter)p
-Fn(:)31 b(this)d(is)f(a)h(subsection)f(that)h(sp)r(eci\014es)f(the)h
-(parameters)e(for)h(pmilter)h(supp)r(ort)f(\(see)h(Section)208
-1751 y(5\).)50 b(It)32 b(is)g(only)g(a)n(v)-5 b(ailable)31
-b(if)h(it)h(has)e(b)r(een)i(enabled)f(during)f Fm(configure)e
-Fn(\()p Fm(--enable-pmilter)p Fn(,)e(see)32 b(Section)208
-1851 y(2.2.1\).)243 2017 y(\(a\))41 b Fm(socket)p Fn(:)35
-b(this)27 b(is)h(a)e(subsection)h(that)h(sp)r(eci\014es)f(the)h(so)r(c)
-n(k)n(et)e(to)i(comm)n(unicate)f(with)g(p)r(olicy)h(milter.)37
-b(The)390 2116 y(t)n(yp)r(e)28 b(\(option)g Fm(type)p
-Fn(\))e(of)h(the)h(so)r(c)n(k)n(et)f(m)n(ust)h(b)r(e)g(either)f
-Fm(inet)f Fn(or)h Fm(unix)p Fn(.)458 2249 y(i.)41 b Fm(type)h(=)i(inet)
-560 2365 y Fn(A.)e Fm(port)p Fn(:)35 b(p)r(ort)27 b(n)n(um)n(b)r(er)h
-(for)f(connection.)563 2482 y(B.)42 b Fm(address)p Fn(:)34
-b(IP)27 b(address)f(for)h(connection.)435 2598 y(ii.)41
-b Fm(type)h(=)i(unix)560 2714 y Fn(A.)e Fm(path)p Fn(:)35
-b(pathname)27 b(of)h(Unix)g(Domain)f(so)r(c)n(k)n(et.)238
-2847 y(\(b\))42 b Fm(timeout)p Fn(:)34 b(maxim)n(um)28
-b(amoun)n(t)f(of)g(time)h(to)g(w)n(ait)f(for)g(a)g(reply)g(from)h(a)f
-(p)r(olicy)g(milter.)247 2979 y(\(c\))42 b Fm(flags)p
-Fn(:)c(p)r(olicy)29 b(milter)g(\015ags.)39 b(If)30 b(the)f(connection)g
-(to)f(pmilter)i(fails)e(then)i(SMTPS)f(will)g(ignore)e(pmilter)390
-3079 y(b)n(y)h(default.)37 b(This)27 b(b)r(eha)n(vior)g(can)g(b)r(e)h
-(c)n(hanged)e(b)n(y)i(setting)f(one)h(of)f(follo)n(wing)g(t)n(w)n(o)f
-(\015ags:)458 3212 y(i.)41 b Fm(abort)p Fn(:)35 b(if)28
-b(the)g(connection)g(to)f(pmilter)h(fails)f(then)h(ab)r(ort)f(the)h
-(curren)n(t)f(session)g(with)h(a)f(421)f(error.)435 3328
-y(ii.)41 b Fm(accept_but_reconn)o(ect)o Fn(:)27 b(if)18
-b(the)h(connection)f(to)h(pmilter)f(fails)g(then)h(con)n(tin)n(ue)f
-(the)h(curren)n(t)f(session)545 3428 y(but)29 b(try)e(to)g(reconnect)g
-(for)g(the)h(next)g(session.)60 3593 y(18.)41 b Fm(processes)p
-Fn(:)33 b(n)n(um)n(b)r(er)27 b(of)h(pro)r(cesses)e(to)h(start.)60
-3759 y(19.)41 b Fm(protected_recip)o(ien)o(ts)o Fn(:)31
-b(this)c(is)g(a)f(subsection)h(whic)n(h)f(pro)n(vides)g(a)g(few)h
-(simple)g(options)g(to)f Fd(pr)l(ote)l(ct)h Fn(recipi-)208
-3859 y(en)n(ts)g(b)n(y)g(restricting)g(who)g(can)g(send)h(mail)f(to)h
-(them.)243 4025 y(\(a\))41 b Fm(allow_by)p Fn(:)49 b(this)36
-b(is)f(a)g(required)f(subsection)h(whic)n(h)g(has)g(t)n(w)n(o)f(p)r
-(ossible)h(\015ags)g(\(at)g(least)g(one)g(m)n(ust)g(b)r(e)390
-4125 y(sp)r(eci\014ed\).)458 4257 y(i.)41 b Fm(sender)p
-Fn(:)j(allo)n(w)32 b(sending)g(mail)g(based)g(on)g(the)g(en)n(v)n(elop)
-r(e)g(sender)f(\()p Fm(MAIL)p Fn(\))h(address.)49 b(Ev)n(en)32
-b(though)545 4357 y(this)c(address)f(can)g(b)r(e)h(forged)f(it)h(pro)n
-(vides)e(some)h(basic)g(protection.)435 4473 y(ii.)41
-b Fm(client_ip)p Fn(:)34 b(allo)n(w)26 b(sending)h(mail)h(based)f(on)g
-(the)h(clien)n(t)g(IP)f(address.)238 4606 y(\(b\))42
-b Fm(match_type)p Fn(:)34 b(this)28 b(sp)r(eci\014es)g(what)g(t)n(yp)r
-(e)g(of)g(matc)n(hing)g(should)g(b)r(e)g(done.)38 b(By)28
-b(default,)h(exact)e(matc)n(hes)390 4705 y(are)g(required.)36
-b(Alternativ)n(ely)-7 b(,)27 b(one)g(of)h(the)g(follo)n(wing)e(t)n(w)n
-(o)h(options)g(can)g(b)r(e)h(selected:)458 4838 y(i.)41
-b Fm(generic_lookup)p Fn(:)31 b(the)c(items)g(are)f(lo)r(ok)n(ed)f(up)i
-(according)e(to)h(the)h(algorithm)f(sp)r(eci\014ed)h(in)g(Section)545
-4938 y(3.12.1.)435 5054 y(ii.)41 b Fm(implicitly_match_)o(det)o(ai)o(l)
-p Fn(:)30 b(the)c(items)g(are)f(lo)r(ok)n(ed)g(up)h(according)f(to)g
-(the)i(algorithm)d(sp)r(eci\014ed)545 5154 y(in)37 b(Section)f(3.12.1.)
-61 b(and)36 b(additionally)g Fm(+detail)d Fn(is)k(implicitly)g(matc)n
-(hed)f(when)g(the)h(pattern)f(is)545 5253 y(\\)p Fm(user@hostname)p
-Fn(".)68 b(That)40 b(is,)j(it)d(o)n(v)n(errides)d(the)k(default)f(matc)
-n(hing)f(explained)h(in)g(case)f(1e)g(in)545 5353 y(Section)28
-b(3.12.1.)208 5519 y(See)f(Section)h(3.10.3)e(for)h(details.)1848
-5768 y(34)p eop end
-%%Page: 35 36
-TeXDict begin 35 35 bop 60 523 a Fn(20.)41 b Fm(max_transaction)o(s)p
-Fn(:)31 b(maxim)n(um)c(n)n(um)n(b)r(er)h(of)f(transactions)f(p)r(er)i
-(session.)60 683 y(21.)41 b Fm(tls)p Fn(:)35 b(this)28
-b(is)g(a)f(subsection)h(that)g(sp)r(eci\014es)f(the)h(parameters)e(for)
-h Fm(STARTTLS)e Fn(supp)r(ort.)37 b(It)28 b(is)f(only)h(a)n(v)-5
-b(ailable)26 b(if)208 782 y(the)j(system)g(b)r(een)g(con\014gured)f
-(with)i(the)f(option)g Fm(--enable-TLS)p Fn(,)24 b(see)29
-b(Section)g(2.2.1.)40 b(See)29 b(Section)g(11.1)f(for)208
-882 y(some)f(bac)n(kground)e(information)i(ab)r(out)h(these)f(options.)
-243 1055 y(\(a\))41 b Fm(cache_size)p Fn(:)33 b(size)27
-b(of)h(TLS)g(session)e(session)h(cac)n(he)f(\(0:)37 b(disable)27
-b(cac)n(he\).)238 1182 y(\(b\))42 b Fm(cache_timeout)p
-Fn(:)32 b(timeout)c(for)f(en)n(tries)g(in)h(TLS)f(session)g(session)f
-(cac)n(he.)247 1308 y(\(c\))42 b Fm(cert_file)p Fn(:)33
-b(\014le)28 b(with)g(certi\014cate)f(in)h(PEM)f(format.)238
-1435 y(\(d\))42 b Fm(key_file)p Fn(:)34 b(\014le)28 b(with)g(priv)-5
-b(ate)27 b(k)n(ey)g(for)g(certi\014cate)g(in)h(PEM)f(format.)247
-1561 y(\(e\))42 b Fm(CAcert_file)p Fn(:)33 b(\014le)27
-b(with)h(CA)g(certi\014cate)f(in)h(PEM)f(format.)252
-1688 y(\(f)6 b(\))43 b Fm(CAcert_directory)p Fn(:)31
-b(directory)26 b(with)i(\(sym)n(b)r(olic)f(links)h(for\))f(CA)h
-(certi\014cates)f(in)h(PEM)f(format.)243 1814 y(\(g\))41
-b Fm(flags)p Fn(:)c(some)27 b(\015ags)h(are)f(a)n(v)-5
-b(ailable)27 b(to)h(in\015uence)h(the)g(b)r(eha)n(vior)e(of)h(the)h
-(SMTP)f(serv)n(er)f(with)i(resp)r(ect)f(to)390 1914 y(ST)-7
-b(AR)g(TTLS.)458 2040 y(i.)41 b Fm(allow_relaying_if)o(_ve)o(ri)o(fie)o
-(d)p Fn(:)i(if)34 b(the)g(clien)n(t)f(presen)n(ted)g(a)g(certi\014cate)
-g(that)h(can)f(b)r(e)h(v)n(eri\014ed)545 2140 y(b)n(y)41
-b(the)h(CA)f(certi\014cates)g(that)g(are)f(a)n(v)-5 b(ailable)40
-b(to)h(the)h(serv)n(er)d(\(see)i(ab)r(o)n(v)n(e:)63 b
-Fm(CAcert_file)37 b Fn(and)545 2240 y Fm(CAcert_directory)p
-Fn(\),)22 b(then)28 b(rela)n(ying)e(is)h(allo)n(w)n(ed)g(for)g(the)h
-(SMTP)f(session.)435 2353 y(ii.)41 b Fm(check_access_map_)o(for)o(_r)o
-(ela)o(yi)o(ng)o Fn(:)31 b(if)26 b(this)g(\015ag)f(is)h(set)f(then)i
-(the)f(access)f(map)g(\(whic)n(h)h(m)n(ust)g(b)r(e)545
-2452 y(activ)-5 b(ated,)29 b(see)f(3b\))h(is)f(c)n(hec)n(k)n(ed)g(to)g
-(see)g(whether)h(rela)n(ying)d(should)j(b)r(e)g(allo)n(w)n(ed)e(for)h
-(a)g(clien)n(t)h(whic)n(h)545 2552 y(presen)n(ted)d(a)f(certi\014cate)h
-(that)g(has)f(b)r(een)i(v)n(eri\014ed)e(\(see)h(ab)r(o)n(v)n(e\).)35
-b(F)-7 b(or)25 b(this)i(purp)r(ose,)e(the)i(DN)f(of)g(the)545
-2652 y(cert)35 b(issuer)f(is)g(lo)r(ok)n(ed)g(up)h(in)f(the)h(access)f
-(map)g(using)h(the)g(tag)f Fm(certissuer:)p Fn(.)53 b(If)35
-b(the)g(resulting)545 2751 y(v)-5 b(alue)30 b(is)g Fm(relay)p
-Fn(,)e(rela)n(ying)g(is)h(allo)n(w)n(ed.)42 b(If)30 b(it)g(is)g
-Fm(cont)p Fn(,)f(the)h(DN)g(of)g(the)g(cert)f(sub)5 b(ject)30
-b(is)g(lo)r(ok)n(ed)e(up)545 2851 y(next)36 b(in)f(the)h(access)d(map)i
-(using)g(the)h(tag)e Fm(certsubject:)p Fn(.)54 b(If)36
-b(the)f(v)-5 b(alue)35 b(is)g Fm(relay)p Fn(,)g(rela)n(ying)f(is)545
-2951 y(allo)n(w)n(ed;)27 b(ev)n(ery)f(other)h(v)-5 b(alue)28
-b(is)f(curren)n(tly)g(ignored.)545 3050 y(T)-7 b(o)25
-b(a)n(v)n(oid)e(problems)h(with)h(the)g(DN)g(names)f(in)h(map)g(lo)r
-(okups,)f(they)h(are)f(mo)r(di\014ed)h(as)f(follo)n(ws:)34
-b(eac)n(h)545 3150 y(non-prin)n(table)23 b(c)n(haracter)e(and)j(the)g
-(c)n(haracters)d(')p Fm(<)p Fn(',)j(')p Fm(>)p Fn(',)h(')p
-Fm(\()p Fn(',)f(')p Fm(\))p Fn(',)g(')p Fm(")p Fn(',)g(')p
-Fm(+)p Fn(',)h(')43 b(')24 b(are)f(replaced)f(b)n(y)i(their)545
-3249 y(hexadecimal)j(ASCI)r(I)i(v)-5 b(alue)27 b(with)h(a)f(leading)g
-(')p Fm(+)p Fn('.)37 b(F)-7 b(or)27 b(example:)545 3349
-y Fm(/C=US/ST=Californ)o(ia/)o(O=)o(end)o(ma)o(il)o(.or)o(g/)o(OU=)o
-(pr)o(iv)o(ate)o(/C)o(N=)545 3449 y(Darth)42 b(Mail)g
-(\(Cert\)/emailAddr)o(es)o(s=d)o(ar)o(th+)o(ce)o(rt)o(@en)o(dm)o(ail)o
-(.o)o(rg)545 3548 y Fn(is)28 b(enco)r(ded)f(as:)545 3648
-y Fm(/C=US/ST=Californ)o(ia/)o(O=)o(end)o(ma)o(il)o(.or)o(g/)o(OU=)o
-(pr)o(iv)o(ate)o(/C)o(N=)545 3748 y(Darth+20Mail+20+2)o(8Ce)o(rt)o(+29)
-o(/e)o(ma)o(ilA)o(dd)o(res)o(s=)o(da)o(rth)o(+2)o(Bce)o(rt)o(@en)o(dm)o
-(ai)o(l.o)o(rg)545 3847 y Fn(Examples:)545 3947 y(T)-7
-b(o)28 b(allo)n(w)e(rela)n(ying)g(for)h(ev)n(ery)n(one)f(who)h(can)g
-(presen)n(t)g(a)g(cert)h(signed)f(b)n(y)545 4046 y Fm
-(/C=US/ST=Californ)o(ia/)o(O=)o(end)o(ma)o(il)o(.or)o(g/)o(OU=)o(pr)o
-(iv)o(ate)o(/C)o(N=)545 4146 y(Darth+20Mail+20+2)o(8Ce)o(rt)o(+29)o(/e)
-o(ma)o(ilA)o(dd)o(res)o(s=)o(da)o(rth)o(+2)o(Bce)o(rt)o(@en)o(dm)o(ai)o
-(l.o)o(rg)545 4246 y Fn(simply)h(use:)595 4340 y Fm(certissuer:/C=US/)o
-(ST)o(=Ca)o(li)o(for)o(ni)o(a/)o(O=e)o(nd)o(mai)o(l.)o(or)o(g/O)o(U=)o
-(pri)o(va)o(te/)o(CN)o(=)595 4439 y(Darth+20Mail+20+2)o(8C)o(ert)o(+2)o
-(9/e)o(ma)o(il)o(Add)o(re)o(ss=)o(da)o(rt)o(h+2)o(Bc)o(ert)o(@e)o(ndm)o
-(ai)o(l.)o(org)93 b(relay)545 4535 y Fn(T)-7 b(o)28 b(allo)n(w)e(rela)n
-(ying)g(only)h(for)g(a)g(subset)h(of)g(mac)n(hines)f(that)g(ha)n(v)n(e)
-g(a)g(cert)g(signed)g(b)n(y)545 4635 y Fm(/C=US/ST=Californ)o(ia/)o(O=)
-o(end)o(ma)o(il)o(.or)o(g/)o(OU=)o(pr)o(iv)o(ate)o(/C)o(N=)545
-4735 y(Darth+20Mail+20+2)o(8Ce)o(rt)o(+29)o(/e)o(ma)o(ilA)o(dd)o(res)o
-(s=)o(da)o(rth)o(+2)o(Bce)o(rt)o(@en)o(dm)o(ai)o(l.o)o(rg)545
-4834 y Fn(use:)595 4912 y Fm(certissuer:/C=US/)o(ST)o(=Ca)o(li)o(for)o
-(ni)o(a/)o(O=e)o(nd)o(mai)o(l.)o(or)o(g/O)o(U=)o(pri)o(va)o(te/)o(CN)o
-(=)595 5012 y(Darth+20Mail+20+2)o(8C)o(ert)o(+2)o(9/e)o(ma)o(il)o(Add)o
-(re)o(ss=)o(da)o(rt)o(h+2)o(Bc)o(ert)o(@e)o(ndm)o(ai)o(l.)o(org)93
-b(cont)595 5112 y(CertSubject:/C=US)o(/S)o(T=C)o(al)o(ifo)o(rn)o(ia)o
-(/O=)o(en)o(dma)o(il)o(.o)o(rg/)o(OU)o(=pr)o(iv)o(ate)o(/C)o(N=)595
-5211 y(DeathStar/emailAd)o(dr)o(ess)o(=d)o(eat)o(hs)o(ta)o(r@e)o(nd)o
-(mai)o(l.)o(or)o(g)922 b(relay)545 5306 y Fn(Notes:)604
-5419 y Fc(\017)41 b Fn(line)23 b(breaks)g(ha)n(v)n(e)f(b)r(een)i
-(inserted)g(after)f Fm(CN=)f Fn(for)h(readabilit)n(y)-7
-b(,)24 b(eac)n(h)f(tagged)f(en)n(try)h(m)n(ust)h(b)r(e)g(one)687
-5519 y(\(long\))j(line)h(in)g(the)g(access)e(map.)1848
-5768 y(35)p eop end
-%%Page: 36 37
-TeXDict begin 36 36 bop 604 523 a Fc(\017)41 b Fn(if)24
-b(Op)r(enSSL)g(0.9.6)e(is)i(used)g(then)g(the)g Fm(emailAddress=)19
-b Fn(part)k(of)h(a)f(DN)i(is)f(replaced)e(b)n(y)i Fm(Email=)p
-Fn(.)238 655 y(\(h\))42 b Fm(requirements_viol)o(at)o(ion)o
-Fn(:)51 b(This)37 b(option)g(decides)h(ho)n(w)f(to)g(\(globally\))g
-(handle)g(TLS)h(requiremen)n(t)390 755 y(violations)c(\(see)h(Section)h
-(3.10.1\).)58 b(P)n(ossible)34 b(v)-5 b(alues)35 b(are:)51
-b Fm(permfail)p Fn(:)e(generate)34 b(p)r(ermanen)n(t)h(failure,)390
-854 y Fm(tempfail)p Fn(:)f(generate)26 b(temp)r(orary)g(failure,)i
-Fm(abort)p Fn(:)34 b(ab)r(ort)27 b(session.)36 b(These)27
-b(option)g(tak)n(e)g(e\013ect)h(when)g(a)390 954 y Fm(MAIL)e
-Fn(command)h(is)h(issued)f(b)n(y)h(the)g(clien)n(t.)60
-1135 y(22.)41 b Fm(session_feature)o(s)p Fn(:)27 b(This)20
-b(section)f(can)g(b)r(e)h(used)g(to)g(de\014ne)g(classes)e(of)i
-(features)f(for)g(an)g(SMTP)h(serv)n(er)e(session)208
-1235 y(whic)n(h)23 b(then)i(can)e(b)r(e)i(referenced)e(via)g(the)h
-(access)f(map.)36 b(Av)-5 b(ailable)23 b(\015ags)g(are)g(a)g(subset)h
-(of)g(those)g(listed)g(in)g(item)208 1335 y(3:)41 b Fm(starttls)p
-Fn(,)28 b Fm(auth)p Fn(,)i Fm(delay_checks)p Fn(,)c Fm
-(allow_data_befor)o(e_g)o(re)o(et)o(ing)o Fn(,)f Fm(require_EHLO_befo)o
-(re_)o(MA)o(IL)o Fn(,)208 1434 y Fm(strict_EHLO_che)o(cks)o
-Fn(,)d Fm(check_EHLO)p Fn(.)208 1567 y(Example:)36 b(to)27
-b(turn)h(o\013)f Fm(STARTTLS)e Fn(for)i(some)g(clien)n(ts,)g(declare)g
-(a)g Fm(notls)f Fn(class)g(in)i(the)g(con\014guration)e(\014le:)208
-1780 y Fm(session_feature)o(s)81 b(notls)42 b({)h(flags)e(=)i({)h
-(-starttls)c(}})208 1994 y Fn(and)27 b(reference)g(it)h(in)g(the)g
-(access)e(map)h(for)g(those)h(clien)n(ts:)208 2207 y
-Fm(smtps_session_c)o(onf)o(:2)o(17)o(.12)o(6.)o(135)o(.1)o(48)37
-b(session_feature=)o(not)o(ls)o(;)0 2493 y Fj(3.10.1)113
-b(SMTP)37 b(Serv)m(er)g(Session)i(Con\014guration)0 2700
-y Fn(Some)31 b(options)g(can)g(b)r(e)g(set)g(via)g(the)h(access)e(map)h
-(\(see)g(Section)g(3.9.3,)g(tag)g Fm(smtps)p 2711 2700
-27 4 v 29 w(session)p 3048 2700 V 29 w(conf)p Fn(\))f(b)r(ecause)g
-(they)0 2799 y(apply)c(to)h(a)f(session,)g(not)h(globally)-7
-b(.)35 b(Curren)n(tly)26 b(a)n(v)-5 b(ailable)25 b(are:)36
-b(ST)-7 b(AR)g(TTLS)27 b(requiremen)n(ts)f(\()p Fm(tls_requirements)o
-Fn(\))0 2899 y(\(see)i(Section)f(3.13\))g(and)g Fm(session_features)21
-b Fn(\(see)28 b(Section)f(3.10,)g(item)h(22\).)0 3185
-y Fj(3.10.2)113 b(Multiple)38 b(SMTP)f(Serv)m(ers)h(with)f(di\013eren)m
-(t)h(Con\014gurations)0 3392 y Fn(The)44 b(normal)f(w)n(a)n(y)f(to)i
-(run)g(m)n(ultiple)g(SMTP)g(serv)n(ers)d(is)j(to)g(let)g(MCP)f(start)h
-(sev)n(eral)e(SMTP)h(serv)n(ers.)84 b(Eac)n(h)0 3491
-y(SMTP)28 b(serv)n(er)f(m)n(ust)h(giv)n(en)g(a)g(unique)h(iden)n
-(ti\014er)f(\(see)g(Section)h(3.10,)e(item)i(4\))g(and)f(eac)n(h)f
-(SMTP)i(serv)n(er)d(section)i(in)0 3591 y Fm(meta1.conf)f
-Fn(m)n(ust)k(ha)n(v)n(e)f(a)g(unique)i(name)e(\(e.g.,)i(MT)-7
-b(A)31 b(and)g(MSA\),)h(whic)n(h)f(is)g(passed)f(via)h(the)g(option)g
-Fm(-N)42 b Fd(name)0 3690 y Fn(to)27 b Fm(smtps)p Fn(.)35
-b(Example:)h Fm(meta1.conf)p Fn(:)0 3925 y Fm(smtps)42
-b(MTA)g({)87 4024 y(id)h(=)g(0;)87 4124 y(listen_socket)38
-b({)44 b(type=inet;)39 b(port)j(=)h(25;)f(})87 4224 y(start_action)d(=)
-k(pass;)e(pass_fd_socket)d(=)43 b(smtps/mtafd;)87 4323
-y(user)f(=)h(meta1s;)87 4423 y(path)f(=)h(/usr/libexec/smtp)o(s;)87
-4522 y(arguments)d(=)j("smtps)e(-N)i(MTA)f(-f)h(/etc/meta1/meta1.)o(co)
-o(nf)o(";)87 4622 y(log)g({)g(facility)d(=)j(mail;)f(ident=meta1-MTA)o
-(;)c(})0 4722 y(})0 4921 y(smtps)k(MSA)g({)87 5021 y(id)h(=)g(1;)87
-5120 y(listen_socket)38 b({)44 b(type=inet;)39 b(port)j(=)h(587;)f(})87
-5220 y(start_action)d(=)k(pass;)e(pass_fd_socket)d(=)43
-b(smtps/msafd;)87 5320 y(user)f(=)h(meta1s;)87 5419 y(path)f(=)h
-(/usr/libexec/smtp)o(s;)87 5519 y(arguments)d(=)j("smtps)e(-N)i(MSA)f
-(-f)h(/etc/meta1/meta1.)o(co)o(nf)o(";)1848 5768 y Fn(36)p
-eop end
-%%Page: 37 38
-TeXDict begin 37 37 bop 87 523 a Fm(log)43 b({)g(facility)d(=)j(mail;)f
-(ident=meta1-MSA)o(;)c(})87 623 y(auth)k({)h(trusted_mechanism)o(s)37
-b(=)44 b("CRAM-MD5)39 b(DIGEST-MD5";)392 722 y(flags)j(=)h({)g
-(noplaintext)c(};)k(})g(})0 959 y Fn(F)-7 b(or)24 b(tests)g(it)g(is)g
-(also)g(p)r(ossible)f(to)h(let)h(MCP)f(start)f(only)h(one)g(SMTP)g
-(serv)n(er)e(whic)n(h)i(creates)f(sev)n(eral)g(copies)g(of)h(itself)h
-(if)0 1058 y(m)n(ultiple)f(daemon)f(addresses)e(are)i(sp)r(eci\014ed)g
-(\(see)h(Section)f(3.10,)g(item)h(1\).)35 b(Note:)g(this)24
-b(only)f(w)n(orks)e(for)i(unprivileged)0 1158 y(p)r(orts)k(b)r(ecause)g
-(the)h(SMTP)g(serv)n(er)d(do)r(es)j(not)f(run)h(as)f(ro)r(ot.)0
-1444 y Fj(3.10.3)113 b(Protecting)36 b(Recipien)m(ts)0
-1651 y Fn(A)d(few)f(simple)h(features)f(are)f(a)n(v)-5
-b(ailable)31 b(to)h Fd(pr)l(ote)l(ct)h Fn(recipien)n(ts)e(b)n(y)h
-(restricting)g(who)g(can)g(send)g(mail)g(to)g(them.)52
-b(T)-7 b(o)0 1750 y(do)27 b(this)h(the)h(con\014guration)d(section)h
-Fm(protected_recipi)o(ent)o(s)22 b Fn(m)n(ust)27 b(b)r(e)h(turned)g(on)
-g(and)f(at)h(least)f(one)h(of)f(the)h(t)n(w)n(o)0 1850
-y(\015ags)k Fm(sender)e Fn(and)i Fm(client_ip)e Fn(m)n(ust)i(b)r(e)h
-(selected)g(\(see)g(Section)f(3.10,)h(item)g(19a\).)51
-b(If)33 b(this)g(is)g(done,)h(then)f(ev)n(ery)0 1950
-y(recipien)n(t)28 b(is)h(lo)r(ok)n(ed)f(up)h(in)g(the)g(access)f(map)g
-(\(whic)n(h)h(m)n(ust)g(b)r(e)g(activ)-5 b(ated,)29 b(see)g(Section)g
-(3.10,)e(item)j(3b\),)f(using)f(the)0 2049 y(tag)d Fm(protectedrcpt:)p
-Fn(.)31 b(If)c(a)e(matc)n(hing)h(en)n(try)f(is)h(found,)h(it)f(m)n(ust)
-h(ha)n(v)n(e)e(a)g(list)i(of)f(\(one)g(or)f(more\))g(restrictions,)g
-(eac)n(h)0 2149 y(of)j(whic)n(h)f(m)n(ust)h(b)r(e)g(one)f(of)h(the)g
-(follo)n(wing:)50 2297 y(restriction)545 b(required)27
-b Fm(allow_by)d Fn(\015ag)p 0 2330 1848 4 v 50 2400 a
-Fm(from:)p Fn(sender)464 b Fm(sender)50 2499 y(cltaddr:)p
-Fn(IPv4-address)93 b Fm(client_ip)50 2599 y(list:)p Fn(alias)533
-b Fm(sender)0 2748 y Fn(The)27 b(meaning)f(of)h(the)g(\014rst)f(t)n(w)n
-(o)g(restriction)g(t)n(yp)r(es)h(should)f(b)r(e)h(ob)n(vious,)f(the)h
-(third)g(one)f(is)h(in)n(teresting:)36 b(it)27 b(refers)f(to)0
-2848 y(an)k(alias)f(\(in)h(the)h(aliases)e(map,)h(see)g(Section)g
-(3.9.3\))f(and)h(requires)f(that)h(the)h(sender)e(address)g(matc)n(hes)
-g(one)h(of)g(the)0 2948 y(en)n(tries)e(to)g(whic)n(h)g(the)h(alias)e
-(expands.)39 b(This)28 b(can)g(b)r(e)h(used)f(to)h(allo)n(w)e(only)h
-(subscrib)r(ed)g(mem)n(b)r(ers)g(of)g(a)g(mailing)g(list)0
-3047 y(to)f(send)h(mail)g(to)f(it.)0 3200 y(The)f(restrictions)f(are)h
-(ev)-5 b(aluated)26 b(sequen)n(tially)-7 b(,)26 b(if)g(there)h(is)f(a)g
-(matc)n(h,)g(the)h(recipien)n(t)f(is)g(accepted)g(\()p
-Fd(se)l(quential)j(OR)p Fn(\).)0 3300 y(If)f(none)f(of)h(them)g(matc)n
-(hes,)f(the)h(recipien)n(t)f(is)h(rejected.)0 3453 y(By)23
-b(default)g(exact)g(matc)n(hes)f(are)g(required.)35 b(Ho)n(w)n(ev)n
-(er,)22 b(if)h(the)h(\015ag)e Fm(generic_lookup)17 b
-Fn(is)23 b(set)g(\(see)g(Section)g(3.10,)g(item)0 3553
-y(19b\),)h(the)f(items)g(are)f(lo)r(ok)n(ed)g(up)i(as)e(sp)r(eci\014ed)
-h(in)h(Section)f(3.12.1.)33 b(The)23 b(\015ag)g Fm(implicitly_matc)o
-(h_d)o(et)o(ail)16 b Fn(is)23 b(useful)0 3653 y(for)k(the)h
-Fm(list:)35 b Fn(restriction)26 b(if)j(a)e(sender)g(uses)g
-Fm(+detail)e Fn(without)j(ha)n(ving)e(that)i(sp)r(eci\014ed)g(during)f
-(subscription.)0 3806 y(Examples:)36 b(consider)26 b(the)i(follo)n
-(wing)f(aliases)f(map:)50 3954 y Fm(list1:)97 b(<user1-1@l1-1.do)o(m>)
-37 b(<user2-1@l1-1.do)o(m>)g(<list2@local.dom>)50 4053
-y(list2:)97 b(<user1-2@l2-1.do)o(m>)37 b(<user2-2@l2-2.do)o(m>)50
-4153 y(list3:)97 b(<user1-3@l3-1.do)o(m>)37 b(<user2-3@l3-2.do)o(m>)0
-4302 y Fn(together)27 b(with)h(this)g(access)e(map:)50
-4450 y Fm(protectedrcpt:li)o(st)o(1@l)o(oc)o(al)o(.do)o(m)93
-b(list:<list1@local)o(.do)o(m>)50 4550 y(protectedrcpt:li)o(st)o(3)529
-b(from:<moderator3@)o(loc)o(al)o(.do)o(m>)37 b(cltaddr:1.2.3.4)g
-(cltaddr:10)0 4699 y Fn(The)18 b(mails)g(to)h Fm(<list1@local.do)o(m>)
-12 b Fn(are)17 b(only)h(accepted)h(from)f Fm(<user1-1@l1-1.d)o(om>)12
-b Fn(and)18 b Fm(<user2-1@l1-1.do)o(m>)o Fn(.)0 4799
-y(Note:)34 b(the)22 b(list)g(is)f(not)h(recursiv)n(ely)d(expanded,)k
-(i.e.,)g(mem)n(b)r(ers)e(of)h Fm(list2)d Fn(are)i(not)h(allo)n(w)n(ed,)
-f(that)h(restriction)e(m)n(ust)i(b)r(e)0 4898 y(listed)f(in)g(the)g
-(access)e(map.)35 b(Mails)20 b(to)g Fm(<list3@local.dom>)14
-b Fn(are)20 b(only)g(accepted)g(from)h Fm(<moderator3@loc)o(al.)o(do)o
-(m>)o Fn(,)0 4998 y(the)31 b(clien)n(t)f(with)g(the)h(IPv4)e(address)g
-(1.2.3.4,)g(or)g(clien)n(ts)h(in)h(the)f(IPv4)f(net)i(10.)44
-b(The)30 b(latter)g(requires)e(that)j(the)f(\015ag)0
-5098 y Fm(generic_lookup)22 b Fn(is)27 b(turned)h(on)f(to)r(o.)1848
-5768 y(37)p eop end
-%%Page: 38 39
-TeXDict begin 38 38 bop 0 523 a Fk(3.11)136 b(Con\014guration)45
-b(for)g(SMTP)f(Clien)l(t)0 758 y Fn(The)28 b(follo)n(wing)e
-(con\014guration)g(options)h(are)g(v)-5 b(alid)27 b(for)h(SMTPC:)101
-995 y(1.)42 b Fm(io_timeout)p Fn(:)32 b(timeout)c(for)f(SMTP)h(op)r
-(erations)e(\(unit:)38 b(s\).)101 1161 y(2.)k Fm(LMTP_socket)p
-Fn(:)32 b(Unix)c(domain)f(so)r(c)n(k)n(et)g(to)g(use)h(for)f(LMTP)g
-([default:)37 b Fm(lmtpsock)p Fn(].)101 1327 y(3.)42
-b Fm(log_level)p Fn(:)33 b(logging)26 b(lev)n(el.)101
-1493 y(4.)42 b Fm(tls)p Fn(:)35 b(this)28 b(is)g(a)f(subsection)h(that)
-g(sp)r(eci\014es)f(the)h(parameters)e(for)h Fm(STARTTLS)e
-Fn(supp)r(ort.)37 b(It)28 b(is)f(only)h(a)n(v)-5 b(ailable)26
-b(if)208 1593 y(the)j(system)g(b)r(een)g(con\014gured)f(with)i(the)f
-(option)g Fm(--enable-TLS)p Fn(,)24 b(see)29 b(Section)g(2.2.1.)40
-b(See)29 b(Section)g(11.1)f(for)208 1692 y(some)f(bac)n(kground)e
-(information)i(ab)r(out)h(these)f(options.)243 1858 y(\(a\))41
-b Fm(cert_file)p Fn(:)33 b(\014le)28 b(with)g(certi\014cate)f(in)h(PEM)
-f(format.)238 1991 y(\(b\))42 b Fm(key_file)p Fn(:)34
-b(\014le)28 b(with)g(priv)-5 b(ate)27 b(k)n(ey)g(for)g(certi\014cate)g
-(in)h(PEM)f(format.)247 2124 y(\(c\))42 b Fm(CAcert_file)p
-Fn(:)33 b(\014le)27 b(with)h(CA)g(certi\014cate)f(in)h(PEM)f(format.)
-238 2257 y(\(d\))42 b Fm(CAcert_directory)p Fn(:)31 b(directory)26
-b(with)i(\(sym)n(b)r(olic)f(links)h(for\))f(CA)h(certi\014cates)f(in)h
-(PEM)f(format.)101 2423 y(5.)42 b Fm(wait_for_server)o
-Fn(:)j(maxim)n(um)34 b(amoun)n(t)f(of)h(time)h(to)f(w)n(ait)g(for)g(a)g
-(serv)n(er)e(\(QMGR\))j(to)f(b)r(ecome)g(a)n(v)-5 b(ailable)208
-2522 y(\(unit:)37 b(s\).)0 2808 y Fj(3.11.1)113 b(SMTP)37
-b(Clien)m(t)g(Session/Recipien)m(t)i(Con\014guration)0
-3015 y Fn(The)25 b(follo)n(wing)f(options)g(can)g(only)h(b)r(e)g(set)g
-(via)f(the)h(access)f(map)h(\(see)f(Section)h(3.9.3,)f(tag)h
-Fm(smtpc)p 3104 3015 27 4 v 29 w(rcpt)p 3309 3015 V 30
-w(conf)p Fn(\))e(or)h(the)0 3115 y(con\014guration)f(map)i(for)g(QMGR)g
-(\(see)g(3.8.1,)f(tag)g Fm(smtpc)p 1847 3115 V 30 w(session)p
-2185 3115 V 28 w(conf)p Fn(\))g(not)h(in)g(the)g(SMTP)g(clien)n(t)g
-(con\014guration)0 3215 y(section)19 b(itself,)i(as)d(they)h(apply)g
-(to)g(a)f(session)g(or)g(recipien)n(t,)j(not)e(globally)-7
-b(.)33 b(Curren)n(tly)18 b(only)g(ST)-7 b(AR)g(TTLS)20
-b(requiremen)n(ts)0 3314 y(are)k(a)n(v)-5 b(ailable)23
-b(whic)n(h)i(are)e(do)r(cumen)n(ted)i(in)g(Section)g(3.13,)f(more)g
-(option)g(migh)n(t)h(b)r(e)g(added)f(later)g(on.)36 b(Note:)f(as)24
-b(more)0 3414 y(options)j(migh)n(t)h(b)r(e)g(added,)f(the)h(structure)f
-(of)h(this)g(ma)n(y)e(c)n(hange)h(a)g(bit.)0 3742 y Fk(3.12)136
-b(Lo)t(okup)44 b(Orders)0 3994 y Fj(3.12.1)113 b(Lo)s(okup)38
-b(Orders)g(in)g(Maps)0 4201 y Fn(In)33 b(man)n(y)f(cases)g(an)h(item)g
-(is)g(not)g(just)g(lo)r(ok)n(ed)f(up)h(v)n(erbatim)f(in)h(a)g(map,)h
-(but)f(it)h(ma)n(y)e(b)r(e)h(split)g(in)n(to)g(logical)e(parts)0
-4300 y(and)g(then)h(less)e(signi\014can)n(t)g(parts)h(are)f(iterativ)n
-(ely)g(remo)n(v)n(ed)g(and)g(the)i(remaining)e(data)h(is)g(lo)r(ok)n
-(ed)f(up)h(un)n(til)h(either)0 4400 y(a)d(matc)n(h)h(is)g(found)g(or)f
-(the)h(data)g(is)f(empt)n(y;)i(in)g(the)f(latter)f(case)g(a)h(default)g
-(k)n(ey)f(ma)n(y)g(b)r(e)i(lo)r(ok)n(ed)d(up)j(dep)r(ending)f(on)0
-4500 y(the)g(map.)42 b(These)29 b(steps)g(can)g(b)r(e)h(con)n(trolled)e
-(b)n(y)h(\015ags)g(that)g(are)g(sp)r(eci\014ed)g(in)h(the)g
-(con\014guration)d(\014le)j(for)f(the)h(map.)0 4599 y(These)d(\015ags)g
-(are)f(listed)i(b)r(elo)n(w)g(for)f(the)h(v)-5 b(arious)26
-b(lo)r(okup)h(steps.)0 4753 y(F)-7 b(or)32 b(domain)f(names)h(of)g(the)
-h(form)e(\\)p Fm(sub2.sub1.tld)p Fn(")26 b(the)33 b(lo)r(okup)e(order)g
-(is)h(\\)p Fm(sub2.sub1.tld)p Fn(",)27 b(\\)p Fm(.sub1.tld)p
-Fn(",)0 4852 y(\\)p Fm(.tld)p Fn(",)h(and)i(\\)p Fm(.)p
-Fn(")44 b(\(without)31 b(the)f(quotes\).)45 b(The)30
-b(sub)r(domains)g(are)f(tried)i(if)f(the)h(\015ag)e Fm(dotsubdomain)d
-Fn(is)k(set.)45 b(The)0 4952 y(last)31 b(lo)r(okup)f(\(\\)p
-Fm(.)p Fn("\))46 b(is)31 b(only)f(done)h(if)g(the)g(\015ag)f
-Fm(dot)g Fn(is)h(set,)h(as)e(it)h(is)g(the)g(default)h(for)e
-(mailertable.)46 b(Ob)n(viously)29 b(this)0 5051 y(sc)n(hema)c(is)h
-(extended)h(if)g(more)e(comp)r(onen)n(ts)h(are)f(sp)r(eci\014ed.)37
-b(As)26 b(the)g(sequence)g(sho)n(ws)f(there)h(is)g(no)g(implicit)h
-(\\matc)n(h)0 5151 y(all)i(sub)r(domains")g(lo)r(okup,)h(instead)g(en)n
-(tries)f(in)h(a)f(map)h(m)n(ust)g(ha)n(v)n(e)e(a)i(leading)f(dot)h(for)
-f(sub)r(domains)g(matc)n(hes.)43 b(T)-7 b(o)0 5251 y(reiterate:)36
-b(\\)p Fm(sub2.sub1.tld)p Fn(")21 b(do)r(es)27 b(neither)h(matc)n(h)f
-(the)h(en)n(try)f(\\)p Fm(sub1.tld)p Fn(")d(nor)j(\\)p
-Fm(tld)p Fn(".)0 5404 y(F)-7 b(or)36 b(IPv4)f(addresses)g(of)i(the)f
-(form)h(\\)p Fm(A.B.C.D)p Fn(",)32 b(the)37 b(lo)r(okup)f(order)f(is)i
-(\\)p Fm(A.B.C.D)p Fn(",)c(\\)p Fm(A.B.C)p Fn(",)g(\\)p
-Fm(A.B)p Fn(",)i(and)h(\\)p Fm(A)p Fn(")0 5504 y(\(without)j(the)f
-(quotes\).)68 b(In)38 b(con)n(trast)e(to)i(domain)g(lo)r(okups,)i(no)d
-(trailing)h(dots)f(are)g(required)g(\(nor)h(c)n(hec)n(k)n(ed\))f(to)
-1848 5768 y(38)p eop end
-%%Page: 39 40
-TeXDict begin 39 39 bop 0 523 a Fn(denote)30 b(subnet)h(matc)n(hes,)g
-(b)r(ecause)f(the)h(n)n(um)n(b)r(er)g(of)f(comp)r(onen)n(ts)g(of)h(an)f
-(IPv4)f(address)h(is)g(\014xed)h(\(and)f(kno)n(wn\))g(in)0
-623 y(con)n(trast)c(to)i(the)g(n)n(um)n(b)r(er)f(of)h(comp)r(onen)n(ts)
-f(in)h(a)f(host)g(name)g(or)g(domain)g(name.)0 776 y(F)-7
-b(or)24 b(RF)n(C)g(2821)f(addresses)f(of)j(the)f(form)g(\\)p
-Fb(<)p Fm(user+detail@dom)o(ai)o(n)p Fb(>)p Fn(")o(,)19
-b(where)24 b(\\)p Fm(+detail)p Fn(")d(is)j(optional)f(and)i(\\)p
-Fm(+)p Fn(")e(is)0 876 y(the)30 b(\014rst)f(delimiter)g(in)h(the)g(lo)r
-(calpart)e(that)i(w)n(as)e(found)i(in)f(the)h Fm(address_delimite)o(r)
-23 b Fn(string)29 b(\(see)g(Section)h(3.9.2\),)0 975
-y(the)e(lo)r(okups)f(are)f(done)i(according)e(to)h(the)h(follo)n(wing)f
-(sequence:)101 1211 y(1.)42 b(Rep)r(eat)27 b(the)h(follo)n(wing)f(lo)r
-(okups)g(for)g(eac)n(h)g(sub)r(domain)g(of)h(domain)f(\(as)g(explained)
-g(ab)r(o)n(v)n(e\):)243 1377 y(\(a\))41 b(\\)p Fm(user+detail@subd)o
-(om)o(ai)o(n)p Fn(")15 b(if)22 b(\\)p Fm(+detail)p Fn(")c(exists;)23
-b(this)e(is)h(a)f(v)n(erbatim)f(matc)n(h.)35 b(Flag:)e
-Fm(full_adress)p Fn(.)238 1510 y(\(b\))42 b(\\)p Fm(user++@subdomain)o
-Fn(")23 b(if)29 b(\\)p Fm(+detail)p Fn(")c(exists)k(and)g(\\)p
-Fm(detail)p Fn(")c(is)k(not)g(empt)n(y;)h(this)f(matc)n(hes)g(an)n(y)f
-(non-)390 1610 y(empt)n(y)22 b(\\)p Fm(+detail)p Fn(".)32
-b(Note:)i(the)22 b(second)f(\\)p Fm(+)p Fn(")g(c)n(haracter)f(is)i(a)g
-(\014xed)g(metac)n(haracter,)f(it)h(do)r(es)g(not)g(dep)r(end)390
-1710 y(on)31 b Fm(address_delimit)o(er)p Fn(;)26 b(it)31
-b(is)g(a)f(mo)r(delled)i(after)e(the)h(\\)p Fm(+)p Fn(")f(op)r(erator)f
-(in)i(regular)e(expressions)g(etc)i(to)390 1809 y(denote)d(a)f
-(non-empt)n(y)g(sequence)g(of)h(items.)37 b(Flag:)f Fm(detail_plus)247
-1942 y Fn(\(c\))42 b(\\)p Fm(user+*@subdomain)o Fn(")25
-b(if)33 b(\\)p Fm(+detail)p Fn(")28 b(exists;)33 b(this)f(matc)n(hes)f
-(an)n(y)g(\\)p Fm(+detail)p Fn(")d(\(including)k(just)h(\\)p
-Fm(+)p Fn("\).)390 2042 y(Flag:)j Fm(detail_star)238
-2174 y Fn(\(d\))42 b(\\)p Fm(user*@subdomain)p Fn(")o(;)27
-b(this)32 b(matc)n(hes)e(\\)p Fm(user@subdomain)p Fn(")25
-b(as)31 b(w)n(ell)g(as)f(\\)p Fm(user+detail@sub)o(dom)o(ai)o(n)p
-Fn(")390 2274 y(\(\\)p Fm(detail)p Fn(")e(can)j(b)r(e)g(empt)n(y\).)48
-b Fd(Note)p Fn(:)43 b(\\)p Fm(*)p Fn(")30 b(is)h(not)g(a)f(generic)g
-(metac)n(haracter)f(here,)j(it)f(matc)n(hes)f(only)h(a)390
-2374 y(tok)n(en)25 b(b)r(eginning)h(with)g Fm(address_delimite)o(r)20
-b Fn(or)k(an)i(empt)n(y)g(sequence,)f(it)h(do)r(es)f
-Fd(not)h Fn(matc)n(h)f(an)n(y)g(other)390 2473 y(c)n(haracter)35
-b(sequence.)63 b(F)-7 b(or)36 b(example:)54 b(the)37
-b(input)h(\\)p Fm(user1@subdomai)o(n)p Fn(")30 b(do)r(es)36
-b(not)h(matc)n(h)f(the)h(LHS)390 2573 y(\\)p Fm(user*@subdomain)p
-Fn(")o(.)31 b(Flag:)36 b Fm(star)247 2706 y Fn(\(e\))42
-b(\\)p Fm(user@subdomain)p Fn(")o(;)16 b(this)j(do)r(es)f
-Fd(not)g Fn(matc)n(h)g(if)h(\\)p Fm(+detail)p Fn(")14
-b(exists,)20 b(unless)f(the)f(\015ag)g Fm(implicitly_match)o(_d)o(eta)o
-(il)390 2805 y Fn(is)26 b(selected)g(for)g(the)g(map)g(to)g(implicitly)
-h(matc)n(h)f(a)g(detail)g(ev)n(en)g(if)g(there)g(is)g(no)g(wildcard)g
-(in)g(the)h(pattern.)252 2938 y(\(f)6 b(\))43 b(\\)p
-Fm(@subdomain)p Fn(".)101 3104 y(2.)f(If)34 b(nothing)f(has)g(b)r(een)h
-(found)g(and)f(the)h(map)g(t)n(yp)r(e)g(requests)e(it,)k(then)e(try)f
-(lo)r(calpart)g(only)g(\(with)h(the)g(same)208 3204 y(meaning)27
-b(as)g(ab)r(o)n(v)n(e\):)243 3370 y(\(a\))41 b(\\)p Fm(user+detail)p
-Fn(")22 b(if)28 b Fm(detail)e Fn(exists)238 3503 y(\(b\))42
-b(\\)p Fm(user++)p Fn(")24 b(if)29 b Fm(detail)c Fn(exists)i(and)g(is)h
-(not)f(empt)n(y)-7 b(,)247 3636 y(\(c\))42 b(\\)p Fm(user+*)p
-Fn(")24 b(if)29 b Fm(detail)c Fn(exists,)238 3769 y(\(d\))42
-b(\\)p Fm(user*)p Fn(",)247 3901 y(\(e\))g(\\)p Fm(user)p
-Fn(")0 4187 y Fj(3.12.2)113 b(Lo)s(okup)38 b(Orders)g(for)f(An)m
-(ti-Spam)i(Measures)0 4394 y Fn(Map)c(lo)r(okups)f(for)g(an)n(ti-spam)g
-(measures)g(are)g(p)r(erformed)g(according)g(to)g(the)i(SMTP)e
-(dialogue,)i(i.e.,)h(connection)0 4494 y(information)28
-b(\()p Fm(cltaddr:)37 b Fn(and)29 b Fm(cltname:)p Fn(\),)e
-Fm(MAIL)g Fn(command)i(\()p Fm(from:)p Fn(\),)f(and)h
-Fm(RCPT)e Fn(command)i(\()p Fm(to:)p Fn(\).)41 b(Whether)29
-b(a)0 4593 y(rejection)k(has)h(an)f(immediate)h(e\013ect)g(dep)r(ends)h
-(on)e(the)h(result)g(of)g(the)g(lo)r(okup,)h(e.g.,)g(the)f
-Fm(quick:)47 b Fn(mo)r(di\014er,)35 b(and)0 4693 y(whether)d(the)g
-(option)g Fm(delay_checks)27 b Fn(is)k(set.)50 b(If)33
-b(m)n(ultiple)f(c)n(hec)n(ks)f(are)g(p)r(erformed)g(during)h(a)f
-(single)g(stage)g(of)h(the)0 4793 y(SMTP)27 b(dialogue)g(then)h(they)g
-(are)e(done)i(sequen)n(tially)e(un)n(til)i(one)g(of)f(them)h(returns)f
-(something)g(else)h(than)f Fm(cont)p Fn(.)0 4946 y(Note:)35
-b(in)24 b(the)f(description)g(of)h(the)f(algorithms)f(b)r(elo)n(w)i
-(some)e(items)i(are)f(mark)n(ed)f(as)h Fd(che)l(ck:)p
-Fn(.)37 b(Only)23 b(those)g(can)g(c)n(hange)0 5046 y(the)j(result)f(v)
--5 b(alue,)26 b(other)f(steps)g(p)r(erform)g(just)h(op)r(erations)e
-(that)i(ma)n(y)e(b)r(e)i(needed)g(later)f(on)g(but)h(ha)n(v)n(e)e(no)h
-(immediate)0 5145 y(e\013ect)j(on)f(the)h(outcome)f(of)h(the)g(c)n(hec)
-n(ks.)1848 5768 y(39)p eop end
-%%Page: 40 41
-TeXDict begin 40 40 bop 0 523 a Fo(Connect)0 730 y Fn(During)30
-b(connect)h(the)g(follo)n(wing)e(op)r(erations)g(are)h(p)r(erformed)g
-(if)h(the)g Fm(access)d Fn(\015ag)i(\(see)h(Section)f(3.10,)g(item)h
-(3b\))g(is)0 830 y(enabled:)101 1066 y(1.)42 b Fd(che)l(ck:)c
-Fn(lo)r(ok)27 b(up)h(clien)n(t)f(IP)h(address)e(using)h(tag)g
-Fm(cltaddr:)34 b Fn(\(as)27 b(explained)g(in)h(3.12.1\))101
-1232 y(2.)42 b(start)27 b(DNS)h(blac)n(klist)f(queries,)101
-1398 y(3.)42 b(map)27 b(clien)n(t)h(IP)f(address)f(to)i(clien)n(t)f
-(hostname)g(returning)g(the)h(tuple)g(\()p Fm(clientresolve)p
-Fn(,)23 b Fm(clientname)p Fn(\).)101 1564 y(4.)42 b Fd(che)l(ck:)c
-Fn(lo)r(ok)27 b(up)h Fm(cltresolve:clie)o(ntr)o(es)o(olv)o(e)101
-1730 y Fn(5.)42 b Fd(che)l(ck:)c Fn(lo)r(ok)27 b(up)h
-Fm(cltname:clientn)o(ame)21 b Fn(\(as)27 b(explained)g(in)h(3.12.1\))
-101 1896 y(6.)42 b Fd(che)l(ck:)c Fn(lo)r(ok)27 b(up)h(results)f(of)g
-(DNS)i(blac)n(klists)d(in)i(access)f(map.)0 2165 y Fo(MAIL)0
-2372 y Fn(After)h(a)g Fm(MAIL)f Fn(command)g(has)h(b)r(een)g(receiv)n
-(ed)f(the)i(follo)n(wing)e(c)n(hec)n(ks)g(are)g(p)r(erformed)g(unless)h
-(the)g(address)f(is)h Fm(<>)f Fn(or)0 2472 y(a)g(session)g(c)n(hec)n(k)
-f(resulted)i(in)g Fm(quick:relay)23 b Fn(or)j Fm(quick:ok)p
-Fn(:)101 2708 y(1.)42 b Fd(che)l(ck:)37 b Fn(is)26 b(the)g(address)e
-(routeable?)35 b(That)26 b(is,)g(if)g(the)h(sender)e(address)f(w)n
-(ould)h(b)r(e)h(used)g(as)f(a)h(recipien)n(t)f(address)208
-2808 y(\(as)g(it)g(w)n(ould)g(b)r(e)h(necessary)d(if)j(a)f(DSN)i(m)n
-(ust)e(b)r(e)h(sen)n(t\))f(is)g(it)h(p)r(ossible)f(to)g(\014nd)h(a)f
-(host)g(that)h(will)f(deal)g(with)h(the)208 2907 y(address?)47
-b(This)32 b(means)f(that)g(the)h(domain)f(part)g(m)n(ust)h(ha)n(v)n(e)e
-(a)i(v)-5 b(alid)31 b(MX)h(or)f(A)h(record)e(or)g(that)i(routing)f(is)
-208 3007 y(sp)r(eci\014ed)c(via)g(mailertable.)101 3173
-y(2.)42 b Fd(che)l(ck:)c Fn(if)28 b(the)g(domain)f(of)h(sender)f
-(address)f(is)i(lo)r(cal:)36 b(is)27 b(the)h(lo)r(cal)f(part)g(v)-5
-b(alid?)101 3339 y(3.)42 b Fd(che)l(ck:)c Fn(lo)r(ok)27
-b(up)h(the)g(address)e(in)i(the)g(access)e(map)i(\(pro)n(vided)f(it)h
-(is)f(enabled\))h(with)g(the)g(tag)f Fm(from:)p Fn(.)101
-3505 y(4.)42 b Fd(che)l(ck:)f Fn(lo)r(ok)28 b(up)h(the)h(IP)f
-(addresses)e(that)i(w)n(ere)f(found)i(when)f(trying)f(to)h(determine)h
-(whether)e(the)i(address)e(is)208 3605 y(routeable)e(with)i(the)g(tag)f
-Fm(mxbadip:)34 b Fn(in)28 b(the)g(access)e(map.)0 3874
-y Fo(R)m(CPT)0 4081 y Fn(A)g Fm(RCPT)d Fn(command)i(causes)f
-(di\013eren)n(t)h(c)n(hec)n(ks)f(\(note:)36 b(these)25
-b(are)g(sequen)n(tial)f(c)n(hec)n(ks,)h(not)g(exclusiv)n(e,)g(i.e.,)h
-(if)f(the)h(\014rst)0 4181 y(one)h(applies)g(and)h(it)g(do)r(es)f(not)h
-(return)f(a)g(decision,)g(the)h(second)f(one)g(is)h(p)r(erformed\):)101
-4400 y(1.)42 b(is)25 b(this)h(a)e(rela)n(ying)g(attempt)i(and)f(if)h
-(so,)g(is)f(it)h(authorized?)35 b(Rela)n(ying)24 b(can)h(b)r(e)h(allo)n
-(w)n(ed)e(for)h(the)h(en)n(tire)f(session,)208 4500 y(e.g.,)e(due)g(to)
-g(the)g(clien)n(t)g(IP)g(address)f(or)g(other)g(authorization)g(based)g
-(on)h(some)f(authen)n(tication)h(\(ST)-7 b(AR)g(TTLS,)208
-4600 y(A)n(UTH\).)101 4766 y(2.)42 b(are)26 b(there)i(an)n(y)e(other)h
-(restrictions)g(for)g(the)h(recipien)n(t)f(address?)0
-4985 y(F)-7 b(or)27 b(case)g(1)g(the)h(follo)n(wing)e(tests)i(are)f(p)r
-(erformed:)101 5222 y(1.)42 b Fd(che)l(ck:)50 b Fn(is)34
-b(the)g(recipien)n(t)f(lo)r(cal)g(and)h(do)r(es)f(the)h(address)f
-(exist?)55 b(If)34 b(y)n(es,)h(it)f(is)f(not)h(a)f(rela)n(ying)f
-(attempt)j(and)208 5321 y(hence)27 b(allo)n(w)n(ed.)1848
-5768 y(40)p eop end
-%%Page: 41 42
-TeXDict begin 41 41 bop 101 523 a Fn(2.)42 b Fd(che)l(ck:)34
-b Fn(lo)r(ok)19 b(up)h(the)h(recipien)n(t)e(address)g(with)h(the)h(tag)
-e Fm(to:)32 b Fn(\(pro)n(vided)19 b(the)h(access)f(map)h(is)f
-(enabled\))h(\(pro)n(vided)208 623 y(the)h(access)e(map)h(is)h
-(enabled\))g(and)f(c)n(hec)n(k)g(whether)g(the)h(RHS)g(is)g
-Fm(relay)p Fn(,)f(otherwise)f(reject)i(the)g Fm(RCPT)e
-Fn(command)208 722 y(as)26 b(unauthorized)h(rela)n(ying)f(attempt)j
-(unless)e(the)h(RHS)g(is)g(an)f Fm(error)f Fn(en)n(try)h(whic)n(h)g(is)
-h(then)g(used)f(as)g(reply)-7 b(.)0 956 y(F)g(or)27 b(case)g(2)g(the)h
-(follo)n(wing)e(steps)i(are)e(tak)n(en:)101 1190 y(1.)42
-b(lo)r(ok)29 b(up)h(address)e(with)j(tag)e Fm(protectedrcpt:)p
-Fn(,)c(if)30 b(found)g(p)r(erform)f(all)h(the)g(necessary)e(c)n(hec)n
-(ks)h(as)g(explained)208 1289 y(in)e(Section)h(3.10.3.)101
-1455 y(2.)42 b Fd(che)l(ck:)c Fn(lo)r(ok)27 b(up)h(the)g(address)e
-(using)h(the)h(tag)f Fm(to:)36 b Fn(if)28 b(all)f(of)h(the)g(follo)n
-(wing)e(three)i(conditions)f(are)f(met:)243 1620 y(\(a\))41
-b(the)28 b(access)f(map)g(is)h(enabled.)238 1751 y(\(b\))42
-b(a)27 b(session)g(c)n(hec)n(k)g(did)h(not)f(result)g(in)h
-Fm(quick:relay)p Fn(.)247 1883 y(\(c\))42 b(a)27 b(session)g(c)n(hec)n
-(k)g(did)h(not)f(result)g(in)h Fm(quick:ok)d Fn(and)i(rela)n(ying)f(is)
-h(allo)n(w)n(ed)g(b)n(y)g(other)g(means.)101 2048 y(3.)42
-b Fd(che)l(ck:)37 b Fn(p)r(erform)25 b(greylisting)f(unless)h(the)h
-(session)e(is)i(mark)n(ed)e(as)h Fm(ok)g Fn(or)f Fm(relay)g
-Fn(or)g(the)i Fm(RCPT)e Fn(lo)r(okup)h(returned)208 2148
-y Fm(quick:ok)f Fn(or)j Fm(quick:relay)p Fn(.)0 2434
-y Fj(3.12.3)113 b(Macro)37 b(Replacemen)m(ts)i(in)e(RHS)0
-2640 y Fn(The)f(alias)f(map)g(allo)n(ws)g(the)h(use)g(of)g(macro)e(in)i
-(the)h(righ)n(t)e(hand)h(side)f(of)h(map)g(en)n(tries.)61
-b(Macros)34 b(ha)n(v)n(e)h(the)h(form)0 2740 y(\\)p Fm($)p
-Fc(f)p Fm(name)p Fc(g)p Fn(")14 b(\(without)20 b(the)e(quotes\).)34
-b(Av)-5 b(ailable)18 b(macros)f(are:)31 b Fm(user)p Fn(,)19
-b Fm(detail)p Fn(,)f Fm(domain)p Fn(,)g Fm(tag)p Fn(,)h
-Fm(delimiter)p Fn(,)d Fm(subdomain)p Fn(,)0 2840 y Fm(extension)p
-Fn(.)33 b(They)26 b(ha)n(v)n(e)g(the)h(ob)n(vious)e(meaning;)i
-Fm(subdomain)c Fn(refers)j(to)g(the)h(part)f(of)h(the)g(domain)f(b)r
-(efore)h(the)g(dot,)0 2939 y(i.e.,)43 b(if)d(the)g(pattern)f(is)g
-Fm(@.domain)e Fn(and)i(the)h(input)g(is)f Fm(user@host.domain)33
-b Fn(then)40 b Fm(subdomain)c Fn(refers)j(to)g Fm(host)p
-Fn(,)0 3039 y Fm(extension)24 b Fn(is)j(the)h(delimiter)g(and)g(the)g
-(detail)f(together)g(\(pro)n(vided)g(the)h(address)e(con)n(tains)h
-(them\).)0 3192 y(Example:)0 3426 y Fm(alias*@.domain)212
-b(user${extension}@)o(${)o(su)o(bdo)o(ma)o(in})o(.d)o(om)o(ain)0
-3660 y Fn(pro)n(vides)26 b(the)i(follo)n(wing)f(mappings:)0
-3894 y Fm(alias@host.domai)o(n)561 b(user@host.domai)o(n)0
-3993 y(alias+detail@hos)o(t2.)o(do)o(ma)o(in)212 b(user+detail@hos)o
-(t2.)o(do)o(ma)o(in)0 4321 y Fk(3.13)136 b(ST)-11 b(AR)g(TTLS)42
-b(Restrictions)0 4556 y Fn(ST)-7 b(AR)g(TTLS)25 b(requiremen)n(ts)f
-(can)g(b)r(e)h(set)f(for)g(the)h(SMTP)g(serv)n(er)e(and)h(SMTP)g(clien)
-n(t)h(via)f(map)h(en)n(tries)e(\(see)i(Sections)0 4656
-y(3.10.1)h(and)h(3.11.1\).)36 b(These)27 b(restrictions)f(are)h(listed)
-h(in)g(a)f(section)g(called)g Fm(tls_requirements)p Fn(.)101
-4890 y(1.)42 b Fm(common_name)p Fn(:)33 b(require)27
-b(that)i(the)f(CN)h(\(Common)f(Name\))g(of)h(the)f(presen)n(ted)g(TLS)g
-(certi\014cate)g(matc)n(hes)f(the)208 4989 y(sp)r(eci\014ed)g(v)-5
-b(alue.)101 5154 y(2.)42 b Fm(cert_subject)27 b Fn(require)k(that)h
-(the)h(CS)f(\(CER)-7 b(T)32 b(sub)5 b(ject\))33 b(of)f(the)g(presen)n
-(ted)g(TLS)g(certi\014cate)g(matc)n(hes)f(the)208 5254
-y(sp)r(eci\014ed)c(v)-5 b(alue.)101 5419 y(3.)42 b Fm(cert_issuer)16
-b Fn(require)21 b(that)g(the)h(DN)g(\(Distinguised)g(Name\))g(of)f(the)
-h(issuer)e(of)h(the)h(presen)n(ted)f(TLS)g(certi\014cate)208
-5519 y(matc)n(hes)27 b(the)h(sp)r(eci\014ed)f(v)-5 b(alue.)1848
-5768 y(41)p eop end
-%%Page: 42 43
-TeXDict begin 42 42 bop 101 523 a Fn(4.)42 b Fm(min_cipher_bits)24
-b Fn(require)30 b(that)h(the)g(e\013ectiv)n(e)g(k)n(eylength)f(\(in)h
-(bits\))h(of)e(the)i(symmetric)e(encryption)g(algo-)208
-623 y(rithm)d(used)h(for)f(a)g(TLS)h(connection)f(is)g(at)h(least)f(as)
-g(big)g(as)g(the)h(sp)r(eci\014ed)g(v)-5 b(alue.)101
-789 y(5.)42 b Fm(flags)p Fn(:)34 b(a)n(v)-5 b(ailable)27
-b(\015ags)f(are)h(curren)n(tly:)243 955 y(\(a\))41 b
-Fm(verified)p Fn(:)29 b(the)19 b(TLS)f(connection)g(m)n(ust)h(b)r(e)g
-(v)n(eri\014ed,)g(i.e.,)h(the)f(cert)f(issuer)g(m)n(ust)g(b)r(e)h
-(listed)g(in)f Fm(CAcert_file)390 1054 y Fn(or)27 b Fm
-(CAcert_directory)21 b Fn(\(see)27 b(Section)h(3.10,)e(item)i(21\).)238
-1187 y(\(b\))42 b Fm(encrypted)21 b Fn(the)k(TLS)g(connection)f(m)n
-(ust)h(b)r(e)g(encrypted)g(\(i.e.,)g(the)g(e\013ectiv)n(e)g(k)n
-(eylength)f(\(in)h(bits\))h(of)e(the)390 1287 y(symmetric)j(encryption)
-h(algorithm)e(used)i(for)f(a)g(TLS)g(connection)h(is)f(greater)f(than)i
-(zero.)101 1453 y(6.)42 b Fm(requirements_vi)o(ola)o(ti)o(on)21
-b Fn(See)28 b(Section)f(3.10,)g(item)h(21h,)f(for)g(p)r(ossible)g(v)-5
-b(alues.)0 1689 y(Example)18 b(\(note:)32 b(the)19 b(en)n(try)f(m)n
-(ust)g(b)r(e)h(curren)n(tly)e(written)i(in)f(a)g(single)g(line)h(to)f
-(b)r(e)h(prop)r(erly)e(pro)r(cessed)g(b)n(y)h Fm(createmap\(8\))p
-Fn(\):)0 1925 y Fm(smtpc_rcpt_conf:)o(@me)o(ta)o(.o)o(rg)37
-b(tls_requirements)g({)43 b(cert_issuer="/C=U)o(S/S)o(T=)o(Be)o(rke)o
-(le)o(y/L)o(=E)o(nd)o(mai)o(l+)o(20O)o(rg)o(/O=)o(MT)o(A/)o(CN=)o(Cl)o
-(aus)o(+2)o(0A)o(ssm)o(an)o(n+2)o(0C)o(A+2)o(0R)o(SA)o(+20)o(20)o(07/)o
-(em)o(ai)o(lAd)o(dr)o(ess)o(=c)o(a+c)o(a-)o(rs)o(a20)o(07)o(@es)o(mt)o
-(p.)o(org)o(";)37 b(})0 2254 y Fk(3.14)136 b(VERP)0 2489
-y Fn(There)27 b(are)g(t)n(w)n(o)f(w)n(a)n(ys)h(to)g(enable)g(VERP)g
-([Ber97)o(]:)101 2709 y(1.)42 b(Via)27 b(the)h(XVERP)f(extension)h(in)f
-(the)h(SMTP)g(serv)n(er)d(\(see)j(Section)g(3.10,)e(item)i(3l\).)101
-2875 y(2.)42 b(Via)27 b(an)g(en)n(try)g(in)h(aliases)e(marking)h(a)g
-(list)h(with)g Fm(verp-)p Fn(:)257 3004 y Fm(otherlist:)83
-b(<user5@my.dom>)38 b(<user6@other.dom>)f(<user7@local.hos)o(t>)257
-3104 y(verp-otherlist:)81 b(something)1848 5768 y Fn(42)p
-eop end
-%%Page: 43 44
-TeXDict begin 43 43 bop 0 1199 a Fl(Chapter)65 b(4)0
-1668 y Fp(Running)78 b(MeT)-19 b(A1)0 2203 y Fk(4.1)135
-b(Starting)46 b(MeT)-11 b(A1)0 2439 y Fn(All)27 b(comp)r(onen)n(ts)e
-(of)i(MeT)-7 b(A1)26 b(are)f(under)h(con)n(trol)f(of)h(the)h(MCP)f
-(whic)n(h)g(m)n(ust)g(b)r(e)h(started)f(as)f Fm(root)g
-Fn(in)h(the)h(directory)0 2538 y Fm(/var/spool/meta1)21
-b Fn(\(i.e.,)28 b(the)g(main)g(queue)f(directory)-7 b(,)27
-b(see)g(Section)g(2.4:)37 b Fm(MTAQDIR)p Fn(\))25 b(using)0
-2767 y Fm(#)43 b(./mcp.sh)d(start)0 2997 y Fn(The)22
-b(script)f(con)n(tains)g(the)i(run)n(time)e(path)h(for)g(MCP)f(based)g
-(on)h(the)g(data)g(used)f(b)n(y)h Fm(configure)c Fn(as)j(w)n(ell)h(as)f
-(a)h(reference)0 3096 y(to)27 b(the)h(MeT)-7 b(A1)28
-b(con\014guration)e(\014le.)0 3249 y(T)-7 b(o)27 b(stop)h(all)f(MeT)-7
-b(A1)27 b(comp)r(onen)n(ts)g(use)0 3463 y Fm(#)43 b(./mcp.sh)d(stop)0
-3677 y Fn(or)27 b(simply)g(terminate)h(the)g(MCP)-7 b(,)27
-b(it)h(will)g(forw)n(ard)e(the)i(signal)f(to)g(all)g(pro)r(cesses)f(it)
-i(started.)0 3831 y(The)34 b(MCP)g(pro)n(vides)e(some)i(restart)f
-(functionalit)n(y:)49 b(if)35 b(a)e(pro)r(cess)g(terminates)h(\(e.g.,)h
-(crashes\),)g(it)f(will)g(restart)f(it)0 3930 y(unless)e(the)g(exit)g
-(co)r(de)f(indicates)h(that)g(a)f(restart)g(is)g(useless,)h(e.g.,)h
-Fm(EX)p 2288 3930 27 4 v 30 w(USAGE)p Fn(.)d(Moreo)n(v)n(er,)g(the)i
-(pro)r(cesses)e(listed)i(in)0 4030 y(the)d(restart)e(dep)r(endencies)i
-(will)g(b)r(e)g(stopp)r(ed)g(and)f(started)g(to)r(o.)0
-4357 y Fk(4.2)135 b(Using)46 b(MeT)-11 b(A1)44 b(only)h(for)g(Outgoing)
-h(Mail)0 4592 y Fn(MeT)-7 b(A1)28 b(can)h(b)r(e)g(used)f(in)h(com)n
-(bination)e(with)j(a)e(MUA)h(that)g(sp)r(eaks)e(\(E\)SMTP)i(directly)f
-(or)g(with)h(the)g(sendmail)f(8)0 4692 y(MSP)22 b(\(Mail)g(Submission)g
-(Program\))d(for)j(outgoing)f(mail.)35 b(F)-7 b(or)21
-b(the)h(latter)g(add)g(this)g(to)g(y)n(our)f(sendmail)h(8)f
-Fm(submit.mc)0 4791 y Fn(\014le)28 b(\(see)f(also)g Fm
-(misc/sm8.submit.)o(mc)o Fn(\):)0 5021 y Fm(LOCAL_RULE_0)0
-5120 y(R$*)42 b(+)i(X<@$*>)171 b($#meta1)41 b($@)i(localhost)d($:)i($1)
-h(<@$2>)0 5320 y(LOCAL_RULESETS)0 5419 y(SHdrToSMTP)0
-5519 y(R$+)914 b($:)43 b($>PseudoToReal)38 b($1)522 b(sender/recipient)
-37 b(common)1848 5768 y Fn(43)p eop end
-%%Page: 44 45
-TeXDict begin 44 44 bop 0 523 a Fm(R$+)914 b($:)43 b($>MasqSMTP)c($1)
-697 b(qualify)41 b(unqual'ed)e(names)0 623 y(R$*)j(+)i(X<@$*>)520
-b($:)43 b($1)g(<)g(@)g($2)g(>)0 722 y(R$*)f(<)i(@)f(*LOCAL*)d(>)k($*)
-173 b($:)43 b($1)g(<)g(@)g($j)g(.)g(>)g($2)0 922 y(MAILER_DEFINITIO)o
-(NS)0 1021 y(Mmeta1,)128 b(P=[IPC],)40 b(F=kmDFMuXa,)f
-(S=EnvFromSMTP/Hdr)o(Fr)o(om)o(SMT)o(P,)e(R=EnvToSMTP/HdrT)o(oSM)o(TP)o
-(,)349 1121 y(E=\\r\\n,)j(L=990,)h(T=DNS/RFC822/SMTP)o(,)349
-1220 y(A=TCP)g($h)i(2009)0 1457 y Fn(and)30 b(run)h(the)f(SMTP)h(serv)n
-(er)d(of)j(MeT)-7 b(A1)30 b(as)g(listener)g(on)g Fm(localhost:2009)p
-Fn(.)40 b(Then)30 b(mail)h(to)f Fb(<)p Fn(user)p Fm(+X)p
-Fn(@domain)p Fb(>)0 1556 y Fn(will)d(b)r(e)g(sen)n(t)g(via)f(MeT)-7
-b(A1,)27 b(i.e.,)g(b)n(y)g(adding)f(the)h(sequence)f
-Fm(+X)h Fn(to)f(the)h(address)f Fb(<)p Fn(user@domain)p
-Fb(>)e Fn(the)j(mail)g(will)g(b)r(e)0 1656 y(redirected)f(to)h(MeT)-7
-b(A1)27 b(\(and)g Fm(+X)f Fn(will)h(b)r(e)g(remo)n(v)n(ed\).)36
-b(After)27 b(initial)g(testing)g(the)g Fm(relay)e Fn(mailer)h(can)h(b)r
-(e)g(c)n(hanged)f(to)0 1756 y(use)h(p)r(ort)h(2009)e(b)n(y)h(default)h
-(hence)g(the)g(lo)r(cal)f(additions)g(sho)n(wn)g(ab)r(o)n(v)n(e)f(can)h
-(b)r(e)h(remo)n(v)n(ed.)0 1909 y(There)k(are)f(also)g(other)h(programs)
-d(a)n(v)-5 b(ailable)31 b(as)h(substitute)h(for)f(the)g(command)g(line)
-g(in)n(v)n(o)r(cation)f(of)h Fm(sendmail)d Fn(as)0 2008
-y(mail)e(submission)h(program,)d(e.g.,)i Fm(mini)p 1317
-2008 27 4 v 30 w(sendmail)e Fn([P)n(osb)n(].)0 2337 y
-Fk(4.3)135 b(Using)46 b(MeT)-11 b(A1)44 b(for)h(Incoming)g(Mail)0
-2589 y Fj(4.3.1)112 b(Lo)s(cal)39 b(Deliv)m(ery)f(and)g(Sp)s(ecifying)h
-(Lo)s(cal)f(Domains)0 2796 y Fn(If)33 b(the)g(domain)f(of)g(a)g
-(recipien)n(t)g(address)f(matc)n(hes)h(an)g(en)n(try)g(in)h
-(mailertable)e(\(see)i(Section)f(3.9.3\))g(with)h(the)f(righ)n(t)0
-2895 y(hand)38 b(side)f Fm(lmtp:)614 2865 y Fi(1)687
-2895 y Fn(then)h(SMTPC)g(talks)f(LMTP)g(o)n(v)n(er)f(the)i(lo)r(cal)f
-(so)r(c)n(k)n(et)g Fm(lmtpsock)d Fn(\(see)k(3.11\).)66
-b(If)38 b(y)n(ou)f(ha)n(v)n(e)0 2995 y(an)31 b(LD)n(A)h(that)g(runs)f
-(as)g(daemon)g(and)h(can)f(talk)g(LMTP)g(o)n(v)n(er)f(a)h(lo)r(cal)g
-(so)r(c)n(k)n(et)g(y)n(ou)g(can)g(use)g(it)h(for)f(lo)r(cal)g(deliv)n
-(ery)-7 b(.)0 3094 y(It)31 b(is)f(also)f(p)r(ossible)h(to)g(use)g
-Fm(procmail)d Fn([vdBG])k(in)f(LMTP)g(mo)r(de)g(and)h(start)e(it)i
-(from)f Fm(mcp)p Fn(,)g(see)g Fm(meta1.conf)p Fn(.)41
-b(See)0 3194 y Fm(contrib/procmail)o(.lm)o(tp)o(.p)o(0)15
-b Fn(for)21 b(a)g(patc)n(h)1452 3164 y Fi(2)1511 3194
-y Fn(for)f(pro)r(cmail)h(3.22)f(to)h(allo)n(w)f(handling)h(of)h
-(addresses)d(with)j(extensions)0 3294 y(\()p Fm(+detail)p
-Fn(\))j(in)j(LMTP)f(mo)r(de.)37 b(A)28 b(mailertable)f(for)g(lo)r(cal)g
-(deliv)n(ery)g(via)g(LMTP)g(should)g(lo)r(ok)g(lik)n(e)g(this:)50
-3446 y Fm(localhost)183 b(lmtp:)50 3546 y(MY.DOM)315
-b(lmtp:)50 3645 y(HOST.MY.DOM)95 b(lmtp:)0 3795 y Fn(By)27
-b(default)g(mail)g(to)g(addresses)e(whose)i(domain)f(part)h(is)f
-(listed)i(in)f(mailertable)f(with)i(RHS)f Fm(lmtp:)35
-b Fn(is)27 b(allo)n(w)n(ed,)e(i.e.,)0 3894 y(those)i(domains)g(are)g
-(considered)g(lo)r(cal)g(and)h(hence)f(rela)n(ying)f(\(ev)n(en)i
-(though)f(tec)n(hnically)g(this)h(migh)n(t)g(not)g(b)r(e)g(called)0
-3994 y(rela)n(ying\))h(to)h(them)h(is)f(allo)n(w)n(ed.)44
-b(This)30 b(b)r(eha)n(vior)f(can)h(b)r(e)h(turned)f(o\013)g(\(see)h
-(Section)f(3.10,)g(item)g(3h\))h(in)f(whic)n(h)g(case)0
-4094 y(it)f(is)g(necessary)e(to)i(also)e(allo)n(w)h(rela)n(ying)f(to)i
-(these)f(domains)h(whic)n(h)f(can)h(b)r(e)g(done)f(either)h(via)f(the)h
-(access)f(map)h(\(see)0 4193 y(Section)i(3.10,)h(3b\),)g(or)f(the)h
-(command)f(line)h(option)f Fm(-T)f Fn(for)h(SMTPS.)h(This)f(allo)n(ws)f
-(for)h(treating)g(\(some)g(of)6 b(\))33 b(these)0 4293
-y(domains)22 b(as)h Fd(private)h Fn(b)n(y)f(not)g(allo)n(wing)f(rela)n
-(ying)f(to)i(them,)i(hence)e(they)h(will)f(b)r(e)g(only)g(reac)n(hable)
-f(from)g(systems)h(from)0 4393 y(whic)n(h)28 b(rela)n(ying)d(is)j(allo)
-n(w)n(ed.)0 4679 y Fj(4.3.2)112 b(Sp)s(ecifying)39 b(V)-9
-b(alid)38 b(Lo)s(cal)g(Addresses)0 4885 y Fn(T)-7 b(o)24
-b(v)-5 b(alidate)24 b(addresses)f(for)h(lo)r(cal)g(domains,)h(SMAR)g
-(uses)f(the)h(map)g Fm(aliases.db)20 b Fn(\(Section)25
-b(3.9.2,)f(item)h(3a\),)g(whic)n(h)0 4985 y(can)32 b(b)r(e)g(created)f
-(using)h Fm(createmap)p Fn(,)e(or)h(a)g(map)h(sp)r(eci\014ed)h(b)n(y)e
-(the)i(option)f Fm(local_user_map)26 b Fn(\(see)32 b(Section)g(3.9.2,)0
-5085 y(item)g(7\).)48 b(The)32 b(k)n(ey)f(in)g(the)h(map)g(m)n(ust)f(b)
-r(e)h(the)g(lo)r(cal)f(part)g(of)g(a)g(v)-5 b(alid)32
-b(\(lo)r(cal\))f(e-mail)g(address.)47 b(If)32 b(the)g(lo)r(cal)f(part)0
-5184 y(cannot)c(b)r(e)h(found)g(in)g(either)f(map,)h(the)g(address)e
-(is)i(rejected.)p 0 5254 1512 4 v 92 5307 a Fh(1)127
-5331 y Fg(curren)n(tly)c(in)n(ternally)g(enco)r(ded)h(as)f
-Fe(127.0.0.255)92 5386 y Fh(2)127 5410 y Fg(if)g(the)h(patc)n(h)h
-(fails)e(to)h(apply)-6 b(,)25 b(mak)n(e)h(sure)e(y)n(ou)i(use)f(a)f(w)n
-(orking)h Fe(patch\(1\))i Fg(program,)d(e.g.,)h(most)g(SunOS)g(5.x)g(v)
-n(ersions)f(ship)g(with)h(a)0 5489 y(brok)n(en)f(program)1848
-5768 y Fn(44)p eop end
-%%Page: 45 46
-TeXDict begin 45 45 bop 0 523 a Fn(T)-7 b(o)27 b(list)h(v)-5
-b(alid)28 b(lo)r(cal)f(addresses)f(in)i(the)g(alias)e(map)i(the)g(righ)
-n(t)e(hand)i(side)g(m)n(ust)f(b)r(e)h(the)g(string)f(\\)p
-Fm(local:)p Fn(",)d(e.g.,)50 671 y Fm(postmaster:)95
-b Fb(<)p Fm(user@host.domai)o(n)p Fb(>)50 770 y Fm(abuse:)315
-b(user+abuse)50 870 y(user++:)271 b(local:)50 970 y(user:)359
-b(local:)0 1119 y Fn(Note:)37 b(lo)r(cal)27 b(addresses)f(are)h(c)n
-(hec)n(k)n(ed)f(for)h(the)h(en)n(v)n(elop)r(e)f(recipien)n(t)g(and)g
-(sender.)0 1447 y Fk(4.4)135 b(Using)46 b(MeT)-11 b(A1)44
-b(as)h(Gatew)l(a)l(y)0 1683 y Fn(MeT)-7 b(A1)30 b(can)g(easily)f(b)r(e)
-h(used)g(as)g(an)f(in)n(ternet)h(gatew)n(a)n(y)-7 b(.)43
-b(T)-7 b(o)29 b(o)n(v)n(erride)f(routing,)i(mailertable)f(en)n(tries)h
-(\(see)g(Section)0 1782 y(3.9.3\))g(can)i(b)r(e)f(sp)r(eci\014ed.)49
-b(A)32 b(list)g(of)f(v)-5 b(alid)31 b(addresses)f(can)h(b)r(e)h(made)f
-(a)n(v)-5 b(ailable)31 b(via)f(the)i(access)f(map)g(b)n(y)g(allo)n
-(wing)0 1882 y(rela)n(ying)26 b(to)h(those)h(addresses)e(instead)h(of)h
-(en)n(tire)f(domains,)g(e.g.,)50 2030 y Fm(to:user1@my.doma)o(in)311
-b(relay)50 2129 y(to:user2@my.doma)o(in)g(relay)50 2229
-y(to:postmaster@my)o(.d)o(oma)o(in)93 b(relay)50 2329
-y(cltaddr:10.12)530 b(relay)0 2629 y Fk(4.5)135 b(Using)46
-b(MeT)-11 b(A1)44 b(as)h(Bac)l(kup)f(MX)g(Serv)l(er)0
-2864 y Fn(The)31 b(previous)f(section)g(sho)n(w)n(ed)g(ho)n(w)g(to)h
-(sp)r(ecify)g(v)-5 b(alid)31 b(remote)g(addresses)e(if)i(all)g(of)g
-(them)g(are)f(kno)n(wn.)47 b(Ho)n(w)n(ev)n(er,)0 2964
-y(for)27 b(systems)h(that)g(act)g(as)f(bac)n(kup)g(MX)h(serv)n(ers)e
-(it)i(migh)n(t)g(not)g(b)r(e)g(simple)g(to)g(alw)n(a)n(ys)e(k)n(eep)i
-(suc)n(h)f(a)h(list)g(up)g(to)g(date.)0 3063 y(In)g(that)g(case,)e(a)i
-(default)g(en)n(try)f(for)g(a)g(domain)g(should)h(b)r(e)g(made,)f
-(e.g.,)50 3211 y Fm(to:user1@other.d)o(om)o(ain)311 b(relay)50
-3311 y(to:user2@other.d)o(om)o(ain)g(relay)50 3410 y(to:postmaster@ot)o
-(he)o(r.d)o(om)o(ai)o(n)94 b(relay)50 3510 y(to:@other.domain)529
-b(error:451)40 b(4.3.3)h(Try)h(main)g(MX)h(server)50
-3610 y(cltaddr:10.12)661 b(quick:relay)50 3709 y(cltaddr:127.0.0.)o(1)
-486 b(quick:relay)0 3859 y Fn(The)25 b(last)g(t)n(w)n(o)g(en)n(tries)f
-(allo)n(w)g(lo)r(cal)h(systems)g(to)g(send)g(mail)g(to)g(an)n(y)g(user)
-f(at)i Fm(other.domain)p Fn(;)21 b(without)k(those)g(en)n(tries)0
-3958 y(mail)i(to)h(unlisted)g(users)f(will)h(b)r(e)g(\(temp)r
-(orarily\))f(rejected)g(and)h(hence)f(cannot)g(b)r(e)h(deliv)n(ered)f
-(via)g(this)h(system.)0 4244 y Fj(4.5.1)112 b(Note)37
-b(ab)s(out)h(Bac)m(kup)g(MX)g(Serv)m(ers)0 4451 y Fn(It)32
-b(is)g(not)f(a)h(go)r(o)r(d)f(idea)g(to)h(run)g(a)f(bac)n(kup)g(MX)h
-(serv)n(er)e Fm(B)h Fn(for)h(a)f(host)h Fm(A)f Fn(that)h(has)f
-(stronger)f(an)n(ti-spam)h(measures;)0 4551 y(if)j(mails)f(are)f(sen)n
-(t)h(to)g Fm(A)g Fn(via)g Fm(B)p Fn(,)g(then)h Fm(B)e
-Fn(ma)n(y)h(accept)g(them)h(for)e(deliv)n(ery)-7 b(,)34
-b(but)g Fm(A)f Fn(ma)n(y)g(reject)g(them)h(and)f(hence)g
-Fm(B)0 4651 y Fn(has)g(to)h(sen)n(t)f(b)r(ounces,)i(whic)n(h,)g(in)f
-(case)f(of)h(spam,)h(are)d(most)i(lik)n(ely)f(to)g(forged)g(addresses,)
-h(hence)f(those)h(b)r(ounces)0 4750 y(will)29 b(only)g(cause)f
-(additional)g(problems.)40 b(The)29 b(opp)r(osite)g(case)f(\()p
-Fm(B)h Fn(has)f(stronger)f(an)n(ti-spam)h(measures)g(than)h
-Fm(A)p Fn(\))g(can)0 4850 y(cause)e(the)i(rejection)f(of)g(mail)g(that)
-h Fm(A)e Fn(actually)h(w)n(an)n(ted)f(to)i(receiv)n(e.)37
-b(Hence)28 b Fm(B)g Fn(and)g Fm(A)g Fn(should)g(ha)n(v)n(e)f(the)i
-(same)e(an)n(ti-)0 4949 y(spam)j(measures;)h(i.e.,)g(a)f(system)h(that)
-f(acts)g(as)g(bac)n(kup)g(MX)h(serv)n(er)e(for)g(another)h(one)g
-(should)g(p)r(erform)g(the)h(same)0 5049 y(an)n(ti-spam)c(c)n(hec)n(ks)
-f(as)h(the)h(main)g(MX)g(serv)n(er\(s\).)1848 5768 y(45)p
-eop end
-%%Page: 46 47
-TeXDict begin 46 46 bop 0 523 a Fk(4.6)135 b(Miscellaneous)47
-b(Programs)0 775 y Fj(4.6.1)112 b(Do)38 b(not)f(run)h(programs)g(as)g
-Fa(root)h Fj(User)0 982 y Fn(Almost)28 b(all)g(MeT)-7
-b(A1)28 b(programs)d(\(except)j(for)g(MCP\))g(refuse)f(to)h(run)g(with)
-g Fm(root)f Fn(privileges.)36 b(T)-7 b(o)28 b(run)g(a)f(program)f(as)0
-1082 y(a)h(di\013eren)n(t)h(user)f(the)h(utilit)n(y)g
-Fm(misc/runas)23 b Fn(can)28 b(b)r(e)g(used,)f(e.g.,)h(after)f
-(installation)g(in)h Fm(/usr/local/bin/)0 1295 y(#)43
-b(/usr/local/bin/ru)o(na)o(s)37 b(meta1q)42 b(mailq)f(-V)0
-1507 y Fn(\(sp)r(ecify)28 b Fm(-h)f Fn(to)g(see)h(the)g(usage\).)0
-1792 y Fj(4.6.2)112 b(Displa)m(ying)39 b(Con)m(ten)m(t)e(of)h(Mail)g
-(Queues)0 1999 y Fn(The)23 b(program)d Fm(mailq)h Fn(displa)n(ys)g(the)
-i(con)n(ten)n(t)f(of)g(the)h(mail)g(queues)f(\()p Fm(defedb)e
-Fn(and)j Fm(ibdb)p Fn(\).)34 b(Curren)n(tly)21 b(its)i(output)g(is)f
-(in)0 2099 y(a)g(similar)g(format)h(as)f(the)h(sendmail)g(8)f(v)n
-(ersion.)34 b(The)23 b(option)f Fm(-h)g Fn(sho)n(ws)g(ho)n(w)g(to)h
-(use)f(the)i(program;)e(see)h(the)g(previous)0 2198 y(section)31
-b(ab)r(out)g(using)g Fm(runas)e Fn(for)h Fm(mailq)p Fn(.)46
-b(A)31 b(simple)g(shell)g(script)g(wrapp)r(er)f Fm(mailq.sh)e
-Fn(is)j(a)n(v)-5 b(ailable)30 b(that)h(in)n(v)n(ok)n(es)0
-2298 y Fm(mailq)j Fn(via)i Fm(runas)p Fn(.)61 b(Note:)55
-b(the)37 b(output)f(of)h(this)f(program)f(migh)n(t)h(not)g(b)r(e)h
-(accurate)e(due)i(to)f(in)n(ternal)g(bu\013ering)0 2397
-y(b)n(y)i(QMGR.)h(Moreo)n(v)n(er,)f(this)h(program)d(reads)i(DEFEDB)g
-(in)h(suc)n(h)f(a)g(w)n(a)n(y)f(that)i(only)f(en)n(tries)g(that)h(ha)n
-(v)n(e)e(b)r(een)0 2497 y Fd(che)l(ckp)l(ointe)l(d)26
-b Fn(\(see)d(Section)h(8.2)f(ab)r(out)h(options)f(for)g(c)n(hec)n(kp)r
-(oin)n(ts\))g(are)g(sho)n(wn.)35 b(This)23 b(is)h(done)f(to)h(a)n(v)n
-(oid)e(in)n(terference)0 2597 y(with)28 b(the)g(op)r(eration)f(of)g
-(QMGR.)0 2881 y Fj(4.6.3)112 b(In)m(teracting)38 b(with)f(QMGR)0
-3088 y Fn(The)32 b(program)f Fm(qmgrctl)e Fn(allo)n(ws)i(to)i(in)n
-(teract)e(with)i(the)g(QMGR)g(via)e(the)i(con)n(trol)e(so)r(c)n(k)n(et)
-h(\(see)g(Section)g(3.8,)h(item)0 3188 y(3\).)j(In)n(v)n(ok)n(e)25
-b Fm(qmgrctl)40 b(-h)26 b Fn(to)g(see)g(the)g(a)n(v)-5
-b(ailable)25 b(options.)36 b(By)26 b(default)h(the)f(program)e(will)j
-(sho)n(w)e(the)i(curren)n(t)e(status)0 3287 y(of)30 b(QMGR.)g(If)g
-(QMGR)g(has)g(b)r(een)g(compiled)g(with)g(the)h(option)e
-Fm(QMGR)p 2279 3287 27 4 v 30 w(STATS)f Fn(\(see)i(Section)g(12.1\))f
-(then)h(additional)0 3387 y(statistics)d(is)h(a)n(v)-5
-b(ailable,)26 b(e.g.,)h(the)h(n)n(um)n(b)r(er)g(of)f(transactions)f
-(and)i(recipien)n(ts)f(that)h(has)f(b)r(een)h(handled.)0
-3540 y(Enhancemen)n(t)f(to)h(this)f(program)f(are)h(w)n(elcome)f(to)i
-(pro)n(vide)e(more)h(functionalit)n(y)-7 b(.)0 3867 y
-Fk(4.7)135 b(Reloading)47 b(Maps)0 4102 y Fn(Maps)27
-b(\(for)g(SMAR)h(and)f(QMGR\))h(can)f(b)r(e)h(reloaded)e(b)n(y)h(mo)n
-(ving)f(the)i(old)f(db)h(\014le)g(out)f(of)g(the)h(w)n(a)n(y)-7
-b(,)26 b(creating)h(a)g(new)0 4202 y(\014le)h(and)f(then)h(sending)g(a)
-f Fm(USR1)f Fn(signal)g(to)i(the)g(appropriate)e(pro)r(cess)g(to)i
-(reop)r(en)f(the)h(map.)0 4430 y Fm(#)43 b(mv)g($MAP.db)e($MAP.old.db)0
-4529 y(#)i(/usr/local/bin/ru)o(na)o(s)37 b(meta1q)42
-b(createmap)d(-F)k($MAP.db)e(<)i($MAP)0 4629 y(#)g(kill)f(-USR1)g($PID)
-0 4857 y Fn(Note:)37 b(for)27 b(QMGR)h(it)g(is)f(also)g(p)r(ossible)g
-(to)g(use)h Fm(qmgrctl)40 b(-r)27 b Fn(instead,)h(see)f(Section)h
-(4.6.3.)0 5184 y Fk(4.8)135 b(Logging)0 5419 y Fn(Logging)18
-b(is)i(done)g(via)f Fm(syslog\(3\))d Fn(\(see)k(Section)g(3.5,)h(1\))e
-(or)g(to)h Fm(stdout/stderr)p Fn(,)c(whic)n(h)k(is)g(redirected)f(b)n
-(y)h(the)g(default)0 5519 y(MCP)30 b(con\014guration)f(to)h
-Fm(PROG.log)p Fn(.)41 b(The)31 b(logging)d(format)i(is)g(not)h(y)n(et)f
-(completely)g(consisten)n(t)g(across)e(programs.)1848
-5768 y(46)p eop end
-%%Page: 47 48
-TeXDict begin 47 47 bop 0 523 a Fn(Moreo)n(v)n(er,)26
-b(the)j(logging)d(en)n(tries)i(migh)n(t)g(not)h(b)r(e)g(easy)e(to)h
-(understand)g(b)r(ecause)g(they)h(con)n(tain)f(some)g(details)g(whic)n
-(h)0 623 y(are)e(not)h(in)n(teresting)f(to)g(a)h(p)r(oten)n(tial)g(p)r
-(ostmaster,)f(but)h(to)g(dev)n(elop)r(ers.)35 b(Nev)n(ertheless,)26
-b(the)i(logging)d(en)n(tries)h(should)0 722 y(sho)n(w)31
-b(the)i(\015o)n(w)f(of)g(mail)g(through)g(the)h(system.)50
-b(See)33 b(Section)f(10.3)f(for)h(an)g(explanation)f(of)i(the)f(format)
-g(of)g(log\014le)0 822 y(en)n(tries.)0 975 y(Note:)59
-b(log\014les)38 b Fd(must)f Fn(exist)i(with)g(the)g(prop)r(er)f(o)n
-(wner)f(and)i(p)r(ermissions)f(to)g(b)r(e)h(used.)70
-b(Neither)39 b(MCP)f(nor)g(the)0 1075 y(mo)r(dules)e(will)f(curren)n
-(tly)g(create)f(log\014les.)60 b(This)35 b(is)h(done)f(b)n(y)g
-Fm(make)42 b(install)p Fn(,)35 b(i.e.,)j Fm(misc/sm.setup.s)o(h)p
-Fn(,)32 b(whic)n(h)0 1174 y(parses)g Fm(meta1.conf)e
-Fn(to)j(extract)g(the)h(section)f(titles/names)g(and)g
-Fm(user)f Fn(en)n(tries)h(to)g(create)g(the)h(log\014les)e(with)i(the)0
-1274 y(correct)20 b(name)g(and)h(o)n(wner.)33 b(This)21
-b(do)r(es)g(not)g(\(y)n(et\))g(prop)r(erly)f(w)n(ork)f(if)j(unique)f
-(log\014le)f(names)h(are)f(created,)h(see)g(Section)0
-1374 y(8.2,)27 b(3.)0 1660 y Fj(4.8.1)112 b(Log\014le)39
-b(Rotation)0 1867 y Fn(Unless)33 b Fm(syslog\(3\))c Fn(is)k(used)f
-(\(see)h(Section)g(3.5,)g(1\),)h(log\014le)f(rotation)e(can)i(b)r(e)g
-(ac)n(hiev)n(ed)f(b)n(y)g(cop)n(ying)g(the)h(existing)0
-1966 y(log\014le)27 b(to)g(a)g(bac)n(kup)g(\014le,)h(e.g.,)0
-2202 y Fm(#)43 b(cp)g(qmgr.log)d(qmgr.log.0)0 2439 y
-Fn(and)26 b(sending)f(a)g Fm(USR2)f Fn(signal)h(whic)n(h)h(will)g
-(cause)f(the)h(pro)r(cesses)e(to)i(rewind)f(the)i(log\014le.)35
-b(Note:)h(the)26 b(author)f(is)h(a)n(w)n(are)0 2538 y(that)i(this)g(is)
-f(not)h(an)f(optimal)h(solution,)f(ho)n(w)n(ev)n(er,)e(using)j
-Fm(syslog\(3\))23 b Fn(will)28 b(usually)f(pro)n(vide)g(a)g(b)r(etter)h
-(w)n(a)n(y)-7 b(.)0 2867 y Fk(4.9)135 b(Regular)47 b(Chec)l(ks)0
-3102 y Fn(There)27 b(are)g(at)g(least)g(t)n(w)n(o)g(things)h(that)g
-(should)f(b)r(e)h(done)f(regularly:)101 3338 y(1.)42
-b(Chec)n(k)27 b(the)h(log\014le)e(for)i(errors)1178 3308
-y Fi(3)1212 3338 y Fn(:)208 3554 y Fm($)43 b(egrep)e
-('sev=\(ALERT|CRIT|)o(ER)o(R|F)o(AI)o(L\))o(|\\<)o(as)o(ser)o(ti)o
-(on\\)o(>')c($LOGFILE)101 3770 y Fn(2.)42 b(Keep)27 b(trac)n(k)f(of)i
-(the)g(size)f(of)g(the)h(pro)r(cesses,)f(e.g,)208 3986
-y Fm($)43 b(date)f(>>)g($MTAPROCS)208 4085 y($)h(ps)f(axuww)g(|)h(grep)
-f('^meta1')e(|)k(sort)d(>>)i($MTAPROCS)208 4301 y Fn(If)27
-b(one)g(of)g(the)g(pro)r(cesses)e(con)n(tin)n(uously)h(gro)n(ws)f(then)
-j(MeT)-7 b(A1)27 b(should)f(b)r(e)i(compiled)f(with)g
-Fm(-DSM)p 3331 4301 27 4 v 30 w(HEAP)p 3537 4301 V 30
-w(CHECK)208 4401 y Fn(\(see)h(Section)g(12.1.5\))f(and)i(a)f(heap)g
-(dump)h(should)f(b)r(e)h(tak)n(en)f(regularly)e(b)n(y)j(sending)f(the)g
-Fm(USR1)f Fn(signal)h(to)g(the)208 4501 y(pro)r(cess.)41
-b(By)30 b(comparing)e(subsequen)n(t)h(heap)g(dumps)h(it)h(should)e(b)r
-(e)h(p)r(ossible)f(to)h(lo)r(cate)f(a)g(p)r(ossible)g(memory)208
-4600 y(leak.)0 4836 y(Please)d(rep)r(ort)h(problems)g(that)h(cannot)f
-(b)r(e)h(resolv)n(ed)e(lo)r(cally)-7 b(,)27 b(see)g(Section)h(1.4.1.)p
-0 4906 1512 4 v 92 4959 a Fh(3)127 4983 y Fg(See)c Fe(egrep\(1\))i
-Fg(for)d(the)i(correct)f(syn)n(tax)h(for)e(w)n(ord)g(delimiters)g(on)h
-(y)n(our)g(OS.)1848 5768 y Fn(47)p eop end
-%%Page: 48 49
-TeXDict begin 48 48 bop 0 523 a Fk(4.10)136 b(Dealing)46
-b(with)f(Errors)0 775 y Fj(4.10.1)113 b(Resource)37 b(Problems)0
-982 y Fn(Resource)23 b(problems)h(in)h(certain)f(parts)g(of)g(the)h(co)
-r(de)g(can)f(lead)g(to)g(a)h(stop)f(of)g(the)h(in)n(v)n(olv)n(ed)f
-(program.)33 b(In)25 b(suc)n(h)f(a)g(case)0 1082 y(it)30
-b(will)f(b)r(e)h(restarted)e(automatically)h(but)h(if)f(the)h(resource)
-e(problem)h(has)f(not)i(b)r(een)f(tak)n(en)g(care)f(of)i(the)f(MT)-7
-b(A)30 b(ma)n(y)0 1181 y(stop)e(again.)39 b(In)29 b(that)g(case)f(man)n
-(ual)g(in)n(teraction)g(is)g(required.)39 b(The)29 b(simple)g(solution)
-f(to)h(a)f(resource)f(problem)h(is)h(of)0 1281 y(course)e(to)g(add)h
-(more)f(resources)f(\(RAM/disk\))i(or)f(to)h(free)f(up)h(some)f
-(resources,)f(e.g.,)i(stopping)f(programs)f(that)i(do)0
-1380 y(not)g(need)f(to)h(run)f(or)g(deleting)h(un)n(used)f(\014les.)37
-b(There)27 b(are)g(also)f(w)n(a)n(ys)g(to)i(con)n(trol)e(resource)g
-(usage)g(within)i(MeT)-7 b(A1:)125 1617 y Fc(\017)41
-b Fn(memory)26 b(shortage:)34 b(the)27 b(memory)f(usage)g(of)h(MeT)-7
-b(A1)27 b(can)f(b)r(e)h(con)n(trolled)f(b)n(y)h(restricting)e(the)j
-(size)e(of)h(v)-5 b(arious)208 1716 y(data)36 b(structures,)j(see)d
-(Section)i(3.8,)g(e.g.,)h Fm(AQ_max_entries)p Fn(,)34
-b Fm(IQDB)p Fn(,)i(and)g Fm(OCC_max_entries)p Fn(.)60
-b(Ho)n(w)n(ev)n(er,)208 1816 y(setting)30 b(these)g(v)-5
-b(alues)31 b(to)r(o)f(lo)n(w)f(will)i(result)f(in)h(a)f(v)n(ery)f(slo)n
-(w)h(MT)-7 b(A)31 b(that)f(ma)n(y)g(op)r(erate)g(in)h(a)f(degraded)f
-(state)208 1916 y(whic)n(h)e(is)h(not)f(acceptable.)125
-2082 y Fc(\017)41 b Fn(disk)18 b(shortage:)31 b(MeT)-7
-b(A1)19 b(has)f(options)h(that)g(let)g(it)h(decide)f(ho)n(w)f(m)n(uc)n
-(h)h(free)f(disk)h(space)f(is)h(needed)g(for)g(op)r(eration,)208
-2181 y(see)33 b(Section)g(3.8:)48 b Fm(ok_disk_space)28
-b Fn(and)34 b Fm(min_disk_space)p Fn(.)49 b(Ho)n(w)n(ev)n(er,)33
-b(if)h(there)f(is)h(not)f(enough)g(space)g(to)208 2281
-y(store)22 b(the)h(en)n(v)n(elop)r(e)f(databases)f(\(DEFEDB)i(and)g
-(IBDB\))g(then)h(the)f(system)g(cannot)f(w)n(ork,)h(hence)g(su\016cien)
-n(tly)208 2381 y(free)k(disk)g(space)g(is)h(essen)n(tial)e(for)h(prop)r
-(er)g(op)r(eration.)0 2667 y Fj(4.10.2)113 b(Database)38
-b(Problems)0 2873 y Fn(See)27 b(Section)h(7.1)f(for)g(some)f(bac)n
-(kground)g(information)h(ab)r(out)g(the)h(usage)e(of)i(the)g(v)-5
-b(arious)26 b(databases)g(b)r(efore)h(trying)0 2973 y(to)g(\014x)h(an)n
-(y)f(p)r(ossible)g(problems.)0 3126 y(If)j(the)g(deferred)g(database)e
-(is)i(corrupted)f(then)h(the)h(Berk)n(eley)d(DB)i(utilities)g(to)g
-(deal)g(with)g(suc)n(h)f(situations)h(should)0 3226 y(b)r(e)e(tried)g
-([Sleb],)g(e.g.,)f Fm(db_recover)p Fn(.)0 3379 y(Curren)n(tly)h
-(messages)f(stored)h(in)h(CDB)g(ha)n(v)n(e)f(the)h(transaction)e(iden)n
-(ti\014er)i(\()p Fm(ss_ta)p Fn(,)f(see)g(Section)h(10.3\))f(as)g
-(\014lename.)0 3479 y(In)i(the)g(w)n(orst)e(case,)i(i.e.,)g(if)g(IBDB)g
-(or)e(DEFEDB)i(are)f(destro)n(y)n(ed,)f(this)i(allo)n(ws)e(to)i
-(reconstruct)e(the)i(en)n(v)n(elop)r(e)f(data)0 3578
-y(together)38 b(with)h(the)g(log\014le)e(en)n(tries.)69
-b(See)39 b(the)g(script)f Fm(misc/rcvrenvfrom)o(log)o(.s)o(h)32
-b Fn(for)38 b(an)h(example,)i(here)d(is)g(a)0 3678 y(description)33
-b(of)g(its)h(op)r(eration.)53 b(First,)35 b(c)n(hec)n(k)e(whic)n(h)g
-(messages)f(are)g(still)i(in)g(CDB:)g(in)f(the)h(CDB)g(directory)e
-(\(3.4:)0 3778 y Fm(CDB_base_directo)o(ry)p Fn(\))22
-b(issue:)0 4014 y Fm(#)43 b(ls)g(-1)g([0-9A-F]/S*)0 4250
-y Fn(Then)28 b(searc)n(h)e(for)h(eac)n(h)g(of)g(those)h(transaction)e
-(ids)h(\()p Fm($TAID)p Fn(\))g(in)g(the)h(log\014le)f(\()p
-Fm($LOG)p Fn(\):)0 4486 y Fm($)43 b(egrep)f("ss_ta=$TAID,)c
-(\(mail|rcpt\)=")g($LOG)k(|)h(\\)87 4586 y(sed)g(-e)f
-('s;^.*\\\(mail=<.*>)o(\\\))o(,)c(.*;\\1;')i(-e)j('s;^.*\\\(rcpt=<.*)o
-(>\\\))o(,)37 b(.*;\\1;')0 4822 y Fn(will)29 b(sho)n(w)f(the)h(sender)f
-(\()p Fm(mail=)p Fn(\))f(and)i(the)g(recipien)n(ts)f(\()p
-Fm(rcpt=)p Fn(\).)38 b(Based)28 b(on)h(this)f(data)h(it)g(is)f(p)r
-(ossible)h(to)f(resend)g(the)0 4922 y(messages.)0 5075
-y(Note:)45 b(con)n(tributions)31 b(in)h(this)g(area)e(are)h(w)n
-(elcome,)h(e.g.,)g(b)r(etter)g(scripts)f(that)h(p)r(erform)f(more)g(c)n
-(hec)n(ks)f(and)i(ma)n(yb)r(e)0 5175 y(allo)n(w)26 b(for)i(completely)f
-(automatic)g(reco)n(v)n(ery)-7 b(.)1848 5768 y(48)p eop
-end
-%%Page: 49 50
-TeXDict begin 49 49 bop 0 523 a Fj(4.10.3)113 b(W)-9
-b(riting)36 b(Core)h(Dumps)0 730 y Fn(By)21 b(default,)j(all)d(MeT)-7
-b(A1)22 b(pro)r(cesses)e(are)g(executed)i(in)g(the)g(main)g(queue)f
-(directory)-7 b(.)34 b(As)22 b(those)f(pro)r(cesses)f(are)h(running)0
-830 y(with)k(di\013eren)n(t)f(user)g(and)g(group)f(ids)i(not)f(all)g
-(of)h(them)f(can)g(write)h(a)f(core)f(dump)i(in)n(to)f(that)h
-(directory)e(if)h(a)g(fatal)h(error)0 929 y(o)r(ccurs.)35
-b(Some)25 b(op)r(erating)f(systems)g(ha)n(v)n(e)g(commands)h(\(e.g.,)g
-Fm(coreadm\(1M\))c Fn(on)k(SunOS)g(5.x\))g(to)g(sp)r(ecify)g(a)f
-(di\013eren)n(t)0 1029 y(directory)f(in)h(whic)n(h)h(a)e(core)g(dump)i
-(is)f(written.)36 b(On)24 b(op)r(erating)g(systems)f(where)h(suc)n(h)g
-(a)g(command)g(is)g(not)g(a)n(v)-5 b(ailable,)0 1128
-y(the)28 b(option)f Fm(working_directory)21 b Fn(can)27
-b(b)r(e)h(used)g(\(see)f(Section)h(8.2,)f(item)h(4\).)0
-1457 y Fk(4.11)136 b(Replacemen)l(ts)47 b(for)e(F)-11
-b(eatures)45 b(a)l(v)-7 b(ailable)47 b(in)e(other)g(MT)-11
-b(As)0 1692 y Fn(MeT)k(A1)36 b(do)r(es)f(curren)n(tly)g(not)h(o\013er)g
-(some)f(of)h(the)g(features)g(that)g(are)f(a)n(v)-5 b(ailable)34
-b(in)j(other)e(MT)-7 b(As.)62 b(This)36 b(section)0 1792
-y(describ)r(es)27 b(replacemen)n(ts)g(or)f(w)n(ork)-5
-b(arounds)25 b(for)j(some)f(of)g(those)g(features.)101
-2028 y(1.)42 b(Address)30 b(Masquerading:)41 b(The)30
-b(b)r(est)h(w)n(a)n(y)e(to)i(use)f(the)h(correct)e(e-mail)h(addresses)f
-(is)i(to)f(prop)r(erly)g(con\014gure)208 2128 y(y)n(our)h(MUA.)j(Some)f
-(MUAs)g(o\013er)f(more)h(\015exibilit)n(y)g(for)f(this)h(than)g(the)h
-(default)f(masquerading)e(features)i(of)208 2227 y(sendmail)27
-b(8,)g(e.g.,)g(m)n(utt)i([m)n(ut])f(allo)n(ws)e(to)h(select)h(sender)f
-(addresses)f(based)h(on)g(recipien)n(t)h(addresses.)208
-2360 y(Alternativ)n(ely)h(a)h(mail)g(submission)f(program)g(\(MSP\))h
-(can)g(b)r(e)g(used)g(whic)n(h)g(o\013ers)g(address)f(rewriting)g
-(capa-)208 2460 y(bilities,)f(e.g.,)f(the)h(MSP)f(from)h(sendmail)f(8.)
-101 2626 y(2.)42 b Fm(.forward)p Fn(:)31 b Fm(procmail)21
-b Fn(can)i(b)r(e)h(used)f(as)g(LD)n(A)h(\(see)g(Section)f(4.3.1\))g
-(and)h(its)f(con\014guration)f(\014le)i Fm(.procmailrc)208
-2725 y Fn(allo)n(ws)h(to)h(implemen)n(t)h(the)g(same)f(functionalit)n
-(y)h(as)f(a)g Fm(.forward)d Fn(from)j(sendmail)h(8)f(and)g(some)g
-(other)g(MT)-7 b(As.)101 2891 y(3.)42 b(Sending)27 b(mail)h(to)f
-(programs:)35 b(see)27 b(previous)f(item)j(2:)36 b(this)28
-b(can)f(b)r(e)h(done)f(with)i(the)f(help)f(of)h Fm(procmail)p
-Fn(.)101 3057 y(4.)42 b(App)r(ending)28 b(mails)f(to)h(\014les:)36
-b(see)28 b(item)g(2:)36 b(this)28 b(can)f(b)r(e)h(done)g(with)g(the)g
-(help)g(of)f Fm(procmail)p Fn(.)1848 5768 y(49)p eop
-end
-%%Page: 50 51
-TeXDict begin 50 50 bop 0 1199 a Fl(Chapter)65 b(5)0
-1668 y Fp(P)-6 b(olicy)76 b(Milter)0 2203 y Fk(5.1)135
-b(P)l(olicy)46 b(Milter)g(Ov)l(erview)0 2439 y Fn(MeT)-7
-b(A1)32 b(has)f(supp)r(ort)h(for)g(a)f(p)r(olicy)h(milter)g(whic)n(h)g
-(is)g(similar)g(to)g(a)f(milter)h(in)h(sendmail)e(8.)50
-b(The)32 b(API)g(is)g(sligh)n(tly)0 2538 y(di\013eren)n(t,)e(ho)n(w)n
-(ev)n(er,)f(it)h(should)f(b)r(e)h(p)r(ossible)g(to)f(write)h(an)f
-(compatibilit)n(y)h(la)n(y)n(er)e(to)h(em)n(ulate)h(the)g(sendmail)f(8)
-h(API.)0 2638 y(Another)20 b(di\013erence)f(is)h(that)g(MeT)-7
-b(A1)20 b(itself)g(only)f(talks)h(to)f(a)h(single)f(pmilter.)34
-b(Supp)r(ort)20 b(for)g(m)n(ultiple)g(pmilters)g(should)0
-2738 y(b)r(e)28 b(implemen)n(ted)g(in)g(a)f Fd(multiplexor)h
-Fn(that)g(connects)f(to)h(m)n(ultiple)g(pmilters)g(and)f(co)r
-(ordinates)f(their)i(resp)r(onses.)0 3066 y Fk(5.2)135
-b(Nativ)l(e)47 b(P)l(olicy)f(Milter)f(API)0 3301 y Fn(Note:)37
-b(this)28 b(API)f(ma)n(y)g(ev)n(olv)n(e)f(o)n(v)n(er)g(time.)0
-3454 y(Naming)32 b(con)n(v)n(en)n(tions:)44 b(A)33 b
-Fd(p)l(olicy)j(milter)c Fn(\(also)g(called)f Fd(pmilter)p
-Fn(\))j(is)e(a)g(program)e(that)i(uses)g(the)h(API)f(pro)n(vided)f(b)n
-(y)0 3554 y Fd(libpmilter)p Fn(.)38 b(The)26 b(latter)g(in)n(teracts)g
-(with)g(the)h(SMTP)f(serv)n(ers)e(via)i(an)g(in)n(ternal)g(proto)r
-(col,)f(i.e.,)i(this)f(proto)r(col)f(can)h(b)r(e)0 3654
-y(c)n(hanged)h(without)h(c)n(hanging)e(the)i(visible)f(API)h(and)f
-(should)g(not)h(directly)f(b)r(e)h(accessed)f(b)n(y)g(a)g(user)g
-(application.)0 3940 y Fj(5.2.1)112 b(Data)38 b(Structures)0
-4147 y Fn(libpmilter)28 b(itself)g(uses)f(three)h(con)n(text)f
-(structures)g(all)g(of)h(whic)n(h)f(m)n(ust)h(b)r(e)g(treated)f(b)n(y)g
-(a)h(milter)f(as)g(opaque.)101 4383 y(1.)42 b Fm(pmg)p
-345 4383 27 4 v 30 w(ctx)p Fn(:)35 b(\\global")26 b(libpmilter)i(con)n
-(text)f(\(only)h(one)f(p)r(er)g(pro)r(cess\).)101 4549
-y(2.)42 b Fm(pmss)p 389 4549 V 29 w(ctx)p Fn(:)32 b(libpmilter)21
-b(con)n(text)f(p)r(er)g(SMTP)g(serv)n(er)f(that)h(connects)g(to)g(this)
-h(instance.)34 b(There)19 b(can)h(b)r(e)h(m)n(ultiple)208
-4648 y(SMTP)27 b(serv)n(ers)e(connecting)j(to)f(one)g(libpmilter)h
-(instance.)101 4815 y(3.)42 b Fm(pmse)p 389 4815 V 29
-w(ctx)p Fn(:)36 b(libpmilter)28 b(con)n(text)f(p)r(er)h(SMTP)f
-(session.)0 5051 y(An)n(y)f(of)g(the)h(libpmilter)f(functions)h(tak)n
-(es)e(one)h(of)g(these)g(con)n(texts)g(as)f(parameter;)g(e.g.,)i(all)e
-(SMTP)h(session)f(orien)n(ted)0 5150 y(functions)j(ha)n(v)n(e)e(a)i
-(parameter)e(of)h(t)n(yp)r(e)h Fm(pmse)p 1478 5150 V
-30 w(ctx)p 1640 5150 V 30 w(P)p Fn(.)0 5304 y(A)g(milter)g(can)f(ha)n
-(v)n(e)f(its)i(o)n(wn)f(con)n(texts)g(for)g(eac)n(h)g(of)g(these)h
-(three)f(en)n(vironmen)n(ts,)g(see)g(Section)h(5.2.5.)1848
-5768 y(50)p eop end
-%%Page: 51 52
-TeXDict begin 51 51 bop 0 523 a Fj(5.2.2)112 b(Start)38
-b(and)g(Stop)0 730 y Fn(The)28 b(functions)g(in)f(this)h(section)g
-(return)f Fm(SM)p 1412 730 27 4 v 30 w(SUCCESS)e Fn(\(0\))j(on)f
-(success)g(and)g(a)g(negativ)n(e)g(v)-5 b(alue)27 b(in)h(case)f(of)h
-(an)f(error.)0 883 y(First)21 b(libpmilter)h(m)n(ust)f(b)r(e)h
-(initialized;)h(a)e(pmilter)h(m)n(ust)f(sp)r(ecify)h(a)e(v)-5
-b(ariable)21 b Fm(pmg)p 2601 883 V 30 w(ctx)p 2763 883
-V 30 w(P)43 b(pmg)p 3012 883 V 30 w(ctx;)22 b Fn(whic)n(h)f(is)g
-(passed)0 983 y(p)r(er)28 b(reference)e(to)i(the)g(initialization)f
-(function:)0 1136 y Fm(sm)p 93 1136 V 31 w(ret)p 256
-1136 V 30 w(T)43 b(sm)p 461 1136 V 30 w(pmfi)p 667 1136
-V 30 w(init\(pmg)p 1049 1136 V 28 w(ctx)p 1209 1136 V
-30 w(P)h(*pmg)p 1503 1136 V 29 w(ctx\))0 1289 y Fn(The)22
-b(pmilter)g(global)e(con)n(text)i(m)n(ust)f(b)r(e)i(treated)e(as)g
-(opaque)g(data)g(structure,)h(it)h(is)e(passed)g(to)h(subsequen)n(t)f
-(libpmilter)0 1389 y(function)28 b(calls.)0 1542 y(Next)g(pmilter)f
-(starts)g(libpmilter)h(b)n(y)f(handing)g(con)n(trol)f(o)n(v)n(er)g(to)h
-(the)h(library;)e(the)i(pmilter)g(passes)e(a)h(description)g(of)0
-1642 y(its)h(requiremen)n(ts)e(and)i(functionalit)n(y:)0
-1795 y Fm(sm)p 93 1795 V 31 w(ret)p 256 1795 V 30 w(T)43
-b(sm)p 461 1795 V 30 w(pmfi)p 667 1795 V 30 w(start\(pmg)p
-1093 1795 V 28 w(ctx)p 1253 1795 V 30 w(P)g(pmg)p 1502
-1795 V 30 w(ctx,)f(pmilter)p 2058 1795 V 29 w(P)h(pmilter\))0
-1948 y Fn(A)28 b(milter)g(can)f(stop)g(b)n(y)g(calling:)0
-2101 y Fm(sm)p 93 2101 V 31 w(ret)p 256 2101 V 30 w(T)43
-b(sm)p 461 2101 V 30 w(pmfi)p 667 2101 V 30 w(stop\(pmg)p
-1049 2101 V 28 w(ctx)p 1209 2101 V 30 w(P)h(pmg)p 1459
-2101 V 30 w(ctx\))0 2255 y Fn(There)35 b(are)f(v)-5 b(arious)34
-b(functions)h(to)g(set)g(some)g(options)f(whic)n(h)h(can)g(b)r(e)h
-(called)e(after)h(libpmilter)h(is)f(initialized)g(but)0
-2354 y(b)r(efore)24 b(it)i(is)e(started.)36 b(T)-7 b(o)24
-b(set)h(the)g(path)g(of)g(the)g(Unix)g(domain)f(so)r(c)n(k)n(et)g(o)n
-(v)n(er)f(whic)n(h)i(the)g(SMTP)f(serv)n(ers)f(\(see)i(Section)0
-2454 y(3.10,)h(item)i(17\))f(and)h(libpmilter)g(comm)n(unicate:)0
-2607 y Fm(sm)p 93 2607 V 31 w(ret)p 256 2607 V 30 w(T)43
-b(sm)p 461 2607 V 30 w(pmfi)p 667 2607 V 30 w(setconn\(pmg)p
-1181 2607 V 27 w(ctx)p 1340 2607 V 30 w(P)g(pmg)p 1589
-2607 V 30 w(ctx,)f(const)g(char)g(*path\))0 2760 y Fn(The)28
-b(bac)n(klog)d(parameter)i(of)g(the)h Fm(listen\(2\))c
-Fn(function)k(can)f(b)r(e)h(set:)0 2914 y Fm(sm)p 93
-2914 V 31 w(ret)p 256 2914 V 30 w(T)43 b(sm)p 461 2914
-V 30 w(pmfi)p 667 2914 V 30 w(setbacklog\(pmg)p 1313
-2914 V 26 w(ctx)p 1471 2914 V 30 w(P)g(pmg)p 1720 2914
-V 30 w(ctx,)f(int)g(backlog\))0 3067 y Fn(The)35 b(debug)f(lev)n(el)g
-(of)g(libpmilter)h(migh)n(t)f(b)r(e)h(set)g(via)f(\(this)h(requires)e
-(kno)n(wledge)g(of)h(the)h(in)n(ternals)f(of)g(the)h(library)0
-3167 y(whic)n(h)28 b(can)f(b)r(e)h(acquired)e(b)n(y)i(lo)r(oking)e(at)i
-(the)g(source)e(co)r(de\):)0 3320 y Fm(sm)p 93 3320 V
-31 w(ret)p 256 3320 V 30 w(T)43 b(sm)p 461 3320 V 30
-w(pmfi)p 667 3320 V 30 w(setdbg\(pmg)p 1137 3320 V 27
-w(ctx)p 1296 3320 V 31 w(P)g(pmg)p 1546 3320 V 30 w(ctx,)f(int)g
-(debuglevel\))0 3473 y Fn(T)-7 b(o)27 b(set)h(the)g(comm)n(unication)f
-(timeout:)0 3626 y Fm(sm)p 93 3626 V 31 w(ret)p 256 3626
-V 30 w(T)43 b(sm)p 461 3626 V 30 w(pmfi)p 667 3626 V
-30 w(settimeout\(pmg)p 1313 3626 V 26 w(ctx)p 1471 3626
-V 30 w(P)g(pmg)p 1720 3626 V 30 w(ctx,)f(int)g(timeout\))0
-3912 y Fj(5.2.3)112 b(New)38 b(SMTP)f(Serv)m(er)0 4119
-y Fn(Whenev)n(er)29 b(an)g(SMTP)g(serv)n(er)e(connects)i(to)g(a)g
-(milter)g(an)g(option)g(negotiation)f(is)i(p)r(erformed)e(\(similar)h
-(to)g(ESMTP)0 4219 y(itself)6 b(\).)61 b(A)35 b(pmilter)h(can)e(c)n
-(hec)n(k)h(whether)g(serv)n(er)e(capabilities)h(are)h(acceptable)f(and)
-h(return)g(the)g(options)g(that)g(it)0 4318 y(w)n(an)n(ts:)0
-4472 y Fm(sm)p 93 4472 V 31 w(ret)p 256 4472 V 30 w(T)43
-b(pmfi)p 549 4472 V 30 w(negotiate\(pmss)p 1195 4472
-V 25 w(ctx)p 1352 4472 V 30 w(P)g(pmss)p 1645 4472 V
-30 w(ctx,)f(uint32)p 2157 4472 V 29 w(t)h(srv)p 2405
-4472 V 30 w(cap,)f(uint32)p 2917 4472 V 29 w(t)h(srv)p
-3165 4472 V 31 w(fct,)e(uint32)p 3677 4472 V 29 w(t)j(srv)p
-3926 4472 V 30 w(feat,)0 4571 y(uint32)p 269 4571 V 29
-w(t)f(srv)p 517 4571 V 30 w(misc,)f(uint32)p 1073 4571
-V 29 w(t)h(*pm)p 1321 4571 V 30 w(cap,)f(uint32)p 1833
-4571 V 29 w(t)h(*pm)p 2081 4571 V 30 w(fct,)f(uint32)p
-2593 4571 V 29 w(t)h(*pm)p 2841 4571 V 30 w(feat,)f(uint32)p
-3397 4571 V 29 w(t)h(*pm)p 3645 4571 V 30 w(misc\))0
-4725 y Fn(Curren)n(tly)30 b(only)g(the)h(capabilities)e(\014eld)i(is)g
-(used:)42 b Fm(srv)p 1783 4725 V 30 w(cap)30 b Fn(is)g(set)h(b)n(y)f
-(the)h(SMTP)f(serv)n(er)f(to)h(a)g(list)h(\(implemen)n(ted)0
-4824 y(as)26 b(bit)i(\014eld\))f(of)g(phases)f(of)h(the)g(ESMTP)g
-(dialogue)e(that)j(can)e(b)r(e)i(passed)e(to)g(a)h(pmilter.)37
-b(In)27 b(turn)g(the)g(pmilter)g(m)n(ust)0 4924 y(set)32
-b Fm(*pm)p 271 4924 V 31 w(cap)f Fn(to)h(includes)h(those)f(phases)g
-(of)g(the)h(ESMTP)f(dialogue)f(that)i(it)g(w)n(an)n(ts)e(to)h(receiv)n
-(e.)51 b(F)-7 b(or)31 b(details,)j(see)0 5023 y Fm(include/sm/pmilt)o
-(er.)o(h)p Fn(.)42 b(F)-7 b(or)31 b(eac)n(h)f(of)i(those)f(phases)f(a)h
-(callbac)n(k)f(is)h(in)n(v)n(ok)n(ed)f(\(see)h(Section)h(5.2.4\))e
-(whic)n(h)h(m)n(ust)0 5123 y(b)r(e)d(set)g(b)n(y)f(the)h(pmilter)g(in)g
-(its)f(description)g(structure)g Fm(struct)42 b(pmilter)p
-2404 5123 V 28 w(S)27 b Fn(\(see)h Fm(include/sm/pmfap)o(i.)o(h)p
-Fn(\).)1848 5768 y(51)p eop end
-%%Page: 52 53
-TeXDict begin 52 52 bop 0 523 a Fj(5.2.4)112 b(SMTP)38
-b(Session)h(and)f(T)-9 b(ransaction)0 730 y Fn(The)27
-b(proto)r(col)f(steps)h(from)f(ESMTP)h(are)f(forw)n(arded)f(to)i(the)g
-(p)r(olicy)g(milter)g(whic)n(h)g(can)g(decide)g(to)g(accept)g(or)f
-(reject)0 830 y(them.)125 1066 y Fc(\017)41 b Fn(New)27
-b(SMTP)h(session:)208 1199 y Fm(sfsistat)p 565 1199 27
-4 v 28 w(T)43 b(pmfi)p 856 1199 V 30 w(connect\(pmse)p
-1414 1199 V 26 w(ctx)p 1572 1199 V 30 w(P)g(pmse)p 1865
-1199 V 30 w(ctx,)f(const)f(char)h(*hostname,)e(sm)p 3160
-1199 V 30 w(sock)p 3366 1199 V 30 w(addr)p 3572 1199
-V 30 w(T)j(*hostaddr\))208 1331 y(hostname)p Fn(:)37
-b(host)29 b(name,)h(as)f(determined)h(b)n(y)f(a)g(rev)n(erse)f(lo)r
-(okup)h(on)h(the)f(host)h(IP)f(address;)g Fm(hostaddr)p
-Fn(:)38 b(host)208 1431 y(address,)26 b(as)h(determined)h(b)n(y)f(a)g
-Fm(getpeername\(2\))22 b Fn(call)27 b(on)h(the)g(SMTP)f(so)r(c)n(k)n
-(et.)125 1597 y Fc(\017)41 b Fn(SMTP)27 b Fm(HELO)p Fn(/)p
-Fm(EHLO)d Fn(command:)208 1730 y Fm(sfsistat)p 565 1730
-V 28 w(T)43 b(pmfi)p 856 1730 V 30 w(helo\(pmse)p 1282
-1730 V 27 w(ctx)p 1441 1730 V 30 w(P)g(pmse)p 1734 1730
-V 30 w(ctx,)f(const)g(char)g(*helohost,)d(bool)j(ehlo\))208
-1863 y(helohost)p Fn(:)32 b(V)-7 b(alue)25 b(passed)f(to)h
-Fm(HELO)p Fn(/)p Fm(EHLO)c Fn(command,)k(whic)n(h)g(should)g(b)r(e)g
-(the)g(domain)g(name)g(of)g(the)g(sending)208 1962 y(host.)36
-b Fm(ehlo)p Fn(:)f Fm(true)27 b Fn(i\013)h Fm(EHLO)e
-Fn(w)n(as)g(used.)125 2128 y Fc(\017)41 b Fm(MAIL)26
-b Fn(\(en)n(v)n(elop)r(e)h(sender\):)208 2261 y Fm(sfsistat)p
-565 2261 V 28 w(T)43 b(pmfi)p 856 2261 V 30 w(mail\(pmse)p
-1282 2261 V 27 w(ctx)p 1441 2261 V 30 w(P)g(pmse)p 1734
-2261 V 30 w(ctx,)f(const)g(char)g(*mail,)f(char)h(**argv\))208
-2394 y(mail)p Fn(:)35 b(en)n(v)n(elop)r(e)27 b(mail)g(address;)f
-Fm(argv)p Fn(:)36 b(n)n(ull-terminated)27 b Fm(MAIL)f
-Fn(command)h(argumen)n(ts.)125 2560 y Fc(\017)41 b Fm(RCPT)26
-b Fn(\(en)n(v)n(elop)r(e)h(recipien)n(t\):)208 2693 y
-Fm(sfsistat)p 565 2693 V 28 w(T)43 b(pmfi)p 856 2693
-V 30 w(rcpt\(pmse)p 1282 2693 V 27 w(ctx)p 1441 2693
-V 30 w(P)g(pmse)p 1734 2693 V 30 w(ctx,)f(const)g(char)g(*rcpt,)f(char)
-h(**argv\))208 2826 y(rcpt)p Fn(:)35 b(en)n(v)n(elop)r(e)27
-b(recipien)n(t)g(address;)f Fm(argv)p Fn(:)36 b(n)n(ull-terminated)27
-b Fm(RCPT)f Fn(command)h(argumen)n(ts.)125 2992 y Fc(\017)41
-b Fm(DATA)p Fn(:)208 3125 y Fm(sfsistat)p 565 3125 V
-28 w(T)i(pmfi)p 856 3125 V 30 w(data\(pmse)p 1282 3125
-V 27 w(ctx)p 1441 3125 V 30 w(P)g(pmse)p 1734 3125 V
-30 w(ctx\))125 3291 y Fc(\017)e Fn(unkno)n(wn/not)26
-b(implemen)n(ted)i(SMTP)g(command:)208 3424 y Fm(sfsistat)p
-565 3424 V 28 w(T)43 b(pmfi)p 856 3424 V 30 w(unknown\(pmse)p
-1414 3424 V 26 w(ctx)p 1572 3424 V 30 w(P)g(pmse)p 1865
-3424 V 30 w(ctx,)f(const)f(char)h(*cmd\))208 3556 y(cmd)p
-Fn(:)35 b(SMTP)28 b(command.)36 b(Note:)h(this)28 b(is)f(not)h(y)n(et)f
-(implemen)n(ted.)125 3722 y Fc(\017)41 b Fn(F)-7 b(or)27
-b(eac)n(h)f(c)n(h)n(unk)h(of)h(a)f(message:)208 3855
-y Fm(sfsistat)p 565 3855 V 28 w(T)43 b(pmfi)p 856 3855
-V 30 w(msg\(pmse)p 1238 3855 V 28 w(ctx)p 1398 3855 V
-30 w(P)g(pmse)p 1691 3855 V 30 w(ctx,)f(unsigned)e(char)i(*msgp,)f
-(size)p 3030 3855 V 30 w(t)i(msglen\))208 3988 y(msgp)p
-Fn(:)e(p)r(oin)n(ter)31 b(to)f(message)g(data;)i Fm(msglen)p
-Fn(:)40 b(length)31 b(of)g(message)e(data.)46 b(There)30
-b(ma)n(y)h(b)r(e)g(m)n(ultiple)g(message)208 4088 y(c)n(h)n(unks)20
-b(passed)g(to)g(the)i(\014lter.)34 b(End-of-lines)20
-b(are)g(represen)n(ted)f(as)i(receiv)n(ed)e(from)i(SMTP)f(\(normally)g
-(Carriage-)208 4187 y(Return/Line-F)-7 b(eed;)27 b(CRLF\).)h(Notes:)301
-4353 y Fo({)41 b Fn(the)28 b(last)f(message)g(c)n(h)n(unk)g(con)n
-(tains)f(the)i(\014nal)g(dot)f(of)h(the)g(SMTP)f(transmission,)g(i.e.,)
-h(\\CRLF.CRLF")301 4486 y Fo({)41 b Fn(the)26 b(message)d(is)i(not)g
-(mo)r(di\014ed)g(in)g(an)n(y)g(form,)g(i.e.,)h(dots)e(at)h(the)g(b)r
-(egin)g(of)g(a)g(line)g(are)f(duplicated)h(\(b)n(y)g(the)390
-4586 y(SMTP)j(clien)n(t\))h(as)e(sp)r(eci\014ed)i(in)f(section)g(4.5.2)
-f(of)h(RF)n(C)h(2821)d([Kle01)o(])i(whic)n(h)g(m)n(ust)g(b)r(e)h
-(undone)f(b)n(y)g(the)390 4686 y(application)f(if)h(so)f(desired.)301
-4818 y Fo({)41 b Fn(the)28 b(message)e(is)h Fd(str)l(e)l(ame)l(d)g
-Fn(while)h(b)r(eing)f(receiv)n(ed.)36 b(That)27 b(is,)h(the)f(mail)h
-(is)f(not)g(\014rst)g(stored)g(on)g(disk)g(and)390 4918
-y(then)k(sen)n(t)f(to)h(the)g(\014lter,)g(but)g(eac)n(h)e(part)h
-(receiv)n(ed)g(from)g(the)h(clien)n(t)f(is)g(sen)n(t)h(directly)f(to)g
-(the)h(\014lter)f(\(at)390 5018 y(the)f(same)f(sp)r(eed)g(as)g(receiv)n
-(ed)f(from)h(the)g(net)n(w)n(ork)f(whic)n(h)i(migh)n(t)f(b)r(e)g(slo)n
-(w\).)39 b(This)28 b(ma)n(y)g(mean)g(that)g(the)390 5117
-y(\014lter)23 b(do)r(es)f(not)g(receiv)n(e)g(the)h(en)n(tire)f(message)
-f(as)h(the)h(transmission)e(ma)n(y)h(get)g(in)n(terrupted)g(or)g(the)h
-(SMTP)390 5217 y(serv)n(er)j(ma)n(y)h(decide)h(to)f(skip)g(the)h(rest)g
-(of)f(the)h(message)e(b)r(ecause)h(it)h(exceeds)f(the)h(maxim)n(um)g
-(size.)301 5350 y Fo({)41 b Fn(the)28 b(return)f(co)r(de)h(is)f
-(ignored)g(unless)g Fm(SM)p 1696 5350 V 31 w(SCAP)p 1903
-5350 V 29 w(PM)p 2020 5350 V 31 w(MSG)p 2183 5350 V 30
-w(RC)g Fn(is)g(set,)h(see)f(Section)h(5.2.11,)e(item)i(2.)1848
-5768 y(52)p eop end
-%%Page: 53 54
-TeXDict begin 53 53 bop 125 523 a Fc(\017)41 b Fn(End)27
-b(of)h(message)e(\(\014nal)h(dot)h(of)g(message)e(has)h(b)r(een)h
-(receiv)n(ed\):)208 656 y Fm(sfsistat)p 565 656 27 4
-v 28 w(T)43 b(pmfi)p 856 656 V 30 w(eom\(pmse)p 1238
-656 V 28 w(ctx)p 1398 656 V 30 w(P)g(pmse)p 1691 656
-V 30 w(ctx\))125 822 y Fc(\017)e Fn(Message)31 b(is)h(ab)r(orted)g
-(outside)h(of)f(the)i(con)n(trol)d(of)i(the)g(\014lter,)h(for)e
-(example,)h(if)h(the)f(SMTP)f(clien)n(t)h(issues)f(an)208
-922 y(RSET)27 b(command.)208 1054 y Fm(sm)p 301 1054
-V 30 w(ret)p 463 1054 V 30 w(T)43 b(pmfi)p 756 1054 V
-30 w(abort\(pmse)p 1226 1054 V 27 w(ctx)p 1385 1054 V
-31 w(P)g(pmse)p 1679 1054 V 29 w(ctx\))125 1220 y Fc(\017)e
-Fm(QUIT)26 b Fn(\(end)i(of)f(an)h(SMTP)f(session\):)208
-1353 y Fm(sm)p 301 1353 V 30 w(ret)p 463 1353 V 30 w(T)43
-b(pmfi)p 756 1353 V 30 w(close\(pmse)p 1226 1353 V 27
-w(ctx)p 1385 1353 V 31 w(P)g(pmse)p 1679 1353 V 29 w(ctx\))208
-1486 y Fn(This)27 b(is)h(called)f(when)h(an)f(SMTP)g(session)g(ends.)0
-1772 y Fj(5.2.5)112 b(Set)38 b(and)g(Get)f(pmilter)h(Con)m(texts)0
-1979 y Fn(As)28 b(explained)g(in)g(Section)h(5.2.1)d(a)i(milter)g(can)g
-(ha)n(v)n(e)f(a)h(\\global")e(con)n(text)i Fm(pmilter)p
-2749 1979 V 28 w(g)p 2821 1979 V 31 w(ctx)p Fn(,)f(a)h(con)n(text)g(p)r
-(er)g(SMTP)0 2079 y(serv)n(er)i Fm(pmilter)p 558 2079
-V 28 w(ss)p 674 2079 V 31 w(ctx)p Fn(,)h(and)g(a)g(con)n(text)g(p)r(er)
-h(SMTP)f(session)f Fm(pmilter)p 2433 2079 V 29 w(se)p
-2550 2079 V 31 w(ctx)p Fn(.)47 b(The)31 b(follo)n(wing)g(functions)h
-(are)0 2178 y(pro)n(vided)27 b(to)g(set)h(and)f(get)g(these)h(con)n
-(texts.)0 2331 y(Set)g(the)g(\\global")d(con)n(text)j
-Fm(pmilter)p 1222 2331 V 28 w(g)p 1294 2331 V 31 w(ctx)p
-Fn(:)0 2485 y Fm(sm)p 93 2485 V 31 w(ret)p 256 2485 V
-30 w(T)43 b(sm)p 461 2485 V 30 w(pmfi)p 667 2485 V 30
-w(set)p 829 2485 V 30 w(ctx)p 991 2485 V 30 w(g\(pmg)p
-1241 2485 V 30 w(ctx)p 1403 2485 V 30 w(P)g(pmg)p 1652
-2485 V 30 w(ctx,)f(void)g(*pmilter)p 2470 2485 V 28 w(g)p
-2542 2485 V 31 w(ctx\))p Fn(.)0 2638 y(This)28 b(m)n(ust)f(b)r(e)h
-(done)g(after)f(libpmilter)h(has)f(b)r(een)h(initialized)g(but)g(b)r
-(efore)f(con)n(trol)g(is)g(transferred)f(to)i(it.)0 2791
-y(T)-7 b(o)27 b(retriev)n(e)f(the)i(\\global")e(con)n(text)h(in)n(v)n
-(ok)n(e:)0 2944 y Fm(void)42 b(*sm)p 355 2944 V 30 w(pmfi)p
-561 2944 V 30 w(get)p 723 2944 V 30 w(ctx)p 885 2944
-V 30 w(g\(pmg)p 1135 2944 V 29 w(ctx)p 1296 2944 V 31
-w(P)h(pmg)p 1546 2944 V 30 w(ctx\))0 3098 y Fn(Note:)48
-b(this)33 b(requires)f(the)h(\\global")e(libpmilter)j(con)n(text)f
-(whic)n(h)g(is)g(not)g(usually)f(passed)h(to)g(pmilter)g(functions)g
-(in)0 3197 y(callbac)n(ks.)i(See)28 b(b)r(elo)n(w)f(ho)n(w)g(to)h
-(access)e(the)i(\\global")d(con)n(text)j Fm(pmilter)p
-2365 3197 V 28 w(g)p 2437 3197 V 31 w(ctx)e Fn(from)i(other)f(places.)0
-3351 y(T)-7 b(o)27 b(set)h(the)g(pmilter)g(con)n(text)f(p)r(er)g(SMTP)h
-(serv)n(er)d Fm(pmilter)p 1946 3351 V 29 w(ss)p 2063
-3351 V 30 w(ctx)i Fn(use:)0 3504 y Fm(sm)p 93 3504 V
-31 w(ret)p 256 3504 V 30 w(T)43 b(sm)p 461 3504 V 30
-w(pmfi)p 667 3504 V 30 w(set)p 829 3504 V 30 w(ctx)p
-991 3504 V 30 w(ss\(pmss)p 1329 3504 V 29 w(ctx)p 1490
-3504 V 30 w(P)g(pmss)p 1783 3504 V 30 w(ctx,)f(void)g(*pmilter)p
-2601 3504 V 28 w(ss)p 2717 3504 V 30 w(ctx\))p Fn(;)0
-3657 y(to)27 b(retriev)n(e)g(it)h(call:)0 3810 y Fm(void)42
-b(*sm)p 355 3810 V 30 w(pmfi)p 561 3810 V 30 w(get)p
-723 3810 V 30 w(ctx)p 885 3810 V 30 w(ss\(pmss)p 1223
-3810 V 29 w(ctx)p 1384 3810 V 30 w(P)h(pmss)p 1677 3810
-V 30 w(ctx\))0 3964 y Fn(The)36 b(\\global")e(pmilter)j(con)n(text)f
-Fm(pmilter)p 1432 3964 V 28 w(g)p 1504 3964 V 31 w(ctx)f
-Fn(can)h(b)r(e)h(retriev)n(ed)e(from)h(the)g(libpmilter)h(con)n(text)f
-(p)r(er)g(SMTP)0 4063 y(serv)n(er:)0 4216 y Fm(void)42
-b(*sm)p 355 4216 V 30 w(pmfi)p 561 4216 V 30 w(get)p
-723 4216 V 30 w(ctx)p 885 4216 V 30 w(g)p 959 4216 V
-31 w(ss\(pmss)p 1298 4216 V 29 w(ctx)p 1459 4216 V 30
-w(P)h(pmss)p 1752 4216 V 30 w(ctx\))0 4370 y Fn(A)n(t)28
-b(the)g(lo)n(w)n(est)e(lev)n(el)i(a)f(con)n(text)g(p)r(er)g(SMTP)h
-(session)e Fm(pmilter)p 2064 4370 V 29 w(se)p 2181 4370
-V 30 w(ctx)h Fn(can)g(b)r(e)h(set)g(via:)0 4523 y Fm(sm)p
-93 4523 V 31 w(ret)p 256 4523 V 30 w(T)43 b(sm)p 461
-4523 V 30 w(pmfi)p 667 4523 V 30 w(set)p 829 4523 V 30
-w(ctx)p 991 4523 V 30 w(se\(pmse)p 1329 4523 V 29 w(ctx)p
-1490 4523 V 30 w(P)g(pmse)p 1783 4523 V 30 w(ctx,)f(void)g(*pmilter)p
-2601 4523 V 28 w(se)p 2717 4523 V 30 w(ctx\))0 4676 y
-Fn(and)27 b(retriev)n(ed)g(b)n(y:)0 4829 y Fm(void)42
-b(*sm)p 355 4829 V 30 w(pmfi)p 561 4829 V 30 w(get)p
-723 4829 V 30 w(ctx)p 885 4829 V 30 w(se\(pmse)p 1223
-4829 V 29 w(ctx)p 1384 4829 V 30 w(P)h(pmse)p 1677 4829
-V 30 w(ctx\))p Fn(.)0 4983 y(Just)27 b(as)f(b)r(efore)h(there)g(is)g(a)
-f(function)i(to)f(retriev)n(e)f(the)h(pmilter)g(con)n(text)g(p)r(er)g
-(SMTP)g(serv)n(er)e Fm(pmilter)p 3311 4983 V 29 w(ss)p
-3428 4983 V 30 w(ctx)h Fn(from)0 5082 y(the)i(libpmilter)g(con)n(text)f
-(p)r(er)h(SMTP)f(session:)0 5236 y Fm(void)42 b(*sm)p
-355 5236 V 30 w(pmfi)p 561 5236 V 30 w(get)p 723 5236
-V 30 w(ctx)p 885 5236 V 30 w(ss)p 1003 5236 V 31 w(se\(pmse)p
-1342 5236 V 28 w(ctx)p 1502 5236 V 30 w(P)h(pmse)p 1795
-5236 V 30 w(ctx\))0 5389 y Fn(Note:)37 b(if)28 b(a)e(pmilter)i(uses)f
-(these)g(con)n(texts,)g(then)g(it)h(is)f(useful)h(that)f(eac)n(h)g
-(\\lo)n(w)n(er)e(lev)n(el")h(con)n(text)h(con)n(tains)f(a)h(link)h(to)0
-5488 y(its)g(\\higher)e(lev)n(el")g(con)n(text.)37 b(That)27
-b(is,)g(eac)n(h)g(pmilter)h(con)n(text)f(p)r(er)g(SMTP)g(session)f
-Fm(pmilter)p 3052 5488 V 29 w(se)p 3169 5488 V 30 w(ctx)h
-Fn(should)g(ha)n(v)n(e)1848 5768 y(53)p eop end
-%%Page: 54 55
-TeXDict begin 54 54 bop 0 523 a Fn(a)31 b(p)r(oin)n(ter)f(to)h(its)g
-(pmilter)g(con)n(text)g(p)r(er)f(SMTP)h(serv)n(er)e Fm(pmilter)p
-2154 523 27 4 v 29 w(ss)p 2271 523 V 30 w(ctx)h Fn(whic)n(h)h(in)g
-(turn)g(should)g(ha)n(v)n(e)e(a)i(p)r(oin)n(ter)0 623
-y(to)f(the)h(\\global")e(pmilter)h(con)n(text)g Fm(pmilter)p
-1485 623 V 29 w(g)p 1558 623 V 31 w(ctx)p Fn(.)44 b(This)30
-b(allo)n(ws)g(access)f(from)h(a)g(function)h(that)g(is)f(sp)r(eci\014c)
-h(to)f(a)0 722 y(SMTP)d(session)g(to)g(eac)n(h)g(relev)-5
-b(an)n(t)27 b(con)n(text.)0 1008 y Fj(5.2.6)112 b(Accessing)38
-b(MT)-9 b(A)37 b(Sym)m(b)s(ols)0 1215 y Fn(A)24 b(pmilter)g(can)f(set)g
-(a)g(list)h(of)f(sym)n(b)r(ols)g(it)h(w)n(an)n(ts)f(to)g(receiv)n(e)f
-(from)h(the)h(MT)-7 b(A)24 b(b)n(y)f(calling)g(one)g(of)h(follo)n(wing)
-e(functions:)0 1368 y Fm(sm)p 93 1368 V 31 w(pmfi)p 300
-1368 V 29 w(setmaclist\(pmss)p 989 1368 V 25 w(ctx)p
-1146 1368 V 31 w(P)43 b(pmss)p 1440 1368 V 29 w(ctx,)f(uint)g(where,)f
-(...\))0 1522 y(sm)p 93 1522 V 31 w(pmfi)p 300 1522 V
-29 w(setmacs\(pmss)p 857 1522 V 27 w(ctx)p 1016 1522
-V 30 w(P)i(pmss)p 1309 1522 V 30 w(ctx,)f(uint)g(where,)f(uint32)p
-2344 1522 V 29 w(t)i(macros)0 1887 y(\))0 2040 y Fn(during)26
-b(the)g(option)g(negotiation,)f(i.e.,)i(in)f Fm(pmfi)p
-1547 2040 V 30 w(negotiate\(\))p Fn(.)32 b(The)26 b(parameter)f
-Fm(where)f Fn(denotes)i(the)g(stage)f(of)h(the)0 2140
-y(ESMTP)h(dialogue)f(when)i(the)g(v)-5 b(alue)28 b(of)f(the)h(sym)n(b)r
-(ol)f(should)h(b)r(e)g(sen)n(t.)36 b(It)28 b(m)n(ust)g(b)r(e)g(one)f
-(of)50 2288 y Fm(PM)p 143 2288 V 30 w(SMST)p 349 2288
-V 30 w(CONNECT)97 b Fn(Session)27 b(start)50 2387 y Fm(PM)p
-143 2387 V 30 w(SMST)p 349 2387 V 30 w(EHLO)229 b Fn(EHLO)27
-b(or)f(HELO)h(command)50 2487 y Fm(PM)p 143 2487 V 30
-w(SMST)p 349 2487 V 30 w(MAIL)229 b Fn(MAIL)28 b(command)50
-2587 y Fm(PM)p 143 2587 V 30 w(SMST)p 349 2587 V 30 w(RCPT)229
-b Fn(R)n(CPT)27 b(command)50 2686 y Fm(PM)p 143 2686
-V 30 w(SMST)p 349 2686 V 30 w(DATA)229 b Fn(D)n(A)-7
-b(T)g(A)28 b(command)50 2786 y Fm(PM)p 143 2786 V 30
-w(SMST)p 349 2786 V 30 w(DOT)273 b Fn(Final)27 b(dot)h(of)g(mail)f(b)r
-(o)r(dy)0 2935 y(A)f(sequence)f(of)h(up)g(to)g Fm(PM)p
-834 2935 V 31 w(MAX)p 997 2935 V 30 w(MACROS)d Fn(macros)h(can)i(b)r(e)
-g(requested)f(whic)n(h)h(m)n(ust)g(end)g(with)g Fm(PMM)p
-3140 2935 V 30 w(END)p Fn(.)f(V)-7 b(alid)26 b(v)-5 b(alues)0
-3035 y(are:)101 3271 y(1.)42 b Fm(PMM)p 345 3271 V 30
-w(SRVHOSTNAME)23 b Fn(hostname)k(of)g(SMTP)h(serv)n(er.)101
-3437 y(2.)42 b Fm(PMM)p 345 3437 V 30 w(SEID)26 b Fn(session)g(id.)101
-3603 y(3.)42 b Fm(PMM)p 345 3603 V 30 w(CLIENT)p 639
-3603 V 29 w(RESOLVE)24 b Fn(result)k(of)f(clien)n(t)h(lo)r(okups.)101
-3769 y(4.)42 b Fm(PMM)p 345 3769 V 30 w(MAIL)p 551 3769
-V 29 w(TAID)26 b Fn(transaction)h(id.)101 3935 y(5.)42
-b Fm(PMM)p 345 3935 V 30 w(DOT)p 507 3935 V 30 w(MSGID)25
-b Fn(Message-Id.)101 4101 y(6.)42 b Fm(PMM)p 345 4101
-V 30 w(TLS)p 507 4101 V 30 w(VERSION)25 b Fn(TLS/SSL)i(v)n(ersion)f
-(used.)101 4267 y(7.)42 b Fm(PMM)p 345 4267 V 30 w(TLS)p
-507 4267 V 30 w(CIPHER)p 801 4267 V 29 w(SUITE)25 b Fn(cipher)j(suite)f
-(used.)101 4433 y(8.)42 b Fm(PMM)p 345 4433 V 30 w(TLS)p
-507 4433 V 30 w(CIPHER)p 801 4433 V 29 w(BITS)26 b Fn(e\013ectiv)n(e)h
-(k)n(ey)g(length)h(of)f(the)h(symmetric)g(encryption)f(algorithm.)101
-4599 y(9.)42 b Fm(PMM)p 345 4599 V 30 w(TLS)p 507 4599
-V 30 w(ALG)p 669 4599 V 30 w(BITS)27 b Fn(maxim)n(um)i(k)n(ey)f(length)
-h(of)g(the)h(symmetric)e(encryption)h(algorithm.)40 b(This)28
-b(ma)n(y)h(b)r(e)g(less)208 4699 y(than)e(the)h(e\013ectiv)n(e)g(k)n
-(ey)f(length)g(for)g Fd(exp)l(ort)j(c)l(ontr)l(ol)t(le)l(d)f
-Fn(algorithms.)60 4865 y(10.)41 b Fm(PMM)p 345 4865 V
-30 w(TLS)p 507 4865 V 30 w(VRFY)26 b Fn(the)i(result)f(of)h(the)g(v)n
-(eri\014cation)e(of)h(the)h(presen)n(ted)f(cert.)60 5031
-y(11.)41 b Fm(PMM)p 345 5031 V 30 w(TLS)p 507 5031 V
-30 w(CERT)p 713 5031 V 30 w(SUBJECT)24 b Fn(the)k(DN)h(\(distinguished)
-f(name\))f(of)h(the)g(presen)n(ted)f(certi\014cate.)60
-5197 y(12.)41 b Fm(PMM)p 345 5197 V 30 w(TLS)p 507 5197
-V 30 w(CERT)p 713 5197 V 30 w(ISSUER)32 b Fn(the)k(DN)f
-(\(distinguished)h(name\))f(of)g(the)g(CA)g(\(certifcate)g(authorit)n
-(y\))g(that)g(signed)208 5297 y(the)28 b(presen)n(ted)f(certi\014cate)g
-(\(the)h(cert)f(issuer\).)60 5463 y(13.)41 b Fm(PMM)p
-345 5463 V 30 w(TLS)p 507 5463 V 30 w(CN)p 625 5463 V
-30 w(SUBJECT)25 b Fn(the)j(CN)g(\(common)f(name\))h(of)g(the)g(presen)n
-(ted)f(certi\014cate.)1848 5768 y(54)p eop end
-%%Page: 55 56
-TeXDict begin 55 55 bop 60 523 a Fn(14.)41 b Fm(PMM)p
-345 523 27 4 v 30 w(TLS)p 507 523 V 30 w(CN)p 625 523
-V 30 w(ISSUER)26 b Fn(the)i(CN)f(\(common)h(name\))g(of)f(the)h(CA)g
-(that)g(signed)f(the)h(presen)n(ted)f(certi\014cate.)60
-684 y(15.)41 b Fm(PMM)p 345 684 V 30 w(AUTH)p 551 684
-V 29 w(TYPE)26 b Fn(the)i(A)n(UTH)h(mec)n(hanism)e(used.)60
-845 y(16.)41 b Fm(PMM)p 345 845 V 30 w(AUTH)p 551 845
-V 29 w(AUTHEN)26 b Fn(the)i(clien)n(t's)f(authen)n(tication)g(creden)n
-(tials)g(as)g(determined)g(b)n(y)h(authen)n(tication.)60
-1006 y(17.)41 b Fm(PMM)p 345 1006 V 30 w(AUTH)p 551 1006
-V 29 w(AUTHOR)34 b Fn(The)h(authorization)g(iden)n(tit)n(y)-7
-b(,)37 b(i.e.)61 b(the)36 b Fm(AUTH=)e Fn(parameter)g(of)i(the)g
-Fm(MAIL)e Fn(command)h(if)208 1106 y(supplied.)0 1329
-y(Notes:)125 1539 y Fc(\017)41 b Fm(PMM)p 345 1539 V
-30 w(MAIL)p 551 1539 V 29 w(TAID)22 b Fn(cannot)g(b)r(e)h(requested)f
-(b)r(efore)g Fm(PM)p 1852 1539 V 31 w(SMST)p 2059 1539
-V 30 w(MAIL)f Fn(and)h Fm(PMM)p 2574 1539 V 31 w(DOT)p
-2737 1539 V 30 w(MSGID)e Fn(can)j(only)f(b)r(e)h(requested)208
-1638 y(at)k(stage)g Fm(PM)p 615 1638 V 30 w(SMST)p 821
-1638 V 30 w(DOT)p Fn(.)125 1799 y Fc(\017)41 b Fn(All)28
-b(macros)e(b)r(eginning)h(with)h Fm(PMM)p 1332 1799 V
-30 w(TLS)f Fn(are)f(only)i(v)-5 b(alid)27 b(after)h(a)f
-Fm(STARTTLS)d Fn(command.)0 2009 y(T)-7 b(o)27 b(retriev)n(e)f(the)i(v)
--5 b(alue)28 b(of)f(a)h(sym)n(b)r(ol)f(the)h(function)0
-2162 y Fm(sm)p 93 2162 V 31 w(pmfi)p 300 2162 V 29 w(getmac\(pmse)p
-813 2162 V 27 w(ctx)p 972 2162 V 30 w(P)43 b(pmse)p 1265
-2162 V 30 w(ctx,)f(uint32)p 1777 2162 V 29 w(t)h(macro,)e(char)h
-(**pvalue\))0 2315 y Fn(can)23 b(b)r(e)h(used)f(in)g(the)h(v)-5
-b(arious)22 b(callbac)n(k)g(functions)h(of)h(the)f(ESMTP)g(dialogue.)34
-b(If)24 b(the)g(macro)e(w)n(as)g(not)h(in)h(the)f(request)0
-2415 y(list,)29 b(an)f(error)f(will)i(b)r(e)g(returned.)39
-b(If)29 b(the)g(macro)e(has)h(not)h(y)n(et)f(b)r(een)h(receiv)n(ed,)f
-Fm(*pvalue)e Fn(will)i(b)r(e)h Fm(NULL)p Fn(.)e(Otherwise)0
-2514 y Fm(*pvalue)k Fn(will)j(p)r(oin)n(t)f(to)h(the)g(v)-5
-b(alue)33 b(of)h(the)g(macro.)54 b(Note:)49 b(the)34
-b(string)f(to)g(whic)n(h)h Fm(*pvalue)d Fn(p)r(oin)n(ts)i(m)n(ust)h
-Fd(not)f Fn(b)r(e)0 2614 y(c)n(hanged.)0 2898 y Fj(5.2.7)112
-b(Sender)39 b(Mo)s(di\014cation)0 3105 y Fn(The)28 b(sender)f(address)f
-(\()p Fm(MAIL)p Fn(\))h(can)g(b)r(e)h(replaced:)0 3258
-y Fm(sm)p 93 3258 V 31 w(ret)p 256 3258 V 30 w(T)43 b(sm)p
-461 3258 V 30 w(pmfi)p 667 3258 V 30 w(mail)p 873 3258
-V 30 w(rplc\(pmse)p 1299 3258 V 28 w(ctx)p 1459 3258
-V 30 w(P)g(pmse)p 1752 3258 V 30 w(ctx,)f(const)f(char)h(*mail)p
-2699 3258 V 29 w(pa,)h(char)f(**argv\))0 3411 y Fn(This)22
-b(function)h(m)n(ust)g(only)e(b)r(e)i(called)f(during)g
-Fm(pmfi)p 1658 3411 V 30 w(eom\(\))p Fn(.)33 b(The)22
-b(address)f Fm(mail)p 2596 3411 V 30 w(pa)h Fn(m)n(ust)g(b)r(e)h(in)f
-(RF)n(C)h(2821)d(format.)0 3511 y(The)34 b(argumen)n(t)e
-Fm(argv)g Fn(can)i(b)r(e)g(used)f(to)h(sp)r(ecify)g(SMTP)f(parameters)f
-(for)h(the)i(sender)e(address,)h(ho)n(w)n(ev)n(er,)f(this)h(is)0
-3610 y(curren)n(tly)27 b(not)g(implemen)n(ted,)h(hence)g(it)g(m)n(ust)g
-(b)r(e)g(set)f(to)h Fm(NULL)e Fn(for)h(no)n(w.)0 3894
-y Fj(5.2.8)112 b(Recipien)m(t)38 b(Mo)s(di\014cations)0
-4101 y Fn(Recipien)n(ts)28 b(can)f(b)r(e)h(added:)0 4254
-y Fm(sm)p 93 4254 V 31 w(ret)p 256 4254 V 30 w(T)43 b(sm)p
-461 4254 V 30 w(pmfi)p 667 4254 V 30 w(rcpt)p 873 4254
-V 30 w(add\(pmse)p 1255 4254 V 28 w(ctx)p 1415 4254 V
-30 w(P)g(pmse)p 1708 4254 V 30 w(ctx,)f(const)f(char)h(*rcpt)p
-2655 4254 V 30 w(pa,)g(char)g(**argv\))0 4408 y Fn(or)27
-b(deleted:)0 4561 y Fm(sm)p 93 4561 V 31 w(ret)p 256
-4561 V 30 w(T)43 b(sm)p 461 4561 V 30 w(pmfi)p 667 4561
-V 30 w(rcpt)p 873 4561 V 30 w(del\(pmse)p 1255 4561 V
-28 w(ctx)p 1415 4561 V 30 w(P)g(pmse)p 1708 4561 V 30
-w(ctx,)f(const)f(char)h(*rcpt)p 2655 4561 V 30 w(pa,)g(rcpt)p
-3035 4561 V 30 w(idx)p 3197 4561 V 30 w(T)h(rcpt)p 3490
-4561 V 30 w(idx\))0 4714 y Fn(These)31 b(functions)g(m)n(ust)g(only)g
-(b)r(e)g(called)g(during)g Fm(pmfi)p 1803 4714 V 29 w(eom\(\))p
-Fn(.)46 b(The)31 b(addresses)e Fm(rcpt)p 2840 4714 V
-30 w(pa)h Fn(m)n(ust)i(b)r(e)f(in)g(RF)n(C)g(2821)0 4814
-y(format.)k(The)26 b(argumen)n(t)d Fm(argv)h Fn(can)g(b)r(e)i(used)f
-(to)g(sp)r(ecify)g(SMTP)g(parameters)e(for)h(the)i(recipien)n(t)e
-(address,)h(ho)n(w)n(ev)n(er,)0 4913 y(this)30 b(is)f(curren)n(tly)g
-(not)h(implemen)n(ted,)h(hence)e(it)h(m)n(ust)g(b)r(e)g(set)g(to)f
-Fm(NULL)f Fn(for)h(no)n(w.)43 b(As)29 b(the)h(MT)-7 b(A)30
-b(do)r(es)g(not)f(remo)n(v)n(e)0 5013 y(iden)n(tical)h(recipien)n(t)g
-(addresses,)g(the)h(address)e(itself)i(is)f(not)h(su\016cien)n(t)f(to)g
-(iden)n(tify)h(one)f Fm(RCPT)p Fn(,)f(but)i(its)g(index)f(m)n(ust)0
-5113 y(b)r(e)e(sp)r(eci\014ed)g(to)r(o.)36 b(This)28
-b(index)g(can)f(b)r(e)h(retriev)n(ed)e(during)h(a)h Fm(RCPT)e
-Fn(command)h(\()p Fm(pmfi)p 2776 5113 V 30 w(rcpt\(\))p
-Fn(\))e(using)0 5266 y Fm(sm)p 93 5266 V 31 w(ret)p 256
-5266 V 30 w(T)43 b(sm)p 461 5266 V 30 w(pmfi)p 667 5266
-V 30 w(getrcpt)p 1005 5266 V 29 w(idx\(pmse)p 1386 5266
-V 28 w(ctx)p 1546 5266 V 30 w(P)g(pmse)p 1839 5266 V
-30 w(ctx,)f(rcpt)p 2263 5266 V 29 w(idx)p 2424 5266 V
-31 w(T)h(*prcpt)p 2806 5266 V 29 w(idx\))0 5419 y Fn(Note:)32
-b(it)19 b(is)f(in)n(v)-5 b(alid)19 b(to)f(remo)n(v)n(e)f(all)h
-(recipien)n(ts)f(of)i(a)f(transaction.)32 b(T)-7 b(o)18
-b(discard)g(a)g(transaction,)g(return)g Fm(SMTP)p 3405
-5419 V 30 w(R)p 3479 5419 V 31 w(DISCARD)0 5519 y Fn(as)27
-b(a)g(result)g(of)h(one)f(of)h(the)g(transaction)e(orien)n(ted)h
-(callbac)n(ks,)f(e.g.,)h Fm(pmfi)p 2372 5519 V 30 w(eom\(\))p
-Fn(.)1848 5768 y(55)p eop end
-%%Page: 56 57
-TeXDict begin 56 56 bop 0 523 a Fj(5.2.9)112 b(Header)38
-b(Mo)s(di\014cations)0 730 y Fn(T)-7 b(o)27 b(request)g(mo)r
-(di\014cations)g(of)h(the)g(header)f(of)g(a)g(mail)h(b)r(eing)g(sen)n
-(t,)f(the)h(function)0 883 y Fm(sm)p 93 883 27 4 v 31
-w(pmfi)p 300 883 V 29 w(hdr)p 461 883 V 30 w(mod\(pmse)p
-843 883 V 28 w(ctx)p 1003 883 V 31 w(P)43 b(pmse)p 1297
-883 V 30 w(ctx,)e(uint)h(type,)g(uint)g(pos,)g(const)f(unsigned)g(char)
-g(*header\))0 1036 y Fn(can)g(b)r(e)i(used.)79 b(This)42
-b(function)h(m)n(ust)f(only)f(b)r(e)h(called)g(during)f
-Fm(pmfi)p 2353 1036 V 30 w(eom\(\))p Fn(.)78 b(The)42
-b(argumen)n(t)e Fm(type)h Fn(sp)r(eci\014es)0 1136 y(whic)n(h)h(kind)h
-(of)f(mo)r(di\014cation)h(is)f(requested,)j(legitimate)e(v)-5
-b(alues)42 b(are)f(de\014ned)i(in)g Fm(include/sm/hdrm)o(odd)o(ef)o(.h)
-o Fn(;)0 1236 y(these)24 b(are:)34 b Fm(SM)p 471 1236
-V 31 w(HDRMOD)p 766 1236 V 29 w(T)p 839 1236 V 31 w(PREPEND)p
-Fn(,)21 b Fm(SM)p 1310 1236 V 30 w(HDRMOD)p 1604 1236
-V 29 w(T)p 1677 1236 V 31 w(INSERT)p Fn(,)h Fm(SM)p 2105
-1236 V 31 w(HDRMOD)p 2400 1236 V 28 w(T)p 2472 1236 V
-31 w(REPLACE)p Fn(,)g Fm(SM)p 2944 1236 V 30 w(HDRMOD)p
-3238 1236 V 29 w(T)p 3311 1236 V 31 w(REMOVE)p Fn(,)g(and)0
-1335 y Fm(SM)p 93 1335 V 31 w(HDRMOD)p 388 1335 V 28
-w(T)p 460 1335 V 31 w(APPEND)p Fn(.)0 1489 y(The)f(argumen)n(t)e
-Fm(header)g Fn(m)n(ust)i(b)r(e)g(a)f(complete)h(header)f(line)g
-(including)h(the)g(prop)r(er)f(line)h(ending)g(\(CRLF\).)g(The)g(argu-)
-0 1588 y(men)n(t)e Fm(pos)e Fn(sp)r(eci\014es)h(the)h(p)r(osition)f
-(for)g(the)h(t)n(yp)r(es)f Fm(SM)p 1658 1588 V 31 w(HDRMOD)p
-1953 1588 V 28 w(T)p 2025 1588 V 31 w(INSERT)p Fn(,)e
-Fm(SM)p 2447 1588 V 31 w(HDRMOD)p 2742 1588 V 29 w(T)p
-2815 1588 V 31 w(REPLACE)p Fn(,)f(and)k Fm(SM)p 3433
-1588 V 30 w(HDRMOD)p 3727 1588 V 29 w(T)p 3800 1588 V
-31 w(REMOVE)p Fn(.)0 1688 y(The)26 b(\014rst)f(header)g(of)h(the)g
-(original)e(mail)i(has)f(p)r(osition)g(one;)h(zero)f(is)h(the)g
-Fm(Received:)32 b Fn(header)25 b(added)g(b)n(y)h(the)g(SMTP)0
-1787 y(serv)n(er.)0 2073 y Fj(5.2.10)113 b(Message)38
-b(Replacemen)m(t)0 2280 y Fn(If)19 b(a)f(pmilter)g(w)n(an)n(ts)g(to)g
-(replace)f(the)i(en)n(tire)f(message,)h(the)g(function)g
-Fm(pmfi)p 2330 2280 V 29 w(eom\(\))e Fn(m)n(ust)h(return)g(the)h(v)-5
-b(alue)18 b Fm(SMTP)p 3552 2280 V 30 w(R)p 3626 2280
-V 31 w(RPLCMSG)p Fn(.)0 2380 y(This)28 b(will)f(cause)g(the)h(in)n(v)n
-(o)r(cation)e(of)i(the)g(callbac)n(k)0 2533 y Fm(sfsistat)p
-357 2533 V 28 w(T)43 b(pmfi)p 648 2533 V 30 w(msg)p 810
-2533 V 30 w(rplc\(pmse)p 1236 2533 V 28 w(ctx)p 1396
-2533 V 30 w(P)g(pmse)p 1689 2533 V 30 w(ctx,)f(const)f(unsigned)g(char)
-g(**pmsgchunk,)e(size)p 3551 2533 V 30 w(t)k(*pmsglen\))0
-2686 y Fn(whic)n(h)20 b(then)h(m)n(ust)g(set)f(a)g(p)r(oin)n(ter)g(to)g
-(a)g(message)f(c)n(h)n(unk)h(and)g(its)g(length.)35 b(Multiple)21
-b(c)n(h)n(unks)f(can)f(b)r(e)i(sen)n(t)f(b)n(y)g(returning)0
-2786 y Fm(SMTP)p 181 2786 V 30 w(R)p 255 2786 V 31 w(CONT)i
-Fn(as)h(result)g(of)g(the)h(callbac)n(k.)35 b(F)-7 b(or)23
-b(the)h(last)f(c)n(h)n(unk,)h Fm(SMTP)p 2263 2786 V 30
-w(R)p 2337 2786 V 31 w(OK)e Fn(should)i(b)r(e)g(returned.)35
-b(The)24 b(size)f(of)g(eac)n(h)0 2886 y(c)n(h)n(unk)k(\()p
-Fm(pmsglen)p Fn(\))e(m)n(ust)j(b)r(e)g(less)f(than)h
-Fm(PMILTER)p 1618 2886 V 29 w(CHUNK)p 1867 2886 V 29
-w(SIZE)e Fn(as)h(de\014ned)h(in)g Fm(include/sm/pmfa)o(pi.)o(h)p
-Fn(.)0 3039 y(libpmilter)g(will)g(thereafter)f(in)n(v)n(ok)n(e)f(the)i
-(callbac)n(k)0 3192 y Fm(sfsistat)p 357 3192 V 28 w(T)43
-b(pmfi)p 648 3192 V 30 w(msg)p 810 3192 V 30 w(rplc)p
-1016 3192 V 30 w(stat\(pmse)p 1442 3192 V 27 w(ctx)p
-1601 3192 V 31 w(P)g(pmse)p 1895 3192 V 30 w(ctx,)e(sm)p
-2230 3192 V 31 w(ret)p 2393 3192 V 30 w(T)i(status\))0
-3345 y Fn(to)31 b(giv)n(e)f(the)i(pmilter)f(a)g(c)n(hance)f(to)h(clean)
-g(up)h(after)f(the)g(transaction,)g(and)g(to)g(let)g(it)h(kno)n(w)e
-(whether)h(the)h(message)0 3445 y(replacemen)n(t)27 b(w)n(as)f
-(successful.)0 3598 y(Notes:)125 3818 y Fc(\017)41 b
-Fn(as)34 b(the)i(en)n(tire)f(message)f(is)i(replaced)e(and)h(b)n(y)h
-(default)g(only)f(the)g(data)g(that)h(is)g(receiv)n(ed)e(from)h(the)h
-(SMTP)208 3918 y(clien)n(t)25 b(is)g(sen)n(t)g(to)h(a)f(pmilter,)h(the)
-f Fm(Received:)32 b Fn(header)25 b(\014eld)g(that)h(sm)n(tps)f
-(generates)f(is)h(lost.)36 b(T)-7 b(o)25 b(a)n(v)n(oid)f(this,)i(a)208
-4017 y(pmilter)j(can)g(request)g(to)g(receiv)n(e)f(that)i(header)e
-(\014eld)i(b)n(y)f(setting)g Fm(SM)p 2439 4017 V 31 w(SCAP)p
-2646 4017 V 30 w(PM)p 2764 4017 V 30 w(SND)p 2926 4017
-V 30 w(RCVD)f Fn(and)h(sending)g(it)h(as)208 4117 y(\014rst)d(c)n(h)n
-(unk)g(of)h(the)g(message)e(replacemen)n(t.)125 4283
-y Fc(\017)41 b Fn(the)34 b(message)e(m)n(ust)i(b)r(e)g(in)g(SMTP)f
-(format,)i(i.e.,)h(lines)d(m)n(ust)h(end)g(in)g(CRLF)g(and)g(the)g
-(\014nal)g(c)n(h)n(unk)f(should)208 4382 y(ha)n(v)n(e)d(the)h(usual)g
-(SMTP)h(end)f(of)g(message)f(indication:)45 b(CRLF)31
-b(dot)g(CRLF)h(\()p Fc(n)p Fm(r)p Fc(n)p Fm(n.)p Fc(n)p
-Fm(r)p Fc(n)p Fm(n)p Fn(\),)d(ho)n(w)n(ev)n(er,)h(it)i(can)208
-4482 y(also)26 b(just)i(end)g(in)g(CRLF.)125 4648 y Fc(\017)41
-b Fn(if)30 b Fm(pmfi)p 467 4648 V 30 w(msg)p 629 4648
-V 30 w(rplc\(\))d Fn(encoun)n(ters)i(an)g(error,)g(e.g.,)h(due)g(to)f
-(an)h(API)g(violation)e(or)h(due)h(to)g(a)f(comm)n(unication)208
-4748 y(error)24 b(with)k(sm)n(tps,)f(then)g(it)g(will)g(in)n(v)n(ok)n
-(e)f Fm(pmfi)p 1723 4748 V 29 w(msg)p 1884 4748 V 30
-w(rplc)p 2090 4748 V 30 w(stat\(\))f Fn(directly)h(without)h(w)n
-(aiting)g(for)f(the)h(en)n(tire)208 4847 y(message)f(ev)n(en)h(if)h(it)
-g(consists)f(of)g(more)g(c)n(h)n(unks.)0 5133 y Fj(5.2.11)113
-b(F)-9 b(urther)37 b(Capabilities)0 5340 y Fn(In)32 b(addition)g(to)g
-(selecting)f(whic)n(h)h(SMTP)f(commands)h(to)f(send)h(to)g(pmilter)g
-(\(see)g(Section)g(5.2.3\),)g(there)f(are)g(some)0 5440
-y(more)c(capabilities)g(a)n(v)-5 b(ailable:)1848 5768
-y(56)p eop end
-%%Page: 57 58
-TeXDict begin 57 57 bop 101 523 a Fn(1.)42 b Fm(SM)p
-301 523 27 4 v 30 w(SCAP)p 507 523 V 30 w(PM)p 625 523
-V 30 w(RCPT)p 831 523 V 30 w(ST)c Fn(causes)g(the)h(MT)-7
-b(A)40 b(to)e(send)h Fm(RCPT)e Fn(information)i(ev)n(en)f(if)h(the)g
-(command)g(has)f(b)r(een)208 623 y(rejected,)28 b(e.g.,)g(b)r(ecause)g
-(the)h(recipien)n(t)f(is)h(unkno)n(wn,)f(the)h(recipien)n(t)f(has)f(b)r
-(een)i(rejected)g(due)f(to)h(access)e(map)208 722 y(c)n(hec)n(ks,)36
-b(or)e(rela)n(ying)f(has)i(b)r(een)g(denied.)60 b(Note:)52
-b Fm(RCPT)34 b Fn(commands)g(that)i(are)e(rejected)h(for)g(other)f
-(reasons,)208 822 y(e.g.,)28 b(b)r(ecause)f(the)i(address)e(is)h(syn)n
-(tactically)f(in)n(v)-5 b(alid,)28 b(or)g(some)f(limit)i(\(maxim)n(um)g
-(n)n(um)n(b)r(er)f(of)g(recipien)n(ts\))g(is)208 922
-y(exceeded,)f(will)h(not)f(b)r(e)h(sen)n(t)g(to)f(pmilter.)208
-1051 y(The)g(function)208 1180 y Fm(sm)p 301 1180 V 30
-w(ret)p 463 1180 V 30 w(T)43 b(sm)p 668 1180 V 31 w(pmfi)p
-875 1180 V 30 w(getstatus\(pmse)p 1521 1180 V 25 w(ctx)p
-1678 1180 V 30 w(P)h(pmse)p 1972 1180 V 29 w(ctx,)e(sfsistat)p
-2571 1180 V 28 w(T)i(*pstatus\))208 1309 y Fn(should)30
-b(b)r(e)h(used)f(in)h(that)g(case)e(to)i(access)e(the)i(curren)n(t)e
-(SMTP)i(reply)f(co)r(de)g(for)g(the)h(command.)45 b(This)30
-b(func-)208 1408 y(tionalit)n(y)e(is)h(useful)h(for)f(a)g(pmilter)g
-(that)h(w)n(an)n(ts)e(to)h(k)n(eep)g(trac)n(k)f(of)h(all)g(recipien)n
-(ts,)g(not)h(just)f(those)g(whic)n(h)h(are)208 1508 y(accepted,)d
-(e.g.,)g(to)h(deal)f(with)h(dictionary)f(attac)n(ks.)101
-1667 y(2.)42 b Fm(SM)p 301 1667 V 30 w(SCAP)p 507 1667
-V 30 w(PM)p 625 1667 V 30 w(MSG)p 787 1667 V 31 w(RC)27
-b Fn(allo)n(ws)f(a)h(pmilter)h(to)g(return)f(a)g(reply)h(co)r(de)f(as)g
-(sp)r(eci\014ed)h(in)g(5.2.13)e(from)i Fm(pmfi)p 3514
-1667 V 30 w(msg\(\))p Fn(.)208 1766 y(This)k(is)h(useful)h(if)f(a)g
-(pmilter)g(can)f(mak)n(e)h(a)f(decision)g(ab)r(out)h(the)h(mail)f
-(without)g(ha)n(ving)f(to)h(read)f(the)h(en)n(tire)208
-1866 y(message.)55 b(If)35 b(this)g(capabilit)n(y)f(is)g(turned)g(on,)i
-Fm(pmfi)p 1920 1866 V 30 w(msg\(\))d Fn(m)n(ust)h(return)g
-Fm(SMTP)p 2852 1866 V 30 w(R)p 2926 1866 V 31 w(CONT)f
-Fn(for)g(eac)n(h)h(message)208 1966 y(c)n(h)n(unk)h(b)n(y)g(default)h
-(to)f(receiv)n(e)g(subsequen)n(t)g(parts.)60 b(Otherwise)34
-b Fm(pmfi)p 2541 1966 V 30 w(eom\(\))g Fn(will)h(not)h(b)r(e)g(called)f
-(but)h(the)208 2065 y(return)26 b(co)r(de)h(from)g Fm(pmfi)p
-1029 2065 V 30 w(msg\(\))e Fn(will)i(b)r(e)h(used)f(at)g(the)h(end)f
-(of)g(the)h(message)e(\(in)h(resp)r(onse)g(to)g(the)g(\014nal)g(dot\).)
-0 2348 y Fj(5.2.12)113 b(Miscellaneous)39 b(F)-9 b(unctions)0
-2555 y Fn(T)i(o)24 b(set)g(a)g(reply)g(text)h(in)g(an)f(SMTP)g(session)
-f(or)h(transaction)f(orien)n(ted)h(callbac)n(k)f(in)h(addition)h(to)f
-(the)h(reply)e(co)r(de)i(use:)0 2708 y Fm(sm)p 93 2708
-V 31 w(ret)p 256 2708 V 30 w(T)43 b(sm)p 461 2708 V 30
-w(pmfi)p 667 2708 V 30 w(setreply\(pmse)p 1269 2708 V
-26 w(ctx)p 1427 2708 V 30 w(P)g(pmse)p 1720 2708 V 30
-w(ctx,)f(const)g(char)g(*reply\))0 2861 y Fn(Note:)37
-b(the)28 b(reply)f(string)g Fd(must)g Fn(con)n(tain)f(the)i(full)h
-(SMTP)e(reply)-7 b(,)27 b(i.e.,)h(it)g(m)n(ust)g(b)r(e)g(of)f(the)h
-(form)0 3015 y Fm(XYZ)42 b(D.S.N)g(text)p Fc(n)p Fm(r)p
-Fc(n)p Fm(n)0 3168 y Fn(where)27 b Fm(XYZ)f Fn(is)h(a)g(v)-5
-b(alid)28 b(SMTP)f(reply)g(co)r(de)g(\(see)g(RF)n(C)h(2821)d([Kle01)o
-(]\))j(whic)n(h)f Fd(must)g Fn(matc)n(h)g(the)h(return)f(co)r(de)g(of)g
-(the)0 3267 y(function)g(from)g(whic)n(h)f Fm(sm)p 849
-3267 V 31 w(pmfi)p 1056 3267 V 30 w(setreply\(\))c Fn(is)27
-b(called,)g Fm(D.S.N)e Fn(is)h(an)h(enhanced)f(status)h(co)r(de)f(as)g
-(de\014ned)i(in)f(RF)n(C)0 3367 y(3463)32 b([V)-7 b(au03)o(])34
-b(and)g(the)h(rest)e(is)h(an)g(explanation)f(of)h(the)g(status)g
-(including)g(CRLF)h(\()p Fc(n)p Fm(r)p Fc(n)p Fm(n)p
-Fn(\).)55 b(The)34 b(text)g(can)g(b)r(e)g(a)0 3467 y(m)n(ulti-line)28
-b(reply)f(in)h(the)g(form:)0 3684 y Fm(XYZ-D.S.N)40 b(text1)0
-3784 y(XYZ-D.S.N)g(text2)0 3884 y(XYZ)i(D.S.N)g(text3)0
-4101 y Fn(whic)n(h)28 b(m)n(ust)f(b)r(e)h(sp)r(eci\014ed)g(in)g(the)g
-(format)f(required)g(b)n(y)g(SMTP:)0 4254 y Fm(XYZ-D.S.N)40
-b(text1)p Fc(n)p Fm(r)p Fc(n)p Fm(nXYZ-D.S)o(.N)d(text2)p
-Fc(n)p Fm(r)p Fc(n)p Fm(nXYZ)h(D.S.N)k(text3)p Fc(n)p
-Fm(r)p Fc(n)p Fm(n)0 4408 y Fn(T)-7 b(o)27 b(set)h(reply)f(co)r(des)g
-(for)g(commands)g(that)h(need)g(m)n(ultiple)g(reply)f(v)-5
-b(alues)27 b(the)h(function:)0 4561 y Fm(sm)p 93 4561
-V 31 w(ret)p 256 4561 V 30 w(T)43 b(sm)p 461 4561 V 30
-w(pmfi)p 667 4561 V 30 w(setreplies\(pmse)p 1357 4561
-V 25 w(ctx)p 1514 4561 V 30 w(P)h(pmse)p 1808 4561 V
-29 w(ctx,)e(uint)g(nreplies,)e(int)i(*rcodes,)f(const)g(char)h
-(**rtexts\))0 4714 y Fn(m)n(ust)35 b(b)r(e)h(used.)60
-b(Curren)n(tly)34 b(this)h(function)h(mak)n(es)e(only)h(sense)g(if)h
-Fm(PRDR)d Fn(is)i(a)n(v)-5 b(ailable)34 b(in)i(the)f(SMTP)g(serv)n(er)f
-(and)0 4814 y(actually)e(used)h(b)n(y)g(the)h(clien)n(t.)53
-b(A)34 b(pmilter)f(can)g(determine)g(the)g(latter)g(b)n(y)g(parsing)e
-(the)j(argumen)n(ts)e(of)h(the)g Fm(MAIL)0 4913 y Fn(command)e(\(see)g
-Fm(pmfi)p 733 4913 V 30 w(mail\(\))p Fn(\).)45 b(Note:)f(curren)n(tly)
-30 b(the)i(argumen)n(t)e Fm(rtexts)f Fn(is)i(ignored,)g(only)g(the)g
-(arra)n(y)e(of)i(reply)0 5013 y(co)r(des)c(\()p Fm(rcodes)p
-Fn(\))e(is)i(used.)37 b(The)27 b(size)g(of)g(this)g(arra)n(y)e(m)n(ust)
-i(b)r(e)h Fm(nreplies)c Fn(whic)n(h)j(m)n(ust)g(matc)n(h)g(the)h(n)n
-(um)n(b)r(er)e(of)i(v)-5 b(alid)0 5113 y Fm(RCPT)p Fn(s)27
-b(for)h(this)h(transaction.)39 b(The)28 b(reply)g(co)r(des)h(in)g(that)
-f(arra)n(y)f(m)n(ust)i(b)r(e)g(in)g(the)g(same)f(order)f(in)i(whic)n(h)
-f(the)h Fm(RCPT)p Fn(s)0 5212 y(ha)n(v)n(e)d(b)r(een)i(receiv)n(ed.)0
-5366 y(Return)g(v)n(ersion)e(n)n(um)n(b)r(er)h(of)h(libpmilter:)0
-5519 y Fm(sm)p 93 5519 V 31 w(ret)p 256 5519 V 30 w(T)43
-b(sm)p 461 5519 V 30 w(pmfi)p 667 5519 V 30 w(version\(pmg)p
-1181 5519 V 27 w(ctx)p 1340 5519 V 30 w(P)g(pmg)p 1589
-5519 V 30 w(ctx,)f(uint32)p 2101 5519 V 29 w(t)h(*major,)e(uint32)p
-2830 5519 V 29 w(t)i(*minor,)e(uint32)p 3559 5519 V 29
-w(t)i(*patchlevel\))1848 5768 y Fn(57)p eop end
-%%Page: 58 59
-TeXDict begin 58 58 bop 0 523 a Fn(This)29 b(can)f(b)r(e)h(used)g(to)f
-(compare)f(the)j(v)n(ersion)d(n)n(um)n(b)r(er)h(of)h(the)g(library)e
-(against)h(whic)n(h)g(pmilter)h(is)g(link)n(ed)f(with)h(the)0
-623 y(v)n(ersion)j(n)n(um)n(b)r(er)h(against)f(whic)n(h)h(pmilter)g(is)
-h(compiled.)53 b(The)34 b(ma)5 b(jor)32 b(v)n(ersion)f(n)n(um)n(b)r
-(ers)i(m)n(ust)g(matc)n(h)h(otherwise)0 722 y(the)28
-b(program)e(will)h(not)h(run.)0 876 y(Signal)f(handler)g(callbac)n(k:)0
-1029 y Fm(sm)p 93 1029 27 4 v 31 w(ret)p 256 1029 V 30
-w(T)43 b(pmfi)p 549 1029 V 30 w(signal\(pmg)p 1019 1029
-V 27 w(ctx)p 1178 1029 V 30 w(P)g(pmg)p 1427 1029 V 30
-w(ctx,)f(int)h(sig\))0 1182 y Fn(This)35 b(function)h(will)g(b)r(e)f
-(called)g(when)g(a)g(USR1)h(or)e(USR2)h(signal)g(is)g(receiv)n(ed;)j
-(it)d(is)h(not)f(called)g(within)h(a)f(signal)0 1282
-y(handler,)27 b(i.e.,)h(the)g(co)r(de)f(do)r(es)h(not)f(ha)n(v)n(e)g
-(to)g(b)r(e)h(signal-safe.)35 b(Note:)i(this)28 b(is)g(not)f(y)n(et)g
-(implemen)n(ted.)0 1563 y Fj(5.2.13)113 b(Return)37 b(V)-9
-b(alues)0 1770 y Fn(SMTP)24 b(Session)g(and)g(transaction)f(orien)n
-(ted)h(functions)h(use)f Fm(sfsistat)p 2306 1770 V 28
-w(T)g Fn(as)g(return)g(t)n(yp)r(e.)36 b(Allo)n(w)n(ed)23
-b(v)-5 b(alues)24 b(for)g(this)0 1870 y(t)n(yp)r(e)k(are)e(\(as)i
-(de\014ned)g(in)f Fm(include/sm/smrepl)o(yco)o(de)o(s.h)o
-Fn(\):)125 2070 y Fc(\017)41 b Fm(SMTP)p 389 2070 V 29
-w(R)p 462 2070 V 31 w(OK)p Fn(:)27 b(accept)g(command.)125
-2226 y Fc(\017)41 b Fm(SMTP)p 389 2226 V 29 w(R)p 462
-2226 V 31 w(ACCEPT)p Fn(:)36 b(accept)j(en)n(tire)f(transaction)f(or)h
-(session)f(dep)r(ending)i(on)f(where)g(this)h(v)-5 b(alue)39
-b(is)f(returned.)208 2326 y(Note:)e(this)28 b(is)g(just)g(a)f(shortcut)
-g(for)g Fm(SMTP)p 1555 2326 V 30 w(R)p 1629 2326 V 31
-w(SET)p 1792 2326 V 30 w(QUICK\(SMTP)p 2262 2326 V 28
-w(R)p 2334 2326 V 31 w(OK\))p Fn(.)125 2482 y Fc(\017)41
-b Fm(SMTP)p 389 2482 V 29 w(R)p 462 2482 V 31 w(DISCARD)p
-Fn(:)25 b(discard)i(e\013ect)h(of)f(command.)125 2639
-y Fc(\017)41 b Fm(SMTP)p 389 2639 V 29 w(R)p 462 2639
-V 31 w(CONT)p Fn(:)26 b(con)n(tin)n(ue)h(other)g(c)n(hec)n(ks.)125
-2795 y Fc(\017)41 b Fm(SMTP)p 389 2795 V 29 w(R)p 462
-2795 V 31 w(SSD)p Fn(:)27 b(sh)n(ut)g(do)n(wn)g(SMTP)h(session.)125
-2951 y Fc(\017)41 b Fm(SMTP)p 389 2951 V 29 w(R)p 462
-2951 V 31 w(TEMP)p Fn(:)26 b(reject)i(command)f(with)h(a)f(temp)r
-(orary)g(error.)125 3107 y Fc(\017)41 b Fm(SMTP)p 389
-3107 V 29 w(R)p 462 3107 V 31 w(SYNTAX)p Fn(:)26 b(syn)n(tax)g(error.)
-125 3264 y Fc(\017)41 b Fm(SMTP)p 389 3264 V 29 w(R)p
-462 3264 V 31 w(PERM)p Fn(:)26 b(reject)i(command)f(with)h(a)f(p)r
-(ermanen)n(t)h(error.)125 3420 y Fc(\017)41 b Fn(other)27
-b(v)-5 b(alid)27 b(SMTP)h(reply)f(co)r(des)g([Kle01)n(].)0
-3620 y(Additionally)d(return)g(v)-5 b(alues)24 b(can)g(b)r(e)h(mo)r
-(di\014ed)f(b)n(y)g(using)g Fm(SMTP)p 2072 3620 V 30
-w(R)p 2146 3620 V 31 w(SET)p 2309 3620 V 30 w(QUICK\(returnvalu)o(e\))p
-Fn(.)29 b(See)c(Section)f(3.9.3)0 3720 y(for)j(the)h(e\013ects)g(of)f
-(this.)0 3873 y(F)-7 b(or)30 b(functions)i(that)f(use)g
-Fm(sm)p 937 3873 V 30 w(ret)p 1099 3873 V 30 w(T)g Fn(as)f(return)h(t)n
-(yp)r(e)g(a)f(successful)h(call)f(returns)h Fm(SM)p 2744
-3873 V 30 w(SUCCESS)d Fn(\(0\))j(and)g(a)g(negativ)n(e)0
-3973 y(v)-5 b(alue)27 b(in)h(case)f(of)h(an)f(error.)0
-4254 y Fj(5.2.14)113 b(Implemen)m(tation)38 b(Notes)0
-4461 y Fn(As)f Fm(libpmilter)c Fn(curren)n(tly)i(do)r(es)i(not)g(k)n
-(eep)f(trac)n(k)f(of)i(the)g(status)g(of)f(a)h(transaction)e(or)h
-(session,)i(the)f(functions)0 4561 y Fm(pmfi)p 181 4561
-V 30 w(abort\(\))21 b Fn(and)j Fm(pmfi)p 874 4561 V 30
-w(close\(\))d Fn(ma)n(y)i(b)r(e)i(called)f(ev)n(en)f(if)i(no)f
-(transaction)e(or)i(session)f(is)h(curren)n(tly)f(activ)n(e.)35
-b(This)0 4660 y(can)d(happ)r(en)h(if)g(an)g(SMTP)f(serv)n(er)f(unexp)r
-(ectedly)i(ab)r(orts)f(the)h(connection)f(to)h(a)f(p)r(olicy)h(milter.)
-52 b(An)33 b(application)0 4760 y(m)n(ust)28 b(b)r(e)g(a)n(w)n(are)d
-(of)j(this)g(and)f(k)n(eep)g(trac)n(k)g(of)g(its)h(state)f(prop)r(erly)
--7 b(.)0 5084 y Fk(5.3)135 b(P)l(olicy)46 b(Milter)g(Examples)0
-5320 y Fn(The)32 b(program)e Fm(libpmilter/examp)o(le)o(-pm)o(il)o(te)o
-(r-0)o(.c)25 b Fn(is)32 b(a)g(simple)g(example)f(ho)n(w)h(to)f(write)h
-(a)g(p)r(olicy)f(milter.)50 b(It)0 5419 y(migh)n(t)33
-b(b)r(e)h(useful)g(as)e(a)h(template)h(for)f(other)f(milters.)54
-b(F)-7 b(or)33 b(some)f(op)r(erating)h(systems)g(it)g(migh)n(t)g(b)r(e)
-h(necessary)e(to)0 5519 y(c)n(hange)26 b(the)i(list)g(of)g(system)f
-(include)h(\014les)g(\(see)f(also)g(Section)g(5.3.1\).)1848
-5768 y(58)p eop end
-%%Page: 59 60
-TeXDict begin 59 59 bop 0 523 a Fn(Also)34 b(a)n(v)-5
-b(ailable)32 b(is)i(a)g(p)r(olicy)g(milter)g Fm(contrib/milter-)o(spa)o
-(md)o(.c)28 b Fn(that)34 b(o\013ers)f(an)h(in)n(terface)f(to)h
-Fm(spamd\(1\))d Fn(whic)n(h)0 623 y(is)i(a)g(daemonized)g(v)n(ersion)f
-(of)h Fm(spamassassin\(1\))p Fn(.)48 b Fm(milter-spamd.c)28
-b Fn(is)33 b(written)h(b)n(y)f(Daniel)h(Hartmeier)e([Harc)o(])0
-722 y(\(see)d(the)h(\014le)f(itself)h(for)e(the)i(Cop)n(yrigh)n(t\))e
-(for)h(sendmail)g(8)f(and)h(mo)r(di\014ed)h(to)f(w)n(ork)f(with)i(the)f
-(p)r(olicy)g(milter)h(API)f(of)0 822 y(MeT)-7 b(A1.)0
-1108 y Fj(5.3.1)112 b(Compiling)39 b(P)m(olicy)e(Milters)0
-1315 y Fn(The)i(program)d Fm(libpmilter/exampl)o(e-)o(pm)o(ilt)o(er)o
-(-1.)o(c)c Fn(sho)n(ws)38 b(whic)n(h)g Fm(.h)g Fn(\014les)h(need)f(to)h
-(b)r(e)g(included)g(from)f(the)0 1414 y(MeT)-7 b(A1)34
-b(distribution:)49 b(those)34 b(are)f(referenced)g(as)g
-Fm("sm/)p Fd(name)p Fm(.h")p Fn(.)53 b(As)34 b(a)g(minim)n(um,)i(a)e
-(pmilter)g(also)f(needs)g(def-)0 1514 y(initions)41 b(for)g
-Fm(bool)f Fn(\(usually)h(a)n(v)-5 b(ailable)40 b(via)h
-Fm(stdbool.h)p Fn(\))d(and)j Fm(int16)p 2367 1514 27
-4 v 29 w(t)p Fn(,)k Fm(int32)p 2728 1514 V 29 w(t)p Fn(,)g
-Fm(uint16)p 3133 1514 V 28 w(t)p Fn(,)g(and)c Fm(uint32)p
-3712 1514 V 29 w(t)0 1614 y Fn(\(usually)e(a)n(v)-5 b(ailable)38
-b(via)h Fm(stdint.h)d Fn(or)j Fm(inttypes.h)p Fn(\).)68
-b(If)40 b(those)f(t)n(yp)r(e)g(de\014nitions)h(are)e(not)i(a)n(v)-5
-b(ailable,)41 b(the)e(\014le)0 1713 y Fm("sm/generic.h")e
-Fn(con)n(tains)k(default)i(de\014nitions)f(that)h(are)e(suitable)h(for)
-g(most)g(systems.)80 b(Those)42 b(can)g(b)r(e)g(ac-)0
-1813 y(tiv)-5 b(ated)38 b(via)g(the)g(compile)g(time)g(options)g
-Fm(META1_NEED_INTN)32 b Fn(and)37 b Fm(META1_NEED_BOOL)p
-Fn(,)32 b(resp)r(ectiv)n(ely)-7 b(.)67 b(The)38 b(\014le)0
-1913 y Fm(libpmilter/makef)o(ile)o(.p)o(mi)o(lte)o(r)14
-b Fn(is)20 b(an)g(example)f Fm(makefile)e Fn(\(for)j
-Fm(make\(1\))p Fn(\))e(that)i(w)n(orks)e(on)i(systems)g(lik)n(e)f
-(SunOS)0 2012 y(5.10.)45 b(It)31 b(can)f(b)r(e)h(easily)f(adapted)h(to)
-f(other)g(op)r(erating)g(systems;)i(it)f(sho)n(ws)f(the)h(list)g(of)f
-(libraries)g(that)h(are)e(needed)0 2112 y(from)e(the)h(MeT)-7
-b(A1)28 b(distribution.)1848 5768 y(59)p eop end
-%%Page: 60 61
-TeXDict begin 60 60 bop 0 1199 a Fl(Chapter)65 b(6)0
-1668 y Fp(Miscellaneous)0 2203 y Fk(6.1)135 b(T)-11 b(roublesho)t
-(oting)0 2439 y Fn(If)24 b(something)e(go)r(es)h(wrong)e(then)j(the)g
-(comp)r(onen)n(t)f(whic)n(h)g(fails)g(usually)f(logs)g(an)h(error)f
-(message.)33 b(Dep)r(ending)24 b(on)f(the)0 2538 y(con\014guration,)31
-b(an)h(error)e(is)h(either)h(logged)f(via)g Fm(syslog\(3\))d
-Fn(or)j(prin)n(ted)h(in)n(to)f(a)h(log\014le)f(\(as)g(explained)h(in)g
-(Section)0 2638 y(4.8\).)37 b(Note:)g(ev)n(en)28 b(if)g(the)g(system)g
-(is)f(con\014gured)g(to)h(use)f Fm(syslog\(3\))e Fn(\(Section)j(3.4,)f
-(item)h(1\))g(errors)d(at)j(startup)g(are)0 2738 y(prin)n(ted)j(to)h
-(the)g(log\014le)f(if)h(those)f(errors)e(o)r(ccur)i(b)r(efore)g(the)h
-(con\014guration)e(is)h(read,)h(hence)g(those)f(\014les)g(need)h(to)f
-(b)r(e)0 2837 y(c)n(hec)n(k)n(ed)26 b(to)r(o.)0 3123
-y Fj(6.1.1)112 b(Startup)38 b(Problems)0 3330 y Fn(If)28
-b(MeT)-7 b(A1)28 b(fails)g(to)f(start)g(prop)r(erly)g(the)h(reason)e
-(should)i(b)r(e)g(logged)f(as)g(explained)g(b)r(efore.)37
-b(Some)28 b(p)r(ossible)f(reasons)0 3430 y(are)101 3649
-y(1.)42 b(in)n(v)-5 b(alid)20 b(con\014guration)f(\014le:)34
-b(use)20 b Fm(misc/smconf)c Fn(to)21 b(c)n(hec)n(k)f(the)h(syn)n(tax)e
-(b)r(efore)i(deplo)n(ying)e(a)i(new)f(con\014guration)208
-3749 y(\014le.)101 3915 y(2.)42 b(wrong)26 b(p)r(ermissions:)36
-b(c)n(hec)n(k)27 b(the)h(p)r(ermissions)e(as)h(explained)g(in)h
-(Section)g(2.4:)208 4114 y Fm($)43 b(./misc/sm.check.)o(sh)101
-4314 y Fn(3.)f(missing)27 b(or)f(in)n(v)-5 b(alid)28
-b(maps:)36 b(mak)n(e)27 b(sure)g(maps)g(are)g(created)g(prop)r(erly)f
-(with)i Fm(createmap\(8\))p Fn(.)0 4600 y Fj(6.1.2)112
-b(Log\014le)39 b(En)m(tries)0 4806 y Fn(Most)24 b(log\014le)f(en)n
-(tries)g(should)h(b)r(e)g(self-explaining.)35 b(Ho)n(w)n(ev)n(er,)23
-b(some)g(are)g(more)g(subtle)h(and)g(indicate)g(only)g(indirectly)0
-4906 y(what)k(migh)n(t)f(b)r(e)h(wrong.)36 b(Example:)0
-5142 y Fm(smtps:)41 b(...)h(client_name=Hostn)o(ame)o(_N)o(ot_)o(De)o
-(te)o(rmi)o(ne)o(d)0 5379 y Fn(indicates)27 b(that)h(the)g(access)f
-(map)g(\(Section)h(3.10,)e(3b\))i(is)f(not)h(used)g(whic)n(h)f(migh)n
-(t)h(p)r(oin)n(t)f(to)h(a)f(miscon\014guration.)1848
-5768 y(60)p eop end
-%%Page: 61 62
-TeXDict begin 61 61 bop 0 523 a Fk(6.2)135 b(Ca)l(v)l(eats)0
-758 y Fn(The)28 b(follo)n(wing)e(problems)h(exist)h(in)f(this)h(v)n
-(ersion)e(of)i(MeT)-7 b(A1:)125 995 y Fc(\017)41 b Fn(If)32
-b(the)h(system)f(runs)g(out)g(of)h(memory)e(then)i(the)g(MT)-7
-b(A)32 b(ma)n(y)g(not)g(act)g(gracefully)g(in)g(all)g(cases,)h(see)f
-(Section)208 1094 y(4.10.1.)125 1260 y Fc(\017)41 b Fn(If)25
-b(a)f(disk)g(that)h(is)f(used)h(for)f(one)g(of)g(the)h(queues)f(b)r
-(ecomes)h(full,)h(some)d(errors)g(ma)n(y)h(not)g(b)r(e)h(handled)g
-(gracefully)-7 b(,)208 1360 y(see)32 b(Section)g(4.10.1.)50
-b(T)-7 b(o)32 b(a)n(v)n(oid)f(this,)j(MeT)-7 b(A1)32
-b(has)g(some)g(limits)h(for)f(the)h(amoun)n(t)f(of)g(a)n(v)-5
-b(ailable)31 b(disk)h(space)208 1460 y(that)27 b(is)h(required)f(to)g
-(accept)g(mail)h(\(see)f(Section)h(3.8\).)0 1788 y Fk(6.3)135
-b(Chec)l(ks)45 b(in)g(SMTP)f(Serv)l(er)0 2023 y Fn(The)28
-b(SMTP)f(serv)n(er)f(has)h(some)g(builtin)h(c)n(hec)n(ks)f(whic)n(h)g
-(are)g(explained)g(in)h(the)g(follo)n(wing.)0 2309 y
-Fj(6.3.1)112 b(Strict)37 b(RF)m(C)g(Compliance)0 2516
-y Fn(The)29 b(SMTP)g(serv)n(er)e(curren)n(tly)g(enforces)h(fairly)h
-(strict)f(RF)n(C)h(2821)e(compliance.)40 b(F)-7 b(or)28
-b(example,)h(a)g Fm(MAIL)e Fn(command)0 2616 y(m)n(ust)h(b)r(e)g(giv)n
-(en)e(in)i(the)g(follo)n(wing)f(format)0 2852 y Fm(MAIL)42
-b(From:<user@some.)o(do)o(mai)o(n>)0 3088 y Fn(i.e.,)27
-b(the)g(angle)f(brac)n(k)n(ets)f(are)h(required,)g(there)h(m)n(ust)g(b)
-r(e)g(no)g(space)f(after)g(":",)g(etc.)37 b(This)27 b(has)f(the)h
-(useful)g(side)g(e\013ect)0 3188 y(of)h(catc)n(hing)e(some)h(spam)h
-(programs:)0 3424 y Fm(5.5.0)42 b(Syntax)f(error.,)f(input=MAIL)g
-(FROM:)h(<blafwhoyqjywvu@a)o(si)o(a.c)o(om)o(>)0 3661
-y Fn(Moreo)n(v)n(er,)26 b(the)j(serv)n(er)d(requires)i(that)g(lines)h
-(end)f(in)h(CRLF)g(\()p Fc(n)p Fn(r)p Fc(n)p Fn(n\),)f(it)h(will)f(not)
-h(accept)f(command)g(input)h(without)0 3760 y(the)f(correct)e(line)i
-(ending,)g(i.e.,)f(trying)g(to)h(do)f(that)h(will)g(cause)f(a)g(read)g
-(error.)0 3913 y(Another)39 b(requiremen)n(t)g(is)g(that)g(MX)h
-(records)e Fd(must)g Fn(p)r(oin)n(t)i(to)f(hostnames,)j(not)d(IP)g
-(addresses)e([Mo)r(c87)o(].)73 b(This)0 4013 y(applies)35
-b(to)g(receiving)f(mail)h({)f(a)h Fm(MAIL)f Fn(address)g(using)g(a)h
-(domain)g(whose)f(MX)i(record)d(p)r(oin)n(ts)i(to)g(an)g(IP)g(address)0
-4113 y(will)e(b)r(e)g(rejected)g(\()p Fm(553)42 b(5.1.8)g(Sender)f
-(address)f(does)i(not)h(exist)p Fn(\))31 b({)h(as)g(w)n(ell)g(as)g(to)h
-(sending)f(mail)h({)f(a)g Fm(RCPT)0 4212 y Fn(address)26
-b(with)i(a)g(domain)f(whose)g(MX)h(record)e(p)r(oin)n(ts)h(to)h(an)f
-(IP)g(address)g(is)g(not)h(resolv)n(ed)e(b)n(y)h(SMAR.)0
-4498 y Fj(6.3.2)112 b(V)-9 b(arious)38 b(Chec)m(ks)0
-4705 y Fn(The)22 b Fm(EHLO)e Fn(parameter)g(is)h(c)n(hec)n(k)n(ed)g
-(against)f(the)i(lo)r(cal)f(hostname)g(unless)h(the)g(connection)f
-(comes)g(from)g(lo)r(calhost)g(\(IP)0 4805 y(address)30
-b(127.0.0.1\))g(or)h(the)h(access)e(map)i(returned)f
-Fm(quick:ok)d Fn(or)j Fm(quick:relay)p Fn(,)d(see)k(Section)f(3.9.3.)48
-b(Violations)0 4904 y(will)28 b(b)r(e)g(logged)e(with)i(a)f(status)h
-(text)g(of)f Fm(Identity)p 1656 4904 27 4 v 28 w(Theft)p
-Fn(.)0 5058 y(The)21 b(SMTP)h(serv)n(er)d(c)n(hec)n(ks)h(for)h
-(\\illegal)f(pip)r(elining",)j(i.e.,)g(whether)e(a)g(clien)n(t)g(sends)
-g(commands)g(b)r(efore)g(it)h(is)f(allo)n(w)n(ed)0 5157
-y(to)28 b(do)f(so.)36 b(Moreo)n(v)n(er,)25 b(it)j(also)f(c)n(hec)n(ks)f
-(whether)i(the)g(clien)n(t)g(sends)f(a)g(command)g(b)r(efore)h(the)g
-(initial)g(greeting.)36 b(Note:)0 5257 y(according)24
-b(to)h(RF)n(C)h(2821)e(the)i(clien)n(t)f(SHOULD)h(w)n(ait)g(for)f(the)h
-(greeting,)e(but)j(this)f(is)f(not)h(\(y)n(et\))g(a)f(requiremen)n(t.)
-35 b(T)-7 b(o)0 5357 y(turn)28 b(this)g(o\013,)f(use)h
-Fm(allow_data_befor)o(e_)o(gr)o(eet)o(in)o(g)22 b Fn(\(Section)28
-b(3.10,)e(item)i(3m.\))1848 5768 y(61)p eop end
-%%Page: 62 63
-TeXDict begin 62 62 bop 0 523 a Fk(6.4)135 b(Securit)l(y)46
-b(Chec)l(ks)0 758 y Fn(There)21 b(are)g(curren)n(tly)f(no)i(additional)
-f(securit)n(y)f(c)n(hec)n(ks)h(when)h(creating/accessing)c(\014les)j
-(or)g(directories)f(b)r(esides)i(those)0 858 y(pro)n(vided)28
-b(b)n(y)h(the)g(op)r(erating)f(system.)41 b(This)29 b(could)g(b)r(e)h
-(a)f(problem)f(if)i(MCP)e(is)h(miscon\014gured)f(b)r(ecause)h(it)h
-(runs)e(as)0 958 y Fm(root)p Fn(.)56 b(Hence)35 b(it)g(will)f(simply)h
-(o)n(v)n(erwrite)d(existing)i(\014les)h(if)g(those)f(are)f(sp)r
-(eci\014ed)i(in)g(the)g(con\014guration)e(\014le.)58
-b(The)0 1057 y(other)33 b(mo)r(dules)g(run)g(as)g(non-privileged)f
-(users,)i(hence)f(the)h(OS)f(pro)n(vides)f(su\016cien)n(t)i(access)e(c)
-n(hec)n(ks)g({)h(unless)g(the)0 1157 y(system)27 b(is)h
-(miscon\014gured)e(and)i(the)g(MeT)-7 b(A1)27 b(accoun)n(ts)g(are)f
-(misused)i(for)f(other)g(purp)r(oses)g(to)r(o.)0 1485
-y Fk(6.5)135 b(Restrictions)0 1721 y Fn(Besides)38 b(the)h(ob)n
-(viously)e(missing)i(functionalit)n(y)f(there)h(are)e(some)h(other)h
-(things)f(that)h(ma)n(y)f(restrict)g(the)h(use)g(of)0
-1820 y(MeT)-7 b(A1)27 b(in)h(certain)f(en)n(vironmen)n(ts.)36
-b(Here)27 b(is)h(an)f(incomplete)h(list:)125 2057 y Fc(\017)41
-b Fn(DNS)30 b(lo)r(okups)f(curren)n(tly)g(use)g(only)h(UDP)g(b)n(y)f
-(default,)i(hence)f(answ)n(ers)e(that)i(exceed)f(the)h(UDP)g(pac)n(k)n
-(et)f(size)208 2156 y(will)j(cause)g(problems.)50 b(Ho)n(w)n(ev)n(er,)
-32 b(suc)n(h)g(DNS)h(pac)n(k)n(ets)e(are)h(really)f(rare)g(\(b)r
-(ecause)h(they)g(cause)g(op)r(erational)208 2256 y(problems)23
-b(in)h(v)-5 b(arious)22 b(places,)i(e.g.,)h(some)e(\014rew)n(alls)f(ma)
-n(y)h(blo)r(c)n(k)h(TCP)f(for)g(p)r(ort)h(53\).)35 b(A)24
-b(p)r(ossible)g(w)n(ork)-5 b(around)208 2355 y(migh)n(t)22
-b(b)r(e)g(to)g(force)f(TCP)h(\(see)g(Section)g(3.9.2,)f(item)i
-(1\(a\)i\),)g(the)g(correct)d(w)n(a)n(y)h(is)h(a)f(c)n(hange)g(in)i
-(the)f(DNS)h(library)208 2455 y(to)k(retry)g(with)h(TCP)-7
-b(,)27 b(but)h(this)g(has)f(not)h(y)n(et)f(b)r(een)h(implemen)n(ted.)
-125 2621 y Fc(\017)41 b Fn(Map)28 b(lo)r(okups)g(con)n(v)n(ert)f(k)n
-(eys)g(to)h(lo)n(w)n(er)f(case)h(b)r(efore)g(c)n(hec)n(king)f(an)i(en)n
-(try)-7 b(.)39 b(In)28 b(general)f(this)i(is)g(not)f(a)g(problem)208
-2721 y(unless)35 b(lo)r(cal)g(addresses)f(rely)h(on)g(preserving)f(the)
-i(case)e(of)i(the)g(lo)r(cal)f(parts)g(of)g(addresses.)59
-b(That)36 b(is,)h(lo)r(cal)208 2820 y(addresses)26 b(whic)n(h)h
-(require)g(upp)r(er)g(case)g(c)n(haracters)e(do)j(not)f(w)n(ork.)125
-2986 y Fc(\017)41 b Fn(Multi-line)22 b(replies)f(from)g(an)g(SMTP)g
-(serv)n(er)f(are)h(curren)n(tly)f(neither)i(stored)f(\(for)g(a)g(p)r
-(ossible)g(DSN\))i(nor)e(logged,)208 3086 y(instead)27
-b(just)h(the)g(last)f(line)h(is)g(used)f(for)g(that)h(purp)r(ose.)0
-3322 y(Ev)n(erything)34 b(that)h(is)g(not)g(describ)r(ed)g(in)h(the)f
-(do)r(cumen)n(tation)g(do)r(es)g(either)g(not)h(exist)f(in)g(the)h
-(curren)n(t)e(v)n(ersion)g(of)0 3422 y(MeT)-7 b(A1,)33
-b(or)e(is)h(unlik)n(ely)g(to)g(w)n(ork.)49 b(Ho)n(w)n(ev)n(er,)31
-b(there)h(ma)n(y)f(b)r(e)i(omissions)e(in)h(the)g(do)r(cumen)n(tation,)
-h(please)f(inform)0 3522 y(the)c(author)f(of)g(suc)n(h)h(bugs.)0
-3850 y Fk(6.6)135 b(Co)t(de)45 b(Review,)i(Enhancemen)l(ts,)f(P)l(atc)l
-(hes)0 4085 y Fn(Source)27 b(co)r(de)g(insp)r(ection)h(as)f(w)n(ell)g
-(as)g(patc)n(hes)g(and)h(suggestions)e(are)g(v)n(ery)h(w)n(elcome.)0
-4238 y(Enhancemen)n(ts)k(and)g(extensions)f(are)h(v)n(ery)f(w)n(elcome)
-g(to)r(o,)i(esp)r(ecially)f(to)g(extend)h(the)g(basic)f(functionalit)n
-(y)g(of)g(the)0 4338 y(curren)n(t)c(MeT)-7 b(A1)27 b(release.)0
-4666 y Fk(6.7)135 b(P)l(orting)0 4902 y Fn(P)n(orting)32
-b(to)i(curren)n(tly)g(unsupp)r(orted)g(platforms)f(including)i
-(non-Unix)e(systems)h(is)g(encouraged.)55 b(Note)34 b(that)g(the)0
-5001 y(destination)f(system)g(m)n(ust)h(supp)r(ort)f(statethreads)f
-([SGI01])h(and)g(Berk)n(eley)f(DB)i(4.x.)53 b(It)34 b(migh)n(t)f(b)r(e)
-h(necessary)e(to)0 5101 y(p)r(ort)27 b(those)h(\014rst.)1848
-5768 y(62)p eop end
-%%Page: 63 64
-TeXDict begin 63 63 bop 0 523 a Fk(6.8)135 b(V)-11 b(ersion)45
-b(Naming)0 758 y Fn(Eac)n(h)26 b(MeT)-7 b(A1)28 b(v)n(ersion)e(has)h(a)
-g(name)h(in)f(the)h(follo)n(wing)f(format:)0 912 y(MeT)-7
-b(A1-ma)5 b(jor.minor.[quali\014er]quali\014er-v)n(ersion.patc)n(hlev)m
-(el)0 1065 y(The)29 b(ma)5 b(jor)28 b(n)n(um)n(b)r(er)h(c)n(hanges)e(b)
-r(et)n(w)n(een)i(releases)e(when)j(new)f(features)f(are)g(in)n(tro)r
-(duced)h(\()p Fd(major)h Fn(c)n(hanges,)e(but)i(see)0
-1165 y(b)r(elo)n(w)25 b(ab)r(out)g(the)h(dev)n(elopmen)n(t)e(phases\).)
-36 b(The)25 b(minor)g(n)n(um)n(b)r(er)g(c)n(hanges)f(when)h(no)g(new)h
-(features)f(are)f(in)n(tro)r(duced,)0 1264 y(but)36 b(bug\014xes)e(and)
-h(\(p)r(ortabilit)n(y\))g(enhancemen)n(ts)g(are)f(made.)59
-b(That)35 b(is,)i(no)e(con\014guration)f(c)n(hanges)f(are)h(needed)0
-1364 y(when)27 b(going)f(from)h(one)g(minor)f(v)n(ersion)g(to)h(the)g
-(next.)37 b(The)27 b(patc)n(hlev)n(el)f(n)n(um)n(b)r(er)h(is)g(used)g
-(for)g(in)n(termediate)f(patc)n(hes)0 1463 y(b)r(et)n(w)n(een)h
-(releases,)e(e.g.,)i(if)h(something)e(is)h(brok)n(en)f(but)h(it)g(is)g
-(not)g(imp)r(ortan)n(t)g(enough)f(for)h(a)f(new)h(release)f(b)r(ecause)
-g(it)0 1563 y(is)h(barely)g(used)h(or)e(encoun)n(tered.)0
-1716 y(There)h(are)g(sev)n(eral)e(di\013eren)n(t)j(quali\014ers:)101
-1934 y(1.)42 b(PreAlpha:)59 b(This)39 b(means)g(the)g(soft)n(w)n(are)f
-(is)h(not)g(feature)g(complete)g(and)g(hence)h(migh)n(t)f(b)r(e)g
-(missing)g(some)208 2033 y(functionalit)n(y)30 b(that)g(is)g
-(considered)f(imp)r(ortan)n(t)h(b)n(y)f(di\013eren)n(t)i(users.)43
-b(Additionally)-7 b(,)31 b(there)f(is)g(most)f(lik)n(ely)h(no)208
-2133 y(compatibilit)n(y)37 b(in)i(data)e(structures)h(stored)f(on)h
-(disk)g(b)r(et)n(w)n(een)g(di\013eren)n(t)g(pre-alpha)f(v)n(ersions,)i
-(e.g.,)h(when)208 2232 y(upgrading)d(from)i(PreAlpha16)f(to)h
-(PreAlpha17)e(the)j(main)f(queue)g(format)g(ma)n(y)f(ha)n(v)n(e)g(c)n
-(hanged)g(without)208 2332 y(c)n(hec)n(ks)24 b(in)i(the)h(soft)n(w)n
-(are)d(for)h(this.)37 b(Hence)26 b(old)g(queues)f(m)n(ust)h(b)r(e)h
-(drained)e(b)r(efore)h(upgrading.)35 b(Moreo)n(v)n(er,)23
-b(the)208 2432 y(proto)r(cols)29 b(used)h(for)g(comm)n(unication)g(b)r
-(et)n(w)n(een)g(MeT)-7 b(A1)31 b(mo)r(dules)f(ma)n(y)g(ha)n(v)n(e)g(c)n
-(hanged)f(without)i(pro)n(viding)208 2531 y(bac)n(kw)n(ard)24
-b(compatibilit)n(y)-7 b(,)27 b(therefore)f(mo)r(dules)h(from)g
-(di\013eren)n(t)g(releases)e(m)n(ust)i Fd(not)g Fn(b)r(e)g(used)g
-(together.)36 b(Suc)n(h)208 2631 y(incompatibilities)27
-b(are)g(usually)g(stated)h(in)f(the)h(list)g(of)g(c)n(hanges)e
-Fm(ChangeLog)p Fn(.)208 2760 y(Do)34 b(not)h(run)f(this)h(on)g(a)f(pro)
-r(duction)g(serv)n(er)f(unless)i(y)n(ou)e(are)h(a)n(w)n(are)f(of)h(the)
-h(p)r(ossible)g(consequences.)57 b(The)208 2860 y(soft)n(w)n(are)29
-b(is)j(still)g(under)f(dev)n(elopmen)n(t)g(and)g(not)h(fully)g
-(functional.)49 b(Moreo)n(v)n(er,)29 b(it)j(ma)n(y)f(not)h(b)r(e)g
-(su\016cien)n(tly)208 2959 y(tested.)101 3118 y(2.)42
-b(Alpha:)37 b(In)27 b(this)h(state)g(the)g(soft)n(w)n(are)e(is)h(ready)
-g(for)g(public)h(testing)f(but)h(its)g(features)f(ma)n(y)g(still)h(c)n
-(hange.)101 3276 y(3.)42 b(Beta:)62 b(F)-7 b(eature)40
-b(c)n(hanges)f(are)g(unlik)n(ely)-7 b(,)43 b(but)e(still)g(p)r(ossible)
-f(if)h(required.)74 b(Usually)40 b(only)g(bug\014xes)g(o)r(ccur)208
-3376 y(b)r(et)n(w)n(een)27 b(b)r(eta)h(v)n(ersions.)101
-3534 y(4.)42 b(Gamma:)35 b(This)26 b(is)g(a)f(release)f(candidate.)36
-b(Usually)26 b(only)f(critical)g(bug\014xes)h(o)r(ccur)f(b)r(et)n(w)n
-(een)h(gamma)e(v)n(ersions.)208 3634 y(There)j(migh)n(t)g(b)r(e)h(no)f
-(gamma)g(v)n(ersions)f(at)h(all)h(if)g(b)r(eta)g(testing)f(w)n(as)g
-(considered)f(successful)i(and)f(su\016cien)n(t.)101
-3792 y(5.)42 b(A)27 b(release)g(v)n(ersion)f(do)r(es)h(not)h(ha)n(v)n
-(e)e(an)h(explicit)h(quali\014er.)0 4009 y(The)19 b(quali\014er-v)n
-(ersion)e(is)i(used)h(to)f(distinguish)g(b)r(et)n(w)n(een)g(di\013eren)
-n(t)h(v)n(ersion)e(of)h(the)h(same)f(quali\014er,)h(e.g.,)h(PreAlpha16)
-0 4109 y(and)27 b(PreAlpha17.)35 b(It)28 b(is)g(0)f(for)g(a)g(release)f
-(v)n(ersion.)0 4262 y(Examples)h(for)g(v)n(ersion)f(names:)36
-b(MeT)-7 b(A1-0.0.PreAlpha19.0,)24 b(MeT)-7 b(A1-1.0.0.0.)0
-4415 y(See)23 b(the)h(\014le)f Fm(include/sm/versio)o(n.)o(h)17
-b Fn(ho)n(w)23 b(the)g(v)n(ersion)f(string)h(is)g(con)n(v)n(erted)f(in)
-n(to)h(a)f(32)h(bit)g(n)n(um)n(b)r(er)g(that)h(denotes)0
-4515 y(the)k(v)n(ersion)e(n)n(um)n(b)r(er.)0 4798 y Fj(6.8.1)112
-b(Snapshots)0 5004 y Fn(F)-7 b(rom)29 b(time)g(to)g(time)h(snapshots)e
-(ma)n(y)g(b)r(e)i(made)e(a)n(v)-5 b(ailable.)40 b(Those)29
-b(are)f(mark)n(ed)g(with)h(a)g(date)g(in)g(the)g(distribution)0
-5104 y(\014le)k(name,)h(e.g.,)g Fm(meta1-0.0.16.0-20)o(04)o(092)o(8.)o
-(tar)o(.g)o(z)p Fn(.)47 b(The)33 b(name)g(indicates)f(that)i(it)f(is)g
-(a)g(snapshot)f(of)h(what)0 5204 y(will)c(b)r(ecome)g(v)n(ersion)f
-Fm(meta1-0.0.16.0)p Fn(,)c(i.e.,)29 b(the)h(next)f(release)f(will)h(ha)
-n(v)n(e)f(the)h(giv)n(en)g(v)n(ersion)e(n)n(um)n(b)r(er)i(\(without)0
-5303 y(the)j(date\).)50 b(The)32 b(only)g(other)f(indication)h(in)g
-(the)h(distribution)f(is)g(the)g(inclusion)g(of)g(an)f
-Fm(s)h Fn(in)g(the)g(v)n(ersion)f(n)n(um)n(b)r(er)0 5403
-y(that)f(is)h(sho)n(wn)e(in)h(the)h(v)n(ersion)d(output)j(of)f(the)h
-(main)f(comp)r(onen)n(ts.)44 b(A)31 b(snapshot)e(did)i(not)f(go)f
-(through)g(the)i(usual)0 5503 y(release)26 b(cycle)h(and)h(is)f(made)h
-(a)n(v)-5 b(ailable)26 b(as)h Fd(te)l(chnolo)l(gy)k(pr)l(eview)p
-Fn(.)1848 5768 y(63)p eop end
-%%Page: 64 65
-TeXDict begin 64 64 bop 0 1199 a Fl(Chapter)65 b(7)0
-1668 y Fp(Data)78 b(Flo)-6 b(w)77 b(in)g(MeT)-19 b(A1)0
-2203 y Fk(7.1)135 b(Data)46 b(Flo)l(w)g(in)f(MeT)-11
-b(A1)0 2439 y Fn(This)26 b(Section)h(explains)f(ho)n(w)f(MeT)-7
-b(A1)27 b(stores)e(information)h(ab)r(out)g(messages)f(that)i(are)e
-(transferred.)35 b(It)27 b(giv)n(es)e(some)0 2538 y(bac)n(kground)i
-(information)h(whic)n(h)h(is)g(useful)h(for)e(troublesho)r(oting.)40
-b(Details)29 b(ab)r(out)g(the)g(op)r(eration)f(of)h(MeT)-7
-b(A1)29 b(can)0 2638 y(b)r(e)f(found)g(in)g([A\031m)n(b].)0
-2791 y(MeT)-7 b(A1)23 b(uses)g(t)n(w)n(o)f(di\013eren)n(t)h(databases)f
-(on)g(disk)h(to)g(store)f(en)n(v)n(elop)r(e)g(information)h(\(sender)f
-(and)h(recipien)n(ts\):)34 b(IBDB:)0 2891 y(incoming)g(bac)n(kup)f
-(database,)i(DEFEDB:)f(deferred)f(en)n(v)n(elop)r(e)h(database,)g(and)g
-(one)g(database)f(to)h(store)f(message)0 2990 y(con)n(ten)n(ts:)42
-b(CDB:)31 b(con)n(ten)n(t)f(database.)44 b(See)30 b(Section)g(2.4.1)g
-(ab)r(out)g(the)h(lo)r(cation)f(and)g(la)n(y)n(out)f(of)h(these)h
-(databases)3721 2960 y Fi(1)3756 2990 y Fn(.)0 3090 y(The)20
-b(queue)f(manager)f(additionally)i(uses)f(t)n(w)n(o)g(in)n(ternal)g(en)
-n(v)n(elop)r(e)g(databases:)31 b(IQDB)20 b(\(Incoming)f(Queue)h
-(DataBase\))0 3190 y(and)27 b(A)n(Q)h(\(Activ)n(e)g(Queue\).)0
-3343 y(Incoming)20 b(mails)g(are)g(accepted)g(b)n(y)g(the)h(SMTP)f
-(serv)n(ers)e(whic)n(h)j(store)e(the)i(con)n(ten)n(t)f(in)h(the)g(CDB)g
-(\(complete)f(messages)0 3443 y(including)k(headers)f(in)i(the)f
-(format)g(as)g(receiv)n(ed\).)35 b(The)24 b(en)n(v)n(elop)r(e)f
-(information,)h(i.e.,)h(sender)f(\()p Fm(MAIL)p Fn(\))f(and)h(recipien)
-n(ts)0 3542 y(\()p Fm(RCPT)p Fn(\),)32 b(is)g(stored)g(b)n(y)h(the)g
-(queue)g(manager)e(in)i(IQDB)g(and)f(written)h(to)g(IBDB)g(whic)n(h)f
-(is)h(just)g(a)g(log)f(of)h(en)n(v)n(elop)r(e)0 3642
-y(data)c(and)g(what)g(happ)r(ened)g(to)g(it.)43 b(That)29
-b(is,)g(the)h(\014les)f(in)g(IBDB)h(are)e(written)h(sequen)n(tially)g
-(and)g(are)f(con)n(tin)n(uously)0 3741 y(gro)n(wing.)36
-b(If)29 b(a)e(\014le)i(reac)n(hes)d(its)i(size)g(limit)h(\(see)f
-(Section)g(3.8:)37 b Fm(IBDB)p Fn(\),)26 b(then)j(it)f(is)g(closed)g
-(and)g(a)f(new)h(\014le)h(is)e(op)r(ened.)0 3841 y(F)-7
-b(or)25 b(a)g(deliv)n(ery)-7 b(,)25 b(the)h(en)n(v)n(elop)r(e)f
-(information)g(m)n(ust)g(b)r(e)h(transferred)f(in)n(to)g(A)n(Q.)g(F)-7
-b(or)25 b(incoming)g(mail)h(this)g(happ)r(ens)f(as)0
-3941 y(so)r(on)30 b(as)f(a)h(transaction)f(is)h(accepted,)h(in)f(whic)n
-(h)g(case)g(the)g(data)g(is)g(mo)n(v)n(ed)f(from)h(IQDB)g(to)g(A)n(Q.)g
-(A)h(transaction)e(is)0 4040 y(only)d(accepted)g(if)h(the)f(message)f
-(is)h(safely)g(written)g(to)h(CDB)f(and)g(the)h(en)n(v)n(elop)r(e)e
-(information)h(has)f(b)r(een)i(committed)0 4140 y(to)g(IBDB,)h(i.e.,)g
-(all)f(information)g(is)h(committed)g(to)f(p)r(ersisten)n(t)h(storage)
-2326 4110 y Fi(2)2361 4140 y Fn(.)0 4293 y(The)g(sc)n(heduler)g(in)h
-(QMGR)f(tak)n(es)g(recipien)n(t)g(en)n(v)n(elop)r(es)f(from)h(A)n(Q)g
-(and)g(creates)g(transactions)e(whic)n(h)j(are)e(giv)n(en)h(to)0
-4393 y(the)34 b(SMTP)f(clien)n(ts)g(for)g(deliv)n(ery)-7
-b(.)53 b(An)34 b(SMTP)g(clien)n(t)f(tak)n(es)f(the)i(transaction)e
-(information)h(and)g(tries)g(to)h(send)f(a)0 4492 y(message)21
-b(whose)i(con)n(ten)n(t)f(is)h(read)f(from)g(CDB.)i(After)f(a)f
-(successful)h(deliv)n(ery)f(attempt)h(a)g(record)e(is)i(written)g(to)g
-(IBDB)0 4592 y(that)30 b(logs)e(this)i(information.)43
-b(A)30 b(clean)n(up)f(task)g(remo)n(v)n(es)f(p)r(erio)r(dically)h(old)g
-(IBDB)h(\014les)f(whic)n(h)h(con)n(tain)f(only)g(data)0
-4692 y(that)f(is)f(no)h(longer)e(referenced.)0 4845 y(The)e(deferred)g
-(en)n(v)n(elop)r(e)f(database)g(is)h(only)g(used)g(if)h(a)f(message)f
-(cannot)h(b)r(e)g(deliv)n(ered)g(during)f(the)i(\014rst)f(attempt.)36
-b(In)0 4945 y(that)21 b(case)e(the)i(appropriate)d(en)n(v)n(elop)r(e)i
-(data)g(is)g(added)g(to)g(DEFEDB)g(and)g(a)g(record)f(is)h(written)h
-(to)f(IBDB)g(stating)g(that)0 5044 y(the)30 b(data)f(has)g(b)r(een)h
-(transferred)e(to)i(DEFEDB.)f(En)n(tries)g(in)h(DEFEDB)f(con)n(tain)g
-(a)g(timestamp)h(called)g(next-time-)0 5144 y(to-try)f(at)g(whic)n(h)h
-(QMGR)f(reads)g(them)h(from)f(the)h(database)e(in)n(to)i(A)n(Q)f(and)g
-(the)h(sc)n(heduler)f(tries)g(another)g(deliv)n(ery)p
-0 5213 1512 4 v 92 5267 a Fh(1)127 5290 y Fg(the)35 b(term)f
-Ff(datab)l(ase)h Fg(is)e(used)h(lo)r(osely)g(here,)i(only)e(DEFEDB)g
-(is)f(a)h(real)f(database,)38 b(the)d(others)f(are)g(just)g(w)n(a)n(ys)
-g(to)g(store)g(some)0 5369 y(information)23 b(and)i(access)f(them)g(in)
-g(some)g(w)n(a)n(y)-6 b(.)92 5425 y Fh(2)127 5448 y Fg(If)24
-b(non-p)r(ersisten)n(t)g(storage)h(is)e(used)h(for)f(these)h(databases)
-i(mail)c(can)j(of)e(course)h(b)r(e)g(lost.)1848 5768
-y Fn(64)p eop end
-%%Page: 65 66
-TeXDict begin 65 65 bop 0 523 a Fn(attempt.)52 b(If)32
-b(that)h(succeeds,)g(the)g(en)n(tries)e(are)h(remo)n(v)n(ed)e(from)i
-(DEFEDB,)h(otherwise)e(they)i(are)e(either)h(requeued)0
-623 y(with)e(a)e(new)h(next-time-to-try)f(\(in)i(case)e(of)h(a)g(temp)r
-(orary)f(error\))f(or)h(a)h(DSN)h(\(b)r(ounce)f(message\))f(is)h
-(generated)f(\(in)0 722 y(case)f(of)g(a)g(p)r(ermanen)n(t)h(error\).)
-1848 5768 y(65)p eop end
-%%Page: 66 67
-TeXDict begin 66 66 bop 0 1199 a Fl(Chapter)65 b(8)0
-1668 y Fp(Adv)-13 b(anced)78 b(Con\014guration)g(Options)0
-2203 y Fk(8.1)135 b(Ov)l(erview)0 2439 y Fn(Some)26 b(con\014guration)e
-(options)h(are)g(only)h(needed)g(in)g(sp)r(ecial)g(situations)f(and)h
-(ma)n(y)f(require)g(bac)n(kground)f(kno)n(wledge)0 2538
-y(of)j(the)h(in)n(v)n(olv)n(ed)e(systems.)36 b(Those)26
-b(adv)-5 b(anced)27 b(con\014guration)f(options)g(are)g(explained)h(in)
-h(the)f(subsequen)n(t)g(sections.)0 2824 y Fj(8.1.1)112
-b(Flags)0 3031 y Fn(Usually)32 b(\015ags)f(are)g(not)h(set)g(and)g
-(hence)g(a)f(con\014guration)g(\014le)h(only)f(needs)h(to)g(turn)g(on)g
-(\015ags)f(\(if)i(required\).)49 b(Ho)n(w-)0 3131 y(ev)n(er,)40
-b(in)e(some)g(cases)f(\015ags)g(are)g(set)h(b)n(y)g(default)g(and)g
-(under)g(some)f(rare)g(circumstances)g(need)h(to)g(b)r(e)h(disabled.)0
-3230 y(T)-7 b(o)38 b(ac)n(hiev)n(e)e(this,)41 b(the)e(name)f(of)g(the)g
-(\015ag)f(can)h(b)r(e)g(pre\014xed)g(with)g(one)g(of)g
-Fm(not)p 2657 3230 27 4 v 30 w Fn(,)j Fm(dont)p 2927
-3230 V 30 w Fn(,)f Fm(no)p 3108 3230 V 31 w Fn(,)h Fm(-)p
-Fn(,)f Fm(!)p Fn(,)g(or)e Fm(~)p Fn(,)i(e.g.,)0 3330
-y Fm(~remove_unused_l)o(ogf)o(il)o(es)21 b Fn(or)27 b
-Fm(dont_remove_unus)o(ed)o(_lo)o(gf)o(ile)o(s)p Fn(.)0
-3658 y Fk(8.2)135 b(Adv)-7 b(anced)44 b(Con\014guration)i(for)f(MCP)101
-3894 y Fn(1.)d Fm(max_processes)p Fn(:)31 b(maxim)n(um)d(n)n(um)n(b)r
-(er)f(of)g(pro)r(cesses)g(to)g(start)g([default:)37 b(1].)101
-4060 y(2.)42 b Fm(min_processes)p Fn(:)31 b(minim)n(um)d(n)n(um)n(b)r
-(er)g(of)f(pro)r(cesses)f(to)i(start)f([default:)37 b(1].)101
-4226 y(3.)42 b Fm(use_id_in_logfi)o(le_)o(na)o(me)o Fn(:)52
-b(if)38 b(more)f(than)h(one)f(pro)r(cess)g(can)g(b)r(e)h(started)f
-(then)i(it)f(migh)n(t)f(b)r(e)i(useful)f(to)208 4325
-y(ha)n(v)n(e)27 b(unique)i(log\014les)f(unless)g(the)h(pro)r(cesses)f
-(use)g Fm(syslog\(3\))p Fn(.)37 b(If)29 b(set,)g(this)g(\(b)r(o)r
-(olean\))g(option)f(causes)g(MCP)208 4425 y(to)36 b(include)h(a)f
-(unique)h(iden)n(ti\014er)f(\(the)h(same)f(as)g(for)g
-Fm(pass_id)p Fn(,)g(whic)n(h)g(m)n(ust)h(b)r(e)g(used)f(to)r(o\))h(in)f
-(the)h(log\014le)208 4525 y(name.)64 b(By)37 b(default)g(the)g
-(log\014le)f(has)h(the)g(name)g(of)f(the)i(section)e(\(or)g(the)i
-(section)e(k)n(eyw)n(ord)f(if)i(no)g(section)208 4624
-y(name)j(is)h(giv)n(en\),)j(preceeded)d(b)n(y)f(the)i(log)e(directory)g
-(\(option)h Fm(-L)f Fn(for)g(MCP\),)h(and)g Fm(.log)f
-Fn(app)r(ended.)77 b(If)208 4724 y Fm(use_id_in_logfi)o(le_)o(na)o(me)
-28 b Fn(is)34 b(turned)h(on,)h(then)f(the)g(n)n(umeric)f(id)g(is)h
-(added)f(b)r(efore)g(the)h(extension,)h(e.g.,)208 4824
-y Fm(/var/log/meta1/)o(mai)o(le)o(r0)o(.lo)o(g)21 b Fn(for)28
-b Fm(-L)42 b(/var/log/meta1/)22 b Fn(and)27 b(a)g(section)h(with)g(the)
-g(name)f Fm(mailer)p Fn(.)101 4990 y(4.)42 b Fm(working_directo)o(ry)p
-Fn(:)36 b(p)r(erform)29 b(a)h Fm(chdir\(2\))d Fn(to)j(the)g(sp)r
-(eci\014ed)h(directory)e(b)r(efore)g(executing)h(the)h(pro)r(cess.)208
-5089 y(Note:)64 b(this)42 b(option)f(essen)n(tially)f(requires)g(that)i
-(all)f(relev)-5 b(an)n(t)40 b(pathnames)h(in)h(the)f(con\014guration)f
-(\014le)i(are)208 5189 y(absolute,)23 b(otherwise)e(it)j(is)e(v)n(ery)g
-(easy)g(to)g(miscon\014gure)g(some)g(pathnames,)h(esp)r(ecially)g
-(those)f(shared)g(b)r(et)n(w)n(een)208 5288 y(di\013eren)n(t)27
-b(pro)r(cesses.)1848 5768 y(66)p eop end
-%%Page: 67 68
-TeXDict begin 67 67 bop 0 523 a Fn(Note:)38 b(the)28
-b(n)n(um)n(b)r(er)g(of)f(pro)r(cesses)g(for)g(almost)h(all)f(MeT)-7
-b(A1)28 b(mo)r(dules)g(should)g(b)r(e)g(1.)37 b(It)29
-b Fd(must)e Fn(b)r(e)h(1)f(for)h(QMGR)g(and)0 623 y(SMAR,)k(it)g(can)f
-(b)r(e)g(larger)f(than)h(1)g(for)g(SMTPC.)g(F)-7 b(or)31
-b(SMTPS)g(it)h(should)f(b)r(e)h(1)e(in)i(the)g(default)g(setup)f(as)g
-(the)g(\014le)0 722 y(descriptor)26 b(to)i(whic)n(h)f(MCP)h(binds)f(on)
-h(b)r(ehalf)g(of)f(SMTPS)h(can)f(b)r(e)h(passed)f(to)g(only)h(one)f
-(pro)r(cess.)0 1045 y Fk(8.3)135 b(Adv)-7 b(anced)44
-b(Con\014guration)i(for)f(QMGR)101 1281 y Fn(1.)d Fm(connection_cont)o
-(rol)o(_h)o(as)o(h_t)o(ab)o(le_)o(si)o(ze)o Fn(:)i(size)33
-b(of)h(the)h(hash)e(table)h(used)g(for)f(connection)g(con)n(trol,)h
-(i.e.,)208 1380 y(n)n(um)n(b)r(er)27 b(of)g(incoming)h(connections)e
-(and)i(connection)f(rate)g(\(see)g(Section)h(3.8,)f(18a)f(and)h(18b\))
-101 1534 y(2.)42 b Fm(debug_level)p Fn(:)32 b(debug)27
-b(lev)n(el)h(\(only)f(if)h(compiled)g(with)g(QMGR)p 2283
-1534 25 4 v 30 w(DEBUG\).)101 1687 y(3.)42 b(subsection)26
-b Fm(DEFEDB)p Fn(:)e(Note:)37 b(The)27 b(Berk)n(eley)e(DB)i(do)r(cumen)
-n(tation)g([Sleb])g(should)f(b)r(e)i(consulted)e(b)r(efore)h(mo)r(d-)
-208 1787 y(ifying)g(an)n(y)g(of)h(these)f(options.)243
-1940 y(\(a\))41 b Fm(page_size)p Fn(:)33 b(DB)28 b(page)f(size)g
-(\(this)i(can)e(only)g(b)r(e)h(set)g(when)f(the)h(DB)g(is)g(initially)f
-(created\).)238 2060 y(\(b\))42 b Fm(cache_size)p Fn(:)33
-b(DB)28 b(cac)n(he)f(size.)247 2181 y(\(c\))42 b Fm(KBytes_written_fo)o
-(r_)o(che)o(ck)o(po)o(int)o(in)o(g)p Fn(:)28 b(If)23
-b(non-zero,)f(a)h(c)n(hec)n(kp)r(oin)n(t)e(will)i(b)r(e)g(done)g(if)g
-(more)e(than)i(the)390 2280 y(amoun)n(t)k(of)h(KBytes)f(of)g(log)g
-(data)g(ha)n(v)n(e)f(b)r(een)j(written)e(since)h(the)g(last)f(c)n(hec)n
-(kp)r(oin)n(t)g(\(unit:)38 b(KB\).)238 2401 y(\(d\))k
-Fm(delay_between_2_c)o(he)o(ckp)o(oi)o(nt)o(s)p Fn(:)31
-b(Minim)n(um)d(dela)n(y)f(b)r(et)n(w)n(een)h(t)n(w)n(o)e(c)n(hec)n(kp)r
-(oin)n(ts)h(\(unit:)38 b(s\).)247 2521 y(\(e\))k Fm(flags)p
-Fn(:)35 b(\015ags)27 b(for)g(DEFEDB:)458 2641 y(i.)41
-b Fm(remove_unused_log)o(fil)o(es)o Fn(:)48 b(this)37
-b(is)e(on)h(b)n(y)g(default,)j(hence)d(to)g(turn)g(it)g(o\013)g(one)g
-(of)g(the)g(forms)545 2741 y(explained)21 b(in)g(Section)f(8.1.1,)h
-(e.g.,)h Fm(dont_remove_unu)o(sed)o(_l)o(ogf)o(il)o(es)o
-Fn(,)17 b(can)j(b)r(e)h(used.)34 b(This)21 b(should)545
-2840 y(only)k(b)r(e)g(done)f(if)h(the)g(Berk)n(eley)e(DB)i(log\014les)e
-(are)h(remo)n(v)n(ed)f(some)h(other)g(w)n(a)n(y)-7 b(,)24
-b(e.g.,)h(after)f(arc)n(hiving.)101 2988 y(4.)42 b Fm(delivery_timeou)o
-(t)p Fn(:)k(timeout)35 b(for)g(a)g(single)f(deliv)n(ery)g(attempt)i
-(\(unit:)53 b(s\).)60 b(This)35 b(v)-5 b(alue)35 b(should)g(b)r(e)g
-(large)208 3087 y(enough)k(that)h(ev)n(en)f(big)g(mails)h(can)f(b)r(e)h
-(deliv)n(ered)f(o)n(v)n(er)f(a)h(slo)n(w)g(link)h(b)r(efore)f(the)h
-(QMGR)g(considers)e(the)208 3187 y(deliv)n(ery)26 b(attempt)i(a)g
-(failure)f(b)r(ecause)g(the)h(deliv)n(ery)e(agen)n(t)h(did)h(not)g
-(return)f(a)g(result)g(y)n(et.)101 3340 y(5.)42 b Fm(flags)p
-Fn(:)34 b(con\014guration)26 b(\015ags:)243 3494 y(\(a\))41
-b Fm(reuse_connection)p Fn(:)f(try)31 b(to)h(reuse)g(op)r(en)g(SMTP)g
-(connections)f(for)h(deliv)n(ery)-7 b(.)49 b(Note:)d(this)33
-b(feature)f(is)390 3594 y(still)c(exp)r(erimen)n(tal.)101
-3747 y(6.)42 b Fm(max_fds)p Fn(:)d(maxim)n(um)30 b(n)n(um)n(b)r(er)g
-(of)g(\014le)h(descriptors.)43 b(This)30 b(sets)g(an)g(upp)r(er)h
-(limit)g(on)f(the)h(n)n(um)n(b)r(er)f(of)g(clien)n(ts)208
-3847 y(that)d(can)h(connect)f(to)h(QMGR.)101 4000 y(7.)42
-b Fm(max_threads)p Fn(:)32 b(maxim)n(um)27 b(n)n(um)n(b)r(er)h(of)f
-(threads.)101 4154 y(8.)42 b Fm(min_threads)p Fn(:)32
-b(minim)n(um)c(n)n(um)n(b)r(er)g(of)f(threads.)101 4307
-y(9.)42 b Fm(scheduler_timeo)o(ut)p Fn(:)30 b(as)c(a)g(safet)n(y)g
-(measure)f(against)g(unforseen)h(problems)g(an)g(item)h(is)f(remo)n(v)n
-(ed)f(from)h(A)n(Q)208 4407 y(after)g(the)h(sp)r(eci\014ed)h(timeout.)
-37 b(This)27 b(timeout)g(m)n(ust)g(b)r(e)g(large)f(enough)g(to)h(allo)n
-(w)f(for)g(sc)n(heduling)h(dela)n(ys)e(if)j(all)208 4506
-y(deliv)n(ery)23 b(agen)n(ts)g(are)g(busy)h(whic)n(h)g(can)g(happ)r(en)
-h(if)f(deliv)n(eries)f(are)g(slo)n(w)h(or)f(if)i(there)f(are)f(few)n
-(er)h(deliv)n(ery)f(agen)n(ts)208 4606 y(a)n(v)-5 b(ailable)26
-b(than)i(en)n(tries)e(in)i(the)g(activ)n(e)f(queue.)60
-4759 y(10.)41 b Fm(SMAR_timeout)p Fn(:)e(timeout)32 b(in)g(address)e
-(resolv)n(er,)h(i.e.,)i(ho)n(w)d(long)h(to)h(w)n(ait)f(for)g(a)g
-(result)g(from)g(SMAR)i(\(unit:)208 4859 y(s\).)46 b(Note:)d(this)31
-b(v)-5 b(alue)31 b(m)n(ust)f(b)r(e)i(larger)c(than)j(the)g(total)g(DNS)
-g(timeout)g(and)g(it)g(m)n(ust)g(tak)n(e)f(alias)g(expansion)208
-4959 y(in)n(to)d(accoun)n(t.)60 5112 y(11.)41 b(subsection)27
-b Fm(smtps)p Fn(:)243 5266 y(\(a\))41 b Fm(connection_contro)o(l_)o
-(cac)o(he)o(_s)o(ize)o Fn(:)31 b(size)c(of)h(connection)f(con)n(trol)f
-(hash)i(table.)60 5419 y(12.)41 b Fm(tests)p Fn(:)46
-b(testing)33 b(only)g(\(a)n(v)-5 b(ailable)32 b(if)i(QMGR)g(is)f
-(compiled)g(with)h Fm(-DQMGR)p 2634 5419 27 4 v 29 w(TEST)p
-Fn(\).)e(See)h(the)h(source)e(co)r(de)h(for)208 5519
-y(details.)1848 5768 y(67)p eop end
-%%Page: 68 69
-TeXDict begin 68 68 bop 0 523 a Fk(8.4)135 b(Adv)-7 b(anced)44
-b(Con\014guration)i(for)f(SMAR)101 758 y Fn(1.)d Fm(DNS)p
-Fn(:)26 b(this)i(subsection)f(con)n(tains)g(DNS)h(related)f(options.)
-243 924 y(\(a\))41 b Fm(flags)p Fn(:)35 b(v)-5 b(alid)28
-b(\015ags)e(are:)458 1055 y(i.)41 b Fm(use_TCP)p Fn(:)27
-b(use)i(TCP)f(instead)h(of)g(UDP)h(for)e(connections)g(to)h(a)g
-(nameserv)n(er.)39 b(Note:)h(curren)n(tly)28 b(the)545
-1155 y(DNS)k(resolv)n(er)c(do)r(es)i(not)g(automatically)f(fall)h(bac)n
-(k)g(to)g(a)g(TCP)g(connection)f(if)i(the)g(reply)f(w)n(as)f(to)r(o)545
-1255 y(big.)37 b(This)28 b(ma)n(y)f(b)r(e)h(added)f(in)h(a)f(later)g(v)
-n(ersion.)435 1370 y(ii.)41 b Fm(use_connect)p Fn(:)28
-b(use)18 b Fm(connect\(2\))d Fn(ev)n(en)j(if)h(using)f(UDP)-7
-b(.)18 b(This)h(is)f(required)f(on)h(systems)g(lik)n(e)g(F)-7
-b(reeBSD)545 1470 y Fm(jail\(8\))p Fn(.)101 1635 y(2.)42
-b Fm(max_fds)p Fn(:)d(maxim)n(um)30 b(n)n(um)n(b)r(er)g(of)g(\014le)h
-(descriptors.)43 b(This)30 b(sets)g(an)g(upp)r(er)h(limit)g(on)f(the)h
-(n)n(um)n(b)r(er)f(of)g(clien)n(ts)208 1734 y(that)d(can)h(connect)f
-(to)h(SMAR.)101 1899 y(3.)42 b Fm(max_threads)p Fn(:)32
-b(maxim)n(um)27 b(n)n(um)n(b)r(er)h(of)f(threads.)101
-2064 y(4.)42 b Fm(min_threads)p Fn(:)32 b(minim)n(um)c(n)n(um)n(b)r(er)
-g(of)f(threads.)0 2392 y Fk(8.5)135 b(Adv)-7 b(anced)44
-b(Con\014guration)i(for)f(SMTP)e(Serv)l(er)101 2628 y
-Fn(1.)f Fm(daemon_address)p Fn(:)g(address)32 b(for)h(daemon)f(to)h
-(listen)h(on;)i(this)d(should)g(not)g(b)r(e)h(used)f(in)g(normal)g(op)r
-(eration.)208 2727 y(Curren)n(t)23 b(\(preliminary\))h(format)g(is:)35
-b Fm(host:port)p Fn(,)21 b Fm(:port)i Fn(\(listen)h(on)g(0.0.0.0\))f
-Fm(host)g Fn(\(p)r(ort)h(defaults)h(to)f(8000\).)208
-2827 y(Up)k(to)f(16)g(addresses)896 2797 y Fi(1)959 2827
-y Fn(can)g(b)r(e)h(sp)r(eci\014ed.)37 b(See)28 b(the)g(notes)f(b)r(elo)
-n(w.)101 2992 y(2.)42 b Fm(flags)p Fn(:)243 3157 y(\(a\))f
-Fm(background)p Fn(:)33 b Fm(fork\(2\))25 b Fn(after)i(start;)g(this)h
-(should)f(not)h(b)r(e)g(used)g(in)f(normal)g(op)r(eration.)238
-3289 y(\(b\))42 b Fm(serialize_accept)p Fn(:)29 b(serialize)24
-b Fm(accept\(2\))d Fn(calls,)j(see)h(the)g(statethreads)f(do)r(cumen)n
-(tation)g([SGI01)o(])h(for)390 3388 y(details.)101 3553
-y(3.)42 b Fm(listen_queue)p Fn(:)30 b(length)23 b(of)h
-Fm(listen\(2\))19 b Fn(queue;)25 b(this)f(m)n(ust)g(not)f(b)r(e)h(used)
-g(in)g(normal)e(op)r(eration,)h(i.e.,)i(if)f(MCP)208
-3653 y(is)j(used.)101 3818 y(4.)42 b Fm(max_wait_thread)o(s)p
-Fn(:)31 b(maxim)n(um)c(n)n(um)n(b)r(er)h(of)f(w)n(aiting)g(threads.)101
-3983 y(5.)42 b Fm(min_wait_thread)o(s)p Fn(:)31 b(minim)n(um)d(n)n(um)n
-(b)r(er)g(of)f(w)n(aiting)g(threads.)101 4148 y(6.)42
-b Fm(module_timeout)p Fn(:)31 b(timeout)d(for)f(comm)n(unication)g
-(with)h(other)f(mo)r(dules.)101 4313 y(7.)42 b Fm(processes)p
-Fn(:)33 b(n)n(um)n(b)r(er)27 b(of)h(pro)r(cesses)e(to)h(start.)101
-4478 y(8.)42 b Fm(tls)p Fn(:)243 4643 y(\(a\))f Fm(DSA_cert_file)p
-Fn(:)32 b(\014le)c(with)g(DSA)g(certi\014cate)f(in)h(PEM)f(format.)238
-4775 y(\(b\))42 b Fm(DSA_key_file)p Fn(:)32 b(\014le)c(with)g(priv)-5
-b(ate)27 b(k)n(ey)g(for)g(DSA)i(certi\014cate)e(in)h(PEM)e(format.)101
-4940 y(9.)42 b Fm(wait_for_smar)p Fn(:)31 b(maxim)n(um)d(amoun)n(t)f
-(of)g(time)h(to)g(w)n(ait)f(for)g(a)g(reply)g(from)h(SMAR.)0
-5174 y(Notes:)44 b(only)32 b(one)f(of)g Fm(daemon_address)26
-b Fn(and)31 b Fm(pass_fd_socket)26 b Fn(m)n(ust)32 b(b)r(e)f(sp)r
-(eci\014ed.)49 b(In)32 b(normal)e(op)r(eration)h(it)h(is)0
-5274 y(almost)26 b(alw)n(a)n(ys)f Fm(pass_fd_socket)c
-Fn(b)r(ecause)27 b(the)g(SMTP)f(serv)n(er)f(cannot)i(bind)g(to)g
-(privileged)f(p)r(orts,)g(hence)h(the)g(\014le)0 5373
-y(descriptor)f(m)n(ust)i(b)r(e)g(passed)f(from)g(MCP)-7
-b(.)p 0 5442 1512 4 v 92 5495 a Fh(1)127 5519 y Fg(Compile)23
-b(time)h(option)h Fe(SS)p 860 5519 22 4 v 26 w(MAX)p
-991 5519 V 26 w(BIND)p 1157 5519 V 26 w(ADDRS)1848 5768
-y Fn(68)p eop end
-%%Page: 69 70
-TeXDict begin 69 69 bop 0 523 a Fk(8.6)135 b(Adv)-7 b(anced)44
-b(Con\014guration)i(for)f(SMTP)e(Clien)l(t)101 758 y
-Fn(1.)f Fm(connect_only_to)o Fn(:)35 b(Sp)r(ecify)29
-b(an)g(IP)g(address)f(to)h(whic)n(h)g(all)g(outgoing)f(mail)i(is)f(sen)
-n(t.)41 b(This)29 b(can)g(b)r(e)h(used)f(for)208 858
-y(testing)35 b(with)g(otherwise)f(real)g(data,)j(i.e.,)g(addresses,)e
-(b)n(y)g(running)f(an)h(SMTP)g(sink)2998 828 y Fi(2)3070
-858 y Fn(on)g(a)f(computer)h(and)208 958 y(sp)r(ecifying)25
-b(its)g(IP)g(address.)35 b(Then)25 b(all)g(mails)g(that)g(should)g(b)r
-(e)h(sen)n(t)f(via)g(SMTP)g(will)g(go)f(to)h(that)h(host)f(instead)208
-1057 y(of)j(the)g(addresses)e(determined)j(b)n(y)e(SMAR.)i(Note:)38
-b(it)28 b(is)g(nev)n(ertheless)f(a)h(go)r(o)r(d)f(idea)h(to)g(use)f
-(\014rew)n(all)g(rules)h(to)208 1157 y(prev)n(en)n(t)e(mail)i(going)e
-(out)i(to)f(the)h(in)n(ternet,)g(i.e.,)g(prohibit)f(connections)g(to)g
-(p)r(ort)h(25)f(to)g(external)g(hosts.)101 1323 y(2.)42
-b Fm(debug_level)p Fn(:)32 b(debug)27 b(lev)n(el)h(\(only)f(if)h
-(compiled)g(with)g(SMTPC)p 2315 1323 25 4 v 29 w(DEBUG\).)101
-1489 y(3.)42 b Fm(flags)p Fn(:)243 1655 y(\(a\))f Fm(read_QUIT_reply)p
-Fn(:)30 b(read)23 b(the)j(reply)e(to)h(the)g Fm(QUIT)e
-Fn(command)h(instead)h(of)g(just)g(closing)f(the)h(connection)390
-1755 y(after)i(sending)h(it.)238 1888 y(\(b\))42 b Fm
-(separate_final_do)o(t_)o(and)o(_Q)o(UI)o(T)p Fn(:)27
-b(send)32 b(the)h(\014nal)g(dot)g(of)f(a)g(message)g(and)g(the)h
-Fm(QUIT)e Fn(command)h(in)390 1987 y(di\013eren)n(t)k(TCP)e(pac)n(k)-5
-b(ages)34 b(ev)n(en)h(if)g Fm(PIPELINING)d Fn(is)j(o\013ered.)59
-b(This)35 b(can)g(a)n(v)n(oid)f(problems)g(with)i(some)390
-2087 y(brok)n(en)27 b(serv)n(ers)e(or)i(\014rew)n(alls.)247
-2220 y(\(c\))42 b Fm(talk_to_myself)p Fn(:)g(do)33 b(not)g(c)n(hec)n(k)
-f(whether)h(serv)n(er)e(greets)h(with)i(the)f(hostname)g(of)g(the)g
-(mac)n(hine)g(on)390 2319 y(whic)n(h)28 b(sm)n(tp)r(c)g(runs.)101
-2485 y(4.)42 b Fm(max_wait_thread)o(s)p Fn(:)31 b(maxim)n(um)c(n)n(um)n
-(b)r(er)h(of)f(w)n(aiting)g(threads.)101 2651 y(5.)42
-b Fm(min_wait_thread)o(s)p Fn(:)31 b(minim)n(um)d(n)n(um)n(b)r(er)g(of)
-f(w)n(aiting)g(threads.)101 2817 y(6.)42 b Fm(module_timeout)p
-Fn(:)31 b(timeout)d(for)f(comm)n(unication)g(with)h(QMGR.)101
-2983 y(7.)42 b Fm(remote_port)p Fn(:)51 b(p)r(ort)38
-b(to)f(whic)n(h)g(connections)g(should)g(b)r(e)g(made.)66
-b(Note:)57 b(if)37 b(m)n(ultiple)h(SMTP)f(clien)n(ts)h(are)208
-3083 y(sp)r(eci\014ed,)31 b(all)f(of)h(them)g Fd(must)e
-Fn(use)h(the)h(same)f(v)-5 b(alue)30 b(for)g Fm(remote_port)p
-Fn(.)41 b(Curren)n(tly)30 b(the)g(sc)n(heduler)g(requires)208
-3183 y(that)25 b(all)g(SMTP)h(clien)n(ts)f(b)r(eha)n(v)n(e)f(the)i
-(same.)36 b(If)26 b(di\013eren)n(t)f(p)r(orts)g(are)f(required,)h(then)
-h(those)f(m)n(ust)h(b)r(e)g(listed)f(in)208 3282 y(mailertable)h(en)n
-(tries.)101 3448 y(8.)42 b Fm(tls)p Fn(:)243 3614 y(\(a\))f
-Fm(DSA_cert_file)p Fn(:)32 b(\014le)c(with)g(DSA)g(certi\014cate)f(in)h
-(PEM)f(format.)238 3747 y(\(b\))42 b Fm(DSA_key_file)p
-Fn(:)32 b(\014le)c(with)g(priv)-5 b(ate)27 b(k)n(ey)g(for)g(DSA)i
-(certi\014cate)e(in)h(PEM)e(format.)p 0 5441 1512 4 v
-92 5495 a Fh(2)127 5519 y Fg(F)-6 b(or)23 b(example,)h
-Fe(statethreads/examples/)q(smt)q(ps2)1848 5768 y Fn(69)p
-eop end
-%%Page: 70 71
-TeXDict begin 70 70 bop 0 1199 a Fl(Chapter)65 b(9)0
-1668 y Fp(T)-19 b(uning)0 2203 y Fk(9.1)135 b(Size)45
-b(of)h(Queues,)f(Cac)l(hes,)h(and)f(Databases)0 2439
-y Fn(All)21 b(data)e(structures)h(in)g(QMGR)h(ha)n(v)n(e)e(some)g
-(maxim)n(um)i(size.)34 b(This)20 b(is)g(not)g(just)h(done)f(to)g(a)n(v)
-n(oid)f(resource)f(exhaustion)0 2538 y(in)23 b(high)g(load)f
-(situations)h(but)h(also)e(to)g(pro)n(vide)g(a)h(feedbac)n(k)f(lo)r(op)
-h(b)r(et)n(w)n(een)g(SMTP)g(serv)n(ers)e(\(pro)r(ducers\))h(and)h(SMTP)
-0 2638 y(clien)n(ts)35 b(\(consumers\).)59 b(This)35
-b(feedbac)n(k)g(lo)r(op)g(helps)g(to)g(a)n(v)n(oid)f(\015o)r(o)r(ding)h
-(the)g(system)g(with)h(mails)f(that)g(it)h(cannot)0 2738
-y(deliv)n(er)c(fast)h(enough.)51 b(The)33 b(incoming)f(queue)h
-(\(IQDB\))g(and)f(the)h(activ)n(e)f(queue)h(\(A)n(Q\))g(implemen)n(t)g
-(this)g(feedbac)n(k)0 2837 y(lo)r(op.)41 b(As)29 b(explained)g(in)g
-(Section)g(7.1)f(the)i(data)e(from)h(the)h(SMTP)e(serv)n(ers)f(is)i
-(stored)f(in)i(the)f(incoming)g(queue)g(\014rst)0 2937
-y(whic)n(h)e(has)g(a)g(\014xed)g(size.)37 b(If)28 b(more)e(data)h(is)g
-(pro)r(duced)g(than)h(tak)n(en)e(out)i(\(b)n(y)f(the)h(sc)n(heduler)e
-(in)n(to)h(the)h(activ)n(e)e(queue\))0 3036 y(the)d(queue)g(will)h
-(\014ll)f(up)h(and)f(the)g(QMGR)g(will)g(throttle)h(the)f(SMTP)g(serv)n
-(ers)e(b)n(y)i(dynamically)f(reducing)g(the)i(n)n(um)n(b)r(er)0
-3136 y(of)30 b(a)n(v)-5 b(ailable)29 b(threads.)44 b(Throttling)29
-b(the)i(SMTP)f(serv)n(ers)e(is)i(done)f(based)h(on)g(v)-5
-b(arious)29 b(resources,)f(e.g.,)j(IQDB,)f(A)n(Q,)0 3236
-y(a)n(v)-5 b(ailable)27 b(disk)g(space,)h(and)g(m)n(uc)n(h)f(more.)37
-b(Hence)28 b(b)n(y)g(limiting)g(the)h(size)e(of)h(IQDB)g(\(see)g
-(Section)g(3.8,)f(item)h(8a\))g(and)0 3335 y(of)k(course)e(the)j(maxim)
-n(um)e(n)n(um)n(b)r(er)h(of)g(threads)f(in)h(the)g(SMTP)g(serv)n(ers)e
-(the)i(incoming)f(\015o)n(w)h(of)g(messages)e(can)h(b)r(e)0
-3435 y(con)n(trolled.)59 b(The)36 b(size)f(of)g(IQDB)h(should)f(b)r(e)h
-(greater)d(than)j(the)g(maxim)n(um)f(n)n(um)n(b)r(er)g(of)h(threads)e
-(in)i(the)g(SMTP)0 3535 y(serv)n(ers)28 b(m)n(ultiplied)k(b)n(y)e(the)h
-(a)n(v)n(erage)c(n)n(um)n(b)r(er)k(of)f(recipien)n(ts,)h(otherwise)e
-(transaction)h(will)g(b)r(e)h(rejected)g(b)r(efore)f(all)0
-3634 y(threads)d(are)f(busy)-7 b(.)0 3787 y(The)30 b(activ)n(e)f(queue)
-h(should)f(b)r(e)h(large)f(enough)g(to)h(pro)n(vide)e(enough)h(w)n(ork)
-g(for)g(all)h(SMTP)f(clien)n(ts)h(\(threads\))g(and)f(it)0
-3887 y(m)n(ust)j(b)r(e)h(larger)d(than)j(the)f(largest)f(n)n(um)n(b)r
-(er)h(of)g(recipien)n(ts)g(accepted)g(b)n(y)g(a)f(single)h(transaction)
-f(\(see)h(Section)g(3.8,)0 3987 y(item)c(1\).)0 4313
-y Fk(9.2)135 b(Disk)46 b(I/O)0 4549 y Fn(In)36 b(most)g(MT)-7
-b(As)37 b(disk)f(I/O)f(is)h(the)h(limiting)f(factor)g(unless)g(sp)r
-(ecial)f(hardw)n(are)f(is)j(used)f(whic)n(h)g(emplo)n(ys)f(battery)0
-4648 y(bac)n(k)n(ed)24 b(RAM)j(cac)n(he)d(to)i(ac)n(hiev)n(e)e(high)h
-(I/O)g(rates)g(\(IOP:)g(I/O)g(op)r(erations\).)35 b(If)26
-b(m)n(ultiple)g(disks)f(are)g(a)n(v)-5 b(ailable,)24
-b(they)0 4748 y(can)j(b)r(e)h(used)g(to)f(spread)g(the)h(load.)36
-b(Disk)28 b(\014les)f(\(see)h(Section)f(2.4.1\))g(are)g(used)g(for:)101
-4974 y(1.)42 b(IBDB:)27 b(the)h(directory)f(can)g(b)r(e)h(link)n(ed)f
-(to)h(a)f(di\013eren)n(t)h(disk.)101 5137 y(2.)42 b(DEFEDB:)31
-b(the)h(base)f(directory)f(can)h(b)r(e)h(c)n(hanged)f(via)g(an)g
-(option)g(\(Section)h(3.8,)g(item)g(4a\),)g(as)f(w)n(ell)g(as)g(the)208
-5236 y(directory)26 b(for)h(log\014les)g(\(Section)g(3.8,)g(item)h
-(4b\).)101 5398 y(3.)42 b(CDB:)28 b(the)g(base)f(directory)g(can)g(b)r
-(e)i(c)n(hanged)d(via)i(an)f(option)h(\(see)g(Section)f(3.4,)h(item)g
-(2\).)37 b(Individual)28 b(sub)r(di-)208 5498 y(rectories)e(\(see)h
-(Section)h(2.4.1\))e(can)h(b)r(e)h(link)n(ed)g(to)f(di\013eren)n(t)h
-(disks.)1848 5768 y(70)p eop end
-%%Page: 71 72
-TeXDict begin 71 71 bop 0 523 a Fk(9.3)135 b(Pro)t(cesses)46
-b(and)e(Threads)0 758 y Fn(The)32 b(main)g(MeT)-7 b(A1)31
-b(pro)r(cesses)g(are)g(m)n(ulti-threaded.)49 b(Ho)n(w)n(ev)n(er,)31
-b(t)n(w)n(o)g(di\013eren)n(t)h(threading)f(implemen)n(tations)h(are)0
-858 y(used:)62 b(POSIX)39 b(threads)h(\(pthreads\))g(for)f(QMGR)h(and)g
-(SMAR)h(and)f(statethreads)f([SGI01)o(])h(for)g(SMTP)f(serv)n(er)0
-958 y(and)d(clien)n(t.)61 b(Statethreads)35 b(only)h(switc)n(h)f(b)r
-(et)n(w)n(een)h(threads)f(on)g(net)n(w)n(ork)g(I/O)g(op)r(erations)f
-(as)h(it)h(is)g(a)f(threading)0 1057 y(implemen)n(tation)29
-b(in)h(user)e(space)h(without)g(k)n(ernel)f(supp)r(ort.)42
-b(Hence)29 b(op)r(erations)f(that)h(can)g(tak)n(e)g(a)f(long)h(time,)h
-(e.g.,)0 1157 y(computations)g(for)g(asymmetric)g(cryptograph)n(y)e
-(\(as)i(required)f(during)h(the)h(ST)-7 b(AR)g(TTLS)31
-b(handshak)n(e\))f(or)f(in)i(some)0 1257 y(cases)23 b(ev)n(en)h(sync)n
-(hronous)f(disk)h(I/O,)g(will)g(not)h(just)g(stop)f(a)g(single)g
-(thread)g(but)h(the)f(en)n(tire)g(pro)r(cess.)35 b(If)25
-b(this)g(happ)r(ens)0 1356 y(it)33 b(is)g(p)r(ossible)f(to)g(start)g(m)
-n(ultiple)i(SMTP)e(serv)n(ers,)g(see)g(Section)h(8.5,)g(item)g(7.)51
-b(If)34 b(it)f(b)r(ecomes)f(necessary)f(to)h(start)0
-1456 y(m)n(ultiple)c(SMTP)g(clien)n(ts,)f(then)h(the)g(MCP)f(can)h(b)r
-(e)g(instructed)f(to)h(do)f(so,)g(see)g(Section)h(8.2,)f(item)h(1.)1848
-5768 y(71)p eop end
-%%Page: 72 73
-TeXDict begin 72 72 bop 0 1199 a Fl(Chapter)65 b(10)0
-1668 y Fp(F)-19 b(ormat)77 b(Sp)6 b(eci\014cations)0
-2203 y Fk(10.1)136 b(So)t(c)l(k)l(et)45 b(Map)0 2439
-y Fn(The)34 b(so)r(c)n(k)n(et)g(map)g(uses)g(a)f(simple)i
-(request/reply)d(proto)r(col)i(o)n(v)n(er)e(TCP)i(or)f(UNIX)i(domain)f
-(so)r(c)n(k)n(ets)f(to)h(query)g(an)0 2538 y(external)28
-b(serv)n(er.)40 b(Both)29 b(requests)g(and)g(replies)f(are)g(text)i
-(based)f(and)g(enco)r(ded)g(as)f(netstrings,)h(i.e.,)h(a)f(string)f
-(\\hello)0 2638 y(there")f(b)r(ecomes:)0 2874 y Fm(11:hello)40
-b(there,)0 3110 y Fn(Note:)d(neither)28 b(requests)e(nor)h(replies)g
-(end)h(with)g(CRLF.)0 3264 y(The)g(request)f(consists)f(of)i(the)g
-(database)e(map)i(name)f(and)h(the)g(lo)r(okup)f(k)n(ey)g(separated)f
-(b)n(y)h(a)g(space)g(c)n(haracter:)0 3417 y Fd(mapname)i
-Fn(')e(')h Fd(key)0 3570 y Fn(The)g(serv)n(er)d(resp)r(onds)i(with)h(a)
-f(status)h(indicator)f(and)g(the)h(result)f(\(if)i(an)n(y\):)0
-3723 y Fd(status)e Fn(')g(')h Fd(r)l(esult)0 3877 y Fn(The)g(status)f
-(indicator)g(is)g(one)g(of)h(the)g(follo)n(wing)f(upp)r(er)g(case)g(w)n
-(ords:)50 4024 y Fm(OK)360 b Fn(the)28 b(k)n(ey)f(w)n(as)g(found,)h
-(result)f(con)n(tains)g(the)h(lo)r(ok)n(ed)e(up)i(v)-5
-b(alue)50 4124 y Fm(NOTFOUND)96 b Fn(the)28 b(k)n(ey)f(w)n(as)g(not)g
-(found,)h(the)g(result)f(is)h(empt)n(y)50 4224 y Fm(TEMP)272
-b Fn(a)27 b(temp)r(orary)g(failure)g(o)r(ccured)50 4323
-y Fm(TIMEOUT)140 b Fn(a)27 b(timeout)h(o)r(ccured)f(on)h(the)g(serv)n
-(er)d(side)50 4423 y Fm(PERM)272 b Fn(a)27 b(p)r(ermanen)n(t)h(failure)
-f(o)r(ccured)0 4577 y(In)h(case)f(of)g(errors)e(\(status)j
-Fm(TEMP)p Fn(,)e Fm(TIMEOUT)f Fn(or)i Fm(PERM)p Fn(\))f(the)i(result)f
-(\014eld)h(ma)n(y)f(con)n(tain)g(an)g(explanatory)f(message.)0
-4730 y(Example)h(replies:)0 4967 y Fm(31:OK)42 b(resolved.addres)o(s@)o
-(exa)o(mp)o(le.)o(co)o(m,)0 5203 y Fn(in)28 b(case)f(of)g(a)g
-(successful)h(lo)r(okup,)f(or:)0 5439 y Fm(8:NOTFOUND,)1848
-5768 y Fn(72)p eop end
-%%Page: 73 74
-TeXDict begin 73 73 bop 0 523 a Fn(in)28 b(case)f(the)h(k)n(ey)e(w)n
-(as)h(not)h(found,)g(or:)0 759 y Fm(55:TEMP)41 b(this)h(text)g
-(explains)e(that)i(we)h(had)f(a)h(temporary)d(failure,)0
-996 y Fn(in)28 b(case)f(of)g(a)g(failure.)0 1324 y Fk(10.2)136
-b(F)-11 b(ormat)45 b(of)g(Session/T)-11 b(ransaction)46
-b(Iden)l(ti\014ers)0 1559 y Fn(The)24 b(format)f(of)h(session)f(and)g
-(transaction)g(iden)n(ti\014ers)g(is)h(sp)r(eci\014ed)g(in)g
-Fm(include/sm/mta.h)p Fn(.)29 b(F)-7 b(or)24 b(the)g(SMTP)f(serv)n(er)0
-1659 y(it)30 b(consists)f(of)h(a)f(leading)h('S',)g(a)f(64)g(bit)h
-(coun)n(ter)f(and)h(an)f(8)h(bit)g(\\pro)r(cess")e(iden)n(ti\014er,)i
-(b)r(oth)g(of)g(whic)n(h)g(are)f(prin)n(ted)0 1758 y(in)g(hexadecimal)g
-(format.)41 b(F)-7 b(or)28 b(the)i(SMTP)f(clien)n(t)g(it)g(consists)g
-(of)g(a)f(leading)h('C',)g(an)g(8)g(bit)h(\\pro)r(cess")d(iden)n
-(ti\014er,)i(a)0 1858 y(32)e(bit)h(coun)n(ter,)f(and)g(a)g(32)g(bit)h
-(thread)f(index,)h(all)f(of)h(whic)n(h)f(are)g(prin)n(ted)g(in)h
-(hexadecimal)f(format.)0 2011 y(Examples:)36 b Fm(S00000000407CE49)o
-(20)o(0)p Fn(,)22 b Fm(C010000137D0000)o(000)o(0)p Fn(.)0
-2165 y(SMTP)35 b(serv)n(er)e(session/transaction)g(iden)n(ti\014ers)h
-(are)h(unique)g(un)n(til)h(the)f(64)f(bit)i(coun)n(ter)f(wraps)f
-(around,)i(SMTP)0 2264 y(clien)n(t)28 b(session/transaction)c(iden)n
-(ti\014ers)k(are)e(unique)i(only)f(within)h(a)g(single)f(in)n(v)n(o)r
-(cation)f(of)i(QMGR.)0 2417 y(Note:)36 b(the)25 b(format)f(ma)n(y)h(c)n
-(hange)e(b)r(et)n(w)n(een)i(di\013eren)n(t)g(release)f(of)h(MeT)-7
-b(A1,)25 b(hence)g(the)h(iden)n(ti\014ers)e(should)h(b)r(e)g(consid-)0
-2517 y(ered)i(opaque.)0 2845 y Fk(10.3)136 b(Log\014le)45
-b(F)-11 b(ormat)0 3081 y Fn(The)30 b(general)e(format)h(of)g(en)n
-(tries)g(in)h(a)f(log\014le)g(is)g(a)g(sequence)g(of)h(named)f
-(\014elds)h(whic)n(h)f(are)g(separated)f(b)n(y)h(commas.)0
-3180 y(Eac)n(h)c(\014eld)i(consists)f(of)g(a)g(name,)h(an)f(equal)g
-(sign,)g(and)h(a)f(v)-5 b(alue.)36 b(If)27 b(the)g(v)-5
-b(alue)26 b(is)h(a)f(text)h(\014eld)f(that)h(is)g(receiv)n(ed)e(from)0
-3280 y(an)k(external)f(\(un)n(trusted\))i(source,)f(then)g(all)g
-(non-prin)n(table)f(c)n(haracters,)g(commas,)h(and)g(p)r(ercen)n(t)g
-(signs)f(are)g(sho)n(wn)0 3380 y(as)f(their)g(t)n(w)n(o)g(digit)h
-(hexadecimal)f(ASCI)r(I)h(represen)n(tation)e(with)i(a)f(leading)g(p)r
-(ercen)n(t)h(sign.)36 b(F)-7 b(or)27 b(example,)g(the)h(text)0
-3599 y Fm(550)42 b(5.7.1)g(no,)g(not)h(now,)e(99\045)i(usage)0
-3819 y Fn(is)27 b(enco)r(ded)h(as)0 4039 y Fm(550)42
-b(5.7.1)g(no\0452C)f(not)i(now\0452C)e(99\04525)g(usage)0
-4258 y Fn(This)29 b(enco)r(ding)f(allo)n(ws)f(a)i(log\014le)f(analyzer)
-f(to)i(use)f(the)h(comma)f(sym)n(b)r(ol)h(as)f(a)g(delimiter)h(of)g
-(\014elds)g(without)g(ha)n(ving)0 4358 y(to)34 b(p)r(erform)g
-(complicated)g(parsing,)h(e.g,)g(the)g(Unix)f Fm(awk)g
-Fn(utilit)n(y)g(can)g(b)r(e)h(used)f(with)h(comma)f(as)f(\014eld)i
-(separator.)0 4457 y(Note:)42 b(suggestions)28 b(for)i(a)f(b)r(etter)i
-(enco)r(ding)f(or)f(di\013eren)n(t)h(solution)f(for)h(the)g(problem)g
-(are)f(w)n(elcome)g(\(more)h(details)0 4557 y(can)d(b)r(e)h(found)g(in)
-g([A\031m)n(b]\).)0 4710 y(Log\014les)e(use)h(the)g(iden)n(ti\014ers)g
-(describ)r(ed)f(earlier)g(suc)n(h)h(that)g(transactions)e(and)i
-(sessions)f(can)g(b)r(e)i(easily)e(recognized.)0 4810
-y(F)-7 b(or)27 b(the)h(follo)n(wing)e(examples)h(log\014le)g(en)n
-(tries)g(ha)n(v)n(e)g(b)r(een)h(sligh)n(tly)f(edited)h(and)f(line)h
-(breaks)e(ha)n(v)n(e)h(b)r(een)h(inserted.)0 4963 y(Here)f(is)h(one)f
-(example)g(of)h(a)f(session)f(in)i(an)g(SMTP)f(serv)n(er:)0
-5199 y Fm(ss_sess=S0000000)o(040)o(7E)o(AE)o(380)o(0,)37
-b(client_ipv4=127.)o(0.0)o(.1)o(,)87 5299 y(client_name=local)o(ho)o
-(st)o(.en)o(dm)o(ail)o(.o)o(rg.)0 5399 y(ss_sess=S0000000)o(040)o(7E)o
-(AE)o(380)o(0,)g(where=connection)o(,)h(starttls=succes)o(sfu)o(l)0
-5498 y(ss_sess=S0000000)o(040)o(7E)o(AE)o(380)o(0,)f(ss_ta=S000000004)o
-(07E)o(AE)o(4E)o(00,)1848 5768 y Fn(73)p eop end
-%%Page: 74 75
-TeXDict begin 74 74 bop 87 523 a Fm(mail=<SENDER@meta)o(1.)o(or)o(g>,)
-37 b(stat=0)0 623 y(ss_sess=S0000000)o(040)o(7E)o(AE)o(380)o(0,)g
-(ss_ta=S000000004)o(07E)o(AE)o(4E)o(00,)87 722 y(rcpt=<RECIPIENT@m)o
-(et)o(a1)o(.or)o(g>)o(,)h(idx=0,)j(stat=0)0 822 y(ss_sess=S0000000)o
-(040)o(7E)o(AE)o(380)o(0,)c(ss_ta=S000000004)o(07E)o(AE)o(4E)o(00,)87
-922 y(rcpt=<SOMEONE@SOM)o(E.)o(DO)o(MAI)o(N>)o(,)h(idx=1,)j(stat=0)0
-1021 y(ss_sess=S0000000)o(040)o(7E)o(AE)o(380)o(0,)c(ss_ta=S000000004)o
-(07E)o(AE)o(4E)o(00,)87 1121 y(msgid=<2004091605)o(04)o(57)o(.GG)o(54)o
-(961)o(@e)o(ndm)o(ai)o(l.)o(org)o(>,)g(size=1177,)i(stat=0)0
-1357 y Fn(The)31 b(\014rst)g(en)n(try)g(sho)n(ws)f(a)g(successful)h
-(session)f(creation)g(including)i(the)f(IPv4)f(address)g(and)h(the)h
-(hostname)e(of)h(the)0 1457 y(clien)n(t.)48 b(The)31
-b(second)g(en)n(try)f(indicates)h(that)h(ST)-7 b(AR)g(TTLS)32
-b(has)e(b)r(een)i(used.)48 b(A)31 b(new)g(transaction)f(is)h(sho)n(wn)g
-(in)g(the)0 1556 y(third)36 b(en)n(try)e(and)i(t)n(w)n(o)e(recipien)n
-(ts)h(are)f(giv)n(en)h(thereafter)g(\(along)f(with)i(the)g(index)f
-Fm(idx)p Fn(\).)59 b(The)36 b(last)f(en)n(try)g(sho)n(ws)0
-1656 y(that)28 b(the)h(transaction)d(w)n(as)h(successful)h(\()p
-Fm(status=0)p Fn(;)d(0)j(is)g(used)g(instead)f(of)h(250)f(or)g(other)h
-(SMTP)f(reply)h(co)r(des)f(that)0 1756 y(indicate)h(success\))f(and)g
-(the)h(size)f(of)h(the)g(receiv)n(ed)e(mail)i(\(in)g(b)n(ytes\))g(as)e
-(w)n(ell)i(as)f(its)h(Message-Id.)0 1909 y(Here)f(is)h(one)f(example)g
-(of)h(a)f(session)f(in)i(an)g(SMTP)f(clien)n(t:)0 2145
-y Fm(da_sess=C0100000)o(6C8)o(00)o(00)o(000)o(2,)37 b(status=connected)
-o(,)h(port=25,)i(addr=64.81.247.3)o(6)0 2245 y(da_sess=C0100000)o(6C8)o
-(00)o(00)o(000)o(2,)d(where=connection)o(,)h(starttls=succes)o(sfu)o(l)
-0 2344 y(da_sess=C0100000)o(6C8)o(00)o(00)o(000)o(2,)f
-(da_ta=C01000006C)o(900)o(00)o(00)o(02,)87 2444 y(ss_ta=S0000000040)o
-(7E)o(AE)o(4E0)o(0,)g(mail=<SENDER@met)o(a1.)o(or)o(g>)o(,)h(stat=0,)87
-2544 y(reply=250)i(2.5.0)i(MAIL)f(command)g(succeeded)0
-2643 y(da_sess=C0100000)o(6C8)o(00)o(00)o(000)o(2,)c(da_ta=C01000006C)o
-(900)o(00)o(00)o(02,)87 2743 y(ss_ta=S0000000040)o(7E)o(AE)o(4E0)o(0,)g
-(rcpt=<RECIPIENT@)o(met)o(a1)o(.o)o(rg>)o(,)g(stat=0,)87
-2842 y(reply=250)j(2.1.5)i(RCPT)f(ok)0 2942 y(da_sess=C0100000)o(6C8)o
-(00)o(00)o(000)o(2,)c(da_ta=C01000006C)o(900)o(00)o(00)o(02,)87
-3042 y(ss_ta=S0000000040)o(7E)o(AE)o(4E0)o(0,)g(where=final_dot,)g
-(size=1177,)i(stat=0)0 3278 y Fn(This)32 b(is)g(v)n(ery)e(similar)h(to)
-h(the)g(format)g(of)f(the)i(en)n(tries)e(en)n(tries)g(in)h(the)g(SMTP)g
-(serv)n(er)e(and)i(should)f(not)h(require)f(an)0 3378
-y(explanation.)j(In)23 b(addition)f(to)h(the)f(deliv)n(ery)g(agen)n(t)f
-(session)h(and)g(transaction)f(ids)h(\()p Fm(da)p 2763
-3378 27 4 v 31 w(sess)f Fn(and)h Fm(da)p 3235 3378 V
-31 w(ta)p Fn(\))g(the)h(SMTP)0 3477 y(serv)n(er)28 b(transaction)g(id)i
-(\()p Fm(ss)p 903 3477 V 30 w(ta)p Fn(\))f(is)h(logged)e(to)r(o.)42
-b(This)30 b(mak)n(es)e(it)i(simple)g(to)f(trac)n(k)f(a)h(message)f
-(through)h(the)h(MT)-7 b(A.)0 3577 y(Ob)n(viously)31
-b Fm(ss)p 488 3577 V 30 w(ta)g Fn(can)h(b)r(e)h(used)f(for)f(m)n
-(ultiple)i(outgoing)d(messages)h(if)h(the)h(incoming)e(message)g(has)g
-(b)r(een)i(sen)n(t)f(to)0 3676 y(m)n(ultiple)k(recipien)n(ts)f(\(ma)n
-(yb)r(e)g(indirectly)h(via)e(an)i(alias\),)g(hence)g(this)g(is)f(not)g
-(a)g(unique)h(iden)n(ti\014er)f(in)h(the)g(SMTP)0 3776
-y(clien)n(t)28 b(log.)0 3929 y(QMGR)g(can)f(also)f(log)h(the)h(dela)n
-(y)f(time)h(for)f(eac)n(h)g(recipien)n(t,)g(e.g.,)0 4149
-y Fm(func=q_upd_rcpt_)o(ok,)37 b(rcpt_id=S0000000)o(04)o(07)o(EAE)o(4E)
-o(00-)o(00)o(00)o(00,)87 4249 y(rcpt=<RECIPIENT@m)o(et)o(a1)o(.or)o(g>)
-o(,)h(xdelay=0,)h(delay=1)0 4468 y Fn(where)27 b Fm(xdelay)e
-Fn(is)j(the)g(time)g(for)f(this)h(deliv)n(ery)e(attempt,)j(and)e
-Fm(delay)f Fn(is)h(the)h(total)g(deliv)n(ery)e(time.)0
-4796 y Fk(10.4)136 b(F)-11 b(ormat)45 b(of)g(Receiv)l(ed)h(Header)0
-5032 y Fn(The)28 b(format)f(of)g(the)h Fm(Received:)33
-b Fn(header)27 b(added)h(b)n(y)f(the)h(SMTP)f(serv)n(er)f(is)i(sp)r
-(eci\014ed)f(in)h Fm(smtps/smtps.c)p Fn(.)0 5268 y Fm(Received:)40
-b(from)i(EHLO-NAME)e(\(CLIENT-NAME)e([CLIENT-ADDR]\))349
-5368 y(by)k(HOST-NAME)e(\(SM-X-VERSION\))e(with)k(PROTOCOL)349
-5467 y(id)g(SMTP-TA-ID;)d(DATE)1848 5768 y Fn(74)p eop
-end
-%%Page: 75 76
-TeXDict begin 75 75 bop 0 523 a Fn(where)31 b Fm(PROTOCOL)e
-Fn(is)i(one)g(of)h Fm(ESMTP)p Fn(,)e Fm(ESMTPS)p Fn(,)f
-Fm(ESMTPA)p Fn(,)g Fm(ESMTPSA)p Fn(,)g(or)i Fm(SMTP)f
-Fn([New04)o(].)49 b(If)32 b(ST)-7 b(AR)g(TTLS)33 b(is)e(activ)n(e,)0
-623 y(then)36 b Fm(\(TLS=TLSVERSION,)h(cipher=CIPHERSUI)o(TE)o(,)h
-(bits=CIPHERBITS)o(,)g(verify=VERIFYRE)o(SU)o(LT\))29
-b Fn(is)35 b(placed)0 722 y(b)r(efore)21 b Fm(id)p Fn(,)h(where)g
-(TLSVERSION)f(is)h(the)g(TLS)f(proto)r(col)g(v)n(ersion,)g(e.g.,)h
-(TLSv1,)h(SSLv3,)f(SSLv2;)h(CIPHERSUITE)0 822 y(is)d(the)h(cipher)g
-(suite)f(that)h(w)n(as)f(in)g(use,)i(e.g.,)g(AES256-SHA,)d
-(EDH-DSS-DES-CBC3-SHA,)h(EDH-RSA-DES-CBC-)0 922 y(SHA,)32
-b(CIPHERBITS)e(denotes)h(the)h(e\013ectiv)n(e)f(k)n(eylength)f(\(in)i
-(bits\))g(of)f(the)g(symmetric)g(encryption)g(algorithm)f(of)0
-1021 y(the)e(TLS)g(connection,)f(and)g(VERIFYRESUL)-7
-b(T)28 b(is)g(one)f(of)g(the)h(follo)n(wing:)50 1169
-y(OK)159 b(v)n(eri\014cation)26 b(succeeded.)50 1269
-y(NO)162 b(no)27 b(cert)g(presen)n(ted.)50 1368 y(NOT)102
-b(no)27 b(cert)g(requested.)50 1468 y(F)-9 b(AIL)100
-b(cert)27 b(presen)n(ted)g(but)h(could)f(not)h(b)r(e)g(v)n(eri\014ed,)f
-(e.g.,)g(the)h(signing)f(CA)h(cert)f(is)h(missing.)0
-1622 y(Note:)40 b(the)30 b(name)f(of)h(the)f(clien)n(t)h(is)f(only)g
-(sho)n(wn)g(if)h(the)f(access)g(map)g(feature)g(is)g(activ)-5
-b(ated)29 b(\(see)h(Section)f(3.10,)g(3b\),)0 1722 y(otherwise)e(the)h
-(time-consuming)f(DNS)h(lo)r(okups)f(\(PTR)h(and)f(A)h(records\))e(are)
-h(not)g(p)r(erformed.)0 2050 y Fk(10.5)136 b(F)-11 b(ormat)45
-b(of)g(DSNs)0 2285 y Fn(DSNs)26 b(\()p Fd(b)l(ounc)l(es)p
-Fn(\))f(are)f(curren)n(tly)g(not)g(complian)n(t)h(to)g(RF)n(C)g
-(1891\013,)f(ho)n(w)n(ev)n(er,)f(a)h(con\014guration)g(option)g
-(\(Section)h(3.8,)0 2385 y(item)36 b(5\(b\)ii\))g(can)f(b)r(e)g(set)h
-(to)f(send)g(DSNs)h(in)g(MIME)f(format,)i(i.e.,)g Fm(Content-Type:)82
-b(multipart/mixed)29 b Fn(with)0 2484 y Fm(Content-Type:)82
-b(message/rfc822)22 b Fn(for)27 b(the)h(original)e(message.)35
-b(The)28 b(format)f(lo)r(oks)g(lik)n(e)g(this:)0 2721
-y Fm(From:)42 b(Mailer-Daemon@H)o(OS)o(T.N)o(AM)o(E)0
-2820 y(Subject:)e(Undeliverable)e(mail)0 3020 y(A)43
-b(mail)f(from)g(you)g(could)g(not)g(be)h(delivered.)c(See)k(below)e
-(for)i(details.)0 3256 y Fn(and)27 b(then)i(a)e(list)h(of)f(recipien)n
-(ts)g(and)h(the)g(reasons)d(for)i(the)h(failure,)g(e.g.,)0
-3492 y Fm(Recipient:)0 3592 y(<user@example.co)o(m>)0
-3691 y(Remote-MTA:)0 3791 y(10.2.3.4)0 3891 y(Reason:)0
-3990 y(550)42 b(5.7.1)g(<user@example.co)o(m>)o(...)37
-b(Access)k(denied)0 4090 y(during)g(RCPT)1848 5768 y
-Fn(75)p eop end
-%%Page: 76 77
-TeXDict begin 76 76 bop 0 1199 a Fl(Chapter)65 b(11)0
-1668 y Fp(Setup)78 b(for)g(ST)-19 b(AR)g(TTLS)0 2203
-y Fk(11.1)136 b(Certi\014cates)46 b(for)f(ST)-11 b(AR)g(TTLS)0
-2439 y Fn(When)25 b(acting)g(as)f(a)h(serv)n(er,)e(MeT)-7
-b(A1)25 b(requires)f(X.509)g(certi\014cates)g(to)h(supp)r(ort)f(ST)-7
-b(AR)g(TTLS:)26 b(one)e(as)h(certi\014cate)f(for)0 2538
-y(the)30 b(serv)n(er,)f(at)h(least)f(one)g(ro)r(ot)g(CA)i(\()p
-Fm(CAcert_file)p Fn(\),)26 b(i.e.,)31 b(a)e(certi\014cate)g(that)i(is)e
-(used)h(to)g(sign)f(other)g(certi\014cates,)0 2638 y(and)f(a)f(path)h
-(to)g(a)f(directory)g(whic)n(h)h(con)n(tains)f(certs)g(of)h(other)f
-(CAs)h(\()p Fm(CAcert_directory)p Fn(\).)k(The)c(\014le)g(sp)r
-(eci\014ed)g(via)0 2738 y Fm(CAcert_file)23 b Fn(can)k(con)n(tain)g
-(sev)n(eral)e(certi\014cates)i(of)g(CAs.)37 b(The)28
-b(DNs)f(of)h(these)f(certi\014cates)g(are)f(sen)n(t)h(to)h(the)g(clien)
-n(t)0 2837 y(during)c(the)h(TLS)g(handshak)n(e)f(\(as)g(part)g(of)h
-(the)g(Certi\014cateRequest\))g(as)f(the)h(list)g(of)f(acceptable)h
-(CAs.)35 b(Ho)n(w)n(ev)n(er,)24 b(do)0 2937 y(not)k(list)f(to)r(o)h
-(man)n(y)f(ro)r(ot)g(CAs)g(in)h(that)g(\014le,)g(otherwise)e(the)i(TLS)
-g(handshak)n(e)e(ma)n(y)h(fail;)h(e.g.,)0 3154 y Fm(error:14094417:S)o
-(SL)37 b(routines:SSL3_REA)o(D_)o(BY)o(TES)o(:)0 3253
-y(sslv3)42 b(alert)f(illegal)g(parameter:s3_pkt)o(.c)o(:9)o(64:)o(SS)o
-(L)d(alert)j(number)g(47)0 3470 y Fn(Y)-7 b(ou)32 b(should)g(probably)f
-(put)i(only)e(the)i(CA)f(cert)g(in)n(to)g(that)g(\014le)h(that)f
-(signed)g(y)n(our)e(o)n(wn)i(cert\(s\),)h(or)e(at)h(least)g(only)0
-3570 y(those)k(y)n(ou)g(trust.)63 b(The)36 b(directory)f(sp)r
-(eci\014ed)i(via)f Fm(CAcert_directory)30 b Fn(m)n(ust)36
-b(con)n(tain)g(the)h(hashes)e(of)i(eac)n(h)e(CA)0 3670
-y(certi\014cate)e(as)h(\014lenames)f(\(or)h(as)f(links)h(to)g(them\).)
-56 b(Sym)n(b)r(olic)34 b(links)g(can)g(b)r(e)g(generated)f(with)h(the)g
-(follo)n(wing)f(t)n(w)n(o)0 3769 y(\(Bourne\))27 b(shell)h(commands:)0
-3986 y Fm(C=FileName_of_CA)o(_Ce)o(rt)o(if)o(ica)o(te)0
-4086 y(ln)43 b(-s)g($C)f(`openssl)f(x509)g(-noout)h(-hash)f(<)i($C`.0)0
-4303 y Fn(An)30 b(X.509)e(certi\014cate)g(is)h(also)g(required)f(for)g
-(authen)n(tication)h(in)h(clien)n(t)f(mo)r(de,)h(ho)n(w)n(ev)n(er,)d
-(MeT)-7 b(A1)29 b(will)h(alw)n(a)n(ys)d(use)0 4402 y(ST)-7
-b(AR)g(TTLS)35 b(when)f(o\013ered)g(b)n(y)g(a)f(serv)n(er.)55
-b(The)35 b(clien)n(t)f(and)g(serv)n(er)e(certi\014cates)i(can)f(b)r(e)i
-(iden)n(tical.)56 b(Certi\014cates)0 4502 y(can)29 b(b)r(e)h(obtained)f
-(from)h(a)f(certi\014cate)g(authorit)n(y)f(or)h(created)g(with)h(the)g
-(help)g(of)f(Op)r(enSSL.)h(The)g(required)e(format)0
-4602 y(for)e(certi\014cates)f(and)h(priv)-5 b(ate)26
-b(k)n(eys)f(is)h(PEM.)f(T)-7 b(o)26 b(allo)n(w)f(for)g(automatic)h
-(startup)g(of)g(MeT)-7 b(A1,)26 b(priv)-5 b(ate)26 b(k)n(eys)f(m)n(ust)
-h(b)r(e)0 4701 y(stored)d(unencrypted.)36 b(The)24 b(k)n(eys)g(are)f
-(only)h(protected)g(b)n(y)f(the)i(p)r(ermissions)e(of)i(the)f(\014le)g
-(system,)h(hence)f(they)h(should)0 4801 y(not)31 b(b)r(e)h(readable)e
-(b)n(y)g(an)n(y)n(one)g(but)i(the)f(o)n(wner.)47 b(If)31
-b(serv)n(er)f(and)h(clien)n(t)g(share)f(the)i(same)e(k)n(ey)h(it)g(is)g
-(ok)g(to)g(mak)n(e)f(the)0 4900 y(k)n(ey)d(group)f(readable)h(ho)n(w)n
-(ev)n(er.)34 b(Nev)n(er)27 b(mak)n(e)g(a)g(priv)-5 b(ate)27
-b(k)n(ey)g(a)n(v)-5 b(ailable)27 b(to)g(a)g(third)h(part)n(y)-7
-b(.)0 5133 y Fm(-r--r--r--)83 b(1)43 b(root)216 b(wheel)304
-b(CAcert.pem)0 5233 y(-r--r--r--)83 b(1)43 b(meta1s)128
-b(meta1c)260 b(smcert.pem)0 5333 y(-r--r-----)83 b(1)43
-b(meta1s)128 b(meta1c)260 b(smkey.pem)0 5432 y(drwxr-xr-x)83
-b(2)43 b(root)216 b(wheel)304 b(certs/)1848 5768 y Fn(76)p
-eop end
-%%Page: 77 78
-TeXDict begin 77 77 bop 0 1199 a Fl(Chapter)65 b(12)0
-1668 y Fp(More)78 b(Ab)6 b(out)79 b(Con\014guration,)0
-1917 y(Compilation,)d(Debugging,)i(and)0 2166 y(T)-19
-b(esting)0 2701 y Fk(12.1)136 b(Compile)46 b(Time)f(Options)0
-2937 y Fn(There)22 b(are)g(sev)n(eral)f(compile)i(time)g(parameters)e
-(whic)n(h)i(migh)n(t)g(b)r(e)g(useful)g(in)g(some)g(situations)f(that)h
-(are)f(listed)h(b)r(elo)n(w.)0 3036 y(Compile)k(time)i(options)e(to)g
-(turn)h(on)f(additional)g(debugging)g(are)f(listed)i(in)g(section)f
-(12.1.5.)0 3317 y Fj(12.1.1)113 b(Generic)0 3524 y Fn(T)-7
-b(o)18 b(further)g(restrict)g(the)h(length)f(of)g Fm(syslog\(3\))d
-Fn(messages)i(the)i(compile)f(time)h(options)f Fm(MTA_LOG_LEN)13
-b Fn(and)19 b Fm(MTA_LOG_LEN_MAX)0 3623 y Fn(can)k(b)r(e)g(used)g
-(\(see)h Fm(libmta/log.c)18 b Fn(for)k(the)i(defaults\).)36
-b(The)23 b(macro)f Fm(MTA_LOG_LEN_MAX)17 b Fn(sets)23
-b(the)h(maxim)n(um)f(length)0 3723 y(of)35 b(a)g Fm(syslog\(3\))c
-Fn(message,)k Fm(MTA_LOG_LEN)c Fn(needs)k(only)f(b)r(e)i(set)f(if)g
-Fm(MTA_LOG_LEN_MAX)29 b Fn(is)35 b(less)g(than)g(the)g(default)0
-3823 y(v)-5 b(alue)27 b(of)h Fm(MTA_LOG_LEN)p Fn(.)0
-4103 y Fj(12.1.2)113 b(QMGR)0 4310 y Fn(T)-7 b(o)38 b(enable)g(QMGR)g
-(statistics,)i(e.g.,)h(n)n(um)n(b)r(er)d(of)g(transactions)e(and)i
-(recipien)n(ts)g(that)g(ha)n(v)n(e)f(b)r(een)i(handled,)i(set)0
-4410 y Fm(QMGR)p 181 4410 27 4 v 30 w(STATS)p Fn(.)0
-4690 y Fj(12.1.3)113 b(SMAR)0 4897 y Fn(The)33 b(address)e(resolv)n(er)
-g(imp)r(oses)h(limits)h(on)f(the)h(n)n(um)n(b)r(er)g(of)f(MX)h(and)g(A)
-g(records)e(that)i(it)g(accepts)f(when)h(it)g(do)r(es)0
-4997 y(routing)27 b(lo)r(okups.)36 b(These)27 b(macros)f(are:)125
-5191 y Fc(\017)41 b Fm(MTA)p 345 5191 V 30 w(DNS)p 507
-5191 V 30 w(MX)p 625 5191 V 30 w(MAX)p Fn(:)27 b(maxim)n(um)g(n)n(um)n
-(b)r(er)h(of)f(MX)h(records)e(for)h(a)g(domain,)125 5345
-y Fc(\017)41 b Fm(MTA)p 345 5345 V 30 w(DNS)p 507 5345
-V 30 w(A)p 581 5345 V 31 w(PER)p 744 5345 V 30 w(MX)p
-862 5345 V 30 w(MAX)p Fn(:)27 b(maxim)n(um)g(n)n(um)n(b)r(er)h(of)f(A)h
-(records)e(for)h(one)g(MX)h(record,)125 5498 y Fc(\017)41
-b Fm(MTA)p 345 5498 V 30 w(DNS)p 507 5498 V 30 w(A)p
-581 5498 V 31 w(MAX)p Fn(:)26 b(maxim)n(um)i(n)n(um)n(b)r(er)f(of)h(A)g
-(records)d(for)j(a)f(domain)g(\(after)g(p)r(erforming)g(MX)h(lo)r
-(okups\).)1848 5768 y(77)p eop end
-%%Page: 78 79
-TeXDict begin 78 78 bop 0 523 a Fj(12.1.4)113 b(SMTPS)125
-730 y Fc(\017)41 b Fm(SS)p 301 730 27 4 v 30 w(EHLO)p
-507 730 V 30 w(ACCESS)p 801 730 V 29 w(CHK)27 b Fn(enables)h(lo)r
-(okups)g(of)g(the)h Fm(EHLO)p Fn(/)p Fm(HELO)c Fn(argumen)n(t)i(in)i
-(the)g(access)e(map)h(\(Section)h(3.10,)208 830 y(3b\))e(using)g(the)h
-(tag)f Fm(ehlo:)p Fn(.)35 b(This)28 b(m)n(ust)g(b)r(e)g(enabled)f(at)g
-(run)n(time)h(via)f(the)h(\015ag)f Fm(check)p 3023 830
-V 29 w(ehlo)p Fn(.)0 1116 y Fj(12.1.5)113 b(Debugging)38
-b(Compile)g(Time)g(Options)0 1322 y Fn(There)27 b(are)g(sev)n(eral)f
-(compile)h(time)h(parameters)e(to)i(supp)r(ort)f(debugging.)36
-b(An)28 b(option)g(that)f(applies)h(to)f(all)h(mo)r(dules)0
-1422 y(\(as)e(they)g(use)g(the)h(same)f(libraries\))f(is)h
-Fm(MTA)p 1378 1422 V 30 w(HEAP)p 1584 1422 V 30 w(CHECK)e
-Fn(whic)n(h)i(turns)g(on)g(v)-5 b(arious)25 b(heap)h(c)n(hec)n(ks)f
-(and)h(k)n(eep)g(trac)n(k)f(of)0 1522 y(memory)i(usage.)0
-1675 y(Other)32 b(options)g(are)g(sp)r(eci\014c)g(to)h(a)f(mo)r(dule)h
-(and)f(can)g(b)r(e)h(used)g(to)f(turn)h(on)f(debugging)g(output.)52
-b(Since)33 b(curren)n(tly)0 1775 y(no)c(logging)f(abstraction)g(is)i
-(in)g(use,)g(the)g(output)g(is)f(done)h(on)f(a)g(p)r(er-mo)r(dule)g
-(basis)g(\(whatev)n(er)g(is)g(simplest)h(for)f(the)0
-1874 y(individual)f(mo)r(dule\).)37 b(These)28 b(compile)f(time)h
-(options)f(are:)50 2027 y Fm(SC)p 143 2027 V 30 w(DEBUG)434
-b Fn(SMTPC)28 b(debugging)50 2126 y Fm(SSQ)p 187 2126
-V 30 w(DEBUG)390 b Fn(SMTPS)28 b(-)f(QMGR)h(comm)n(unication)f
-(debugging)50 2226 y Fm(SS)p 143 2226 V 30 w(DATA)p 349
-2226 V 30 w(DEBUG)228 b Fn(SMTPS)28 b(D)n(A)-7 b(T)g(A)28
-b(stage)f(debugging)50 2325 y Fm(QMGR)p 231 2325 V 30
-w(DEBUG)346 b Fn(QMGR)28 b(debugging)50 2425 y Fm(SMAR)p
-231 2425 V 30 w(DEBUG)346 b Fn(SMAR)29 b(debugging)50
-2525 y Fm(MTA)p 187 2525 V 30 w(LIBDNS)p 481 2525 V 29
-w(DEBUG)97 b Fn(lib)r(dns)29 b(debugging)0 2674 y(F)-7
-b(or)27 b(details)g(see)h(the)g(source)e(co)r(de.)0 2827
-y(Note:)50 b(it)34 b(is)g(p)r(ossible)g(to)g(set)g(di\013eren)n(t)g
-(debug)g(lev)n(els)f(for)g(di\013eren)n(t)h(debug)g(categories)e(in)i
-(QMGR.)g(F)-7 b(or)34 b(a)f(list)i(of)0 2927 y(categories)23
-b(see)i Fm(include/sm/qmgrd)o(bg)o(.h)p Fn(.)30 b(T)-7
-b(o)24 b(set)i(a)e(debug)h(lev)n(el)g Fd(n)g Fn(for)g(a)f(category)g
-Fd(c)h Fn(use)g(the)g(option)g Fm(-x)p Fd(c)p Fn(.)p
-Fd(n)p Fn(.)36 b(The)0 3027 y(general)26 b(syn)n(tax)h(for)g(the)h
-(parameters)e(is:)50 3174 y(debugoptions)99 b(::=)g(debugoption)27
-b([)h(",")e(debugoptions)h(])50 3274 y(debugoption)132
-b(::=)99 b(range)26 b([)i(".")f(lev)n(el)g(])50 3374
-y(range)380 b(::=)99 b(\014rst)27 b([)h("-")e(last)i(])0
-3523 y(If)g Fm(level)e Fn(is)h(omitted,)h(it)g(defaults)g(to)f
-Fm(1)p Fn(.)37 b(Example:)f Fm(-x1-3.4,5.3,9-11)0 3676
-y Fn(A)28 b(simple)g(w)n(a)n(y)e(to)i(set)f(compile)h(time)g(options)f
-(is)g(to)h(use:)0 3913 y Fm($)43 b(CFLAGS="-DSM_HEAP)o(_C)o(HE)o(CK")37
-b($PATHTO/meta1-$V)o(ER)o(SIO)o(N/)o(co)o(nfi)o(gu)o(re)0
-4149 y Fn(A)28 b(more)f(complicated)g(example)g(is:)0
-4385 y Fm($)43 b(CFLAGS="-O)d(-g)i(-DSM_HEAP_CHECK)c(-I/usr/local/inc)o
-(lu)o(de)o(")g(\\)44 4485 y(LDFLAGS="-L/usr)o(/lo)o(ca)o(l/)o(lib)o(")f
-(\\)44 4584 y($PATHTO/meta1-$)o(VER)o(SI)o(ON)o(/co)o(nf)o(igu)o(re)0
-4821 y Fn(Hin)n(t:)f(it)26 b(is)g(useful)g(to)f(write)g(the)h(command)f
-(line)h(in)n(to)f(a)g(lo)r(cal)g(\014le)h(that)g(can)f(b)r(e)h(reused)f
-(for)g(subsequen)n(t)g(builds)h(and)0 4920 y(v)n(ersions.)0
-5074 y(Note:)37 b(if)28 b Fm(configure)c Fn(has)j(problems)g(with)h(Op)
-r(enSSL)g(b)r(ecause)f(y)n(ou)g(do)g(not)h(ha)n(v)n(e)e(Kerb)r(erosV)g
-(installed,)i(add)0 5310 y Fm($)43 b(CPPFLAGS="-DOPENS)o(SL)o(_N)o(O_K)
-o(RB)o(5")1848 5768 y Fn(78)p eop end
-%%Page: 79 80
-TeXDict begin 79 79 bop 0 523 a Fk(12.2)136 b(P)l(ossible)46
-b(Compilation)g(Problems)g(or)f(W)-11 b(arnings)101 735
-y Fn(1.)42 b(If)28 b(gcc)f(is)g(used)h(as)f(C)g(compiler)g(and)h(full)g
-(c)n(hec)n(king)e(is)i(turned)f(on)h(w)n(arnings)e(lik)n(e)h(these)h
-(are)e(pro)r(duced:)208 935 y Fm(warning:)40 b(unknown)h(conversion)e
-(type)j(character)e(`N')i(in)h(format)208 1035 y(warning:)d(unsigned)g
-(int)i(format,)f(sm_str_P)f(arg)j(\(arg)f(3\))208 1134
-y(warning:)e(too)i(many)g(arguments)e(for)i(format)208
-1334 y Fn(Unfortunately)f(gcc)f(cannot)h(b)r(e)h(told)f(ab)r(out)g
-(additional)g(format)g(sp)r(eci\014ers)f(and)h(hence)h(the)f
-(misleading)208 1433 y(w)n(arning)26 b(migh)n(t)h(b)r(e)h(generated.)
-101 1594 y(2.)42 b(On)27 b(some)g(systems)g(the)h(follo)n(wing)f(w)n
-(arning)f(is)h(generated)g(b)n(y)g(the)h(compiler:)208
-1793 y Fm(`sys_nerr')39 b(is)k(deprecated;)c(use)j(`strerror')e(or)i
-(`strerror_r')d(instead)208 1993 y(sys_nerr)24 b Fn(is)k(used)g(to)g
-(determine)f(whether)h(it)g(mak)n(es)f(sense)h(to)f(in)n(v)n(ok)n(e)g
-Fm(strerror\(3\))c Fn(at)28 b(all.)37 b(The)28 b(systems)208
-2093 y(that)j(generate)e(this)i(error)e(do)i(not)f(pro)n(vide)g(an)g
-(alternativ)n(e)g(w)n(a)n(y)f(to)i(p)r(erform)f(this)i(c)n(hec)n(k.)45
-b(Just)31 b(ignore)e(the)208 2192 y(w)n(arning)22 b(or)h(ask)g(the)h
-(authors)f(of)h(that)g(w)n(arning)f(for)g(an)h(alternativ)n(e)e(w)n(a)n
-(y)h(to)h(determine)g(the)g(range)e(of)i(de\014ned)208
-2292 y(error)h(co)r(des.)0 2618 y Fk(12.3)136 b(More)45
-b(Ab)t(out)f(T)-11 b(est)45 b(Programs)0 2870 y Fj(12.3.1)113
-b(More)37 b(En)m(vironmen)m(t)h(V)-9 b(ariables)38 b(used)g(b)m(y)g(T)
--9 b(est)37 b(Programs)125 3077 y Fc(\017)k Fm(MTA_NAMESERVER)p
-Fn(:)21 b(can)27 b(b)r(e)h(used)f(to)g(set)g(a)g(sp)r(eci\014c)g
-(nameserv)n(er)e(\(IPv4)i(address\))f(in)i(case)e(the)i(simple)f
-(script)208 3176 y(whic)n(h)h(extracts)f(the)i(\014rst)f(line)g(b)r
-(eginning)g(with)h Fm(nameserver)24 b Fn(from)k(the)h(\014le)f
-Fm(/etc/resolv.conf)22 b Fn(do)r(es)28 b(not)208 3276
-y(giv)n(e)e(the)i(desired)f(result.)125 3436 y Fc(\017)41
-b Fm(MTA_PMILTER_REG)o(EX_)o(TE)o(ST)o Fn(:)20 b(can)k(b)r(e)h(used)g
-(to)g(enable)g(the)g(tests)g(\()p Fm(make)42 b(check)23
-b Fn(in)j Fm(chkmts/)p Fn(\))c(for)i(the)i(p)r(olicy)208
-3536 y(milter)h Fm(milter-regex)c Fn(pro)n(vided)j(it)j(is)e(enabled)g
-(and)h(compiled.)37 b(Notes:)301 3697 y Fo({)k Fn(this)28
-b(requires)e(that)i Fm(make)42 b(check)26 b Fn(is)h(executed)h(in)g
-Fm(contrib/)c Fn(b)r(efore)j Fm(make)42 b(check)26 b
-Fn(in)i Fm(chkmts/)p Fn(.)301 3824 y Fo({)41 b Fm(make)h(check)23
-b Fn(in)j Fm(contrib/)c Fn(ma)n(y)i(fail)i(due)f(to)g(a)g(compilation)g
-(error)e(for)i Fm(milter-regex.c)p Fn(.)30 b(If)c(y)n(our)e(OS)390
-3924 y(has)32 b Fm(yacc\(1\))e Fn(\(or)j Fm(bison\(1\))c
-Fn(installed)k(then)g(remo)n(v)n(e)e(that)i(\014le)g(\()p
-Fm(milter-regex.c)p Fn(\))28 b(and)k(try)h(again.)390
-4023 y(Y)-7 b(ou)28 b(ma)n(y)f(ha)n(v)n(e)f(to)i(tell)g
-Fm(configure)c Fn(to)j(use)g Fm(yacc\(1\))p Fn(,)e(e.g.,)390
-4167 y Fm(YACC=yacc)40 b(./configure)f(...)125 4328 y
-Fc(\017)i Fn(Some)32 b(test)h(programs)e(use)i(SMTP)f(serv)n(ers)f(and)
-i(sinks)f(listening)h(on)f(an)h(INET)f(p)r(ort.)53 b(The)33
-b(default)g(v)-5 b(alues)208 4427 y(for)30 b(these)h(p)r(orts)f(are)g
-(sp)r(eci\014ed)h(in)g Fm(chkmts/common.sh)o Fn(.)41
-b(If)31 b(one)f(of)h(the)g(default)g(p)r(orts)g(is)f(used)h(b)n(y)g
-(another)208 4527 y(program,)36 b(then)h(the)f(corresp)r(onding)f(en)n
-(vironmen)n(t)g(v)-5 b(ariable)35 b(m)n(ust)i(b)r(e)f(set)h(as)e
-(otherwise)h(all)g(related)f(test)208 4627 y(programs)25
-b(will)j(fail.)301 4801 y Fo({)41 b Fm(MTA_SNKPORT)p
-Fn(:)23 b(set)28 b(the)g(p)r(ort)f(on)h(whic)n(h)f(the)h(SMTP)g(sink)f
-(is)g(listening.)301 4929 y Fo({)41 b Fm(MTA_SRVPORT)p
-Fn(:)23 b(set)28 b(the)g(p)r(ort)f(on)h(whic)n(h)f(the)h(SMTP)g(test)f
-(serv)n(er)f(is)i(listening.)0 5212 y Fj(12.3.2)113 b(Other)37
-b(P)m(oten)m(tial)g(Problems)h(with)f(T)-9 b(est)37 b(Programs)0
-5419 y Fn(Some)22 b(of)h(the)g(test)f(programs)f(ma)n(y)g(generate)h(w)
-n(arnings,)g(e.g.,)h(most)f(of)h(the)f(tree)h(related)f(programs)e
-(cause)i(compilers)0 5519 y(on)27 b(32)g(bit)h(systems)f(to)h(emit)g(a)
-f(w)n(arning)f Fm(integer)41 b(constant)f(too)j(large)25
-b Fn(whic)n(h)j(can)f(b)r(e)h(ignored.)1848 5768 y(79)p
-eop end
-%%Page: 80 81
-TeXDict begin 80 80 bop 0 523 a Fo(Kno)m(wn)32 b(T)-8
-b(est)32 b(Program)g(Problems)e(sp)s(eci\014c)i(to)g(an)g(OS/setup)0
-730 y Fn(F)-7 b(reeBSD)28 b(systems)f(when)g(running)h(in)g(a)f
-Fm(jail\(8\))e Fn(exhibit)j(the)g(follo)n(wing)e(problems:)125
-966 y Fc(\017)41 b Fn(The)23 b(test)h(programs)d(for)i(SMAR)i(whic)n(h)
-e(p)r(erform)g(DNS)i(lo)r(okups)d(can)i(fail)f(b)r(ecause)g(UDP)h(do)r
-(es)f(not)h(w)n(ork)e(in)i(a)208 1066 y Fm(jail\(8\))d
-Fn(as)j(exp)r(ected.)36 b(A)25 b(w)n(ork)-5 b(around)22
-b(for)i(this)h(is)f(to)g(use)g(the)h Fm(-U)f Fn(option)g(for)g
-Fm(smar)f Fn(whic)n(h)h(can)g(b)r(e)h(ac)n(hiev)n(ed)208
-1165 y(b)n(y)i(setting)g(the)h(en)n(vironmen)n(t)f(v)-5
-b(ariable)27 b Fm(SMAROPTS)d Fn(to)j(that)h(v)-5 b(alue.)125
-1331 y Fc(\017)41 b Fn(Connections)d(from)i(lo)r(calhost)e(to)i(the)g
-(SMTP)f(serv)n(er)f(do)h(not)h(ha)n(v)n(e)e Fm(127.0.0.1)e
-Fn(as)j(source)g(IP)g(address,)208 1431 y(but)d(the)g(IP)f(address)f
-(of)h(a)g(NIC.)h(Hence)g(rela)n(ying)e(m)n(ust)h(b)r(e)h(allo)n(w)n(ed)
-e(for)h(it)h(b)n(y)f(setting)h(the)g(en)n(vironmen)n(t)208
-1531 y(v)-5 b(ariable)29 b Fm(MTA)p 659 1531 27 4 v 30
-w(SERVER)p 953 1531 V 29 w(OPTIONS)f Fn(to)i(the)h(option)f
-Fm(-C)g Fn(and)g(the)h(IP)f(address,)g(e.g.,)h Fm(-C)43
-b(10.2.3.4)p Fn(.)f(Moreo)n(v)n(er,)208 1630 y(b)r(ecause)34
-b(the)i(tests)f Fm(chkmts/t-mts-icr.)o(sh)29 b Fn(and)35
-b Fm(chkmts/t-mts-ocr)o(.s)o(h)29 b Fn(rely)35 b(on)g(connections)f
-(coming)208 1730 y(from)27 b Fm(127.0.0.1)d Fn(they)k(will)f(fail)h(to)
-r(o.)0 1966 y(MacOS)j(10.3.4)e(has)i(a)g(problem)f(with)i
-Fm(sigwait\(3\))p Fn(,)c(see)j(Apple's)h(bug)f(3675391;)e(hence)j(MeT)
--7 b(A1)31 b(do)r(es)g(not)g(w)n(ork)0 2066 y(on)c(this)h(OS)g(\(and)f
-(other)g(v)n(ersions)f(that)i(ha)n(v)n(e)e(the)i(same)f(bug\).)1848
-5768 y(80)p eop end
-%%Page: 81 82
-TeXDict begin 81 81 bop 0 1199 a Fl(Chapter)65 b(13)0
-1668 y Fp(Licenses)0 2153 y Fn(The)25 b(main)h(licenses)f(for)g(MeT)-7
-b(A1)25 b(can)g(b)r(e)h(found)g(in)f(the)h(\014le)g Fm(LICENSE)c
-Fn(and)k(in)f(the)h(directory)e Fm(license/)p Fn(.)33
-b(Addition-)0 2253 y(ally)-7 b(,)24 b(MeT)-7 b(A1)23
-b(con)n(tains)f(co)r(de)i(from)f(other)f(pro)5 b(jects)23
-b(whose)f(licenses)h(can)g(b)r(e)h(either)f(found)h(in)g(the)f(resp)r
-(ectiv)n(e)g(source)0 2353 y(\014les)32 b(or)f(in)h Fm
-(statethreads/READ)o(ME)25 b Fn(for)32 b(the)g(statethreads)f(library)g
-(and)h Fm(db-4.3.28.NC/LIC)o(EN)o(SE)26 b Fn(for)31 b(Berk)n(eley)0
-2452 y(DB.)d(Some)f(source)g(co)r(de)g(is)h(licensed)f(under)h(a)f(BSD)
-h(license)f(whic)n(h)h(can)f(b)r(e)h(found)g(at)f(the)h(b)r(egin)g(of)g
-(those)f(\014les.)1848 5768 y(81)p eop end
-%%Page: 82 83
-TeXDict begin 82 82 bop 0 1241 a Fp(Bibliograph)-6 b(y)0
-1717 y Fn([A\031ma])69 b(Claus)27 b(A\031mann.)36 b(Sendmail)28
-b(X.)37 b Fm(http://www.sendma)o(il)o(.or)o(g/)o(\0457E)o(ca)o(/em)o
-(ai)o(l/)o(sm-)o(9-)o(rfh)o(.h)o(tm)o(l)p Fn(.)0 1883
-y([A\031m)n(b])67 b(Claus)29 b(A\031mann.)43 b(Sendmail)30
-b(X:)g(Requiremen)n(ts,)g(Arc)n(hitecture,)g(F)-7 b(unctional)30
-b(Sp)r(eci\014cation,)g(Implemen-)330 1983 y(tation,)d(and)h(P)n
-(erformance.)34 b Fm(http://www.sendma)o(il)o(.or)o(g/)o(\0457)o(Eca)o
-(/e)o(mai)o(l/)o(sm)o(-X/)o Fn(.)0 2149 y([Ber97])71
-b(Dan)154 b(Bernstein.)412 b(VERP:)154 b(V)-7 b(ariable)153
-b(En)n(v)n(elop)r(e)f(Return)i(P)n(aths,)184 b(1997.)330
-2248 y Fm(http://cr.yp.to/)o(pr)o(oto)o(/v)o(er)o(p.t)o(xt)o
-Fn(.)0 2414 y([Cyr])147 b(Pro)5 b(ject)26 b(Cyrus.)36
-b Fm(http://asg.web.c)o(mu.)o(ed)o(u/c)o(yr)o(us)o(/)p
-Fn(,)22 b Fm(http://asg.web.c)o(mu)o(.ed)o(u/)o(sa)o(sl/)o
-Fn(.)0 2580 y([F)-7 b(re00])83 b(N.)33 b(F)-7 b(reed.)53
-b(SMTP)33 b(service)f(extension)h(for)g(command)f(pip)r(elining.)54
-b(RF)n(C)33 b(2920,)g(In)n(ternet)g(Engineering)330 2680
-y(T)-7 b(ask)27 b(F)-7 b(orce,)26 b(2000.)0 2846 y([Gn)n(u])129
-b(Gn)n(uPG.)36 b(GNU)29 b(Priv)-5 b(acy)26 b(Guard.)36
-b Fm(http://www.gnupg.)o(or)o(g/)p Fn(.)0 3012 y([Hal07])73
-b(Eric)33 b(A.)i(Hall.)56 b(Sm)n(tp)34 b(service)f(extension)h(for)g(p)
-r(er-recipien)n(t)f(data)h(resp)r(onses)f(\(prdr\).)56
-b(Draft,)36 b(In)n(ternet)330 3112 y(Engineering)26 b(T)-7
-b(ask)27 b(F)-7 b(orce,)26 b(2007.)0 3278 y([Hara])105
-b(Ev)-5 b(an)109 b(Harris.)281 b(The)110 b(next)h(step)f(in)g(the)g
-(spam)g(con)n(trol)f(w)n(ar:)200 b(Greylisting.)330 3377
-y Fm(http://greylisti)o(ng)o(.or)o(g/)o(ar)o(tic)o(le)o(s/w)o(hi)o(te)o
-(pap)o(er)o(.sh)o(tm)o(l)p Fn(.)0 3543 y([Harb])101 b(Ev)-5
-b(an)27 b(Harris.)35 b(Whitelisting.)j Fm(http://greylist)o(ing)o(.o)o
-(rg/)o(wh)o(ite)o(li)o(st)o(ing)o(.s)o(htm)o(l)p Fn(.)0
-3709 y([Harc])110 b(Daniel)18 b(Hartmeier.)j(b)r(enzedrine.cx)d(-)h
-(milter-spamd.)i Fm(http://www.benze)o(dr)o(ine)o(.c)o(x/)o(mil)o(te)o
-(r-s)o(pa)o(md.)o(ht)o(ml)o Fn(.)0 3875 y([Hof99])71
-b(P)-7 b(.)18 b(Ho\013man.)k(SMTP)c(service)g(extension)g(for)f(secure)
-h(SMTP)g(o)n(v)n(er)f(TLS.)22 b(RF)n(C)c(2487,)h(In)n(ternet)f
-(Engineering)330 3975 y(T)-7 b(ask)27 b(F)-7 b(orce,)26
-b(1999.)0 4141 y([Kle01])75 b(Simple)28 b(mail)f(transfer)g(proto)r
-(col.)36 b(RF)n(C)27 b(2821,)f(In)n(ternet)i(Engineering)e(T)-7
-b(ask)26 b(F)-7 b(orce,)27 b(2001.)0 4307 y([MeT])111
-b(PGP)27 b(k)n(eys.)35 b Fm(http://www.MeTA1.)o(org)o(/s)o(ecu)o(ri)o
-(ty)o(/PG)o(PK)o(EYS)o Fn(.)0 4473 y([Mo)r(c87])43 b(P)-7
-b(.V.)40 b(Mo)r(c)n(k)-5 b(ap)r(etris.)72 b(Domain)40
-b(names)f(-)h(implemen)n(tation)f(and)h(sp)r(eci\014cation.)73
-b(RF)n(C)40 b(1035,)h(In)n(ternet)330 4573 y(Engineering)26
-b(T)-7 b(ask)27 b(F)-7 b(orce,)26 b(1987.)0 4739 y([m)n(ut])139
-b(m)n(utt.)37 b Fm(http://www.mutt.o)o(rg)o(/)p Fn(.)0
-4905 y([MV03])62 b(K.)29 b(Mo)r(ore)g(and)h(G.)g(V)-7
-b(audreuil.)43 b(An)31 b(Extensible)e(Message)f(F)-7
-b(ormat)30 b(for)f(Deliv)n(ery)g(Status)h(Noti\014cations.)330
-5005 y(RF)n(C)d(3464,)f(In)n(ternet)i(Engineering)e(T)-7
-b(ask)26 b(F)-7 b(orce,)27 b(2003.)0 5171 y([My)n(e96])45
-b(John)27 b(My)n(ers.)36 b(Lo)r(cal)26 b(mail)i(transfer)f(proto)r
-(col.)35 b(RF)n(C)28 b(2033,)e(In)n(ternet)h(Engineering)f(T)-7
-b(ask)27 b(F)-7 b(orce,)27 b(1996.)0 5337 y([My)n(e99])45
-b(J.)34 b(My)n(ers.)54 b(SMTP)34 b(service)f(extension)g(for)h(authen)n
-(tication.)55 b(RF)n(C)34 b(2554,)g(In)n(ternet)g(Engineering)e(T)-7
-b(ask)330 5436 y(F)g(orce,)27 b(1999.)1848 5768 y(82)p
-eop end
-%%Page: 83 84
-TeXDict begin 83 83 bop 0 523 a Fn([New04])41 b(Chris)36
-b(Newman.)65 b(ESMTP)36 b(and)h(LMTP)g(T)-7 b(ransmission)35
-b(T)n(yp)r(es)i(Registration.)63 b(RF)n(C)37 b(3848,)h(In)n(ternet)330
-623 y(Engineering)26 b(T)-7 b(ask)27 b(F)-7 b(orce,)26
-b(2004.)0 789 y([Op)r(e])134 b(Op)r(enSSL.)37 b Fm(http://www.opens)o
-(sl)o(.or)o(g/)o Fn(.)0 955 y([PGP])105 b(PGP.)36 b Fm
-(http://www.pgp.c)o(om)o(/)p Fn(.)0 1121 y([P)n(osa])112
-b(Jef)149 b(P)n(osk)-5 b(anzer.)396 b(gra)n(ymilter)148
-b(-)h(simple)g(gra)n(ylist)e(mail)i(\014lter)g(mo)r(dule.)330
-1220 y Fm(http://www.acme.)o(co)o(m/s)o(of)o(tw)o(are)o(/g)o(ray)o(mi)o
-(lt)o(er/)o Fn(.)0 1386 y([P)n(osb])108 b(Jef)99 b(P)n(osk)-5
-b(anzer.)249 b(mini)p 1336 1386 25 4 v 30 w(sendmail)99
-b(-)g(accept)h(email)f(on)g(b)r(ehalf)h(of)f(real)g(sendmail.)330
-1486 y Fm(http://www.acme.)o(co)o(m/s)o(of)o(tw)o(are)o(/m)o(ini)p
-1779 1486 27 4 v 25 w(sendmail/)p Fn(.)0 1652 y([SGI01])59
-b(SGI.)27 b(State)22 b(threads)e(for)h(in)n(ternet)h(applications,)g
-(2001.)j Fm(http://state-thr)o(ea)o(ds.)o(so)o(ur)o(cef)o(or)o(ge.)o
-(ne)o(t/)o Fn(.)0 1818 y([Slea])136 b(Berk)n(eley)17
-b(DB)h(4.4.XX)g(Change)g(Log.)j Fm(http://www.sleep)o(yc)o(at)o(.co)o
-(m/)o(upd)o(at)o(e/4)o(.4)o(.X)o(X/i)o(f.)o(4.4)o(.X)o(X.)o(htm)o(l)p
-Fn(.)0 1984 y([Sleb])132 b(Berk)n(eley)20 b(DB)i(T)-7
-b(utorial)21 b(and)g(Reference)g(Guide,)j(v)n(ersion)c(4.3.28.)25
-b Fm(http://www.sleep)o(yc)o(at.)o(co)o(m/d)o(oc)o(s/)o
-Fn(.)0 2150 y([T)-7 b(ok])145 b(Mic)n(hael)81 b(T)-7
-b(ok)i(arev.)197 b(tin)n(ycdb:)145 b(A)82 b(pac)n(k)-5
-b(age)80 b(for)h(main)n(tenance)g(of)h(constan)n(t)f(databases.)330
-2250 y Fm(ftp://ftp.corpit)o(.r)o(u/p)o(ub)o(/t)o(iny)o(cd)o(b/)p
-Fn(.)0 2416 y([V)-7 b(au03])57 b(G.)25 b(V)-7 b(audreuil.)33
-b(Enhanced)24 b(mail)h(system)g(status)g(co)r(des.)32
-b(RF)n(C)25 b(3463,)f(In)n(ternet)h(Engineering)e(T)-7
-b(ask)24 b(F)-7 b(orce,)330 2516 y(2003.)0 2682 y([vdBG])70
-b(S.R.)28 b(v)-5 b(an)27 b(den)h(Berg)f(and)g(Philip)h(Guen)n(ther.)36
-b(pro)r(cmail.)g Fm(http://www.procma)o(il)o(.or)o(g/)o
-Fn(.)1848 5768 y(83)p eop end
-%%Page: 84 85
-TeXDict begin 84 84 bop 0 999 a Fp(Index)0 1414 y Fn(8bitmime,)28
-b(31)0 1593 y(ab)r(ort,)f(32)0 1693 y(accept)p 236 1693
-25 4 v 30 w(but)p 390 1693 V 30 w(reconnect,)g(32)0 1792
-y(access,)f(31)0 1892 y(access)p 224 1892 V 29 w(map,)h(24)0
-1992 y(address,)f(20,)h(23,)g(32)0 2091 y(address)p 275
-2091 V 29 w(delimiter,)g(24)0 2191 y(aliases,)f(24)0
-2291 y(all)p 93 2291 V 30 w(domains,)h(24)0 2390 y(allo)n(w)p
-193 2390 V 29 w(b)n(y)-7 b(,)27 b(33)0 2490 y(allo)n(w)p
-193 2490 V 29 w(rela)n(ying)p 510 2490 V 28 w(if)p 586
-2490 V 30 w(v)n(eri\014ed,)g(33)0 2589 y(A)n(Q)p 130
-2589 V 29 w(max)p 314 2589 V 30 w(en)n(tries,)g(21)0
-2689 y(argumen)n(ts,)f(20)0 2789 y(auth,)i(31)0 2968
-y(bac)n(kground,)e(64)0 3068 y(base)p 163 3068 V 29 w(directory)-7
-b(,)27 b(21)0 3247 y(CAcert)p 266 3247 V 30 w(directory)-7
-b(,)26 b(33,)h(36)0 3347 y(CAcert)p 266 3347 V 30 w(\014le,)h(33,)e(36)
-0 3446 y(cac)n(he)p 202 3446 V 29 w(size,)h(33,)g(63)0
-3546 y(cac)n(he)p 202 3546 V 29 w(timeout,)h(33)0 3646
-y(CDB)p 187 3646 V 30 w(base)p 375 3646 V 29 w(directory)-7
-b(,)27 b(18)0 3745 y(CDB)p 187 3745 V 30 w(gid,)h(31)0
-3845 y(cert)p 144 3845 V 29 w(\014le,)g(33,)f(36)0 3945
-y(c)n(hec)n(k)p 202 3945 V 29 w(access)p 450 3945 V 29
-w(map)p 636 3945 V 29 w(for)p 765 3945 V 29 w(rela)n(ying,)f(33)0
-4044 y(clien)n(t)p 201 4044 V 30 w(ip,)i(33)0 4144 y(conf,)g(21)0
-4243 y(connect)p 282 4243 V 30 w(only)p 467 4243 V 29
-w(to,)g(65)0 4343 y(connection)p 393 4343 V 29 w(con)n(trol)p
-675 4343 V 29 w(cac)n(he)p 901 4343 V 29 w(size,)f(63)0
-4443 y(connection)p 393 4443 V 29 w(con)n(trol)p 675
-4443 V 29 w(hash)p 871 4443 V 29 w(table)p 1080 4443
-V 30 w(size,)g(63)0 4542 y(con)n(trol)p 258 4542 V 28
-w(so)r(c)n(k)n(et,)g(21)0 4722 y(daemon)p 287 4722 V
-29 w(address,)g(64)0 4821 y(debug)p 222 4821 V 30 w(lev)n(el,)g(63,)g
-(65)0 4921 y(dela)n(y)p 195 4921 V 29 w(b)r(et)n(w)n(een)p
-517 4921 V 30 w(2)p 589 4921 V 29 w(c)n(hec)n(kp)r(oin)n(ts,)g(63)0
-5021 y(dela)n(y)p 195 5021 V 29 w(c)n(hec)n(ks,)g(31)0
-5120 y(dela)n(y)p 195 5120 V 29 w(greylisting)p 602 5120
-V 28 w(error)p 808 5120 V 28 w(un)n(til)p 1004 5120 V
-31 w(D)n(A)-7 b(T)g(A,)28 b(31)0 5220 y(deliv)n(ery)p
-290 5220 V 29 w(timeout,)g(63)0 5320 y(DNS,)h(25,)d(64)0
-5419 y(dnsbl,)i(25)0 5519 y(domain,)f(25)2035 1414 y(DSA)p
-2211 1414 V 31 w(cert)p 2381 1414 V 29 w(\014le,)h(64,)f(65)2035
-1513 y(DSA)p 2211 1513 V 31 w(k)n(ey)p 2365 1513 V 29
-w(\014le,)h(64,)e(65)2035 1696 y(expire)p 2260 1696 V
-29 w(limit,)j(26)2035 1879 y(facilit)n(y)-7 b(,)28 b(18)2035
-1978 y(\014le,)g(23,)f(24,)f(26)2035 2078 y(\015ags,)h(21,)f(24,)h(26,)
-g(31,)g(33,)f(63{65)2035 2261 y(generic)p 2295 2261 V
-29 w(lo)r(okup,)h(33)2035 2360 y(grey)p 2196 2360 V 29
-w(expire,)g(26)2035 2460 y(grey)p 2196 2460 V 29 w(w)n(ait,)g(26)2035
-2559 y(greylisting,)f(26,)h(31)2035 2659 y(group,)g(20)2035
-2842 y(hash)p 2207 2842 V 29 w(table)p 2416 2842 V 30
-w(en)n(tries,)g(21)2035 2941 y(header)p 2281 2941 V 29
-w(only)-7 b(,)27 b(21)2035 3041 y(hostname,)g(18)2035
-3224 y(id,)h(31)2035 3323 y(iden)n(t,)g(18)2035 3423
-y(implicitly)p 2383 3423 V 31 w(matc)n(h)p 2638 3423
-V 29 w(detail,)g(24,)f(26,)f(33)2035 3522 y(initial)p
-2252 3522 V 30 w(connections,)h(22)2035 3622 y(io)p 2105
-3622 V 30 w(timeout,)h(31,)e(35)2035 3805 y(KBytes)p
-2310 3805 V 29 w(written)p 2602 3805 V 30 w(for)p 2732
-3805 V 29 w(c)n(hec)n(kp)r(oin)n(ting,)h(63)2035 3904
-y(k)n(ey)p 2163 3904 V 29 w(\014le,)h(33,)f(36)2035 4087
-y(listen)p 2234 4087 V 30 w(queue,)h(64)2035 4187 y(listen)p
-2234 4187 V 30 w(so)r(c)n(k)n(et,)f(19)2035 4286 y(lm)n(tp)p
-2208 4286 V 30 w(do)r(es)p 2398 4286 V 30 w(not)p 2548
-4286 V 30 w(imply)p 2783 4286 V 30 w(rela)n(ying,)f(31)2035
-4386 y(lm)n(tp)p 2208 4386 V 30 w(max)p 2393 4386 V 30
-w(rcpts)p 2604 4386 V 29 w(p)r(er)p 2751 4386 V 30 w(transaction,)g(22)
-2035 4485 y(LMTP)p 2285 4485 V 29 w(so)r(c)n(k)n(et,)h(35)2035
-4585 y(lo)r(cal)p 2209 4585 V 29 w(domains,)g(24)2035
-4685 y(lo)r(cal)p 2209 4685 V 29 w(user)p 2387 4685 V
-29 w(map,)h(26)2035 4784 y(lo)r(calpart,)f(24)2035 4884
-y(log,)g(18)2035 4984 y(log)p 2147 4984 V 29 w(directory)-7
-b(,)26 b(21)2035 5083 y(log)p 2147 5083 V 29 w(lev)n(el,)h(21,)g(26,)g
-(36)2035 5266 y(mailertable,)g(26)2035 5366 y(main)p
-2220 5366 V 30 w(DB)p 2372 5366 V 30 w(name,)g(26)2035
-5465 y(mapname,)g(23)1848 5768 y(84)p eop end
-%%Page: 85 86
-TeXDict begin 85 85 bop 0 523 a Fn(maps,)27 b(24)0 623
-y(matc)n(h)p 229 623 25 4 v 30 w(t)n(yp)r(e,)g(33)0 722
-y(max)p 160 722 V 29 w(bad)p 323 722 V 30 w(commands)p
-737 722 V 29 w(p)r(er)p 884 722 V 30 w(session,)g(32)0
-822 y(max)p 160 822 V 29 w(bad)p 323 822 V 30 w(commands)p
-737 822 V 29 w(p)r(er)p 884 822 V 30 w(transaction,)f(32)0
-922 y(max)p 160 922 V 29 w(cac)n(he)p 386 922 V 29 w(en)n(tries,)h(21)0
-1021 y(max)p 160 1021 V 29 w(commit)p 461 1021 V 30 w(dela)n(y)-7
-b(,)27 b(21)0 1121 y(max)p 160 1121 V 29 w(connection)p
-577 1121 V 30 w(rate,)g(22)0 1220 y(max)p 160 1220 V
-29 w(connections,)g(22)0 1320 y(max)p 160 1320 V 29 w(errors)p
-400 1320 V 28 w(p)r(er)p 546 1320 V 30 w(DSN,)h(21)0
-1420 y(max)p 160 1420 V 29 w(fds,)g(63,)f(64)0 1519 y(max)p
-160 1519 V 29 w(hops,)h(32)0 1619 y(max)p 160 1619 V
-29 w(in)n(v)-5 b(alid)p 429 1619 V 30 w(addresses)p 799
-1619 V 28 w(p)r(er)p 945 1619 V 30 w(session,)27 b(32)0
-1719 y(max)p 160 1719 V 29 w(in)n(v)-5 b(alid)p 429 1719
-V 30 w(addresses)p 799 1719 V 28 w(p)r(er)p 945 1719
-V 30 w(transaction,)26 b(32)0 1818 y(max)p 160 1818 V
-29 w(message)p 482 1818 V 29 w(size,)h(32)0 1918 y(max)p
-160 1918 V 29 w(nop)p 323 1918 V 30 w(commands)p 737
-1918 V 29 w(b)r(et)n(w)n(een)p 1059 1918 V 30 w(transactions,)f(32)0
-2017 y(max)p 160 2017 V 29 w(nop)p 323 2017 V 30 w(commands)p
-737 2017 V 29 w(in)p 835 2017 V 30 w(transaction,)h(32)0
-2117 y(max)p 160 2117 V 29 w(op)r(en)p 362 2117 V 30
-w(T)-7 b(As,)28 b(21)0 2217 y(max)p 160 2217 V 29 w(pro)r(cesses,)f(62)
-0 2316 y(max)p 160 2316 V 29 w(recipien)n(ts)p 534 2316
-V 30 w(p)r(er)p 682 2316 V 29 w(session,)g(32)0 2416
-y(max)p 160 2416 V 29 w(recipien)n(ts)p 534 2416 V 30
-w(p)r(er)p 682 2416 V 29 w(transaction,)g(32)0 2516 y(max)p
-160 2516 V 29 w(threads,)g(31,)g(63,)g(64)0 2615 y(max)p
-160 2615 V 29 w(transactions,)f(33)0 2715 y(max)p 160
-2715 V 29 w(w)n(ait)p 344 2715 V 30 w(threads,)h(64,)g(65)0
-2814 y(merge)p 223 2814 V 29 w(dela)n(y)p 442 2814 V
-29 w(max,)g(21)0 2914 y(MIME)p 244 2914 V 30 w(F)-7 b(ormat,)27
-b(21)0 3014 y(min)p 143 3014 V 30 w(disk)p 319 3014 V
-30 w(space,)g(21)0 3113 y(min)p 143 3113 V 30 w(pro)r(cesses,)f(62)0
-3213 y(min)p 143 3213 V 30 w(threads,)h(63,)g(64)0 3313
-y(min)p 143 3313 V 30 w(w)n(ait)p 328 3313 V 30 w(threads,)g(64,)f(65)0
-3412 y(mo)r(dule)p 270 3412 V 30 w(timeout,)i(64,)f(65)0
-3512 y(MT)-7 b(A,)28 b(13)0 3611 y(MT)-7 b(A)p 196 3611
-V 30 w(DNS)p 397 3611 V 31 w(TIMEOUT,)27 b(11)0 3711
-y(MT)-7 b(A)p 196 3711 V 30 w(NAMESER)e(VER,)28 b(75)0
-3811 y(MT)-7 b(A)p 196 3811 V 30 w(NO)p 353 3811 V 30
-w(DNS)p 554 3811 V 31 w(TEST,)27 b(11)0 3910 y(MT)-7
-b(A)p 196 3910 V 30 w(NO)p 353 3910 V 30 w(LOG)p 565
-3910 V 30 w(TEST,)27 b(11)0 4010 y(MT)-7 b(A)p 196 4010
-V 30 w(NO)p 353 4010 V 30 w(SLO)n(W)p 629 4010 V 30 w(TEST,)27
-b(11)0 4110 y(MT)-7 b(A)p 196 4110 V 30 w(PMIL)g(TER)p
-612 4110 V 29 w(REGEX)p 943 4110 V 30 w(TEST,)27 b(75)0
-4209 y(MT)-7 b(A)p 196 4209 V 30 w(SNKPOR)g(T,)27 b(75)0
-4309 y(MT)-7 b(A)p 196 4309 V 30 w(SR)e(VPOR)i(T,)28
-b(75)0 4408 y(MT)-7 b(A)p 196 4408 V 30 w(STOPONERR)n(OR,)26
-b(11)0 4508 y(MT)-7 b(A)n(C,)28 b(13)0 4608 y(MT)-7 b(A)n(CONFDIR,)28
-b(13)0 4707 y(MT)-7 b(ALG,)28 b(13)0 4807 y(MT)-7 b(ALOGDIR,)28
-b(13)0 4907 y(MT)-7 b(AM,)28 b(13)0 5006 y(MT)-7 b(A)n(Q,)27
-b(13)0 5106 y(MT)-7 b(A)n(QDIR,)28 b(13)0 5205 y(MT)-7
-b(AS,)28 b(13)0 5388 y(name,)f(24,)g(26)0 5488 y(nameserv)n(ers,)e(25)
-2035 523 y(netmask,)i(26)2035 706 y(OCC)p 2225 706 V
-29 w(max)p 2409 706 V 30 w(en)n(tries,)g(22)2035 805
-y(ok)p 2126 805 V 29 w(disk)p 2301 805 V 30 w(space,)g(22)2035
-905 y(options,)g(18)2035 1088 y(page)p 2207 1088 V 29
-w(size,)g(63)2035 1187 y(pass)p 2194 1187 V 29 w(fd)p
-2294 1187 V 30 w(so)r(c)n(k)n(et,)g(20)2035 1287 y(pass)p
-2194 1287 V 29 w(id,)h(20)2035 1386 y(path,)g(20,)f(24,)f(32)2035
-1486 y(p)r(olicy)p 2257 1486 V 30 w(milter,)h(32)2035
-1586 y(p)r(ort,)h(19,)e(24,)h(32)2035 1685 y(preserv)n(e)p
-2338 1685 V 28 w(domain,)g(25)2035 1785 y(pro)r(cesses,)f(32,)h(64)2035
-1885 y(protected)p 2382 1885 V 29 w(recipien)n(ts,)h(33)2035
-2067 y(queue)p 2250 2067 V 30 w(dela)n(y)p 2470 2067
-V 29 w(timeout,)g(22)2035 2167 y(queue)p 2250 2167 V
-30 w(return)p 2507 2167 V 29 w(timeout,)g(22)2035 2350
-y(read)p 2198 2350 V 29 w(QUIT)p 2444 2350 V 30 w(reply)-7
-b(,)27 b(65)2035 2449 y(remote)p 2290 2449 V 29 w(p)r(ort,)h(65)2035
-2549 y(remo)n(v)n(e)p 2298 2549 V 28 w(un)n(used)p 2578
-2549 V 30 w(log\014les,)f(63)2035 2648 y(replace)p 2295
-2648 V 29 w(macros,)f(25)2035 2748 y(require)p 2293 2748
-V 29 w(EHLO)p 2558 2748 V 29 w(b)r(efore)p 2809 2748
-V 29 w(MAIL,)i(31)2035 2848 y(restart)p 2282 2848 V 29
-w(dep)r(endencies,)g(20)2035 2947 y(retries,)f(25)2035
-3047 y(retry)p 2219 3047 V 29 w(max)p 2403 3047 V 29
-w(dela)n(y)-7 b(,)27 b(22)2035 3147 y(retry)p 2219 3147
-V 29 w(min)p 2386 3147 V 30 w(dela)n(y)-7 b(,)27 b(22)2035
-3246 y(reuse)p 2226 3246 V 29 w(connection,)g(63)2035
-3429 y(sc)n(heduler)p 2376 3429 V 29 w(timeout,)h(63)2035
-3528 y(secondary)p 2400 3528 V 28 w(DB)p 2550 3528 V
-30 w(name,)g(26)2035 3628 y(sender,)f(33)2035 3728 y(separate)p
-2342 3728 V 28 w(\014nal)p 2527 3728 V 30 w(dot)p 2677
-3728 V 30 w(and)p 2841 3728 V 30 w(QUIT,)g(65)2035 3827
-y(serialize)p 2328 3827 V 29 w(accept,)g(64)2035 3927
-y(size,)g(21)2035 4027 y(SMAR)p 2285 4027 V 31 w(so)r(c)n(k)n(et,)f(18)
-2035 4126 y(SMAR)p 2285 4126 V 31 w(timeout,)i(63)2035
-4226 y(sm)n(tp)p 2218 4226 V 30 w(max)p 2403 4226 V 29
-w(rcpts)p 2613 4226 V 30 w(p)r(er)p 2761 4226 V 30 w(transaction,)e(22)
-2035 4325 y(SMTPC)p 2339 4325 V 30 w(so)r(c)n(k)n(et,)g(18)2035
-4425 y(SMTPS)p 2325 4425 V 30 w(so)r(c)n(k)n(et,)g(18)2035
-4525 y(so)r(c)n(k)n(et,)h(32)2035 4624 y(soft)p 2172
-4624 V 30 w(b)r(ounce,)h(31)2035 4724 y(start)p 2212
-4724 V 29 w(action,)f(19)2035 4824 y(strict)p 2230 4824
-V 30 w(ehlo)p 2408 4824 V 29 w(c)n(hec)n(ks,)g(31)2035
-5006 y(tag,)g(25)2035 5106 y(talk)p 2181 5106 V 30 w(to)p
-2285 5106 V 29 w(m)n(yself,)h(65)2035 5205 y(tests,)g(63)2035
-5305 y(timeout,)g(25,)f(32)2035 5405 y(tls,)h(33,)f(36,)f(64,)h(65)2035
-5504 y(trusted)p 2299 5504 V 30 w(mec)n(hanisms,)g(31)1848
-5768 y(85)p eop end
-%%Page: 86 87
-TeXDict begin 86 86 bop 0 523 a Fn(t)n(yp)r(e,)28 b(23)0
-706 y(umask,)f(20)0 805 y(use)p 121 805 25 4 v 30 w(connect,)g(64)0
-905 y(use)p 121 905 V 30 w(id)p 220 905 V 30 w(in)p 319
-905 V 30 w(log\014le)p 562 905 V 29 w(name,)g(62)0 1005
-y(use)p 121 1005 V 30 w(TCP)-7 b(,)27 b(64)0 1104 y(user,)g(20)0
-1287 y(w)n(ait)p 160 1287 V 29 w(for)p 289 1287 V 30
-w(clien)n(t,)g(22)0 1386 y(w)n(ait)p 160 1386 V 29 w(for)p
-289 1386 V 30 w(serv)n(er,)f(22,)g(36)0 1486 y(w)n(ait)p
-160 1486 V 29 w(for)p 289 1486 V 30 w(smar,)g(64)0 1586
-y(white)p 203 1586 V 30 w(expire,)h(26)0 1685 y(white)p
-203 1685 V 30 w(timeout,)h(26)0 1785 y(w)n(orking)p 293
-1785 V 28 w(directory)-7 b(,)27 b(62)0 1968 y(xv)n(erp,)g(31)1848
-5768 y(86)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/doc/README.txt b/doc/README.txt
deleted file mode 100644
index ff8769e..0000000
--- a/doc/README.txt
+++ /dev/null
@@ -1,4723 +0,0 @@
-                               MeTA1 README
-
-                              Claus Assmann
-
-
-Contents
-
-  * Introduction to MeTA1
-      + MeTA1 is a Message Transfer Agent
-          o Main Components of MeTA1
-      + Documentation
-          o Typographical Conventions
-      + Version
-      + Current State
-          o Providing Feedback
-      + For the Impatient
-
-  * Building, Testing, and Installing MeTA1
-      + Verifying the Source Code Distribution
-      + Building MeTA1
-          o Compile-Time Configuration Options
-      + Test Programs
-          o Environment Variables used by Test Programs
-          o Known Test Program Problems
-      + Installing MeTA1
-          o Directories, Files, and Permissions
-          o Upgrading from earlier MeTA1 Versions
-
-  * Run-Time Configuration of MeTA1
-      + Overview
-      + Configuration File Syntax
-          o Configuration File Values
-      + Example Configuration File
-      + Common Global Configuration
-      + Common Configuration Options
-      + Pathnames for Files, Directories, and Maps
-      + Configuration for MCP
-      + Configuration for QMGR
-          o Configuration Map for QMGR
-      + Configuration for SMAR
-          o Declaring Maps for SMAR
-          o Configuration Options for SMAR
-          o Configuration Maps for SMAR
-          o Greylisting
-      + Configuration for SMTP Server
-          o SMTP Server Session Configuration
-          o Multiple SMTP Servers with different Configurations
-          o Protecting Recipients
-      + Configuration for SMTP Client
-          o SMTP Client Session/Recipient Configuration
-      + Lookup Orders
-          o Lookup Orders in Maps
-          o Lookup Orders for Anti-Spam Measures
-          o Macro Replacements in RHS
-      + STARTTLS Restrictions
-      + VERP
-
-  * Running MeTA1
-      + Starting MeTA1
-      + Using MeTA1 only for Outgoing Mail
-      + Using MeTA1 for Incoming Mail
-          o Local Delivery and Specifying Local Domains
-          o Specifying Valid Local Addresses
-      + Using MeTA1 as Gateway
-      + Using MeTA1 as Backup MX Server
-          o Note about Backup MX Servers
-      + Miscellaneous Programs
-          o Do not run programs as root User
-          o Displaying Content of Mail Queues
-          o Interacting with QMGR
-      + Reloading Maps
-      + Logging
-          o Logfile Rotation
-      + Regular Checks
-      + Dealing with Errors
-          o Resource Problems
-          o Database Problems
-          o Writing Core Dumps
-      + Replacements for Features available in other MTAs
-
-  * Policy Milter
-      + Policy Milter Overview
-      + Native Policy Milter API
-          o Data Structures
-          o Start and Stop
-          o New SMTP Server
-          o SMTP Session and Transaction
-          o Set and Get pmilter Contexts
-          o Accessing MTA Symbols
-          o Sender Modification
-          o Recipient Modifications
-          o Header Modifications
-          o Message Replacement
-          o Further Capabilities
-          o Miscellaneous Functions
-          o Return Values
-          o Implementation Notes
-      + Policy Milter Examples
-
-  * Miscellaneous
-      + Troubleshooting
-          o Startup Problems
-          o Logfile Entries
-      + Caveats
-      + Checks in SMTP Server
-          o Strict RFC Compliance
-          o Various Checks
-      + Security Checks
-      + Restrictions
-      + Code Review, Enhancements, Patches
-      + Porting
-      + Version Naming
-          o Snapshots
-
-  * Data Flow in MeTA1
-      + Data Flow in MeTA1
-
-  * Advanced Configuration Options
-      + Overview
-          o Flags
-      + Advanced Configuration for MCP
-      + Advanced Configuration for QMGR
-      + Advanced Configuration for SMAR
-      + Advanced Configuration for SMTP Server
-      + Advanced Configuration for SMTP Client
-
-  * Tuning
-      + Size of Queues, Caches, and Databases
-      + Disk I/O
-      + Processes and Threads
-
-  * Format Specifications
-      + Socket Map
-      + Format of Session/Transaction Identifiers
-      + Logfile Format
-      + Format of Received Header
-      + Format of DSNs
-
-  * Setup for STARTTLS
-      + Certificates for STARTTLS
-
-  * More About Configuration, Compilation, Debugging, and Testing
-      + Compile Time Options
-          o Generic
-          o QMGR
-          o SMAR
-          o SMTPS
-          o Debugging Compile Time Options
-      + Possible Compilation Problems or Warnings
-      + More About Test Programs
-          o More Environment Variables used by Test Programs
-          o Other Potential Problems with Test Programs
-
-  * Licenses
-  * Bibliography
-  * Index
-
-Introduction to MeTA1
-
-MeTA1 is a Message Transfer Agent
-
-This distribution contains the source code for MeTA1 which implements a
-message transfer agent (MTA). It supports the Simple Mail Transfer
-Protocol (SMTP) as specified by RFC 2821 [Kle01] and various extensions,
-e.g., STARTTLS [Hof99], AUTH [Mye99], PIPELINING [Fre00], as well as other
-protocols, e.g., LMTP [Mye96].
-
-MeTA1 is intended to be used as a secure and efficient mail gateway. It
-does not provide any mail content modification capabilities, e.g.,
-masquerading of addresses or changing (addition, removal) of headers.
-Later versions will probably add such capabilities.
-
-
-Main Components of MeTA1
-
-MeTA1 is a modularized message transfer agent consisting of five (or more)
-persistent processes, four of which are multi-threaded. A central queue
-manager (QMGR) controls SMTP servers (SMTPS) and SMTP clients (SMTPC) to
-receive and send e-mails, an address resolver (SMAR) provides lookups in
-various maps including DNS for mail routing, and a main control program
-(MCP) starts the others processes and watches over their execution. The
-queue manager organizes the flow of messages through the system and
-provides measures to avoid overloading the local or remote systems by
-implementing a central control instance.
-
-More information about each component will be given in the appropriate
-sections. Complete documentation and background information can be found
-in [Assmb]. Section 7.1 describes the data flow in MeTA1, the following is
-a brief summary. Figure 1.1 shows the interaction of the various
-components and databases^1.1. Incoming messages are accepted by an SMTP
-server (SMTPS) which stores the messages in the content database (CDB).
-The envelope information, i.e., sender and recipients, is stored by the
-queue manager in an incoming queue (IQDB) and written to disk to the
-incoming queue backup database (IBDB). For a delivery, the envelope
-information must be transferred into the active queue (AQ). The scheduler
-in QMGR takes recipient envelopes from AQ and creates transactions which
-are given to an SMTP client (SMTPC) for delivery. An SMTP client takes the
-transaction information and tries to send a message whose content is read
-from CDB. After a successful delivery attempt a record is written to IBDB
-that logs this information. The deferred envelope database (DEFEDB) is
-only used if a message cannot be delivered during the first attempt.
-
-                   Figure 1.1: MeTA1: Overall Structure
-
-\begin{picture}(120, 120)\
-epsfxsize 120mm\leavevmode\
-epsffile{overview1.eps}\end
-{picture}
-
-This version of MeTA1 does not come with a local delivery agent nor a mail
-submission program. See Sections 4.3.1 and 4.2 which programs can be used
-to achieve the desired functionality.
-
-
-Documentation
-
-The document ``sendmail X: Requirements, Architecture, and Functional
-Specification'' [Assmb] provides the background about the MeTA1 design,
-its architecture, as well as the functional specification, and details
-about the implementation.
-
-Typographical Conventions
-
-In this documentation, a command written as
-
-$ command
-
-should be executed as an unprivileged user. Only a command written as
-
-# command
-
-should be executed as the superuser.
-
-If a command contains components that need to be replaced by values that
-depend on the environment or the local configuration, then it is usually
-written as a macro, e.g., $LOGFILE.
-
-A number in parentheses behind a command or function refers to the manual
-section, e.g., syslog(3), as it is usual for Unix documents.
-
-Version
-
-This document has been written for MeTA1-1.0.PreAlpha24.1, see also the
-greeting of the SMTP server and the version output of the main components.
-See Section 6.8 for information about version naming.
-
-Current State
-
-There are still some error conditions which may not be handled gracefully,
-i.e., in case of some resource problems (e.g., out of memory or out of
-disk space) the system may abort; however, this is common for most open
-source MTAs which simply abort if they are running out of memory. See
-Section 4.10.1 how to deal with those conditions. The software is running
-since 2004-01-01 as MTA on the main machine of the author without any
-significant problem, i.e., it never lost any mail.
-
-
-Providing Feedback
-
-Please report bugs and provide feedback either to the developers list[
-Assma] (if you are subscribed) or directly to^1.2:
-
-    < MeTA1 + feedback (at) MeTA1 . org >
-
-Feedback about the code, the documentation (including typographical,
-syntactical, and grammatical errors, pointing out parts that are not well
-enough explained, etc.), as well as patches and enhancements are highly
-appreciated.
-
-For the Impatient
-
-For those who do not want to read the entire documentation, it is adviced
-to read at least sections 2.2 and 2.4, and the appropriate section of
-Chapter 4.
-
-Building, Testing, and Installing MeTA1
-
-
-Verifying the Source Code Distribution
-
-The source code is distributed as a (compressed) tar file and is
-accompanied by a PGP signature file which has the same name as the tar
-file plus the ending .sig. To verify the integrity of the source code PGP
-[PGP] or GPG [Gnu] are required as well as the MeTA1 PGP signing key [MeT
-]:
-
-$ gpg -verify meta1-$VERSION.tar.gz.sig
-or:
-$ pgp meta1-$VERSION.tar.gz.sig meta1-$VERSION.tar.gz
-
-Further information, especially about warnings or possible errors, can be
-found in the documentation for PGP or GPG.
-
-
-Building MeTA1
-
-MeTA1 uses a configure file generated by GNU autoconf for configuration.
-Hence you can build it (after verifying and unpacking the distribution) as
-follows:
-
-$ mkdir obj.$OS && cd obj.$OS && $PATHTO/meta1-$VERSION/configure $OPTIONS \
-  && make && make check
-
-Obviously you have to replace $OS, $VERSION, $OPTIONS, as well as $PATHTO.
-It is also possible to build MeTA1 in the source tree, however, this is
-discouraged:
-
-$ ./configure && make && make check
-
-Notes: do not run this as root; this is not just a basic security measure
-(only use a privileged account if it is really required), but most of the
-programs refuse to run with root privileges. It might be useful to save
-the output of these commands^2.1for later inspection.
-
-
-Compile-Time Configuration Options
-
-Beside the usual configure options like --prefix a few MeTA1 specific
-configuration options are available:
-
-    --enable-TLS Enable check for STARTTLS support. The default is yes,
-    i.e., configure tries to determine whether OpenSSL is available on the
-    machine. Requires OpenSSL 0.9.6 or newer [Ope]. Note: check the
-    OpenSSL website [Ope] for security announcement and be aware that due
-    to the complexity of the software it may cause (security) problems.
-
-    --enable-SASL Enable check for AUTH support. The default is yes, i.e.,
-    configure tries to determine whether Cyrus SASL v2 is available on the
-    machine. Requires Cyrus SASL version 2.1.18 or newer [Cyr]. Notes:
-     1. check http://asg.web.cmu.edu/cyrus/ and http://asg.web.cmu.edu/
-        sasl/ for security announcement and be aware that due to the
-        complexity of the software it may cause (security) problems.
-     2. If Cyrus SASL uses Berkeley DB then it is necessary that the
-        version which has been used during compilation matches the version
-        that it is linked against.
-
-    --with-sasl-libdir=path Path to directory containing Cyrus SASL v2
-    library.
-
-    --with-sasl-incdir=path Path to directory containing Cyrus SASL v2
-    include files.
-
-    --disable-included-bdb MeTA1 ships with a modified version of Berkeley
-    DB 4.3.28 which is built and used by default. To use a different
-    version of Berkeley DB (it must be 4.3, 4.2, or 4.1), e.g., one that
-    is part of the host OS, specify --disable-included-bdb.
-
-    Notes:
-     1. If you do not use the Berkeley DB version that comes with MeTA1,
-        make sure you run all the tests. For example, with Berkeley DB
-        4.2.50 on OpenBSD 3.2/i386 at least one of the test programs fails
-        and hence this combination must not be used. Moreover, if you
-        encounter a problem using some other BDB version then you must try
-        to reproduce the problem with the shipped version before reporting
-        a possible bug.
-     2. Do not use Berkeley DB 4.3.27/28 in 64 bit mode on Solaris 5.8/9
-        as it crashes at least in those configurations^2.2. This bug is
-        fixed in the version that is distributed with MeTA1.
-
-    --with-bdb-libdir=path Path to directory containing Berkeley DB
-    library. This option is only needed if --disable-included-bdb is used
-    and Berkeley DB is not installed in a location that the compiler or
-    linker use by default. Note: configure currently checks only for a
-    static library.
-
-    --with-bdb-incdir=path Path to directory containing Berkeley DB
-    include files. This option is only needed if --disable-included-bdb is
-    used and Berkeley DB is not installed in a location that the compiler
-    uses by default. Example:
-
-    $ B=/usr/local/BerkeleyDB.4.3
-    $ $PATHTO/meta1-$VERSION/configure --with-bdb-libdir=$B/lib \
-      --with-bdb-incdir=$B/include --disable-included-bdb
-
-    --enable-pmilter Enable policy milter protocol, see Chapter 5.
-
-    --enable-msp Enable a simple mail submission program (MSP) that is
-    currently not supported (located in contrib/). This is just a helper
-    program for those who do not want to install a different MSP but need
-    only some basic functionality (which does not include a queueing
-    mechanism). Note: this will install the MSP as sendmail thus
-    overriding any existing program of that name (as well as a man page).
-
-    --enable-tinycdb Enable support for cdb map type, based on tinycdb
-    0.75 [Tok].
-
-To get the current list of configuration options, use configure --help.
-
-
-Test Programs
-
-$ make check
-
-will run all test programs; currently those tests take about eighty
-minutes to run on a standard workstation. For each of the test programs
-one line is printed to denote whether the test succeeded, i.e., the output
-consists of lines with the marker PASS: or FAIL: and the name of the test
-program program. Additional output might be generated by the test programs
-themselves, e.g.,
-
-2 of 2 tests completed successfully,
-
-or some debug output. The debug output may even indicate an error, but
-only a final FAIL: indicates a test failure. Some tests depend on
-compilation options and are only conditionally enabled; others may depend
-on environment variables, see 2.3.1. For disabled tests SKIP is shown.
-
-Since some of the tests may fail (see Section 2.3.2) and make will usually
-stop after encountering an error, it might be required to use
-
-$ make -i check >check.out 2>&1
-
-to perform all tests.
-
-
-Environment Variables used by Test Programs
-
-Environment variables can be used to disable some test programs if
-required or change the behavior of some test programs. These environment
-variables and their effects are:
-
-  * MTA_NO_DNS_TEST: disable tests that perform DNS lookups. These lookups
-    may use domains that are under control of the MeTA1 author.
-
-  * MTA_DNS_TIMEOUT: can be used to set a different timeout than the
-    default, however, it may not be obeyed by all DNS test programs.
-
-  * MTA_TEST_DNS_TIMING: run DNS tests that are timing dependent and may
-    fail under certain conditions (e.g., network too slow).
-
-  * MTA_TIMING: run MTA tests that are timing dependent and may fail under
-    certain conditions.
-
-  * MTA_STOPONERROR: causes most test scripts that perform multiple checks
-    to stop on the first error that occurs instead of performing all
-    checks.
-
-  * MTA_NO_LOG_TEST: disables some tests that use syslog(3).
-
-  * MTA_NO_SLOW_TEST: disables some tests that take a very long time.
-
-In this example the DNS timeout is set to 60 seconds and tests that take a
-very long time are disabled:
-
-$ MTA_DNS_TIMEOUT=60
-$ MTA_NO_SLOW_TEST=1
-$ export MTA_DNS_TIMEOUT MTA_NO_SLOW_TEST
-$ make -i check
-
-
-Known Test Program Problems
-
-  * connctl.sh will fail on systems that have neither inet_pton(3) nor
-    inet_aton(3). Fix: upgrade your OS or write a replacement function and
-    put it into librepl/.
-  * t-evthr-slp can fail in some circumstances if the OS is busy with
-    other tasks as it depends on the OS scheduler. Fix: just rerun the
-    test.
-  * t-evthr-sig.sh fails on Linux systems that use a thread implementation
-    that is not POSIX compliant. The test is currently disabled on all
-    Linux versions. Note: if you know a simple way to figure out whether
-    the OS actually provides POSIX compliant pthreads, please let me know.
-  * t-hostname fails on systems where gethostname() does not return any
-    FQHN at all (e.g., default SunOS 4/5 installations). Add the FQHN as
-    alias to /etc/hosts (see hosts(5) to solve this problem, e.g.,
-
-            10.1.2.3    myname myname.my.domain
-
-    or
-
-            10.1.2.3    myname.my.domain myname
-
-  * t-parsesockstr fails on systems like AIX which treat an empty string
-    as a valid IP address in inet_addr(3).
-
-  * t-mts-icr.sh and t-mts-ocr-?.sh try to test incoming/outgoing rate
-    control. They rely on the time it takes to send/receive mails which
-    may not work on machines that are significantly slower or faster than
-    the machines available to the author.
-
-  * t-smar-0.sh, t-smar-3.sh, and t-dns-1.sh may fail sometimes due to DNS
-    timeouts. Run the tests again or increase the DNS timeout, see Section
-    2.3.1.
-
-Note: DNS related test programs may fail if the first nameserver entry in
-/etc/resolv.conf does not respond properly (and reasonably fast) to DNS
-queries. See Section 12.3.1 how to override the default nameserver
-selection: MTA_NAMESERVER.
-
-For more information about possible test program problems see Section
-12.3.2. For problems with programs in the contrib/ directory, see contrib/
-README.
-
-
-Installing MeTA1
-
-MeTA1 needs several users to provide separation of privileges and to
-enhance security. Currently there are four required accounts (the numbers
-for uid and gid are examples only); the last one listed below (meta1) is
-not really required:
-
-meta1s:*:260:260:meta1 SMTPS:/nonexistent:/sbin/nologin
-meta1q:*:261:261:meta1 QMGR:/nonexistent:/sbin/nologin
-meta1c:*:262:262:meta1 SMTPC:/nonexistent:/sbin/nologin
-meta1m:*:263:263:meta1 misc:/nonexistent:/sbin/nologin
-meta1:*:264:264:meta1 other:/nonexistent:/sbin/nologin
-
-with the corresponding groups:
-
-meta1s:*:260:
-meta1q:*:261:
-meta1c:*:262:meta1s
-meta1m:*:263:meta1s,meta1q
-meta1:*:264:
-
-Note: on some operating systems the star character is not a valid value
-for the password field. Check passwd(5)^2.3to determine which value to use
-to disable the password.
-
-To check whether the required users and groups exist, run
-
-$ ./misc/sm.check.sh -p
-
-(in the build directory); see below how to override the default values for
-the user and group names.
-
-A shell script to setup the directories, files, etc. as described below is
-available in misc/sm.setup.sh.in. This script is modified by configure to
-create misc/sm.setup.sh (in the build directory) which is invoked when
-
-# make install
-
-is called. Most defaults in the installation script misc/sm.setup.sh can
-be overridden with environment variables (default is listed in square
-brackets):
-
-  * MTACONFDIR: [/etc/meta1] configuration directory.
-  * MTAQDIR: [/var/spool/meta1] queue directory; communication sockets are
-    created in this directory by default too.
-  * MTALOGDIR: [.] logging directory (relative to MTAQDIR). If logging is
-    done via syslog(3) then this directory is not used.
-  * MTAS [meta1s] SMTP Server user and group.
-  * MTAC [meta1c] SMTP Client user and group.
-  * MTAQ [meta1q] QMGR user and group.
-  * MTAM [meta1m] address resolver (misc) user and group.
-  * MTA [meta1] generic (configuration etc) user and group.
-  * MTALG group for logfiles; the install program tries operator,
-    sysadmin, and root.
-
-Important Notes:
-
- 1. The users and groups must be created before make install is invoked.
-
- 2. misc/sm.setup.sh will not overwrite existing files or directories,
-    hence it does not work for upgrading a system if configuration files
-    or directory/file owners need to changed.
-
-
-Directories, Files, and Permissions
-
-make install (i.e., misc/sm.setup.sh) will create all the required
-directories and files with the correct permissions provided the users and
-groups have been set up properly. This section explains what the created
-structure looks like.
-
-The CDB directories (0-9, A-F) must be owned by meta1s and have group
-meta1q with the permissions 0771:
-
-drwxrwx--x  2 meta1s  meta1q        0/
-
-Note: this means that everyone with access to the machine can guess the
-name of content files (see Section 10.2 for the format; the names can also
-be read from the logfiles if those are world-readable) and list (ls(1))
-them, however, they cannot access the content files as those are owned by
-meta1s with mode 0640 and group meta1c, e.g.,
-
--rw-r-----  1 meta1s  meta1c  1993 Jul  9 21:19 2/S000000000006B1D200
-
-The main (DEFEDB) and incoming queues (IBDB) must belong to meta1q and
-should not accessible by anyone else:
-
-drwx------  2 meta1q  meta1q        defedb/
-drwx------  2 meta1q  meta1q        ibdb/
-drwx------  2 meta1q  meta1q        ibdb/ibdb/
-
-Mailertable, aliases map, and other maps for SMAR (see Section 3.9.3)
-should belong to meta1m and can be readable as local conventions require:
-
--rw-r--r--  1 meta1m  meta1m         mt
--rw-r--r--  1 meta1m  meta1m         aliases.db
-
-In general, maps should be owned by the user id of the program that uses
-them, e.g., meta1q owns the QMGR configuration map qmgr_conf.db (see
-Section 3.8.1).
-
-The meta1 configuration file can either belong to root or the generic
-meta1 user:
-
--rw-r--r--  1 meta1   meta1          meta1.conf
-
-The directories in which the communication sockets between QMGR and the
-other programs are located must belong to meta1q and be group accessible
-for the corresponding program:
-
-drwxrws---  2 meta1q  meta1m        qmsmar/
-drwxrws---  2 meta1q  meta1c        qmsmtpc/
-drwxrws---  2 meta1q  meta1s        qmsmtps/
-
-The directory in which the communication socket between MCP and SMTPS is
-located must belong to meta1s:
-
-drwxr-x---  2 meta1s  meta1s        smtps/
-
-The logfiles must be owned by the corresponding user and may have relaxed
-group (or even world) read permissions:
-
--rw-r-----  1 meta1q  operator   qmgr.log
--rw-r-----  1 meta1m  operator   smar.log
--rw-r-----  1 meta1c  operator   smtpc.log
--rw-r-----  1 meta1s  operator   smtps.log
-
-To check whether an installation was successful, run
-
-# ./misc/sm.check.sh -P
-
-(in the build directory). Note: this script uses the same environment
-variables as the installation script.
-
-Upgrading from earlier MeTA1 Versions
-
-Currently there is no support for automated upgrades. If you have an
-earlier version of MeTA1 installed and want to upgrade, here are some tips
-(note: all programs should be run from the build directory unless
-mentioned otherwise):
-
-  * To check whether an installation was successful, run
-
-    # ./misc/sm.check.sh -P
-
-  * To check whether the configuration file needs changes, run
-
-    $ ./misc/smconf /etc/meta1/meta1.conf
-
-    If the file is syntactically invalid for this version of MeTA1 the
-    program will show those errors. Use -h as argument to see the
-    available option, e.g., -u might be useful.
-
-Run-Time Configuration of MeTA1
-
-Overview
-
-Configuration of MeTA1 can be done via command line parameters or via a
-configuration file (the latter is preferred, the former offers only a
-small subset of the available configuration options). If a configuration
-file and command line options are specified, then the options are
-currently processed in order, i.e., later settings override earlier ones
-for the same options. Information about the former is available by
-invoking a program with the option -h (MCP currently uses syslog(3)
-instead of stderr), it will show the usage as well as the default values.
-The syntax of the configuration files is specified in the following
-sections. To actually use a configuration file, the option -f $CONFIGFILE
-must be used, otherwise the programs use only the built-in default values,
-but not a configuration file. Option '-V' can be used to show version
-information, specifying '-V' multiple times shows more detail, e.g.,
-'-VVVVV' will show the configuration data including the default value for
-(almost) every option, and '-VVVVVV' will also show all available flags.
-
-Some configuration options can be set via maps, these maps are: qmgr_conf
-for QMGR (see Section 3.8.1) and access for SMTPS (indirectly via the
-address resolver, see Section 3.9.3).
-
-
-Configuration File Syntax
-
-The grammar for a MeTA1 configuration file is very simple:
-
-conf     ::=  entries
-
-entries  ::=  entry *
-
-entry    ::=  option | section
-
-section  ::=  keyword [name ] "{" entries "}" [";"]
-
-option   ::=  option-name "=" rhs
-
-rhs      ::=  value ";" | "{" value-list "}" [";"]
-
-A configuration file consists of entries, each entry is either an option
-or a section. An option has a name, an equal sign, and a value terminated
-by a semicolon or a (bracketed) list of values separated by comma^3.1. A
-section consists of a keyword, an optional name, and a (bracketed)
-sequence of entries. Keywords and options are not case sensitive. The
-layout of a configuration file does not matter, i.e., indentation and line
-breaks are irrelevant (in general, but see below for strings).
-
-
-Configuration File Values
-
-Values in a configuration file are usually strings or numbers. If a string
-is used, then it should be quoted, unless it contains no special
-characters which are treated specially by the grammar. If a string is very
-long it can be broken into substrings spread out over several lines (just
-like strings in ANSI C), e.g.,
-
-  somemessage = "this is a very long string which is spread "
-     "out over several lines because otherwise it is too "
-     "hard too read.";
-
-Numeric values can have the usual prefixes (known from the programming
-language C) of 0x for hexadecimal (with digits 0 to 9, A to F, and a to f)
-and 0 for octal (with digits 0 to 7). Valid boolean values are 0, false,
-off for false, and 1, true, on for true (case insensitive).
-
-In some cases it is possible to have units for values. Currently time and
-size values make use of this feature. Valid time units are w for weeks, d
-for days, h for hours, m for minutes, and s for seconds. Valid units for
-size are B for bytes, KB for kilo bytes, MB for mega bytes, and GB for
-giga bytes. It is allowed to specify a sequence of numbers and units,
-e.g., 1h 5m 12s. Unless otherwise specified, the default units for times
-and sizes in a configuration file are s and B, respectively; for those
-values these units can be used.
-
-
-Example Configuration File
-
-The installation script creates the file meta1.conf in the configuration
-directory (/etc/meta1, see Section 2.4). Check the comments in the file
-and edit it if required. A configuration file for meta1 contains several
-sections: a global section which specifies the locations of sockets and
-directories that are used by multiple components, and one section each for
-QMGR, SMAR, SMTP server, and SMTP client. Other sections may define
-services that are started by MCP, e.g., a local mailer.
-
-CDB_base_directory = "/var/spool/meta1/";
-
-qmgr {
-  AQ_max_entries = 8192;
-  smtpc { initial_connections = 19; max_connections = 101; }
-  smtps { max_connections = 5; max_connection_rate=160; }
-  max_errors_per_DSN=16;
-  wait_for_server = 4; wait_for_client = 4;
-  start_action = wait; user = meta1q;
-  restart_dependencies = { smtps, smtpc, smar };
-  path = "/usr/libexec/qmgr"; arguments = "qmgr -f /etc/meta1/meta1.conf";
-}
-
-smtps { flags = {8bitmime}; CDB_gid = 261; IO_timeout = 5m3s;
-  listen_socket { type = inet; port = 25; }
-  start_action = pass; pass_fd_socket = smtps/smtpsfd;
-  user = meta1s; path = /usr/libexec/smtps;
-  arguments = "smtps -f /etc/meta1/meta1.conf"; }
-
-smtpc {
-  Log_Level = 12; IO_timeout = 6m; wait_for_server = 4;
-  start_action = wait; user = meta1c; path = "/usr/libexec/smtpc";
-  arguments = "smtpc -f /etc/meta1/meta1.conf"; }
-
-smar {
-  Log_Level = 12;
-  nameserver = {10.10.10.9, 127.0.0.1};
-  DNS_timeout = 6;
-  start_action = wait; user = meta1m; restart_dependencies = { smtps, qmgr };
-  path = "/usr/libexec/smar"; arguments = "smar -f /etc/meta1/meta1.conf";
-}
-
-
-Common Global Configuration
-
-All of the following options have defaults and should only be changed if
-necessary.
-
- 1. hostname: set the hostname to use for the various components. This can
-    be set if gethostbyname(3) does not return a valid (fully qualified)
-    hostname (format: string).
- 2. CDB_base_directory: base directory of CDB (format: string); this
-    should either be empty (which is the default) or a path to a directory
-    including a trailing slash; the CDB library currently simply appends
-    the directory names (see Section 2.4.1) to it. It might be useful to
-    move some subdirectories to different disks (by creating (symbolic)
-    links (ln(1))) to spread the I/O load.
- 3. SMAR_socket: socket created by the address resolver over which clients
-    (SMTPS, QMGR) can send requests (format: string).
- 4. SMTPC_socket: communication socket between SMTPC and QMGR (format:
-    string).
- 5. SMTPS_socket: communication socket between SMTPS and QMGR (format:
-    string).
-
-The sockets are currently Unix domain sockets only, hence the value is
-simply the pathname of the socket.
-
-
-Common Configuration Options
-
-There is currently one configuration option which is the same across all
-modules but is not specified in the global section because it is specific
-to the individual modules.
-
- 1. log: this is a section with the following options:
-     1. facility: see syslog(3) for valid facilities, here are some valid
-        options provided the OS offers them: daemon, mail, auth, local0,
-        etc.
-     2. ident: identification string for openlog(3), defaults to name of
-        the modules. It might be useful to chose other identifiers, e.g.,
-        MeTA1 or MeTA1QMGR.
-     3. options: options for openlog(3) (without the leading LOG_) as
-        provided by the OS, e.g., pid or ndelay.
-
-    Example:
-
-    qmgr { log { facility = daemon; ident=meta1-qmgr; } }
-    smtps { log { facility = mail; ident=meta1-MTA; } }
-
-    Note: debug output is currently sent to stdout; syslog(3) is not used
-    for debugging.
-
-All modules have an option to set the amount of logging (log_level) that
-should be done. The larger the value the more information is logged. For
-normal operation a value of 9 is recommended. During testing values of 12
-to 14 are useful.
-
-
-Pathnames for Files, Directories, and Maps
-
-Most names of files (including maps) and directories in the configuration
-file have a default name (compiled into the binary) without an absolute
-path, e.g., aliases.db. If a pathname is not explicitly set in the
-configuration file or does not use a absolute path (i.e., begins with a
-slash), then the default is relative to either
-
- 1. the configuration directory: maps and configuration files, e.g.,
-    aliases.db and cert_file.
- 2. the main queue directory: pathnames of sockets, and databases to store
-    envelope information (IBDB, DEFEDB) or message contents (CDB).
-
-The paths for files mentioned in case 1 are taken relative to the path of
-the configuration file which is passed via the -f option to the various
-modules. For example: if SMAR is started as
-
-/usr/libexec/smar -f /etc/meta1/meta1.conf
-
-then the pathname used for the aliases map is /etc/meta1/aliases.db. This
-applies to the SMAR maps aliases, mailertable, and access (3.9.2), the
-QMGR qmgr_conf map (3.8.1), and the STARTTLS related files and directories
-used by the SMTP server (3.10) and client (3.11).
-
-The paths for files mentioned in case 2 are taken relative to the
-execution directory. All MeTA1 modules should be started (via MCP) in the
-main queue directory (default: /var/spool/meta1, see Section 2.4).
-
-See the various configuration options explained below how to override the
-defaults. Note: relative pathnames specified in the configuration file are
-(currently) always relative to the main queue directory.
-
-
-Configuration for MCP
-
-Every section in a MeTA1 configuration file that refers to one of its four
-main components (QMGR, SMTPS, SMTPC, and SMAR; see Section 1.1.1) has some
-options that are relevant for MCP. These MCP options are:
-
- 1. start_action: one of nostartaccept, accept, pass, wait (required).
-
- 2. listen_socket: this is a subsection that specifies the socket on which
-    a process should listen. It must be specified for any start_action
-    except wait. There are two different socket types available:
-
-     1. type = inet
-         1. port: port number on which process should listen (format:
-            numeric).
-         2. address: IP address on which process should listen, if none is
-            specified the process listens on all local (IPv4) addresses
-            (format: IPv4 address).
-
-     2. type = unix
-         1. path: pathname of Unix Domain socket on which process should
-            listen (format: string).
-         2. umask: umask for socket (format: numeric).
-         3. user: owner of socket (format: string).
-         4. group: group of socket (format: string).
-
- 3. pass_fd_socket: pathname of Unix Domain socket to pass a file
-    descriptor to the process.
- 4. user: user name to run process.
- 5. group: group name to run process.
- 6. restart_dependencies: list of other MeTA1 components that need to be
-    restarted when this one is restarted (or crashes).
- 7. path: path to program to execute (required).
- 8. arguments: arguments (argv), must start with name of program, see
-    execv(2) (required).
- 9. pass_id: option to use to pass a unique, numeric identifier to the
-    spawned process via the command line. The option will be inserted as
-    first argument. Example:
-
-    smtpc { pass_id = "-i"; min_processes = 4; max_processes = 4;
-      path = /usr/libexec/smtpc; arguments = "smtpc -f meta1.conf"; }
-
-    will cause MCP to start four smtpc processes, each with the options -i
-    $ID$ -f meta1.conf where $ID$ is replaced with a unique identifier.
-
-Notes about start_action:
-
-  * For start_action = pass the option pass_fd_socket must be specified;
-    in this case MCP binds to the specified socket (listen_socket) and
-    passes it via the Unix domain socket (pass_fd_socket) to the started
-    process.
-  * For start_action = nostartaccept MCP waits for incoming connections,
-    and then starts a process to handle a single connection.
-  * For start_action = accept MCP binds to the socket and then starts a
-    process to handle the connections without waiting for an actual
-    request.
-  * For start_action = wait MCP simply starts the requested number of
-    processes without passing them any open connections. This is intended
-    for processes that do not communicate with external clients.
-
-MCP is currently a generic control program that does not have any builtin
-knowledge about the various MeTA1 modules. Hence the MCP options for each
-MeTA1 component must be specified properly, there are no builtin defaults
-that could be associated with the functionality of the various MeTA1
-modules. The default configuration file created by the installation
-program contains the correct defaults. These should only be changed if
-really necessary.
-
-
-Configuration for QMGR
-
-The following configuration options are valid for QMGR:
-
- 1. AQ_max_entries: maximum number of entries in AQ (active queue) (unit:
-    entries). Note: this value must be larger than the largest number of
-    recipients accepted by a single transaction.
- 2. conf: name of configuration map (including extension), see Section
-    3.8.1 for details. See also Section 3.6 about relative pathnames.
- 3. control_socket: specify pathname of ``control'' socket (for querying
-    and making requests). This socket can be used by the query/control
-    program qmgrctl, see Section 4.6.3.
-
- 4. subsection DEFEDB:
-     1. base_directory: home directory for DEFEDB.
-     2. log_directory: log directory for DEFEDB. For better performance,
-        this directory can be set to point to a different disk than the
-        base directory of DEFEDB.
-
- 5. subsection DSN_handling:
-     1. merge_delay_max: maximum time to wait for merging multiple DSNs
-        into one (unit: s).
-     2. flags: configuration flags:
-         1. header_only: include only the headers in a DSN; by default the
-            first bounce includes the entire message and subsequent ones
-            include only the headers.
-         2. MIME_Format: use MIME to structure a DSN. Note: this is not
-            (yet) a DSN in the format specified by RFC 3464 [MV03].
-     3. max_errors_per_DSN: maximum number of error messages (failed
-        recipients) in a bounce (DSN) (unit: entries).
-
- 6. double_bounce_address: RFC 2821 address for double bounces; defaults
-    to <postmaster@hostname>.
- 7. subsection IBDB:
-     1. max_commit_delay: maximum time between commits to IBDB (unit: $\
-        mu$s)
-     2. size: maximum size of each IBDB file (unit: B).
-     3. max_open_TAs: maximum number of open transactions in IBDB before a
-        commit is performed (unit: entries).
-
-    Note: the configuration file offers no way to specify a base directory
-    for IBDB, however, the directory can be easily moved elsewhere and a
-    (symbolic) link (ln(1)) can be added.
-
- 8. subsection IQDB:
-     1. max_cache_entries: maximum number of entries in IQDB cache (unit:
-        entries). This must be larger than the sum of all recipients in
-        open transactions.
-     2. hash_table_entries: size of hash table for IQDB (unit: entries).
-        This must be larger than max_cache_entries.
-
- 9. log_level: logging level.
-10. min_disk_space: minimum amount of free disk space (unit: KB). This
-    value should be significantly larger than the maximum size of a
-    message to be accepted by the SMTP server, it should be as large as
-    the maximum message size multiplied by the maximum number of incoming
-    connections.
-11. OCC_max_entries: size of outgoing (SMTPC) connection cache (unit:
-    entries). This should be large enough to keep track of outgoing
-    connections over a time span that is at least as long as the maximum
-    retry time.
-12. ok_disk_space: amount of free disk space at which normal operation
-    continues (unit: KB). Must be larger than min_disk_space.
-13. queue_return_timeout: maximum time in queue (unit: s).
-14. queue_delay_timeout: send delay warning (``delayed DSN'') if the mail
-    is still in the queue after at least this duration (unit: s). To turn
-    off delayed DSNs set this to a value bigger than queue_return_timeout.
-    Note: based on the retry schedule the delayed DSN might be sent later
-    than the option specifies.
-15. retry_max_delay: maximum time for retrying a delivery (unit: s).
-16. retry_min_delay: minimum time for retrying a delivery (unit: s).
-
-17. subsection smtpc:
-     1. initial_connections: maximum initial number of outgoing
-        connections to a single host (unit: entries). The sliding window
-        for the slow start algorithm (see Section 3.8.1) is initialized
-        with this value.
-     2. max_connections: maximum number of outgoing connections to a
-        single host (unit: entries).
-     3. lmtp_max_rcpts_per_transaction: maximum number of recipients per
-        transaction for mail sent via LMTP (unit: entries).
-     4. smtp_max_rcpts_per_transaction: maximum number of recipients per
-        transaction for mail sent via (E)SMTP (unit: entries).
-
-     5. flags: configuration flags:
-         1. lookup_rcpt_conf: Look up recipient configuration data (see
-            Section 3.11.1) in the access map (see Section 3.9.3)
-
-         2. lookup_session_conf: Look up session configuration data (see
-            Section 3.11.1) in the configuration map (see item 2).
-
-     6. rcpt_conf_lookup_flags: If recipient configuration data (see item
-        17(e)i) is looked up in the access map, then these flags determine
-        which kind of lookups should be performed.
-
-         1. full_adress: use the full address as key.
-         2. detail_plus: lookup also ``user++@subdomain''.
-         3. detail_star: lookup also ``user+*@subdomain''.
-         4. star: lookup also ``user*@subdomain''.
-         5. domain: lookup domain part.
-         6. dotsubdomain: iterate through subdomains.
-         7. dot: lookup also ``.''.
-
-        The default is to perform all lookups.
-
-18. subsection smtps:
-     1. max_connection_rate: maximum incoming connection rate from a
-        single host (unit: connections/60s).
-     2. max_connections: maximum number of open incoming connection from a
-        single host (unit: entries).
-
-19. wait_for_client: maximum amount of time to wait for a client to become
-    available (unit: s)
-20. wait_for_server: maximum amount of time to wait for a server to become
-    available (unit: s)
-
-
-Configuration Map for QMGR
-
-QMGR implements a ``slow start'' algorithm to control the number of 
-concurrent connections to one IP address. Initially, it will at most
-create a (small) number of open connections up to a specified initial
-limit. For each successful delivery, the allowed number is increased up to
-specified maximum limit.
-
-For incoming connections, QMGR establishes two limits: the connection rate
-and the number of open connections.
-
-The Berkeley DB hash map qmgr_conf.db (the file should be owned by meta1q)
-can have the following entries:
-
- 1. oci: this key specifies the initial number of concurrent outgoing
-    connection to an IP address.
- 2. ocm: this key specifies the maximum number of concurrent outgoing
-    connection to an IP address.
- 3. octo: specify the timeout for an entry in the outgoing connection
-    cache.
- 4. icr: this key specifies the maximum rate for incoming connections (per
-    60s).
- 5. icm: this key specifies the maximum number of concurrently open
-    incoming sessions.
- 6. smtpc_session_conf: see Section 3.11.1
-
-oci:, ocm:, icr:, icm:, and smtpc_session_conf: take an IP address/net as
-parameter such that the limits can be imposed per IP address/net. For
-example:
-
-oci:127.0.0.1      5
-ocm:127.0.0.1     10
-oci:10            10
-ocm:10            50
-oci:               1
-ocm:               4
-icr:10             5
-icr:127.0.0.1    100
-icm:127.0.0.1    120
-
-Note, however, that the limits apply only to single IP addresses, they are
-not aggregated for nets. That is, for the example every single host in the
-IP net 10.x.y.z can have a maximum incoming connection rate of 5 messages
-per minute.
-
-The default values for these configuration options are set in the binary
-and can be changed via command line options or the configuration file (see
-Section 3.8):
-
- 1. -C n maximum number of concurrent connections to one IP address
-    [default: 100]
- 2. -c n initial number of concurrent connections to one IP address
-    [default: 10]
- 3. -O R=n maximum connection rate per 60s (SMTPS) [default: 100]
- 4. -O O=n maximum number of open connections (SMTPS) [default: 100]
-
-
-Configuration for SMAR
-
-
-Declaring Maps for SMAR
-
-In general, maps must be declared before they can get used. Each map
-declaration in a configuration file is a named subsection - the name is
-used for later references - map in the smar section with the following
-options:
-
- 1. type: type of the map; currently one of hash (Berkeley DB hash), cdb
-    (tinycdb), sequence, socket, and passwd.
- 2. file: the filename of the db file (including the extension) (for type
-    hash, cdb).
- 3. mapname: name of the map used in the protocol (type socket only).
- 4. address: IPv4 address of inet socket. (type socket only).
- 5. path: the pathname of the Unix domain socket (for type socket).
- 6. port: port for inet socket (type socket only).
- 7. maps: list of map names to use in the map (type sequence only).
-
-Note: for socket maps either a Unix domain socket (path) or an inet socket
-(address and port) must be specified.
-
-Example:
-
-map localusers { type = hash; file = "/etc/meta1/localusr.db"; }
-map otherusers { type = cdb; file = "/etc/meta1/otherusr.cdb"; }
-map password { type = passwd; }
-map seq1 { type = sequence; maps = { localusers, otherusers }; }
-map seq2 { type = sequence; maps = { password, otherusers }; }
-
-
-Configuration Options for SMAR
-
-The following configuration options are valid for SMAR:
-
- 1. access_map: this is a subsection that specifies the access control
-    map. See Section 3.9.3 for details.
-
-    Note: only one of file (1a) and name (1b) must be specified.
-
-     1. file: filename of access map (including extension) [default:
-        access.db].
-     2. name: name of access map . This can be used if a different map
-        type should be used, in which case the map must be declared as
-        explained in Section 3.9.1.
-
- 2. address_delimiter: list of delimiters (specified as string) for
-    address extensions in local part, [default: "+"]. Note: if
-    address_delimiter has more than one character, the first one that is
-    found in the local part of an address is used as delimiter in map
-    lookups (see Section 3.12). For example: if the following option is
-    used in the configuration file:
-
-    address_delimiter = "/_-";
-
-    then for the address ``<user/ext-list@dom.ain>'', the delimiter
-    for map lookups is ``/'' and the address detail is ``ext-list'', while
-    for the address ``<user-ext_list@dom.ain>'', the delimiter for map
-    lookups is ``-'' and the address detail is ``ext_list''.
-
- 3. aliases: this is a subsection that specifies the parameters for
-    aliases.
-
-    Note: only one of file (3a) and name (3b) must be specified.
-
-     1. file: filename of aliases map (including extension) [default:
-        aliases.db].
-     2. name: name of aliases map . This can be used if a different map
-        type should be used, in which case the map must be declared as
-        explained in Section 3.9.1.
-     3. flags:
-         1. localpart: the aliases map contains only localparts of
-            addresses and those are only looked up for local addresses.
-         2. local_domains: the aliases map contains fully qualified
-            addresses which are only looked up for local addresses. This
-            can be used similar to virtual users in sendmail 8, e.g.,
-
-            vuser1@virt1.tld:   user1
-
-            vuser2@virt1.tld:   user2
-
-            vuser3@virt2.tld:   user3
-
-         3. all_domains: the aliases map contains fully qualified
-            addresses which are looked up for all domains.
-         4. implicitly_match_detail: the items are looked up according to
-            the algorithm specified in Section 3.12.1. and additionally
-            +detail is implicitly matched when the pattern is
-            ``user@hostname''. That is, it overrides the default matching
-            explained in case 1e in Section 3.12.1.
-         5. replace_macros: replace macros in the RHS of the map entries
-            by the appropriate value, see Section 3.12.3.
-         6. preserve_domain: if the RHS of an entry is an unqualified
-            address, do not append the local hostname to it but the domain
-            of the original address, i.e., preserve the original domain.
- 4. DNS: this subsection contains DNS related options.
-     1. nameservers: list of up to four IPv4 addresses^3.2of nameservers.
-        Note: it is important that all of these nameserves work properly.
-        Currently they are used ``round robin'' without excluding
-        nameservers that do not answer^3.3.
-     2. retries: maximum number of retries. A value of 0 means one query
-        only, i.e., no retry.
-     3. timeout: the default timeout for a single DNS query (unit: s).
-        Notes:
-          o the timeout for a DNS request is the product of the number of
-            tries and the individual timeout, i.e., (retries + 1) *
-            timeout.
-          o this value is only the default timeout which can be overridden
-            by an application. For example, QMGR dynamically increases the
-            timeout for addresses which did not resolve in earlier tries.
-     4. flags: The flag use_resolvconf causes the list of nameservers (see
-        4a) to be read from /etc/resolv.conf. This flag is set by default
-        unless the nameservers option is used. Note: the list of
-        nameservers is not updated when /etc/resolv.conf is changed, smar
-        needs to be restarted to achieve that.
-
-        More flags can be found in Section 8.4.
-
- 5. dnsbl: specify a DNS based blacklist^3.4. This section can be
-    specified multiple times^3.5; it has the following required options:
-      + domain: specify the domain to use for DNS lookups, e.g.,
-        dnsbl.tld.
-      + tag: specify the tag to use for lookups in the access map (which
-        must be enabled, see Section 3.10, 3b).
-    The client IPv4 address A.B.C.D is looked up via DNS as D.C.B.A.domain
-    querying for an A record. If an A record W.X.Y.Z is found, then it is
-    looked up in the access map as tag:W.X.Y.Z. for temporary and
-    permanent DNS lookup failures the entries that will be checked in the
-    access map are tag:temp and tag:perm, respectively.
-
-    Notes:
-      + DNS lookups in blacklists can be disabled via entries in the
-        access map using the tag cltaddr, see Section 3.9.3.
-      + Some DNS blacklists return multiple A records. For those the A
-        records are checked (in the order returned by the DNS server)
-        until an access map entry is found. This is an intermediate
-        solution as it may cause random results if multiple access map
-        entries for a DNS blacklist exist. However, as long as all of them
-        have the same return code type (i.e., temporary or permanent),
-        this behavior is sufficient.
-      + currently a colon is added as delimiter after tag, this may be
-        removed in later versions to allow for more flexibility; e.g., the
-        configuration option itself can include a delimiter.
-
-    The access map entry should have one of the usual rejection RHSs as
-    explained in 3.9.3. Example: configuration file:
-
-    smar { dnsbl { domain = dnsbl.tld; tag = dnsbltld; } }
-
-    access map:
-
-    dnsbltld:127.0.0.1  error:550 5.7.1 listed at dnsbl.tld as open relay
-    dnsbltld:127.0.0.2  error:550 5.7.1 listed at dnsbl.tld as spam source
-    dnsbltld:127.0.0.9  error:451 4.7.1 listed at dnsbl.tld as suspicious
-    dnsbltld:temp       error:451 4.7.1 temporary lookup failure at dnsbl.tld
-
-    If multiple DNS based blacklists are specified, the DNS queries are
-    made concurrently but the lookups in the access map are performed in
-    the order in which the blacklists are given; the first successful
-    lookup is used as result, no further priorization is performed.
-
- 6. greylisting: specify greylisting options, see Section 3.9.4 for
-    details.
-     1. grey_wait: how long before greylisted can be confirmed.
-     2. grey_expire: timeout for greylisted entries (did not confirm
-        within that time).
-     3. white_expire: expire whitelisted entries after this time if
-        necessary.
-     4. white_timeout: force whitelisted entries to reconfirm after this
-        time.
-     5. main_DB_name: name of main database (including .db extension).
-     6. secondary_DB_name: name of secondary database (including .db
-        extension).
-     7. expire_limit: try to expire entries when this limit is reached.
-     8. netmask: by default the entire IPv4 address is used as a key,
-        however, by specifying a netmask, e.g., 0xFFFFFF00, the least
-        significant bits can be cut off. This can be used to deal with
-        server farms, see Section 3.9.4, e.g., if those are in the same
-        class C subnet.
-
- 7. local_user_map: this is a subsection that specifies a map of valid
-    local addresses.
-     1. name: Name of the map of valid local addresses; the map must have
-        been declared as explained in Section 3.9.1.
-     2. flags:
-         i. implicitly_match_detail: +detail is implicitly matched when
-            the pattern is ``user@hostname''. That is, it overrides the
-            default matching explained in case 1e in Section 3.12.1.
-
- 8. log_level: logging level.
-
- 9. mailertable: this is a subsection that specifies a mailertable,
-    currently you can specify exactly one of the following two options:
-     1. file: filename of mailertable [default: mt]. In this case a plain
-        text file is read during startup and placed in an internal hash
-        table.
-     2. name: name of a mailertable map that has been declared before (see
-        Section 3.9.1).
-
-     3. flags: these flags can be used to select a subset of the matching
-        described in Section 3.12.1.
-         1. full_adress: use the full address as key.
-         2. detail_plus: lookup also ``user++@subdomain''.
-         3. detail_star: lookup also ``user+*@subdomain''.
-         4. star: lookup also ``user*@subdomain''.
-         5. domain: lookup domain part.
-         6. dotsubdomain: iterate through subdomains.
-         7. dot: lookup also ``.''.
-
-        The default is domain, dotsubdomain, dot.
-
-    The format of entries in the map is explained in Section 3.9.3. Note:
-    reloading mailertable (Section 4.7) while SMAR is running can be done
-    only if it is declared as Berkeley DB (case 9b with the proper map)
-
-
-Configuration Maps for SMAR
-
-SMAR requires a mailertable, and it can make use of an alias map as well
-as an access map, all of which are described in the subsequent sections.
-
-
-Access Map
-
-To activate the access map the flag access (see Section 3.10, item 3b) (or
-the option -a) must be given to the SMTP servers. All entries consist of a
-left hand side (LHS, key) which in turn has a tag and a (partial) address
-and a right hand side (RHS, value). Valid tags are:
-
-Tag                  refers to
-
-from:                envelope sender address (MAIL)
-
-to:                  envelope recipient address (RCPT)
-
-cltaddr:             client IPv4 address
-
-cltname:             client host name
-
-cltresolve:          result of forward and reverse client lookup
-
-mxbadip:             IPv4 addresses that are not allowed for MX - A
-                     records
-
-certissuer:          DN of CA cert that signed that presented cert
-
-certsubject:         DN of presented cert
-
-protectedrcpt:       restrictions for recipient address (see Section
-                     3.10.3)
-
-smtps_session_conf:  configuration options for a session in the SMTP
-                     server (see Section 3.10.1)
-
-smtpc_rcpt_conf:     configuration options for recipient in the SMTP
-                     client (see Section 3.11.1)
-
-Valid addresses for from: and to: are RFC 2821 addresses without the angle
-backets (localpart@domain) as well as partial addresses in the form
-localpart and @domain, i.e., domains must be preceeded with an at (@)
-sign. Valid addresses for cltaddr: and mxbadip: are IPv4 addresses and
-(sub)nets, and for cltname: host names. The client host name is determined
-by performing a reverse lookup (PTR record) for its IP address. The
-resulting names are looked up as A records. Only if one of the A records
-matches the client IP address, the host name is set. Note: the host name
-has a trailing dot after DNS resolution, this dot must be included in the
-entry. The result of these lookups can be used for cltresolve: where the
-following keys are valid:
-
-ok       reverse and forward lookup match
-
-no       reverse and forward lookup do not match
-
-tempptr  reverse lookup (PTR) caused a temporary error
-
-tempa    forward lookup (A) caused a temporary error
-
-Valid values for RHS are
-
-relay                 allow relaying; currently only for to:, cltaddr:,
-
-                      cltname:, certissuer:, and certsubject:
-
-ok                    accept command
-
-error:XYZ A.B.C.D     return an error consisting of SMTP reply code XYZ,
-text
-
-                      enhanced status code A.B.C.D, and text,
-
-                      i.e., the part after error: is returned to the
-                      client.
-
-reject                same as error:550 5.7.0 Rejected.
-
-discard               accept command but silently discard its effects.
-
-cont                  stop current check (e.g., map lookup), but continue
-                      others.
-
-Some tags may allow for other RHS values, these are explained when those
-tags are discussed in more detail.
-
-Optionally a RHS can be preceeded by the modifier quick:. For an error:
-entry it causes an immediate rejection when the entry matches. Otherwise
-rejections can be delayed to the RCPT stage - if SMTPS is configured
-appropriately, see Section 3.10, item 3c - and can be overridden using the
-modifier quick: together with ok or relay in the access map for the
-recipient address with the to: tag. Using the modifier quick: together
-with relay for an entry with the cltaddr: tag causes it to override all
-other access map checks. quick:ok for an entry with the cltaddr: tag
-causes it to override other access map checks unless they are necessary to
-allow relaying.
-
-Domain names (@domain) must have an exact match, subdomain matching can be
-specified with a leading dot, i.e., @.domain, see Section 3.12.1.
-
-Examples:
-
-cltresolve:tempptr       error:451 4.7.1 reverse lookup failed
-
-mxbadip:127.0.0.1        error:551 5.7.1 Bad IP address 127.0.0.1 in MX/A
-                         list
-
-mxbadip:192.168.255.255  error:551 5.7.1 Bad IP address 192.168.255.255 in
-                         MX/A list
-
-from:@spammer.domain     error:551 5.7.1 No spammers
-
-from:@.spammer.domain    error:551 5.7.1 No spammers in subdomains either
-
-to:root                  error:551 5.7.1 No mail to root
-
-to:abuse                 quick:ok
-
-cltaddr:10               error:551 5.7.1 No direct mail from 10.x.y.z
-
-cltname:spammer.domain.  quick:error:551 5.7.1 No mail from spammers
-
-to:@primary.domain       relay
-
-cltaddr:10               relay
-
-cltaddr:127.0.0.1        quick:relay
-
-
-Discard
-
-The effect of discard depends on the protocol stage in which it is
-returned. If it is returned for a session, e.g., when a client connects,
-all transactions in the session are discarded. If it is returned for MAIL
-only that transaction is discarded. If it is returned for RCPT only that
-recipient is discarded; however, if no valid recipients are left, the
-entire transaction is discarded. Moreover, if quick:discard is returned
-for one recipient the entire transaction is discarded too.
-
-
-Mailertable
-
-The address resolver implements an asynchronous DNS resolver and by
-default it uses a file called mt (mailertable) (see Section 3.9.2, item 9)
-which consists of domain parts of e-mail addresses and corresponding IP
-addresses (in square brackets) or domain/host names. An entry consists (as
-usual in a map) of a LHS and a RHS; in the case of a flat text file, i.e.,
-case 9a of Section 3.9.2, those are separated by one or more whitespace
-characters.
-
-LHS     ::  [ local "@" ] [ "." ] hostname | "."
-        =
-
-RHS     ::  [[ port "^" ] ["esmtp:"]] hosts | "lmtp:" | port "
-        =   ^"lmtp:" hosts
-
-port    ::  integer
-        =
-
-hosts   ::  hostname | iplist
-        =
-
-iplist  ::  "[" IPv4-address "]" [ " " iplist ]
-        =
-
-The key (LHS) is an address (without angle brackets), a hostname, or a dot
-(denoting the default entry), the value (RHS) consists of an optional port
-number, an optional (esmtp) mailer and a hostname or a list of IPv4
-addreses (in square brackets) which are separated by spaces. If LMTP
-should be used, then the lmtp mailer must be selected. There are two
-cases: just lmtp: by itself means the delivery agent will use the Unix
-domain socket specified in the configuration file (see Section 3.11, item
-2), if an inet socket should be used then a port and a host must be
-specified. A hostname is subject to MX lookups.
-
-Example:
-
-localhost           lmtp:
-
-SPAM.FILTER.DOMAIN  2525^esmtp:[127.0.0.1]
-
-LMTPHOST.MY.DOMAIN  525^lmtp:[10.11.12.13]
-
-MY.DOMAIN           esmtp:[10.1.2.3]
-
-ANOTHER.DOMAIN      esmtp:MTA.SERVER
-
-.TLD                esmtp:GATE.WAY
-
-.                   esmtp:SMART.HOST
-
-Note: currently this file must exist, even if there are no entries (it is
-created during installation).
-
-
-Aliases
-
-To specify aliases for local addresses the map aliases.db (Section 3.9.2,
-item 3a) is used. The key in the map must be
-
-  * the local part of a valid (local) e-mail address,
-  * or a complete local e-mail address,
-  * or any e-mail address,
-
-based on the flags of the aliases option (see Section 3.9.2, 3c). The
-value (RHS) for an alias entry is a list of one or more RFC 2821 addresses
-(including the angle brackets) separated by spaces (not commas). If the
-RHS has only a single address which does not start with an angle bracket,
-then it is converted into an RFC 2821 address by SMAR, i.e., SMAR will
-append the hostname of the machine and put angle brackets around the
-string. Example:
-
-myalias: localuser
-
-mylist: <user1@my.dom> <user2@my.dom> <localuser@local.host>
-
-owner-mylist: someuser
-
-For mailing lists, the owner- notation is supported, i.e., if there are
-aliases list and owner-list then mail sent to list will use owner-list as
-envelope sender address; the original domain will be preserved.
-
-Example for the flag local_domains (see 3.9.2, 3(c)ii). Let two domains be
-local, i.e., in mailertable:
-
-first.dom    lmtp:
-
-second.dom   lmtp:
-
-and these entries be in aliases:
-
-myalias@first.dom: user1
-
-another@second.dom: user2
-
-Then mail to <myalias@second.dom> and <another@first.dom> would be
-rejected while mail to <myalias@first.dom> or <another@second.dom> would
-be accepted.
-
-Aliases can be nested (currently up to 5 levels, see smar/rcpts.c).
-
-
-Greylisting
-
-MeTA1 supports a very simple form of greylisting [Hara] which only uses
-the client IP address as key [Posa] instead of a tuple consisting of
-client IP address, envelope sender, and envelope recipient. The idea
-behind greylisting is simple: do not accept mail from an unknown source on
-the first connection, but reject it with a temporary error. Any MTA that
-conforms to RFC 2821 [Kle01] will try to send the mail later on, however,
-spamming systems often do not do that. An IP address can be in three
-different states: unknown: the client has not connected before or the
-entry is expired from the database, greylisted: the client has connected
-before but it did not yet connect again within the configured time
-interval, whitelisted: the client has connected before and it connected
-again within the configured time interval. The time interval is specified
-by its lower limit grey_wait and its upper limit grey_expire. A lower
-limit is used to prevent system from getting accepted that just send a
-single message within a few seconds again and again. The upper limit is
-used to avoid filling up the database. If an entry has made it to the
-whitelisted state, it will stay there for (at least) up to the timeout
-specified by white_expire. The greylisting algorithm implemented in MeTA1
-uses another timeout white_timeout after which a whitelisted entry is
-considered stale and must go through the greylisting stages again, i.e.,
-it is considered to be in state unknown. Each time a mail is sent from a
-whitelisted host, the entry is updated, to avoid that systems which
-regularly sent mail become greylisted again.
-
-Greylisting is performed at the RCPT stage of the SMTP dialogue. It is
-only done when a valid recipient is specified, i.e., all other checks must
-have been successful. Hence clients that do not try to send mail or just
-try invalid recipient addresses will not be added to the greylisting
-database. If a transaction is subject to greylisting then the session is
-aborted with an 421 error. If a server uses callbacks to verify the sender
-address, then the option delay_greylisting_error_until_DATA (see Section
-3.10, item 3d) is useful to avoid unnecessary delays. Here is an example:
-host A is the main MX server for domain example.com and it uses
-greylisting, host B is the main MX server for domain example.net and it
-uses sender callbacks. If a mail is sent to host B for <rcpt@example.net>
-with the sender address <user@example.com> then host B will connect to
-host A to test whether <user@example.com> is a valid recipient. However,
-if host A does not have host B in its whitelist, it will return a 421
-error after the RCPT To:<user@example.com> command, which (depending on
-the implementation of the sender callback) will cause host B to
-temporarily reject the mail for <rcpt@example.net>. By specifying the
-option delay_greylisting_error_until_DATA on host A the RCPT command will
-succeed and the original mail to <rcpt@example.net> will go through
-without delay.
-
-The greylisting implementation uses two persistent databases (specified by
-main_DB_name and secondary_DB_name), where the second DB is just a
-secondary index (by expiration time) for the main DB. These databases
-should be on a filesystem with sufficient free disk space depending on how
-many connections from different clients the MTA receives. Entries are only
-removed from the DB if there are more than expire_limit elements. However,
-if none of the entries are expired yet, then the number of elements can
-exceed that limit.
-
-
-Greylisting: Whitelisting
-
-Greylisting can be disabled for selected hosts by adding them to the
-access map (see Section 3.9.3), e.g.,
-
-cltaddr:10         relay
-
-cltaddr:127.0.0.1  quick:relay
-
-
-Possible Problems with Greylisting
-
-Some legitimate mailers do not behave properly and will not retry a mail
-that had a temporary error. This can cause mail loss in various
-situations, e.g., because the receiving system is currently out of some
-resources. However, to minimize the impact of greylisting on these
-misbehaving mailers it might be useful to explicitly whitelist them as:
-
-cltaddr:12.107.209.244   ok
-
-cltaddr:64.12.137        ok
-
-A list of such broken mailers can be found at http://cvs.puremagic.com/
-viewcvs/greylisting/schema/whitelist_ip.txt [Harb]. A related problem are
-server farms where a mail might be resent from a different IP address.
-These should probably be whitelisted too; some of these can be found at
-the URL given before. However, entries in that file which have the comment
-``unique sender per attempt'' do not need to be whitelisted as this
-implementation does not use the sender address.
-
-Note: if a client authenticates via STARTTLS or AUTH such that relaying is
-allowed then greylisting is disabled for that client.
-
-
-Configuration for SMTP Server
-
-The following configuration options are valid for SMTPS:
-
- 1. auth: this is a subsection that specifies the parameters for AUTH
-    support. It is only available if the system has been configured with
-    the option --enable-SASL, see Section 2.2.1.
-     1. flags: flags for SMTP AUTH
-
-        See the Cyrus SASL documentation for the meaning of these flags:
-        noplaintext, noactive, nodictionary, forward_secrecy, noanonymous,
-        pass_credentials, mutual_auth.
-
-     2. trusted_mechanisms: list of SASL mechanisms for which relaying is
-        allowed if a client successfully authenticated using one of those
-
-    Note: the name for the Cyrus-SASL configuration file is currently
-    meta1.conf. That file can be used to adjust the list of mechanisms
-    (option mech_list) that should be advertised (besides many other
-    things), hence this option is not in the SMTP server itself.
-
- 2. CDB_gid: (numeric) group id for CDB files, i.e., the group id of
-    meta1c, see Section 2.4.1.
- 3. flags:
-     1. 8bitmime: offer 8BITMIME: MeTA1 is 8 bit transparent, but it does
-        not perform any conversion, so this option should only be used if
-        all communication partners can deal with 8 bit data.
-     2. access: use access map (in SMAR). Note: currently this flag is
-        required to perform a reverse lookup for a client IP address to
-        get the hostname of the client which then can be used for logging
-        and the Received: header.
-     3. delay_checks: delay acceptance check until RCPT stage (unless
-        explicitly overridden, see Section 3.9.3).
-     4. delay_greylisting_error_until_DATA: if greylisting (3e) is enabled
-        then wait until the DATA command to return an error; see Section
-        3.9.4 for details.
-     5. greylisting: enable greylisting (which must also be enabled in
-        SMAR, see Section 3.9.2 item 6), see Section 3.9.4 for details.
-     6. lmtp_does_not_imply_relaying: even if a domain in the mailertable
-        has lmtp: as RHS do not implicitly allow relaying to it, i.e., do
-        not consider the domain as ``local'' with respect to relaying.
-        This is useful for an MSA to avoid external mail to local domains
-        without authentication.
-     7. soft_bounce: change permanent (5xy) SMTP error replies into
-        temporary (4xy) errors. This is a useful feature for testing to
-        avoid bounces due to misconfigurations.
-     8. require_EHLO_before_MAIL: require EHLO (or HELO) before a MAIL
-        command.
-     9. strict_EHLO_checks: perform a strict syntax check on the argument
-        for EHLO (or HELO).
-
-    10. xverp: offer XVERP extension to turn on VERP [Ber97] support for a
-        transaction. This is a parameter for the MAIL command, e.g.
-
-        MAIL From:<sender@some.domain> XVERP
-    11. allow_data_before_greeting: allow a client to send data before the
-        initial 220 greeting.
-
-    12. prdr: PRDR is an SMTP extension [Hal07] to return individual RCPT
-        status after the end of data (similar to LMTP). This feature is
-        turned on if a policy milter is configured (see item 17).
-
-    13. lookup_session_conf: Look up session configuration data (see
-        Section 3.10.1) in the access map (which must be activated, see 3b
-        ).
-
- 4. id: unique identifier for SMTP server (0); see Section 3.10.2.
- 5. io_timeout: timeout for SMTP operations.
- 6. max_threads: maximum number of threads.
- 7. max_bad_commands_per_session: maximum number of bad, i.e., unknown,
-    SMTP commands per session accepted by server. After this limit is
-    reached the connection is terminated with an 421 error.
- 8. max_invalid_addresses_per_session maximum number of invalid, e.g.,
-    unknown, RCPT addresses per session accepted by server. After this
-    limit is reached the connection is terminated with an 421 error.
- 9. max_nop_commands_between_transactions: maximum number of NOOP, RSET,
-    and related SMTP commands between two successful transactions accepted
-    by server. After this limit is reached the connection is terminated
-    with an 421 error.
-10. max_bad_commands_per_transaction: maximum number of bad, i.e.,
-    unknown, SMTP commands per transaction accepted by server. After this
-    limit is reached the connection is terminated with an 421 error.
-11. max_nop_commands_in_transaction: maximum number of NOOP and related
-    SMTP commands in a single transaction accepted by server. After this
-    limit is reached the connection is terminated with an 421 error.
-12. max_invalid_addresses_per_transaction maximum number of invalid, e.g.,
-    unknown, RCPT addresses per transaction accepted by server. After this
-    limit is reached the connection is terminated with an 421 error.
-13. max_recipients_per_session: maximum number of recipients per session.
-14. max_recipients_per_transaction: maximum number of recipients per
-    transaction.
-15. max_hops: maximum number of hops (Received: headers). If this value is
-    exceeded the incoming mail is rejected because it is considered a
-    possible mail loop.
-16. max_message_size: maximum message size (unit: KB).
-17. policy_milter: this is a subsection that specifies the parameters for
-    pmilter support (see Section 5). It is only available if it has been
-    enabled during configure (--enable-pmilter, see Section 2.2.1).
-     1. socket: this is a subsection that specifies the socket to
-        communicate with policy milter. The type (option type) of the
-        socket must be either inet or unix.
-         1. type = inet
-             1. port: port number for connection.
-             2. address: IP address for connection.
-
-         2. type = unix
-             A. path: pathname of Unix Domain socket.
-
-     2. timeout: maximum amount of time to wait for a reply from a policy
-        milter.
-     3. flags: policy milter flags. If the connection to pmilter fails
-        then SMTPS will ignore pmilter by default. This behavior can be
-        changed by setting one of following two flags:
-         1. abort: if the connection to pmilter fails then abort the
-            current session with a 421 error.
-         2. accept_but_reconnect: if the connection to pmilter fails then
-            continue the current session but try to reconnect for the next
-            session.
-
-18. processes: number of processes to start.
-19. protected_recipients: this is a subsection which provides a few simple
-    options to protect recipients by restricting who can send mail to
-    them.
-     1. allow_by: this is a required subsection which has two possible
-        flags (at least one must be specified).
-         1. sender: allow sending mail based on the envelope sender (MAIL)
-            address. Even though this address can be forged it provides
-            some basic protection.
-         2. client_ip: allow sending mail based on the client IP address.
-
-     2. match_type: this specifies what type of matching should be done.
-        By default, exact matches are required. Alternatively, one of the
-        following two options can be selected:
-         1. generic_lookup: the items are looked up according to the
-            algorithm specified in Section 3.12.1.
-         2. implicitly_match_detail: the items are looked up according to
-            the algorithm specified in Section 3.12.1. and additionally
-            +detail is implicitly matched when the pattern is
-            ``user@hostname''. That is, it overrides the default matching
-            explained in case 1e in Section 3.12.1.
-
-    See Section 3.10.3 for details.
-20. max_transactions: maximum number of transactions per session.
-
-21. tls: this is a subsection that specifies the parameters for STARTTLS
-    support. It is only available if the system been configured with the
-    option --enable-TLS, see Section 2.2.1. See Section 11.1 for some
-    background information about these options.
-
-     1. cache_size: size of TLS session session cache (0: disable cache).
-     2. cache_timeout: timeout for entries in TLS session session cache.
-     3. cert_file: file with certificate in PEM format.
-     4. key_file: file with private key for certificate in PEM format.
-     5. CAcert_file: file with CA certificate in PEM format.
-     6. CAcert_directory: directory with (symbolic links for) CA
-        certificates in PEM format.
-
-     7. flags: some flags are available to influence the behavior of the
-        SMTP server with respect to STARTTLS.
-         1. allow_relaying_if_verified: if the client presented a
-            certificate that can be verified by the CA certificates that
-            are available to the server (see above: CAcert_file and
-            CAcert_directory), then relaying is allowed for the SMTP
-            session.
-
-         2. check_access_map_for_relaying: if this flag is set then the
-            access map (which must be activated, see 3b) is checked to see
-            whether relaying should be allowed for a client which
-            presented a certificate that has been verified (see above).
-            For this purpose, the DN of the cert issuer is looked up in
-            the access map using the tag certissuer:. If the resulting
-            value is relay, relaying is allowed. If it is cont, the DN of
-            the cert subject is looked up next in the access map using the
-            tag certsubject:. If the value is relay, relaying is allowed;
-            every other value is currently ignored.
-
-            To avoid problems with the DN names in map lookups, they are
-            modified as follows: each non-printable character and the
-            characters '<', '>', '(', ')', '"', '+', ' ' are replaced by
-            their hexadecimal ASCII value with a leading '+'. For example:
-
-            /C=US/ST=California/O=endmail.org/OU=private/CN=
-            Darth Mail (Cert)/emailAddress=darth+cert@endmail.org
-
-            is encoded as:
-
-            /C=US/ST=California/O=endmail.org/OU=private/CN=
-            Darth+20Mail+20+28Cert+29/emailAddress=
-            darth+2Bcert@endmail.org
-
-            Examples:
-
-            To allow relaying for everyone who can present a cert signed
-            by
-
-            /C=US/ST=California/O=endmail.org/OU=private/CN=
-            Darth+20Mail+20+28Cert+29/emailAddress=
-            darth+2Bcert@endmail.org
-
-            simply use:
-
-            certissuer:/C=US/ST=California/O=endmail.org/OU=private
-            /CN=
-
-            Darth+20Mail+20+28Cert+29/emailAddress=                  relay
-            darth+2Bcert@endmail.org
-
-            To allow relaying only for a subset of machines that have a
-            cert signed by
-
-            /C=US/ST=California/O=endmail.org/OU=private/CN=
-            Darth+20Mail+20+28Cert+29/emailAddress=
-            darth+2Bcert@endmail.org
-
-            use:
-
-            certissuer:/C=US/ST=California/O=endmail.org/OU=private
-            /CN=
-
-            Darth+20Mail+20+28Cert+29/emailAddress=                  cont
-            darth+2Bcert@endmail.org
-
-            CertSubject:/C=US/ST=California/O=endmail.org/OU=
-            private/CN=
-
-            DeathStar/emailAddress=deathstar@endmail.org             relay
-
-            Notes:
-              # line breaks have been inserted after CN= for readability,
-                each tagged entry must be one (long) line in the access
-                map.
-              # if OpenSSL 0.9.6 is used then the emailAddress= part of a
-                DN is replaced by Email=.
-
-     8. requirements_violation: This option decides how to (globally)
-        handle TLS requirement violations (see Section 3.10.1). Possible
-        values are: permfail: generate permanent failure, tempfail:
-        generate temporary failure, abort: abort session. These option
-        take effect when a MAIL command is issued by the client.
-
-22. session_features: This section can be used to define classes of
-    features for an SMTP server session which then can be referenced via
-    the access map. Available flags are a subset of those listed in item 3
-    : starttls, auth, delay_checks, allow_data_before_greeting,
-    require_EHLO_before_MAIL, strict_EHLO_checks, check_EHLO.
-
-    Example: to turn off STARTTLS for some clients, declare a notls class
-    in the configuration file:
-
-    session_features  notls { flags = { -starttls }}
-
-    and reference it in the access map for those clients:
-
-    smtps_session_conf:217.126.135.148      session_feature=notls;
-
-
-
-SMTP Server Session Configuration
-
-Some options can be set via the access map (see Section 3.9.3, tag
-smtps_session_conf) because they apply to a session, not globally.
-Currently available are: STARTTLS requirements (tls_requirements) (see
-Section 3.13) and session_features (see Section 3.10, item 22).
-
-
-Multiple SMTP Servers with different Configurations
-
-The normal way to run multiple SMTP servers is to let MCP start several
-SMTP servers. Each SMTP server must given a unique identifier (see Section
-3.10, item 4) and each SMTP server section in meta1.conf must have a
-unique name (e.g., MTA and MSA), which is passed via the option -N name to
-smtps. Example: meta1.conf:
-
-smtps MTA {
-  id = 0;
-  listen_socket { type=inet; port = 25; }
-  start_action = pass; pass_fd_socket = smtps/mtafd;
-  user = meta1s;
-  path = /usr/libexec/smtps;
-  arguments = "smtps -N MTA -f /etc/meta1/meta1.conf";
-  log { facility = mail; ident=meta1-MTA; }
-}
-
-smtps MSA {
-  id = 1;
-  listen_socket { type=inet; port = 587; }
-  start_action = pass; pass_fd_socket = smtps/msafd;
-  user = meta1s;
-  path = /usr/libexec/smtps;
-  arguments = "smtps -N MSA -f /etc/meta1/meta1.conf";
-  log { facility = mail; ident=meta1-MSA; }
-  auth { trusted_mechanisms = "CRAM-MD5 DIGEST-MD5";
-         flags = { noplaintext }; } }
-
-For tests it is also possible to let MCP start only one SMTP server which
-creates several copies of itself if multiple daemon addresses are
-specified (see Section 3.10, item 1). Note: this only works for
-unprivileged ports because the SMTP server does not run as root.
-
-
-Protecting Recipients
-
-A few simple features are available to protect recipients by restricting
-who can send mail to them. To do this the configuration section
-protected_recipients must be turned on and at least one of the two flags
-sender and client_ip must be selected (see Section 3.10, item 19a). If
-this is done, then every recipient is looked up in the access map (which
-must be activated, see Section 3.10, item 3b), using the tag
-protectedrcpt:. If a matching entry is found, it must have a list of (one
-or more) restrictions, each of which must be one of the following:
-
-+-----------------------------------------------+
-| restriction          | required allow_by flag |
-|----------------------+------------------------|
-| from:sender          | sender                 |
-|----------------------+------------------------|
-| cltaddr:IPv4-address | client_ip              |
-|----------------------+------------------------|
-| list:alias           | sender                 |
-+-----------------------------------------------+
-
-The meaning of the first two restriction types should be obvious, the
-third one is interesting: it refers to an alias (in the aliases map, see
-Section 3.9.3) and requires that the sender address matches one of the
-entries to which the alias expands. This can be used to allow only
-subscribed members of a mailing list to send mail to it.
-
-The restrictions are evaluated sequentially, if there is a match, the
-recipient is accepted (sequential OR). If none of them matches, the
-recipient is rejected.
-
-By default exact matches are required. However, if the flag generic_lookup
-is set (see Section 3.10, item 19b), the items are looked up as specified
-in Section 3.12.1. The flag implicitly_match_detail is useful for the
-list: restriction if a sender uses +detail without having that specified
-during subscription.
-
-Examples: consider the following aliases map:
-
-list1:  <user1-1@l1-1.dom> <user2-1@l1-1.dom> <list2@local.dom>
-
-list2:  <user1-2@l2-1.dom> <user2-2@l2-2.dom>
-
-list3:  <user1-3@l3-1.dom> <user2-3@l3-2.dom>
-
-together with this access map:
-
-protectedrcpt:list1@local.dom  list:<list1@local.dom>
-
-protectedrcpt:list3            from:<moderator3@local.dom> cltaddr:1.2.3.4
-                               cltaddr:10
-
-The mails to <list1@local.dom> are only accepted from <user1-1@l1-1.dom>
-and <user2-1@l1-1.dom>. Note: the list is not recursively expanded, i.e.,
-members of list2 are not allowed, that restriction must be listed in the
-access map. Mails to <list3@local.dom> are only accepted from
-<moderator3@local.dom>, the client with the IPv4 address 1.2.3.4, or
-clients in the IPv4 net 10. The latter requires that the flag
-generic_lookup is turned on too.
-
-
-Configuration for SMTP Client
-
-The following configuration options are valid for SMTPC:
-
- 1. io_timeout: timeout for SMTP operations (unit: s).
- 2. LMTP_socket: Unix domain socket to use for LMTP [default: lmtpsock].
- 3. log_level: logging level.
-
- 4. tls: this is a subsection that specifies the parameters for STARTTLS
-    support. It is only available if the system been configured with the
-    option --enable-TLS, see Section 2.2.1. See Section 11.1 for some
-    background information about these options.
-     1. cert_file: file with certificate in PEM format.
-     2. key_file: file with private key for certificate in PEM format.
-     3. CAcert_file: file with CA certificate in PEM format.
-     4. CAcert_directory: directory with (symbolic links for) CA
-        certificates in PEM format.
-
- 5. wait_for_server: maximum amount of time to wait for a server (QMGR) to
-    become available (unit: s).
-
-
-SMTP Client Session/Recipient Configuration
-
-The following options can only be set via the access map (see Section
-3.9.3, tag smtpc_rcpt_conf) or the configuration map for QMGR (see 3.8.1,
-tag smtpc_session_conf) not in the SMTP client configuration section
-itself, as they apply to a session or recipient, not globally. Currently
-only STARTTLS requirements are available which are documented in Section
-3.13, more option might be added later on. Note: as more options might be
-added, the structure of this may change a bit.
-
-
-Lookup Orders
-
-
-Lookup Orders in Maps
-
-In many cases an item is not just looked up verbatim in a map, but it may
-be split into logical parts and then less significant parts are
-iteratively removed and the remaining data is looked up until either a
-match is found or the data is empty; in the latter case a default key may
-be looked up depending on the map. These steps can be controlled by flags
-that are specified in the configuration file for the map. These flags are
-listed below for the various lookup steps.
-
-For domain names of the form ``sub2.sub1.tld'' the lookup order is
-``sub2.sub1.tld'', ``.sub1.tld'', ``.tld'', and ``.'' (without the
-quotes). The subdomains are tried if the flag dotsubdomain is set. The
-last lookup (``.'') is only done if the flag dot is set, as it is the
-default for mailertable. Obviously this schema is extended if more
-components are specified. As the sequence shows there is no implicit
-``match all subdomains'' lookup, instead entries in a map must have a
-leading dot for subdomains matches. To reiterate: ``sub2.sub1.tld'' does
-neither match the entry ``sub1.tld'' nor ``tld''.
-
-For IPv4 addresses of the form ``A.B.C.D'', the lookup order is
-``A.B.C.D'', ``A.B.C'', ``A.B'', and ``A'' (without the quotes). In
-contrast to domain lookups, no trailing dots are required (nor checked) to
-denote subnet matches, because the number of components of an IPv4 address
-is fixed (and known) in contrast to the number of components in a host
-name or domain name.
-
-For RFC 2821 addresses of the form ``<user+detail@domain>'', where
-``+detail'' is optional and ``+'' is the first delimiter in the localpart
-that was found in the address_delimiter string (see Section 3.9.2), the
-lookups are done according to the following sequence:
-
- 1. Repeat the following lookups for each subdomain of domain (as
-    explained above):
-     1. ``user+detail@subdomain'' if ``+detail'' exists; this is a
-        verbatim match. Flag: full_adress.
-     2. ``user++@subdomain'' if ``+detail'' exists and ``detail'' is not
-        empty; this matches any non-empty ``+detail''. Note: the second
-        ``+'' character is a fixed metacharacter, it does not depend on
-        address_delimiter; it is a modelled after the ``+'' operator in
-        regular expressions etc to denote a non-empty sequence of items.
-        Flag: detail_plus
-     3. ``user+*@subdomain'' if ``+detail'' exists; this matches any
-        ``+detail'' (including just ``+''). Flag: detail_star
-     4. ``user*@subdomain''; this matches ``user@subdomain'' as well as
-        ``user+detail@subdomain'' (``detail'' can be empty). Note: ``*''
-        is not a generic metacharacter here, it matches only a token
-        beginning with address_delimiter or an empty sequence, it does not
-        match any other character sequence. For example: the input
-        ``user1@subdomain'' does not match the LHS ``user*@subdomain''.
-        Flag: star
-     5. ``user@subdomain''; this does not match if ``+detail'' exists,
-        unless the flag implicitly_match_detail is selected for the map to
-        implicitly match a detail even if there is no wildcard in the
-        pattern.
-     6. ``@subdomain''.
-
- 2. If nothing has been found and the map type requests it, then try
-    localpart only (with the same meaning as above):
-     1. ``user+detail'' if detail exists
-     2. ``user++'' if detail exists and is not empty,
-     3. ``user+*'' if detail exists,
-     4. ``user*'',
-     5. ``user''
-
-
-Lookup Orders for Anti-Spam Measures
-
-Map lookups for anti-spam measures are performed according to the SMTP
-dialogue, i.e., connection information (cltaddr: and cltname:), MAIL
-command (from:), and RCPT command (to:). Whether a rejection has an
-immediate effect depends on the result of the lookup, e.g., the quick:
-modifier, and whether the option delay_checks is set. If multiple checks
-are performed during a single stage of the SMTP dialogue then they are
-done sequentially until one of them returns something else than cont.
-
-Note: in the description of the algorithms below some items are marked as
-check:. Only those can change the result value, other steps perform just
-operations that may be needed later on but have no immediate effect on the
-outcome of the checks.
-
-
-Connect
-
-During connect the following operations are performed if the access flag
-(see Section 3.10, item 3b) is enabled:
-
- 1. check: look up client IP address using tag cltaddr: (as explained in
-    3.12.1)
- 2. start DNS blacklist queries,
- 3. map client IP address to client hostname returning the tuple
-    (clientresolve, clientname).
- 4. check: look up cltresolve:clientresolve
- 5. check: look up cltname:clientname (as explained in 3.12.1)
- 6. check: look up results of DNS blacklists in access map.
-
-
-MAIL
-
-After a MAIL command has been received the following checks are performed
-unless the address is <> or a session check resulted in quick:relay or
-quick:ok:
-
- 1. check: is the address routeable? That is, if the sender address would
-    be used as a recipient address (as it would be necessary if a DSN must
-    be sent) is it possible to find a host that will deal with the
-    address? This means that the domain part must have a valid MX or A
-    record or that routing is specified via mailertable.
- 2. check: if the domain of sender address is local: is the local part
-    valid?
- 3. check: look up the address in the access map (provided it is enabled)
-    with the tag from:.
- 4. check: look up the IP addresses that were found when trying to
-    determine whether the address is routeable with the tag mxbadip: in
-    the access map.
-
-
-RCPT
-
-A RCPT command causes different checks (note: these are sequential checks,
-not exclusive, i.e., if the first one applies and it does not return a
-decision, the second one is performed):
-
- 1. is this a relaying attempt and if so, is it authorized? Relaying can
-    be allowed for the entire session, e.g., due to the client IP address
-    or other authorization based on some authentication (STARTTLS, AUTH).
- 2. are there any other restrictions for the recipient address?
-
-For case 1 the following tests are performed:
-
- 1. check: is the recipient local and does the address exist? If yes, it
-    is not a relaying attempt and hence allowed.
- 2. check: look up the recipient address with the tag to: (provided the
-    access map is enabled) (provided the access map is enabled) and check
-    whether the RHS is relay, otherwise reject the RCPT command as
-    unauthorized relaying attempt unless the RHS is an error entry which
-    is then used as reply.
-
-For case 2 the following steps are taken:
-
- 1. look up address with tag protectedrcpt:, if found perform all the
-    necessary checks as explained in Section 3.10.3.
- 2. check: look up the address using the tag to: if all of the following
-    three conditions are met:
-     1. the access map is enabled.
-     2. a session check did not result in quick:relay.
-     3. a session check did not result in quick:ok and relaying is allowed
-        by other means.
- 3. check: perform greylisting unless the session is marked as ok or relay
-    or the RCPT lookup returned quick:ok or quick:relay.
-
-
-Macro Replacements in RHS
-
-The alias map allows the use of macro in the right hand side of map
-entries. Macros have the form ``${name}'' (without the quotes). Available
-macros are: user, detail, domain, tag, delimiter, subdomain, extension.
-They have the obvious meaning; subdomain refers to the part of the domain
-before the dot, i.e., if the pattern is @.domain and the input is
-user@host.domain then subdomain refers to host, extension is the delimiter
-and the detail together (provided the address contains them).
-
-Example:
-
-alias*@.domain     user${extension}@${subdomain}.domain
-
-provides the following mappings:
-
-alias@host.domain             user@host.domain
-alias+detail@host2.domain     user+detail@host2.domain
-
-
-STARTTLS Restrictions
-
-STARTTLS requirements can be set for the SMTP server and SMTP client via
-map entries (see Sections 3.10.1 and 3.11.1). These restrictions are
-listed in a section called tls_requirements.
-
- 1. common_name: require that the CN (Common Name) of the presented TLS
-    certificate matches the specified value.
- 2. cert_subject require that the CS (CERT subject) of the presented TLS
-    certificate matches the specified value.
- 3. cert_issuer require that the DN (Distinguised Name) of the issuer of
-    the presented TLS certificate matches the specified value.
- 4. min_cipher_bits require that the effective keylength (in bits) of the
-    symmetric encryption algorithm used for a TLS connection is at least
-    as big as the specified value.
- 5. flags: available flags are currently:
-     1. verified: the TLS connection must be verified, i.e., the cert
-        issuer must be listed in CAcert_file or CAcert_directory (see
-        Section 3.10, item 21).
-     2. encrypted the TLS connection must be encrypted (i.e., the
-        effective keylength (in bits) of the symmetric encryption
-        algorithm used for a TLS connection is greater than zero.
- 6. requirements_violation See Section 3.10, item 21h, for possible
-    values.
-
-Example (note: the entry must be currently written in a single line to be
-properly processed by createmap(8)):
-
-smtpc_rcpt_conf:@meta.org       tls_requirements { cert_issuer="/C=US/ST=Berkeley/L=Endmail+20Org/O=MTA/CN=Claus+20Assmann+20CA+20RSA+202007/emailAddress=ca+ca-rsa2007@esmtp.org"; }
-
-
-VERP
-
-There are two ways to enable VERP [Ber97]:
-
- 1. Via the XVERP extension in the SMTP server (see Section 3.10, item 3j
-    ).
- 2. Via an entry in aliases marking a list with verp-:
-
-    otherlist: <user5@my.dom> <user6@other.dom> <user7@local.host>
-
-    verp-otherlist: something
-
-
-Running MeTA1
-
-
-Starting MeTA1
-
-All components of MeTA1 are under control of the MCP which must be started
-as root in the directory /var/spool/meta1 (i.e., the main queue directory,
-see Section 2.4: MTAQDIR) using
-
-# ./mcp.sh start
-
-The script contains the runtime path for MCP based on the data used by
-configure as well as a reference to the MeTA1 configuration file.
-
-To stop all MeTA1 components use
-
-# ./mcp.sh stop
-
-or simply terminate the MCP, it will forward the signal to all processes
-it started.
-
-The MCP provides some restart functionality: if a process terminates
-(e.g., crashes), it will restart it unless the exit code indicates that a
-restart is useless, e.g., EX_USAGE. Moreover, the processes listed in the
-restart dependencies will be stopped and started too.
-
-
-Using MeTA1 only for Outgoing Mail
-
-MeTA1 can be used in combination with a MUA that speaks (E)SMTP directly
-or with the sendmail 8 MSP (Mail Submission Program) for outgoing mail.
-For the latter add this to your sendmail 8 submit.mc file (see also misc/
-sm8.submit.mc):
-
-LOCAL_RULE_0
-R$* + X<@$*>    $#meta1 $@ localhost $: $1 <@$2>
-
-LOCAL_RULESETS
-SHdrToSMTP
-R$+                     $: $>PseudoToReal $1            sender/recipient common
-R$+                     $: $>MasqSMTP $1                qualify unqual'ed names
-R$* + X<@$*>            $: $1 < @ $2 >
-R$* < @ *LOCAL* > $*    $: $1 < @ $j . > $2
-
-MAILER_DEFINITIONS
-Mmeta1,   P=[IPC], F=kmDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrToSMTP,
-        E=\r\n, L=990, T=DNS/RFC822/SMTP,
-        A=TCP $h 2009
-
-and run the SMTP server of MeTA1 as listener on localhost:2009. Then mail
-to <user+X@domain> will be sent via MeTA1, i.e., by adding the
-sequence +X to the address <user@domain> the mail will be redirected
-to MeTA1 (and +X will be removed). After initial testing the relay mailer
-can be changed to use port 2009 by default hence the local additions shown
-above can be removed.
-
-There are also other programs available as substitute for the command line
-invocation of sendmail as mail submission program, e.g., mini_sendmail [
-Posb].
-
-
-Using MeTA1 for Incoming Mail
-
-
-Local Delivery and Specifying Local Domains
-
-If the domain of a recipient address matches an entry in mailertable (see
-Section 3.9.3) with the right hand side lmtp:^4.1then SMTPC talks LMTP
-over the local socket lmtpsock (see 3.11). If you have an LDA that runs as
-daemon and can talk LMTP over a local socket you can use it for local
-delivery. It is also possible to use procmail [vdBG] in LMTP mode and
-start it from mcp, see meta1.conf. See contrib/procmail.lmtp.p0 for a
-patch^4.2for procmail 3.22 to allow handling of addresses with extensions
-(+detail) in LMTP mode. A mailertable for local delivery via LMTP should
-look like this:
-
-localhost     lmtp:
-
-MY.DOM        lmtp:
-
-HOST.MY.DOM   lmtp:
-
-By default mail to addresses whose domain part is listed in mailertable
-with RHS lmtp: is allowed, i.e., those domains are considered local and
-hence relaying (even though technically this might not be called relaying)
-to them is allowed. This behavior can be turned off (see Section 3.10,
-item 3f) in which case it is necessary to also allow relaying to these
-domains which can be done either via the access map (see Section 3.10, 3b
-), or the command line option -T for SMTPS. This allows for treating (some
-of) these domains as private by not allowing relaying to them, hence they
-will be only reachable from systems from which relaying is allowed.
-
-
-Specifying Valid Local Addresses
-
-To validate addresses for local domains, SMAR uses the map aliases.db
-(Section 3.9.2, item 3a), which can be created using createmap, or a map
-specified by the option local_user_map (see Section 3.9.2, item 7). The
-key in the map must be the local part of a valid (local) e-mail address.
-If the local part cannot be found in either map, the address is rejected.
-
-To list valid local addresses in the alias map the right hand side must be
-the string ``local:'', e.g.,
-
-postmaster:  <user@host.domain>
-
-abuse:       user+abuse
-
-user++:      local:
-
-user:        local:
-
-Note: local addresses are checked for the envelope recipient and sender.
-
-
-Using MeTA1 as Gateway
-
-MeTA1 can easily be used as an internet gateway. To override routing,
-mailertable entries (see Section 3.9.3) can be specified. A list of valid
-addresses can be made available via the access map by allowing relaying to
-those addresses instead of entire domains, e.g.,
-
-to:user1@my.domain       relay
-
-to:user2@my.domain       relay
-
-to:postmaster@my.domain  relay
-
-cltaddr:10.12            relay
-
-
-Using MeTA1 as Backup MX Server
-
-The previous section showed how to specify valid remote addresses if all
-of them are known. However, for systems that act as backup MX servers it
-might not be simple to always keep such a list up to date. In that case, a
-default entry for a domain should be made, e.g.,
-
-to:user1@other.domain       relay
-
-to:user2@other.domain       relay
-
-to:postmaster@other.domain  relay
-
-to:@other.domain            error:451 4.3.3 Try main MX server
-
-cltaddr:10.12               quick:relay
-
-cltaddr:127.0.0.1           quick:relay
-
-The last two entries allow local systems to send mail to any user at
-other.domain; without those entries mail to unlisted users will be
-(temporarily) rejected and hence cannot be delivered via this system.
-
-Note about Backup MX Servers
-
-It is not a good idea to run a backup MX server B for a host A that has
-stronger anti-spam measures; if mails are sent to A via B, then B may
-accept them for delivery, but A may reject them and hence B has to sent
-bounces, which, in case of spam, are most likely to forged addresses,
-hence those bounces will only cause additional problems. The opposite case
-(B has stronger anti-spam measures than A) can cause the rejection of mail
-that A actually wanted to receive. Hence B and A should have the same
-anti-spam measures; i.e., a system that acts as backup MX server for
-another one should perform the same anti-spam checks as the main MX server
-(s).
-
-
-Miscellaneous Programs
-
-
-Do not run programs as root User
-
-Almost all MeTA1 programs (except for MCP) refuse to run with root
-privileges. To run a program as a different user the utility misc/runas
-can be used, e.g., after installation in /usr/local/bin/
-
-# /usr/local/bin/runas meta1q mailq -V
-
-(specify -h to see the usage).
-
-
-Displaying Content of Mail Queues
-
-The program mailq displays the content of the mail queues (defedb and
-ibdb). Currently its output is in a similar format as the sendmail 8
-version. The option -h shows how to use the program; see the previous
-section about using runas for mailq. A simple shell script wrapper
-mailq.sh is available that invokes mailq via runas. Note: the output of
-this program might not be accurate due to internal buffering by QMGR.
-Moreover, this program reads DEFEDB in such a way that only entries that
-have been checkpointed (see Section 8.2 about options for checkpoints) are
-shown. This is done to avoid interference with the operation of QMGR.
-
-
-Interacting with QMGR
-
-The program qmgrctl allows to interact with the QMGR via the control
-socket (see Section 3.8, item 3). Invoke qmgrctl -h to see the available
-options. By default the program will show the current status of QMGR. If
-QMGR has been compiled with the option QMGR_STATS (see Section 12.1) then
-additional statistics is available, e.g., the number of transactions and
-recipients that has been handled.
-
-Enhancement to this program are welcome to provide more functionality.
-
-
-Reloading Maps
-
-Maps (for SMAR and QMGR) can be reloaded by moving the old db file out of
-the way, creating a new file and then sending a USR1 signal to the
-appropriate process to reopen the map.
-
-# mv $MAP.db $MAP.old.db
-# /usr/local/bin/runas meta1q createmap -F $MAP.db < $MAP
-# kill -USR1 $PID
-
-Note: for QMGR it is also possible to use qmgrctl -r instead, see Section
-4.6.3.
-
-
-Logging
-
-Logging is done via syslog(3) (see Section 3.5, 1) or to stdout/stderr,
-which is redirected by the default MCP configuration to PROG.log. The
-logging format is not yet completely consistent across programs. Moreover,
-the logging entries might not be easy to understand because they contain
-some details which are not interesting to a potential postmaster, but to
-developers. Nevertheless, the logging entries should show the flow of mail
-through the system. See Section 10.3 for an explanation of the format of
-logfile entries.
-
-Note: logfiles must exist with the proper owner and permissions to be
-used. Neither MCP nor the modules will currently create logfiles. This is
-done by make install, i.e., misc/sm.setup.sh, which parses meta1.conf to
-extract the section titles/names and user entries to create the logfiles
-with the correct name and owner. This does not (yet) properly work if
-unique logfile names are created, see Section 8.2, 3.
-
-Logfile Rotation
-
-Unless syslog(3) is used (see Section 3.5, 1), logfile rotation can be
-achieved by copying the existing logfile to a backup file, e.g.,
-
-# cp qmgr.log qmgr.log.0
-
-and sending a USR2 signal which will cause the processes to rewind the
-logfile. Note: the author is aware that this is not an optimal solution,
-however, using syslog(3) will usually provide a better way.
-
-
-Regular Checks
-
-There are at least two things that should be done regularly:
-
- 1. Check the logfile for errors^4.3:
-
-    $ egrep 'sev=(ALERT|CRIT|ERR|FAIL)|\<assertion\>' $LOGFILE
-
- 2. Keep track of the size of the processes, e.g,
-
-    $ date >> $MTAPROCS
-    $ ps axuww | grep '^meta1' | sort >> $MTAPROCS
-
-    If one of the processes continuously grows then MeTA1 should be
-    compiled with -DSM_HEAP_CHECK (see Section 12.1.5) and a heap dump
-    should be taken regularly by sending the USR1 signal to the process.
-    By comparing subsequent heap dumps it should be possible to locate a
-    possible memory leak.
-
-Please report problems that cannot be resolved locally, see Section 1.4.1.
-
-
-Dealing with Errors
-
-
-Resource Problems
-
-Resource problems in certain parts of the code can lead to a stop of the
-involved program. In such a case it will be restarted automatically but if
-the resource problem has not been taken care of the MTA may stop again. In
-that case manual interaction is required. The simple solution to a
-resource problem is of course to add more resources (RAM/disk) or to free
-up some resources, e.g., stopping programs that do not need to run or
-deleting unused files. There are also ways to control resource usage
-within MeTA1:
-
-  * memory shortage: the memory usage of MeTA1 can be controlled by
-    restricting the size of various data structures, see Section 3.8,
-    e.g., AQ_max_entries, IQDB, and OCC_max_entries. However, setting
-    these values too low will result in a very slow MTA that may operate
-    in a degraded state which is not acceptable.
-  * disk shortage: MeTA1 has options that let it decide how much free disk
-    space is needed for operation, see Section 3.8: ok_disk_space and
-    min_disk_space. However, if there is not enough space to store the
-    envelope databases (DEFEDB and IBDB) then the system cannot work,
-    hence sufficiently free disk space is essential for proper operation.
-
-
-Database Problems
-
-See Section 7.1 for some background information about the usage of the
-various databases before trying to fix any possible problems.
-
-If the deferred database is corrupted then the Berkeley DB utilities to
-deal with such situations should be tried [Sleb], e.g., db_recover.
-
-Currently messages stored in CDB have the transaction identifier (ss_ta,
-see Section 10.3) as filename. In the worst case, i.e., if IBDB or DEFEDB
-are destroyed, this allows to reconstruct the envelope data together with
-the logfile entries. See the script misc/rcvrenvfromlog.sh for an example,
-here is a description of its operation. First, check which messages are
-still in CDB: in the CDB directory (3.4: CDB_base_directory) issue:
-
-# ls -1 [0-9A-F]/S*
-
-Then search for each of those transaction ids ($TAID) in the logfile
-($LOG):
-
-$ egrep "ss_ta=$TAID, (mail|rcpt)=" $LOG | \
-  sed -e 's;^.*\(mail=<.*>\), .*;\1;' -e 's;^.*\(rcpt=<.*>\), .*;\1;'
-
-will show the sender (mail=) and the recipients (rcpt=). Based on this
-data it is possible to resend the messages.
-
-Note: contributions in this area are welcome, e.g., better scripts that
-perform more checks and maybe allow for completely automatic recovery.
-
-
-Writing Core Dumps
-
-By default, all MeTA1 processes are executed in the main queue directory.
-As those processes are running with different user and group ids not all
-of them can write a core dump into that directory if a fatal error occurs.
-Some operating systems have commands (e.g., coreadm(1M) on SunOS 5.x) to
-specify a different directory in which a core dump is written. On
-operating systems where such a command is not available, the option
-working_directory can be used (see Section 8.2, item 4).
-
-Replacements for Features available in other MTAs
-
-MeTA1 does currently not offer some of the features that are available in
-other MTAs. This section describes replacements or workarounds for some of
-those features.
-
- 1. Address Masquerading: The best way to use the correct e-mail addresses
-    is to properly configure your MUA. Some MUAs offer more flexibility
-    for this than the default masquerading features of sendmail 8, e.g.,
-    mutt [mut] allows to select sender addresses based on recipient
-    addresses.
-
-    Alternatively a mail submission program (MSP) can be used which offers
-    address rewriting capabilities, e.g., the MSP from sendmail 8.
-
- 2. .forward: procmail can be used as LDA (see Section 4.3.1) and its
-    configuration file .procmailrc allows to implement the same
-    functionality as a .forward from sendmail 8 and some other MTAs.
-
- 3. Sending mail to programs: see previous item 2: this can be done with
-    the help of procmail.
-
- 4. Appending mails to files: see item 2: this can be done with the help
-    of procmail.
-
-
-Policy Milter
-
-
-Policy Milter Overview
-
-MeTA1 has support for a policy milter which is similar to a milter in
-sendmail 8. The API is slightly different, however, it should be possible
-to write an compatibility layer to emulate the sendmail 8 API. Another
-difference is that MeTA1 itself only talks to a single pmilter. Support
-for multiple pmilters should be implemented in a multiplexor that connects
-to multiple pmilters and coordinates their responses.
-
-
-Native Policy Milter API
-
-Note: this API may evolve over time.
-
-Naming conventions: A policy milter (also called pmilter) is a program
-that uses the API provided by libpmilter. The latter interacts with the
-SMTP servers via an internal protocol, i.e., this protocol can be changed
-without changing the visible API and should not directly be accessed by a
-user application.
-
-
-Data Structures
-
-libpmilter itself uses three context structures all of which must be
-treated by a milter as opaque.
-
- 1. pmg_ctx: ``global'' libpmilter context (only one per process).
- 2. pmss_ctx: libpmilter context per SMTP server that connects to this
-    instance. There can be multiple SMTP servers connecting to one
-    libpmilter instance.
- 3. pmse_ctx: libpmilter context per SMTP session.
-
-Any of the libpmilter functions takes one of these contexts as parameter;
-e.g., all SMTP session oriented functions have a parameter of type
-pmse_ctx_P.
-
-A milter can have its own contexts for each of these three environments,
-see Section 5.2.5.
-
-
-Start and Stop
-
-The functions in this section return SM_SUCCESS (0) on success and a
-negative value in case of an error.
-
-First libpmilter must be initialized; a pmilter must specify a variable
-pmg_ctx_P pmg_ctx; which is passed per reference to the initialization
-function:
-
-sm_ret_T sm_pmfi_init(pmg_ctx_P *pmg_ctx)
-
-The pmilter global context must be treated as opaque data structure, it is
-passed to subsequent libpmilter function calls.
-
-Next pmilter starts libpmilter by handing control over to the library; the
-pmilter passes a description of its requirements and functionality:
-
-sm_ret_T sm_pmfi_start(pmg_ctx_P pmg_ctx, pmilter_P pmilter)
-
-A milter can stop by calling:
-
-sm_ret_T sm_pmfi_stop(pmg_ctx_P pmg_ctx)
-
-There are various functions to set some options which can be called after
-libpmilter is initialized but before it is started. To set the path of the
-Unix domain socket over which the SMTP servers (see Section 3.10, item 17)
-and libpmilter communicate:
-
-sm_ret_T sm_pmfi_setconn(pmg_ctx_P pmg_ctx, const char *path)
-
-The backlog parameter of the listen(2) function can be set:
-
-sm_ret_T sm_pmfi_setbacklog(pmg_ctx_P pmg_ctx, int backlog)
-
-The debug level of libpmilter might be set via (this requires knowledge of
-the internals of the library which can be acquired by looking at the
-source code):
-
-sm_ret_T sm_pmfi_setdbg(pmg_ctx_P pmg_ctx, int debuglevel)
-
-To set the communication timeout:
-
-sm_ret_T sm_pmfi_settimeout(pmg_ctx_P pmg_ctx, int timeout)
-
-
-New SMTP Server
-
-Whenever an SMTP server connects to a milter an option negotiation is
-performed (similar to ESMTP itself). A pmilter can check whether server
-capabilities are acceptable and return the options that it wants:
-
-sm_ret_T pmfi_negotiate(pmss_ctx_P pmss_ctx, uint32_t srv_cap, uint32_t
-srv_fct, uint32_t srv_feat, uint32_t srv_misc, uint32_t *pm_cap, uint32_t
-*pm_fct, uint32_t *pm_feat, uint32_t *pm_misc)
-
-Currently only the capabilities field is used: srv_cap is set by the SMTP
-server to a list (implemented as bit field) of phases of the ESMTP
-dialogue that can be passed to a pmilter. In turn the pmilter must set
-*pm_cap to includes those phases of the ESMTP dialogue that it wants to
-receive. For details, see include/sm/pmilter.h. For each of those phases a
-callback is invoked (see Section 5.2.4) which must be set by the pmilter
-in its description structure struct pmilter_S (see include/sm/pmfapi.h).
-
-
-SMTP Session and Transaction
-
-The protocol steps from ESMTP are forwarded to the policy milter which can
-decide to accept or reject them.
-
-  * New SMTP session:
-
-    sfsistat_T pmfi_connect(pmse_ctx_P pmse_ctx, const char *hostname,
-    sm_sock_addr_T *hostaddr)
-
-    hostname: host name, as determined by a reverse lookup on the host IP
-    address; hostaddr: host address, as determined by a getpeername(2)
-    call on the SMTP socket.
-
-  * SMTP HELO/EHLO command:
-
-    sfsistat_T pmfi_helo(pmse_ctx_P pmse_ctx, const char *helohost, bool
-    ehlo)
-
-    helohost: Value passed to HELO/EHLO command, which should be the
-    domain name of the sending host. ehlo: true iff EHLO was used.
-
-  * MAIL (envelope sender):
-
-    sfsistat_T pmfi_mail(pmse_ctx_P pmse_ctx, const char *mail, char
-    **argv)
-
-    mail: envelope mail address; argv: null-terminated MAIL command
-    arguments.
-
-  * RCPT (envelope recipient):
-
-    sfsistat_T pmfi_rcpt(pmse_ctx_P pmse_ctx, const char *rcpt, char
-    **argv)
-
-    rcpt: envelope recipient address; argv: null-terminated RCPT command
-    arguments.
-
-  * DATA:
-
-    sfsistat_T pmfi_data(pmse_ctx_P pmse_ctx)
-
-  * unknown/not implemented SMTP command:
-
-    sfsistat_T pmfi_unknown(pmse_ctx_P pmse_ctx, const char *cmd)
-
-    cmd: SMTP command. Note: this is not yet implemented.
-
-  * For each chunk of a message:
-
-    sfsistat_T pmfi_msg(pmse_ctx_P pmse_ctx, unsigned char *msgp, size_t
-    msglen)
-
-    msgp: pointer to message data; msglen: length of message data. There
-    may be multiple message chunks passed to the filter. End-of-lines are
-    represented as received from SMTP (normally Carriage-Return/Line-Feed;
-    CRLF). Notes:
-      + the last message chunk contains the final dot of the SMTP
-        transmission, i.e., ``CRLF.CRLF''
-      + the message is not modified in any form, i.e., dots at the begin
-        of a line are duplicated (by the SMTP client) as specified in
-        section 4.5.2 of RFC 2821 [Kle01] which must be undone by the
-        application if so desired.
-      + the message is streamed while being received. That is, the mail is
-        not first stored on disk and then sent to the filter, but each
-        part received from the client is sent directly to the filter (at
-        the same speed as received from the network which might be slow).
-        This may mean that the filter does not receive the entire message
-        as the transmission may get interrupted or the SMTP server may
-        decide to skip the rest of the message because it exceeds the
-        maximum size.
-      + the return code is ignored unless SM_SCAP_PM_MSG_RC is set, see
-        Section 5.2.11, item 2.
-
-  * End of message (final dot of message has been received):
-
-    sfsistat_T pmfi_eom(pmse_ctx_P pmse_ctx)
-
-  * Message is aborted outside of the control of the filter, for example,
-    if the SMTP client issues an RSET command.
-
-    sm_ret_T pmfi_abort(pmse_ctx_P pmse_ctx)
-
-  * QUIT (end of an SMTP session):
-
-    sm_ret_T pmfi_close(pmse_ctx_P pmse_ctx)
-
-    This is called when an SMTP session ends.
-
-
-Set and Get pmilter Contexts
-
-As explained in Section 5.2.1 a milter can have a ``global'' context
-pmilter_g_ctx, a context per SMTP server pmilter_ss_ctx, and a context per
-SMTP session pmilter_se_ctx. The following functions are provided to set
-and get these contexts.
-
-Set the ``global'' context pmilter_g_ctx:
-
-sm_ret_T sm_pmfi_set_ctx_g(pmg_ctx_P pmg_ctx, void *pmilter_g_ctx).
-
-This must be done after libpmilter has been initialized but before control
-is transferred to it.
-
-To retrieve the ``global'' context invoke:
-
-void *sm_pmfi_get_ctx_g(pmg_ctx_P pmg_ctx)
-
-Note: this requires the ``global'' libpmilter context which is not usually
-passed to pmilter functions in callbacks. See below how to access the
-``global'' context pmilter_g_ctx from other places.
-
-To set the pmilter context per SMTP server pmilter_ss_ctx use:
-
-sm_ret_T sm_pmfi_set_ctx_ss(pmss_ctx_P pmss_ctx, void *pmilter_ss_ctx);
-
-to retrieve it call:
-
-void *sm_pmfi_get_ctx_ss(pmss_ctx_P pmss_ctx)
-
-The ``global'' pmilter context pmilter_g_ctx can be retrieved from the
-libpmilter context per SMTP server:
-
-void *sm_pmfi_get_ctx_g_ss(pmss_ctx_P pmss_ctx)
-
-At the lowest level a context per SMTP session pmilter_se_ctx can be set
-via:
-
-sm_ret_T sm_pmfi_set_ctx_se(pmse_ctx_P pmse_ctx, void *pmilter_se_ctx)
-
-and retrieved by:
-
-void *sm_pmfi_get_ctx_se(pmse_ctx_P pmse_ctx).
-
-Just as before there is a function to retrieve the pmilter context per
-SMTP server pmilter_ss_ctx from the libpmilter context per SMTP session:
-
-void *sm_pmfi_get_ctx_ss_se(pmse_ctx_P pmse_ctx)
-
-Note: if a pmilter uses these contexts, then it is useful that each
-``lower level'' context contains a link to its ``higher level'' context.
-That is, each pmilter context per SMTP session pmilter_se_ctx should have
-a pointer to its pmilter context per SMTP server pmilter_ss_ctx which in
-turn should have a pointer to the ``global'' pmilter context
-pmilter_g_ctx. This allows access from a function that is specific to a
-SMTP session to each relevant context.
-
-
-Accessing MTA Symbols
-
-A pmilter can set a list of symbols it wants to receive from the MTA by
-calling
-
-sm_pmfi_setmaclist(pmss_ctx_P pmss_ctx, uint where, ...)
-
-during the option negotiation, i.e., in pmfi_negotiate(). The parameter
-where denotes the stage of the ESMTP dialogue when the value of the symbol
-should be sent. It must be one of
-
-PM_SMST_CONNECT  Session start
-
-PM_SMST_EHLO     EHLO or HELO command
-
-PM_SMST_MAIL     MAIL command
-
-PM_SMST_RCPT     RCPT command
-
-PM_SMST_DATA     DATA command
-
-PM_SMST_DOT      Final dot of mail body
-
-A sequence of up to PM_MAX_MACROS macros can be requested which must end
-with PMM_END. Valid values are:
-
- 1. PMM_SRVHOSTNAME hostname of SMTP server.
- 2. PMM_SEID session id.
- 3. PMM_CLIENT_RESOLVE result of client lookups.
- 4. PMM_MAIL_TAID transaction id.
- 5. PMM_DOT_MSGID Message-Id.
- 6. PMM_TLS_VERSION TLS/SSL version used.
- 7. PMM_TLS_CIPHER_SUITE cipher suite used.
- 8. PMM_TLS_CIPHER_BITS effective key length of the symmetric encryption
-    algorithm.
- 9. PMM_TLS_ALG_BITS maximum key length of the symmetric encryption
-    algorithm. This may be less than the effective key length for export
-    controlled algorithms.
-10. PMM_TLS_VRFY the result of the verification of the presented cert.
-11. PMM_TLS_CERT_SUBJECT the DN (distinguished name) of the presented
-    certificate.
-12. PMM_TLS_CERT_ISSUER the DN (distinguished name) of the CA (certifcate
-    authority) that signed the presented certificate (the cert issuer).
-13. PMM_TLS_CN_SUBJECT the CN (common name) of the presented certificate.
-14. PMM_TLS_CN_ISSUER the CN (common name) of the CA that signed the
-    presented certificate.
-
-Notes:
-
-  * PMM_MAIL_TAID cannot be requested before PM_SMST_MAIL and
-    PMM_DOT_MSGID can only be requested at stage PM_SMST_DOT.
-  * All macros beginning with PMM_TLS are only valid after a STARTTLS
-    command.
-
-To retrieve the value of a symbol the function
-
-sm_pmfi_getmac(pmse_ctx_P pmse_ctx, uint32_t macro, char **pvalue)
-
-can be used in the various callback functions of the ESMTP dialogue. If
-the macro was not in the request list, an error will be returned. If the
-macro has not yet been received, *pvalue will be NULL. Otherwise *pvalue
-will point to the value of the macro. Note: the string to which *pvalue
-points must not be changed.
-
-
-Sender Modification
-
-The sender address (MAIL) can be replaced:
-
-sm_ret_T sm_pmfi_mail_rplc(pmse_ctx_P pmse_ctx, const char *mail_pa, char
-**argv)
-
-This function must only be called during pmfi_eom(). The address mail_pa
-must be in RFC 2821 format. The argument argv can be used to specify SMTP
-parameters for the sender address, however, this is currently not
-implemented, hence it must be set to NULL for now.
-
-
-Recipient Modifications
-
-Recipients can be added:
-
-sm_ret_T sm_pmfi_rcpt_add(pmse_ctx_P pmse_ctx, const char *rcpt_pa, char
-**argv)
-
-or deleted:
-
-sm_ret_T sm_pmfi_rcpt_del(pmse_ctx_P pmse_ctx, const char *rcpt_pa,
-rcpt_idx_T rcpt_idx)
-
-These functions must only be called during pmfi_eom(). The addresses
-rcpt_pa must be in RFC 2821 format. The argument argv can be used to
-specify SMTP parameters for the recipient address, however, this is
-currently not implemented, hence it must be set to NULL for now. As the
-MTA does not remove identical recipient addresses, the address itself is
-not sufficient to identify one RCPT, but its index must be specified too.
-This index can be retrieved during a RCPT command (pmfi_rcpt()) using
-
-sm_ret_T sm_pmfi_getrcpt_idx(pmse_ctx_P pmse_ctx, rcpt_idx_T *prcpt_idx)
-
-Note: it is invalid to remove all recipients of a transaction. To discard
-a transaction, return SMTP_R_DISCARD as a result of one of the transaction
-oriented callbacks, e.g., pmfi_eom().
-
-
-Header Modifications
-
-To request modifications of the header of a mail being sent, the function
-
-sm_pmfi_hdr_mod(pmse_ctx_P pmse_ctx, uint type, uint pos, const unsigned
-char *header)
-
-can be used. This function must only be called during pmfi_eom(). The
-argument type specifies which kind of modification is requested,
-legitimate values are defined in include/sm/hdrmoddef.h; these are:
-SM_HDRMOD_T_PREPEND, SM_HDRMOD_T_INSERT, SM_HDRMOD_T_REPLACE,
-SM_HDRMOD_T_REMOVE, and SM_HDRMOD_T_APPEND.
-
-The argument header must be a complete header line including the proper
-line ending (CRLF). The argument pos specifies the position for the types
-SM_HDRMOD_T_INSERT, SM_HDRMOD_T_REPLACE, and SM_HDRMOD_T_REMOVE. The first
-header of the original mail has position one; zero is the Received: header
-added by the SMTP server.
-
-
-Message Replacement
-
-If a pmilter wants to replace the entire message, the function pmfi_eom()
-must return the value SMTP_R_RPLCMSG. This will cause the invocation of
-the callback
-
-sfsistat_T pmfi_msg_rplc(pmse_ctx_P pmse_ctx, const unsigned char
-**pmsgchunk, size_t *pmsglen)
-
-which then must set a pointer to a message chunk and its length. Multiple
-chunks can be sent by returning SMTP_R_CONT as result of the callback. For
-the last chunk, SMTP_R_OK should be returned. The size of each chunk
-(pmsglen) must be less than PMILTER_CHUNK_SIZE as defined in include/sm/
-pmfapi.h.
-
-libpmilter will thereafter invoke the callback
-
-sfsistat_T pmfi_msg_rplc_stat(pmse_ctx_P pmse_ctx, sm_ret_T status)
-
-to give the pmilter a chance to clean up after the transaction, and to let
-it know whether the message replacement was successful.
-
-Notes:
-
-  * as the entire message is replaced and by default only the data that is
-    received from the SMTP client is sent to a pmilter, the Received:
-    header field that smtps generates is lost. To avoid this, a pmilter
-    can request to receive that header field by setting
-    SM_SCAP_PM_SND_RCVD and sending it as first chunk of the message
-    replacement.
-  * the message must be in SMTP format, i.e., lines must end in CRLF and
-    the final chunk should have the usual SMTP end of message indication:
-    CRLF dot CRLF (\r\n.\r\n), however, it can also just end in CRLF.
-  * if pmfi_msg_rplc() encounters an error, e.g., due to an API violation
-    or due to a communication error with smtps, then it will invoke
-    pmfi_msg_rplc_stat() directly without waiting for the entire message
-    even if it consists of more chunks.
-
-
-Further Capabilities
-
-In addition to selecting which SMTP commands to send to pmilter (see
-Section 5.2.3), there are some more capabilities available:
-
- 1. SM_SCAP_PM_RCPT_ST causes the MTA to send RCPT information even if the
-    command has been rejected, e.g., because the recipient is unknown, the
-    recipient has been rejected due to access map checks, or relaying has
-    been denied. Note: RCPT commands that are rejected for other reasons,
-    e.g., because the address is syntactically invalid, or some limit
-    (maximum number of recipients) is exceeded, will not be sent to
-    pmilter.
-
-    The function
-
-    sm_ret_T sm_pmfi_getstatus(pmse_ctx_P pmse_ctx, sfsistat_T *pstatus)
-
-    should be used in that case to access the current SMTP reply code for
-    the command. This functionality is useful for a pmilter that wants to
-    keep track of all recipients, not just those which are accepted, e.g.,
-    to deal with dictionary attacks.
-
- 2. SM_SCAP_PM_MSG_RC allows a pmilter to return a reply code as specified
-    in 5.2.13 from pmfi_msg(). This is useful if a pmilter can make a
-    decision about the mail without having to read the entire message. If
-    this capability is turned on, pmfi_msg() must return SMTP_R_CONT for
-    each message chunk by default to receive subsequent parts. Otherwise
-    pmfi_eom() will not be called but the return code from pmfi_msg() will
-    be used at the end of the message (in response to the final dot).
-
-
-Miscellaneous Functions
-
-To set a reply text in an SMTP session or transaction oriented callback in
-addition to the reply code use:
-
-sm_ret_T sm_pmfi_setreply(pmse_ctx_P pmse_ctx, const char *reply)
-
-Note: the reply string must contain the full SMTP reply, i.e., it must be
-of the form
-
-XYZ D.S.N text\r\n
-
-where XYZ is a valid SMTP reply code (see RFC 2821 [Kle01]) which must
-match the return code of the function from which sm_pmfi_setreply() is
-called, D.S.N is an enhanced status code as defined in RFC 3463 [Vau03]
-and the rest is an explanation of the status including CRLF (\r\n). The
-text can be a multi-line reply in the form:
-
-XYZ-D.S.N text1
-XYZ-D.S.N text2
-XYZ D.S.N text3
-
-which must be specified in the format required by SMTP:
-
-XYZ-D.S.N text1\r\nXYZ-D.S.N text2\r\nXYZ D.S.N text3\r\n
-
-To set reply codes for commands that need multiple reply values the
-function:
-
-sm_ret_T sm_pmfi_setreplies(pmse_ctx_P pmse_ctx, uint nreplies, int
-*rcodes, const char **rtexts)
-
-must be used. Currently this function makes only sense if PRDR is
-available in the SMTP server and actually used by the client. A pmilter
-can determine the latter by parsing the arguments of the MAIL command (see
-pmfi_mail()). Note: currently the argument rtexts is ignored, only the
-array of reply codes (rcodes) is used. The size of this array must be
-nreplies which must match the number of valid RCPTs for this transaction.
-The reply codes in that array must be in the same order in which the RCPTs
-have been received.
-
-Return version number of libpmilter:
-
-sm_ret_T sm_pmfi_version(pmg_ctx_P pmg_ctx, uint32_t *major, uint32_t
-*minor, uint32_t *patchlevel)
-
-This can be used to compare the version number of the library against
-which pmilter is linked with the version number against which pmilter is
-compiled. The major version numbers must match otherwise the program will
-not run.
-
-Signal handler callback:
-
-sm_ret_T pmfi_signal(pmg_ctx_P pmg_ctx, int sig)
-
-This function will be called when a USR1 or USR2 signal is received; it is
-not called within a signal handler, i.e., the code does not have to be
-signal-safe. Note: this is not yet implemented.
-
-
-Return Values
-
-SMTP Session and transaction oriented functions use sfsistat_T as return
-type. Allowed values for this type are (as defined in include/sm/
-smreplycodes.h):
-
-  * SMTP_R_OK: accept command.
-  * SMTP_R_ACCEPT: accept entire transaction or session depending on where
-    this value is returned. Note: this is just a shortcut for
-    SMTP_R_SET_QUICK(SMTP_R_OK).
-  * SMTP_R_DISCARD: discard effect of command.
-  * SMTP_R_CONT: continue other checks.
-  * SMTP_R_SSD: shut down SMTP session.
-  * SMTP_R_TEMP: reject command with a temporary error.
-  * SMTP_R_SYNTAX: syntax error.
-  * SMTP_R_PERM: reject command with a permanent error.
-  * other valid SMTP reply codes [Kle01].
-
-Additionally return values can be modified by using SMTP_R_SET_QUICK
-(returnvalue). See Section 3.9.3 for the effects of this.
-
-For functions that use sm_ret_T as return type a successful call returns
-SM_SUCCESS (0) and a negative value in case of an error.
-
-
-Implementation Notes
-
-As libpmilter currently does not keep track of the status of a transaction
-or session, the functions pmfi_abort() and pmfi_close() may be called even
-if no transaction or session is currently active. This can happen if an
-SMTP server unexpectedly aborts the connection to a policy milter. An
-application must be aware of this and keep track of its state properly.
-
-
-Policy Milter Examples
-
-The program libpmilter/example-pmilter-0.c is a simple example how to
-write a policy milter. It might be useful as a template for other milters.
-
-Also available is a policy milter contrib/milter-spamd.c that offers an
-interface to spamd(1) which is a daemonized version of spamassassin(1).
-milter-spamd.c is written by Daniel Hartmeier [Harc] (see the file itself
-for the Copyright) for sendmail 8 and modified to work with the policy
-milter API of MeTA1.
-
-Miscellaneous
-
-
-Troubleshooting
-
-If something goes wrong then the component which fails usually logs an
-error message. Depending on the configuration, an error is either logged
-via syslog(3) or printed into a logfile (as explained in Section 4.8).
-Note: even if the system is configured to use syslog(3) (Section 3.4, item
-1) errors at startup are printed to the logfile if those errors occur
-before the configuration is read, hence those files need to be checked
-too.
-
-
-Startup Problems
-
-If MeTA1 fails to start properly the reason should be logged as explained
-before. Some possible reasons are
-
- 1. invalid configuration file: use misc/smconf to check the syntax before
-    deploying a new configuration file.
-
- 2. wrong permissions: check the permissions as explained in Section 2.4:
-
-    $ ./misc/sm.check.sh
-
- 3. missing or invalid maps: make sure maps are created properly with
-    createmap(8).
-
-
-Logfile Entries
-
-Most logfile entries should be self-explaining. However, some are more
-subtle and indicate only indirectly what might be wrong. Example:
-
-smtps: ... client_name=Hostname_Not_Determined
-
-indicates that the access map (Section 3.10, 3b) is not used which might
-point to a misconfiguration.
-
-Caveats
-
-The following problems exist in this version of MeTA1:
-
-  * If the system runs out of memory then the MTA may not act gracefully
-    in all cases, see Section 4.10.1.
-
-  * If a disk that is used for one of the queues becomes full, some errors
-    may not be handled gracefully, see Section 4.10.1. To avoid this,
-    MeTA1 has some limits for the amount of available disk space that is
-    required to accept mail (see Section 3.8).
-
-Checks in SMTP Server
-
-The SMTP server has some builtin checks which are explained in the
-following.
-
-
-Strict RFC Compliance
-
-The SMTP server currently enforces fairly strict RFC 2821 compliance. For
-example, a MAIL command must be given in the following format
-
-MAIL From:<user@some.domain>
-
-i.e., the angle brackets are required, there must be no space after ":",
-etc. This has the useful side effect of catching some spam programs:
-
-5.5.0 Syntax error., input=MAIL FROM: <blafwhoyqjywvu@asia.com>
-
-Moreover, the server requires that lines end in CRLF (\r\n), it will not
-accept command input without the correct line ending, i.e., trying to do
-that will cause a read error.
-
-Another requirement is that MX records must point to hostnames, not IP
-addresses [Moc87]. This applies to receiving mail - a MAIL address using a
-domain whose MX record points to an IP address will be rejected (553 5.1.8
-Sender address does not exist) - as well as to sending mail - a RCPT
-address with a domain whose MX record points to an IP address is not
-resolved by SMAR.
-
-Various Checks
-
-The EHLO parameter is checked against the local hostname unless the
-connection comes from localhost (IP address 127.0.0.1) or the access map
-returned quick:ok or quick:relay, see Section 3.9.3. Violations will be
-logged with a status text of Identity_Theft.
-
-The SMTP server checks for ``illegal pipelining'', i.e., whether a client
-sends commands before it is allowed to do so. Moreover, it also checks
-whether the client sends a command before the initial greeting. Note:
-according to RFC 2821 the client SHOULD wait for the greeting, but this is
-not (yet) a requirement. To turn this off, use allow_data_before_greeting
-(Section 3.10, item 3k.)
-
-Security Checks
-
-There are currently no additional security checks when creating/accessing
-files or directories besides those provided by the operating system. This
-could be a problem if MCP is misconfigured because it runs as root. Hence
-it will simply overwrite existing files if those are specified in the
-configuration file. The other modules run as non-privileged users, hence
-the OS provides sufficient access checks - unless the system is
-misconfigured and the MeTA1 accounts are misused for other purposes too.
-
-Restrictions
-
-Besides the obviously missing functionality there are some other things
-that may restrict the use of MeTA1 in certain environments. Here is an
-incomplete list:
-
-  * DNS lookups currently use only UDP by default, hence answers that
-    exceed the UDP packet size will cause problems. However, such DNS
-    packets are really rare (because they cause operational problems in
-    various places, e.g., some firewalls may block TCP for port 53). A
-    possible workaround might be to force TCP (see Section 3.9.2, item 1
-    (a)i), the correct way is a change in the DNS library to retry with
-    TCP, but this has not yet been implemented.
-
-  * Map lookups convert keys to lower case before checking an entry. In
-    general this is not a problem unless local addresses rely on
-    preserving the case of the local parts of addresses. That is, local
-    addresses which require upper case characters do not work.
-
-  * Multi-line replies from an SMTP server are currently neither stored
-    (for a possible DSN) nor logged, instead just the last line is used
-    for that purpose.
-
-Everything that is not described in the documentation does either not
-exist in the current version of MeTA1, or is unlikely to work. However,
-there may be omissions in the documentation, please inform the author of
-such bugs.
-
-Code Review, Enhancements, Patches
-
-Source code inspection as well as patches and suggestions are very
-welcome.
-
-Enhancements and extensions are very welcome too, especially to extend the
-basic functionality of the current MeTA1 release.
-
-Porting
-
-Porting to currently unsupported platforms including non-Unix systems is
-encouraged. Note that the destination system must support statethreads [
-SGI01] and Berkeley DB 4.x. It might be necessary to port those first.
-
-
-Version Naming
-
-Each MeTA1 version has a name in the following format:
-
-MeTA1-major.minor.[qualifier]qualifier-version.patchlevel
-
-The major number changes between releases when new features are introduced
-(major changes, but see below about the development phases). The minor
-number changes when no new features are introduced, but bugfixes and
-(portability) enhancements are made. That is, no configuration changes are
-needed when going from one minor version to the next. The patchlevel
-number is used for intermediate patches between releases, e.g., if
-something is broken but it is not important enough for a new release
-because it is barely used or encountered.
-
-There are several different qualifiers:
-
- 1. PreAlpha: This means the software is not feature complete and hence
-    might be missing some functionality that is considered important by
-    different users. Additionally, there is most likely no compatibility
-    in data structures stored on disk between different pre-alpha
-    versions, e.g., when upgrading from PreAlpha16 to PreAlpha17 the main
-    queue format may have changed without checks in the software for this.
-    Hence old queues must be drained before upgrading. Moreover, the
-    protocols used for communication between MeTA1 modules may have
-    changed without providing backward compatibility, therefore modules
-    from different releases must not be used together. Such
-    incompatibilities are usually stated in the list of changes ChangeLog.
-
-    Do not run this on a production server unless you are aware of the
-    possible consequences. The software is still under development and not
-    fully functional. Moreover, it may not be sufficiently tested.
-
- 2. Alpha: In this state the software is ready for public testing but its
-    features may still change.
-
- 3. Beta: Feature changes are unlikely, but still possible if required.
-    Usually only bugfixes occur between beta versions.
-
- 4. Gamma: This is a release candidate. Usually only critical bugfixes
-    occur between gamma versions. There might be no gamma versions at all
-    if beta testing was considered successful and sufficient.
-
- 5. A release version does not have an explicit qualifier.
-
-The qualifier-version is used to distinguish between different version of
-the same qualifier, e.g., PreAlpha16 and PreAlpha17. It is 0 for a release
-version.
-
-Examples for version names: MeTA1-0.0.PreAlpha19.0, MeTA1-1.0.0.0.
-
-See the file include/sm/version.h how the version string is converted into
-a 32 bit number that denotes the version number.
-
-Snapshots
-
-From time to time snapshots may be made available. Those are marked with a
-date in the distribution file name, e.g., meta1-0.0.16.0-20040928.tar.gz.
-The name indicates that it is a snapshot of what will become version
-meta1-0.0.16.0, i.e., the next release will have the given version number
-(without the date). The only other indication in the distribution is the
-inclusion of an s in the version number that is shown in the version
-output of the main components. A snapshot did not go through the usual
-release cycle and is made available as technology preview.
-
-Data Flow in MeTA1
-
-
-Data Flow in MeTA1
-
-This Section explains how MeTA1 stores information about messages that are
-transferred. It gives some background information which is useful for
-troubleshooting. Details about the operation of MeTA1 can be found in [
-Assmb].
-
-MeTA1 uses two different databases on disk to store envelope information
-(sender and recipients): IBDB: incoming backup database, DEFEDB: deferred
-envelope database, and one database to store message contents: CDB:
-content database. See Section 2.4.1 about the location and layout of these
-databases^7.1. The queue manager additionally uses two internal envelope
-databases: IQDB (Incoming Queue DataBase) and AQ (Active Queue).
-
-Incoming mails are accepted by the SMTP servers which store the content in
-the CDB (complete messages including headers in the format as received).
-The envelope information, i.e., sender (MAIL) and recipients (RCPT), is
-stored by the queue manager in IQDB and written to IBDB which is just a
-log of envelope data and what happened to it. That is, the files in IBDB
-are written sequentially and are continuously growing. If a file reaches
-its size limit (see Section 3.8: IBDB), then it is closed and a new file
-is opened. For a delivery, the envelope information must be transferred
-into AQ. For incoming mail this happens as soon as a transaction is
-accepted, in which case the data is moved from IQDB to AQ. A transaction
-is only accepted if the message is safely written to CDB and the envelope
-information has been committed to IBDB, i.e., all information is committed
-to persistent storage^7.2.
-
-The scheduler in QMGR takes recipient envelopes from AQ and creates
-transactions which are given to the SMTP clients for delivery. An SMTP
-client takes the transaction information and tries to send a message whose
-content is read from CDB. After a successful delivery attempt a record is
-written to IBDB that logs this information. A cleanup task removes
-periodically old IBDB files which contain only data that is no longer
-referenced.
-
-The deferred envelope database is only used if a message cannot be
-delivered during the first attempt. In that case the appropriate envelope
-data is added to DEFEDB and a record is written to IBDB stating that the
-data has been transferred to DEFEDB. Entries in DEFEDB contain a timestamp
-called next-time-to-try at which QMGR reads them from the database into AQ
-and the scheduler tries another delivery attempt. If that succeeds, the
-entries are removed from DEFEDB, otherwise they are either requeued with a
-new next-time-to-try (in case of a temporary error) or a DSN (bounce
-message) is generated (in case of a permanent error).
-
-Advanced Configuration Options
-
-
-Overview
-
-Some configuration options are only needed in special situations and may
-require background knowledge of the involved systems. Those advanced
-configuration options are explained in the subsequent sections.
-
-
-Flags
-
-Usually flags are not set and hence a configuration file only needs to
-turn on flags (if required). However, in some cases flags are set by
-default and under some rare circumstances need to be disabled. To achieve
-this, the name of the flag can be prefixed with one of not_, dont_, no_,
--, !, or ~, e.g., ~remove_unused_logfiles or dont_remove_unused_logfiles.
-
-
-Advanced Configuration for MCP
-
- 1. max_processes: maximum number of processes to start [default: 1].
- 2. min_processes: minimum number of processes to start [default: 1].
- 3. use_id_in_logfile_name: if more than one process can be started then
-    it might be useful to have unique logfiles unless the processes use
-    syslog(3). If set, this (boolean) option causes MCP to include a
-    unique identifier (the same as for pass_id, which must be used too) in
-    the logfile name. By default the logfile has the name of the section
-    (or the section keyword if no section name is given), preceeded by the
-    log directory (option -L for MCP), and .log appended. If
-    use_id_in_logfile_name is turned on, then the numeric id is added
-    before the extension, e.g., /var/log/meta1/mailer0.log for -L /var/log
-    /meta1/ and a section with the name mailer.
- 4. working_directory: perform a chdir(2) to the specified directory
-    before executing the process. Note: this option essentially requires
-    that all relevant pathnames in the configuration file are absolute,
-    otherwise it is very easy to misconfigure some pathnames, especially
-    those shared between different processes.
-
-Note: the number of processes for almost all MeTA1 modules should be 1. It
-must be 1 for QMGR and SMAR, it can be larger than 1 for SMTPC. For SMTPS
-it should be 1 in the default setup as the file descriptor to which MCP
-binds on behalf of SMTPS can be passed to only one process.
-
-
-Advanced Configuration for QMGR
-
- 1. connection_control_hash_table_size: size of the hash table used for
-    connection control, i.e., number of incoming connections and
-    connection rate (see Section 3.8, 18a and 18b)
- 2. debug_level: debug level (only if compiled with QMGR_DEBUG).
-
- 3. subsection DEFEDB: Note: The Berkeley DB documentation [Sleb] should
-    be consulted before modifying any of these options.
-     1. page_size: DB page size (this can only be set when the DB is
-        initially created).
-     2. cache_size: DB cache size.
-     3. KBytes_written_for_checkpointing: If non-zero, a checkpoint will
-        be done if more than the amount of KBytes of log data have been
-        written since the last checkpoint (unit: KB).
-     4. delay_between_2_checkpoints: Minimum delay between two checkpoints
-        (unit: s).
-     5. flags: flags for DEFEDB:
-         i. remove_unused_logfiles: this is on by default, hence to turn
-            it off one of the forms explained in Section 8.1.1, e.g.,
-            dont_remove_unused_logfiles, can be used. This should only be
-            done if the Berkeley DB logfiles are removed some other way,
-            e.g., after archiving.
-
- 4. delivery_timeout: timeout for a single delivery attempt (unit: s).
-    This value should be large enough that even big mails can be delivered
-    over a slow link before the QMGR considers the delivery attempt a
-    failure because the delivery agent did not return a result yet.
-
- 5. flags: configuration flags:
-     a. reuse_connection: try to reuse open SMTP connections for delivery.
-        Note: this feature is still experimental.
-
- 6. max_fds: maximum number of file descriptors. This sets an upper limit
-    on the number of clients that can connect to QMGR.
-
- 7. max_threads: maximum number of threads.
- 8. min_threads: minimum number of threads.
-
- 9. scheduler_timeout: as a safety measure against unforseen problems an
-    item is removed from AQ after the specified timeout. This timeout must
-    be large enough to allow for scheduling delays if all delivery agents
-    are busy which can happen if deliveries are slow or if there are fewer
-    delivery agents available than entries in the active queue.
-
-10. SMAR_timeout: timeout in address resolver, i.e., how long to wait for
-    a result from SMAR (unit: s). Note: this value must be larger than the
-    total DNS timeout and it must take alias expansion into account.
-
-11. subsection smtps:
-     a. connection_control_cache_size: size of connection control hash
-        table.
-
-12. tests: testing only (available if QMGR is compiled with -DQMGR_TEST).
-    See the source code for details.
-
-
-Advanced Configuration for SMAR
-
- 1. DNS: this subsection contains DNS related options.
-     1. flags: valid flags are:
-         1. use_TCP: use TCP instead of UDP for connections to a
-            nameserver. Note: currently the DNS resolver does not
-            automatically fall back to a TCP connection if the reply was
-            too big. This may be added in a later version.
-         2. use_connect: use connect(2) even if using UDP. This is
-            required on systems like FreeBSD jail(8).
-
- 2. max_fds: maximum number of file descriptors. This sets an upper limit
-    on the number of clients that can connect to SMAR.
-
- 3. max_threads: maximum number of threads.
- 4. min_threads: minimum number of threads.
-
-
-Advanced Configuration for SMTP Server
-
- 1. daemon_address: address for daemon to listen on; this should not be
-    used in normal operation. Current (preliminary) format is: host:port,
-    :port (listen on 0.0.0.0) host (port defaults to 8000). Up to 16
-    addresses^8.1can be specified. See the notes below.
-
- 2. flags:
-     1. background: fork(2) after start; this should not be used in normal
-        operation.
-     2. serialize_accept: serialize accept(2) calls, see the statethreads
-        documentation [SGI01] for details.
-
- 3. listen_queue: length of listen(2) queue; this must not be used in
-    normal operation, i.e., if MCP is used.
-
- 4. max_wait_threads: maximum number of waiting threads.
- 5. min_wait_threads: minimum number of waiting threads.
-
- 6. module_timeout: timeout for communication with other modules.
-
- 7. processes: number of processes to start.
-
- 8. tls:
-     1. DSA_cert_file: file with DSA certificate in PEM format.
-     2. DSA_key_file: file with private key for DSA certificate in PEM
-        format.
-
- 9. wait_for_smar: maximum amount of time to wait for a reply from SMAR.
-
-Notes: only one of daemon_address and pass_fd_socket must be specified. In
-normal operation it is almost always pass_fd_socket because the SMTP
-server cannot bind to privileged ports, hence the file descriptor must be
-passed from MCP.
-
-
-Advanced Configuration for SMTP Client
-
- 1. connect_only_to: Specify an IP address to which all outgoing mail is
-    sent. This can be used for testing with otherwise real data, i.e.,
-    addresses, by running an SMTP sink^8.2on a computer and specifying its
-    IP address. Then all mails that should be sent via SMTP will go to
-    that host instead of the addresses determined by SMAR. Note: it is
-    nevertheless a good idea to use firewall rules to prevent mail going
-    out to the internet, i.e., prohibit connections to port 25 to external
-    hosts.
-
- 2. debug_level: debug level (only if compiled with SMTPC_DEBUG).
-
- 3. flags:
-     1. read_QUIT_reply: read the reply to the QUIT command instead of
-        just closing the connection after sending it.
-     2. separate_final_dot_and_QUIT: send the final dot of a message and
-        the QUIT command in different TCP packages even if PIPELINING is
-        offered. This can avoid problems with some broken servers or
-        firewalls.
-     3. talk_to_myself: do not check whether server greets with the
-        hostname of the machine on which smtpc runs.
-
- 4. max_wait_threads: maximum number of waiting threads.
- 5. min_wait_threads: minimum number of waiting threads.
-
- 6. module_timeout: timeout for communication with QMGR.
-
- 7. remote_port: port to which connections should be made. Note: if
-    multiple SMTP clients are specified, all of them must use the same
-    value for remote_port. Currently the scheduler requires that all SMTP
-    clients behave the same. If different ports are required, then those
-    must be listed in mailertable entries.
-
- 8. tls:
-     1. DSA_cert_file: file with DSA certificate in PEM format.
-     2. DSA_key_file: file with private key for DSA certificate in PEM
-        format.
-
-
-Tuning
-
-
-Size of Queues, Caches, and Databases
-
-All data structures in QMGR have some maximum size. This is not just done
-to avoid resource exhaustion in high load situations but also to provide a
-feedback loop between SMTP servers (producers) and SMTP clients
-(consumers). This feedback loop helps to avoid flooding the system with
-mails that it cannot deliver fast enough. The incoming queue (IQDB) and
-the active queue (AQ) implement this feedback loop. As explained in
-Section 7.1 the data from the SMTP servers is stored in the incoming queue
-first which has a fixed size. If more data is produced than taken out (by
-the scheduler into the active queue) the queue will fill up and the QMGR
-will throttle the SMTP servers by dynamically reducing the number of
-available threads. Throttling the SMTP servers is done based on various
-resources, e.g., IQDB, AQ, available disk space, and much more. Hence by
-limiting the size of IQDB (see Section 3.8, item 8a) and of course the
-maximum number of threads in the SMTP servers the incoming flow of
-messages can be controlled. The size of IQDB should be greater than the
-maximum number of threads in the SMTP servers multiplied by the average
-number of recipients, otherwise transaction will be rejected before all
-threads are busy.
-
-The active queue should be large enough to provide enough work for all
-SMTP clients (threads) and it must be larger than the largest number of
-recipients accepted by a single transaction (see Section 3.8, item 1).
-
-
-Disk I/O
-
-In most MTAs disk I/O is the limiting factor unless special hardware is
-used which employs battery backed RAM cache to achieve high I/O rates
-(IOP: I/O operations). If multiple disks are available, they can be used
-to spread the load. Disk files (see Section 2.4.1) are used for:
-
- 1. IBDB: the directory can be linked to a different disk.
- 2. DEFEDB: the base directory can be changed via an option (Section 3.8,
-    item 4a), as well as the directory for logfiles (Section 3.8, item 4b
-    ).
- 3. CDB: the base directory can be changed via an option (see Section 3.4,
-    item 2). Individual subdirectories (see Section 2.4.1) can be linked
-    to different disks.
-
-
-Processes and Threads
-
-The main MeTA1 processes are multi-threaded. However, two different
-threading implementations are used: POSIX threads (pthreads) for QMGR and
-SMAR and statethreads [SGI01] for SMTP server and client. Statethreads
-only switch between threads on network I/O operations as it is a threading
-implementation in user space without kernel support. Hence operations that
-can take a long time, e.g., computations for asymmetric cryptography (as
-required during the STARTTLS handshake) or in some cases even synchronous
-disk I/O, will not just stop a single thread but the entire process. If
-this happens it is possible to start multiple SMTP servers, see Section
-8.5, item 7. If it becomes necessary to start multiple SMTP clients, then
-the MCP can be instructed to do so, see Section 8.2, item 1.
-
-Format Specifications
-
-
-Socket Map
-
-The socket map uses a simple request/reply protocol over TCP or UNIX
-domain sockets to query an external server. Both requests and replies are
-text based and encoded as netstrings, i.e., a string ``hello there''
-becomes:
-
-11:hello there,
-
-Note: neither requests nor replies end with CRLF.
-
-The request consists of the database map name and the lookup key separated
-by a space character:
-
-mapname ' ' key
-
-The server responds with a status indicator and the result (if any):
-
-status ' ' result
-
-The status indicator is one of the following upper case words:
-
-OK        the key was found, result contains the looked up value
-
-NOTFOUND  the key was not found, the result is empty
-
-TEMP      a temporary failure occured
-
-TIMEOUT   a timeout occured on the server side
-
-PERM      a permanent failure occured
-
-In case of errors (status TEMP, TIMEOUT or PERM) the result field may
-contain an explanatory message.
-
-Example replies:
-
-31:OK resolved.address@example.com,
-
-in case of a successful lookup, or:
-
-8:NOTFOUND,
-
-in case the key was not found, or:
-
-55:TEMP this text explains that we had a temporary failure,
-
-in case of a failure.
-
-
-Format of Session/Transaction Identifiers
-
-The format of session and transaction identifiers is specified in include/
-sm/mta.h. For the SMTP server it consists of a leading 'S', a 64 bit
-counter and an 8 bit ``process'' identifier, both of which are printed in
-hexadecimal format. For the SMTP client it consists of a leading 'C', an 8
-bit ``process'' identifier, a 32 bit counter, and a 32 bit thread index,
-all of which are printed in hexadecimal format.
-
-Examples: S00000000407CE49200, C010000137D00000000.
-
-SMTP server session/transaction identifiers are unique until the 64 bit
-counter wraps around, SMTP client session/transaction identifiers are
-unique only within a single invocation of QMGR.
-
-Note: the format may change between different release of MeTA1, hence the
-identifiers should be considered opaque.
-
-
-Logfile Format
-
-The general format of entries in a logfile is a sequence of named fields
-which are separated by commas. Each field consists of a name, an equal
-sign, and a value. If the value is a text field that is received from an
-external (untrusted) source, then all non-printable characters, commas,
-and percent signs are shown as their two digit hexadecimal ASCII
-representation with a leading percent sign. For example, the text
-
-550 5.7.1 no, not now, 99% usage
-
-is encoded as
-
-550 5.7.1 no%2C not now%2C 99%25 usage
-
-This encoding allows a logfile analyzer to use the comma symbol as a
-delimiter of fields without having to perform complicated parsing, e.g,
-the Unix awk utility can be used with comma as field separator. Note:
-suggestions for a better encoding or different solution for the problem
-are welcome (more details can be found in [Assmb]).
-
-Logfiles use the identifiers described earlier such that transactions and
-sessions can be easily recognized. For the following examples logfile
-entries have been slightly edited and line breaks have been inserted.
-
-Here is one example of a session in an SMTP server:
-
-ss_sess=S00000000407EAE3800, client_ipv4=127.0.0.1,
-  client_name=localhost.endmail.org.
-ss_sess=S00000000407EAE3800, where=connection, starttls=successful
-ss_sess=S00000000407EAE3800, ss_ta=S00000000407EAE4E00,
-  mail=<SENDER@meta1.org>, stat=0
-ss_sess=S00000000407EAE3800, ss_ta=S00000000407EAE4E00,
-  rcpt=<RECIPIENT@meta1.org>, idx=0, stat=0
-ss_sess=S00000000407EAE3800, ss_ta=S00000000407EAE4E00,
-  rcpt=<SOMEONE@SOME.DOMAIN>, idx=1, stat=0
-ss_sess=S00000000407EAE3800, ss_ta=S00000000407EAE4E00,
-  msgid=<20040916050457.GG54961@endmail.org>, size=1177, stat=0
-
-The first entry shows a successful session creation including the IPv4
-address and the hostname of the client. The second entry indicates that
-STARTTLS has been used. A new transaction is shown in the third entry and
-two recipients are given thereafter (along with the index idx). The last
-entry shows that the transaction was successful (status=0; 0 is used
-instead of 250 or other SMTP reply codes that indicate success) and the
-size of the received mail (in bytes) as well as its Message-Id.
-
-Here is one example of a session in an SMTP client:
-
-da_sess=C01000006C800000002, status=connected, port=25, addr=64.81.247.36
-da_sess=C01000006C800000002, where=connection, starttls=successful
-da_sess=C01000006C800000002, da_ta=C01000006C900000002,
-  ss_ta=S00000000407EAE4E00, mail=<SENDER@meta1.org>, stat=0,
-  reply=250 2.5.0 MAIL command succeeded
-da_sess=C01000006C800000002, da_ta=C01000006C900000002,
-  ss_ta=S00000000407EAE4E00, rcpt=<RECIPIENT@meta1.org>, stat=0,
-  reply=250 2.1.5 RCPT ok
-da_sess=C01000006C800000002, da_ta=C01000006C900000002,
-  ss_ta=S00000000407EAE4E00, where=final_dot, size=1177, stat=0
-
-This is very similar to the format of the entries entries in the SMTP
-server and should not require an explanation. In addition to the delivery
-agent session and transaction ids (da_sess and da_ta) the SMTP server
-transaction id (ss_ta) is logged too. This makes it simple to track a
-message through the MTA. Obviously ss_ta can be used for multiple outgoing
-messages if the incoming message has been sent to multiple recipients
-(maybe indirectly via an alias), hence this is not a unique identifier in
-the SMTP client log.
-
-QMGR can also log the delay time for each recipient, e.g.,
-
-func=q_upd_rcpt_ok, rcpt_id=S00000000407EAE4E00-000000,
-  rcpt=<RECIPIENT@meta1.org>, xdelay=0, delay=1
-
-where xdelay is the time for this delivery attempt, and delay is the total
-delivery time.
-
-Format of Received Header
-
-The format of the Received: header added by the SMTP server is specified
-in smtps/smtps.c.
-
-Received: from EHLO-NAME (CLIENT-NAME [CLIENT-ADDR])
-        by HOST-NAME (SM-X-VERSION) with PROTOCOL
-        id SMTP-TA-ID; DATE
-
-where PROTOCOL is one of ESMTP, ESMTPS, ESMTPA, ESMTPSA, or SMTP [New04].
-If STARTTLS is active, then (TLS=TLSVERSION, cipher=CIPHERSUITE, bits=
-CIPHERBITS, verify=VERIFYRESULT) is placed before id, where TLSVERSION is
-the TLS protocol version, e.g., TLSv1, SSLv3, SSLv2; CIPHERSUITE is the
-cipher suite that was in use, e.g., AES256-SHA, EDH-DSS-DES-CBC3-SHA,
-EDH-RSA-DES-CBC-SHA, CIPHERBITS denotes the effective keylength (in bits)
-of the symmetric encryption algorithm of the TLS connection, and
-VERIFYRESULT is one of the following:
-
-OK    verification succeeded.
-
-NO    no cert presented.
-
-NOT   no cert requested.
-
-FAIL  cert presented but could not be verified, e.g., the signing CA cert
-      is missing.
-
-Note: the name of the client is only shown if the access map feature is
-activated (see Section 3.10, 3b), otherwise the time-consuming DNS lookups
-(PTR and A records) are not performed.
-
-Format of DSNs
-
-DSNs (bounces) are currently not compliant to RFC 1891ff, however, a
-configuration option (Section 3.8, item 5(b)ii) can be set to send DSNs in
-MIME format, i.e., Content-Type: multipart/mixed with Content-Type:
-message/rfc822 for the original message. The format looks like this:
-
-From: Mailer-Daemon@HOST.NAME
-Subject: Undeliverable mail
-
-A mail from you could not be delivered. See below for details.
-
-and then a list of recipients and the reasons for the failure, e.g.,
-
-Recipient:
-<user@example.com>
-Remote-MTA:
-10.2.3.4
-Reason:
-550 5.7.1 <user@example.com>... Access denied
-during RCPT
-
-Setup for STARTTLS
-
-
-Certificates for STARTTLS
-
-When acting as a server, MeTA1 requires X.509 certificates to support
-STARTTLS: one as certificate for the server, at least one root CA
-(CAcert_file), i.e., a certificate that is used to sign other
-certificates, and a path to a directory which contains certs of other CAs
-(CAcert_directory). The file specified via CAcert_file can contain several
-certificates of CAs. The DNs of these certificates are sent to the client
-during the TLS handshake (as part of the CertificateRequest) as the list
-of acceptable CAs. However, do not list too many root CAs in that file,
-otherwise the TLS handshake may fail; e.g.,
-
-error:14094417:SSL routines:SSL3_READ_BYTES:
-sslv3 alert illegal parameter:s3_pkt.c:964:SSL alert number 47
-
-You should probably put only the CA cert into that file that signed your
-own cert(s), or at least only those you trust. The directory specified via
-CAcert_directory must contain the hashes of each CA certificate as
-filenames (or as links to them). Symbolic links can be generated with the
-following two (Bourne) shell commands:
-
-C=FileName_of_CA_Certificate
-ln -s $C `openssl x509 -noout -hash < $C`.0
-
-An X.509 certificate is also required for authentication in client mode,
-however, MeTA1 will always use STARTTLS when offered by a server. The
-client and server certificates can be identical. Certificates can be
-obtained from a certificate authority or created with the help of OpenSSL.
-The required format for certificates and private keys is PEM. To allow for
-automatic startup of MeTA1, private keys must be stored unencrypted. The
-keys are only protected by the permissions of the file system, hence they
-should not be readable by anyone but the owner. If server and client share
-the same key it is ok to make the key group readable however. Never make a
-private key available to a third party.
-
--r--r--r--  1 root     wheel       CAcert.pem
--r--r--r--  1 meta1s   meta1c      smcert.pem
--r--r-----  1 meta1s   meta1c      smkey.pem
-drwxr-xr-x  2 root     wheel       certs/
-
-More About Configuration, Compilation, Debugging, and Testing
-
-
-Compile Time Options
-
-There are several compile time parameters which might be useful in some
-situations that are listed below. Compile time options to turn on
-additional debugging are listed in section 12.1.5.
-
-
-Generic
-
-To further restrict the length of syslog(3) messages the compile time
-options MTA_LOG_LEN and MTA_LOG_LEN_MAX can be used (see libmta/log.c for
-the defaults). The macro MTA_LOG_LEN_MAX sets the maximum length of a
-syslog(3) message, MTA_LOG_LEN needs only be set if MTA_LOG_LEN_MAX is
-less than the default value of MTA_LOG_LEN.
-
-
-QMGR
-
-To enable QMGR statistics, e.g., number of transactions and recipients
-that have been handled, set QMGR_STATS.
-
-
-SMAR
-
-The address resolver imposes limits on the number of MX and A records that
-it accepts when it does routing lookups. These macros are:
-
-  * MTA_DNS_MX_MAX: maximum number of MX records for a domain,
-  * MTA_DNS_A_PER_MX_MAX: maximum number of A records for one MX record,
-  * MTA_DNS_A_MAX: maximum number of A records for a domain (after
-    performing MX lookups).
-
-
-SMTPS
-
-  * SS_EHLO_ACCESS_CHK enables lookups of the EHLO/HELO argument in the
-    access map (Section 3.10, 3b). This must be enabled at runtime via the
-    flag check_ehlo.
-
-
-Debugging Compile Time Options
-
-There are several compile time parameters to support debugging. An option
-that applies to all modules (as they use the same libraries) is
-MTA_HEAP_CHECK which turns on various heap checks and keep track of memory
-usage.
-
-Other options are specific to a module and can be used to turn on
-debugging output. Since currently no logging abstraction is in use, the
-output is done on a per-module basis (whatever is simplest for the
-individual module). These compile time options are:
-
-SC_DEBUG          SMTPC debugging
-
-SSQ_DEBUG         SMTPS - QMGR communication debugging
-
-SS_DATA_DEBUG     SMTPS DATA stage debugging
-
-QMGR_DEBUG        QMGR debugging
-
-SMAR_DEBUG        SMAR debugging
-
-MTA_LIBDNS_DEBUG  libdns debugging
-
-For details see the source code.
-
-Note: it is possible to set different debug levels for different debug
-categories in QMGR. For a list of categories see include/sm/qmgrdbg.h. To
-set a debug level n for a category c use the option -xc.n. The general
-syntax for the parameters is:
-
-debugoptions  ::=  debugoption [ "," debugoptions ]
-
-debugoption   ::=  range [ "." level ]
-
-range         ::=  first [ "-" last ]
-
-If level is omitted, it defaults to 1. Example: -x1-3.4,5.3,9-11
-
-A simple way to set compile time options is to use:
-
-$ CFLAGS="-DSM_HEAP_CHECK" $PATHTO/meta1-$VERSION/configure
-
-A more complicated example is:
-
-$ CFLAGS="-O -g -DSM_HEAP_CHECK -I/usr/local/include" \
- LDFLAGS="-L/usr/local/lib" \
- $PATHTO/meta1-$VERSION/configure
-
-Hint: it is useful to write the command line into a local file that can be
-reused for subsequent builds and versions.
-
-Note: if configure has problems with OpenSSL because you do not have
-KerberosV installed, add
-
-$ CPPFLAGS="-DOPENSSL_NO_KRB5"
-
-Possible Compilation Problems or Warnings
-
- 1. If gcc is used as C compiler and full checking is turned on warnings
-    like these are produced:
-
-    warning: unknown conversion type character `N' in format
-    warning: unsigned int format, sm_str_P arg (arg 3)
-    warning: too many arguments for format
-
-    Unfortunately gcc cannot be told about additional format specifiers
-    and hence the misleading warning might be generated.
-
- 2. On some systems the following warning is generated by the compiler:
-
-    `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
-
-    sys_nerr is used to determine whether it makes sense to invoke
-    strerror(3) at all. The systems that generate this error do not
-    provide an alternative way to perform this check. Just ignore the
-    warning or ask the authors of that warning for an alternative way to
-    determine the range of defined error codes.
-
-
-More About Test Programs
-
-
-More Environment Variables used by Test Programs
-
-  * MTA_NAMESERVER: can be used to set a specific nameserver (IPv4
-    address) in case the simple script which extracts the first line
-    beginning with nameserver from the file /etc/resolv.conf does not give
-    the desired result.
-
-  * MTA_PMILTER_REGEX_TEST: can be used to enable the tests (make check in
-    chkmts/) for the policy milter milter-regex provided it is enabled and
-    compiled. Notes:
-      + this requires that make check is executed in contrib/ before make
-        check in chkmts/.
-      + make check in contrib/ may fail due to a compilation error for
-        milter-regex.c. If your OS has yacc(1) (or bison(1) installed then
-        remove that file (milter-regex.c) and try again. You may have to
-        tell configure to use yacc(1), e.g.,
-
-        YACC=yacc ./configure ...
-
-  * Some test programs use SMTP servers and sinks listening on an INET
-    port. The default values for these ports are specified in chkmts/
-    common.sh. If one of the default ports is used by another program,
-    then the corresponding environment variable must be set as otherwise
-    all related test programs will fail.
-
-      + MTA_SNKPORT: set the port on which the SMTP sink is listening.
-
-      + MTA_SRVPORT: set the port on which the SMTP test server is
-        listening.
-
-
-Other Potential Problems with Test Programs
-
-Some of the test programs may generate warnings, e.g., most of the tree
-related programs cause compilers on 32 bit systems to emit a warning
-integer constant too large which can be ignored.
-
-
-Known Test Program Problems specific to an OS/setup
-
-FreeBSD systems when running in a jail(8) exhibit the following problems:
-
-  * The test programs for SMAR which perform DNS lookups can fail because
-    UDP does not work in a jail(8) as expected. A workaround for this is
-    to use the -U option for smar which can be achieved by setting the
-    environment variable SMAROPTS to that value.
-
-  * Connections from localhost to the SMTP server do not have 127.0.0.1 as
-    source IP address, but the IP address of a NIC. Hence relaying must be
-    allowed for it by setting the environment variable MTA_SERVER_OPTIONS
-    to the option -C and the IP address, e.g., -C 10.2.3.4. Moreover,
-    because the tests chkmts/t-mts-icr.sh and chkmts/t-mts-ocr.sh rely on
-    connections coming from 127.0.0.1 they will fail too.
-
-MacOS 10.3.4 has a problem with sigwait(3), see Apple's bug 3675391; hence
-MeTA1 does not work on this OS (and other versions that have the same
-bug).
-
-Licenses
-
-The main licenses for MeTA1 can be found in the file LICENSE and in the
-directory license/. Additionally, MeTA1 contains code from other projects
-whose licenses can be either found in the respective source files or in
-statethreads/README for the statethreads library and db-4.3.28.NC/LICENSE
-for Berkeley DB. Some source code is licensed under a BSD license which
-can be found at the begin of those files.
-
-Bibliography
-
-
-Assma
-    Claus Assmann.
-    Sendmail X.
-    http://www.sendmail.org/%7Eca/email/sm-9-rfh.html.
-
-Assmb
-    Claus Assmann.
-    Sendmail X: Requirements, Architecture, Functional Specification,
-    Implementation, and Performance.
-    http://www.sendmail.org/%7Eca/email/sm-X/.
-
-Ber97
-    Dan Bernstein.
-    VERP: Variable Envelope Return Paths, 1997.
-    http://cr.yp.to/proto/verp.txt.
-
-Cyr Project Cyrus.
-    http://asg.web.cmu.edu/cyrus/, http://asg.web.cmu.edu/sasl/.
-
-Fre00
-    N. Freed.
-    SMTP service extension for command pipelining.
-    RFC 2920, Internet Engineering Task Force, 2000.
-
-Gnu GnuPG.
-    GNU Privacy Guard.
-    http://www.gnupg.org/.
-
-Hal07
-    Eric A. Hall.
-    Smtp service extension for per-recipient data responses (prdr).
-    Draft, Internet Engineering Task Force, 2007.
-
-Hara
-    Evan Harris.
-    The next step in the spam control war: Greylisting.
-    http://greylisting.org/articles/whitepaper.shtml.
-
-Harb
-    Evan Harris.
-    Whitelisting.
-    http://greylisting.org/whitelisting.shtml.
-
-Harc
-    Daniel Hartmeier.
-    benzedrine.cx - milter-spamd.
-    http://www.benzedrine.cx/milter-spamd.html.
-
-Hof99
-    P. Hoffman.
-    SMTP service extension for secure SMTP over TLS.
-    RFC 2487, Internet Engineering Task Force, 1999.
-
-Kle01
-    Simple mail transfer protocol.
-    RFC 2821, Internet Engineering Task Force, 2001.
-
-MeT PGP keys.
-    http://www.MeTA1.org/security/PGPKEYS.
-
-Moc87
-    P.V. Mockapetris.
-    Domain names - implementation and specification.
-    RFC 1035, Internet Engineering Task Force, 1987.
-
-mut mutt.
-    http://www.mutt.org/.
-
-MV03
-    K. Moore and G. Vaudreuil.
-    An Extensible Message Format for Delivery Status Notifications.
-    RFC 3464, Internet Engineering Task Force, 2003.
-
-Mye96
-    John Myers.
-    Local mail transfer protocol.
-    RFC 2033, Internet Engineering Task Force, 1996.
-
-Mye99
-    J. Myers.
-    SMTP service extension for authentication.
-    RFC 2554, Internet Engineering Task Force, 1999.
-
-New04
-    Chris Newman.
-    ESMTP and LMTP Transmission Types Registration.
-    RFC 3848, Internet Engineering Task Force, 2004.
-
-Ope OpenSSL.
-    http://www.openssl.org/.
-
-PGP PGP.
-    http://www.pgp.com/.
-
-Posa
-    Jef Poskanzer.
-    graymilter - simple graylist mail filter module.
-    http://www.acme.com/software/graymilter/.
-
-Posb
-    Jef Poskanzer.
-    mini_sendmail - accept email on behalf of real sendmail.
-    http://www.acme.com/software/mini_sendmail/.
-
-SGI01
-    SGI.
-    State threads for internet applications, 2001.
-    http://state-threads.sourceforge.net/.
-
-Slea
-    Berkeley DB 4.4.XX Change Log.
-    http://www.sleepycat.com/update/4.4.XX/if.4.4.XX.html.
-
-Sleb
-    Berkeley DB Tutorial and Reference Guide, version 4.3.28.
-    http://www.sleepycat.com/docs/.
-
-Tok Michael Tokarev.
-    tinycdb: A package for maintenance of constant databases.
-    ftp://ftp.corpit.ru/pub/tinycdb/.
-
-Vau03
-    G. Vaudreuil.
-    Enhanced mail system status codes.
-    RFC 3463, Internet Engineering Task Force, 2003.
-
-vdBG
-    S.R. van den Berg and Philip Guenther.
-    procmail.
-    http://www.procmail.org/.
-
-
-Index
-
-8bitmime
-    Configuration for SMTP Server
-abort
-    Configuration for SMTP Server
-accept_but_reconnect
-    Configuration for SMTP Server
-access
-    Configuration for SMTP Server
-access_map
-    Configuration Options for SMAR
-address
-    Configuration for MCP | Declaring Maps for SMAR | Configuration for
-    SMTP Server
-address_delimiter
-    Configuration Options for SMAR
-aliases
-    Configuration Options for SMAR
-all_domains
-    Configuration Options for SMAR
-allow_by
-    Configuration for SMTP Server
-allow_data_before_greeting
-    Configuration for SMTP Server
-allow_relaying_if_verified
-    Configuration for SMTP Server
-AQ_max_entries
-    Configuration for QMGR
-arguments
-    Configuration for MCP
-auth
-    Configuration for SMTP Server
-background
-    Advanced Configuration for SMTP
-base_directory
-    Configuration for QMGR
-CAcert_directory
-    Configuration for SMTP Server | Configuration for SMTP Client
-CAcert_file
-    Configuration for SMTP Server | Configuration for SMTP Client
-cache_size
-    Configuration for SMTP Server | Advanced Configuration for QMGR
-cache_timeout
-    Configuration for SMTP Server
-CDB_base_directory
-    Common Global Configuration
-CDB_gid
-    Configuration for SMTP Server
-cert_file
-    Configuration for SMTP Server | Configuration for SMTP Client
-check_access_map_for_relaying
-    Configuration for SMTP Server
-client_ip
-    Configuration for SMTP Server
-conf
-    Configuration for QMGR
-connect_only_to
-    Advanced Configuration for SMTP
-connection_control_cache_size
-    Advanced Configuration for QMGR
-connection_control_hash_table_size
-    Advanced Configuration for QMGR
-control_socket
-    Configuration for QMGR
-daemon_address
-    Advanced Configuration for SMTP
-debug_level
-    Advanced Configuration for QMGR | Advanced Configuration for SMTP
-delay_between_2_checkpoints
-    Advanced Configuration for QMGR
-delay_checks
-    Configuration for SMTP Server
-delay_greylisting_error_until_DATA
-    Configuration for SMTP Server
-delivery_timeout
-    Advanced Configuration for QMGR
-DNS Configuration Options for SMAR | Advanced Configuration for SMAR
-dnsbl
-    Configuration Options for SMAR
-domain
-    Configuration Options for SMAR
-double_bounce_address
-    Configuration for QMGR
-DSA_cert_file
-    Advanced Configuration for SMTP | Advanced Configuration for SMTP
-DSA_key_file
-    Advanced Configuration for SMTP | Advanced Configuration for SMTP
-expire_limit
-    Configuration Options for SMAR
-facility
-    Common Configuration Options
-file
-    Declaring Maps for SMAR | Configuration Options for SMAR |
-    Configuration Options for SMAR | Configuration Options for SMAR
-flags
-    Configuration for QMGR | Configuration for QMGR | Configuration
-    Options for SMAR | Configuration Options for SMAR | Configuration
-    Options for SMAR | Configuration Options for SMAR | Configuration for
-    SMTP Server | Configuration for SMTP Server | Configuration for SMTP
-    Server | Advanced Configuration for QMGR | Advanced Configuration for
-    QMGR | Advanced Configuration for SMAR | Advanced Configuration for
-    SMTP | Advanced Configuration for SMTP
-generic_lookup
-    Configuration for SMTP Server
-grey_expire
-    Configuration Options for SMAR
-grey_wait
-    Configuration Options for SMAR
-greylisting
-    Configuration Options for SMAR | Configuration for SMTP Server
-group
-    Configuration for MCP | Configuration for MCP
-hash_table_entries
-    Configuration for QMGR
-header_only
-    Configuration for QMGR
-hostname
-    Common Global Configuration
-id  Configuration for SMTP Server
-ident
-    Common Configuration Options
-implicitly_match_detail
-    Configuration Options for SMAR | Configuration Options for SMAR |
-    Configuration for SMTP Server
-initial_connections
-    Configuration for QMGR
-io_timeout
-    Configuration for SMTP Server | Configuration for SMTP Client
-KBytes_written_for_checkpointing
-    Advanced Configuration for QMGR
-key_file
-    Configuration for SMTP Server | Configuration for SMTP Client
-listen_queue
-    Advanced Configuration for SMTP
-listen_socket
-    Configuration for MCP
-lmtp_does_not_imply_relaying
-    Configuration for SMTP Server
-lmtp_max_rcpts_per_transaction
-    Configuration for QMGR
-LMTP_socket
-    Configuration for SMTP Client
-local_domains
-    Configuration Options for SMAR
-local_user_map
-    Configuration Options for SMAR
-localpart
-    Configuration Options for SMAR
-log Common Configuration Options
-log_directory
-    Configuration for QMGR
-log_level
-    Configuration for QMGR | Configuration Options for SMAR |
-    Configuration for SMTP Client
-lookup_rcpt_conf
-    Configuration for QMGR
-lookup_session_conf
-    Configuration for QMGR | Configuration for SMTP Server
-mailertable
-    Configuration Options for SMAR
-main_DB_name
-    Configuration Options for SMAR
-mapname
-    Declaring Maps for SMAR
-maps
-    Declaring Maps for SMAR
-match_type
-    Configuration for SMTP Server
-max_bad_commands_per_session
-    Configuration for SMTP Server
-max_bad_commands_per_transaction
-    Configuration for SMTP Server
-max_cache_entries
-    Configuration for QMGR
-max_commit_delay
-    Configuration for QMGR
-max_connection_rate
-    Configuration for QMGR
-max_connections
-    Configuration for QMGR | Configuration for QMGR
-max_errors_per_DSN
-    Configuration for QMGR
-max_fds
-    Advanced Configuration for QMGR | Advanced Configuration for SMAR
-max_hops
-    Configuration for SMTP Server
-max_invalid_addresses_per_session
-    Configuration for SMTP Server
-max_invalid_addresses_per_transaction
-    Configuration for SMTP Server
-max_message_size
-    Configuration for SMTP Server
-max_nop_commands_between_transactions
-    Configuration for SMTP Server
-max_nop_commands_in_transaction
-    Configuration for SMTP Server
-max_open_TAs
-    Configuration for QMGR
-max_processes
-    Advanced Configuration for MCP
-max_recipients_per_session
-    Configuration for SMTP Server
-max_recipients_per_transaction
-    Configuration for SMTP Server
-max_threads
-    Configuration for SMTP Server | Advanced Configuration for QMGR |
-    Advanced Configuration for SMAR
-max_transactions
-    Configuration for SMTP Server
-max_wait_threads
-    Advanced Configuration for SMTP | Advanced Configuration for SMTP
-merge_delay_max
-    Configuration for QMGR
-MIME_Format
-    Configuration for QMGR
-min_disk_space
-    Configuration for QMGR
-min_processes
-    Advanced Configuration for MCP
-min_threads
-    Advanced Configuration for QMGR | Advanced Configuration for SMAR
-min_wait_threads
-    Advanced Configuration for SMTP | Advanced Configuration for SMTP
-module_timeout
-    Advanced Configuration for SMTP | Advanced Configuration for SMTP
-MTA Installing MeTA1
-MTA_DNS_TIMEOUT
-    Environment Variables used by
-MTA_NAMESERVER
-    More Environment Variables used
-MTA_NO_DNS_TEST
-    Environment Variables used by
-MTA_NO_LOG_TEST
-    Environment Variables used by
-MTA_NO_SLOW_TEST
-    Environment Variables used by
-MTA_PMILTER_REGEX_TEST
-    More Environment Variables used
-MTA_SNKPORT
-    More Environment Variables used
-MTA_SRVPORT
-    More Environment Variables used
-MTA_STOPONERROR
-    Environment Variables used by
-MTA_TEST_DNS_TIMING
-    Environment Variables used by
-MTA_TIMING
-    Environment Variables used by
-MTAC
-    Installing MeTA1
-MTACONFDIR
-    Installing MeTA1
-MTALG
-    Installing MeTA1
-MTALOGDIR
-    Installing MeTA1
-MTAM
-    Installing MeTA1
-MTAQ
-    Installing MeTA1
-MTAQDIR
-    Installing MeTA1
-MTAS
-    Installing MeTA1
-name
-    Configuration Options for SMAR | Configuration Options for SMAR |
-    Configuration Options for SMAR | Configuration Options for SMAR
-nameservers
-    Configuration Options for SMAR
-netmask
-    Configuration Options for SMAR
-OCC_max_entries
-    Configuration for QMGR
-ok_disk_space
-    Configuration for QMGR
-options
-    Common Configuration Options
-page_size
-    Advanced Configuration for QMGR
-pass_fd_socket
-    Configuration for MCP
-pass_id
-    Configuration for MCP
-path
-    Configuration for MCP | Configuration for MCP | Declaring Maps for
-    SMAR | Configuration for SMTP Server
-policy_milter
-    Configuration for SMTP Server
-port
-    Configuration for MCP | Declaring Maps for SMAR | Configuration for
-    SMTP Server
-prdr
-    Configuration for SMTP Server
-preserve_domain
-    Configuration Options for SMAR
-processes
-    Configuration for SMTP Server | Advanced Configuration for SMTP
-protected_recipients
-    Configuration for SMTP Server
-queue_delay_timeout
-    Configuration for QMGR
-queue_return_timeout
-    Configuration for QMGR
-rcpt_conf_lookup_flags
-    Configuration for QMGR
-read_QUIT_reply
-    Advanced Configuration for SMTP
-remote_port
-    Advanced Configuration for SMTP
-remove_unused_logfiles
-    Advanced Configuration for QMGR
-replace_macros
-    Configuration Options for SMAR
-require_EHLO_before_MAIL
-    Configuration for SMTP Server
-requirements_violation
-    Configuration for SMTP Server
-restart_dependencies
-    Configuration for MCP
-retries
-    Configuration Options for SMAR
-retry_max_delay
-    Configuration for QMGR
-retry_min_delay
-    Configuration for QMGR
-reuse_connection
-    Advanced Configuration for QMGR
-scheduler_timeout
-    Advanced Configuration for QMGR
-secondary_DB_name
-    Configuration Options for SMAR
-sender
-    Configuration for SMTP Server
-separate_final_dot_and_QUIT
-    Advanced Configuration for SMTP
-serialize_accept
-    Advanced Configuration for SMTP
-session_features
-    Configuration for SMTP Server
-size
-    Configuration for QMGR
-SMAR_socket
-    Common Global Configuration
-SMAR_timeout
-    Advanced Configuration for QMGR
-smtp_max_rcpts_per_transaction
-    Configuration for QMGR
-SMTPC_socket
-    Common Global Configuration
-SMTPS_socket
-    Common Global Configuration
-socket
-    Configuration for SMTP Server
-soft_bounce
-    Configuration for SMTP Server
-start_action
-    Configuration for MCP
-strict_EHLO_checks
-    Configuration for SMTP Server
-tag Configuration Options for SMAR
-talk_to_myself
-    Advanced Configuration for SMTP
-tests
-    Advanced Configuration for QMGR
-timeout
-    Configuration Options for SMAR | Configuration for SMTP Server
-tls Configuration for SMTP Server | Configuration for SMTP Client |
-    Advanced Configuration for SMTP | Advanced Configuration for SMTP
-trusted_mechanisms
-    Configuration for SMTP Server
-type
-    Declaring Maps for SMAR
-umask
-    Configuration for MCP
-use_connect
-    Advanced Configuration for SMAR
-use_id_in_logfile_name
-    Advanced Configuration for MCP
-use_resolvconf
-    Configuration Options for SMAR
-use_TCP
-    Advanced Configuration for SMAR
-user
-    Configuration for MCP | Configuration for MCP
-wait_for_client
-    Configuration for QMGR
-wait_for_server
-    Configuration for QMGR | Configuration for SMTP Client
-wait_for_smar
-    Advanced Configuration for SMTP
-white_expire
-    Configuration Options for SMAR
-white_timeout
-    Configuration Options for SMAR
-working_directory
-    Advanced Configuration for MCP
-xverp
-    Configuration for SMTP Server
-
-
---------------------------------------------------------------------------
-
-Footnotes
-
-... databases^1.1
-    the term database is used loosely here
-... to^1.2
-    Sorry for the obfuscation, replace (at) with @ and remove the spaces,
-    but not the plus sign.
-... commands^2.1
-    using script(1) or redirecting it to some file.
-... configurations^2.2
-    ``Private database environments on 64-bit machines no longer drop core
-    because of 64-bit address truncation. [11983]'' [Slea]
-...passwd(5)^2.3
-    On some systems the man page is in another section, e.g., 4.
-... comma^3.1
-    A trailing comma is allowed to make writing of lists simpler.
-... addresses^3.2
-    4 is the default value for the compile time option MTA_DNS_MAX_TSKS
-... answer^3.3
-    This needs to be enhanced in a later version, a patch is welcome!
-... blacklist^3.4
-    This option is modelled after dnsblaccess written by Neil Rickert for
-    sendmail 8.
-... times^3.5
-    Compile time option MTA_MAX_DNSBL: currently set to 8.
-... lmtp:^4.1
-    currently internally encoded as 127.0.0.255
-... patch^4.2
-    if the patch fails to apply, make sure you use a working patch(1)
-    program, e.g., most SunOS 5.x versions ship with a broken program
-... errors^4.3
-    See egrep(1) for the correct syntax for word delimiters on your OS.
-... databases^7.1
-    the term database is used loosely here, only DEFEDB is a real
-    database, the others are just ways to store some information and
-    access them in some way.
-... storage^7.2
-    If non-persistent storage is used for these databases mail can of
-    course be lost.
-... addresses^8.1
-    Compile time option SS_MAX_BIND_ADDRS
-... sink^8.2
-    For example, statethreads/examples/smtps2
-
-
---------------------------------------------------------------------------
-
-Claus Assmann 2008-02-04
diff --git a/include/sm/map.h b/include/sm/map.h
index c764fbc..35290bb 100644
--- a/include/sm/map.h
+++ b/include/sm/map.h
@@ -92,6 +92,13 @@ struct sm_map_cursor_S
 
 #define SMPO_INIT_CB	(0x0200|SMPO_PTR) /* init cb function (hash map) */
 
+/* Additional flags for sockmap spools: */
+#define SMPO_MIN_OCONN    (0x0300|SMPO_INT) /* Minimal number of open
+					       connections */
+#define SMPO_MAX_OCONN    (0x0400|SMPO_INT) /* Maximum number of open
+					       connections */
+#define SMPO_IDLE         (0x0500|SMPO_INT) /* Idle timeout */
+
 #define SMPO_TYPE_MASK	0x0000F
 #define SMPO_GET_TYPE(opt)	((opt) & SMPO_TYPE_MASK)
 
diff --git a/include/sm/mapcnf.h b/include/sm/mapcnf.h
index b0a774c..4e6311c 100644
--- a/include/sm/mapcnf.h
+++ b/include/sm/mapcnf.h
@@ -73,6 +73,8 @@ struct mst_socket_S
 	ipv4_T			 mst_socket_ipv4;
 	short			 mst_socket_port;
 	sm_intvl_T		 mst_socket_tmout;
+	uint                     mst_socket_min_oconn;
+	uint                     mst_socket_max_oconn;
 };
 typedef struct mst_socket_S mst_socket_T;
 
diff --git a/include/sm/mapcnfdef.h b/include/sm/mapcnfdef.h
index af4ffbf..75fcd52 100644
--- a/include/sm/mapcnfdef.h
+++ b/include/sm/mapcnfdef.h
@@ -157,6 +157,24 @@ mst_socket_defs[]
 	0, NULL, NULL, NULL, NULL
 	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
 
+{ SM_CONF_DEF_MAGIC, "min_connections",	sm_conf_type_u32,
+	offsetof(mapspec_T, mst_socket.mst_socket_min_oconn),	sizeof(uint),
+	NULL,
+	0, NULL, NULL, NULL, NULL
+	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
+	
+{ SM_CONF_DEF_MAGIC, "max_connections",	sm_conf_type_u32,
+	offsetof(mapspec_T, mst_socket.mst_socket_max_oconn),	sizeof(uint),
+	NULL,
+	0, NULL, NULL, NULL, NULL
+	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
+
+{ SM_CONF_DEF_MAGIC, "timeout",	sm_conf_type_u32,
+	offsetof(mapspec_T, mst_socket.mst_socket_tmout),	sizeof(sm_intvl_T),
+	NULL,
+	0, NULL, NULL, NULL, NULL
+	SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0) },
+
 /* Sentinel */
 { SM_CONF_DEF_MAGIC, NULL, 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL SM_LC_NO_ISSET	SM_LC_SET_MAGIC(0)}
 }
diff --git a/libsmmap/Makefile.am b/libsmmap/Makefile.am
index c270076..1aa7fe5 100644
--- a/libsmmap/Makefile.am
+++ b/libsmmap/Makefile.am
@@ -83,6 +83,7 @@ TESTP=	t-mapr-0 \
 ## TESTC= t-mapipr-0 t-mapdomr-0 t-mapip-0 t-mapdom-0
 TESTC=	t-mm \
 	t-sockmapr-0 \
+        t-sockmapr-1 \
 	t-mapipr-0 \
 	t-mapdomr-0 \
 	t-mapaddrr-0 \
@@ -216,6 +217,12 @@ t_sockmapr_0_LDADD	= $(LDSMMAPSR) $(LDCSTRR) $(LDADDR) $(LDCHK) $(PTHREAD_LIBS)
 t_sockmapr_0_CFLAGS=-DMTA_USE_PTHREADS $(PTHREAD_CFLAGS)
 t_sockmapr_0_LDFLAGS=$(PTHREAD_CFLAGS)
 
+t_sockmapr_1_CC		= $(PTHREAD_CC)
+t_sockmapr_1_SOURCES	= t-sockmap-1.c
+t_sockmapr_1_LDADD	= $(LDSMMAPSR) $(LDCSTRR) $(LDADDR) $(LDCHK) $(PTHREAD_LIBS) $(LDREPL)
+t_sockmapr_1_CFLAGS=-DMTA_USE_PTHREADS $(PTHREAD_CFLAGS)
+t_sockmapr_1_LDFLAGS=$(PTHREAD_CFLAGS)
+
 t_seqr_0_CC		= $(PTHREAD_CC)
 t_seqr_0_SOURCES	= t-seq-0.c
 t_seqr_0_LDADD		= $(LDSMMAPSR) $(LDCSTRR) $(LDADDR) $(LDCHK) $(PTHREAD_LIBS) $(LDREPL)
diff --git a/libsmmap/mapconfopen.c b/libsmmap/mapconfopen.c
index 9f7cbf9..1172220 100644
--- a/libsmmap/mapconfopen.c
+++ b/libsmmap/mapconfopen.c
@@ -99,6 +99,8 @@ sm_mapconfopen(map_decl_P mapdef, sm_maps_P maps, const char *confdir)
 					md_maps->mst_socket.mst_socket_path,
 				SMPO_PORT, md_maps->mst_socket.mst_socket_port,
 				SMPO_IPV4, md_maps->mst_socket.mst_socket_ipv4,
+				SMPO_MIN_OCONN, md_maps->mst_socket.mst_socket_min_oconn,
+				SMPO_MAX_OCONN, md_maps->mst_socket.mst_socket_max_oconn,	  
 				SMPO_END);
 			break;
 
diff --git a/libsmmap/sockmap.c b/libsmmap/sockmap.c
index 0bbb514..2cbc154 100644
--- a/libsmmap/sockmap.c
+++ b/libsmmap/sockmap.c
@@ -61,32 +61,11 @@ sm_sockmap_destroy(sm_map_P map, uint32_t flags)
 	return ret;
 }
 
-/*
-**  SM_SOCKMAP_SETOPT -- set options for map
-**
-**	Parameters:
-**		map -- map
-**		ap -- options
-**
-**	Returns:
-**		usual sm_error code
-*/
-
 static sm_ret_T
-sm_sockmap_setopt(sm_map_P map, va_list ap)
+__sockmap_setopt(sm_sockmap_P db, va_list ap)
 {
-	sm_ret_T ret;
-	uint k, u;
-	sm_sockmap_P db;
-
-	SM_IS_MAP(map);
-	db = (sm_sockmap_P) map->sm_map_db;
-	if (NULL == db)
-		return sm_error_perm(SM_EM_MAP, ENOENT);
-	ret = SM_SUCCESS;
-
 	for (;;) {
-		k = va_arg(ap, uint);
+		uint u, k = va_arg(ap, uint);
 		if (SMPO_END == k)
 			break;
 
@@ -105,12 +84,50 @@ sm_sockmap_setopt(sm_map_P map, va_list ap)
 		  case SMPO_SOCKPATH:
 			db->sockmap_path = va_arg(ap, char *);
 			break;
+		  case SMPO_MIN_OCONN:
+			db->sockmap_min = va_arg(ap, uint);
+			break;
+		  case SMPO_MAX_OCONN:
+			db->sockmap_max = va_arg(ap, uint);
+			break;
+		  case SMPO_IDLE:
+			db->sockmap_idle = va_arg(ap, sm_intvl_T);
+			break;
 		  default:
 			/* silently ignore bogus options? */
 			break;
 		}
 	}
-	return ret;
+	if (db->sockmap_min < 1)
+		db->sockmap_min = 1;
+	if (db->sockmap_max < 1)
+		db->sockmap_max = 1;
+	if (db->sockmap_max < db->sockmap_min)
+		db->sockmap_max = db->sockmap_min;
+	return SM_SUCCESS;
+}
+
+/*
+**  SM_SOCKMAP_SETOPT -- set options for map
+**
+**	Parameters:
+**		map -- map
+**		ap -- options
+**
+**	Returns:
+**		usual sm_error code
+*/
+
+static sm_ret_T
+sm_sockmap_setopt(sm_map_P map, va_list ap)
+{
+	sm_sockmap_P db;
+
+	SM_IS_MAP(map);
+	db = (sm_sockmap_P) map->sm_map_db;
+	if (NULL == db)
+		return sm_error_perm(SM_EM_MAP, ENOENT);
+	return __sockmap_setopt(db, ap);
 }
 
 /*
@@ -226,28 +243,9 @@ sm_sockmap_open(sm_mapc_P mapc, const sm_cstr_P type, uint32_t flags, const char
 	db = map->sm_map_db;
 	SM_REQUIRE(db != NULL);
 	db->sockmap_name = name;
-	for (;;) {
-		k = va_arg(ap, uint);
-		if (SMPO_END == k)
-			break;
-
-		switch (k) {
-		  case SMPO_SOCKPATH:
-			db->sockmap_path = va_arg(ap, char *);
-			break;
-		  case SMPO_PORT:
-			u = va_arg(ap, int);
-			db->sockmap_port = (short) u;
-			break;
-		  case SMPO_IPV4:
-			u = va_arg(ap, ipv4_T);
-			db->sockmap_ipv4 = u;
-			break;
-		  default:
-			/* silently ignore bogus options? */
-			break;
-		}
-	}
+	ret = __sockmap_setopt(db, ap);
+	if (sm_is_err(ret))
+		goto error;
 	ret = sockmap_open(db);
 	if (sm_is_err(ret))
 		goto error;
@@ -344,11 +342,6 @@ sm_sockmap_lookup(sm_map_P map, uint32_t flags, sm_map_key_P key, sm_map_data_P
 
 	ret = sockmap_lookup(db, key, data);
 
-	/* this doesn't look right: violation of abstraction... */
-	if (sm_is_err(ret) && NULL == db->sockmap_fp) {
-		SMMAP_CLR_FL(map, SMMAP_FL_OPEN);
-		SMMAP_SET_FL(map, SMMAP_FL_CLOSED);
-	}
 	return ret;
 }
 
@@ -416,7 +409,7 @@ sm_sockmap_class_create(sm_maps_P maps)
 	if (NULL == htype)
 		goto error;
 
-	ret = sm_mapc_create(maps, htype, SMMAPC_FL_LCK_FULL,
+	ret = sm_mapc_create(maps, htype, 0,
 			sm_sockmap_create,
 			sm_sockmap_open,
 			sm_sockmap_close,
diff --git a/libsmmap/sockmap.h b/libsmmap/sockmap.h
index 07107cd..18f1ca0 100644
--- a/libsmmap/sockmap.h
+++ b/libsmmap/sockmap.h
@@ -22,10 +22,25 @@
 /* arbitrary limit for sanity */
 #define SOCKETMAP_MAXL 1000000
 
+struct sm_sockmap_instance_S
+{
+#if MTA_USE_PTHREADS 
+	pthread_rwlock_t rwlock;
+#endif
+	sm_file_T *fp;
+	uint busy;
+};
+
 typedef struct sm_sockmap_S sm_sockmap_T, *sm_sockmap_P;
 struct sm_sockmap_S
 {
-	sm_file_T	*sockmap_fp;
+#if MTA_USE_PTHREADS 
+	pthread_rwlock_t  sockmap_lock;
+#endif
+	struct sm_sockmap_instance_S *sockmap_inst;
+	sm_intvl_T       sockmap_min;
+	sm_intvl_T       sockmap_max;
+	sm_intvl_T       sockmap_idle;
 	const char	*sockmap_name;
 	const char	*sockmap_path;
 	ipv4_T		 sockmap_ipv4;
diff --git a/libsmmap/sockmapimpl.c b/libsmmap/sockmapimpl.c
index 38ee1a0..78fecba 100644
--- a/libsmmap/sockmapimpl.c
+++ b/libsmmap/sockmapimpl.c
@@ -19,167 +19,177 @@ SM_RCSID("@(#)$Id: sockmapimpl.c,v 1.15 2008/02/10 04:54:39 ca Exp $")
 
 /* --------- socket map basic implementation ------ */
 
-/*
-**  SOCKMAP_FREE -- free socket map context
-**
-**	Parameters:
-**		db -- pointer to socket map
-**
-**	Returns:
-**		usual sm_error code
-*/
+#if MTA_USE_PTHREADS 
+# define SOCKMAP_LOCK_INIT(map) 					\
+	pthread_rwlock_init(&(map)->sockmap_lock, NULL)
+# define SOCKMAP_LOCK_DESTROY(map)			                \
+	pthread_rwlock_destroy(&(map)->sockmap_lock)
+# define SOCKMAP_LOCK(map) do {						\
+		int r = pthread_rwlock_wrlock(&(map)->sockmap_lock);	\
+		if (r != 0)						\
+			return sm_error_perm(SM_EM_MAP, r);		\
+	} while(0)
+# define SOCKMAP_UNLOCK(map) do {					\
+		int r = pthread_rwlock_unlock(&(map)->sockmap_lock);	\
+		if (r != 0)						\
+			return sm_error_perm(SM_EM_MAP, r);		\
+	} while(0)
+# define SOCKMAP_INST_LOCK_INIT(map, i)				\
+	pthread_rwlock_init(&(map)->sockmap_inst[i].rwlock, NULL)
+# define SOCKMAP_INST_LOCK_DESTROY(map, i)			\
+	pthread_rwlock_destroy(&(map)->sockmap_inst[i].rwlock)
+# define SOCKMAP_INST_LOCK(map, i) do {					\
+		int r = pthread_rwlock_wrlock(&(map)->sockmap_inst[i].rwlock); \
+		if (r != 0)						\
+			return sm_error_perm(SM_EM_MAP, r);		\
+	} while(0)
+# define SOCKMAP_INST_UNLOCK(map, i) do {				\
+		int r = pthread_rwlock_unlock(&(map)->sockmap_inst[i].rwlock); \
+		if (r != 0)						\
+			return sm_error_perm(SM_EM_MAP, r);		\
+	} while(0)
+#else
+# define SOCKMAP_LOCK_INIT(map)	            0
+# define SOCKMAP_LOCK_DESTROY(map)	    0
+# define SOCKMAP_LOCK(map)
+# define SOCKMAP_UNLOCK(map)
+# define SOCKMAP_INST_LOCK_INIT(map, i)	    0
+# define SOCKMAP_INST_LOCK_DESTROY(map, i)  0
+# define SOCKMAP_INST_LOCK(map, i)
+# define SOCKMAP_INST_UNLOCK(map, i)
+#endif
 
-sm_ret_T
-sockmap_free(sm_sockmap_P db)
+static sm_ret_T
+sockmap_init_all_instances(sm_sockmap_P db)
 {
-	if (db != NULL)
-		sm_free_size(db, sizeof(*db));
-	return SM_SUCCESS;
-}
-
-/*
-**  SOCKMAP_NEW -- allocate socket map context
-**
-**	Parameters:
-**		pdb -- pointer to pointer to socket map
-**
-**	Returns:
-**		usual sm_error code
-*/
-
-sm_ret_T
-sockmap_new(sm_sockmap_P *pdb)
-{
-	sm_sockmap_P db;
-
-	SM_REQUIRE(pdb != NULL);
-	*pdb = NULL;
-	db = sm_zalloc(sizeof(*db));
-	if (db == NULL)
+	uint i;
+	db->sockmap_inst = sm_zalloc(db->sockmap_max
+				     * sizeof(db->sockmap_inst[0]));
+	if (!db->sockmap_inst)
 		return sm_error_perm(SM_EM_MAP, ENOMEM);
-
-	/* default for socket map timeout */
-	db->sockmap_tmout = 5;
-	*pdb = db;
+	
+	for (i = 0; i < db->sockmap_max; i++)  
+		SOCKMAP_INST_LOCK_INIT(db, i);
 	return SM_SUCCESS;
 }
-
-/*
-**  SOCKMAP_DESTROY -- destroy socket map
-**
-**	Parameters:
-**		pdb -- pointer to pointer to socket map
-**
-**	Returns:
-**		usual sm_error code
-*/
-
-sm_ret_T
-sockmap_destroy(sm_sockmap_P *pdb)
+	
+static sm_ret_T
+sockmap_close_instance(sm_sockmap_P db, uint i)
 {
-	sm_ret_T ret;
-
-	SM_REQUIRE(pdb != NULL);
-	ret = SM_SUCCESS;
-	if (*pdb != NULL)
-	{
-		if ((*pdb)->sockmap_fp != NULL)
-		{
-			ret = sm_io_close((*pdb)->sockmap_fp, SM_IO_CF_NONE);
-			(*pdb)->sockmap_fp = NULL;
-		}
-		sockmap_free(*pdb);
-		*pdb = NULL;
+	sm_ret_T ret = SM_SUCCESS;
+	struct sm_sockmap_instance_S *smp = db->sockmap_inst + i;
+	if (smp->fp) {
+		ret = sm_io_close(smp->fp, SM_IO_CF_NONE);
+		smp->fp = NULL;
+		smp->busy = 0;
 	}
 	return ret;
 }
 
-/*
-**  SOCKMAP_CLOSE -- close socket map
-**
-**	Parameters:
-**		db -- pointer to socket map
-**
-**	Returns:
-**		usual sm_error code
-*/
-
-sm_ret_T
-sockmap_close(sm_sockmap_P db)
-{
-	sm_ret_T ret;
-
-	ret = SM_SUCCESS;
-	if (db != NULL && db->sockmap_fp != NULL)
-	{
-		ret = sm_io_close(db->sockmap_fp, SM_IO_CF_NONE);
-		db->sockmap_fp = NULL;
-	}
-	return ret;
-}
-
-/*
-**  SOCKMAP_OPEN -- open socket map
-**
-**	Parameters:
-**		pdb -- pointer to pointer to socket map
-**
-**	Returns:
-**		usual sm_error code
-*/
-
-sm_ret_T
-sockmap_open(sm_sockmap_P db)
+static sm_ret_T
+sockmap_open_instance(sm_sockmap_P db, uint i)
 {
-	sm_ret_T ret;
+	sm_ret_T ret = SM_SUCCESS;
+	struct sm_sockmap_instance_S *smp = db->sockmap_inst + i;
 	int fd;
 
-	SM_REQUIRE(db != NULL);
-	db->sockmap_fp = NULL;
+	if (smp->fp)
+		return SM_SUCCESS;
+			
 	if (db->sockmap_path != NULL)
-	{
 		ret = unix_client_connect(db->sockmap_path, &fd);
-	}
 	else
-	{
 		ret = net_client_connectipv4(db->sockmap_ipv4,
-				db->sockmap_port, &fd);
-	}
+					     db->sockmap_port, &fd);
 	if (sm_is_err(ret))
 		goto fail;
 	ret = sm_io_open(SmStStdiofd, (void *) &fd, SM_IO_RDWR,
-			&db->sockmap_fp, SM_IO_WHAT_END);
-	if (sm_is_err(ret))
-		goto fail;
-	ret = sm_io_setinfo(db->sockmap_fp, SM_IO_DOUBLE, NULL);
+			 &smp->fp, SM_IO_WHAT_END);
 	if (sm_is_err(ret))
 		goto fail;
-	ret = sm_io_setinfo(db->sockmap_fp, SM_IO_WHAT_TIMEOUT,
-			(void *)&db->sockmap_tmout);
+	ret = sm_io_setinfo(smp->fp, SM_IO_DOUBLE, NULL);
 	if (sm_is_err(ret))
 		goto fail;
+	ret = sm_io_setinfo(smp->fp, SM_IO_WHAT_TIMEOUT,
+			    (void *)&db->sockmap_tmout);
+	if (sm_is_err(ret)) {
+	  fail:
+		sockmap_close_instance(db, i);
+	}
 	return ret;
+}
+
+static sm_ret_T
+sockmap_find_free_instance0(sm_sockmap_P db, uint *rind)
+{
+	int i;
+	int busy_ind = -1;
+	int free_ind = -1;
+	
+	for (i = 0; i < db->sockmap_max; i++) {
+		if (db->sockmap_inst[i].fp == NULL) {
+			if (free_ind == -1)
+				free_ind = i;
+		} else if (!db->sockmap_inst[i].busy) {
+			db->sockmap_inst[i].busy = 1;
+			*rind = i;
+			return SM_SUCCESS;
+		} else if (busy_ind != -1)
+			busy_ind = i;
+	}
+	if (free_ind != -1) {
+		sm_ret_T ret = sockmap_open_instance(db, free_ind);
+		if (!sm_is_error(ret)) {
+			db->sockmap_inst[free_ind].busy = 1;
+			*rind = free_ind;
+		}
+		return ret;
+	}
+	if (busy_ind != -1) {
+		/* Degrading to serialized access */
+		*rind = busy_ind;
+		return SM_SUCCESS;
+	}
+	/* Giving up... */
+	return sm_error_perm(SM_EM_MAP, EAGAIN);
+}
 
-  fail:
-	/* cleanup? */
-	sockmap_close(db);
+static sm_ret_T
+sockmap_find_free_instance(sm_sockmap_P db, uint *rind)
+{
+	sm_ret_T ret;
+	int r;
+	
+	SOCKMAP_LOCK(db);
+	ret = sockmap_find_free_instance0(db, rind);
+	SOCKMAP_UNLOCK(db);
 	return ret;
 }
 
-/*
-**  SOCKMAP_LOOKUP -- lookup a key in SOCKMAP, return data if found
-**
-**	Parameters:
-**		map -- map context
-**		key -- key
-**		data -- data (output)
-**
-**	Returns:
-**		usual sm_error code
-*/
+static sm_ret_T
+sockmap_release_instance(sm_sockmap_P db, uint i)
+{
+	db->sockmap_inst[i].busy = 0;
+	return SM_SUCCESS;
+}
 
-sm_ret_T
-sockmap_lookup(sm_sockmap_P map, sm_str_P key, sm_str_P data)
+/* FIXME: Return code? */
+static void
+sockmap_close_all_instances(sm_sockmap_P db, int destr)
+{
+	uint i;
+
+	if (!db->sockmap_inst)
+		return;
+	for (i = 0; i < db->sockmap_max; i++) {
+		sockmap_close_instance(db, i);
+		if (destr)
+			SOCKMAP_INST_LOCK_DESTROY(db, i);
+	}
+}
+
+static sm_ret_T
+sockmap_instance_lookup(sm_sockmap_P map, uint i, sm_str_P key, sm_str_P data)
 {
 	sm_ret_T ret;
 	uint len, replylen;
@@ -188,18 +198,11 @@ sockmap_lookup(sm_sockmap_P map, sm_str_P key, sm_str_P data)
 	char *value, *status;
 	sm_file_T *fp;
 	char statbuf[16];
-
-	SM_REQUIRE(map != NULL);
-	SM_REQUIRE(key != NULL);
-	SM_REQUIRE(data != NULL);
-
-	fp = map->sockmap_fp;
+	struct sm_sockmap_instance_S *smp = map->sockmap_inst + i;
+	
+	fp = smp->fp;
 	if (fp == NULL)
-	{
-		ret = sockmap_open(map);
-		if (sm_is_err(ret))
-			return ret;
-	}
+		return sm_error_temp(SM_EM_MAP, EINVAL);
 	len = strlen(map->sockmap_name) + 1 + sm_str_getlen(key);
 	SM_ASSERT(len > strlen(map->sockmap_name));
 	SM_ASSERT(len > sm_str_getlen(key));
@@ -282,7 +285,183 @@ sockmap_lookup(sm_sockmap_P map, sm_str_P key, sm_str_P data)
 	return ret;
 
   errcl:
-	sockmap_close(map);
+	sockmap_close_instance(map, i);
+
   error:
 	return ret;
 }
+
+
+/*
+**  SOCKMAP_FREE -- free socket map context
+**
+**	Parameters:
+**		db -- pointer to socket map
+**
+**	Returns:
+**		usual sm_error code
+*/
+
+sm_ret_T
+sockmap_free(sm_sockmap_P db)
+{
+	if (db != NULL) {
+		if (db->sockmap_inst)
+			sm_free(db->sockmap_inst);
+		sm_free_size(db, sizeof(*db));
+	}
+	return SM_SUCCESS;
+}
+
+/*
+**  SOCKMAP_NEW -- allocate socket map context
+**
+**	Parameters:
+**		pdb -- pointer to pointer to socket map
+**
+**	Returns:
+**		usual sm_error code
+*/
+
+sm_ret_T
+sockmap_new(sm_sockmap_P *pdb)
+{
+	sm_sockmap_P db;
+	int rc;
+	
+	SM_REQUIRE(pdb != NULL);
+	*pdb = NULL;
+	db = sm_zalloc(sizeof(*db));
+	if (db == NULL)
+		return sm_error_perm(SM_EM_MAP, ENOMEM);
+	rc = SOCKMAP_LOCK_INIT(db);
+	if (rc) {
+		sm_free(db);
+		return sm_error_perm(SM_EM_MAP, rc);
+	}
+
+        /* default for socket map timeout */
+	db->sockmap_tmout = 5;
+	db->sockmap_min = db->sockmap_max = 1;
+	*pdb = db;
+	return SM_SUCCESS;
+}
+
+/*
+**  SOCKMAP_DESTROY -- destroy socket map
+**
+**	Parameters:
+**		pdb -- pointer to pointer to socket map
+**
+**	Returns:
+**		usual sm_error code
+*/
+
+sm_ret_T
+sockmap_destroy(sm_sockmap_P *pdb)
+{
+	sm_ret_T ret;
+
+	SM_REQUIRE(pdb != NULL);
+	ret = SM_SUCCESS;
+	if (*pdb != NULL) {
+		sockmap_close_all_instances(*pdb, 1);
+		SOCKMAP_LOCK_DESTROY(*pdb);
+		sockmap_free(*pdb);
+		*pdb = NULL;
+	}
+	return ret;
+}
+
+/*
+**  SOCKMAP_CLOSE -- close socket map
+**
+**	Parameters:
+**		db -- pointer to socket map
+**
+**	Returns:
+**		usual sm_error code
+*/
+
+sm_ret_T
+sockmap_close(sm_sockmap_P db)
+{
+	sm_ret_T ret;
+
+	ret = SM_SUCCESS;
+	sockmap_close_all_instances(db, 0);
+	return ret;
+}
+
+/*
+**  SOCKMAP_OPEN -- open socket map
+**
+**	Parameters:
+**		pdb -- pointer to pointer to socket map
+**
+**	Returns:
+**		usual sm_error code
+*/
+
+sm_ret_T
+sockmap_open(sm_sockmap_P db)
+{
+	sm_ret_T ret;
+	uint i, j;
+	
+	SM_REQUIRE(db != NULL);
+	if (!db->sockmap_inst) {
+		ret = sockmap_init_all_instances(db);
+		if (sm_is_error(ret))
+			return ret;
+	}
+
+	for (i = 0, j = 0; i < db->sockmap_max && j < db->sockmap_min; i++) {
+		if (db->sockmap_inst[i].fp == NULL) {
+			ret = sockmap_open_instance(db, i);
+			if (sm_is_error(ret))
+				break;
+		}
+		j++;
+	}
+
+	if (j > 0 && ret)
+		/* Try to continue anyway */
+		ret = SM_SUCCESS;
+
+	if (sm_is_error(ret)) {
+		/* cleanup? */
+		sockmap_close(db);
+	}
+
+	return ret;
+}
+
+/*
+**  SOCKMAP_LOOKUP -- lookup a key in SOCKMAP, return data if found
+**
+**	Parameters:
+**		map -- map context
+**		key -- key
+**		data -- data (output)
+**
+**	Returns:
+**		usual sm_error code
+*/
+
+sm_ret_T
+sockmap_lookup(sm_sockmap_P map, sm_str_P key, sm_str_P data)
+{
+	sm_ret_T ret;
+	uint ninst;
+	
+	ret = sockmap_find_free_instance(map, &ninst);
+	if (sm_is_error(ret))
+		return ret;
+	SOCKMAP_INST_LOCK(map, ninst);
+	ret = sockmap_instance_lookup(map, ninst, key, data);
+	sockmap_release_instance(map, ninst);
+	SOCKMAP_INST_UNLOCK(map, ninst);
+	return ret;
+}
+
diff --git a/libsmmap/t-sockmap-1.c b/libsmmap/t-sockmap-1.c
new file mode 100644
index 0000000..ff17de2
--- /dev/null
+++ b/libsmmap/t-sockmap-1.c
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2004-2006 Sendmail, Inc. and its suppliers.
+ *	All rights reserved.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENSE file which can be found at the top level of
+ * the sendmail distribution.
+ *
+ */
+
+#include "sm/generic.h"
+SM_RCSID("@(#)$Id: t-sockmap-0.c,v 1.10 2008/02/10 06:17:29 ca Exp $")
+
+#include "sm/error.h"
+#include "sm/heap.h"
+#include "sm/memops.h"
+#include "sm/sysexits.h"
+#include "sm/test.h"
+#include "sm/maps.h"
+#include "sm/mapc.h"
+#include "sm/map.h"
+#include "sm/mapclasses.h"
+#include "sm/net.h"
+#include <stdio.h>
+#include "sm/io.h"
+
+int Verbose = 0;
+
+#define MAPC_TYPE	"socket"
+#define MAPC_NAME	"name"
+
+sm_map_P map;
+size_t test_run_count;
+
+static pthread_cond_t signal_cond = PTHREAD_COND_INITIALIZER;
+static pthread_mutex_t signal_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+struct test_tab {
+	const char *key;
+	int (*is_ok)(sm_ret_T, char **);
+	pthread_t thr;
+};
+
+int
+test_success(sm_ret_T ret, char **pret)
+{
+	return sm_is_success(ret);
+}
+
+int
+test_notfound(sm_ret_T ret, char **pret)
+{
+	if (!sm_is_err(ret))
+		*pret = "unexpected successful return";
+	if (SM_MAP_NOTFOUND != ret) {
+		*pret = smerr2txt(ret);
+		return 0;
+	}
+	return 1;
+}
+
+int
+test_err(sm_ret_T ret, char **pret)
+{
+	if (!sm_is_err(ret)) {
+		*pret = "unexpected successful return";
+		return 0;
+	}
+	return 1;
+}
+
+struct test_tab test_tab[] = {
+	{ "bastiaan.bakker@example.com", test_success },
+	{ "wolter.eldering@example.com", test_success },
+	{ "no@example.com", test_notfound },
+	{ "TIMEOUT", test_err },
+	{ "wolter.eldering@example.com", test_success },
+	{ "bastiaan.bakker@example.com", test_success },
+	{ NULL }
+};
+
+#define incr_test_run_count() test_run_count++
+
+void
+decr_test_run_count()
+{
+	if (--test_run_count == 0) {
+		pthread_mutex_lock(&signal_mutex);
+		pthread_cond_signal(&signal_cond);
+		pthread_mutex_unlock(&signal_mutex);
+	}
+}
+
+void *
+test_thr(void *data)
+{
+	const char *arg = (const char*) data;
+	sm_str_P lhs, rhs;
+	sm_ret_T ret;
+	lhs = rhs = NULL;
+
+	incr_test_run_count();
+	if (Verbose)
+		fprintf(stderr, "%s: BEGIN\n", arg);
+	lhs = sm_str_new(NULL, 256, 1024);
+	SM_ASSERT(lhs != NULL);
+
+	rhs = sm_str_new(NULL, 256, 1024);
+	SM_ASSERT(rhs != NULL);
+
+	sm_str_clr(rhs);
+	sm_str_clr(lhs);
+	sm_str_scat(lhs, arg);
+	ret = sm_map_lookup(map, SMMAP_FL_NONE, lhs, rhs);
+	if (Verbose)
+		fprintf(stderr, "%s: FINISHED: %x = %s\n",
+			arg, ret, ret == 0 ? "OK" : smerr2txt(ret));
+  error:
+	SM_STR_FREE(lhs);
+	SM_STR_FREE(rhs);
+	decr_test_run_count();
+	return (void*) ret;
+}
+
+
+static void
+testh(const char *name, const char *path, ipv4_T ipv4, short port)
+{
+	sm_ret_T ret;
+	sm_maps_P maps;
+	sm_cstr_P mtype, mname;
+	int i;
+	
+	maps = NULL;
+	mtype = mname = NULL;
+
+	ret = sm_maps_init(&maps);
+	SM_TEST(maps != NULL);
+	if (maps == NULL)
+		return;
+	SM_TEST(sm_is_success(ret));
+
+	mtype = sm_cstr_scpyn0((const uchar *)MAPC_TYPE, strlen(MAPC_TYPE));
+	SM_TEST_E(mtype != NULL);
+
+	mname = sm_cstr_scpyn0((const uchar *)MAPC_NAME, strlen(MAPC_NAME));
+	SM_TEST_E(mname != NULL);
+
+	ret = sm_sockmap_class_create(maps);
+	SM_TEST(sm_is_success(ret));
+
+	map = NULL;
+	ret = sm_map_open(maps, mname, mtype, 0, name, SMAP_MODE_RDWR, &map,
+			  SMPO_SOCKPATH, path,
+			  SMPO_PORT, port, SMPO_IPV4, ipv4,
+			  SMPO_MIN_OCONN, 1, SMPO_MAX_OCONN, 10,
+//			  SMPO_TMOUT, 3600,
+			  SMPO_END);
+	SM_TEST_E(sm_is_success(ret));
+
+	for (i = 0; test_tab[i].key; i++) 
+		pthread_create(&test_tab[i].thr, NULL, test_thr,
+			       (void*)test_tab[i].key);
+
+	pthread_mutex_lock(&signal_mutex);
+	pthread_cond_wait(&signal_cond, &signal_mutex);
+	pthread_mutex_unlock(&signal_mutex);
+
+	for (i = 0; test_tab[i].key; i++) {
+		void *val;
+		sm_ret_T ret;
+		char *text = NULL; 
+		pthread_join(test_tab[i].thr, &val);
+		ret = val;
+		if (test_tab[i].is_ok(ret, &text) == 0) {
+			fprintf(stderr, "%d: %s: FAIL", i, test_tab[i].key);
+			if (text)
+				fprintf(stderr, " %s", text);
+			fprintf(stderr, "\n");
+		} else
+			fprintf(stderr, "%d: %s: OK\n", i, test_tab[i].key);
+	}
+	
+	ret = sm_map_close(map, 0);
+	SM_TEST(sm_is_success(ret));
+
+	ret = sm_maps_term(maps);
+	SM_TEST(sm_is_success(ret));
+	SM_CSTR_FREE(mtype);
+	SM_CSTR_FREE(mname);
+	return;
+
+  error:
+	sm_maps_term(maps);
+}
+
+#define T_SM_NAME "virtuser"
+#define T_SM_PATH NULL
+#define T_SM_PORT 1289
+#define T_SM_IP 0x7F000001
+
+static sm_ret_T
+usage(const char *prg)
+{
+	sm_io_fprintf(smioerr, "usage: %s [options]\n"
+		"-a ip     IPv4 address [%#x]\n"
+		"-N name   name of map [%s]\n"
+		"-P path   path [%s]\n"
+		"-p port   port [%d]\n"
+		"-v\n"      
+		, prg
+		, T_SM_IP
+		, T_SM_NAME
+		, T_SM_PATH
+		, T_SM_PORT
+		);
+	return EX_USAGE;
+}
+
+int
+main(int argc, char *argv[])
+{
+	char *path, *name, *prg;
+	ipv4_T ipv4;
+	short port;
+	int c;
+
+	prg = argv[0];
+	path = NULL;
+	name = "virtuser";
+	port = 1289;
+	ipv4 = ntohl(0x7F000001);
+	while ((c = getopt(argc, argv, "a:N:P:p:H:s:V")) != -1)
+	{
+		switch (c)
+		{
+		  case 'a':
+			ipv4 = (ipv4_T) atol(optarg);
+			break;
+		  case 'N':
+			name = strdup(optarg);
+			if (name == NULL)
+				return 1;
+			break;
+		  case 'P':
+			path = strdup(optarg);
+			if (path == NULL)
+				return 1;
+			break;
+		  case 'p':
+			port = atoi(optarg);
+			break;
+		  case 'V':
+			Verbose++;
+			break;
+		  default:
+			usage(prg);
+			return EX_USAGE;
+		}
+	}
+	sm_test_begin(argc, argv, "test socket map 0");
+	testh(name, path, ipv4, port);
+	return sm_test_end();
+}
-- 
1.6.0

