From guillaume.melquiond@ens-lyon.fr Fri Feb 24 11:40:28 2006
Received: from localhost (menthe.lip.ens-lyon.fr [140.77.13.88])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k1OJeQjd027113
	for <std-interval@compgeom.poly.edu>; Fri, 24 Feb 2006 11:40:27 -0800
Received: from gmelquio by localhost with local (Exim 4.50)
	id 1FCgpx-00034Q-Em
	for std-interval@compgeom.poly.edu; Fri, 24 Feb 2006 18:34:37 +0100
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
Content-Type: multipart/mixed; boundary="=-Yias1r4aXIVNqE+stHkI"
Date: Fri, 24 Feb 2006 18:34:37 +0100
Message-Id: <1140802477.4657.36.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.2.3 
X-Mailman-Approved-At: Fri, 24 Feb 2006 12:14:19 -0800
Subject: [std-interval] Current draft of the proposal for std::interval
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 24 Feb 2006 19:40:28 -0000


--=-Yias1r4aXIVNqE+stHkI
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Dear subscribers,

First, a bit of history. We (Herv=E9 Br=F6nnimann, Guillaume Melquiond, and
Sylvain Pion) have written a C++ library for interval arithmetic that is
part of the Boost project. This work gave us a better understanding on
how to provide interval arithmetic in C++. So we submitted a proposal
for adding this arithmetic to the C++ Standard Library. We had decided
that the template classes would be simple, and in particular that they
would not be policy-based, contrarily to the Boost library.

This proposal was presented during the Fall'05 meeting of the C++
standardization committee. It was rather well received, but developers
of implementations of the STL were concerned whether there was or not a
sufficient user demand for interval arithmetic.

Anyway, we have decided to submit a revised version of the proposal to
the Spring'06 meeting. Since the first release of our proposal, a lot of
comments have been sent to us and we have tried to take them into
account. This is a draft of our revised proposal. Please note that
interval comparisons have been temporarily left aside from this draft
because we have yet to converge on a syntax.

Among these comments, a major concern was the kind of interval
arithmetic. The current proposal implements an arithmetic that is usable
for doing forward evaluation on the set of real numbers. Some would like
the computations to be on the set of extended real numbers: it would for
example allow <0,inf> * <1,inf> =3D <-inf,inf>. Some would like the
computations to have backward propagation properties: <0,0> / <0,0> =3D
<-inf,inf>. Some would like both forward and backward semantics in order
to do global optimization. And so on.

As long as intervals have finite bounds and do not contain zero, all
these semantics are equivalent. But in presence of infinities and zeroes
(that is as soon as there is an underflow or an overflow on the
floating-point bounds), these various arithmetics produce incompatible
results. And they all have their own use cases. As a consequence, this
is the main point left unsolved.

We are interested in your comments on this draft.

Best regards,

Herv=E9, Guillaume, and Sylvain


--=-Yias1r4aXIVNqE+stHkI
Content-Disposition: attachment; filename=interval.ps.gz
Content-Type: application/x-gzpostscript; name=interval.ps.gz
Content-Transfer-Encoding: base64

H4sICNw1/0MAA2ludGVydmFsLnBzAOz9e5Nmx3WfC/6/P8V7PMczZAyBysu+JSdOBHPfxrRFiIeg
JGoYiolCdwEos7urXd0NAqrBd5/nybduDZC0HB5bjLEoil3vbe/cmevyW5lr/da//99+/fkn9eXN
F1efpE9D9+///Xp7dfn+5vbnp5ffXL9995M//PQ0fFqGy9N68/a72+uvvn5/SiEMp99cvrx+cfnq
tH93dfr85sv3f7y8veLXv71+/+rq56frN++vbr+5fPUpF+HdX19+dfXu56eU7v/+29uXV9yhvntx
9eYl7y03H968vH7z1XLz7c9Pgf8bYzpNxa9vNy8+vL568/64efOeS/z2+vXVu09+c/P68s1p/dXn
/xjD/VvLzauXvPPb3/KO/8z37//y/eWr6xdc6P9++vy711/cvOLTX/2yfek3918t5989v9uvL99e
3X5+/c+O+m+u3vMwfLi/ebnevPbjd92/3/7+l7/+/B+uvvBxfn76yR//+MdPb89TcvXd1acvbl7/
9P47/uTyzcu/uX5zdT+np09uniaIlx9PVvvRry9vL19f8Tb3f/n2+v8YQ7j/5PObD7cvuNLpt1e/
O918eP/2Q1uQ8dOQPo3jz2OfsxN69dX1m1/f3rz4/Or9z0/vr7799O3tjTPb/fv/rbvgp9v1i/en
HMLppX+8vPry9PDmF/704rM73vue/79Y7r64fvPSr3z/2cXnd1ffvviaP35393n32ffLRb17+eEt
//72N3fvby/fvHt1+f6Kj6/fvXp3+vLy1bur02cX37xjIk8xnqZ0ev3hFe983d6ZPx14qzu/9Yo5
evvqw7sS7trv2r1/gcBdv7nzane/D6dn34mnT+L3d5/EU/z++ssr7xM6Hu+fXty8eXH5nve82W+u
3t28+vD++uYNj/mN7/z9D956c/XV6Z1rdmr36J7d4flX+aXfPj+I4w2nNg93z77zyf2X2rO1hwoP
Q/vtbxzQs+8+v/b5og+/jqfLly/bLX77m993ry/f315/e3rx4fYWqTu/uqunerpVYU7vPnxxuvzi
3Sl8GvhPPL16f9c+4G7ff3lze/nq1fmLnYO9/41//tO7q/uLsVS/8JmZg7dXd+dle3/7gVVjTX+B
3H64fPXl1dXLu+7d+8v3H94pLRdPb5+/iwj67Rc3b6+v3t1d/F/Of5x+x5vHry7f/z42lf6k/fNP
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
WmXCOczyP1g20EmRR9ai+zxs1ulJ7y0f+xISc2CHt7Fmt1gPhdknb13ALCmwVVrfuFhn9MyujPJh
MhJPY82d7DbL4ZcjYzeSra8wSJOpGLIL269tkEIdP42i75I1Lq0cQ4QTLL4M3SbTnuTtsz3TtnFP
HqhIOtW6VSdblB9uVyfZPQdd/HLIPQhkwif33eT2u53nejcXeuwO3nw02nevEKXo7UM9tMRVuXlj
PCSkC2aDE/QnJjEJ8nBvdevr3ihHgD6tkMcOipt82Mnd3oRUJrnF5200SzAU98E77I3FcCPGS4nx
5MkWuXNYFmy9zm21LlQCu603/2w3V3l2LAcgrXZcCiuJ3luHuh7Yi+JGfEOXMjRZdL9beDQdgJuZ
Ly4WJIEueiULs26qKFMu+1qao2mwI4iv33Cgdvw6Um28NULEGYkG5ExuP6dt9gxy62xJG0vOVnb2
fRyYdQR9n1s9uNk0WFDwWct74TmsabH72GxyTillM9ldEtoi98yGg5rrNHou5DFFiLttm+X9zYdb
0bIJFykUQsTdTjJ6dG5vBuQoDS35qqx2brYNpOlEx4ZnHJGBFdPYyytkGcyI83WjiGeQqH6xdBfI
Lt/oIiWWzf0ONIN78qdsFwvrluQusUk4xhxT4ubSbjV4xxgrEr8tVU5g039maWU8DMYogWfwWDiB
deTXS1sIoHMjnpXjZEMbo52ye3n00Ne5bwWkizAR/yz72zZOdmkN0t2VJeA2PP6eTddPMt3X+lew
4fBvF/hruMC/bNvn83/8s/s+fvSX+6fF4RSmn6fw82H61972+Vfb9HGW/qfs+nwS+09DHv479n7a
gv41bv6E08Xr6zfP9nPiQ4uyF1dvmLurp1ZTia9+ePX++u2rp5ZK+ak3Gqv51Foq3bf8+nhnyHZM
912+Pv7AlmZXr65ec8uPWpS9ufqqCf/HHdJsRHb17TX3ffP++gcbTx/eXD/rPNbaYf2JFk8h/6ij
0/n98Qetn+xjdXv5sonpX9yuKqdPyhjsgzWe8M7/A3arjgA0xnkT7G3mgwfg9Tw1asURIEUwrwcf
zAWfTP/eK5gMrEDEmOMkVxzosXoLEw6mtBg0bUYxw370XU1Rio+BuCwQSs4lzEHG4bRvOsYJVABy
5xmBSMlydKKNNU+NO8220oR2ABuiM0K/3JIUc5J4ogf3gxADCHzUrxIhyn10ELRurQ+J6X+AzNo1
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
eQvqCOjPvp6z34xVyVitrQUA


--=-Yias1r4aXIVNqE+stHkI--
From hbr@poly.edu Fri Feb 24 15:01:59 2006
Received: from duke.poly.edu (duke.poly.edu [128.238.2.92])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k1ON1xjd027387
	for <std-interval@compgeom.poly.edu>; Fri, 24 Feb 2006 15:01:59 -0800
Received: from [128.238.34.253] (polytope.poly.edu [128.238.34.253])
	by duke.poly.edu (8.13.1/8.13.1) with ESMTP id k1OKu6iB008573;
	Fri, 24 Feb 2006 15:56:06 -0500 (EST)
In-Reply-To: <1140802477.4657.36.camel@localhost>
References: <1140802477.4657.36.camel@localhost>
Mime-Version: 1.0 (Apple Message framework v746.2)
Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
Message-Id: <EDB08A4D-A410-4514-B695-B5D54C5232FA@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Subject: Re: [std-interval] Current draft of the proposal for std::interval
Date: Fri, 24 Feb 2006 15:56:05 -0500
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.746.2)
X-Spam-Checker-Version: SpamAssassin 3.0.1 (2004-10-22) on duke.poly.edu
X-Virus-Scanned: ClamAV version 0.87, clamav-milter version 0.87 on
	duke.poly.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k1ON1xjd027387
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 24 Feb 2006 23:01:59 -0000

Peux tu stp repondre a ton courrier et donner un pdf au lieu d'un  
ps.gz?  C'est plus portable...
Merci.
--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu


On Feb 24, 2006, at 12:34 PM, Guillaume Melquiond wrote:

> Dear subscribers,
>
> First, a bit of history. We (Hervé Brönnimann, Guillaume Melquiond,  
> and
> Sylvain Pion) have written a C++ library for interval arithmetic  
> that is
> part of the Boost project. This work gave us a better understanding on
> how to provide interval arithmetic in C++. So we submitted a proposal
> for adding this arithmetic to the C++ Standard Library. We had decided
> that the template classes would be simple, and in particular that they
> would not be policy-based, contrarily to the Boost library.
>
> This proposal was presented during the Fall'05 meeting of the C++
> standardization committee. It was rather well received, but developers
> of implementations of the STL were concerned whether there was or  
> not a
> sufficient user demand for interval arithmetic.
>
> Anyway, we have decided to submit a revised version of the proposal to
> the Spring'06 meeting. Since the first release of our proposal, a  
> lot of
> comments have been sent to us and we have tried to take them into
> account. This is a draft of our revised proposal. Please note that
> interval comparisons have been temporarily left aside from this draft
> because we have yet to converge on a syntax.
>
> Among these comments, a major concern was the kind of interval
> arithmetic. The current proposal implements an arithmetic that is  
> usable
> for doing forward evaluation on the set of real numbers. Some would  
> like
> the computations to be on the set of extended real numbers: it  
> would for
> example allow <0,inf> * <1,inf> = <-inf,inf>. Some would like the
> computations to have backward propagation properties: <0,0> / <0,0> =
> <-inf,inf>. Some would like both forward and backward semantics in  
> order
> to do global optimization. And so on.
>
> As long as intervals have finite bounds and do not contain zero, all
> these semantics are equivalent. But in presence of infinities and  
> zeroes
> (that is as soon as there is an underflow or an overflow on the
> floating-point bounds), these various arithmetics produce incompatible
> results. And they all have their own use cases. As a consequence, this
> is the main point left unsolved.
>
> We are interested in your comments on this draft.
>
> Best regards,
>
> Hervé, Guillaume, and Sylvain
>
> <interval.ps.gz>
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval


From guillaume.melquiond@ens-lyon.fr Sat Feb 25 05:34:22 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k1PDYJjd028709
	for <std-interval@compgeom.poly.edu>; Sat, 25 Feb 2006 05:34:20 -0800
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 79E5D15B68E
	for <std-interval@compgeom.poly.edu>;
	Sat, 25 Feb 2006 12:28:52 +0100 (CET)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 31307-68 for <std-interval@compgeom.poly.edu>;
	Sat, 25 Feb 2006 12:28:52 +0100 (CET)
Received: from vpn-user-204-67.ens-lyon.fr (vpn-user-204-67.ens-lyon.fr
	[140.77.204.67])	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 3792C15B7A4
	for <std-interval@compgeom.poly.edu>;
	Sat, 25 Feb 2006 12:28:48 +0100 (CET)
Subject: Re: [std-interval] Current draft of the proposal for std::interval
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <1140802477.4657.36.camel@localhost>
References: <1140802477.4657.36.camel@localhost>
Content-Type: multipart/mixed; boundary="=-5AxpH1/SXfDpgSwSgMDC"
Date: Sat, 25 Feb 2006 12:28:36 +0100
Message-Id: <1140866917.7603.2.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-Mailman-Approved-At: Mon, 27 Feb 2006 00:28:54 -0800
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sat, 25 Feb 2006 13:34:22 -0000


--=-5AxpH1/SXfDpgSwSgMDC
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Le vendredi 24 février 2006 à 18:34 +0100, Guillaume Melquiond a écrit :
> This is a draft of our revised proposal.

Here is a PDF version of the draft.

Best regards,

Guillaume

--=-5AxpH1/SXfDpgSwSgMDC
Content-Disposition: attachment; filename=interval.pdf
Content-Type: application/pdf; name=interval.pdf
Content-Transfer-Encoding: base64

JVBERi0xLjQKNSAwIG9iago8PCAvUyAvR29UbyAvRCAoc2VjdGlvbiouMikgPj4KZW5kb2JqCjgg
MCBvYmoKKENvbnRlbnRzKQplbmRvYmoKOSAwIG9iago8PCAvUyAvR29UbyAvRCAoc2VjdGlvbi4x
KSA+PgplbmRvYmoKMTIgMCBvYmoKKEhpc3Rvcnkgb2YgY2hhbmdlcyB0byB0aGlzIGRvY3VtZW50
KQplbmRvYmoKMTMgMCBvYmoKPDwgL1MgL0dvVG8gL0QgKHNlY3Rpb24uMikgPj4KZW5kb2JqCjE2
IDAgb2JqCihNb3RpdmF0aW9uIGFuZCBTY29wZSkKZW5kb2JqCjE3IDAgb2JqCjw8IC9TIC9Hb1Rv
IC9EIChzZWN0aW9uLjMpID4+CmVuZG9iagoyMCAwIG9iagooSW1wYWN0IG9uIHRoZSBTdGFuZGFy
ZCkKZW5kb2JqCjIxIDAgb2JqCjw8IC9TIC9Hb1RvIC9EIChzZWN0aW9uLjQpID4+CmVuZG9iagoy
NCAwIG9iagooRGVzaWduIERlY2lzaW9ucykKZW5kb2JqCjI1IDAgb2JqCjw8IC9TIC9Hb1RvIC9E
IChzZWN0aW9uLjUpID4+CmVuZG9iagoyOCAwIG9iagooUHJvcG9zZWQgVGV4dCBmb3IgdGhlIFN0
YW5kYXJkKQplbmRvYmoKMjkgMCBvYmoKPDwgL1MgL0dvVG8gL0QgKHN1YnNlY3Rpb24uMjYuNikg
Pj4KZW5kb2JqCjMyIDAgb2JqCihJbnRlcnZhbCBudW1iZXJzKQplbmRvYmoKMzMgMCBvYmoKPDwg
L1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24uMjYuNi4xKSA+PgplbmRvYmoKMzYgMCBvYmoKKEhl
YWRlciA8aW50ZXJ2YWw+IHN5bm9wc2lzKQplbmRvYmoKMzcgMCBvYmoKPDwgL1MgL0dvVG8gL0Qg
KHN1YnN1YnNlY3Rpb24uMjYuNi4yKSA+PgplbmRvYmoKNDAgMCBvYmoKKGludGVydmFsIGNsYXNz
IHRlbXBsYXRlKQplbmRvYmoKNDEgMCBvYmoKPDwgL1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24u
MjYuNi4zKSA+PgplbmRvYmoKNDQgMCBvYmoKKGludGVydmFsIG51bWVyaWMgc3BlY2lhbGl6YXRp
b25zKQplbmRvYmoKNDUgMCBvYmoKPDwgL1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24uMjYuNi40
KSA+PgplbmRvYmoKNDggMCBvYmoKKGludGVydmFsIG1lbWJlciBmdW5jdGlvbnMpCmVuZG9iago0
OSAwIG9iago8PCAvUyAvR29UbyAvRCAoc3Vic3Vic2VjdGlvbi4yNi42LjUpID4+CmVuZG9iago1
MiAwIG9iagooaW50ZXJ2YWwgbWVtYmVyIG9wZXJhdG9ycykKZW5kb2JqCjUzIDAgb2JqCjw8IC9T
IC9Hb1RvIC9EIChzdWJzdWJzZWN0aW9uLjI2LjYuNikgPj4KZW5kb2JqCjU2IDAgb2JqCihpbnRl
cnZhbCBub24tbWVtYmVyIG9wZXJhdGlvbnMpCmVuZG9iago1NyAwIG9iago8PCAvUyAvR29UbyAv
RCAoc3Vic3Vic2VjdGlvbi4yNi42LjcpID4+CmVuZG9iago2MCAwIG9iagooaW50ZXJ2YWwgSU8g
b3BlcmF0aW9ucykKZW5kb2JqCjYxIDAgb2JqCjw8IC9TIC9Hb1RvIC9EIChzdWJzdWJzZWN0aW9u
LjI2LjYuOCkgPj4KZW5kb2JqCjY0IDAgb2JqCihpbnRlcnZhbCB2YWx1ZSBvcGVyYXRpb25zKQpl
bmRvYmoKNjUgMCBvYmoKPDwgL1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24uMjYuNi45KSA+Pgpl
bmRvYmoKNjggMCBvYmoKKGludGVydmFsIGFsZ2VicmFpYyBvcGVyYXRpb25zKQplbmRvYmoKNjkg
MCBvYmoKPDwgL1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24uMjYuNi4xMCkgPj4KZW5kb2JqCjcy
IDAgb2JqCihpbnRlcnZhbCBzZXQgb3BlcmF0aW9ucykKZW5kb2JqCjczIDAgb2JqCjw8IC9TIC9H
b1RvIC9EIChzdWJzdWJzZWN0aW9uLjI2LjYuMTEpID4+CmVuZG9iago3NiAwIG9iagooaW50ZXJ2
YWwgc3RhdGljIHZhbHVlIG9wZXJhdGlvbnMpCmVuZG9iago3NyAwIG9iago8PCAvUyAvR29UbyAv
RCAoc2VjdGlvbi41KSA+PgplbmRvYmoKNzkgMCBvYmoKKFBvc3NpYmxlIGV4dGVuc2lvbnMpCmVu
ZG9iago4MCAwIG9iago8PCAvUyAvR29UbyAvRCAoc3Vic2VjdGlvbi41LjEpID4+CmVuZG9iago4
MyAwIG9iagooPGNtYXRoPiBmdW5jdGlvbnMpCmVuZG9iago4NCAwIG9iago8PCAvUyAvR29UbyAv
RCAoc2VjdGlvbi42KSA+PgplbmRvYmoKODcgMCBvYmoKKEV4YW1wbGVzIG9mIHVzYWdlIG9mIHRo
ZSBpbnRlcnZhbCBjbGFzcy4pCmVuZG9iago4OCAwIG9iago8PCAvUyAvR29UbyAvRCAoc3Vic2Vj
dGlvbi42LjEpID4+CmVuZG9iago5MSAwIG9iagooVW5pZGltZW5zaW9uYWwgc29sdmVyKQplbmRv
YmoKOTIgMCBvYmoKPDwgL1MgL0dvVG8gL0QgKHN1YnNlY3Rpb24uNi4yKSA+PgplbmRvYmoKOTUg
MCBvYmoKKE11bHRpLWRpbWVuc2lvbmFsIHNvbHZlcikKZW5kb2JqCjk2IDAgb2JqCjw8IC9TIC9H
b1RvIC9EIChzZWN0aW9uLjcpID4+CmVuZG9iago5OSAwIG9iagooQWNrbm93bGVkZ2VtZW50cykK
ZW5kb2JqCjEwMCAwIG9iago8PCAvUyAvR29UbyAvRCAoc2VjdGlvbiouOCkgPj4KZW5kb2JqCjEw
MyAwIG9iagooUmVmZXJlbmNlcykKZW5kb2JqCjEwNCAwIG9iago8PCAvUyAvR29UbyAvRCBbMTA1
IDAgUiAgL0ZpdCBdID4+CmVuZG9iagoxMDcgMCBvYmogPDwKL0xlbmd0aCAxNjIyICAgICAgCi9G
aWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42uVZ23LbNhB911fwrdQkRHG/dNomzq1RJnHT
2MlMJ84DTcEWJxSpkFRi9+u7IAFLshjbfVDbKB7TJGFgd3H2YLHEPjoe/fhMk0gjIyWPjs8iTgWi
UkSSEcQYFdHx9H38pMrGCRU4Pqx+GieMwMMD+PnlwYPE3ccfjl90YohClIhODnRnSHPG4YkgQ5Tu
JB30cl7X1aJq0qJ/a6v+nk6n/cOkbG39eUxFHLoc1Hk7m9s2z5yyiFHEDL4mO4hpZ7Z/eHzvXv9w
1KblNK299Jf5aZ3WlyurQYYQtLNaMsSIolHCCcJUmk7wczDmhAnSD39UnzApyzKfp2XphfA1BA2I
U2AbB/yM7AScYMyG1AHGXGmnbdX3t2VeFOly7ufwyhaflnlVTq/GrzQRLJBhTG6ooljeVdXRZdGD
nJfeLaBoQI8kiAhMrqlRgwBSIpF0nRPGkJCiR5Bi7KgCvz19TrDAtXW6P+eNU9qpJ9BMvFQVEVDH
ZS+VCIG0U5EIjLCktJP6uAKelG1zNcSAyVS6ERgsMYhyzLZ6RpxohAl0x93/Oo2AC1PIcKAU/NfQ
3uyJs5aQ+HnetBUwprOyOuvv2Swtz22zSeF2lvuWaZWBE8vWvcGaiGmnBm/KBwVUURq/qtp8DLh8
dn/S9goRoK1ncFYtbGcNF9dFES/LCWOMxZP5Is1ab2x5bU2slgIDfvOYDZn1zknSJn5im/zcS3hi
s85VHkOPVg8h+zqETpRSGlb8mOjYrXrrp3Q8NjS2F97QM0eGqv6qtVRhZuIV51auZhxpaViUBMI6
vgEJx4kYDCXlcn5qa/CSoSRG0Avjvb5xY+7Ykyhgn+58SSnEVU62QEUQBBX0fm7Tqa17bxi85g0I
oIQxz4ufxyQGXsclXC1cFi7ggaN5nMJVwPXrgEsFR9Jw7aU0l2W1aNy6kkCkPQI5IbBhagrb1xbM
dABaCOFa47DmbsZ1G1POERVhcFakTYhcdr4o0hYWHKf7Ruh1yE0PuQIKMxejOsTZCnG2W8Qh6tg6
92lUs4Bgmhb5X12oB0cww75FKlPAleAhYNeozHcL7Ny6cO43kWWZBUSx2Rv6djDTW2AW/x7MkIrU
KSRETZ/M7RXM7BaY5Y7DRFUm21D3lKaafrOw8ltgVbuFdfL7NpxCqz3b525HfG2/07tF3KfcSzvA
Y0H2LcHoEBe3cNzsFvG0OLendRpyjHXEjVLfOrjyFnD7NGR36Da2HQghjOxpxnw3zMmOMW/TNtD5
hniiDf5mk2c1cHaVwAe0O9VU8AStylw7SRnDd1rVNPlp4cGwF60tG5/3Em3ESu46toQjw5nZ8OO7
MaFg8ZAjOUWaGb72KZ/BNffOcw6dfeXznRmE3bFkP3ItKdfk+z1cubP3DezNRJrNU7SJP5F7epHC
53o4dQxHkcsmPbebTe4IbdunBJwqCJf/YHWqG88QYCqUckljogeI4L68kaZcbXJu4k6RKAeevi3z
aT7vyRvO55qqABtE7FJg/X9Ief8j+vQU0eF8dhNA6gF8tSzaPLkRQ6Hk9wqeGYyuIQxurC+3wDCM
Pcg+lpU7hf9S2Om5nXdVA4iq0tCY9qUCF5SpYBsC3tgz251w2zKzoczAIAyqcBbaDx49PR4RaMER
rBMcSY0Eh7WezUefRu8/4Gg6wtGLEUbMaBF9gReMiDE0mo/AAnhUPLQUo6PRH1eyEhCWrEl71BX2
eCRg/1D90scYaWFYJCmCJSu2C1PK1a1IF8AR1y4CwQ5gWF9eeDw5uu+LRFVx2dpsVoatGRZxV8np
Cdfk7eVYitj3PsovQiGrrSs37n4oo1XVx+Ky9K+Hf/oaEKGY+La3RwfIBzG1Zh2F7VESHICdndYP
F2ATstPl1VxW84a4qRA2rqanIEtUfLtMduPETxghWRW22sOqnqfh5Wi5cGXBOrfL2jdN/f3lWIj4
sgqz49LXc4rCjQidf5i0aZFb30kaJvnmcF9psiAWwPVIYuUHPKtTYNsgREAWCiT1EJ2HmiKah3Li
QwgYyTiByF2AHnRWD0KnKFIKcoBEuqSObJf+boRucvhmchDc/bq/G+YbsDSYehyrxSxPfaG3bHPw
ZqiiXU391imTLk29SjxdbTPNS+RKmg+bTgHKyxr+rk11bWOEpcOo6qqG2vBVYdAt2L8Bsd7O32Vu
ZHN0cmVhbQplbmRvYmoKMTA1IDAgb2JqIDw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAxMDcgMCBS
Ci9SZXNvdXJjZXMgMTA2IDAgUgovTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQovUGFyZW50IDE1NCAw
IFIKL0Fubm90cyBbIDEyMCAwIFIgMTIxIDAgUiAxMjIgMCBSIDEyMyAwIFIgMTI0IDAgUiAxMjUg
MCBSIDEyNiAwIFIgMTI3IDAgUiAxMzEgMCBSIDEzMiAwIFIgMTMzIDAgUiAxMzQgMCBSIDEzNSAw
IFIgMTM2IDAgUiAxMzcgMCBSIDEzOCAwIFIgMTM5IDAgUiAxNDAgMCBSIDE0MSAwIFIgMTQyIDAg
UiAxNDMgMCBSIDE0NCAwIFIgMTQ1IDAgUiAxNDYgMCBSIDE0NyAwIFIgMTQ4IDAgUiAxNTIgMCBS
IDE1MyAwIFIgXQo+PiBlbmRvYmoKMTIwIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAg
MCAxXS9IL0kvQ1sxIDAgMF0KL1JlY3QgWzg5LjAwMzcgNDM2LjgyNTQgMTI5LjE4MjYgNDQ1Ljgw
MTZdCi9TdWJ0eXBlIC9MaW5rCi9BIDw8IC9TIC9Hb1RvIC9EIChzZWN0aW9uKi4yKSA+Pgo+PiBl
bmRvYmoKMTIxIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1sxIDAg
MF0KL1JlY3QgWzg5LjAwMzcgNDE1Ljk5MzUgMjU4LjQxNjggNDI2Ljg3MjZdCi9TdWJ0eXBlIC9M
aW5rCi9BIDw8IC9TIC9Hb1RvIC9EIChzZWN0aW9uLjEpID4+Cj4+IGVuZG9iagoxMjIgMCBvYmog
PDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbODkuMDAz
NyAzOTcuMDY0NSAxOTguNzMxNSA0MDcuOTQzNl0KL1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dv
VG8gL0QgKHNlY3Rpb24uMikgPj4KPj4gZW5kb2JqCjEyMyAwIG9iaiA8PAovVHlwZSAvQW5ub3QK
L0JvcmRlclswIDAgMV0vSC9JL0NbMSAwIDBdCi9SZWN0IFs4OS4wMDM3IDM3OC4xMzU1IDIwNy41
MDg0IDM4OS4wMTQ2XQovU3VidHlwZSAvTGluawovQSA8PCAvUyAvR29UbyAvRCAoc2VjdGlvbi4z
KSA+Pgo+PiBlbmRvYmoKMTI0IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9I
L0kvQ1sxIDAgMF0KL1JlY3QgWzg5LjAwMzcgMzU5LjIwNjQgMTc3LjA2MjUgMzcwLjA4NTZdCi9T
dWJ0eXBlIC9MaW5rCi9BIDw8IC9TIC9Hb1RvIC9EIChzZWN0aW9uLjQpID4+Cj4+IGVuZG9iagox
MjUgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVj
dCBbODkuMDAzNyAzNDAuMjc3NCAyMzkuNjM3OCAzNTEuMTU2Nl0KL1N1YnR5cGUgL0xpbmsKL0Eg
PDwgL1MgL0dvVG8gL0QgKHNlY3Rpb24uNSkgPj4KPj4gZW5kb2JqCjEyNiAwIG9iaiA8PAovVHlw
ZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMSAwIDBdCi9SZWN0IFsxMDMuOTQ3NyAzMzMu
MjMzOSAxOTYuMzkwMyAzNDIuMDgwNV0KL1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0Qg
KHN1YnNlY3Rpb24uMjYuNikgPj4KPj4gZW5kb2JqCjEyNyAwIG9iaiA8PAovVHlwZSAvQW5ub3QK
L0JvcmRlclswIDAgMV0vSC9JL0NbMSAwIDBdCi9SZWN0IFsxMjYuODYxOCAzMjIuMjEwMiAyODEu
MDAzIDMzMy4xMTQyXQovU3VidHlwZSAvTGluawovQSA8PCAvUyAvR29UbyAvRCAoc3Vic3Vic2Vj
dGlvbi4yNi42LjEpID4+Cj4+IGVuZG9iagoxMzEgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3Jk
ZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbMTI2Ljg2MTggMzEzLjI0MzkgMjYxLjE1NyAz
MjQuMTQ3OF0KL1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24u
MjYuNi4yKSA+Pgo+PiBlbmRvYmoKMTMyIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAg
MCAxXS9IL0kvQ1sxIDAgMF0KL1JlY3QgWzEyNi44NjE4IDMwNC4yNzc1IDI5OC43ODU1IDMxNS4x
ODE0XQovU3VidHlwZSAvTGluawovQSA8PCAvUyAvR29UbyAvRCAoc3Vic3Vic2VjdGlvbi4yNi42
LjMpID4+Cj4+IGVuZG9iagoxMzMgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFd
L0gvSS9DWzEgMCAwXQovUmVjdCBbMTI2Ljg2MTggMjk3LjM2ODQgMjc3LjIwNzEgMzA2LjIxNV0K
L1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24uMjYuNi40KSA+
Pgo+PiBlbmRvYmoKMTM0IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kv
Q1sxIDAgMF0KL1JlY3QgWzEyNi44NjE4IDI4Ni4zNDQ3IDI3Ny4xOTcxIDI5Ny4yNDg3XQovU3Vi
dHlwZSAvTGluawovQSA8PCAvUyAvR29UbyAvRCAoc3Vic3Vic2VjdGlvbi4yNi42LjUpID4+Cj4+
IGVuZG9iagoxMzUgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEg
MCAwXQovUmVjdCBbMTI2Ljg2MTggMjc3LjM3ODMgMjk5Ljg5MTkgMjg4LjI4MjNdCi9TdWJ0eXBl
IC9MaW5rCi9BIDw8IC9TIC9Hb1RvIC9EIChzdWJzdWJzZWN0aW9uLjI2LjYuNikgPj4KPj4gZW5k
b2JqCjEzNiAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMSAwIDBd
Ci9SZWN0IFsxMjYuODYxOCAyNjguNDEyIDI1OS40OTM4IDI3OS4zMTU5XQovU3VidHlwZSAvTGlu
awovQSA8PCAvUyAvR29UbyAvRCAoc3Vic3Vic2VjdGlvbi4yNi42LjcpID4+Cj4+IGVuZG9iagox
MzcgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVj
dCBbMTI2Ljg2MTggMjU5LjQ0NTYgMjcwLjMxMyAyNzAuMzQ5NV0KL1N1YnR5cGUgL0xpbmsKL0Eg
PDwgL1MgL0dvVG8gL0QgKHN1YnN1YnNlY3Rpb24uMjYuNi44KSA+Pgo+PiBlbmRvYmoKMTM4IDAg
b2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1sxIDAgMF0KL1JlY3QgWzEy
Ni44NjE4IDI1MC40NzkyIDI4NS40OTU4IDI2MS4zODMyXQovU3VidHlwZSAvTGluawovQSA8PCAv
UyAvR29UbyAvRCAoc3Vic3Vic2VjdGlvbi4yNi42LjkpID4+Cj4+IGVuZG9iagoxMzkgMCBvYmog
PDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbMTI2Ljg2
MTggMjQxLjUxMjggMjYwLjA1MTUgMjUyLjQxNjhdCi9TdWJ0eXBlIC9MaW5rCi9BIDw8IC9TIC9H
b1RvIC9EIChzdWJzdWJzZWN0aW9uLjI2LjYuMTApID4+Cj4+IGVuZG9iagoxNDAgMCBvYmogPDwK
L1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbMTI2Ljg2MTgg
MjMyLjU0NjUgMjkzLjgzNDMgMjQzLjQ1MDRdCi9TdWJ0eXBlIC9MaW5rCi9BIDw8IC9TIC9Hb1Rv
IC9EIChzdWJzdWJzZWN0aW9uLjI2LjYuMTEpID4+Cj4+IGVuZG9iagoxNDEgMCBvYmogPDwKL1R5
cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbODkuMDAzNyAyMTQu
NjAzOSAxODYuMjc3OCAyMjMuNTgwMV0KL1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0Qg
KHNlY3Rpb24uNSkgPj4KPj4gZW5kb2JqCjE0MiAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRl
clswIDAgMV0vSC9JL0NbMSAwIDBdCi9SZWN0IFsxMDMuOTQ3NyAyMDUuNjU3NCAyMDQuOTY4NCAy
MTQuNTA0MV0KL1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0QgKHN1YnNlY3Rpb24uNS4x
KSA+Pgo+PiBlbmRvYmoKMTQzIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9I
L0kvQ1sxIDAgMF0KL1JlY3QgWzg5LjAwMzcgMTg0LjgwNTYgMjgwLjI1NTEgMTk1LjY4NDddCi9T
dWJ0eXBlIC9MaW5rCi9BIDw8IC9TIC9Hb1RvIC9EIChzZWN0aW9uLjYpID4+Cj4+IGVuZG9iagox
NDQgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVj
dCBbMTAzLjk0NzcgMTc3Ljc2MiAyMTkuMTk0NSAxODYuNjA4N10KL1N1YnR5cGUgL0xpbmsKL0Eg
PDwgL1MgL0dvVG8gL0QgKHN1YnNlY3Rpb24uNi4xKSA+Pgo+PiBlbmRvYmoKMTQ1IDAgb2JqIDw8
Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1sxIDAgMF0KL1JlY3QgWzEwMy45NDc3
IDE2OC42NzYxIDIyOS43MTQ3IDE3Ny42NDIzXQovU3VidHlwZSAvTGluawovQSA8PCAvUyAvR29U
byAvRCAoc3Vic2VjdGlvbi42LjIpID4+Cj4+IGVuZG9iagoxNDYgMCBvYmogPDwKL1R5cGUgL0Fu
bm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbODkuMDAzNyAxNDcuOTQzOCAx
ODguMzAwNSAxNTguODIyOV0KL1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0QgKHNlY3Rp
b24uNykgPj4KPj4gZW5kb2JqCjE0NyAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAg
MV0vSC9JL0NbMSAwIDBdCi9SZWN0IFs4OS4wMDM3IDEzMC45MTc3IDEzNy4yODIyIDEzOS44OTM5
XQovU3VidHlwZSAvTGluawovQSA8PCAvUyAvR29UbyAvRCAoc2VjdGlvbiouOCkgPj4KPj4gZW5k
b2JqCjE0OCAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFd
Ci9SZWN0IFszMzYuOTYwMyA1NS40OTU4IDM4OS43MzczIDY2Ljk1MjldCi9TdWJ0eXBlL0xpbmsv
QTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShoYnJAcG9seS5lZHUpPj4KPj4gZW5kb2JqCjE1MiAw
IG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFsz
NzIuNjQyNCA0NS40OTUzIDUwNi4zMjYzIDU3LjQ4ODNdCi9TdWJ0eXBlL0xpbmsvQTw8L1R5cGUv
QWN0aW9uL1MvVVJJL1VSSShndWlsbGF1bWUubWVscXVpb25kQGVucy1seW9uLmZyKT4+Cj4+IGVu
ZG9iagoxNTMgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAx
XQovUmVjdCBbMjc5LjQ4MDMgMzUuNzIyMSAzOTkuOTY5OSA0Ny40ODc4XQovU3VidHlwZS9MaW5r
L0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoU3lsdmFpbi5QaW9uQHNvcGhpYS5pbnJpYS5mcik+
Pgo+PiBlbmRvYmoKMTA4IDAgb2JqIDw8Ci9EIFsxMDUgMCBSIC9YWVogOTAgNzA4LjA0NDggbnVs
bF0KPj4gZW5kb2JqCjEwOSAwIG9iaiA8PAovRCBbMTA1IDAgUiAvWFlaIDkwIDY4My4xMzgyIG51
bGxdCj4+IGVuZG9iagoxMTkgMCBvYmogPDwKL0QgWzEwNSAwIFIgL1hZWiA5MCA0NTYuNjk4MSBu
dWxsXQo+PiBlbmRvYmoKNiAwIG9iaiA8PAovRCBbMTA1IDAgUiAvWFlaIDkwIDQ1Ni42OTgxIG51
bGxdCj4+IGVuZG9iagoxMDYgMCBvYmogPDwKL0ZvbnQgPDwgL0Y4MSAxMTIgMCBSIC9GODQgMTE1
IDAgUiAvRjg3IDExOCAwIFIgL0Y5MCAxMzAgMCBSIC9GOTcgMTUxIDAgUiA+PgovUHJvY1NldCBb
IC9QREYgL1RleHQgXQo+PiBlbmRvYmoKMTU3IDAgb2JqIDw8Ci9MZW5ndGggMjkyNSAgICAgIAov
RmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeNqtWVuT27YVft9fobdIjYUlCRIk0zQZ203q
TSadabxTP6x3PJQErViTBEOAXqsP/e09BwegKC7ly7QPFInbwbl85wLoxe3V9c9ZughjxmMRLW73
CxEyHqRiIVLOwjQRi9vd3fJmtQ6DIFi+KrVR3XG1jpJgqfb03h6K5kFqahjl3ofS9ezUtq9lY1b3
t7/AZuEiZ7mIBO4VZUzkUbxYw0cUx6Hd63XZbCUtLZvSlEVFjQ+rMFnKTpeqoY63QRL8Pcxi/pcg
WQdhwKEjpKHvcDPaKF2sw5TlHD6Q+tsoSlfrBGT5Te3Kt0EQyR1xlgcjzhIOnylfBHZRuQqXDTwG
HglPBw+wsyzgqeD5Hp5beH6AB7lyTcvPU6nThCWpiB1trzBd7GXlNAsK3VVOBxLF/riVrQHBT7qI
kmVR9VIzK+k6jHKWxHwQNpsI+3y3m5UzBjnzOP9COZ1sW3gOrrsD+hG3Xcqt1paC7f7TZS2EwCjn
eea23qpGm67fArxWSbL0YiEaeXzRhl8m1s7xaux7Boac8TTyxq5lvZEd6XmvOo+1IPpYNg/UgimD
F1TFUfXmhMijdI1Gmc+tBaENeAZqyAksQCkijS6Z8aV1tVnARixLQjEx5H5O8RkLk9DrBpA2Qy0U
LEtF6uagQXt42s9SI92dQsGMZXIWJbGnXDnYPA6Amw0SSR6lX8Ev8UrPRaqChUHkFjjlR9CZJVn0
abS58ObcE0Y5BKyqP8WltlOt7MwRhuLzoFg2rYcKykFRtDdDJ64rwAOcVweXYPBXiZhqPDNFV5pD
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
UApZWLvW4JbYwhLbbe//KcOGT632GJLH/uRnN+/kbKGM1QThHUoMqhSy3F1bzV61B6ghup763v1x
s3eXW4273PphRsVcsCSO8uFiax1D5nhF27vDa2bDBwTkjphwNzBuiE5t+fIBzlnG/qsFvbqVdICD
80BLXe5EmE/KVRpERNoLahiXFThpQ3HM2jlLfKA8O5bvQPGFx+p5dCQzPPnD8nRnaz2wQEYGPF39
dHuFt4PBAtQTLLKYcZFli2199cfV3X2w2F0Fi1+uAsbzLFk8QgNhDFzVV6HIEdGx76muXl/9Y6C1
BmLrEbUX9n/YcJEwcAJrgjxjGQ6mKUujJJsmXAA4wDsNQvvfD4vTFG8CWZZzgsretN9dX1OALCpW
qR7OYxAdGWjouu03w9C72v4zdri2533tXuvV2h5f8B0tf4V4vVfGXP/UdwqjyLtNX1VQjTXvhkhk
LzzXOYtFTFecWKzI4ztbvVfympqsPZUWJ1mdqGsB/EfhTOr8pKj/XAlM5qWZ0QzEgCBMPJAPxmrl
8fGRbTXrjWytOrwqSFiE9TVWSexg6mqGBbAqC1HKyZ2/O1udI8mBjM72Lvu9n9PBOgpzJpL0XA38
Syw+lQ0txNrSGCvdf6A+Aj6u39uInGfXc3/i5TETAvQJ0YeFPCZvirwH/Bc4J40BZW5kc3RyZWFt
CmVuZG9iagoxNTYgMCBvYmogPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDE1NyAwIFIKL1Jlc291
cmNlcyAxNTUgMCBSCi9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCi9QYXJlbnQgMTU0IDAgUgovQW5u
b3RzIFsgMTU5IDAgUiAxNjMgMCBSIDE2NCAwIFIgMTY1IDAgUiAxNjcgMCBSIDE2OCAwIFIgMTcw
IDAgUiAxNzIgMCBSIF0KPj4gZW5kb2JqCjE1OSAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRl
clswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFsxNzQuMzYyNSA2NDIuMTUyIDIwMy40NzMzIDY1
Mi42ODI0XQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0cDovL3d3
dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTg0My5wZGYp
Pj4KPj4gZW5kb2JqCjE2MyAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9J
L0NbMSAwIDBdCi9SZWN0IFsxMjIuNzY2NyAyMTUuMjc3OSAxMzEuMzk4NSAyMjguMDQxOV0KL1N1
YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0QgKEhmb290bm90ZS4xKSA+Pgo+PiBlbmRvYmoK
MTY0IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1sxIDAgMF0KL1Jl
Y3QgWzQ2Ni44ODY0IDIxNS4yNzc5IDQ3NS41MTgyIDIyOC4wNDE5XQovU3VidHlwZSAvTGluawov
QSA8PCAvUyAvR29UbyAvRCAoSGZvb3Rub3RlLjIpID4+Cj4+IGVuZG9iagoxNjUgMCBvYmogPDwK
L1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbNDY5LjE2NDEg
MTMxLjU5MTcgNDc3Ljc5NTkgMTQ0LjM1NThdCi9TdWJ0eXBlIC9MaW5rCi9BIDw8IC9TIC9Hb1Rv
IC9EIChIZm9vdG5vdGUuMykgPj4KPj4gZW5kb2JqCjE2NyAwIG9iaiA8PAovVHlwZSAvQW5ub3QK
L0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFsxMDMuMzUgNzIuMDY3MiA1MTMuOTk2
MyA4Mi43NzQ4XQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoZnRwOi8v
aW50ZXJ2YWwubG91aXNpYW5hLmVkdS9wdWIvaW50ZXJ2YWxfbWF0aC9wYXBlcnMvcGFwZXJzLW9m
LUtlYXJmb3R0L0V1cm9tYXRoX2J1bGxldGluX3N1cnZleV9hcnRpY2xlL3N1cnZleS5wcyk+Pgo+
PiBlbmRvYmoKMTY4IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1sw
IDEgMV0KL1JlY3QgWzg5LjAwMzcgNjEuNTMyNiAxOTIuNTY1MiA3MS44OTU2XQovU3VidHlwZS9M
aW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoZnRwOi8vaW50ZXJ2YWwubG91aXNpYW5hLmVk
dS9wdWIvaW50ZXJ2YWxfbWF0aC9wYXBlcnMvcGFwZXJzLW9mLUtlYXJmb3R0L0V1cm9tYXRoX2J1
bGxldGluX3N1cnZleV9hcnRpY2xlL3N1cnZleS5wcyk+Pgo+PiBlbmRvYmoKMTcwIDAgb2JqIDw8
Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzEyMC4zNjU4
IDUxLjc0NzQgMzE3LjUzMDMgNjMuNTI1MV0KL1N1YnR5cGUvTGluay9BPDwvVHlwZS9BY3Rpb24v
Uy9VUkkvVVJJKGh0dHA6Ly93d3cuY3MudXRlcC5lZHUvaW50ZXJ2YWwtY29tcC9hcHBsLmh0bWwp
Pj4KPj4gZW5kb2JqCjE3MiAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9J
L0NbMCAxIDFdCi9SZWN0IFsxMDMuMzUgNDEuOTYyMyAyODMuMDg4MSA1My43Mzk5XQovU3VidHlw
ZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0cDovL3d3dy5tYXRoLnBpdHQuZWR1
L350aGFsZXMva2VwbGVyOTgvKT4+Cj4+IGVuZG9iagoxNTggMCBvYmogPDwKL0QgWzE1NiAwIFIg
L1hZWiA5MCA3MDguMDQ0OCBudWxsXQo+PiBlbmRvYmoKMTAgMCBvYmogPDwKL0QgWzE1NiAwIFIg
L1hZWiA5MCA2ODMuMTM4MiBudWxsXQo+PiBlbmRvYmoKMTQgMCBvYmogPDwKL0QgWzE1NiAwIFIg
L1hZWiA5MCA0NjUuNjg4OCBudWxsXQo+PiBlbmRvYmoKMTY2IDAgb2JqIDw8Ci9EIFsxNTYgMCBS
IC9YWVogMTA0LjM0NjIgODQuMjk3MiBudWxsXQo+PiBlbmRvYmoKMTY5IDAgb2JqIDw8Ci9EIFsx
NTYgMCBSIC9YWVogMTA0LjM0NjIgNjUuMDQ3NiBudWxsXQo+PiBlbmRvYmoKMTcxIDAgb2JqIDw8
Ci9EIFsxNTYgMCBSIC9YWVogMTA0LjM0NjIgNTUuMjYyNCBudWxsXQo+PiBlbmRvYmoKMTU1IDAg
b2JqIDw8Ci9Gb250IDw8IC9GODcgMTE4IDAgUiAvRjgxIDExMiAwIFIgL0Y5MCAxMzAgMCBSIC9G
MTAxIDE2MiAwIFIgL0Y5NyAxNTEgMCBSID4+Ci9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdCj4+IGVu
ZG9iagoxNzUgMCBvYmogPDwKL0xlbmd0aCAyNDA1ICAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2Rl
Cj4+CnN0cmVhbQp42o1YS5PjthG+76+YW6SyxSEJPteubDl2tjKpPFy1k/jg9QFDQiOUKYImwNFM
fn260Q2K1GjsPVACG+gHGo2vu/mX+3e3H6vkpo7qIi1u7vc3dXxTlCJKyhxe2583Px22+eZlu0vz
eGOd7Fs5tvp/igjafdj+cv93Yi9vdkkZ1SKtPOPnNC23uzyON/cHXr6f+sZp08tOOxapLf33SrWq
ZVpP/0fZb5NZuRyVtN94dXHQVL7WNKp5+TUpCsfP2jrdP7K249Cpo+qdRNPs18zedTQ4aXegUav3
2zTf7EFF75ikrH5ka5uD0Y26tPDSF9/B4irePEirGxo+oUVqtKAcCGVNLoGJ3jgaHMDlNHKG/meb
iQNOheiN7Fm+ov/W9DzifcDI9N0L8YXzZGZzHGB571j/5ziPe1aIx+M3lmRRnYkatpdEdZ4nfnve
rBwN3aZhQ+zG6Vl3Wo7s/U4/jHLUig996jtleewgSEDB7UcIwHM0JlkRpXVdgkNR0bfbZNPAc4RH
wuPgOcDzZ2JdBbKoo1iInDnp3J3q0c/2IkRkZ82rCG9h/8k3vKCn3e/SOI7SskzeOt5PM7+PJuIe
RoPan3QbNi55xgyDGd3Uz9fhbU8+KOfUeDaHYtuELZjB6SNafTWoI7J+fU3p8kBAwnmijc64l0HR
K/GDZ4MIIps9/bsDBinzDcbKjt68YTiw5siSyPES5SGhQo7HUR6Z30csDh54/d5MQYh0VyJCVEWU
5XACdK4HjgJ8Bnjew3PrH7/jeTXHa+qZTrAgPDvQBfbCyLCICB4ND8DGZuSxZPqeaajiEd3DfEce
uwVPw3y3TFf8fmTaJ3he4OngeeK5oBd1/cjvhmm3LPOZn9srQZ8WSZQnVcXeiXhJifdWZEWKa3Zp
DUGcJCm4p46KOMn82ru7u+0uiSGI746DbBjhQgy7gOEhwklyEq+0V1FRpxloqKI0yxJOIHCOOwFO
bg3GP450oKhB+d3tkk2LpAoUAgKLMqNYwkWnswBY3rc2LAyyPmx3RVxu7lbCK/Cnfx2mcStKvEb4
pvBeBRxgTWYkhtf2Eedvk16KaDCiDxLyRwL5hDng4gbcXwQawwky48UEvjPIgtVpXW2+91gAM6gz
TTKCbnwPV1gx62R18NUjLXWmlS9/2maAW2fpugOYAMt8JktTvztcTLs7a8pf7w6XdbCxSaIA2h8t
3Svp2I92vVHOAP6MKF+GzMl5JudshLj1JHUnH7rwymg4yDFE257+v//qq/j5w5X4vsird25dRUgW
OAVYXMH+GmLniF5kwTlFvWyLnG7PZbHxN4NFwEnhL6duPAB0dpYQsCPq+VLhcxynjaY0Dci3BmVa
6HfsEVXRojOgIpm9CaNReW8KCnyk2EE12qtgUZQCCPFp6X40x5X8+hwiV8IVMz5LmcsjiXs8YShI
Ps1RtQDRMtRAH3/8D9MRuWe+o2lVKIwgpJTFdMrF1emgGy6qTmqupJpRh0DRl6jT80HyiSlfRr6B
bgGEVuD2X8a2HxYV2w/gPyoHvhzL0AdZAbUghksGZaWZiEKoYIxV9E6mw2B1TMAx14x+kb82MJrl
gGRABhFXDJxIkx2k/h4O9slf4ev6YR9QYMDVTxKKxpLrBFh1Ooua7zrbeCUM3Ih7ka2C4EwgiOxr
gy6leC1oAsCJ6ptgpo9usnJcuQkqZQypr4m4Nzw7WcYuYmP7iwUW0vQrg9r5KIlxaV+n9u4aZk0D
SAGAREAQaXJNSQ6X+G7Py6C3CFkAXuX5Ba/9C1Et3J1OjvSCUOI9SRWv19HTFGyU9y8APA7mRNOt
mXVpFhLCxU+fd4lTeJXl0qbrScg7nzYU7ssKUEUa5bEgnyyvh0GmJ58EPP+TVqf3b2ByjVUxASR1
e1k29zirmIe8ro/hlBxRdO9G004NYQdOEN0CoWNhTSctszkFByXdtXYhzWLoXOuCy59QTYXqa1xU
Wlh1YTtx/0b7kNdRldehkAqIBZZAdhwB/JQK5oT96r7pJp9nqPSEViEWdbYOOoR3NTrOL4BRYvMP
/Stl2tf7KeIoywTbYHknLZe577keDPXnwLtSXB/+3u7KKhIxACZJxmtY5YTFZenDjJrxsqJ0Cf92
8r0KEw+81B1GpYj2gJXVpDu38+gNFAA9YSR32vA+GE0dK/BBp2GJSpccBp1aNj3eh4moojKr0wt8
8tqLDDKRRXngyqmfYVa16NdcbH7aVlS/FPliS0VGWwLieUtAhKDyTRjQNULAEyZwaAzRNwXsTjVy
sqwXDeBPCrCcmu6CK7fCx7OfhzaHijdYpOAy+ARO82zBGwAcaoCISkS6UUkKCrgv1FTUCaoF8H9y
O7PfjZhpaS0AA2D348RfCWAN72iiMlD4bK/7a7cIvJ6KeBl3v/Htcdd6jjiqqqRcxBKYuA8W6h7r
q0Zh+meKZQvpFfwym0ixAHO92VHGb9Tg5iuVwqX0fcvyRq2cwpXYusYYFdSuvb0oKcKB+3LjfODR
H4Pkd51PEfkGU/IZJO1Fc+5GSKFwKnv7Baj5L/zYI+IsBKW/NPjOZsJxrOOSZjFnUXKBF//NCge/
auqSgAczMJKWqQOXPkDE0HAdOsizDh1cswwdfOfQ8eM3YvgoYQJ+dIO1rEjPX//wSglIWgQYjibp
EwyOPIxSHYmv/rxwgNWFG6fGmdEyj+8QUz4/LgovdGHYRZjI480/jXWdB15vQEVdHkyMUtu32hpU
nhQbqGosS0+orBFJuVmF6A6wkHoDsN1rECEIkefEktZfdpDioDxoSaAvRYDEa+DH6Jb5D6pfNR2e
CjBhNTRUuMW49v2QF0nxjiLpnIFGgXTlpC7Dqkg21nSzhfBKgVX4usQyDTAK9B6ZgY4COZ2mxQlf
Oxqr3kyPBxKiewCHI/dAOOl3TWrIgUw+sCrjSy/PKwfQK5uDYr0PL9djr58kd6FO+W+9v3utufQ5
l5DYB2LVuGoYF/Wh/eI6qCrBDwMkqkXbBzRfGFcloxEMAhrBcHkeTLEXq4/GJz4U9ECfFs3Ea0yv
EAHrEruGA3l9xXt3+++37QqaMJE++whor4dMSP+eAUaLlCVq+nb8Sc1FAg80lG44KgC056PGCcoW
MJBcgWjbTDZ8Emd3oRYId/wqRp8QgMAf3SPKLqJO2O0wddKt/+IN2rjEAL/pdlGEBKmS0ksa11Ec
1+Jml4moTLhzFDj37q/37/4PRHLEUWVuZHN0cmVhbQplbmRvYmoKMTc0IDAgb2JqIDw8Ci9UeXBl
IC9QYWdlCi9Db250ZW50cyAxNzUgMCBSCi9SZXNvdXJjZXMgMTczIDAgUgovTWVkaWFCb3ggWzAg
MCA2MTIgNzkyXQovUGFyZW50IDE1NCAwIFIKL0Fubm90cyBbIDE3NyAwIFIgMTc4IDAgUiBdCj4+
IGVuZG9iagoxNzcgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAg
MSAxXQovUmVjdCBbNDc1LjQ2MDggNTY4LjM0ODcgNTEzLjk5NjMgNTc5LjQ2NjldCi9TdWJ0eXBl
L0xpbmsvQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwOi8vd3d3LXNvcC5pbnJpYS5mci9n
ZW9tZXRyaWNhL3RlYW0vU3lsdmFpbi5QaW9uL2N4eC8pPj4KPj4gZW5kb2JqCjE3OCAwIG9iaiA8
PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFs4OS4wMDM3
IDU1Ni4zOTM1IDM1Mi41MTUxIDU2Ny41MTE4XQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlv
bi9TL1VSSS9VUkkoaHR0cDovL3d3dy1zb3AuaW5yaWEuZnIvZ2VvbWV0cmljYS90ZWFtL1N5bHZh
aW4uUGlvbi9jeHgvKT4+Cj4+IGVuZG9iagoxNzYgMCBvYmogPDwKL0QgWzE3NCAwIFIgL1hZWiA5
MCA3MDguMDQ0OCBudWxsXQo+PiBlbmRvYmoKMTggMCBvYmogPDwKL0QgWzE3NCAwIFIgL1hZWiA5
MCA1NDEuNjk4NyBudWxsXQo+PiBlbmRvYmoKMjIgMCBvYmogPDwKL0QgWzE3NCAwIFIgL1hZWiA5
MCA0MDIuMTc3IG51bGxdCj4+IGVuZG9iagoxNzkgMCBvYmogPDwKL0QgWzE3NCAwIFIgL1hZWiA5
MCAyODAuNDQzNiBudWxsXQo+PiBlbmRvYmoKMTgwIDAgb2JqIDw8Ci9EIFsxNzQgMCBSIC9YWVog
OTAgMTgyLjc0NSBudWxsXQo+PiBlbmRvYmoKMTgxIDAgb2JqIDw8Ci9EIFsxNzQgMCBSIC9YWVog
OTAgODEuMjQwNyBudWxsXQo+PiBlbmRvYmoKMTczIDAgb2JqIDw8Ci9Gb250IDw8IC9GODEgMTEy
IDAgUiAvRjkwIDEzMCAwIFIgL0Y4NyAxMTggMCBSIC9GMTAxIDE2MiAwIFIgPj4KL1Byb2NTZXQg
WyAvUERGIC9UZXh0IF0KPj4gZW5kb2JqCjE4NCAwIG9iaiA8PAovTGVuZ3RoIDMzNTMgICAgICAK
L0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnjarVpZj+S2EX6fX9GPGuy2lrqldZAAdrzJ
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
kolO5MBSiEvmB6FIuIQfLTYUsIzDJPf6Z0SPpsUnv0fRxW5DpmkUFnniPiK+5nkEVVJMhvIaWMZI
YkVJHDyly0iMkvLkR5YMGPwKyZz0a5fd4gAlWQUoKbsKVr84DSPwt2tBse3jV5+2leglkhtAvPzc
g1ROHibB93+9Ez5SOqAslA6oXulcjBhHntPIdJyiApfCXdYXWxeEAB+pu6RrcMJFb7puy6cpWis6
gvtnx7gRiF8yLlFVSsYlqipSYaTgqYAgmaHCK4cEReSLwWe85jjy6WgQKLELazRy0zcZ04AU2pDT
/xSdYdPWNwrs7L/XIZOIejM2xdPdRpHif0cRnP/Be5c/CDritRfPEzDIzuh1LJm4kIqS+py7BmLt
CqyEUNC9XF/yVNK0e4yaRqZwzEWjccwo1k2TMssSVtB+0ir4ur/MIrAAjBywY7aKkxXQvp0x4Emj
+GITcs1gKi6PVFw+vr/Ek0glYQKIIqdwEE/kfplw/w045zYt/inY8lB5CgCj3JnitzWfxvfWeJSs
vL+/IxWRy9+oEgFl5JIdJteBJ+7u6v5x8/ndDf6poHYR/QZThpWKil1zuvn15sef1a69UbsvblSY
VGW2e4KKCkG1493pJoIANaqK1FG6m+9u/uHH2sNg+8Von8pPN1lYFQX/dANxel6WuzwO4SJbXIf0
VQHRf1WoiH4YCdMCZtqDJ684oj9O0/ntmze8wboLOzuDS6v7OtTtjOf15r7K97f7nL7xhfXYbP2p
UaVhniew2rQKC8XqkTqx/AeSUtl1ZW5kc3RyZWFtCmVuZG9iagoxODMgMCBvYmogPDwKL1R5cGUg
L1BhZ2UKL0NvbnRlbnRzIDE4NCAwIFIKL1Jlc291cmNlcyAxODIgMCBSCi9NZWRpYUJveCBbMCAw
IDYxMiA3OTJdCi9QYXJlbnQgMTU0IDAgUgovQW5ub3RzIFsgMTg3IDAgUiAxODkgMCBSIF0KPj4g
ZW5kb2JqCjE4NyAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMSAw
IDBdCi9SZWN0IFsxNDkuOTU1NiAyNjUuNTY0MyAxNTguNTg3NCAyNzguMzI4M10KL1N1YnR5cGUg
L0xpbmsKL0EgPDwgL1MgL0dvVG8gL0QgKEhmb290bm90ZS40KSA+Pgo+PiBlbmRvYmoKMTg5IDAg
b2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzEw
My4zNSA1NS41MyAyOTYuMjgyNCA2Ny4zMDc3XQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlv
bi9TL1VSSS9VUkkoaHR0cDovL2ludGVydmFsLmxvdWlzaWFuYS5lZHUvRjkwL2Y5Ni1wcm8uYXNj
KT4+Cj4+IGVuZG9iagoxODUgMCBvYmogPDwKL0QgWzE4MyAwIFIgL1hZWiA5MCA3MDguMDQ0OCBu
dWxsXQo+PiBlbmRvYmoKMTg2IDAgb2JqIDw8Ci9EIFsxODMgMCBSIC9YWVogOTAgNjI1LjM1IG51
bGxdCj4+IGVuZG9iagoxODggMCBvYmogPDwKL0QgWzE4MyAwIFIgL1hZWiAxMDQuMzQ2MiA2OC44
MzAyIG51bGxdCj4+IGVuZG9iagoxODIgMCBvYmogPDwKL0ZvbnQgPDwgL0Y4MSAxMTIgMCBSIC9G
OTAgMTMwIDAgUiAvRjg3IDExOCAwIFIgL0Y5NyAxNTEgMCBSID4+Ci9Qcm9jU2V0IFsgL1BERiAv
VGV4dCBdCj4+IGVuZG9iagoxOTIgMCBvYmogPDwKL0xlbmd0aCAzNzEzICAgICAgCi9GaWx0ZXIg
L0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42u0a2ZLctvHdX6GnFLesYQCCpxU7ZSdylZKUnchb5aQk
l4szxO4w5pATgtR69fXpRjd4DXa1inO85GGGYAPE0feBr64/+fXXuXxWhEUapc+ub54Vtpk9SzMV
yiwBWPUmeBtF2dUP13+AsdlirIzDIlbFM2EHfTeez10/XO2iRAQ3V1ESdD29VPpQn8qGXt4Kobpy
qNtbeh/uz9r8lmdf7kQ820kZFkkS2emvj7rX8EkmgtrAMy2Ckl7PfXfujJ0fgDd2VQCXVUWLAHDe
QbbZAXSeu7odqMtuhqBDx6CjJoAZyrYq+4rATb3vy/6eut6KRHwjsyx9jp1J8HteDg61PYZbAXHk
8PO7Tz99Tq39PT1fd3vtUPnHpux1D0vIcD2htBN+ibOpwu5TJgFOoPKgtLgCcN+NbaUrgrbjSff1
gT/AneC6MWB0INjdlRRBNzY8/lT+hACeyujWaOqwyEHQRHMEHvXJzieD/VUkgpEnrQc32z0B9jzL
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
4UsUXlqnXELgOzmUb8C6SPi9gB9amh88ai5KwaRGcm0uy0vlPsUUN064Jloc9eEns/6wH10JZiKZ
E7iKbiqNtTluFtEb/cyodVpfZGEaJfkD1ylEsqi4i9hV3AXnSRC0qLgDmEJTbFHMhQPOoCFu7glq
5QfxIZUL7kgI5ykTa/5XFWEEnuhyGLS2pWS7sY76fPVieVkvtmaVFHTtsDNdP9leSVoWlbW9UYnx
4KHW7YEqV7ZC+m+pgfmimTCP4viJjhGWUjDj/8XCScJxJ/Z/8bv7D9afpEjDvCgWNa6pdujxtSHa
yqbcRc3Vhx8fX/jp57Bx2WVt46KosUYtiF8m00cLaFKEWaY2Edgr1DSZsjcf4HFmhVJ3oyGI0y3A
Gc8xl0E3U7DnWFarb11JiN4GEEPMOPgoDDuRyZSa+59hUD6MQT4q3fnA0+B9EQpkkzRUYK+2l5fK
pn5Pl5cKd0MkipyhNgQv6QFhKt42qw8DjyGnRbpbPdCYb/lC//Vryd2P4FRB/JWtxOZhnHpyeQpk
M08X0SxfhIRVrZqIxLw5vA/Hrb6sB0NXhHdKgHvTmkGXlatwJJhD3JijG7oEBgqJr40VwXgmGCMC
WiV1VLXVPjeAzpYvp7XlyWajoNc6ZACaHbKYr0+jpQWS8Ccb/xoGlWaxTO7yBtZNit1N7tjdDbEX
3caebQL021tMoAKfe28N1+6GAUeGJ33au5hkEpFLAhYZliWdyd0z91KcZxn6Q1rtQa5/4cviFKEE
JTaFhaTLVShUCpYxKsI8zwrbZ6PnT15ef/JPCfxKjmVuZHN0cmVhbQplbmRvYmoKMTkxIDAgb2Jq
IDw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAxOTIgMCBSCi9SZXNvdXJjZXMgMTkwIDAgUgovTWVk
aWFCb3ggWzAgMCA2MTIgNzkyXQovUGFyZW50IDE1NCAwIFIKPj4gZW5kb2JqCjE5MyAwIG9iaiA8
PAovRCBbMTkxIDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9iagoxOTAgMCBvYmog
PDwKL0ZvbnQgPDwgL0Y4MSAxMTIgMCBSIC9GODcgMTE4IDAgUiAvRjkwIDEzMCAwIFIgL0YxMDEg
MTYyIDAgUiAvRjExIDE5NiAwIFIgL0Y4NCAxMTUgMCBSIC9GOCAxOTkgMCBSIC9GMTYgMjAyIDAg
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
ZXNvdXJjZXMgMjAzIDAgUgovTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQovUGFyZW50IDE1NCAwIFIK
Pj4gZW5kb2JqCjIwNiAwIG9iaiA8PAovRCBbMjA0IDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxd
Cj4+IGVuZG9iagoyMDMgMCBvYmogPDwKL0ZvbnQgPDwgL0Y4MSAxMTIgMCBSIC9GOTAgMTMwIDAg
UiAvRjg3IDExOCAwIFIgL0Y4IDE5OSAwIFIgL0YxNiAyMDIgMCBSIC9GODQgMTE1IDAgUiAvRjEw
MSAxNjIgMCBSIC9GMTEgMTk2IDAgUiA+PgovUHJvY1NldCBbIC9QREYgL1RleHQgXQo+PiBlbmRv
YmoKMjA5IDAgb2JqIDw8Ci9MZW5ndGggMjc3NiAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+
PgpzdHJlYW0KeNqtGdmS3LbxXV+xj5yKhiLBW0klJbkil1KJlZS34gfLDxgSs8OIJBgeXq1T+ff0
BQ45SzuH8jDLZqMJdDf63rf3L169y8O7wi9Sld7dn+/CMPaLIE3v0izywywBZPW9N066q/RQHY4q
i7zKjOVQn8zIr9PFIKC8k7nogwq8H2s78JI9H364/8Ord0WwPiIq/CSOk7uA9z6E3gS/Cn6v5Yc4
Q3j6fMNhHPtxHhTy9ePFdBs2Iq+0ba+HerQdszVdBntQifco/H4MksAg4sdDmHju8/p8I43B1c+l
6afaOpoR+bk7hnnsByqJAQr9IkkUsVLq+eEyHY5RFHtDvYB2nsa6MvxCuyNQ6qYRlN3Tkcr9OA7S
lY6M6MnpqIZft9LVIOsoHj/CHe2lmZ+nSST7/hpYyFKvFlZLOzcVg2e8QgTqDi+/FLZZKZf65D7R
/GhNa4cnhhujP8m3Z3wmuD/rrUj9KEiKG70NRk9kTEmA++Gjs6gxhE4GWBG4snX3IHSoPgT4vgC4
XvuIsvtyJJhzjBeV+UWkMjrwo1KZqCZb65xJWTPfXlgXuPM4Va9fg7HgqXoY9NNv6m4yAyIE+1vH
68KcxYVHU/1u5w6CrfzfHfLAWyR08k9ytnF7dqj6J34BjbF5A/x4OSx4+OwL5f6TXCTu1ugndBMw
4P9ciCgoPD04AFl+JBU5lEWTCHLvj4cs9r77mpH1OM6yHuWZEHbyxD3YUwcMLkfTlbof50azX8qm
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
ZohHUqjak2ep7TB2RiErL0KNrYIjvGp+XA/ANz4gCpcDCEsT+ZBFwKfjd+RX1siagGsc948LQMio
E49dPhJEOQ8DNwwY/btdk8PbhK6VR3p2HqnHSR2TFd/tMU0i7/0kK9K7pDhwo8klQGsNEE0Hdz5P
qzEBLmx0kjqlX48jxRbRzRXjOilir7C9Gnk9upm7s1M3p5HRiBTwOAJxDulmKs7bpkdjOudierrx
keXfCYtHmMpf6maolsG3FQXuJPKTooC4VfhpEMbE6l8PxzAIAu/PNGjB6sUNau4PhYJqWo6jzZ1L
L/9N+db16M+ju8r9tFCQJAAAA+Z7fS88Q2/c88gPXlQqIeObuTUQ3kRjTX0a9EBx/OrHq/9TvKmq
3RwKLfx1GPvftmWxj/+wu07oeHo16IdB9xdh96WLRNW6inBKg7ZHL2EtK7aR8/VOP5OmfpLG0PWp
yC/CIJbxIih/vQ82Q/v64X8AzW2LLzvT6Rz/jZqhgYZ+nLOBUl/14vf3L/4Fx03j4mVuZHN0cmVh
bQplbmRvYmoKMjA4IDAgb2JqIDw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAyMDkgMCBSCi9SZXNv
dXJjZXMgMjA3IDAgUgovTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQovUGFyZW50IDIxMSAwIFIKPj4g
ZW5kb2JqCjIxMCAwIG9iaiA8PAovRCBbMjA4IDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+
IGVuZG9iagoyNiAwIG9iaiA8PAovRCBbMjA4IDAgUiAvWFlaIDkwIDIxMi45ODY0IG51bGxdCj4+
IGVuZG9iagoyMDcgMCBvYmogPDwKL0ZvbnQgPDwgL0Y4MSAxMTIgMCBSIC9GOTAgMTMwIDAgUiAv
Rjg3IDExOCAwIFIgPj4KL1Byb2NTZXQgWyAvUERGIC9UZXh0IF0KPj4gZW5kb2JqCjIxNCAwIG9i
aiA8PAovTGVuZ3RoIDIyNDQgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja
7VpJc+PGFb7zV+CUIhOzp/fFcbkqccWxfUiVbd3Gc4DIloQKCdAAKFnJn897vYCgREqcxWVNxJoC
CPTytu9tjRErKPxjBbOOSEVdoS0nRjhTLNaTXydv39FiOaHFDxNKhLOquIMXSphzvFhPOJeEOsvy
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
WxQBMP9clNKBYEBn2H0dXf19tT0QySHejscyVjDsuoYiFhNtDOQmZKqjsSykfBzLNlouJCYbrBvV
HVQf1nDOogHc+8SyGllZjhhGK8tgZTG2cmACFEdEYigM2EdvaEdR3oeRJucApsX0L8HKWH3wa4FJ
IjfhXo8yCkpEQ0YBYep9jWFk5wpRSDlyhSSkEigkzPwprAr/7Y0Px/z5bPGPtbgIQmqOFmdc4wHB
GHeG+FVDjG1D2Elxj3EJJci7Z5SeNRoNrs3gUIuG1vYcS++FklapG9g86iLKEdkmj+P31fm5QP3f
WvxcoM4Qv5IC9TujdC5Qf1gb8edzujxDfE6XnxVK53T5h6H05pwuzxCf0+VnhdJLS5cP/0aF4l8M
C17MpSMCpAzQ2fwXp/8D5Fg852VuZHN0cmVhbQplbmRvYmoKMjEzIDAgb2JqIDw8Ci9UeXBlIC9Q
YWdlCi9Db250ZW50cyAyMTQgMCBSCi9SZXNvdXJjZXMgMjEyIDAgUgovTWVkaWFCb3ggWzAgMCA2
MTIgNzkyXQovUGFyZW50IDIxMSAwIFIKPj4gZW5kb2JqCjIxNSAwIG9iaiA8PAovRCBbMjEzIDAg
UiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9iagozMCAwIG9iaiA8PAovRCBbMjEzIDAg
UiAvWFlaIDkwIDUwMy42NDE2IG51bGxdCj4+IGVuZG9iagozNCAwIG9iaiA8PAovRCBbMjEzIDAg
UiAvWFlaIDkwIDMzOS41MDcyIG51bGxdCj4+IGVuZG9iagoyMTYgMCBvYmogPDwKL0QgWzIxMyAw
IFIgL1hZWiA5MCAzMDkuMDA2NSBudWxsXQo+PiBlbmRvYmoKMjE3IDAgb2JqIDw8Ci9EIFsyMTMg
MCBSIC9YWVogOTAgMzExLjAyODkgbnVsbF0KPj4gZW5kb2JqCjIyMSAwIG9iaiA8PAovRCBbMjEz
IDAgUiAvWFlaIDkwIDMwMC4wNyBudWxsXQo+PiBlbmRvYmoKMjIyIDAgb2JqIDw8Ci9EIFsyMTMg
MCBSIC9YWVogOTAgMjg5LjExMTEgbnVsbF0KPj4gZW5kb2JqCjIyMyAwIG9iaiA8PAovRCBbMjEz
IDAgUiAvWFlaIDkwIDI3OC4xNTIyIG51bGxdCj4+IGVuZG9iagoyMjQgMCBvYmogPDwKL0QgWzIx
MyAwIFIgL1hZWiA5MCAyNjcuMTkzMyBudWxsXQo+PiBlbmRvYmoKMjI1IDAgb2JqIDw8Ci9EIFsy
MTMgMCBSIC9YWVogOTAgMjU2LjIzNDQgbnVsbF0KPj4gZW5kb2JqCjIyNiAwIG9iaiA8PAovRCBb
MjEzIDAgUiAvWFlaIDkwIDI0NS4yNzU1IG51bGxdCj4+IGVuZG9iagoyMjcgMCBvYmogPDwKL0Qg
WzIxMyAwIFIgL1hZWiA5MCAyMzQuMzE2NiBudWxsXQo+PiBlbmRvYmoKMjI4IDAgb2JqIDw8Ci9E
IFsyMTMgMCBSIC9YWVogOTAgMjIzLjM1NzcgbnVsbF0KPj4gZW5kb2JqCjIyOSAwIG9iaiA8PAov
RCBbMjEzIDAgUiAvWFlaIDkwIDIxMi4zOTg4IG51bGxdCj4+IGVuZG9iagoyMzAgMCBvYmogPDwK
L0QgWzIxMyAwIFIgL1hZWiA5MCAyMDEuNDM5OSBudWxsXQo+PiBlbmRvYmoKMjMxIDAgb2JqIDw8
Ci9EIFsyMTMgMCBSIC9YWVogOTAgMTkwLjQ4MDkgbnVsbF0KPj4gZW5kb2JqCjIzMiAwIG9iaiA8
PAovRCBbMjEzIDAgUiAvWFlaIDkwIDE3OS41MjIgbnVsbF0KPj4gZW5kb2JqCjIzMyAwIG9iaiA8
PAovRCBbMjEzIDAgUiAvWFlaIDkwIDE2OC41NjMxIG51bGxdCj4+IGVuZG9iagoyMzQgMCBvYmog
PDwKL0QgWzIxMyAwIFIgL1hZWiA5MCAxNTcuNjA0MiBudWxsXQo+PiBlbmRvYmoKMjM1IDAgb2Jq
IDw8Ci9EIFsyMTMgMCBSIC9YWVogOTAgMTQ2LjY0NTMgbnVsbF0KPj4gZW5kb2JqCjIzNiAwIG9i
aiA8PAovRCBbMjEzIDAgUiAvWFlaIDkwIDEzNS42ODY0IG51bGxdCj4+IGVuZG9iagoyMzcgMCBv
YmogPDwKL0QgWzIxMyAwIFIgL1hZWiA5MCAxMjQuNzI3NSBudWxsXQo+PiBlbmRvYmoKMjM4IDAg
b2JqIDw8Ci9EIFsyMTMgMCBSIC9YWVogOTAgMTEzLjc2ODYgbnVsbF0KPj4gZW5kb2JqCjIzOSAw
IG9iaiA8PAovRCBbMjEzIDAgUiAvWFlaIDkwIDEwMi44MDk3IG51bGxdCj4+IGVuZG9iagoyNDAg
MCBvYmogPDwKL0QgWzIxMyAwIFIgL1hZWiA5MCA5MS44NTA4IG51bGxdCj4+IGVuZG9iagoyNDEg
MCBvYmogPDwKL0QgWzIxMyAwIFIgL1hZWiA5MCA4MC44OTE5IG51bGxdCj4+IGVuZG9iagoyNDIg
MCBvYmogPDwKL0QgWzIxMyAwIFIgL1hZWiA5MCA2OS45MzMgbnVsbF0KPj4gZW5kb2JqCjIxMiAw
IG9iaiA8PAovRm9udCA8PCAvRjg3IDExOCAwIFIgL0Y4MSAxMTIgMCBSIC9GOTAgMTMwIDAgUiAv
RjEwMSAxNjIgMCBSIC9GMTEyIDIyMCAwIFIgPj4KL1Byb2NTZXQgWyAvUERGIC9UZXh0IF0KPj4g
ZW5kb2JqCjI0NSAwIG9iaiA8PAovTGVuZ3RoIDE2NDEgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNv
ZGUKPj4Kc3RyZWFtCnja7VnJchs3EL37K3hyDVPhGPuiKDmkKjnkTJ9sV2pEjixWDZeIlBxXKv+e
XgZDcBG1y3KkSxPEAA306wXdwK/DN+9+l0L2QhmdM73haS+qUgrhes7rUnrresPxh+Jdf6C0wR8T
bLFcnfd1KOpqCt1WFPNFfd6XtqhWc/gVxfKo/2n4BzCWKmM8kKU2xsKvKKMNkRiv+oOgixqoKabU
XhBtqKeidjdGKVkc9wdSx2IEfZ5GeRrliyVQh9RbVQxhlFLFj/DP5YNdNpiojwo/e1OcEa2IniMX
ZKLEHia8osuZWNykjzQxEJNQTIiuiMIgBcD8grj0jC3hzxYQJ/1BFDgzShwN7QnREfX8mfUsqWdF
7XOiNfVU1EaVaEswKX8j0US7x0N7VwH2PgAU3pIEA1EKpzcFmHfaM6RPjQyBVtTDOpynfqUlMpTK
EV9VfBRWwH+rCYgkzBoISUCIDIgE04raayASiFM22SuAsCSu2QPEYSUq0W74Le8eJ3qHw0CwWWeu
mxBcZsbcMJNjsh00U2uQI3x5SxSAkDT8J0YajEUa/+o1d/ea+f/Ka47Z7o7v4DXz5+U1yTjmRGeZ
haHYQmROZTKLZ4QMOZXOnUrmTqUzpzLJqTQ71faJNzC6DAIUo2QZpQ97TrzLqrmo+/L5nGwgndek
CNQA4z0jeopsZDINfRXKjlGWd0PZ7YaubZR74tvhsSQkLoguXjoenvhHTRFBF2OgCteKFFnafoUS
R1pRGveSrScUX2jchOi4C0ge4yCybLExYgcbl8cv+XhJwZNj4+x9gnFiItrT4SSdCy/ULx8ETU8n
eYjFX3R6X1C7Itqd6tKoa/F98tM2nZVXH7ZV8xmryPqEi8pJn9KYZ11oPpyTWOKvUa3BtKECg7J2
t1OlyQJPknsdeFKCuRt4WJVmM/DcWZXLGtZXJmaam8xnz01tJ12abdpkGydKzqFpTvSUQ3Obyr1I
yEP7M9GGaE39K2rPic7QC1/qmbEfV0F1BWQcnH10eQf0VFmeMqOe5c3ykYeIYlrdtkjBApdmCpwD
ZxpjDo1XzB8L88c8qp6Twmxbrl+SSuquXJcUamRbrmNxY8yThBetc1VZUlV4zYFvmbW5zNOISSRE
Ih3OQJdZz2hdkfknOfzv7o2PkW18r2WOxUIRBlwkmXnwU2VwL16J6fqHrx/H6D6hOII/AikyW9Cl
bEVdE2qDmBLC7DGr6d5GIIXhy1F7H2Bbgaxc34BLHzfxZCUusqv6SVIrHgcPbnBPkjcN9kn6ajn3
shwl5O7bSYjrN0Vo10RH6YHgWVwfkDFAKblZZf67txxVMMBECDm7hej8lG8QZtW0XvYhcapGNfcs
V2NmFnwvAi/luBjVpQ747qY0cBWGeCpXulLx8Ciy4dqUwUXdLo03FrM+vjbJAl8NoPIFBDBnw+xt
dzFjSmVNO3nUVMslb21VTxdNtcKNamVs8aGZnPTBq8vJbFXTBcglkqr5tLee9qFUHlZAEZyDb8ie
E4+K6LRLNnSbeCyyr6P0NQi17RjoK/90j1r0LJerZ0Usa0pd+e6Z75ubrOLoxnh2H3TGEXnmtq/y
ayHHjLVN48JWbdn0gefGVM9vVj8s/DnRy2x3TVpDSys312C5pSwVqHzz05A9d7wTkqAtXSg+0B9F
nz/lNo5MTNx6G1yQO16QO7KzNpnLjthBj9JutNB+J2JCifA1FQpdGTEmyu1TfiAY0nHhCAJLEFhS
lqHlLQ22dAVCb7ZAvxJdJBvBSNke+GAPWm7aQ15drm2DcVe0qO5wH0ifws61FfXt+IIH7SuU3G44
owtH0M5ZFmTxfRMA++GbbSudmoIyLXyvWHGo583A12+6GZht6X5BWr/5+r+3OOwYWGIAbn1GMky6
xOWATHeJL4jUNbnA+6xQsy37v3fYM6Cj7OkMbUa6W0WXK5HeC9R7fiu54SXT40Oz9WLYLbiWlG1K
saQ3LHySpGxTXSZ0ozk3v4L7XtG5Oku/Nsl6f22VhodpMJtB+4qLKTo5QPRpVnnw++hX9n2WxsVO
Ff5QIEHr7/aggt7KJIas4ibD5Quxqal9ni/pRbekO/SauF5S7Dm+6cTtJFs84GKldt7e52A0HCu9
ba9xFztBpso4zVO/dLr4OWlEsBAHdtxVZ/sDDuSuMstdZXRlCApsR0PRJoMmuSKOfPPb8M1/lAw7
Q2VuZHN0cmVhbQplbmRvYmoKMjQ0IDAgb2JqIDw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAyNDUg
MCBSCi9SZXNvdXJjZXMgMjQzIDAgUgovTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQovUGFyZW50IDIx
MSAwIFIKPj4gZW5kb2JqCjI0NiAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDcwOC4wNDQ4
IG51bGxdCj4+IGVuZG9iagoyNDcgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA2ODMuMTM4
MiBudWxsXQo+PiBlbmRvYmoKMjQ4IDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgNjg0LjEz
NDUgbnVsbF0KPj4gZW5kb2JqCjI0OSAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDY3My4x
NzU2IG51bGxdCj4+IGVuZG9iagoyNTAgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA2NjIu
MjE2NyBudWxsXQo+PiBlbmRvYmoKMjUxIDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgNjUx
LjI1NzggbnVsbF0KPj4gZW5kb2JqCjI1MiAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDY0
MC4yOTg5IG51bGxdCj4+IGVuZG9iagoyNTMgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA2
MjkuMzQgbnVsbF0KPj4gZW5kb2JqCjI1NCAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDYx
OC4zODExIG51bGxdCj4+IGVuZG9iagoyNTUgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA2
MDcuNDIyMSBudWxsXQo+PiBlbmRvYmoKMjU2IDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAg
NTk2LjQ2MzIgbnVsbF0KPj4gZW5kb2JqCjI1NyAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkw
IDU4NS41MDQzIG51bGxdCj4+IGVuZG9iagoyNTggMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5
MCA1NzQuNTQ1NCBudWxsXQo+PiBlbmRvYmoKMjU5IDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVog
OTAgNTYzLjU4NjUgbnVsbF0KPj4gZW5kb2JqCjI2MCAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFla
IDkwIDU1Mi42Mjc2IG51bGxdCj4+IGVuZG9iagoyNjEgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZ
WiA5MCA1NDEuNjY4NyBudWxsXQo+PiBlbmRvYmoKMjYyIDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9Y
WVogOTAgNTMwLjcwOTggbnVsbF0KPj4gZW5kb2JqCjI2MyAwIG9iaiA8PAovRCBbMjQ0IDAgUiAv
WFlaIDkwIDUxOS43NTA5IG51bGxdCj4+IGVuZG9iagoyNjQgMCBvYmogPDwKL0QgWzI0NCAwIFIg
L1hZWiA5MCA1MDguNzkyIG51bGxdCj4+IGVuZG9iagoyNjUgMCBvYmogPDwKL0QgWzI0NCAwIFIg
L1hZWiA5MCA0OTcuODMzMSBudWxsXQo+PiBlbmRvYmoKMjY2IDAgb2JqIDw8Ci9EIFsyNDQgMCBS
IC9YWVogOTAgNDg2Ljg3NDIgbnVsbF0KPj4gZW5kb2JqCjI2NyAwIG9iaiA8PAovRCBbMjQ0IDAg
UiAvWFlaIDkwIDQ3NS45MTUzIG51bGxdCj4+IGVuZG9iagoyNjggMCBvYmogPDwKL0QgWzI0NCAw
IFIgL1hZWiA5MCA0NjQuOTU2NCBudWxsXQo+PiBlbmRvYmoKMjY5IDAgb2JqIDw8Ci9EIFsyNDQg
MCBSIC9YWVogOTAgNDUzLjk5NzUgbnVsbF0KPj4gZW5kb2JqCjI3MCAwIG9iaiA8PAovRCBbMjQ0
IDAgUiAvWFlaIDkwIDQ0My4wMzg2IG51bGxdCj4+IGVuZG9iagoyNzEgMCBvYmogPDwKL0QgWzI0
NCAwIFIgL1hZWiA5MCA0MzIuMDc5NyBudWxsXQo+PiBlbmRvYmoKMjcyIDAgb2JqIDw8Ci9EIFsy
NDQgMCBSIC9YWVogOTAgNDIxLjEyMDggbnVsbF0KPj4gZW5kb2JqCjI3MyAwIG9iaiA8PAovRCBb
MjQ0IDAgUiAvWFlaIDkwIDQxMC4xNjE5IG51bGxdCj4+IGVuZG9iagoyNzQgMCBvYmogPDwKL0Qg
WzI0NCAwIFIgL1hZWiA5MCAzOTkuMjAzIG51bGxdCj4+IGVuZG9iagoyNzUgMCBvYmogPDwKL0Qg
WzI0NCAwIFIgL1hZWiA5MCAzODguMjQ0MSBudWxsXQo+PiBlbmRvYmoKMjc2IDAgb2JqIDw8Ci9E
IFsyNDQgMCBSIC9YWVogOTAgMzc3LjI4NTIgbnVsbF0KPj4gZW5kb2JqCjI3NyAwIG9iaiA8PAov
RCBbMjQ0IDAgUiAvWFlaIDkwIDM2Ni4zMjYzIG51bGxdCj4+IGVuZG9iagoyNzggMCBvYmogPDwK
L0QgWzI0NCAwIFIgL1hZWiA5MCAzNTUuMzY3NCBudWxsXQo+PiBlbmRvYmoKMjc5IDAgb2JqIDw8
Ci9EIFsyNDQgMCBSIC9YWVogOTAgMzQ0LjQwODUgbnVsbF0KPj4gZW5kb2JqCjM4IDAgb2JqIDw8
Ci9EIFsyNDQgMCBSIC9YWVogOTAgMzI0LjE4NDMgbnVsbF0KPj4gZW5kb2JqCjI4MCAwIG9iaiA8
PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDI5NC44MTQ1IG51bGxdCj4+IGVuZG9iagoyODEgMCBvYmog
PDwKL0QgWzI0NCAwIFIgL1hZWiA5MCAyOTYuODM2OSBudWxsXQo+PiBlbmRvYmoKMjgyIDAgb2Jq
IDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgMjg1Ljg3OCBudWxsXQo+PiBlbmRvYmoKMjgzIDAgb2Jq
IDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgMjc0LjkxOTEgbnVsbF0KPj4gZW5kb2JqCjI4NCAwIG9i
aiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDI2My45NjAyIG51bGxdCj4+IGVuZG9iagoyODUgMCBv
YmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCAyNTMuMDAxMyBudWxsXQo+PiBlbmRvYmoKMjg2IDAg
b2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgMjQyLjA0MjQgbnVsbF0KPj4gZW5kb2JqCjI4NyAw
IG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDIzMS4wODM0IG51bGxdCj4+IGVuZG9iagoyODgg
MCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCAyMjAuMTI0NSBudWxsXQo+PiBlbmRvYmoKMjg5
IDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgMjA5LjE2NTYgbnVsbF0KPj4gZW5kb2JqCjI5
MCAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDE5OC4yMDY3IG51bGxdCj4+IGVuZG9iagoy
OTEgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCAxODcuMjQ3OCBudWxsXQo+PiBlbmRvYmoK
MjkyIDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgMTc2LjI4ODkgbnVsbF0KPj4gZW5kb2Jq
CjI5MyAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDE2NS4zMyBudWxsXQo+PiBlbmRvYmoK
Mjk0IDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgMTU0LjM3MTEgbnVsbF0KPj4gZW5kb2Jq
CjI5NSAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDE0My40MTIyIG51bGxdCj4+IGVuZG9i
agoyOTYgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCAxMzIuNDUzMyBudWxsXQo+PiBlbmRv
YmoKMjk3IDAgb2JqIDw8Ci9EIFsyNDQgMCBSIC9YWVogOTAgMTIxLjQ5NDQgbnVsbF0KPj4gZW5k
b2JqCjI5OCAwIG9iaiA8PAovRCBbMjQ0IDAgUiAvWFlaIDkwIDExMC41MzU1IG51bGxdCj4+IGVu
ZG9iagoyOTkgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA5OS41NzY2IG51bGxdCj4+IGVu
ZG9iagozMDAgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA4OC42MTc3IG51bGxdCj4+IGVu
ZG9iagozMDEgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA3Ny42NTg4IG51bGxdCj4+IGVu
ZG9iagozMDIgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA2Ni42OTk5IG51bGxdCj4+IGVu
ZG9iagozMDMgMCBvYmogPDwKL0QgWzI0NCAwIFIgL1hZWiA5MCA1NS43NDEgbnVsbF0KPj4gZW5k
b2JqCjI0MyAwIG9iaiA8PAovRm9udCA8PCAvRjEwMSAxNjIgMCBSIC9GMTEyIDIyMCAwIFIgL0Y4
NyAxMTggMCBSIC9GOTAgMTMwIDAgUiAvRjgxIDExMiAwIFIgPj4KL1Byb2NTZXQgWyAvUERGIC9U
ZXh0IF0KPj4gZW5kb2JqCjMwNiAwIG9iaiA8PAovTGVuZ3RoIDEzNjcgICAgICAKL0ZpbHRlciAv
RmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja7VlLUyM3EL7zK3yiZJIZ9BpJk8ceUpU95Ow9ESpljFmm
ytgubCCb1P73tD7NjDWMMcYYMuxycDPo2f11t7pb+m1wcPxRCNlzaW6M7g0ueoLLVEjbM1alwmam
Nzg/YUU/yRWbEpVsie8x6DVabvE9BJ30E6EzdthPrM3YDG1zjFrNCGOrlWZVu7CS/UDzHPsV9E+e
cWo1ho36iTN+oLOeCaILUFrAmpwNaJQS2BOzBD5+7p8O/ujxXiJ4mmcu310QE/aGIA4znPYzHMYS
XaIljKF2qS1LuijILho5+lYEOX4BQaRIc2EdBFkxL9lVzRzYppYgQj3GUtMvtLaU4MD6UUSHNQfG
U5tJ9imM+hCkLrDYtLkYtQTZbyMEgJaJ0ZIlQzG+MVuzaiVhFHDiFU6ZLbmcgbN7ODkuPF8OWqy9
YVx5gwNfpa9oz5eU3AtPs71wmfbCUf8haACZBq61lm8I5I2nnW2ZpGlDrdGkIqh1BLUKUAtAbdpQ
6wpq9dagNoCaBJjfE7+ysQDLlufxO9R7tuqjd6hfC+rjTkGd8JSrZlD0G+fgnGNNfBMt0OIZFTJK
AYKQzYB+G0Hg8Rec3UGoyygkBcWMg/wBiXbAToRItTF50yK+9hMK9LUEFOyypgxffRelyVzEabKk
ATon8/JDSA9Saf9HO1LjBf2bcTYdXo0XfcHmw9E4tCyW52ExZ3s5rSWNX4tSjFQ5bKtoVa6xpjSp
SVUYnvNouNKpM7kqty5ogyn9lvQb0++afrf0G9JvsmYzrVOZ6XLy9OZqfF2MSubm41ExnBT/DJfF
bLrwWAqesZNJcdbXnKXFdDmm1blfnrQ5ScsJpyU+jTKCUE+lpS29TMZQH/YjLWroUsP7dKnpBb7n
Ue+o6nVcwskcUjLHzn0A4Ozf2uKIx2ckYo4b2DcM22au5eimTHQW2yY6OnYeHs4Pyy786r7NolCw
GGXhgJIr2rwURxlrmvYZJCXTNVzcM92LiNfgB8M4KTtvhcShV6plJ2iSaDqNHZh2kUbr5i5zeOwN
PPYM35OmDwst2U8Vl4or1z5yBfsCusrXwV4uym8vCc8jgaqcvBZIaB3KgWAhwJLoDegY9C/0LvH9
BXRe9QpKAcp4QBajRNNinlaD0Ln70Anz3NqmPMM1fyzfHkFrl5GCr324EmXw/X/Y0i2DrFxoGWb7
MKegIR8sA5P12dsxJqk/E75f0KHwY6gGNxSL6xY2sfWGhWnJS8hchLbNGASJ/46yggloyC9G9Xc4
ioR5euJRgqbyB5KGUjYDZ+XoxlFA9Awt4SjwuZIVndCvxbGXr1i9d2qBVblGyzbW8j6QoLTwLeo6
SFJdZ4VI99l3qLdjBAIsqUgGHcnwctaxD+weN5s4dHXIbAqIvkqNtqkr/OXaOSLVDPQG9Ax0Auoz
Zy1QdujmFZHqvCPthohZb7y+GH0uVD5fdrppQWf1ZpXdToILjeFbVxBoXotlfWrl/SGgQHZZJRsb
Lwm9JdcJmBL3UvaNiaxuxOq7qtIjer2RkwcitdfbWsN5hImbCIj5/phI1uGxS4leVRm6VWVkqDKo
FvkABg+DLc2i0ig2+GFUh68u0MOVcBCvdSX8SDbUzuWN2fZtoGMwbHFp++Scsytg1EfOXp653jgY
u1jG0TsY2zy37RuMdkh7+Utek+0W3NegnkU3Qa97Rj+UoOitnu3UE3Ky71QhWz/xmae+prYvGbv5
mvoaamnELb3P58B3tbyytxy9q6WLajnulFp2embk6uWebnAvdAcELiNM9vMmefzRiej5TvIsdc6Z
XqJNyq0N72qC+6EHvw8O/gPFB7KYZW5kc3RyZWFtCmVuZG9iagozMDUgMCBvYmogPDwKL1R5cGUg
L1BhZ2UKL0NvbnRlbnRzIDMwNiAwIFIKL1Jlc291cmNlcyAzMDQgMCBSCi9NZWRpYUJveCBbMCAw
IDYxMiA3OTJdCi9QYXJlbnQgMjExIDAgUgo+PiBlbmRvYmoKMzA3IDAgb2JqIDw8Ci9EIFszMDUg
MCBSIC9YWVogOTAgNzA4LjA0NDggbnVsbF0KPj4gZW5kb2JqCjMwOCAwIG9iaiA8PAovRCBbMzA1
IDAgUiAvWFlaIDkwIDY4NC4xMzQ1IG51bGxdCj4+IGVuZG9iagozMDkgMCBvYmogPDwKL0QgWzMw
NSAwIFIgL1hZWiA5MCA2NzMuMTc1NiBudWxsXQo+PiBlbmRvYmoKMzEwIDAgb2JqIDw8Ci9EIFsz
MDUgMCBSIC9YWVogOTAgNjYyLjIxNjcgbnVsbF0KPj4gZW5kb2JqCjMxMSAwIG9iaiA8PAovRCBb
MzA1IDAgUiAvWFlaIDkwIDY1MS4yNTc4IG51bGxdCj4+IGVuZG9iagozMTIgMCBvYmogPDwKL0Qg
WzMwNSAwIFIgL1hZWiA5MCA2NDAuMjk4OSBudWxsXQo+PiBlbmRvYmoKMzEzIDAgb2JqIDw8Ci9E
IFszMDUgMCBSIC9YWVogOTAgNjI5LjM0IG51bGxdCj4+IGVuZG9iagozMTQgMCBvYmogPDwKL0Qg
WzMwNSAwIFIgL1hZWiA5MCA2MTguMzgxMSBudWxsXQo+PiBlbmRvYmoKMzE1IDAgb2JqIDw8Ci9E
IFszMDUgMCBSIC9YWVogOTAgNjA3LjQyMjEgbnVsbF0KPj4gZW5kb2JqCjMxNiAwIG9iaiA8PAov
RCBbMzA1IDAgUiAvWFlaIDkwIDU5Ni40NjMyIG51bGxdCj4+IGVuZG9iagozMTcgMCBvYmogPDwK
L0QgWzMwNSAwIFIgL1hZWiA5MCA1ODUuNTA0MyBudWxsXQo+PiBlbmRvYmoKMzE4IDAgb2JqIDw8
Ci9EIFszMDUgMCBSIC9YWVogOTAgNTc0LjU0NTQgbnVsbF0KPj4gZW5kb2JqCjMxOSAwIG9iaiA8
PAovRCBbMzA1IDAgUiAvWFlaIDkwIDU2My41ODY1IG51bGxdCj4+IGVuZG9iagozMjAgMCBvYmog
PDwKL0QgWzMwNSAwIFIgL1hZWiA5MCA1NTIuNjI3NiBudWxsXQo+PiBlbmRvYmoKMzIxIDAgb2Jq
IDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgNTQxLjY2ODcgbnVsbF0KPj4gZW5kb2JqCjMyMiAwIG9i
aiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDUzMC43MDk4IG51bGxdCj4+IGVuZG9iago0MiAwIG9i
aiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDUxMC40ODU2IG51bGxdCj4+IGVuZG9iagozMjMgMCBv
YmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCA0ODEuMTE1OSBudWxsXQo+PiBlbmRvYmoKMzI0IDAg
b2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgNDgzLjEzODIgbnVsbF0KPj4gZW5kb2JqCjMyNSAw
IG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDQ3Mi4xNzkzIG51bGxdCj4+IGVuZG9iagozMjYg
MCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCA0NjEuMjIwNCBudWxsXQo+PiBlbmRvYmoKMzI3
IDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgNDUwLjI2MTUgbnVsbF0KPj4gZW5kb2JqCjMy
OCAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDQzOS4zMDI2IG51bGxdCj4+IGVuZG9iagoz
MjkgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCA0MjguMzQzNyBudWxsXQo+PiBlbmRvYmoK
MzMwIDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgNDE3LjM4NDggbnVsbF0KPj4gZW5kb2Jq
CjMzMSAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDQwNi40MjU5IG51bGxdCj4+IGVuZG9i
agozMzIgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAzOTUuNDY3IG51bGxdCj4+IGVuZG9i
agozMzMgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAzODQuNTA4MSBudWxsXQo+PiBlbmRv
YmoKMzM0IDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMzczLjU0OTIgbnVsbF0KPj4gZW5k
b2JqCjMzNSAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDM2Mi41OTAzIG51bGxdCj4+IGVu
ZG9iagozMzYgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAzNTEuNjMxNCBudWxsXQo+PiBl
bmRvYmoKMzM3IDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMzQwLjY3MjUgbnVsbF0KPj4g
ZW5kb2JqCjMzOCAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDMyOS43MTM2IG51bGxdCj4+
IGVuZG9iagozMzkgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAzMTguNzU0NyBudWxsXQo+
PiBlbmRvYmoKMzQwIDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMzA3Ljc5NTggbnVsbF0K
Pj4gZW5kb2JqCjM0MSAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDI5Ni44MzY5IG51bGxd
Cj4+IGVuZG9iagozNDIgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAyODUuODc4IG51bGxd
Cj4+IGVuZG9iagozNDMgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAyNzQuOTE5MSBudWxs
XQo+PiBlbmRvYmoKMzQ0IDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMjYzLjk2MDIgbnVs
bF0KPj4gZW5kb2JqCjM0NSAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDI1My4wMDEzIG51
bGxdCj4+IGVuZG9iagozNDYgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAyNDIuMDQyNCBu
dWxsXQo+PiBlbmRvYmoKMzQ3IDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMjMxLjA4MzQg
bnVsbF0KPj4gZW5kb2JqCjM0OCAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDIyMC4xMjQ1
IG51bGxdCj4+IGVuZG9iagozNDkgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAyMDkuMTY1
NiBudWxsXQo+PiBlbmRvYmoKMzUwIDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMTk4LjIw
NjcgbnVsbF0KPj4gZW5kb2JqCjM1MSAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDE4Ny4y
NDc4IG51bGxdCj4+IGVuZG9iagozNTIgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAxNzYu
Mjg4OSBudWxsXQo+PiBlbmRvYmoKMzUzIDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMTY1
LjMzIG51bGxdCj4+IGVuZG9iagozNTQgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAxNTQu
MzcxMSBudWxsXQo+PiBlbmRvYmoKMzU1IDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAgMTQz
LjQxMjIgbnVsbF0KPj4gZW5kb2JqCjM1NiAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkwIDEz
Mi40NTMzIG51bGxdCj4+IGVuZG9iagozNTcgMCBvYmogPDwKL0QgWzMwNSAwIFIgL1hZWiA5MCAx
MjEuNDk0NCBudWxsXQo+PiBlbmRvYmoKMzU4IDAgb2JqIDw8Ci9EIFszMDUgMCBSIC9YWVogOTAg
MTEwLjUzNTUgbnVsbF0KPj4gZW5kb2JqCjM1OSAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkw
IDk5LjU3NjYgbnVsbF0KPj4gZW5kb2JqCjM2MCAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkw
IDg4LjYxNzcgbnVsbF0KPj4gZW5kb2JqCjM2MSAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkw
IDc3LjY1ODggbnVsbF0KPj4gZW5kb2JqCjM2MiAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkw
IDY2LjY5OTkgbnVsbF0KPj4gZW5kb2JqCjM2MyAwIG9iaiA8PAovRCBbMzA1IDAgUiAvWFlaIDkw
IDU1Ljc0MSBudWxsXQo+PiBlbmRvYmoKMzA0IDAgb2JqIDw8Ci9Gb250IDw8IC9GMTEyIDIyMCAw
IFIgL0YxMDEgMTYyIDAgUiAvRjg3IDExOCAwIFIgL0Y5MCAxMzAgMCBSIC9GODEgMTEyIDAgUiA+
PgovUHJvY1NldCBbIC9QREYgL1RleHQgXQo+PiBlbmRvYmoKMzY2IDAgb2JqIDw8Ci9MZW5ndGgg
MTE0MSAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeNrtWktv2zgQvudX6FSw
2bXC4VPqtj0s0B727J6yxcJp3NaAGxuJ0weK/vcOP0qy5FfkVyJscpnQFDWc+eYjORrm7/7J2Vsi
lWRp7pxJ+h+TXKaZkZQ4r1Py1iX9y3Mxe97LtRiyVOIL2lPIMXoGaFdjMunES/5jxOvnPW8z8YF/
+DCWJY/NnLhBO0hJYsR/tLiCnOG9IdrXkF/RM0CbVSglg3LSJC5ZeyYmkLeQF5BjSNahSLIJ7/v/
JD2Zaudt0iOZ5jbL4dRPPCJKnTKm+YhVZ3lQncugmtsXkGP0wEeNQbqwbFZaSc6Lc/xQePAe8q9o
Bc+lMpc355pC8y00V7OwHKGHsSOjxIvSVi111nw/4E7iB+QU8RiifQkZ2x9ZI8UuGdyKE0a3uCdO
OAxTGRMQzy2CauGwgXEWqqz4D3IG+QNPp+VTMlnhqUwlRyjhCKQ5+Qx2jsCPK1g45xPCzD1f0R6U
rCKvxL/SSoSSG4RGobzp/3Z6jS30kpEFMSeg5FVFSY9oMjE/IHafqzCboNMznKcPaJafk3MlbYaR
MM/YMm3CK6RUYarLu2wq91kVxpL14k/uY3Pn6j3Uu9bq4zIt1VsKYXRYVMHszXhE77/D+/k+p4GT
CjYV7bjsyRUPrprbIPdcoz0HUEUAXQmgXvawAWBcmQaPyx3yU7X5bF7K3lMnSEAwSdd8MDUfNrPD
+wY76A52HBw75uMdtNl9g9sGwZ1OSOXDtu8Bnbc4JzHKgxBK43jmF5/hxehadVR1d0WMYPQcC13D
AmdXdSYDC4rZglvNQs8G3J1GGNoEFecWMjNNKlxUk5UEHMdIDhHiL3BoWrnlw0kaiB1RYIKVZ4vf
RI3AnOq8tQsmtEhhXJGTRay/QQ4hr9eY4zZFJwRvJXtamXJbw2R6OFN6K6AZ1UjQnkJyDVPyGlN4
zb2GlWH3yMGAasXUN4N6xjwpFwY5LV7xe7JcDNbvf74WtrTIVjoJCR8Af0DVq9KJAIxbF3y3BMw6
ypHLugRMtTVNl7b3QW3uSdmvjBe9xwDMLow5fQJmNTBn9wzM8sG4VSEhnM4vY+66WEIobbyJWdq7
OCrUG5zdMUVoU1BoF4EytZlHQNf293iGLe3vKz5wdkv8+O0Ah435nW4mLWY1Zx91WDjZ3+aMaWSi
2y70Mji6FhxzR/L9fwpOlRVPl+YY1OaelNUWxZ8GvafgdHflnD4Fp7vBOetUcMKnmG6mAzfIJGbI
JAZlu177DuWaI98PoJQUP34/15AZI+LDCNm6UnSo6Bu3WNH/Va8RpYr2SIHu5y7Fra6VtauOtLxk
sV4uXLKMa1v9Yn3uWLcvWj3Q7Yu0e9Qjn65lOn8ts0+Zuyv3NQfyYeuLnN3m3faG55GU6jvmWqtz
2KhN36qdKLA3p9/n6Lqvqvt+Nh6pHC8PUYlfe5mzmWv5A5To99pSj1q7f0AQdyvq0x6MPm7t9nBQ
3tM1wDGgPHubUZKnuVMu/BsZ5SY13vqkp7M0s0YDX6Iw9ORN/+Q3nAJkPGVuZHN0cmVhbQplbmRv
YmoKMzY1IDAgb2JqIDw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAzNjYgMCBSCi9SZXNvdXJjZXMg
MzY0IDAgUgovTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQovUGFyZW50IDIxMSAwIFIKPj4gZW5kb2Jq
CjM2NyAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9i
agozNjggMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA2ODQuMTM0NSBudWxsXQo+PiBlbmRv
YmoKMzY5IDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNjczLjE3NTYgbnVsbF0KPj4gZW5k
b2JqCjM3MCAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDY2Mi4yMTY3IG51bGxdCj4+IGVu
ZG9iagozNzEgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA2NTEuMjU3OCBudWxsXQo+PiBl
bmRvYmoKMzcyIDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNjQwLjI5ODkgbnVsbF0KPj4g
ZW5kb2JqCjM3MyAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDYyOS4zNCBudWxsXQo+PiBl
bmRvYmoKMzc0IDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNjE4LjM4MTEgbnVsbF0KPj4g
ZW5kb2JqCjM3NSAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDYwNy40MjIxIG51bGxdCj4+
IGVuZG9iagozNzYgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA1OTYuNDYzMiBudWxsXQo+
PiBlbmRvYmoKMzc3IDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNTg1LjUwNDMgbnVsbF0K
Pj4gZW5kb2JqCjM3OCAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDU3NC41NDU0IG51bGxd
Cj4+IGVuZG9iagozNzkgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA1NjMuNTg2NSBudWxs
XQo+PiBlbmRvYmoKMzgwIDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNTUyLjYyNzYgbnVs
bF0KPj4gZW5kb2JqCjM4MSAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDU0MS42Njg3IG51
bGxdCj4+IGVuZG9iagozODIgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA1MzAuNzA5OCBu
dWxsXQo+PiBlbmRvYmoKMzgzIDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNTE5Ljc1MDkg
bnVsbF0KPj4gZW5kb2JqCjM4NCAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDUwOC43OTIg
bnVsbF0KPj4gZW5kb2JqCjM4NSAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDQ5Ny44MzMx
IG51bGxdCj4+IGVuZG9iagozODYgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA0ODYuODc0
MiBudWxsXQo+PiBlbmRvYmoKMzg3IDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNDc1Ljkx
NTMgbnVsbF0KPj4gZW5kb2JqCjM4OCAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDQ2NC45
NTY0IG51bGxdCj4+IGVuZG9iagozODkgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA0NTMu
OTk3NSBudWxsXQo+PiBlbmRvYmoKMzkwIDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgNDQz
LjAzODYgbnVsbF0KPj4gZW5kb2JqCjM5MSAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDQz
Mi4wNzk3IG51bGxdCj4+IGVuZG9iagozOTIgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA0
MjEuMTIwOCBudWxsXQo+PiBlbmRvYmoKMzkzIDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVogOTAg
NDEwLjE2MTkgbnVsbF0KPj4gZW5kb2JqCjM5NCAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkw
IDM5OS4yMDMgbnVsbF0KPj4gZW5kb2JqCjM5NSAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFlaIDkw
IDM4OC4yNDQxIG51bGxdCj4+IGVuZG9iagozOTYgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5
MCAzNzcuMjg1MiBudWxsXQo+PiBlbmRvYmoKMzk3IDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9YWVog
OTAgMzY2LjMyNjMgbnVsbF0KPj4gZW5kb2JqCjM5OCAwIG9iaiA8PAovRCBbMzY1IDAgUiAvWFla
IDkwIDM1NS4zNjc0IG51bGxdCj4+IGVuZG9iagozOTkgMCBvYmogPDwKL0QgWzM2NSAwIFIgL1hZ
WiA5MCAzNDQuNDA4NSBudWxsXQo+PiBlbmRvYmoKNDAwIDAgb2JqIDw8Ci9EIFszNjUgMCBSIC9Y
WVogOTAgMzMzLjQ0OTUgbnVsbF0KPj4gZW5kb2JqCjQwMSAwIG9iaiA8PAovRCBbMzY1IDAgUiAv
WFlaIDkwIDMyMi40OTA2IG51bGxdCj4+IGVuZG9iago0MDIgMCBvYmogPDwKL0QgWzM2NSAwIFIg
L1hZWiA5MCAzMTEuNTMxNyBudWxsXQo+PiBlbmRvYmoKNDAzIDAgb2JqIDw8Ci9EIFszNjUgMCBS
IC9YWVogOTAgMzAwLjU3MjggbnVsbF0KPj4gZW5kb2JqCjQwNCAwIG9iaiA8PAovRCBbMzY1IDAg
UiAvWFlaIDkwIDI4OS42MTM5IG51bGxdCj4+IGVuZG9iago0MDUgMCBvYmogPDwKL0QgWzM2NSAw
IFIgL1hZWiA5MCAyNzguNjU1IG51bGxdCj4+IGVuZG9iago0MDYgMCBvYmogPDwKL0QgWzM2NSAw
IFIgL1hZWiA5MCAyNjcuNjk2MSBudWxsXQo+PiBlbmRvYmoKNDA3IDAgb2JqIDw8Ci9EIFszNjUg
MCBSIC9YWVogOTAgMjU2LjczNzIgbnVsbF0KPj4gZW5kb2JqCjQwOCAwIG9iaiA8PAovRCBbMzY1
IDAgUiAvWFlaIDkwIDI0NS43NzgzIG51bGxdCj4+IGVuZG9iago0MDkgMCBvYmogPDwKL0QgWzM2
NSAwIFIgL1hZWiA5MCAyMzQuODE5NCBudWxsXQo+PiBlbmRvYmoKNDEwIDAgb2JqIDw8Ci9EIFsz
NjUgMCBSIC9YWVogOTAgMjIzLjg2MDUgbnVsbF0KPj4gZW5kb2JqCjQxMSAwIG9iaiA8PAovRCBb
MzY1IDAgUiAvWFlaIDkwIDIxMi45MDE2IG51bGxdCj4+IGVuZG9iago0MTIgMCBvYmogPDwKL0Qg
WzM2NSAwIFIgL1hZWiA5MCAyMDEuOTQyNyBudWxsXQo+PiBlbmRvYmoKNDEzIDAgb2JqIDw8Ci9E
IFszNjUgMCBSIC9YWVogOTAgMTkwLjk4MzggbnVsbF0KPj4gZW5kb2JqCjQxNCAwIG9iaiA8PAov
RCBbMzY1IDAgUiAvWFlaIDkwIDE4MC4wMjQ5IG51bGxdCj4+IGVuZG9iago0MTUgMCBvYmogPDwK
L0QgWzM2NSAwIFIgL1hZWiA5MCAxNjkuMDY2IG51bGxdCj4+IGVuZG9iago0MTYgMCBvYmogPDwK
L0QgWzM2NSAwIFIgL1hZWiA5MCAxNTguMTA3MSBudWxsXQo+PiBlbmRvYmoKNDE3IDAgb2JqIDw8
Ci9EIFszNjUgMCBSIC9YWVogOTAgMTQ3LjE0ODIgbnVsbF0KPj4gZW5kb2JqCjQxOCAwIG9iaiA8
PAovRCBbMzY1IDAgUiAvWFlaIDkwIDEzNi4xODkzIG51bGxdCj4+IGVuZG9iago0MTkgMCBvYmog
PDwKL0QgWzM2NSAwIFIgL1hZWiA5MCAxMjUuMjMwNCBudWxsXQo+PiBlbmRvYmoKNDIwIDAgb2Jq
IDw8Ci9EIFszNjUgMCBSIC9YWVogOTAgMTE0LjI3MTUgbnVsbF0KPj4gZW5kb2JqCjQyMSAwIG9i
aiA8PAovRCBbMzY1IDAgUiAvWFlaIDkwIDEwMy4zMTI2IG51bGxdCj4+IGVuZG9iago0MjIgMCBv
YmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA5Mi4zNTM3IG51bGxdCj4+IGVuZG9iago0MjMgMCBv
YmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA4MS4zOTQ4IG51bGxdCj4+IGVuZG9iago0MjQgMCBv
YmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA3MC40MzU4IG51bGxdCj4+IGVuZG9iago0MjUgMCBv
YmogPDwKL0QgWzM2NSAwIFIgL1hZWiA5MCA1OS40NzY5IG51bGxdCj4+IGVuZG9iagozNjQgMCBv
YmogPDwKL0ZvbnQgPDwgL0YxMTIgMjIwIDAgUiAvRjgxIDExMiAwIFIgPj4KL1Byb2NTZXQgWyAv
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
AyaX600HF3VwVacX2+2uOt5uIKyEE+1TvR/K2T3WZQHr2oB17Q4EAtY1+H7GL73hvBFjpntYLTYW
qccBu3oj2BWbwK7dBHb50wK7diuwa+8IdkFyaTtgl8mN2eQJvA/ogWNrMhb4pnb1Q/8Bdu1FF5Pw
zmrRDxw5hCJYRHesoR4zt78Axx8VOGpnloHjA38l8WC1tPosYdfvL+JnCUD85jsKYPnvlaizYS0H
3uJhyEhaQrWzDST26uPBq38BnvUwhWVuZHN0cmVhbQplbmRvYmoKNDI3IDAgb2JqIDw8Ci9UeXBl
IC9QYWdlCi9Db250ZW50cyA0MjggMCBSCi9SZXNvdXJjZXMgNDI2IDAgUgovTWVkaWFCb3ggWzAg
MCA2MTIgNzkyXQovUGFyZW50IDIxMSAwIFIKPj4gZW5kb2JqCjQyOSAwIG9iaiA8PAovRCBbNDI3
IDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9iago0MzAgMCBvYmogPDwKL0QgWzQy
NyAwIFIgL1hZWiA5MCA2ODQuMTM0NSBudWxsXQo+PiBlbmRvYmoKNDMxIDAgb2JqIDw8Ci9EIFs0
MjcgMCBSIC9YWVogOTAgNjczLjE3NTYgbnVsbF0KPj4gZW5kb2JqCjQzMiAwIG9iaiA8PAovRCBb
NDI3IDAgUiAvWFlaIDkwIDY2Mi4yMTY3IG51bGxdCj4+IGVuZG9iago0MzMgMCBvYmogPDwKL0Qg
WzQyNyAwIFIgL1hZWiA5MCA2NTEuMjU3OCBudWxsXQo+PiBlbmRvYmoKNDM0IDAgb2JqIDw8Ci9E
IFs0MjcgMCBSIC9YWVogOTAgNjQwLjI5ODkgbnVsbF0KPj4gZW5kb2JqCjQzNSAwIG9iaiA8PAov
RCBbNDI3IDAgUiAvWFlaIDkwIDYyOS4zNCBudWxsXQo+PiBlbmRvYmoKNDM2IDAgb2JqIDw8Ci9E
IFs0MjcgMCBSIC9YWVogOTAgNjE4LjM4MTEgbnVsbF0KPj4gZW5kb2JqCjQzNyAwIG9iaiA8PAov
RCBbNDI3IDAgUiAvWFlaIDkwIDYwNy40MjIxIG51bGxdCj4+IGVuZG9iago0MzggMCBvYmogPDwK
L0QgWzQyNyAwIFIgL1hZWiA5MCA1OTYuNDYzMiBudWxsXQo+PiBlbmRvYmoKNDM5IDAgb2JqIDw8
Ci9EIFs0MjcgMCBSIC9YWVogOTAgNTg1LjUwNDMgbnVsbF0KPj4gZW5kb2JqCjQ0MCAwIG9iaiA8
PAovRCBbNDI3IDAgUiAvWFlaIDkwIDU3NC41NDU0IG51bGxdCj4+IGVuZG9iago0NDEgMCBvYmog
PDwKL0QgWzQyNyAwIFIgL1hZWiA5MCA1NjMuNTg2NSBudWxsXQo+PiBlbmRvYmoKNDQyIDAgb2Jq
IDw8Ci9EIFs0MjcgMCBSIC9YWVogOTAgNTUyLjYyNzYgbnVsbF0KPj4gZW5kb2JqCjQ2IDAgb2Jq
IDw8Ci9EIFs0MjcgMCBSIC9YWVogOTAgNTMyLjQwMzQgbnVsbF0KPj4gZW5kb2JqCjQ0MyAwIG9i
aiA8PAovRCBbNDI3IDAgUiAvWFlaIDkwIDUwMy41NzE2IG51bGxdCj4+IGVuZG9iago0NDQgMCBv
YmogPDwKL0QgWzQyNyAwIFIgL1hZWiA5MCA1MDUuMDU2MSBudWxsXQo+PiBlbmRvYmoKNDQ1IDAg
b2JqIDw8Ci9EIFs0MjcgMCBSIC9YWVogOTAgNDM4LjA4NzIgbnVsbF0KPj4gZW5kb2JqCjQ0NiAw
IG9iaiA8PAovRCBbNDI3IDAgUiAvWFlaIDkwIDQ0MC4yOTg5IG51bGxdCj4+IGVuZG9iago0NDcg
MCBvYmogPDwKL0QgWzQyNyAwIFIgL1hZWiA5MCAzNzMuMzg0OSBudWxsXQo+PiBlbmRvYmoKNDQ4
IDAgb2JqIDw8Ci9EIFs0MjcgMCBSIC9YWVogOTAgMzc1LjU0MTcgbnVsbF0KPj4gZW5kb2JqCjQ0
OSAwIG9iaiA8PAovRCBbNDI3IDAgUiAvWFlaIDkwIDI4NC43MTc0IG51bGxdCj4+IGVuZG9iago0
NTAgMCBvYmogPDwKL0QgWzQyNyAwIFIgL1hZWiA5MCAyODYuODc0MiBudWxsXQo+PiBlbmRvYmoK
NDUxIDAgb2JqIDw8Ci9EIFs0MjcgMCBSIC9YWVogOTAgMjA4LjcyMjQgbnVsbF0KPj4gZW5kb2Jq
CjQ1MiAwIG9iaiA8PAovRCBbNDI3IDAgUiAvWFlaIDkwIDIxMC4xNjE5IG51bGxdCj4+IGVuZG9i
ago0NTMgMCBvYmogPDwKL0QgWzQyNyAwIFIgL1hZWiA5MCAxNDUuMjg1MyBudWxsXQo+PiBlbmRv
YmoKNDU0IDAgb2JqIDw8Ci9EIFs0MjcgMCBSIC9YWVogOTAgMTQ1LjQwNDcgbnVsbF0KPj4gZW5k
b2JqCjQ1NSAwIG9iaiA8PAovRCBbNDI3IDAgUiAvWFlaIDkwIDY3LjI1MjkgbnVsbF0KPj4gZW5k
b2JqCjQ1NiAwIG9iaiA8PAovRCBbNDI3IDAgUiAvWFlaIDkwIDY4LjY5MjQgbnVsbF0KPj4gZW5k
b2JqCjQyNiAwIG9iaiA8PAovRm9udCA8PCAvRjExMiAyMjAgMCBSIC9GMTAxIDE2MiAwIFIgL0Y4
NyAxMTggMCBSIC9GOTAgMTMwIDAgUiAvRjgxIDExMiAwIFIgL0Y4NCAxMTUgMCBSIC9GMTYgMjAy
IDAgUiAvRjggMTk5IDAgUiA+PgovUHJvY1NldCBbIC9QREYgL1RleHQgXQo+PiBlbmRvYmoKNDU5
IDAgb2JqIDw8Ci9MZW5ndGggMTMzNSAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJl
YW0KeNrtWt9T4zYQfuevyFPHhrHQ6reu5R7auT70odNpw8zNHPcQiDnSCXYmcbjy33cly44dRHJA
CFzLg4QSr1ar3U+fdh1+Hh4c/2pgoInVFAbDy4FmhCrNBkpzAlqqwXD8KQGVfh7+hpJ6YIlVTDlJ
wEmcmQH1Ih8uL/OLavEuCEJHkEsCTDeCv5TFopovUTbNmKTJqKj/Tooqn9+kTCajaf1NXlxMy8Wk
+BJ0iu7inBIurQxKL2sRoN11BbEGeJD4J6JEEaV0eM7q55Z2nhtihLFB4GNEgSSMUREEvkS23jOB
tAIrd2cMBAGwgwyAWClZ7W+91d9/pIwm5aK6KIvxpJqUxbvIBhQnmtNm/SqF5ArbBNsCW4btPbYc
2zW2GTYnc4vtjEpa/4E0k4wnJ/jppB5+xCH5hnl33QEIBTTI9B0CwNDVVinhPQJGEwGGoW80MZxL
L3ueZoYnJfbC9zxBlBjqrMiMQjsyo9ES11e+v00zkLo2KFM2bEXjkwv/vPTzCj9eNPNA0OTHaJhw
E1pqHHAipQ7HwmwN0595tZynIJNiEQsQd0OrOwFC4WTpnXvXfbg216wJ5+QyClmpdaPvMARmFfSI
TpxhWTNjEg5lfj2rblMl7wmRMURLPsjQfG1w927qEJ2Lbp62ztXJV+/i3I/n3XBo2oZDdcKhO+FQ
28KhLGNr4bCPCEefqfrhuMprb0xLR0tf83n98bxcFuN6WMZioDXBGNiHBEERoAw28QQoQF8z2ScK
Rrdu+feyymN7ZXgUGW/AdFqM8zNKWZGHnUXRJRnCi8nnhpd1F4aFhgBEF1/LzkGf7RdfDJ4JX8vZ
7JuxZQhlGnaNLbz0Oeg1bLH/BLZ65mdAFTHGKB9icOfJbxUzASJj/CyIUbZlXDSkCIblgatvsI2w
TSOrCUGYbNKD6/z6vIlyifEeVeV84UArQCSfppPzFMFIfBaUAnV6MTeaknragpSzxefoYVGaUIN3
vIMqXq0y3CTuhsz9bXntx7P2zhRorxu3MoxB8hNawm04KzWHjzpnBXstWXKKUoxh0oBHUaI7nLKi
rwz7uf/+xo9HzbJhEdQ4rJd672/lH1CV9fe6Zc5G65VYrwS/Gflx5fuy+R6US0fCnU7rc79+yNXq
TndJwsSbsTJVdEzl3lTRNZUGU09riliZqo2bgv2V7138hAlcgyJxLpHEWqrW7qrY2eLEivby3ppQ
N4J/IZDytWS6Tp2X87xPJb3k1VKihTFPzKCt4I2Kv2MqMEWWlO0qCZ8HSljESgKJmoBty8bFRia0
WPVI/K7PhFuD9YBsXOw4G1+55NFZucArQoPa5BhDuDLNbvlWfzwo7X30LbbGhExZIqk1/cJhb1RY
84vYLxVqSI48FZ34PhCiui/r8YTo0ihnPhV+TUXv5zRNN3HaWjkknhsWHu9HK+hvvo+dkwFdXB+r
cAS6p+XeIpUSCVRsLlKlIYJr+I6x1pbTsztKupbWMi5xEQpJ6pVgTe4Fa9kb1l6O1w5fC9bUXrB2
+Ia1l8Pa8WvBmt4L1o7fsPYd5WuG0scafLpu8KYC9kFANU8vYM0LFbC96tRgXROeH8U0WLRUNG+l
buMlcFtT7qECfviLsVExjpkFihjdrhvfmeKa7ac010S0S02KyFpACRMgd/vik1MkHjzE/XLfvs7y
VgpCmTFvFccrZ0v/S6FZe91Hd/cD+tPoUm+lS7GBqnp8eUYpfaPM/xtlIlMaJcTaPyzAbn8Jf6Sx
AxCUCKHsIBOAGMLc0lvnX1gefBge/Avbo/QkZW5kc3RyZWFtCmVuZG9iago0NTggMCBvYmogPDwK
L1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDQ1OSAwIFIKL1Jlc291cmNlcyA0NTcgMCBSCi9NZWRpYUJv
eCBbMCAwIDYxMiA3OTJdCi9QYXJlbnQgNDgxIDAgUgo+PiBlbmRvYmoKNDYwIDAgb2JqIDw8Ci9E
IFs0NTggMCBSIC9YWVogOTAgNzA4LjA0NDggbnVsbF0KPj4gZW5kb2JqCjQ2MSAwIG9iaiA8PAov
RCBbNDU4IDAgUiAvWFlaIDkwIDY0Mi4xMzQxIG51bGxdCj4+IGVuZG9iago0NjIgMCBvYmogPDwK
L0QgWzQ1OCAwIFIgL1hZWiA5MCA2NDQuMzQ1OCBudWxsXQo+PiBlbmRvYmoKNDYzIDAgb2JqIDw8
Ci9EIFs0NTggMCBSIC9YWVogOTAgNTgwLjk5OTYgbnVsbF0KPj4gZW5kb2JqCjQ2NCAwIG9iaiA8
PAovRCBbNDU4IDAgUiAvWFlaIDkwIDU4MC45OTk2IG51bGxdCj4+IGVuZG9iago0NjUgMCBvYmog
PDwKL0QgWzQ1OCAwIFIgL1hZWiA5MCA1MTUuNDk2NSBudWxsXQo+PiBlbmRvYmoKNDY2IDAgb2Jq
IDw8Ci9EIFs0NTggMCBSIC9YWVogOTAgNTE3LjY1MzMgbnVsbF0KPj4gZW5kb2JqCjUwIDAgb2Jq
IDw8Ci9EIFs0NTggMCBSIC9YWVogOTAgNDU3Ljc3NSBudWxsXQo+PiBlbmRvYmoKNDY3IDAgb2Jq
IDw8Ci9EIFs0NTggMCBSIC9YWVogOTAgNDI3LjYyNzEgbnVsbF0KPj4gZW5kb2JqCjQ2OCAwIG9i
aiA8PAovRCBbNDU4IDAgUiAvWFlaIDkwIDQyOS42NDk1IG51bGxdCj4+IGVuZG9iago0NjkgMCBv
YmogPDwKL0QgWzQ1OCAwIFIgL1hZWiA5MCAzNjQuMDkxNiBudWxsXQo+PiBlbmRvYmoKNDcwIDAg
b2JqIDw8Ci9EIFs0NTggMCBSIC9YWVogOTAgMzY2LjMwMzIgbnVsbF0KPj4gZW5kb2JqCjQ3MSAw
IG9iaiA8PAovRCBbNDU4IDAgUiAvWFlaIDkwIDMxNC4wODUzIG51bGxdCj4+IGVuZG9iago0NzIg
MCBvYmogPDwKL0QgWzQ1OCAwIFIgL1hZWiA5MCAzMTQuOTEyMSBudWxsXQo+PiBlbmRvYmoKNDcz
IDAgb2JqIDw8Ci9EIFs0NTggMCBSIC9YWVogOTAgMjYyLjY5NDIgbnVsbF0KPj4gZW5kb2JqCjQ3
NCAwIG9iaiA8PAovRCBbNDU4IDAgUiAvWFlaIDkwIDI2My41MjEgbnVsbF0KPj4gZW5kb2JqCjQ3
NSAwIG9iaiA8PAovRCBbNDU4IDAgUiAvWFlaIDkwIDIxMS4zMDMxIG51bGxdCj4+IGVuZG9iago0
NzYgMCBvYmogPDwKL0QgWzQ1OCAwIFIgL1hZWiA5MCAyMTIuMTI5OSBudWxsXQo+PiBlbmRvYmoK
NDc3IDAgb2JqIDw8Ci9EIFs0NTggMCBSIC9YWVogOTAgMTU5LjkxMiBudWxsXQo+PiBlbmRvYmoK
NDc4IDAgb2JqIDw8Ci9EIFs0NTggMCBSIC9YWVogOTAgMTYwLjczODggbnVsbF0KPj4gZW5kb2Jq
CjQ3OSAwIG9iaiA8PAovRCBbNDU4IDAgUiAvWFlaIDkwIDk3LjIxNzIgbnVsbF0KPj4gZW5kb2Jq
CjQ4MCAwIG9iaiA8PAovRCBbNDU4IDAgUiAvWFlaIDkwIDk3LjM5MjYgbnVsbF0KPj4gZW5kb2Jq
CjQ1NyAwIG9iaiA8PAovRm9udCA8PCAvRjgxIDExMiAwIFIgL0Y4NyAxMTggMCBSIC9GODQgMTE1
IDAgUiAvRjEwMSAxNjIgMCBSIC9GOTAgMTMwIDAgUiAvRjExMiAyMjAgMCBSIC9GOCAxOTkgMCBS
ID4+Ci9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdCj4+IGVuZG9iago0ODQgMCBvYmogPDwKL0xlbmd0
aCAxNTE0ICAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42u1aS3PbNhC+51fo
1IHcEMb7kTY9dCaZSQ/tTKvMZCbOgbapWB2F9FB0muTXd/EgTcqwJMsvOdEhDAQudz9gF/stYPw+
eXb4mlI2MtgqJUaT6YgShongI6U5plqq0eT0PWrGmeGogKdAn3z73D/nvif37U6GMYp+HWeUW3QC
fdpLaS+l0QKeyj21ZOgtSDGGfoNfSqKZV1B6lZcGOap9z2ffzluz0QhonARToERZ9BOoshxV48wy
h9F6JdYrgZ7ctxv/rNp+qik6gO8MeumfR0QS6FUqwq/8s+zga4+OkG0Bv10GDDZrb/nMP8EGFR4G
hd8E/TL+MPnj8LWhI42tJtR5KWMW2tJAg2NLifBuoiyK6hG8Vkx5h8JXnJkR8SKvptPipFm86HRe
CnKJKdOt4D9NVRcAhUmC8jL8X5Qn82pxURfhZzWNWkRPiyVYCwAQtEQJSvqGBLaGiijxJaFDYsNV
C+SIEJbSYgGtkFHoa0KLgolprfyb0iAxjIKtwKGwUu1IIgZLeu8NNsLYKHAwphAFFJxIITIouPHq
FDODpWWtyrw8TcGiChvd2U2PTHHNNgVWR1CLhCYqYYi0VfUxAVlj0ZmalQlblGAmqLzJLCgMWYbG
L3AqvDml2CghRhk0rJQ0xDdfG99/F80FDFiiso3xAVjumlbfFuwwZWZSYMJgvjPwr7FUP2zOFD4F
8QfPmYdPM2fqNmfyEFPi9jlT30nONGtzJh/mKjoUEJK3C/XlWhX7hLl5whzYMphKajcBpNYBan2h
okDvPRk60gyJz0rRjpYklA8cvUM5XWgM9QVtczoL60/uSE4fgjWQ0olQS1jVWqx/Vk3xIm0SyrXW
KW+m44xLgapy/rVtFaFxXF1AUIW+aSpSLZZKbxSqUCEZ1UrOFkHpt6KuQqsL3oF+YQBol0g2mk2L
1WUOPK2KaKmsmtA4qcomhziL42vOXAtIoBhTAfEpUd549UwCAYCbi0t8vnFeLWbNldefXUc+vygW
zx0oyOqUA/sulQzNmRNXAi1cbj4N7VnZFHX83vVwtDjL5/PwMsBWfdiqby180JzlUSyvo4VqGjvi
JxdugBJ9OQfyCJbBzuxjiYHEgMjfRLHzvG5mJxfzvA4is6g3Bem4SHiMDIPUuamMbgMAPkRg3oBV
KXCqI1QK/E+BSyl6Ef/9F11cRRn3nad0Gig1EVwECIcYtrSG+gsj62Qc8xoDQevTL+Q+rFLrWEDJ
Z7u8tHIYV60JAeTUsldZldmn4tNxUUfWPS/qvJlVpasTNNMMvZ/PjseCIOxjYUyJUw6sPcfV+eJD
ssrTBnOlqS8ffNF8j1Xe5K52xlGJFrF2u6zvmK/veK++Y736DgLxZ19sxcpO6k0qu6ulqPAgeQ+k
CCDJlVIUyjZX2UkKpYUHHqo5wJCs5qjAmvDlHXAqQcN70eUnl6CTpRzEqLTdxvVtmddf+8FT1SkQ
gmMp1FLOYWtB3IjRbrKg46L9Mli4S3EM2iFVqgfZrfzAcaycdzKwD3SnmN+hwEbluXtjr8GgAgZ6
04nqY4CcdrNdkucPAtFr7D4SdioS3GunjMighuyduZ0zu4kUfiKFeBorcw3jhfML/uhkM+/2IJF0
Msmce6g7G3LNlZsURjBRVq48X6MSKMtw+iQpC5RUHTrR+7xNHkFt1fYzblD2aKXXuy1KrxCI4j5L
LynT2/Sl+ivU5HKLJTE81RssiTxgaWYfz5rNz/Q07L45azck0yNCSPKoiGHN2OozNSu4ebhjuXfJ
P8hA1IgVJ0qDI6drFrGCH9qa/SLe151PuFT5ASLhx6k779mZT6Lu1NpsQ/dqR+vObF93br+nOthT
1n53/RQjYX9UckfO/J6PSvSOUtbB3VMWeyTK2vIu0i1i+3BPWTuZ5faR8B1R1k478/EoK4xV3SNl
mbuhLHPXlHV4G8pauiWiQIZbHm+JmMtLIvraSyL8NpdEeHvS+eavq7dDGGOarrgdMqs+JMepMbdS
jjKwQIzQvaulz15Nnv0P1HgTC2VuZHN0cmVhbQplbmRvYmoKNDgzIDAgb2JqIDw8Ci9UeXBlIC9Q
YWdlCi9Db250ZW50cyA0ODQgMCBSCi9SZXNvdXJjZXMgNDgyIDAgUgovTWVkaWFCb3ggWzAgMCA2
MTIgNzkyXQovUGFyZW50IDQ4MSAwIFIKPj4gZW5kb2JqCjQ4NSAwIG9iaiA8PAovRCBbNDgzIDAg
UiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9iago0ODYgMCBvYmogPDwKL0QgWzQ4MyAw
IFIgL1hZWiA5MCA2ODMuMTM4MiBudWxsXQo+PiBlbmRvYmoKNDg3IDAgb2JqIDw8Ci9EIFs0ODMg
MCBSIC9YWVogOTAgNjg0LjEzNDUgbnVsbF0KPj4gZW5kb2JqCjQ4OCAwIG9iaiA8PAovRCBbNDgz
IDAgUiAvWFlaIDkwIDYxOS4yNTc4IG51bGxdCj4+IGVuZG9iago0ODkgMCBvYmogPDwKL0QgWzQ4
MyAwIFIgL1hZWiA5MCA2MTkuMzc3MyBudWxsXQo+PiBlbmRvYmoKNTQgMCBvYmogPDwKL0QgWzQ4
MyAwIFIgL1hZWiA5MCA1MjMuOTA1NCBudWxsXQo+PiBlbmRvYmoKNDkwIDAgb2JqIDw8Ci9EIFs0
ODMgMCBSIC9YWVogOTAgNDkyLjA3NDggbnVsbF0KPj4gZW5kb2JqCjQ5MSAwIG9iaiA8PAovRCBb
NDgzIDAgUiAvWFlaIDkwIDQ5NC4wOTcxIG51bGxdCj4+IGVuZG9iago0OTIgMCBvYmogPDwKL0Qg
WzQ4MyAwIFIgL1hZWiA5MCA0MjguNTEzMSBudWxsXQo+PiBlbmRvYmoKNDkzIDAgb2JqIDw8Ci9E
IFs0ODMgMCBSIC9YWVogOTAgNDI5LjM0IG51bGxdCj4+IGVuZG9iago0OTQgMCBvYmogPDwKL0Qg
WzQ4MyAwIFIgL1hZWiA5MCA0MTguMzgxMSBudWxsXQo+PiBlbmRvYmoKNDk1IDAgb2JqIDw8Ci9E
IFs0ODMgMCBSIC9YWVogOTAgNDA3LjQyMjIgbnVsbF0KPj4gZW5kb2JqCjQ5NiAwIG9iaiA8PAov
RCBbNDgzIDAgUiAvWFlaIDkwIDM1My43OTMzIG51bGxdCj4+IGVuZG9iago0OTcgMCBvYmogPDwK
L0QgWzQ4MyAwIFIgL1hZWiA5MCAzNTQuNjIwMiBudWxsXQo+PiBlbmRvYmoKNDk4IDAgb2JqIDw8
Ci9EIFs0ODMgMCBSIC9YWVogOTAgMjg3LjM3MjQgbnVsbF0KPj4gZW5kb2JqCjQ5OSAwIG9iaiA8
PAovRCBbNDgzIDAgUiAvWFlaIDkwIDI4OS44NjMgbnVsbF0KPj4gZW5kb2JqCjUwMCAwIG9iaiA8
PAovRCBbNDgzIDAgUiAvWFlaIDkwIDI3OC45MDQxIG51bGxdCj4+IGVuZG9iago1MDEgMCBvYmog
PDwKL0QgWzQ4MyAwIFIgL1hZWiA5MCAyNjcuOTQ1MiBudWxsXQo+PiBlbmRvYmoKNTAyIDAgb2Jq
IDw8Ci9EIFs0ODMgMCBSIC9YWVogOTAgMjE0LjMxNjQgbnVsbF0KPj4gZW5kb2JqCjUwMyAwIG9i
aiA8PAovRCBbNDgzIDAgUiAvWFlaIDkwIDIxNS4xNDMyIG51bGxdCj4+IGVuZG9iago1MDQgMCBv
YmogPDwKL0QgWzQ4MyAwIFIgL1hZWiA5MCAyMDQuMTg0MyBudWxsXQo+PiBlbmRvYmoKNTA1IDAg
b2JqIDw8Ci9EIFs0ODMgMCBSIC9YWVogOTAgMTkzLjIyNTQgbnVsbF0KPj4gZW5kb2JqCjUwNiAw
IG9iaiA8PAovRCBbNDgzIDAgUiAvWFlaIDkwIDEzOS41OTY2IG51bGxdCj4+IGVuZG9iago1MDcg
MCBvYmogPDwKL0QgWzQ4MyAwIFIgL1hZWiA5MCAxNDAuNDIzNCBudWxsXQo+PiBlbmRvYmoKNTA4
IDAgb2JqIDw8Ci9EIFs0ODMgMCBSIC9YWVogOTAgMTI5LjQ2NDUgbnVsbF0KPj4gZW5kb2JqCjUw
OSAwIG9iaiA8PAovRCBbNDgzIDAgUiAvWFlaIDkwIDExOC41MDU2IG51bGxdCj4+IGVuZG9iago1
OCAwIG9iaiA8PAovRCBbNDgzIDAgUiAvWFlaIDkwIDcwLjg1NDQgbnVsbF0KPj4gZW5kb2JqCjQ4
MiAwIG9iaiA8PAovRm9udCA8PCAvRjExMiAyMjAgMCBSIC9GODEgMTEyIDAgUiAvRjg3IDExOCAw
IFIgL0Y4NCAxMTUgMCBSIC9GMTAxIDE2MiAwIFIgL0Y5MCAxMzAgMCBSIC9GMTEgMTk2IDAgUiAv
RjggMTk5IDAgUiA+PgovUHJvY1NldCBbIC9QREYgL1RleHQgXQo+PiBlbmRvYmoKNTEyIDAgb2Jq
IDw8Ci9MZW5ndGggMjM3MSAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeNrt
Wt1v2zgSf+9fYfThIONqlt+k0uw+HLAL9B7u4eC3bLBQHLkRzpF8kpy0ONz/fsMhKVO2HCftbm8/
isA0TQ2Hw/n4kTPK35av3v7IGJ9ZkmstZ8v1LKfEKM1m2gjCoDdb3l5l/XxhRVZCK7N77G+x3eBI
gf2BhnOWXc4XTOTZCsYMUhmkMlkHrXatUTxbAhXn2Rv4pVNinRBja3LuHhuZ3WFbYNs6Lo4JpxNM
/Io6ZaKckCbHiRaZ2KzCtscWiDij2ffz6+XfZ1IR+KFmC0ZJrmyOiriZL3LqZubMUUO/wnaFIz8n
Ix2O9NhvsS1xpMA+KJELhWri5llbo0HGp2TnFmRfgBb+gjtYUEK1GG+gGawn0Z7CMYS2wBFvwyaO
c8EcQ8Y18uXZT1RR+K0EKiJuZq8IhoqgiSKimnrs7xURlYiKkKcUoXC7ckIRTxsRWEVFoKPBc4WS
MGU9F+XGYJd1su+9PmT2MGgFvTz4NLiT81lJU/bMsXJ+DNphMECzd079b3+0bGZIbihzcbVQObGK
gTm4IFIYieZggdLMcohArh0lEySXxswoUvywXpervrsYWO4JhSJSQvAGwo99WwAlCGvBMrX7hp3X
fdk+zLnKio1nwWjKw1KiFY08qolVFFFG6EDQrD37/q70/NdNex9ky2k6i5FciDCrn2TLOZWB4M0U
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
SIBVJHBvbtVsIeFiTSGzw7sivj1+9cPy1f8AbrGTb2VuZHN0cmVhbQplbmRvYmoKNTExIDAgb2Jq
IDw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA1MTIgMCBSCi9SZXNvdXJjZXMgNTEwIDAgUgovTWVk
aWFCb3ggWzAgMCA2MTIgNzkyXQovUGFyZW50IDQ4MSAwIFIKPj4gZW5kb2JqCjUxMyAwIG9iaiA8
PAovRCBbNTExIDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9iago1MTQgMCBvYmog
PDwKL0QgWzUxMSAwIFIgL1hZWiA5MCA2ODMuMTM4MiBudWxsXQo+PiBlbmRvYmoKNTE1IDAgb2Jq
IDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgNjg0LjEzNDUgbnVsbF0KPj4gZW5kb2JqCjUxNiAwIG9i
aiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDY3My4xNzU2IG51bGxdCj4+IGVuZG9iago1MTcgMCBv
YmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCA2NjIuMjE2NyBudWxsXQo+PiBlbmRvYmoKNTE4IDAg
b2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgNTE1LjU2NTcgbnVsbF0KPj4gZW5kb2JqCjUxOSAw
IG9iaiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDUxNS42NjUzIG51bGxdCj4+IGVuZG9iago1MjAg
MCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCA1MDQuNzA2NCBudWxsXQo+PiBlbmRvYmoKNTIx
IDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgNDkzLjc0NzUgbnVsbF0KPj4gZW5kb2JqCjUy
MiAwIG9iaiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDQ1MS42ODk4IG51bGxdCj4+IGVuZG9iago1
MjMgMCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCA0NTMuODQ2NiBudWxsXQo+PiBlbmRvYmoK
NTI0IDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgNDQyLjg4NzcgbnVsbF0KPj4gZW5kb2Jq
CjUyNSAwIG9iaiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDQzMS45Mjg4IG51bGxdCj4+IGVuZG9i
ago1MjYgMCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCA0MjAuOTY5OSBudWxsXQo+PiBlbmRv
YmoKNTI3IDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgNDEwLjAxMSBudWxsXQo+PiBlbmRv
YmoKNTI4IDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgMzk5LjA1MjEgbnVsbF0KPj4gZW5k
b2JqCjUyOSAwIG9iaiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDM4OC4wOTMyIG51bGxdCj4+IGVu
ZG9iago1MzAgMCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCAzNzcuMTM0MyBudWxsXQo+PiBl
bmRvYmoKNTMxIDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgMzY2LjE3NTQgbnVsbF0KPj4g
ZW5kb2JqCjUzMiAwIG9iaiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDM1NS4yMTY1IG51bGxdCj4+
IGVuZG9iago1MzMgMCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCAzNDQuMjU3NiBudWxsXQo+
PiBlbmRvYmoKNTM0IDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgMzMzLjI5ODcgbnVsbF0K
Pj4gZW5kb2JqCjUzNSAwIG9iaiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDMyMi4zMzk4IG51bGxd
Cj4+IGVuZG9iago1MzYgMCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCAzMTEuMzgwOSBudWxs
XQo+PiBlbmRvYmoKNTM3IDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgMzAwLjQyMiBudWxs
XQo+PiBlbmRvYmoKNjIgMCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCAyNDIuOTUxOCBudWxs
XQo+PiBlbmRvYmoKNTM4IDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgMjEwLjg3NjggbnVs
bF0KPj4gZW5kb2JqCjUzOSAwIG9iaiA8PAovRCBbNTExIDAgUiAvWFlaIDkwIDIxMi44OTkyIG51
bGxdCj4+IGVuZG9iago1NDAgMCBvYmogPDwKL0QgWzUxMSAwIFIgL1hZWiA5MCAxNDcuODIyMyBu
dWxsXQo+PiBlbmRvYmoKNTQxIDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgMTUwLjAzNCBu
dWxsXQo+PiBlbmRvYmoKNTQyIDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgODQuOTU3MSBu
dWxsXQo+PiBlbmRvYmoKNTQzIDAgb2JqIDw8Ci9EIFs1MTEgMCBSIC9YWVogOTAgODcuMTY4OCBu
dWxsXQo+PiBlbmRvYmoKNTEwIDAgb2JqIDw8Ci9Gb250IDw8IC9GMTEyIDIyMCAwIFIgL0Y4MSAx
MTIgMCBSIC9GODcgMTE4IDAgUiAvRjEwMSAxNjIgMCBSIC9GOTAgMTMwIDAgUiA+PgovUHJvY1Nl
dCBbIC9QREYgL1RleHQgXQo+PiBlbmRvYmoKNTQ2IDAgb2JqIDw8Ci9MZW5ndGggMjA4NSAgICAg
IAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0KeNrtWkuP2zgSvvtX6BTIQMzh+7HbM4fB
7hzmsMDu9mGAJFi4u+VuDdySY6uTGJgfP8WiKMsyLTtOozsD7ME0RRWLRbLqq4f98/Xkh18Y45kl
TmuZXS8yR4lRmmXaCMKgl13fvcub6cyKvIBW5o/YX2G7xJE59jsazll+NZ0x4fJbGDNIZZDK5Bto
tW+N4vk1UHGe/wRPQvono23+GelKbO+wbbB9CCzfU0WhJ2nLvMa2imxbcsqQg8AXQTaJ8ot8je2n
nuRLLzP1MsPs68AcZNIuf+PlZPmXICcszWCA5n+ffrj+9YdfLMsMcYYyf24wixgqbDbjgjhGJR6c
bClN5uCEufaUDN5LYzKKFP8pmqf1lKm82vwtEDvaI5aUCKVsS3w9ZeEAWE5Dl3Wi7OaAAEZZ0c75
/FBUCcZcEqlUlOJLgo0l1BnWEpRwttw6f2Lc2nxTVvfLoqmrt/DsYLgKr8vH1bJ4LKpm3pR1Nbsr
3lPKq+IuzPo05SqfL5+KdlZVlM1DsQ4vV/WmbEpP8ckfRxEYVvU6dCjOsce2IxgjyoEmn78foMhm
kml/wBzujxGnFMO3xeOq2U61yv2iisL27mInfD+tVig3dG/qp/i2TknG4DpAL6JkG7i3J/isdlf5
JV7lTHGRz8JXCYMVfBYJusTewGqddu0atT/Vz+WmIIF038JnnIJExkHHEuuYeSETh+MskVm1z6y1
SYk2Kfo2yXo2GZlQT2BsfoPtxgvBIih04uxAIYpzAAryfAF0AhR4/psXin0dKAg8anUBKOzdtvBd
F4nnQfma8v6hCd2iul3Wm6d10arlouUhezyMI0xw2fJY/N5qCu2vY4iR1A1Mqs/EY4iIJvU7rCZd
nuTEKFGUyhFWmmgdd8QTZgSqKm2U5bcEA0UAxOMK94lTk8RZFlExbRlMaw+dr2QZX62Ye5ZhGPJ3
+cfpzAFCYX+O7RpHCq/E/KSttA6UfotIwPzQVqIDheHzbUU/s61U51uIFuAZWFS5RUqt91TqS29T
wnDRMxBBNNOir9tD3Tcqm/WokkYEGq4o/+5saO9uZkxBxOKs9y6OWAtuBqUB0YhL+W1JrHaRY3R6
DXwK+MC9+mgA1IyBkh2uJiUcSZR3vrwvbtbz8ra9U/DQGIV4HyG1EPm7ZXkzBRgnZdWA92bU8wZ/
siTdVFKvNh+S0GAsERrCB6+dWjPxV4IGYLJBgo84ZR3lYkJ/HRwc+m7Zi6eDGPIwng5wAD6yjacv
hwP2XcFBNAdDIDoImdLKj0/+eT3xXpFmLOMUVJ8ym0nNiLCGZ7ePk4+Tdx9odjeh2a8TMBcLC32G
B0qYkzx7nES/Gp6Xk/9O/t0xnHUcZ32WP2Mqt4cXu6UV2InUegQ4nBS28+Mvhj2DYIMx1l3MXTKM
0MQa2Md5YrynXCUWgp6ScbM0GdX0QO5CFHSKSIvaO0RBRlMwCFSK6ueAwU3RJADQaYgDjgMgTDoO
fRY0X1r1CtB3g8xqZFN37BmCkcM5zuT/6/oaxxG9oH+P7RLbAscb7NfYVt4r/HXKCZfD31DPevC3
6HSKYV5apIoJFvJqHs2lXCRNWxkzVklA0+4XEjzkJlLsQ9bK406XpYzlxJg0/whPP4buWJ6dyJ81
oczwM/NnriAWkOYV0oSbzhRkzyAow3UN+neNoX/ktQz6F728PkOPj7rxKIYbsxW/mtdzpqOevx3L
/eXXL6zTMUpcGAK97cUGxr81vpCMUMmiuTTrJ9ikUNYbDnyb/AZ0K1Xmg66larR6Zaw4cI/7lSbY
nbRx7e0xJlHL5+tWtr4pCh9kHkgdC3WJNSHG4JKycyX39bwEF/DrUpwSvA8hO7lRwCPoAf6WK3UB
eiRot3u0b+DpTSghClAgC/oWS4j8vDrfOFZtT2GVGOCpv7RhtXIRvPsmhrUDWNu3B+dXUPt1UHHS
HP5VN0XSECDuUc5Gsn+AJnGVL4p1K+5iXT+mbowTwToNrdsziTHQvI2J6vY5HOHh2hDuateFeGUb
5MPuQ2ftTTgOblfF4NQ6uk3xOK+a8rYV2d9M8fFpviy91uGUTSRs/F0dqSkJFWK778ZbGM/FcQyE
0BU4XAtG5tgvu3Geh+T55YtGmnsCaB+gFSiGscGVuJcK1WDBNVaZH7pas7SXZK3yGbJW0UUnAZ6Z
o+loLAQnMZXwZvKA4d0hV/AXSsk+qnqme4EZ5X0QObqmBhW3PAq4vHBN7B5BcuZrY2fviQ/4V3Xz
Nn1Uxojj7mG3kT5wX426iXVyTnAXx8D+YA76Fa4p0YYO/MrVqNtYJjgNwRG6TJ0Z6gIxU479H7te
Arv8a8+MqsCGPhP8qOfNGm9bDxwrFN4rR0PYpFXx7b65pOsaDHXb/8T904hp9PV6oKwgJocU5/tR
VoVq6vfo1bHA/hrbJbZzbFf+YuXLVyKE3MvQRpOr1LrfUADevt7vQdIXVYXZ86XccEx1uBEjqY4y
vlKrR+scTqgTmY4ibheabk8xwegepGsdpBfwiIOUhNpdkeVU+nJ1XqFk6LtOplBXlyY14KWJlk4P
9h2zGuN6cUjIuowkAKv7znHcm7X/bGrhQb86PCAXh0NO+dWhXWE7x3bd9aVnAf0ltkXnCV72Tw9J
wHiZkun24n9gmWcADGeZGVR0eFsbYWOA4UDhuB4vjXBxqjJiLD9R0+GD0gjflUbY8dKIlB3MnMSA
qzPLIn/A0x+n7f8Ez5FCLbNwHa77iSfut8UJYUyHE7Ge7aGCE0kHpY19qMDfyhQDLZlJQYQwAR2Y
jj/n/QlJNXGtZW5kc3RyZWFtCmVuZG9iago1NDUgMCBvYmogPDwKL1R5cGUgL1BhZ2UKL0NvbnRl
bnRzIDU0NiAwIFIKL1Jlc291cmNlcyA1NDQgMCBSCi9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCi9Q
YXJlbnQgNDgxIDAgUgo+PiBlbmRvYmoKNTQ3IDAgb2JqIDw8Ci9EIFs1NDUgMCBSIC9YWVogOTAg
NzA4LjA0NDggbnVsbF0KPj4gZW5kb2JqCjU0OCAwIG9iaiA8PAovRCBbNTQ1IDAgUiAvWFlaIDkw
IDY4My4xMzgyIG51bGxdCj4+IGVuZG9iago1NDkgMCBvYmogPDwKL0QgWzU0NSAwIFIgL1hZWiA5
MCA2ODQuMTM0NSBudWxsXQo+PiBlbmRvYmoKNTUwIDAgb2JqIDw8Ci9EIFs1NDUgMCBSIC9YWVog
OTAgNjE3LjE2NTYgbnVsbF0KPj4gZW5kb2JqCjU1MSAwIG9iaiA8PAovRCBbNTQ1IDAgUiAvWFla
IDkwIDYxOS4zNzczIG51bGxdCj4+IGVuZG9iago1NTIgMCBvYmogPDwKL0QgWzU0NSAwIFIgL1hZ
WiA5MCA1NjQuMDg0NyBudWxsXQo+PiBlbmRvYmoKNTUzIDAgb2JqIDw8Ci9EIFs1NDUgMCBSIC9Y
WVogOTAgNTY2LjU3NTMgbnVsbF0KPj4gZW5kb2JqCjY2IDAgb2JqIDw8Ci9EIFs1NDUgMCBSIC9Y
WVogOTAgNTE3LjI2MDMgbnVsbF0KPj4gZW5kb2JqCjU1NCAwIG9iaiA8PAovRCBbNTQ1IDAgUiAv
WFlaIDkwIDQ4Ny4wOTM0IG51bGxdCj4+IGVuZG9iago1NTUgMCBvYmogPDwKL0QgWzU0NSAwIFIg
L1hZWiA5MCA0ODkuMTE1OCBudWxsXQo+PiBlbmRvYmoKNzAgMCBvYmogPDwKL0QgWzU0NSAwIFIg
L1hZWiA5MCA0MzkuODAwOCBudWxsXQo+PiBlbmRvYmoKNTU2IDAgb2JqIDw8Ci9EIFs1NDUgMCBS
IC9YWVogOTAgNDA5LjYzMzkgbnVsbF0KPj4gZW5kb2JqCjU1NyAwIG9iaiA8PAovRCBbNTQ1IDAg
UiAvWFlaIDkwIDQxMS42NTYzIG51bGxdCj4+IGVuZG9iago1NTggMCBvYmogPDwKL0QgWzU0NSAw
IFIgL1hZWiA5MCAzNTYuNjQyNyBudWxsXQo+PiBlbmRvYmoKNTU5IDAgb2JqIDw8Ci9EIFs1NDUg
MCBSIC9YWVogOTAgMzU4Ljg1NDMgbnVsbF0KPj4gZW5kb2JqCjU2MCAwIG9iaiA8PAovRCBbNTQ1
IDAgUiAvWFlaIDkwIDI3OS45MzAzIG51bGxdCj4+IGVuZG9iago1NjEgMCBvYmogPDwKL0QgWzU0
NSAwIFIgL1hZWiA5MCAyODIuMTQyIG51bGxdCj4+IGVuZG9iago1NjIgMCBvYmogPDwKL0QgWzU0
NSAwIFIgL1hZWiA5MCAyMTUuMTczMiBudWxsXQo+PiBlbmRvYmoKNTYzIDAgb2JqIDw8Ci9EIFs1
NDUgMCBSIC9YWVogOTAgMjE3LjM4NDggbnVsbF0KPj4gZW5kb2JqCjU2NCAwIG9iaiA8PAovRCBb
NTQ1IDAgUiAvWFlaIDkwIDE2My4yMDgxIG51bGxdCj4+IGVuZG9iago1NjUgMCBvYmogPDwKL0Qg
WzU0NSAwIFIgL1hZWiA5MCAxNjQuNTgyOSBudWxsXQo+PiBlbmRvYmoKNTY2IDAgb2JqIDw8Ci9E
IFs1NDUgMCBSIC9YWVogOTAgOTkuNzI2MiBudWxsXQo+PiBlbmRvYmoKNTY3IDAgb2JqIDw8Ci9E
IFs1NDUgMCBSIC9YWVogOTAgOTkuODI1NyBudWxsXQo+PiBlbmRvYmoKNTQ0IDAgb2JqIDw8Ci9G
b250IDw8IC9GMTEyIDIyMCAwIFIgL0Y4MSAxMTIgMCBSIC9GODcgMTE4IDAgUiAvRjkwIDEzMCAw
IFIgL0Y4NCAxMTUgMCBSIC9GMTAxIDE2MiAwIFIgPj4KL1Byb2NTZXQgWyAvUERGIC9UZXh0IF0K
Pj4gZW5kb2JqCjU3MCAwIG9iaiA8PAovTGVuZ3RoIDI2MzIgICAgICAKL0ZpbHRlciAvRmxhdGVE
ZWNvZGUKPj4Kc3RyZWFtCnja7Vrdb9vIEX/3X6GnAwWc1vvJ5abpFUiRoDkg12vitg+5oKClVUSA
IhWSsqz/vjP7QVEyZSs536Et+mB6uZydnZmd+c3M2q9urq7fMMYnGTFpKic3y4mhRKuUTVItCIPR
5GbxMemms0wkFp4yWbvxxj1LN5O7cU/DOUteTmdMmGQOc9pRaUelkxaeKT614skNUHGe/ABvqUoK
x6ByLA8biqRxM3dunMdtwybAccBEp8jEOCbGMYGndc/GPdvBzNxRAg2TOvmFKjoUuXbPqhdZO4ko
dUJK90EcWaVx44OQ0gtJB0ICcxSSJt/BU4jk3gv+PWp/0b7faBy/L2zxnbf63u8LKjM3/Yfpp5sf
r99kbKKJ0ZShF4BRiKYim8y4IIZR6dwgC5R6YsBfeIqUDL5LrSfUUby33baZMpVU7Yue7YFYGCI0
D7Q5aMMMTex60+09saFD4oxQk5pAXUwZqM9AeQaqM1CcgdoMlGagMurLQFsGqj7cVsG2TMvIaTmy
Gaiehe914Bx3KcMuG/hxfsLg6Biem+ICrMm8KR9umxoIpUzEbVuv7nLKaJKXrf1+TGcGS6j8ap17
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
0dh8vsI7D8OSt2FuZz3NzjmN4xg4Q7CWWxdFyLyLk3HbQA1OsqnbvESDZKqnGyQsfG3spszn9mht
hpdH6Dkh6dKjFAFKUxyHC+vyMzK0t67ezaHF8Pc0kerongY7DUfW1a6rGINOCY1+pvr/kKhOEKDd
V9ByROjIb30ghNw5ihnLuix9gAIGubrs6vXNFfaZdAIbw4NCdsqkmMzXV1+uPn6ik8UVnfx4RQHt
MzXZwQslzIAPrK9YamCI/3bhZ8qrD1d/65lBE4M3FQd2r/B/kUA9BdWlduqZDOokaPygQCJcsgfB
A0nyUIqCe2nYa8ZJZoQ34arrNi+ur3e7HWm3FZnX6+tFvavKOl9cw4kvtvOuJffr8k/F4o+AUJJp
3Fn1hj5IMovcQVzD2WmcnRdkKEdZbCBbf7YEyrrZdJbypNzXFVk2KOH1vMEQv75wc/1NVlhvlg0B
Ea7HcqfhhGks3dIMspUMF+06OsG/Aep2CS9lbmRzdHJlYW0KZW5kb2JqCjU2OSAwIG9iaiA8PAov
VHlwZSAvUGFnZQovQ29udGVudHMgNTcwIDAgUgovUmVzb3VyY2VzIDU2OCAwIFIKL01lZGlhQm94
IFswIDAgNjEyIDc5Ml0KL1BhcmVudCA0ODEgMCBSCi9Bbm5vdHMgWyA1ODcgMCBSIDU4OCAwIFIg
NTg5IDAgUiA1OTEgMCBSIDU5MyAwIFIgNTk1IDAgUiBdCj4+IGVuZG9iago1ODcgMCBvYmogPDwK
L1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzEgMCAwXQovUmVjdCBbMTY5LjU0MDcg
MTQyLjg2OTQgMTc4LjE3MjUgMTU0LjkxNjFdCi9TdWJ0eXBlIC9MaW5rCi9BIDw8IC9TIC9Hb1Rv
IC9EIChIZm9vdG5vdGUuNSkgPj4KPj4gZW5kb2JqCjU4OCAwIG9iaiA8PAovVHlwZSAvQW5ub3QK
L0JvcmRlclswIDAgMV0vSC9JL0NbMSAwIDBdCi9SZWN0IFsyMTIuNzIyNSAxNDIuODY5NCAyMjEu
MzU0MyAxNTQuOTE2MV0KL1N1YnR5cGUgL0xpbmsKL0EgPDwgL1MgL0dvVG8gL0QgKEhmb290bm90
ZS42KSA+Pgo+PiBlbmRvYmoKNTg5IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAx
XS9IL0kvQ1sxIDAgMF0KL1JlY3QgWzI2Ny43OTk3IDE0Mi44Njk0IDI3Ni40MzE1IDE1NC45MTYx
XQovU3VidHlwZSAvTGluawovQSA8PCAvUyAvR29UbyAvRCAoSGZvb3Rub3RlLjcpID4+Cj4+IGVu
ZG9iago1OTEgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAx
XQovUmVjdCBbMTAzLjM1IDkzLjUxMjYgMzI1LjQwODUgMTA1LjI5MDNdCi9TdWJ0eXBlL0xpbmsv
QTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwOi8vd3d3LnN1bi5jb20vZG93bmxvYWQvcHJv
ZHVjdHMueG1sP2lkPTQxNzk3NzY1KT4+Cj4+IGVuZG9iago1OTMgMCBvYmogPDwKL1R5cGUgL0Fu
bm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAxXQovUmVjdCBbMTAzLjM1IDgzLjcyNzUgMjcw
Ljg5MDIgOTUuNTA1Ml0KL1N1YnR5cGUvTGluay9BPDwvVHlwZS9BY3Rpb24vUy9VUkkvVVJJKGh0
dHA6Ly9saXBmb3JnZS5lbnMtbHlvbi5mci93d3cvY3JsaWJtLyk+Pgo+PiBlbmRvYmoKNTk1IDAg
b2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzEw
My4zNSA3My45NDIzIDE4OS45ODMzIDg1LjcyXQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlv
bi9TL1VSSS9VUkkoaHR0cDovL3d3dy5tcGZyLm9yZy8pPj4KPj4gZW5kb2JqCjU3MSAwIG9iaiA8
PAovRCBbNTY5IDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9iago1NzIgMCBvYmog
PDwKL0QgWzU2OSAwIFIgL1hZWiA5MCA2ODMuMTM4MiBudWxsXQo+PiBlbmRvYmoKNTczIDAgb2Jq
IDw8Ci9EIFs1NjkgMCBSIC9YWVogOTAgNjg0LjEzNDUgbnVsbF0KPj4gZW5kb2JqCjU3NCAwIG9i
aiA8PAovRCBbNTY5IDAgUiAvWFlaIDkwIDYxNy4xNjU2IG51bGxdCj4+IGVuZG9iago1NzUgMCBv
YmogPDwKL0QgWzU2OSAwIFIgL1hZWiA5MCA2MTkuMzc3MyBudWxsXQo+PiBlbmRvYmoKNTc2IDAg
b2JqIDw8Ci9EIFs1NjkgMCBSIC9YWVogOTAgNTUyLjQwODUgbnVsbF0KPj4gZW5kb2JqCjU3NyAw
IG9iaiA8PAovRCBbNTY5IDAgUiAvWFlaIDkwIDU1NC42MjAyIG51bGxdCj4+IGVuZG9iago1Nzgg
MCBvYmogPDwKL0QgWzU2OSAwIFIgL1hZWiA5MCA1NDMuNjYxMyBudWxsXQo+PiBlbmRvYmoKNTc5
IDAgb2JqIDw8Ci9EIFs1NjkgMCBSIC9YWVogOTAgNDQyLjkzOSBudWxsXQo+PiBlbmRvYmoKNTgw
IDAgb2JqIDw8Ci9EIFs1NjkgMCBSIC9YWVogOTAgNDQzLjAzODYgbnVsbF0KPj4gZW5kb2JqCjU4
MSAwIG9iaiA8PAovRCBbNTY5IDAgUiAvWFlaIDkwIDQzMi4wNzk3IG51bGxdCj4+IGVuZG9iago3
NCAwIG9iaiA8PAovRCBbNTY5IDAgUiAvWFlaIDkwIDM4My4wNDM2IG51bGxdCj4+IGVuZG9iago1
ODIgMCBvYmogPDwKL0QgWzU2OSAwIFIgL1hZWiA5MCAzNTIuNTk3OCBudWxsXQo+PiBlbmRvYmoK
NTgzIDAgb2JqIDw8Ci9EIFs1NjkgMCBSIC9YWVogOTAgMzU0LjYyMDIgbnVsbF0KPj4gZW5kb2Jq
CjgxIDAgb2JqIDw8Ci9EIFs1NjkgMCBSIC9YWVogOTAgMjYxLjQ0NjkgbnVsbF0KPj4gZW5kb2Jq
CjU5MCAwIG9iaiA8PAovRCBbNTY5IDAgUiAvWFlaIDEwNC4zNDYyIDEwNi44MTI4IG51bGxdCj4+
IGVuZG9iago1OTIgMCBvYmogPDwKL0QgWzU2OSAwIFIgL1hZWiAxMDQuMzQ2MiA5Ny4wMjc2IG51
bGxdCj4+IGVuZG9iago1OTQgMCBvYmogPDwKL0QgWzU2OSAwIFIgL1hZWiAxMDQuMzQ2MiA4Ny4y
NDI1IG51bGxdCj4+IGVuZG9iago1NjggMCBvYmogPDwKL0ZvbnQgPDwgL0YxMTIgMjIwIDAgUiAv
RjgxIDExMiAwIFIgL0Y4NyAxMTggMCBSIC9GOTAgMTMwIDAgUiAvRjExNiA1ODYgMCBSIC9GMTAx
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
MCBSIDYyNCAwIFIgXQo+PiBlbmRvYmoKNjIzIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVy
WzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzQ3NS40NjA4IDMxMi40NDU4IDUxMy45OTYzIDMy
My41NjQxXQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0cDovL3d3
dy1zb3AuaW5yaWEuZnIvZ2VvbWV0cmljYS90ZWFtL1N5bHZhaW4uUGlvbi9jeHgvKT4+Cj4+IGVu
ZG9iago2MjQgMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAx
XQovUmVjdCBbODkuMDAzNyAzMDAuNDkwNyAzNTIuNTE1MSAzMTEuNjA4OV0KL1N1YnR5cGUvTGlu
ay9BPDwvVHlwZS9BY3Rpb24vUy9VUkkvVVJJKGh0dHA6Ly93d3ctc29wLmlucmlhLmZyL2dlb21l
dHJpY2EvdGVhbS9TeWx2YWluLlBpb24vY3h4Lyk+Pgo+PiBlbmRvYmoKNTk5IDAgb2JqIDw8Ci9E
IFs1OTcgMCBSIC9YWVogOTAgNzA4LjA0NDggbnVsbF0KPj4gZW5kb2JqCjYwMCAwIG9iaiA8PAov
RCBbNTk3IDAgUiAvWFlaIDkwIDY4My4xMzgyIG51bGxdCj4+IGVuZG9iago2MDEgMCBvYmogPDwK
L0QgWzU5NyAwIFIgL1hZWiA5MCA2ODQuMTM0NSBudWxsXQo+PiBlbmRvYmoKNjAyIDAgb2JqIDw8
Ci9EIFs1OTcgMCBSIC9YWVogOTAgNjczLjE3NTYgbnVsbF0KPj4gZW5kb2JqCjYwMyAwIG9iaiA8
PAovRCBbNTk3IDAgUiAvWFlaIDkwIDY2Mi4yMTY3IG51bGxdCj4+IGVuZG9iago2MDQgMCBvYmog
PDwKL0QgWzU5NyAwIFIgL1hZWiA5MCA2NTEuMjU3OCBudWxsXQo+PiBlbmRvYmoKNjA1IDAgb2Jq
IDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNjQwLjI5ODkgbnVsbF0KPj4gZW5kb2JqCjYwNiAwIG9i
aiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDYyOS4zNCBudWxsXQo+PiBlbmRvYmoKNjA3IDAgb2Jq
IDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNjE4LjM4MTEgbnVsbF0KPj4gZW5kb2JqCjYwOCAwIG9i
aiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDYwNy40MjIxIG51bGxdCj4+IGVuZG9iago2MDkgMCBv
YmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCA1OTYuNDYzMiBudWxsXQo+PiBlbmRvYmoKNjEwIDAg
b2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNTg1LjUwNDMgbnVsbF0KPj4gZW5kb2JqCjYxMSAw
IG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDU3NC41NDU0IG51bGxdCj4+IGVuZG9iago2MTIg
MCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCA1NjMuNTg2NSBudWxsXQo+PiBlbmRvYmoKNjEz
IDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNTUyLjYyNzYgbnVsbF0KPj4gZW5kb2JqCjYx
NCAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDU0MS42Njg3IG51bGxdCj4+IGVuZG9iago2
MTUgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCA1MzAuNzA5OCBudWxsXQo+PiBlbmRvYmoK
NjE2IDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNTE5Ljc1MDkgbnVsbF0KPj4gZW5kb2Jq
CjYxNyAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDUwOC43OTIgbnVsbF0KPj4gZW5kb2Jq
CjYxOCAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDQ5Ny44MzMxIG51bGxdCj4+IGVuZG9i
ago2MTkgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCA0ODYuODc0MiBudWxsXQo+PiBlbmRv
YmoKNjIwIDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNDc1LjkxNTMgbnVsbF0KPj4gZW5k
b2JqCjYyMSAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDQ2NC45NTY0IG51bGxdCj4+IGVu
ZG9iago2MjIgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCA0NTMuOTk3NSBudWxsXQo+PiBl
bmRvYmoKODUgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCA0MTguMzE4NyBudWxsXQo+PiBl
bmRvYmoKODkgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCAyODYuOTkgbnVsbF0KPj4gZW5k
b2JqCjYyNSAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDIxNC43OTQ2IG51bGxdCj4+IGVu
ZG9iago2MjYgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCAyMTQuODk0MSBudWxsXQo+PiBl
bmRvYmoKNjI3IDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgMjAzLjkzNTIgbnVsbF0KPj4g
ZW5kb2JqCjYyOCAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDE5Mi45NzYzIG51bGxdCj4+
IGVuZG9iago2MjkgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCAxODIuMDE3NCBudWxsXQo+
PiBlbmRvYmoKNjMwIDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgMTcxLjA1ODUgbnVsbF0K
Pj4gZW5kb2JqCjYzMSAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDE2MC4wOTk2IG51bGxd
Cj4+IGVuZG9iago2MzIgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCAxNDkuMTQwNyBudWxs
XQo+PiBlbmRvYmoKNjMzIDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgMTM4LjE4MTggbnVs
bF0KPj4gZW5kb2JqCjYzNCAwIG9iaiA8PAovRCBbNTk3IDAgUiAvWFlaIDkwIDEyNy4yMjI5IG51
bGxdCj4+IGVuZG9iago2MzUgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCAxMTYuMjY0IG51
bGxdCj4+IGVuZG9iago2MzYgMCBvYmogPDwKL0QgWzU5NyAwIFIgL1hZWiA5MCAxMDUuMzA1MSBu
dWxsXQo+PiBlbmRvYmoKNjM3IDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgOTQuMzQ2MiBu
dWxsXQo+PiBlbmRvYmoKNjM4IDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgODMuMzg3MyBu
dWxsXQo+PiBlbmRvYmoKNjM5IDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNzIuNDI4NCBu
dWxsXQo+PiBlbmRvYmoKNjQwIDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNjEuNDY5NSBu
dWxsXQo+PiBlbmRvYmoKNjQxIDAgb2JqIDw8Ci9EIFs1OTcgMCBSIC9YWVogOTAgNTAuNTEwNiBu
dWxsXQo+PiBlbmRvYmoKNTk2IDAgb2JqIDw8Ci9Gb250IDw8IC9GMTEyIDIyMCAwIFIgL0YxMDEg
MTYyIDAgUiAvRjg3IDExOCAwIFIgL0YxMTYgNTg2IDAgUiAvRjgxIDExMiAwIFIgL0Y5MCAxMzAg
MCBSID4+Ci9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdCj4+IGVuZG9iago2NDQgMCBvYmogPDwKL0xl
bmd0aCAzMTg3ICAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42t0a25LstPGd
r9gn4iGM0c2yfRaoghRUnVSlqISt5IEcKO+Md8fFjD34cpYl5N/TF8kjebzASXjKw7QlWS31Td3t
1nx+995HX0qpboq0tNbc3D3cSKlTYay+sblOZZ7Zm7v9N8kHm63UMuk227xIGoIjDJki+eNma0uE
eaaST+CR62S32ZYymQCqpKc2w5pgS5DQTXK7eXP35xuRap1nN1sp0jIrStoSUIqSUAROhvZEsKcR
WCQvcyKoDAjSwq24lTK1yph4zX/jO+BYyJBjmFjcbJVMS5kXNO+jzVZpgw9TZMkXx6HeSJl8CKOZ
SPYdP8dD7Qaa3UZmyaEbu9MzD/UbnSf1buo3UiRD87Y+Pm+yLEnd/pHEtzLVsHNM6eBZArhnSb+C
jkAodZmcSewVDTXUBrlIkPfHIKQ8eQ0dpZDiXFrf+5SVxNPP2JGsMZXck2gbggMJuKb2jiDpSiX/
FJlgre1ItVOg2qWCFSFZiUiSNrxdlz2z/rLwvx67M8u0eYCnKZMnJ/Zd1f5ho8k4llpofnJzqvb5
1LEy8OVL8je5WFgfC+mBJeYZJwmVliRkk+/mdu7GW4KPNHKkdk1wpJHOz8GF3JIqUAd2UnwrcN/C
kjpyOgc5bgNwZOWzTJGynwn5ZzwFNiAuD4izAXE5EWcD4mhNaP9m4tSKfXT+SEIbjdWKi9o9rTL5
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
NDIgMCBSCi9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCi9QYXJlbnQgNjg2IDAgUgo+PiBlbmRvYmoK
NjQ1IDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNzA4LjA0NDggbnVsbF0KPj4gZW5kb2Jq
CjY0NiAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDY4NC4xMzQ1IG51bGxdCj4+IGVuZG9i
ago2NDcgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA2NzMuMTc1NiBudWxsXQo+PiBlbmRv
YmoKNjQ4IDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNjYyLjIxNjcgbnVsbF0KPj4gZW5k
b2JqCjY0OSAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDY1MS4yNTc4IG51bGxdCj4+IGVu
ZG9iago2NTAgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA2NDAuMjk4OSBudWxsXQo+PiBl
bmRvYmoKNjUxIDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNjI5LjM0IG51bGxdCj4+IGVu
ZG9iago2NTIgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA2MTguMzgxMSBudWxsXQo+PiBl
bmRvYmoKNjUzIDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNjA3LjQyMjEgbnVsbF0KPj4g
ZW5kb2JqCjY1NCAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDU5Ni40NjMyIG51bGxdCj4+
IGVuZG9iago2NTUgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA1ODUuNTA0MyBudWxsXQo+
PiBlbmRvYmoKNjU2IDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNTc0LjU0NTQgbnVsbF0K
Pj4gZW5kb2JqCjY1NyAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDU2My41ODY1IG51bGxd
Cj4+IGVuZG9iago2NTggMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA1NTIuNjI3NiBudWxs
XQo+PiBlbmRvYmoKNjU5IDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNTQxLjY2ODcgbnVs
bF0KPj4gZW5kb2JqCjY2MCAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDUzMC43MDk4IG51
bGxdCj4+IGVuZG9iago2NjEgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA1MTkuNzUwOSBu
dWxsXQo+PiBlbmRvYmoKNjYyIDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNDY0Ljc5MjEg
bnVsbF0KPj4gZW5kb2JqCjY2MyAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDQ2Ni45NDg5
IG51bGxdCj4+IGVuZG9iago2NjQgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA0NTUuOTkg
bnVsbF0KPj4gZW5kb2JqCjY2NSAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDQ0NS4wMzEx
IG51bGxdCj4+IGVuZG9iago2NjYgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA0MzQuMDcy
MiBudWxsXQo+PiBlbmRvYmoKNjY3IDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgNDIzLjEx
MzMgbnVsbF0KPj4gZW5kb2JqCjY2OCAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDQxMi4x
NTQ0IG51bGxdCj4+IGVuZG9iago2NjkgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCA0MDEu
MTk1NSBudWxsXQo+PiBlbmRvYmoKNjcwIDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAgMzkw
LjIzNjYgbnVsbF0KPj4gZW5kb2JqCjY3MSAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkwIDM3
OS4yNzc3IG51bGxdCj4+IGVuZG9iago2NzIgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5MCAz
NjguMzE4OCBudWxsXQo+PiBlbmRvYmoKNjczIDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVogOTAg
MzU3LjM1OTkgbnVsbF0KPj4gZW5kb2JqCjY3NCAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkw
IDM0Ni40MDEgbnVsbF0KPj4gZW5kb2JqCjY3NSAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFlaIDkw
IDMzNS40NDIxIG51bGxdCj4+IGVuZG9iago2NzYgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5
MCAzMjQuNDgzMiBudWxsXQo+PiBlbmRvYmoKOTMgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5
MCAyNjIuOTg4OSBudWxsXQo+PiBlbmRvYmoKNjc3IDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVog
OTAgMTM0LjcyIG51bGxdCj4+IGVuZG9iago2NzggMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZWiA5
MCAxMzQuODE5NSBudWxsXQo+PiBlbmRvYmoKNjc5IDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9YWVog
OTAgMTIzLjg2MDYgbnVsbF0KPj4gZW5kb2JqCjY4MCAwIG9iaiA8PAovRCBbNjQzIDAgUiAvWFla
IDkwIDExMi45MDE3IG51bGxdCj4+IGVuZG9iago2ODEgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZ
WiA5MCAxMDEuOTQyOCBudWxsXQo+PiBlbmRvYmoKNjgyIDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9Y
WVogOTAgOTAuOTgzOSBudWxsXQo+PiBlbmRvYmoKNjgzIDAgb2JqIDw8Ci9EIFs2NDMgMCBSIC9Y
WVogOTAgODAuMDI1IG51bGxdCj4+IGVuZG9iago2ODQgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZ
WiA5MCA2OS4wNjYxIG51bGxdCj4+IGVuZG9iago2ODUgMCBvYmogPDwKL0QgWzY0MyAwIFIgL1hZ
WiA5MCA1OC4xMDcyIG51bGxdCj4+IGVuZG9iago2NDIgMCBvYmogPDwKL0ZvbnQgPDwgL0YxMTIg
MjIwIDAgUiAvRjEwMSAxNjIgMCBSIC9GODEgMTEyIDAgUiAvRjkwIDEzMCAwIFIgL0Y4NyAxMTgg
MCBSID4+Ci9Qcm9jU2V0IFsgL1BERiAvVGV4dCBdCj4+IGVuZG9iago2ODkgMCBvYmogPDwKL0xl
bmd0aCAyNDUyICAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42uVZS5PbNhK+
+1dMbtTaYgA+ADJ2tsqpTaqSy9Y6syeva4qSqBErFKmQ1Dyc7H/ffgAQSFHzuOwllxYEEg308+sG
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
EkmpU3GRJMms/zwr7XOF71hCQC/IrOlcod55Sito/BuryysdhMxfWTrYZ9mrSw7A8BzUGylSr4DS
NsLPATGAnkgY1W8XUEpUDeBELCBC+B4Yb6AA9rDMoK8NeDtl5u+74nCgS1ecxAIkt/mdog2WPBT7
Q20m1u3GjKAU2VfDYJfeV8OOR6c9D117aHu6u83xPrmi2h0eFPyz6apFlAajcw27YjCri66HQsfe
N0NdlUINwNGApzp0ZY9lv3elbbeAvz+0bT+E/aHqquF0p100G3uR3G6Oa1tHFbbwOg6H42A7j31V
F+bbzDAFvm1b1y0e/t7tyIu/m4sEEUIniFWrCvNYpS6kKfzcRVhpfU5zWwG+u3O3azm5s0tJe0pJ
K6+n7fgzRutSLCS0OwL/wisWKnfJl9BtMEWgKyLoqk9RLw6xFM3d9b/u2Bn44J13r9i5qzc7s6Jx
bb96ZpISrYu3vYdIvU0McZxPEsOr9tAwJexdLyLRw5ygr2YpfZaPLpjPD/v/sDzb83eiR+cFfMmb
TO8+2fKaq0UtiIfWcwfhOu2Rtu1tbeY+m+2xaMoQj7VPuezjSxzUjcnEv/M/75EM/nW6luCaV+UM
uDG+niWmQWCQH9gfQLNaTnJp5NQvRDwpxK5p8SOxO5yAJ4VFdFZu6x/oU8mBxucfzPljSzXurvmp
5iljCqPG3A+J6Cwu7W30E3GJy8aKPUeESKShVgQJeZhl2uhC4Ktvfrx+8z839aWKZW5kc3RyZWFt
CmVuZG9iago2ODggMCBvYmogPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDY4OSAwIFIKL1Jlc291
cmNlcyA2ODcgMCBSCi9NZWRpYUJveCBbMCAwIDYxMiA3OTJdCi9QYXJlbnQgNjg2IDAgUgo+PiBl
bmRvYmoKNjkwIDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNzA4LjA0NDggbnVsbF0KPj4g
ZW5kb2JqCjY5MSAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDY4NC4xMzQ1IG51bGxdCj4+
IGVuZG9iago2OTIgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCA2NzMuMTc1NiBudWxsXQo+
PiBlbmRvYmoKNjkzIDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNjYyLjIxNjcgbnVsbF0K
Pj4gZW5kb2JqCjY5NCAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDY1MS4yNTc4IG51bGxd
Cj4+IGVuZG9iago2OTUgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCA2NDAuMjk4OSBudWxs
XQo+PiBlbmRvYmoKNjk2IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNjI5LjM0IG51bGxd
Cj4+IGVuZG9iago2OTcgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCA2MTguMzgxMSBudWxs
XQo+PiBlbmRvYmoKNjk4IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNjA3LjQyMjEgbnVs
bF0KPj4gZW5kb2JqCjY5OSAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDU5Ni40NjMyIG51
bGxdCj4+IGVuZG9iago3MDAgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCA1ODUuNTA0MyBu
dWxsXQo+PiBlbmRvYmoKNzAxIDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNTc0LjU0NTQg
bnVsbF0KPj4gZW5kb2JqCjcwMiAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDU2My41ODY1
IG51bGxdCj4+IGVuZG9iago3MDMgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCA1NTIuNjI3
NiBudWxsXQo+PiBlbmRvYmoKNzA0IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNTQxLjY2
ODcgbnVsbF0KPj4gZW5kb2JqCjcwNSAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDUzMC43
MDk4IG51bGxdCj4+IGVuZG9iago3MDYgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCA1MTku
NzUwOSBudWxsXQo+PiBlbmRvYmoKNzA3IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNTA4
Ljc5MiBudWxsXQo+PiBlbmRvYmoKNzA4IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNDk3
LjgzMzEgbnVsbF0KPj4gZW5kb2JqCjcwOSAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDQ4
Ni44NzQyIG51bGxdCj4+IGVuZG9iago3MTAgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCA0
NzUuOTE1MyBudWxsXQo+PiBlbmRvYmoKNzExIDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAg
NDY0Ljk1NjQgbnVsbF0KPj4gZW5kb2JqCjcxMiAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFlaIDkw
IDQ1My45OTc1IG51bGxdCj4+IGVuZG9iago3MTMgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5
MCA0NDMuMDM4NiBudWxsXQo+PiBlbmRvYmoKNzE0IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9YWVog
OTAgNDMyLjA3OTcgbnVsbF0KPj4gZW5kb2JqCjcxNSAwIG9iaiA8PAovRCBbNjg4IDAgUiAvWFla
IDkwIDQyMS4xMjA4IG51bGxdCj4+IGVuZG9iago3MTYgMCBvYmogPDwKL0QgWzY4OCAwIFIgL1hZ
WiA5MCA0MTAuMTYxOSBudWxsXQo+PiBlbmRvYmoKNzE3IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9Y
WVogOTAgMzk5LjIwMyBudWxsXQo+PiBlbmRvYmoKNzE4IDAgb2JqIDw8Ci9EIFs2ODggMCBSIC9Y
WVogOTAgMzg4LjI0NDEgbnVsbF0KPj4gZW5kb2JqCjcxOSAwIG9iaiA8PAovRCBbNjg4IDAgUiAv
WFlaIDkwIDM3Ny4yODUyIG51bGxdCj4+IGVuZG9iago3MjAgMCBvYmogPDwKL0QgWzY4OCAwIFIg
L1hZWiA5MCAzNjYuMzI2MyBudWxsXQo+PiBlbmRvYmoKNzIxIDAgb2JqIDw8Ci9EIFs2ODggMCBS
IC9YWVogOTAgMzU1LjM2NzQgbnVsbF0KPj4gZW5kb2JqCjcyMiAwIG9iaiA8PAovRCBbNjg4IDAg
UiAvWFlaIDkwIDM0NC40MDg1IG51bGxdCj4+IGVuZG9iago3MjMgMCBvYmogPDwKL0QgWzY4OCAw
IFIgL1hZWiA5MCAzMzMuNDQ5NSBudWxsXQo+PiBlbmRvYmoKNzI0IDAgb2JqIDw8Ci9EIFs2ODgg
MCBSIC9YWVogOTAgMzIyLjQ5MDYgbnVsbF0KPj4gZW5kb2JqCjcyNSAwIG9iaiA8PAovRCBbNjg4
IDAgUiAvWFlaIDkwIDMxMS41MzE3IG51bGxdCj4+IGVuZG9iago3MjYgMCBvYmogPDwKL0QgWzY4
OCAwIFIgL1hZWiA5MCAzMDAuNTcyOCBudWxsXQo+PiBlbmRvYmoKNzI3IDAgb2JqIDw8Ci9EIFs2
ODggMCBSIC9YWVogOTAgMjg5LjYxMzkgbnVsbF0KPj4gZW5kb2JqCjcyOCAwIG9iaiA8PAovRCBb
Njg4IDAgUiAvWFlaIDkwIDI3OC42NTUgbnVsbF0KPj4gZW5kb2JqCjcyOSAwIG9iaiA8PAovRCBb
Njg4IDAgUiAvWFlaIDkwIDI2Ny42OTYxIG51bGxdCj4+IGVuZG9iago3MzAgMCBvYmogPDwKL0Qg
WzY4OCAwIFIgL1hZWiA5MCAyNTYuNzM3MiBudWxsXQo+PiBlbmRvYmoKNzMxIDAgb2JqIDw8Ci9E
IFs2ODggMCBSIC9YWVogOTAgMjQ1Ljc3ODMgbnVsbF0KPj4gZW5kb2JqCjczMiAwIG9iaiA8PAov
RCBbNjg4IDAgUiAvWFlaIDkwIDIzNC44MTk0IG51bGxdCj4+IGVuZG9iago3MzMgMCBvYmogPDwK
L0QgWzY4OCAwIFIgL1hZWiA5MCAyMjMuODYwNSBudWxsXQo+PiBlbmRvYmoKNzM0IDAgb2JqIDw8
Ci9EIFs2ODggMCBSIC9YWVogOTAgMjEyLjkwMTYgbnVsbF0KPj4gZW5kb2JqCjczNSAwIG9iaiA8
PAovRCBbNjg4IDAgUiAvWFlaIDkwIDIwMS45NDI3IG51bGxdCj4+IGVuZG9iago3MzYgMCBvYmog
PDwKL0QgWzY4OCAwIFIgL1hZWiA5MCAxOTAuOTgzOCBudWxsXQo+PiBlbmRvYmoKNzM3IDAgb2Jq
IDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgMTgwLjAyNDkgbnVsbF0KPj4gZW5kb2JqCjczOCAwIG9i
aiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDE2OS4wNjYgbnVsbF0KPj4gZW5kb2JqCjczOSAwIG9i
aiA8PAovRCBbNjg4IDAgUiAvWFlaIDkwIDExNC4xMDcyIG51bGxdCj4+IGVuZG9iago3NDAgMCBv
YmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCAxMTYuMjY0IG51bGxdCj4+IGVuZG9iago3NDEgMCBv
YmogPDwKL0QgWzY4OCAwIFIgL1hZWiA5MCAxMDUuMzA1MSBudWxsXQo+PiBlbmRvYmoKNzQyIDAg
b2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgOTQuMzQ2MiBudWxsXQo+PiBlbmRvYmoKNzQzIDAg
b2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgODMuMzg3MyBudWxsXQo+PiBlbmRvYmoKNzQ0IDAg
b2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNzIuNDI4NCBudWxsXQo+PiBlbmRvYmoKNzQ1IDAg
b2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNjEuNDY5NSBudWxsXQo+PiBlbmRvYmoKNzQ2IDAg
b2JqIDw8Ci9EIFs2ODggMCBSIC9YWVogOTAgNTAuNTEwNiBudWxsXQo+PiBlbmRvYmoKNjg3IDAg
b2JqIDw8Ci9Gb250IDw8IC9GMTEyIDIyMCAwIFIgL0YxMDEgMTYyIDAgUiAvRjgxIDExMiAwIFIg
Pj4KL1Byb2NTZXQgWyAvUERGIC9UZXh0IF0KPj4gZW5kb2JqCjc0OSAwIG9iaiA8PAovTGVuZ3Ro
IDI5NTAgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja7VpNe9s2Er73V/hI
dSua+CBBpKckddJkk2y39tN99klzoCRa5oYiVZKy6x72t+98gBQo0Ymc7m4vPQgYDIDBYOadwVjy
s6uvzl8IIc/S0CaJPru6PhORDCOtzhKjQmHi5Oxq9T7IZ/NUBb9Cq4Mt0c1sLlQSPJnNjdI4IyId
fI1djCOjVPAXnrtn5te8BEYmFsEcOmECPftw9fpMiFDFxpzBgtDGqaUj4RgrgoxaOMzKoCW6oLai
dg2qiIQmdLCjdgmtolaj1kO7GtF46nzy2M/d9OcojoBt6MqxwYvAQECb4Jyg4dfU8lIhJa3VKV06
xbXQ8lqTCDaT2gu+PxRsHhZ8/5DgVCjkxvKPNbGUYSKUODaxQfHQdmQ45oAKxibIgmvcUJsjKw0W
MG+DmlrUIaLdFk+EtsWlNJ3Y4BoGsPFASBrxrRTdSuE03DYnuqH2ltqM+CVvWNDumlqENMzUhItb
wkXeowPX3tENbug2BdHLnmP4mollUaQvtDndIyO6oXZJHNxhDd2jP7xhK/xG87m3o/Y4LUJBAkyd
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
dde5meEPdvzZzvD3GxGcuw+Ocb5289hX8AndHI5L+Nw7HpaTK6xP3f5/u/0LKjP3MneOh3sL4rvf
zJ1mo3d14Q7CT+sUgT+94FEunDqdOxqPuMUC0YnmVY1btYRP7JTo3Lj1LoOKX0+4f76Hq1fdvFde
4AHzKPCUNhR4OOcHnuoDDycuQ367XOAlEPsUdyTQlf3yMLSQ44cWChiV3Mc+h5QDd9DiBJ/feR9+
2EBl8ItN9Of9Erox2nztBPZOXrh1584fCIKN57nC+eTc0Z/y7LnzV/2IPaEDY0fnnuxn7fz8/vnL
p28+cFZGcvKlSZMwUkNocRRTruJaJcJ6DrzWPyhPy3VNjnT1NBYB+OaiJyfyUCpCIVI7vCTHfobj
zfDUnO5lNuL6wFhjR04YTBoVyqMXKXYGu5oZjclcQiL6vli6Oh9ud888LlSA+DstksHr3cHE2363
671SDUYXmxUVZlqpw6IWhQwBguVhLIMXXArDOZg3lwUUpi0vpVoM+mIDPKykyGOT/p18uV7juaHz
6Ayq7udvp+oAG6apSfePCC7XKaZ2jXn9iYhU+jNUCyJKUjcto0i4GNRJqNM4PgBn8uFTWrp6h2zT
A9DD5FSVlQKphflfQazPtzsvTrcPPB6nZfelA+rGSZoEKhQ0YSKS5ACpxiH1DTpPJMHrbFcWVOtL
xeATJvhrAX9WgIOxPNVR4Gb/5rZ8V6wAaI7JwIU9F26W6visxBojHhLz2Ffg4tAKyK1s0KfbbVlQ
RQ3bPc+B0KeQRO7bonWH3QG+ednFr9nGoRlGVIbDcqpRM04nEAegAv/jSwoluEgPIOz+kqOSuHN/
/1+0HbxlCBSHxh/rBZYZu7broVR1YJM4qB22BimwsobIm/xWLFKhkrEZl8OXGJNr0BHkzznM86bM
1sdxINJQpeBIbcIErktCJP1Tz1cXV1/9Bz0nbullbmRzdHJlYW0KZW5kb2JqCjc0OCAwIG9iaiA8
PAovVHlwZSAvUGFnZQovQ29udGVudHMgNzQ5IDAgUgovUmVzb3VyY2VzIDc0NyAwIFIKL01lZGlh
Qm94IFswIDAgNjEyIDc5Ml0KL1BhcmVudCA2ODYgMCBSCi9Bbm5vdHMgWyA3NzEgMCBSIDc3MiAw
IFIgNzc0IDAgUiA3NzUgMCBSIDc3NyAwIFIgNzgwIDAgUiBdCj4+IGVuZG9iago3NzEgMCBvYmog
PDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAxXQovUmVjdCBbMzM0LjUw
OTcgMTkxLjU2MTggNTEzLjk5NjMgMjAyLjY4XQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlv
bi9TL1VSSS9VUkkoaHR0cDovL3Bob3Rvbi5wb2x5LmVkdS9+aGJyL3B1YmxpL2Jvb3N0LWludGVy
dmFsLXJuYzUvdGNzLnBkZik+Pgo+PiBlbmRvYmoKNzcyIDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAov
Qm9yZGVyWzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzExMC41ODI3IDE3OS42MDY3IDI1NC41
MjI3IDE5MC43MjQ5XQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0
cDovL3Bob3Rvbi5wb2x5LmVkdS9+aGJyL3B1YmxpL2Jvb3N0LWludGVydmFsLXJuYzUvdGNzLnBk
Zik+Pgo+PiBlbmRvYmoKNzc0IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9I
L0kvQ1swIDEgMV0KL1JlY3QgWzQ1NC41NzkyIDE2MS42NzM5IDUxMy45OTYzIDE3Mi43OTIxXQov
U3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0cDovL3d3dy5ib29zdC5v
cmcvbGlicy9udW1lcmljL2ludGVydmFsL2RvYy9pbnRlcnZhbC5odG0pPj4KPj4gZW5kb2JqCjc3
NSAwIG9iaiA8PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0
IFsxMTAuNTgyNyAxNDkuNzE4NyAzNjMuMTU1MSAxNjAuODM3XQovU3VidHlwZS9MaW5rL0E8PC9U
eXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9udW1lcmljL2lu
dGVydmFsL2RvYy9pbnRlcnZhbC5odG0pPj4KPj4gZW5kb2JqCjc3NyAwIG9iaiA8PAovVHlwZSAv
QW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFszNjcuMjE4IDEzMS43ODYg
NDczLjYxODggMTQyLjkwNDJdCi9TdWJ0eXBlL0xpbmsvQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VS
SShodHRwOi8vd3d3LmNnYWwub3JnLyk+Pgo+PiBlbmRvYmoKNzgwIDAgb2JqIDw8Ci9UeXBlIC9B
bm5vdAovQm9yZGVyWzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzIwNi42MDE2IDgzLjk2NTMg
NDAyLjI0NzYgOTUuMDgzNV0KL1N1YnR5cGUvTGluay9BPDwvVHlwZS9BY3Rpb24vUy9VUkkvVVJJ
KGh0dHA6Ly93d3cuY3MudXRlcC5lZHUvaW50ZXJ2YWwtY29tcC8pPj4KPj4gZW5kb2JqCjc1MCAw
IG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDcwOC4wNDQ4IG51bGxdCj4+IGVuZG9iago3NTEg
MCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCA2ODQuMTM0NSBudWxsXQo+PiBlbmRvYmoKNzUy
IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgNjczLjE3NTYgbnVsbF0KPj4gZW5kb2JqCjc1
MyAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDY2Mi4yMTY3IG51bGxdCj4+IGVuZG9iago3
NTQgMCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCA2NTEuMjU3OCBudWxsXQo+PiBlbmRvYmoK
NzU1IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgNjQwLjI5ODkgbnVsbF0KPj4gZW5kb2Jq
Cjc1NiAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDYyOS4zNCBudWxsXQo+PiBlbmRvYmoK
NzU3IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgNjE4LjM4MTEgbnVsbF0KPj4gZW5kb2Jq
Cjc1OCAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDYwNy40MjIxIG51bGxdCj4+IGVuZG9i
ago3NTkgMCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCA1OTYuNDYzMiBudWxsXQo+PiBlbmRv
YmoKNzYwIDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgNTg1LjUwNDMgbnVsbF0KPj4gZW5k
b2JqCjc2MSAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDU3NC41NDU0IG51bGxdCj4+IGVu
ZG9iago3NjIgMCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCA1NjMuNTg2NSBudWxsXQo+PiBl
bmRvYmoKNzYzIDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgNTUyLjYyNzYgbnVsbF0KPj4g
ZW5kb2JqCjc2NCAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDU0MS42Njg3IG51bGxdCj4+
IGVuZG9iago3NjUgMCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCA1MzAuNzA5OCBudWxsXQo+
PiBlbmRvYmoKNzY2IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgNTE5Ljc1MDkgbnVsbF0K
Pj4gZW5kb2JqCjc2NyAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDUwOC43OTIgbnVsbF0K
Pj4gZW5kb2JqCjk3IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgNDcyLjg3NjcgbnVsbF0K
Pj4gZW5kb2JqCjc2OCAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDI1NC4zNzM2IG51bGxd
Cj4+IGVuZG9iagoxMDEgMCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCAyNTQuMzczNiBudWxs
XQo+PiBlbmRvYmoKNzY5IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgMjU0LjM3MzYgbnVs
bF0KPj4gZW5kb2JqCjc3MCAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDIzNC41NzU1IG51
bGxdCj4+IGVuZG9iago3NzMgMCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCAxODAuNjAyOSBu
dWxsXQo+PiBlbmRvYmoKNzc2IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgMTUwLjcxNSBu
dWxsXQo+PiBlbmRvYmoKNzc4IDAgb2JqIDw8Ci9EIFs3NDggMCBSIC9YWVogOTAgMTMyLjc4MjIg
bnVsbF0KPj4gZW5kb2JqCjc3OSAwIG9iaiA8PAovRCBbNzQ4IDAgUiAvWFlaIDkwIDEwMy4zMjI4
IG51bGxdCj4+IGVuZG9iago3ODEgMCBvYmogPDwKL0QgWzc0OCAwIFIgL1hZWiA5MCA4NC45NjE2
IG51bGxdCj4+IGVuZG9iago3NDcgMCBvYmogPDwKL0ZvbnQgPDwgL0YxMTIgMjIwIDAgUiAvRjg3
IDExOCAwIFIgL0Y4MSAxMTIgMCBSIC9GMTAxIDE2MiAwIFIgL0Y5MCAxMzAgMCBSID4+Ci9Qcm9j
U2V0IFsgL1BERiAvVGV4dCBdCj4+IGVuZG9iago3ODQgMCBvYmogPDwKL0xlbmd0aCAxMjg2ICAg
ICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42rVWS3PbNhC+51foSE5KGA+CIHqz
PZZjO3I8tlofkkyHpiiJLV/DR1xf+tu7IBYyrchu2pkedkgsFs/9vm9xsnx3NI/ZTBMd8Wi2XM90
SHTMxCxSgjAlwbf67H2Ov/qBpNT7RPyAK+FdVUPWNFkBzVAI7+bWD6FzfvHx6OTi+M7GBPZzbD9z
n0kv6Xrbuqj6rP3mc3AV1vMxf2iT9smPpEf8r8vLozmj033xkBGuZnTcz+mnxc0vy4vrcxv54gAR
JbGgMUb+6jOuvbrAfUvxk/nR3nWNHhGEoyv2GvRwpQIeK9yFppO5wS+JpILNAsaIlpKPi2x95vVo
DdjPYEdojxMjGJODiUl7AIPbCvU4UwLWgj1gj/nfYPQKLMOZ/wCrMCbDlRv8LzCmwfE12BpXtn3f
X1zAIiK1UvCjiBZw2WPqNaZ+Ya4nhkRlbbo1V6apd46+pS+kl3fptshag4Sxm3mX2H3vxxRysDb5
XhsX9yD34Kps//mwyqoHGMpib4Nj733NPWKDP9RrmHvo+hezJ9XKTe9CAZjtFxGGJQTKV4AkQkni
SHAECGD24uT9ezvawhIgCeNmgeCa8EjKl8k2QB2xDGD9/hIFJVxHOPchCEWEKuUW/zfAKREaJnaL
vgEhkO8A9IjeKRhaHJVg8veBVE9AZtr3YLdgd2BL9HUTEPW4KwdUN88UYDkCmOBuezxBcQh4EvAm
OXfAiy3wGEXk3ZrcSuqdJAB56kFux+aVgVOWtOu6763HIgJ+LOtx2FWb5VVtUvYtT7fW94VKmq06
Al/mByKi3nHTFHma9HlddTamXtvvnlaB57Qum6G3scQOvyqGx2d0QgzTOhrzD6l+SSjGduc6wy0u
6rrNDqJVhSTkVCJedvgcRx1XSfHU5d0hEVRE6TDe4XDc402bVX2eZsGHpChwm2fVpsjM2R7N1dY1
XuBpkVu2dhh3fbk7V4TnCljICWdS7OeN4/muzbpSe7fjApbxhd3KmCnTNzfS4OLqIS+K/A3uMgHV
SSt3rsXN/MIOZYTC/kSsvMVQ9HkDZxr9N60vlJeleZcbsTFLz4saMldtgptRlfKqt6HPd2tab7Oc
S04EhL3Bc01kFL7OcyswShLBYu0Eho3BrwlAhmTvdmQ3RHtCYlYYtUZSmhn+Qr8j6TeMddWhxO04
4v6GWzQx6Y+SlzMild7HgPh6sIhzEqnQXdt5UjsYXtdI4UtTSYaudwiv+63j+0vwv50gJmOiKQ//
DyF2Uuhqc4q3u96T0gzjK/zvD9Tk37Evxf4OYzYor/Wb9RoeKZEM5b6+hMi/u8HUV6ipizxt624E
S2DX6LOyO8wwSonkwjHsdKyMMMXk8pnyjtu835YZiIntBZqF0myWehublbIEitng22ydWRpWaXYo
V1oRKuhbuQKaqEj8QK5WE/R2k3wNE4akGFNOxjy4OzZPPEaEZHtVfzqxGRSDUbBoR0YFfxot/mei
uGRJTNY5ivS9qSFGBpPSKtH4eEqK8fHzqi5SbeDuiLXcZnaysz/7rFplK6fDCcrvROugdfcEk5eH
MhMKErNYPpcRxZi3SKqhS9u86VFyodTFzyWmaa2kGpU3km8rZ14kD06Uk/7g01pwAhUl/O9P6xKT
PU1+icl3ArrCtpPHDRKsRhB0exL5OHk3dbgP96ayeW8wYvra6n5QPFkM9UxoeHKHKiacRhYVnJvY
d2fLd38Di0I7eGVuZHN0cmVhbQplbmRvYmoKNzgzIDAgb2JqIDw8Ci9UeXBlIC9QYWdlCi9Db250
ZW50cyA3ODQgMCBSCi9SZXNvdXJjZXMgNzgyIDAgUgovTWVkaWFCb3ggWzAgMCA2MTIgNzkyXQov
UGFyZW50IDY4NiAwIFIKL0Fubm90cyBbIDc4NyAwIFIgNzg5IDAgUiA3OTMgMCBSIDc5NCAwIFIg
Nzk2IDAgUiA3OTggMCBSIDc5OSAwIFIgODAxIDAgUiBdCj4+IGVuZG9iago3ODcgMCBvYmogPDwK
L1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAxXQovUmVjdCBbMTEwLjU4Mjcg
NjU4LjAxMjUgMzQ3Ljk5MiA2NjkuMTMwN10KL1N1YnR5cGUvTGluay9BPDwvVHlwZS9BY3Rpb24v
Uy9VUkkvVVJJKGh0dHA6Ly93d3cudGkzLnR1LWhhcmJ1cmcuZGUva251ZXBwZWwvcHJvZmlsLyk+
Pgo+PiBlbmRvYmoKNzg5IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAgMCAxXS9IL0kv
Q1swIDEgMV0KL1JlY3QgWzE0Ni45NTYgNjI4LjEyNDUgNDY3Ljg5MTkgNjM5LjI0MjhdCi9TdWJ0
eXBlL0xpbmsvQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwOi8vd3d3Lm1hdGgudW5pLXd1
cHBlcnRhbC5kZS9vcmcvV1JTVC9zb2Z0d2FyZS9maWxpYi5odG1sKT4+Cj4+IGVuZG9iago3OTMg
MCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9DWzAgMSAxXQovUmVjdCBb
NDg1LjkwMTcgNTc0LjMyNjMgNTEzLjk5NjMgNTg1LjI4NTFdCi9TdWJ0eXBlL0xpbmsvQTw8L1R5
cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwOi8vd3d3LmVucy1seW9uLmZyL35ucmV2b2wvbXBmaV90
b2MuaHRtbCk+Pgo+PiBlbmRvYmoKNzk0IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9yZGVyWzAg
MCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzExMC41ODI3IDU2Mi4zNzExIDMxNi42Njk1IDU3My40
ODkzXQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0cDovL3d3dy5l
bnMtbHlvbi5mci9+bnJldm9sL21wZmlfdG9jLmh0bWwpPj4KPj4gZW5kb2JqCjc5NiAwIG9iaiA8
PAovVHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFsyNzYuNjU4
MiA1NDQuNDM4NCA0OTIuNjg3NyA1NTUuNTU2Nl0KL1N1YnR5cGUvTGluay9BPDwvVHlwZS9BY3Rp
b24vUy9VUkkvVVJJKGh0dHA6Ly93d3cuc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dhb2wvKT4+
Cj4+IGVuZG9iago3OTggMCBvYmogPDwKL1R5cGUgL0Fubm90Ci9Cb3JkZXJbMCAwIDFdL0gvSS9D
WzAgMSAxXQovUmVjdCBbMzkxLjkzNDIgNTI2LjUwNTYgNTEzLjk5NjMgNTM3LjYyMzhdCi9TdWJ0
eXBlL0xpbmsvQTw8L1R5cGUvQWN0aW9uL1MvVVJJL1VSSShodHRwOi8vZG9jcy5zdW4uY29tL2Ri
L2RvYy84MDYtNzk5OCk+Pgo+PiBlbmRvYmoKNzk5IDAgb2JqIDw8Ci9UeXBlIC9Bbm5vdAovQm9y
ZGVyWzAgMCAxXS9IL0kvQ1swIDEgMV0KL1JlY3QgWzExMC41ODI3IDUxNS4yNjc3IDE3NS43MTgz
IDUyNS42Njg3XQovU3VidHlwZS9MaW5rL0E8PC9UeXBlL0FjdGlvbi9TL1VSSS9VUkkoaHR0cDov
L2RvY3Muc3VuLmNvbS9kYi9kb2MvODA2LTc5OTgpPj4KPj4gZW5kb2JqCjgwMSAwIG9iaiA8PAov
VHlwZSAvQW5ub3QKL0JvcmRlclswIDAgMV0vSC9JL0NbMCAxIDFdCi9SZWN0IFsxMTAuNTgyNyA0
ODQuNjYyNSAzNzkuMzE0NSA0OTUuNzgwN10KL1N1YnR5cGUvTGluay9BPDwvVHlwZS9BY3Rpb24v
Uy9VUkkvVVJJKGh0dHA6Ly93d3cubXNjcy5tdS5lZHUvfmdsb2Jzb2wvd2Fsc3Rlci1wYXBlcnMu
aHRtbCk+Pgo+PiBlbmRvYmoKNzg1IDAgb2JqIDw8Ci9EIFs3ODMgMCBSIC9YWVogOTAgNzA4LjA0
NDggbnVsbF0KPj4gZW5kb2JqCjc4NiAwIG9iaiA8PAovRCBbNzgzIDAgUiAvWFlaIDkwIDY4My4x
MzgyIG51bGxdCj4+IGVuZG9iago3ODggMCBvYmogPDwKL0QgWzc4MyAwIFIgL1hZWiA5MCA2NTku
MDA4NyBudWxsXQo+PiBlbmRvYmoKNzkwIDAgb2JqIDw8Ci9EIFs3ODMgMCBSIC9YWVogOTAgNjI5
LjEyMDggbnVsbF0KPj4gZW5kb2JqCjc5MSAwIG9iaiA8PAovRCBbNzgzIDAgUiAvWFlaIDkwIDYx
MS4yNDI5IG51bGxdCj4+IGVuZG9iago3OTIgMCBvYmogPDwKL0QgWzc4MyAwIFIgL1hZWiA5MCA1
OTMuMzEwMiBudWxsXQo+PiBlbmRvYmoKNzk1IDAgb2JqIDw8Ci9EIFs3ODMgMCBSIC9YWVogOTAg
NTYzLjM2NzQgbnVsbF0KPj4gZW5kb2JqCjc5NyAwIG9iaiA8PAovRCBbNzgzIDAgUiAvWFlaIDkw
IDU0NS40MzQ2IG51bGxdCj4+IGVuZG9iago4MDAgMCBvYmogPDwKL0QgWzc4MyAwIFIgL1hZWiA5
MCA1MTYuMjY0IG51bGxdCj4+IGVuZG9iago3ODIgMCBvYmogPDwKL0ZvbnQgPDwgL0Y4MSAxMTIg
MCBSIC9GMTAxIDE2MiAwIFIgL0Y5MCAxMzAgMCBSID4+Ci9Qcm9jU2V0IFsgL1BERiAvVGV4dCBd
Cj4+IGVuZG9iago1ODUgMCBvYmogPDwKL0xlbmd0aDEgOTIyCi9MZW5ndGgyIDI3NTEKL0xlbmd0
aDMgNTMyCi9MZW5ndGggMzM4NSAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJlYW0K
eNrtknk8lG3bx0mJSZIRIroo+zLG2qCFsZU1IzuZzIVhzGiMXZZkX6JEJlR0C7nrETdCShjGrrFv
E2JsRZQs4Z26n/u5e3v+fJ6/3s97nf9c3+M4zt/5+xzHISFmgVLQwRCugAYEPEkBrgjXBJCmVlZw
ZQCuqASRkEASQTQJS8DroUmgJgBHIOCAjp87oKwEwNU1VdU0VdUhEgCS4BNExLp7kABppMz3Ig1A
xxskYl3ReMAUTfIAvZkarmgcgCK4YkFSkCKgg8MBlt9v+AKWoC9I9AcxihA4HMBgXUnAFdAdi4fA
vjs6j3cjABp/hjF+Pn+l/EGiL9MUIM00KQMwLWIIeFwQgAHdIDAzAvMtkOnkv2HqV3EDPxzODO39
Xf5Hl/4tj/bG4oL+WUHw9vEjgUTAlIABifhfS23AP82Zghisn/ev2fMkNA7rqoN3x4GA0p8hrK8B
NhDEWGBJrh4AiegH/giDeMyvHph9++EAZmaqa3ZJR+6fA/2RtEBj8SSrIJ9/qX6v/sHwv5nZHiI2
EHBQUlRSgjMLmeevP6dfHtPHuxIwWDxzI9TUATSRiA6CMFeDSWpACBzA4jFgIAAGMg3DFPEEEvMK
wOzJNcCNQIR8n6e6EgDDgb6+36N/BpQBmPv3nWP27a8Yc3Iw9N+EAGCu/yI40xYM/AlVAZjHT6gG
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
JK0udrrS2GNmxTMSijtiuFSNWvkRB8makGSZ/TYq9ZtDrGe8aJZc1OMuj12GeqMu+xRHnuRLPoq/
kpJrTqvOAyI3tXKBt11fT3UgiIbtatJPLnGlL2M4U3uV+6Tgl3P8k5725Gwi0J8JilkMHqX/8IP8
v8D/CQFXHIgmkgjeaKIX5H8AVPoEyGVuZHN0cmVhbQplbmRvYmoKNTg2IDAgb2JqIDw8Ci9UeXBl
IC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovRW5jb2RpbmcgODAyIDAgUgovRmlyc3RDaGFyIDYwCi9M
YXN0Q2hhciAxMTgKL1dpZHRocyA4MDMgMCBSCi9CYXNlRm9udCAvTk1CTlVBK0NNVFQxMgovRm9u
dERlc2NyaXB0b3IgNTg0IDAgUgo+PiBlbmRvYmoKNTg0IDAgb2JqIDw8Ci9Bc2NlbnQgNjExCi9D
YXBIZWlnaHQgNjExCi9EZXNjZW50IC0yMjIKL0ZvbnROYW1lIC9OTUJOVUErQ01UVDEyCi9JdGFs
aWNBbmdsZSAwCi9TdGVtViA2NQovWEhlaWdodCA0MzEKL0ZvbnRCQm94IFstMSAtMjM0IDUyNCA2
OTVdCi9GbGFncyA0Ci9DaGFyU2V0ICgvbGVzcy9ncmVhdGVyL2EvYy9lL2gvaS9sL20vbi9yL3Qv
dikKL0ZvbnRGaWxlIDU4NSAwIFIKPj4gZW5kb2JqCjgwMyAwIG9iagpbNTE1IDAgNTE1IDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgNTE1IDAgNTE1IDAgNTE1IDAgMCA1MTUgNTE1IDAgMCA1MTUgNTE1IDUxNSAwIDAgMCA1
MTUgMCA1MTUgMCA1MTUgXQplbmRvYmoKODAyIDAgb2JqIDw8Ci9UeXBlIC9FbmNvZGluZwovRGlm
ZmVyZW5jZXMgWyAwIC8ubm90ZGVmIDYwL2xlc3MgNjEvLm5vdGRlZiA2Mi9ncmVhdGVyIDYzLy5u
b3RkZWYgOTcvYSA5OC8ubm90ZGVmIDk5L2MgMTAwLy5ub3RkZWYgMTAxL2UgMTAyLy5ub3RkZWYg
MTA0L2gvaSAxMDYvLm5vdGRlZiAxMDgvbC9tL24gMTExLy5ub3RkZWYgMTE0L3IgMTE1Ly5ub3Rk
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
mw4t7y4LO0nJ1yjhUN6a28WSDOvQLlJoniErhtGUsHvzAaLbMgDWdAS7uomO/sXvxpmihlkuWV4d
WU8chFg79pfPexAwIBDqOp1rJe34v817FKeo5xiJt3jSf5KIrI9GY6+qWNE4x1UIgij4JhDPTKhW
U5UUNBiWue2LmBvyRhsPHOfbXWcrnmiSfZyn+pRjVPRjs7N2lktfIpcmTfgVGidhfnvUZCjBp18G
gjGMgbTKh/lPZwuDExKSTtkXQdnDAzwNPHJouDuun1mdgNf6CsHCmAc2Stgbrr6b13Q+hRVRNj1D
Zh8sz1xyUcoJZ8uucRaOKXP35xmBcKyh9ZLuprVyOJst38o67dHUQxMJ7MppT8MSdAKe0iR2bcvB
+veFLmMX+lfcCj3174Q4YgQQhCrUuXKMA/d43pJksgSaHS7yzkAEkXfMkhmSBqhcCLSTAgv3DvwK
l9XkP0RCy1AcGOCQe/Tf0LPrlLsQvW4rn2D/9jkNFb2bLDB6QkxtljtWWkKmEQvrzscyEfKxsmNJ
AjTbxUPBeiHCVb3lf2/MnTrceDVfRopUvGPmebvNcwWkdLfMqPZD8RKNvw4h+nLGQfXL+afn99iD
z6WtkzXClK0ycJZjWuPf2BKT7KUdQg395Ee/0lin+hVtrcfWff6uf+VusO8ajCR0JfYh6qUP2Ges
Yrb9l1hgHoQ6FPiYg+tGBBgYphhW4hsy8qvD9YE/XUN4saXNtAaNjOMFKY9w/B/+of//BP9PJLCA
gIDOrlB7oLMd+v8ASqSJWGVuZHN0cmVhbQplbmRvYmoKMjIwIDAgb2JqIDw8Ci9UeXBlIC9Gb250
Ci9TdWJ0eXBlIC9UeXBlMQovRW5jb2RpbmcgODA0IDAgUgovRmlyc3RDaGFyIDMzCi9MYXN0Q2hh
ciAxMjUKL1dpZHRocyA4MDUgMCBSCi9CYXNlRm9udCAvTkpIVkdUK0NNVFQ5Ci9Gb250RGVzY3Jp
cHRvciAyMTggMCBSCj4+IGVuZG9iagoyMTggMCBvYmogPDwKL0FzY2VudCA2MTEKL0NhcEhlaWdo
dCA2MTEKL0Rlc2NlbnQgLTIyMgovRm9udE5hbWUgL05KSFZHVCtDTVRUOQovSXRhbGljQW5nbGUg
MAovU3RlbVYgNzQKL1hIZWlnaHQgNDMxCi9Gb250QkJveCBbLTYgLTIzMyA1NDIgNjk4XQovRmxh
Z3MgNAovQ2hhclNldCAoL2V4Y2xhbS9xdW90ZWRibC9hbXBlcnNhbmQvcGFyZW5sZWZ0L3BhcmVu
cmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoL3plcm8vb25lL3R3
by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuL2VpZ2h0L25pbmUvY29sb24vc2VtaWNvbG9uL2xl
c3MvZXF1YWwvZ3JlYXRlci9BL0YvSS9PL1EvUi9TL1QvVS9YL2JyYWNrZXRsZWZ0L2JyYWNrZXRy
aWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlL2EvYi9jL2QvZS9mL2cvaC9pL2svbC9tL24vby9w
L3Evci9zL3QvdS92L3cveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0KQovRm9udEZpbGUg
MjE5IDAgUgo+PiBlbmRvYmoKODA1IDAgb2JqCls1MjUgNTI1IDAgMCAwIDUyNSAwIDUyNSA1MjUg
NTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1
MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgMCAwIDUyNSAwIDAgMCAwIDUyNSAwIDAgNTI1IDAg
MCAwIDAgMCA1MjUgMCA1MjUgNTI1IDUyNSA1MjUgNTI1IDAgMCA1MjUgMCAwIDUyNSAwIDUyNSA1
MjUgNTI1IDAgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgMCA1MjUgNTI1IDUy
NSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNSA1MjUgXQplbmRvYmoKODA0IDAgb2JqIDw8Ci9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5j
ZXMgWyAwIC8ubm90ZGVmIDMzL2V4Y2xhbS9xdW90ZWRibCAzNS8ubm90ZGVmIDM4L2FtcGVyc2Fu
ZCAzOS8ubm90ZGVmIDQwL3BhcmVubGVmdC9wYXJlbnJpZ2h0L2FzdGVyaXNrL3BsdXMvY29tbWEv
aHlwaGVuL3BlcmlvZC9zbGFzaC96ZXJvL29uZS90d28vdGhyZWUvZm91ci9maXZlL3NpeC9zZXZl
bi9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIgNjMvLm5vdGRl
ZiA2NS9BIDY2Ly5ub3RkZWYgNzAvRiA3MS8ubm90ZGVmIDczL0kgNzQvLm5vdGRlZiA3OS9PIDgw
Ly5ub3RkZWYgODEvUS9SL1MvVC9VIDg2Ly5ub3RkZWYgODgvWCA4OS8ubm90ZGVmIDkxL2JyYWNr
ZXRsZWZ0IDkyLy5ub3RkZWYgOTMvYnJhY2tldHJpZ2h0L2FzY2lpY2lyY3VtL3VuZGVyc2NvcmUg
OTYvLm5vdGRlZiA5Ny9hL2IvYy9kL2UvZi9nL2gvaSAxMDYvLm5vdGRlZiAxMDcvay9sL20vbi9v
L3AvcS9yL3MvdC91L3Yvdy94L3kvei9icmFjZWxlZnQvYmFyL2JyYWNlcmlnaHQgMTI2Ly5ub3Rk
ZWZdCj4+IGVuZG9iagoyMDEgMCBvYmogPDwKL0xlbmd0aDEgMTYwNQovTGVuZ3RoMiAxMDU5Ci9M
ZW5ndGgzIDUzMgovTGVuZ3RoIDE4ODQgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3Ry
ZWFtCnja7VR7WFPnGd86FIwGRbwChQ/kEuSWAIKAK7cIcjGNEO5FOCQn4azJOYeTE01kKIyLWCqg
0hYGBQGFPsKK9TJUrIgUqB2CUxBFqMwBMmEqXih2gPsStLRsf7in/rWneZ7kyfv+3u/3Xn7f+1mY
8kPtvEVEAupH4LQdx57tDkJpBBchlChUJQsGbDb0sTcwLCx8KRShMQLnIjTqDgSJCvCukAaOHMBx
c3NjWABfglRRmCSRBmEhESCUENM7EQq1/ZEfBrqCBJUah/GvFxWKooBORIEYk6LA911+VADPH7D8
eWHAH8VRCpECviJBiglBMCZEcTlqDcQEBaSzBhASuAhTFy23h1zecoAAOYkKMXgMVQpRUg3ZAhKl
ZJhcDv8DTA4kFILTqAjQBMBwoVQhUhcA/WI4IEhCUgSMkEEMkvEJOS0XUhhJA5iVz/WbrZNORGh1
bjkGYUCIYaSIECpkKE5rMEgDURrBcDmgUSWtzpWAAhEmJ6WICuaGZCSFacpQyDFcMleBLaBQCRRH
isrlkAZyq6cz1yf4UfcISUpVmtOEJuqHGjBajkrF9gyOI8wJRUxAJRjOcFBfgQBcTAAOe9YvUpCv
sB0opRkQ6+WFsIZ1ICICl6qACBUzHHgEDbMC1muoav/mRH0Dkr4RQd+InD9PzPmCzI2e9T9t5nwe
P4VUykNkUNpX7wKAD0MCIZWD4P+IRWSYVPW60RHobHkhqEQhRaj5cACNwN69cQmcP9uePevE5H6Y
EhXxMVqYCMSIFA5G4w/DRSglxXAUCqiZHbBzdHSbhwkSMeH7uHrSzi4aCMVF8zuAmmjqd9gSHsLf
xrP5yWOoCeFDnWmBioRVvexjKyH6wVAT+PgQSpBsx9nIhlW4OcF1cmPDHw475b9k0zBx5uytCE1h
ShADW2ZzNI2//M5ZsfNoNuNCQqS+Go4bXABCUYiKAfNBawNI5sB7LUKV6t1IBA72OEHDI4BU0Cnq
nWKoN5zjsgE4YLgYwzFapYYYP6EXKigK3jPNgwAH9srW7AWKKlEh49YNQuiR8bvC4iL6+Oqy1nZu
zKWLnN+0ZpLVJwVHKlI/Jxr3FGYPuNXET9Vl2p/qcJ85q+q+T04PBq4f+vriKqlV48fog3KjlHXW
TRV6/ZYNrjZDf3DYXs0sGo34MPlhV/AdrWgXdvjQ39q3hWyvmlr4dkeDE6Xz8Dvr1HU7KlJXmE+Q
uruFn5zIW3l+2alfLT9eeX/U8tDIdxNWX11ua21pHF/QNGhoU5q3yMJjhxbTMic1qdTQMzrsmP/C
WwbPiy6bBx1pI2dinDMfpddHFuzm9f7llHIozriX6HINe5JWdvCg9vref06X15xl+awtmaSnmR+I
rG98Gmecc5o4aryYsXyvf1a7h5H55Vadp0t20gWye9fHiHVBqk0HyH9I9q8t2opU6M9YH+Sz7up8
e27QaPH5xuGy5weZAnmdW9yn2nf3KJM+8uhMZ+YqDdd41nJ6D2dktwtLnHPaT0zfLx43mip5tm9g
6NbygqQ6+TuLfALjE+M2r2pqvHSAlZ4eGxA9zVUaDUwNeP7182nv/G72Jd8Rm9rnDfX60RUGzdZf
WtSNhmRcnaleqh1B+u80K6zp2W14kXnsvb7FH64r/f5mdXq55RLbtBVfdIz/a+b+vWJe80bzc/Tg
hcqgCgm7zya//2hh4tVuJyu9XEZJJ3tPEnO0p+OPyuyZYqfSlcipM57peftLEL5grUNQRkiUzuS5
o2a6d/N8zJq+j/7kdqFHZ1nkFvEW2+ox1ZFavaJcbZOQ+An/XG2m7plAZ1Y+yzMm3KtzE/fY+tXm
zx4dyFqW1WaiCg11b5HBV1O3RtDwaGZyJa/J0fqzE3U8ghugdXTH9S3hdtsswus+st6Uohf3TVem
59/T7CLir2v11b84GftVWrxgr9ekibFXr++3BknOu7DONft+nbo08MxbS9d4UTa7rLozNqfqxyCD
A6RtgHbJtVVVLbldUUVfR3qYHD+PtJn9ucqZHadT4+yWHGrap3XavPKIT9sQ05n7TPbCOZ64fqc4
t2DaYbNLlyxLcbY84EHs4xHCNSxj+HE+MfZwnzj6dpFv9rJth12XKFwajkslFtdG7K54jVxh7Vpm
n9OpJF+0rGZSjKcB3YZOwSdcdQ/5s9+2zBvbeNt1oOPCF3sdmmzOeQX+3j+/uaTrAcpt3SmojNxd
a7y9PifHw1YV1RPbyO0bru3qulmF9rZPGLQsXik6hFsdW+2nJeg/fcf7GVI55P1iwZc27IJQfa5L
1fLMyGsreryww/nj96b2ZRbu3yv7JrvZ0BgbPyCq2h8UmZZ887cG79TfmMjKFIAykKfNeTq+Yti6
3uO0+YWowpMj/e4D6x/YxvnxiLX9fIKP3Zqysxr+uCP+9sZiU8q3vVwxGclUrmob8m7m6N+JeOvq
DPHkTz12pg8/e686fHSh4RNVwpUFj9tM9Uy4xBCIN2teNOZullLK/pkfxi8E/xcEQimKUDQhQ6j3
Gf8GvSSK9GVuZHN0cmVhbQplbmRvYmoKMjAyIDAgb2JqIDw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBl
IC9UeXBlMQovRW5jb2RpbmcgODA2IDAgUgovRmlyc3RDaGFyIDE2NQovTGFzdENoYXIgMTY1Ci9X
aWR0aHMgODA3IDAgUgovQmFzZUZvbnQgL0hWUlBRTitTdGFuZGFyZFN5bUwKL0ZvbnREZXNjcmlw
dG9yIDIwMCAwIFIKPj4gZW5kb2JqCjIwMCAwIG9iaiA8PAovQXNjZW50IDUwNAovQ2FwSGVpZ2h0
IDY4NwovRGVzY2VudCAtMjI4Ci9Gb250TmFtZSAvSFZSUFFOK1N0YW5kYXJkU3ltTAovSXRhbGlj
QW5nbGUgMAovU3RlbVYgMAovWEhlaWdodCA0MDAKL0ZvbnRCQm94IFstMTgwIC0yOTMgMTA5MCAx
MDEwXQovRmxhZ3MgNAovQ2hhclNldCAoL2luZmluaXR5KQovRm9udEZpbGUgMjAxIDAgUgo+PiBl
bmRvYmoKODA3IDAgb2JqCls3MTMgXQplbmRvYmoKODA2IDAgb2JqIDw8Ci9UeXBlIC9FbmNvZGlu
ZwovRGlmZmVyZW5jZXMgWyAwIC8ubm90ZGVmIDE2NS9pbmZpbml0eSAxNjYvLm5vdGRlZl0KPj4g
ZW5kb2JqCjE5OCAwIG9iaiA8PAovTGVuZ3RoMSA4NTYKL0xlbmd0aDIgMTU2OQovTGVuZ3RoMyA1
MzIKL0xlbmd0aCAyMTY4ICAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42u1S
ezhU6x6mk0kjY9QUcrCEcjfj2qSLS5RrmtylWmYWszRmWDPDIFO2S0pJkcu4FSEhUtlkyrZzKd1d
S6gkpIvrsYWts7BrP7v95zl/neestZ71fL/3937vetf7+9SUnfbpmNNYPpA1i8nRIemStgCWDhQS
ESDpEokWWDU1SwQCOTCLuRPkQFsAEpmsD1hDPugCfbYYGW4x0seqAZaswFAE9qNzAHVLjQWSCWAe
ACEwFWQCDiCHDgWgGlSQAexjUWGIE6oLmDMYAGVhBxugQGwICYZoulgSCaDBVA7gA/nBTKzegiUb
pi8LMFmCadzAb61gCGGjpgD1RZsaAGqSxmIyQgEa5IvVc2ShX4NQL/8NWz+KW3MZDEcwYEF+Iai/
tcEAmBH6B4EVEMjlQAjgwKJBCPNHqhu05M0BosHcgB+7NhyQAVPNmX4MCCAuQTDbGuZBNCeYQ6UD
viCDDS3iEJP2owk0uUULerYutp5OblpLM13sOYEwk+McGvhddYG8WJP+rNF0EJgHeBHReEkoEb2/
rbx/+JYVk8qiwUw/QN/IGAARBAzFoqcHrYyAcBIAM2kQD4B4qGE9XSaLg24B0EwiAF8Wgl0YqCER
0AsEEYjJgHw5C60llPQHujS+77ABCjO47O+AMcqDgrjoCL8hZBTxQUDqYYjzF0WywXf8T82/p2Zh
weKF6+gbkQD0hf4HkUgGyMbkiL8wqVwEtcZZPJRo+N9qXxgdFQTxICr2RQeLahrtn1oZW8S3ynt6
RUxT1MLv50TH67+03paIen5WlFHQbBek2VvhPlMsWIMbEBtQCpmTZ58UHtn7yHokMigxrX1+IPjQ
gCCsWt59XOAQ+i5ww29RH6RqKtsmPxqJ7mnpfVCU7HGpIWu08cNFJ/WdzoMrupVF6ryCb9RlRBub
uFsLGC7HYyo2GihT8GlBRXGGx3tC8Mnnlvc8ieL7Hxev0no5xhJyV8/kiV9Imt//29oz0lShkgGl
T5NAGdzx8fKl43ipa1/r75WZZQB++xBgQKxLnNJsE5W9JrYsK2y91cFnozKPreIcgke0q4Xuyr+r
GXv3FvQfNNA6SL9k+zyfOHouj1VyetMX8bD5YSBlmpwrtEs6qvr62MgRqSTOxdOu+zU8xZQlq/1V
ZDwbBBlPCWEk3GSmy3pzPnZD4I7kr+FcM4G3eUQBGwu/xc/4W2jM8ff4SEjVN251ep8tk31T0d6u
niKD6CkmmI29sUgI1S17vd/TqfUURdphrsXBedmRWrXVPdKs5dReM0ph6b5K81x+ZH9kMi/6sZGv
vM3aHRezsZqxq8JBl9gg4raBq5jLOEcrnAwmOHig5oamQLVEuL28OTzMdP7ynk/kh7MBzl4Vwvrs
A+tSaSuKs5JdGG2j4qojbhl0kcruLWXREjsaf1JHjBNMLTg9mGbjsjNU6zp5yybkoaqeqbK2Xafo
6aCLhfaC5E8iSfmzkNvkay5+V1knkPYxT7TqKl1aKs0k5V3kGIZgs/eVF3e5fi7x97ybXM/NNwdT
NYvrVDAX1qfPTctmBVW9nDzvdGs4c6z6SG3TwxSbhIdJ8etl8JWBUMR7lQKPl8fdCOEE7G4MW33w
7Ze7EbJxFdGJlqJWq14L134eFuk/9YgaNzG3NYY3IgAuvGbuCespw0UoyupIe42VJsmF6Hu2nh3U
1VrzEJ9gsrEOn94nglGRPXnl/kSfwQc105547C6PAn/p7RifzeXi/nWVhp61X3B2B1pn4F/VzNPk
teZS8VenbmLjbxqSmm60HutUpmaLeB+2jvu8rnYy2nLw/rtZr4a47Zv+WW6onsJIqUyL1z67yczx
FO3ahjYxUGL1igEFRiWv1tyRppG5oaOqS8U0AXeCPzytaPne57bCm+fj9lFOwfI4eoLlNlHh/dL2
GP6d87RRBSeFg+n1m7QvJeL/cb5l20f5d4KAoRaJxEaC4X2MFt21oVE6+rb7OE70xq4pwqprNrdN
JD0wOauVmk/eN7GNLcsWeWN+R0lLcoR4qUQmkm/nfu3yOfl0KRU+rWhzqbqtQvEe03/9RKrQc1PO
yRh9GxPTQXqi+kGhu0ax4O1LUlzn3ekXw+NHEbJLmI5uYYnnJ8lftF9itbMdaL/aG6+buJLWxq6H
UrpT9xNyOhhDmHpK1rlyGVNhl6RsxXmm1F6ZLB7oEnbWWzM/s09WZKN3GZsf1XTjfb3SMbkDe4v2
un95XJZf3Ct8ZaDVhD86HPj7kAVc8mhtjdELMNpHpt1uWVy6t7/B8tq4z4Ul1Q275Vwx9QOivBwj
nyEBXC8xfNavdTJjIquiPZjoZ+U8ntp1yHPFOUBWt5ByHY+0MVcS8E+Va+9VXezv6CuRxr6xvKM/
uWLqSst8n0dUxtTVNz/P1HNTp98a8md3T/QMvJeLcn7WJl7q6tam5C09f/jYwdrcvi96VP2eUtvB
CCI3waSS59vxODfj0KZIjZCqjpNuK5e/2uWCKwjZ/vTVEHG6SuJO82Xc3W0NJT2O9O1e9DPeSoSZ
/JCEAfzduQmLROW+C4Tp8urw4a+FE7EJ4HVXXrs5W5hUWKuRnKlOqDG2Su4S3Modv9roXD57apmW
G9dd59QtyWelcgamnTvXTq5SHSL3x/vZiRh4DJd73rtQ3OrexU/PWj8f5dGP7w09GTw7fqJJ9F03
e+WaqTm9F/BWQ1HTXfeeRPtJkdVaZuHmrdrgssycZxj/lroOs3zXvo2dYqDsg5oH9jFZtHI7ca7S
9tneqbEJSvdtuh77Xjq+s8jkKb8d593sKnmrtYgVGE/N8WFjXZkRDlsZJ2o30wPDEcXWj8/HYkj2
WV6O0a5CiZWs9LGiUr9+HK5WrvzwvMKQVp7GsSvE//DC/l/gf0KAyoBAhMMKAJHD2H8D9OZ5t2Vu
ZHN0cmVhbQplbmRvYmoKMTk5IDAgb2JqIDw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQov
RW5jb2RpbmcgODA4IDAgUgovRmlyc3RDaGFyIDQwCi9MYXN0Q2hhciA5MwovV2lkdGhzIDgwOSAw
IFIKL0Jhc2VGb250IC9KVUpaUFcrQ01SMTAKL0ZvbnREZXNjcmlwdG9yIDE5NyAwIFIKPj4gZW5k
b2JqCjE5NyAwIG9iaiA8PAovQXNjZW50IDY5NAovQ2FwSGVpZ2h0IDY4MwovRGVzY2VudCAtMTk0
Ci9Gb250TmFtZSAvSlVKWlBXK0NNUjEwCi9JdGFsaWNBbmdsZSAwCi9TdGVtViA2OQovWEhlaWdo
dCA0MzEKL0ZvbnRCQm94IFstMjUxIC0yNTAgMTAwOSA5NjldCi9GbGFncyA0Ci9DaGFyU2V0ICgv
cGFyZW5sZWZ0L3BhcmVucmlnaHQvcGx1cy9lcXVhbC9icmFja2V0bGVmdC9icmFja2V0cmlnaHQp
Ci9Gb250RmlsZSAxOTggMCBSCj4+IGVuZG9iago4MDkgMCBvYmoKWzM4OSAzODkgMCA3NzggMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDc3OCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjc4IDAgMjc4IF0KZW5kb2JqCjgw
OCAwIG9iaiA8PAovVHlwZSAvRW5jb2RpbmcKL0RpZmZlcmVuY2VzIFsgMCAvLm5vdGRlZiA0MC9w
YXJlbmxlZnQvcGFyZW5yaWdodCA0Mi8ubm90ZGVmIDQzL3BsdXMgNDQvLm5vdGRlZiA2MS9lcXVh
bCA2Mi8ubm90ZGVmIDkxL2JyYWNrZXRsZWZ0IDkyLy5ub3RkZWYgOTMvYnJhY2tldHJpZ2h0IDk0
Ly5ub3RkZWZdCj4+IGVuZG9iagoxOTUgMCBvYmogPDwKL0xlbmd0aDEgNzg5Ci9MZW5ndGgyIDEx
NzQKL0xlbmd0aDMgNTMyCi9MZW5ndGggMTc0NSAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+
PgpzdHJlYW0KeNrtUmlYU1caRsRHjeOUVWTEeng0CgLZJEBCWcIeMcom+xZzb+DKzb3pzQXDgLgA
lkJFWwWaMsiuBalaoCzjwmI1VkEUK5CqKIKlKkgtoiwuvWBtn6E/Z37N03P+nO/93vN973m/Qzfz
DbAWQPg22BPHSGs2g80HbiKRkM0C1JnFotHpbgQsJhEccxeTMB+weTxbsDEBBZwNgGXH527gc+1o
dOCGy5MIJDaOBOZuFjMkOyCQwQQiEWNAJCbjYBlVQyJGQQAuQWAyiQEEKAr8Z24ogD+sgIlEGGLQ
2GwAIRISbINjEYzGnNEkxKQ4sHsLQwnyd6lEmFBQooD5rEwLQImEcAxNAhAspTE341Q3mNLyv5A1
t7hnAopuFstmys869ae8WIagSb8xcJk8gYQJIMIhmMDmUoPht+JEMIQkyOZmhaQYRSQCLBaFgTXb
hsGyeYsjCk9ECUO+CCmJA1IxqoBncRiD5iqh/JvVwRQGefqF+Fn+NtrZpK8YwcjAJDkMWH+wZ2P2
HzFlEoEoQTiLwWKxKSK1350i5zTzwCQ4hGCxgMO1BWKCECfRqE9ERVyQzAYIBsFKACspxUwGhpPU
FUA5sxNIcYI2M1euPWDKqdHg0Az+FuIBpgSXycS/I7ZswFSgYkXcLPLnx7q64spk6w0cYM3hUs1Z
NvbAjsva+R9ESQJBwBg5+6Eoy97FUoRyGYaVsISm6cYlDunb8+v3VaZ6lF2rWmChMFUdS28/l1Gn
cmA87nPQ/55o6AyE3/9FL0NvO3JcN2/E5ysmJOXeM6kXpKiTA5gZvXrqpYYWJV8ELByVPI6I0r5U
dLHtPVnhx0OaVYPyBsvRH1aP3008t+Dkpodsu1KTkSydyp7uV2Op8bs67mmWfA6tfpBHiyw6vSkX
Dvrp7sErU8NeeBmuqbhkHPHFuMFrjUnbna7420tVvOwi0fybKseXi1kWSml/B41dEL9KE3KEtzGA
v8jU9vugYhXQ+oejmSrEqanRR/Rk0cB1C96AmepvXcK9O/O8g4Vbn6+oKtGXVK5AHb0qTObBp9rC
mmVOWOtHg6f89urHn7rGcTzMljfk0v1jJl/Rf1mzX+dZ5PR034s32SbNo5JkM63lJ7SDLe0LnBPN
LR9btLNMFtzIVJuFiuMODZECZ+++JS7ZF2VXnftTmiZEIIR3c7dh95eZqzUc2kP+pCy/2EoUZlnT
qP4swkOpxQv9Fvugv/TnR982ZxdwojzdwvtizgT2WF6q/qalzN2g+iOdSHWjp2fZmsZFeO+Aq7GZ
k4Gpg5GuIGIwEMTlaFq7lAeH486m6HOnJlce59sWdr10eNCZt1XdMHLMdmXqggdpK+JzGMOB65Pt
n8w/51Mdk3TNvrpW/d2ydflQYIq1X3788Uqfyn2ypKe8xblVvFM/s+cXp5x9Jmi8IC0iDoKT5j67
xtdbXKRHX65+Suoe9J0ujWEQoc5nmtswAhs8MZmcyDmzJZrrEBH7usvpmH95RfKBXaNPe2xWfhxN
4y/p7x3gmcg9/pmX+ib9ea9XwhI9j8b2cA02VKW68909hDeQdrZcL2G1Y8hXa52aTU623J9w8bPm
6EkDk1loqGXWvP4pOtRUKqs2pEOGg5dcxbHmmuVqkcF54bPlmLpJnr3Pk6QffVVblhfETB3sdamz
NSM3TZTysYC1wnp0vZb2HZ2Jsbzlg+PEnsIb3nbfFOdAzrdLfMOel0w53r0+lbDb4PJIVset0xtE
UtGb8IDcGGOp/HDH/jbDo9Ke61Y1Ti0sdrbrlapn703bC7ghxIehsYARuyXqKnthhKVpdMD9rIFW
oa6++yqbkiNDrkaHP0lR2fWnd2Up4styouh59YGrbryanve1qTTzBe+RVc26MDc7TmtB1T4yyDUl
s+Ahrsps954/iCp6WreUp44YPaygJdu4nIdTMjzlTGN35TKR81Xs2pGFzWVvRCVB8AkzVWrZj9o5
7lEuW24bf3nzxlSu+QmzPc+tgq746GcMD1UFj37S/um/nLfXjUr92TcVdb2WU51LDZv0T+sujewc
qrilbCloCLlcbrN1oPZAS5Fj52XvbuFmo/vdU86Hxw2baqw6N4Zm9aSLAhYeHXhZfHz3jv1jbdvP
JSlKw+x11tZxXRZ7CZ7UTqPDaxYXen0+efHvLcuGJJXBRoX96+ojxzfu+ffWD/Ohx8FaUkZku/bu
tgui0omaob46tBQ/Es14nVZkXDLWhN91j4duET+QpXnX1RcOpX0G7/2xkxl+fqz89fgj35QS+7Ud
acO1kq8PSF2vRO/Ysczf5dCLbaz/ctH+KvB/UUCCwmKCxGViIp72K3VtqNJlbmRzdHJlYW0KZW5k
b2JqCjE5NiAwIG9iaiA8PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL0VuY29kaW5nIDgx
MCAwIFIKL0ZpcnN0Q2hhciA1OAovTGFzdENoYXIgNjEKL1dpZHRocyA4MTEgMCBSCi9CYXNlRm9u
dCAvSVZGUVhRK0NNTUkxMAovRm9udERlc2NyaXB0b3IgMTk0IDAgUgo+PiBlbmRvYmoKMTk0IDAg
b2JqIDw8Ci9Bc2NlbnQgNjk0Ci9DYXBIZWlnaHQgNjgzCi9EZXNjZW50IC0xOTQKL0ZvbnROYW1l
IC9JVkZRWFErQ01NSTEwCi9JdGFsaWNBbmdsZSAtMTQuMDQKL1N0ZW1WIDcyCi9YSGVpZ2h0IDQz
MQovRm9udEJCb3ggWy0zMiAtMjUwIDEwNDggNzUwXQovRmxhZ3MgNAovQ2hhclNldCAoL3Blcmlv
ZC9jb21tYS9zbGFzaCkKL0ZvbnRGaWxlIDE5NSAwIFIKPj4gZW5kb2JqCjgxMSAwIG9iagpbMjc4
IDI3OCAwIDUwMCBdCmVuZG9iago4MTAgMCBvYmogPDwKL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJl
bmNlcyBbIDAgLy5ub3RkZWYgNTgvcGVyaW9kL2NvbW1hIDYwLy5ub3RkZWYgNjEvc2xhc2ggNjIv
Lm5vdGRlZl0KPj4gZW5kb2JqCjgxMiAwIG9iaiA8PAovVHlwZSAvRW5jb2RpbmcKL0RpZmZlcmVu
Y2VzIFsgMCAvLm5vdGRlZiAxL2RvdGFjY2VudC9maS9mbC9mcmFjdGlvbi9odW5nYXJ1bWxhdXQv
THNsYXNoL2xzbGFzaC9vZ29uZWsvcmluZyAxMC8ubm90ZGVmIDExL2JyZXZlL21pbnVzIDEzLy5u
b3RkZWYgMTQvWmNhcm9uL3pjYXJvbi9jYXJvbi9kb3RsZXNzaS9kb3RsZXNzai9mZi9mZmkvZmZs
L25vdGVxdWFsL2luZmluaXR5L2xlc3NlcXVhbC9ncmVhdGVyZXF1YWwvcGFydGlhbGRpZmYvc3Vt
bWF0aW9uL3Byb2R1Y3QvcGkvZ3JhdmUvcXVvdGVzaW5nbGUvc3BhY2UvZXhjbGFtL3F1b3RlZGJs
L251bWJlcnNpZ24vZG9sbGFyL3BlcmNlbnQvYW1wZXJzYW5kL3F1b3RlcmlnaHQvcGFyZW5sZWZ0
L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoL3plcm8v
b25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuL2VpZ2h0L25pbmUvY29sb24vc2VtaWNv
bG9uL2xlc3MvZXF1YWwvZ3JlYXRlci9xdWVzdGlvbi9hdC9BL0IvQy9EL0UvRi9HL0gvSS9KL0sv
TC9NL04vTy9QL1EvUi9TL1QvVS9WL1cvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNr
ZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nL2gv
aS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJp
Z2h0L2FzY2lpdGlsZGUgMTI3Ly5ub3RkZWYgMTI4L0V1cm8vaW50ZWdyYWwvcXVvdGVzaW5nbGJh
c2UvZmxvcmluL3F1b3RlZGJsYmFzZS9lbGxpcHNpcy9kYWdnZXIvZGFnZ2VyZGJsL2NpcmN1bWZs
ZXgvcGVydGhvdXNhbmQvU2Nhcm9uL2d1aWxzaW5nbGxlZnQvT0UvT21lZ2EvcmFkaWNhbC9hcHBy
b3hlcXVhbCAxNDQvLm5vdGRlZiAxNDcvcXVvdGVkYmxsZWZ0L3F1b3RlZGJscmlnaHQvYnVsbGV0
L2VuZGFzaC9lbWRhc2gvdGlsZGUvdHJhZGVtYXJrL3NjYXJvbi9ndWlsc2luZ2xyaWdodC9vZS9E
ZWx0YS9sb3plbmdlL1lkaWVyZXNpcyAxNjAvLm5vdGRlZiAxNjEvZXhjbGFtZG93bi9jZW50L3N0
ZXJsaW5nL2N1cnJlbmN5L3llbi9icm9rZW5iYXIvc2VjdGlvbi9kaWVyZXNpcy9jb3B5cmlnaHQv
b3JkZmVtaW5pbmUvZ3VpbGxlbW90bGVmdC9sb2dpY2Fsbm90L2h5cGhlbi9yZWdpc3RlcmVkL21h
Y3Jvbi9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUv
cGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkL2NlZGlsbGEvb25lc3VwZXJpb3Ivb3JkbWFzY3VsaW5l
L2d1aWxsZW1vdHJpZ2h0L29uZXF1YXJ0ZXIvb25laGFsZi90aHJlZXF1YXJ0ZXJzL3F1ZXN0aW9u
ZG93bi9BZ3JhdmUvQWFjdXRlL0FjaXJjdW1mbGV4L0F0aWxkZS9BZGllcmVzaXMvQXJpbmcvQUUv
Q2NlZGlsbGEvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0
ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMvRXRoL050aWxkZS9PZ3JhdmUvT2FjdXRlL09jaXJjdW1m
bGV4L090aWxkZS9PZGllcmVzaXMvbXVsdGlwbHkvT3NsYXNoL1VncmF2ZS9VYWN1dGUvVWNpcmN1
bWZsZXgvVWRpZXJlc2lzL1lhY3V0ZS9UaG9ybi9nZXJtYW5kYmxzL2FncmF2ZS9hYWN1dGUvYWNp
cmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYS9lZ3JhdmUvZWFjdXRl
L2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9pZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNp
cy9ldGgvbnRpbGRlL29ncmF2ZS9vYWN1dGUvb2NpcmN1bWZsZXgvb3RpbGRlL29kaWVyZXNpcy9k
aXZpZGUvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90
aG9ybi95ZGllcmVzaXNdCj4+IGVuZG9iagoxNjEgMCBvYmogPDwKL0xlbmd0aDEgMTY0NwovTGVu
Z3RoMiAxNTEwMQovTGVuZ3RoMyA1MzIKL0xlbmd0aCAxNTk4MSAgICAgCi9GaWx0ZXIgL0ZsYXRl
RGVjb2RlCj4+CnN0cmVhbQp42u26VXCkzZIlKOYSM6aYmZmZmVViZqWYmZmZpRIzl5gZS1BilZiZ
Yeu/d3p6rHfnZaef1jbNMu2LOO7H3eN4+MuX5MRKqvTCpg7GZhIO9kB6ZgYmHoCClZ2xq4uKg52C
A7ccvYqZhas00MgW8BdjhyMnF3U2MwJaOdiLGQHNeACaZqYAMTMTAAsLgJmbmxuOHCDq4OjpbGVh
CQRQqatoUtPS0v3nzj8mAGPP/0D+erpYWdgDKP4+uJnZOjjamdkD/1L8v3ZUNTMDAC3NAOZWtmYA
UUUlbWkFSQCVpII6QNLM3sz5bxFKrsa2ViYAOSsTM3sXM2qAuYMzwPbfC4CJg72p1T+luTD85RJ2
ARgBXBzNTKz+upl5mJg5/gPRARzNnO2sXFz+PgOsXAAWzkb2wL9nAHQAWNmb2Lqa/pPA331zh38l
5Ojs8NfC7i/2l0zJwQXoYuJs5QgE/I2qJCbx7zyBlkbAf2K7WP2FAQ7mfy1NHUxc/ynpX9hfmr8o
0MjK3gUANPMA/hPL2AxgauXiaGvk+Tf2XzJHZ6t/peHqYmVv8Z8Z0AGczSyMnE1tzVxc/tL85f7n
dP6zTsD/Ur2Ro6Ot57+8Hf5l9T9zsAK6mNmaM8Axs/yNaQL8G9vCyh6O8Z9+kbY3dwAwM/1739TV
8T8wNzPnfx0Q1T89Q/03CSNTB3tbT4CpmTkco4ID8G9IANX/O5UZ/vtE/m+Q+L9F4P8Wef/PxP2v
Gv0vl/j/9D7/V2oJV1tbBSO7vw3w7zkD+DtojOwBf2cNQA7wz7CxNXIG/DNwrEz+b65Gdla2nv87
5/9qrWn276z/B+d/hf8dQtje4q9C9MzsDOz/3rZykbDyMDNVsgKaWALMjWz/Ht6/9tXtTc2cba3s
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
342mFgFvctf4FPgAF5VrPNBCyM6UchFV4jCDj0iE56AaqKJ7CJ1A0u0MhunQ31VzMZC5toyhPzdE
5r2AlbF/6ll3bXSEmmtdmULmTJGdhkHCg6/pfdFX7L8o4dlWabhaJvfXQPZhySSOPMr9XDR6xr35
sAOR1VU/ditSCgdShpGNPG8TT4YOiZ6AVmhxHVSXiBZlh2Yzv46DOR568TIALqlhbk1ot4POzdU5
4UV81I1OHnJXGqIObJJMbR2mYRmq5Z0IuV76Fysyr+onxGhMqEM+kg01dVzqf7qAZeXrkiKkDkuM
vs1i0DgprwepXSGQdvUGcJXl5SbWz8WPP4+6wSDVoHG7664BGEv3qLUj23bNPxp5EbS539EN2IJr
/1Deq8JwbKMZ41BMhJIUrMGbgxbd+nT3GfjkHDvxZ4+oXEjRQA4W9IPdOLHAjGfpqdB3dd4JIBds
ZGMnKaJnjkwk+uFH2jrcydjtdVAuF4sJ4aAdjWyHO66zst7GOz8mIDbzikCxSM2qpguyyNbEZoR8
gVOEUJzBgLgIaQLVY9lLaXQn6UAZpvUdLFmaeIPUQnxo5PBWizBXDKiQXLeix91Z4p8SWZ3dXboo
ZtJlCPOwSWQKpOsMxwwrc5Xy7fmho1rGSebCqn950iWkchHm3X3NHffin3p8BfV4oa2R0FREmfvL
4JEcAPM5VsM7EnINGTlwOfJAhTlwDYW727FXQON3bLtmA+Slf8ZEEHjq4GYb1L7RElZA5eW8lAoj
uQlH+xBMy1oclSpbNU30l+10gwrwsej7LSrGm1LOmnooliM8TxMtW1U1wRBG9OFeJyFzyr3O0ul/
Z27vpQ2zLG7XmjEhTdutKb5WfH+NSnmgoT0z3Sz++OQ0ZGN+BBXo+DjPudcI9/VwbIRXz8WtWUhH
52OZzZOMfmVvZfo//MD9/wT/nyAwsTUzcgY62Bk528D9X29m3CxlbmRzdHJlYW0KZW5kb2JqCjE2
MiAwIG9iaiA8PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL0VuY29kaW5nIDgxMiAwIFIK
L0ZpcnN0Q2hhciAyCi9MYXN0Q2hhciAxMjIKL1dpZHRocyA4MTMgMCBSCi9CYXNlRm9udCAvWUxG
T0FVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwKL0ZvbnREZXNjcmlwdG9yIDE2MCAwIFIKPj4gZW5k
b2JqCjE2MCAwIG9iaiA8PAovQXNjZW50IDY2OQovQ2FwSGVpZ2h0IDY2OQovRGVzY2VudCAtMTkz
Ci9Gb250TmFtZSAvWUxGT0FVK05pbWJ1c1JvbU5vOUwtUmVndUl0YWwKL0l0YWxpY0FuZ2xlIC0x
NS41Ci9TdGVtViA3OAovWEhlaWdodCA0NDEKL0ZvbnRCQm94IFstMTY5IC0yNzAgMTAxMCA5MjRd
Ci9GbGFncyA0Ci9DaGFyU2V0ICgvZmkvZXhjbGFtL3F1b3RlcmlnaHQvcGFyZW5sZWZ0L3BhcmVu
cmlnaHQvcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoL3plcm8vb25lL2ZvdXIvZml2ZS9z
ZXZlbi9jb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24vQS9CL0MvRC9FL0YvRy9JL0ov
TC9NL04vTy9QL1IvUy9UL1UvVy9YL1kvYS9iL2MvZC9lL2YvZy9oL2kvay9sL20vbi9vL3AvcS9y
L3MvdC91L3Yvdy94L3kveikKL0ZvbnRGaWxlIDE2MSAwIFIKPj4gZW5kb2JqCjgxMyAwIG9iagpb
NTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDMzMyAwIDAgMCAwIDAgMzMzIDMzMyAzMzMgMCA2NzUgMjUwIDMzMyAyNTAgMjc4IDUw
MCA1MDAgMCAwIDUwMCA1MDAgMCA1MDAgMCAwIDMzMyAwIDY3NSA2NzUgNjc1IDUwMCAwIDYxMSA2
MTEgNjY3IDcyMiA2MTEgNjExIDcyMiAwIDMzMyA0NDQgMCA1NTYgODMzIDY2NyA3MjIgNjExIDAg
NjExIDUwMCA1NTYgNzIyIDAgODMzIDYxMSA1NTYgMCAwIDAgMCAwIDAgMCA1MDAgNTAwIDQ0NCA1
MDAgNDQ0IDI3OCA1MDAgNTAwIDI3OCAwIDQ0NCAyNzggNzIyIDUwMCA1MDAgNTAwIDUwMCAzODkg
Mzg5IDI3OCA1MDAgNDQ0IDY2NyA0NDQgNDQ0IDM4OSBdCmVuZG9iagoxNTAgMCBvYmogPDwKL0xl
bmd0aDEgMTQ1NwovTGVuZ3RoMiA3NjE1Ci9MZW5ndGgzIDUzMgovTGVuZ3RoIDg0OTEgICAgICAK
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
RNFh0EY9YtlHhFxPjAkpELiNOAGmO0yjLorOd8ZafjaxdXyb6b9l8d7whor5dZFUYAG7KZ8Ie9MQ
/pclWESASlIe6L7/y2tibIrP/g10Ulo1nZAD1uaTUe6MvsZV2pXZwgAUXQaBwkMeYToI1Y/D7+UF
e2biDzlyadvURc9dCn6a2mdsGUqjcMcPi4qIbBd3SM6vyqnaP1PbHXbQT1dnZyjdTA8C++7PfNIY
I3+3VSg9nAJIL31jEH1qirLIdQOV21CedKZx0MhHjL3ZU8hmF/6cMB+wLAkGIo1+FXOukTmeG+gv
NXwWqItN/qLl2Ur2qvLXr2z+Vk7lq6/JVk1MSpYP9hXobsx9ncfDGPqKFWbPv33X3/CKZ0VWcbdb
ovn+Dz+E/7/A/xMFrBFQCMoN6QhBORD+FwujBKtlbmRzdHJlYW0KZW5kb2JqCjE1MSAwIG9iaiA8
PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL0VuY29kaW5nIDgxNCAwIFIKL0ZpcnN0Q2hh
ciA0NQovTGFzdENoYXIgMTI2Ci9XaWR0aHMgODE1IDAgUgovQmFzZUZvbnQgL0lETEdETytDTVRU
OAovRm9udERlc2NyaXB0b3IgMTQ5IDAgUgo+PiBlbmRvYmoKMTQ5IDAgb2JqIDw8Ci9Bc2NlbnQg
NjExCi9DYXBIZWlnaHQgNjExCi9EZXNjZW50IC0yMjIKL0ZvbnROYW1lIC9JRExHRE8rQ01UVDgK
L0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDc2Ci9YSGVpZ2h0IDQzMQovRm9udEJCb3ggWy01IC0yMzIg
NTQ1IDY5OV0KL0ZsYWdzIDQKL0NoYXJTZXQgKC9oeXBoZW4vcGVyaW9kL3NsYXNoL3plcm8vb25l
L2ZvdXIvZml2ZS9zaXgvc2V2ZW4vZWlnaHQvbmluZS9jb2xvbi9lcXVhbC9xdWVzdGlvbi9hdC9F
L0YvSy9QL1MvdW5kZXJzY29yZS9hL2IvYy9kL2UvZi9nL2gvaS9rL2wvbS9uL28vcC9xL3Ivcy90
L3Uvdi93L3gveS9hc2NpaXRpbGRlKQovRm9udEZpbGUgMTUwIDAgUgo+PiBlbmRvYmoKODE1IDAg
b2JqCls1MzEgNTMxIDUzMSA1MzEgNTMxIDAgMCA1MzEgNTMxIDUzMSA1MzEgNTMxIDUzMSA1MzEg
MCAwIDUzMSAwIDUzMSA1MzEgMCAwIDAgMCA1MzEgNTMxIDAgMCAwIDAgNTMxIDAgMCAwIDAgNTMx
IDAgMCA1MzEgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUzMSAwIDUzMSA1MzEgNTMxIDUzMSA1MzEg
NTMxIDUzMSA1MzEgNTMxIDAgNTMxIDUzMSA1MzEgNTMxIDUzMSA1MzEgNTMxIDUzMSA1MzEgNTMx
IDUzMSA1MzEgNTMxIDUzMSA1MzEgMCAwIDAgMCA1MzEgXQplbmRvYmoKODE0IDAgb2JqIDw8Ci9U
eXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyAwIC8ubm90ZGVmIDQ1L2h5cGhlbi9wZXJpb2Qv
c2xhc2gvemVyby9vbmUgNTAvLm5vdGRlZiA1Mi9mb3VyL2ZpdmUvc2l4L3NldmVuL2VpZ2h0L25p
bmUvY29sb24gNTkvLm5vdGRlZiA2MS9lcXVhbCA2Mi8ubm90ZGVmIDYzL3F1ZXN0aW9uL2F0IDY1
Ly5ub3RkZWYgNjkvRS9GIDcxLy5ub3RkZWYgNzUvSyA3Ni8ubm90ZGVmIDgwL1AgODEvLm5vdGRl
ZiA4My9TIDg0Ly5ub3RkZWYgOTUvdW5kZXJzY29yZSA5Ni8ubm90ZGVmIDk3L2EvYi9jL2QvZS9m
L2cvaC9pIDEwNi8ubm90ZGVmIDEwNy9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveSAxMjIv
Lm5vdGRlZiAxMjYvYXNjaWl0aWxkZSAxMjcvLm5vdGRlZl0KPj4gZW5kb2JqCjEyOSAwIG9iaiA8
PAovTGVuZ3RoMSAxNzY5Ci9MZW5ndGgyIDEwMzM0Ci9MZW5ndGgzIDUzMgovTGVuZ3RoIDExMzYw
ICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja7ZVVXJzL9qbR4BA0EKxxgjfu
FiC4uwVrHBpoPFggWIDg7ho8BHcJbsHdIbi7w/Te5/x3cs5czlzNb7r7ot+3VlU9a62q76OhUFZj
FjMDm4CkwPbOzEAWID/grYK6OpANAGRhYxNHpaF56wQydrYC20sYO4P4AUA+PnaAmIMTgJ0bAGTj
52SH/lBpAG/BDh5OVhaWzgD6t2/+CuIBiNmBnKxMje0BCsbOliA76BqmxrYANbCpFcjZgwUgZmsL
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
bzSLj4UcEApwuiDRxNRMSePDBi55f3TsZPqry85Ovh9i9wQmw4oTwxodD6NDcG9p5xjSy6NWFWIu
1zfs4JNFuPIUPkFMr6tI9ag40Du4e8l5qBiVkOKGTYazBUK/yc9FPV5qcyM7uD1eW5Nvi3l76mkW
swbY/3p/BWOO3VS+HQeDZUwHFM3YmZbRVzojv6Gyi6QvoPRTCGkmXJGdQsjVWDsY/rH/84ESvdmm
huSUbhE9tbMz4uWXW3Vz5apYnsTk9kPdY7b/ww/q/1/g/4kFTG1Bxk7OYDtjJxvU/wV/esy3ZW5k
c3RyZWFtCmVuZG9iagoxMzAgMCBvYmogPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9F
bmNvZGluZyA4MTYgMCBSCi9GaXJzdENoYXIgMzgKL0xhc3RDaGFyIDEyNgovV2lkdGhzIDgxNyAw
IFIKL0Jhc2VGb250IC9HRlNVSE8rQ01UVDEwCi9Gb250RGVzY3JpcHRvciAxMjggMCBSCj4+IGVu
ZG9iagoxMjggMCBvYmogPDwKL0FzY2VudCA2MTEKL0NhcEhlaWdodCA2MTEKL0Rlc2NlbnQgLTIy
MgovRm9udE5hbWUgL0dGU1VITytDTVRUMTAKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDY5Ci9YSGVp
Z2h0IDQzMQovRm9udEJCb3ggWy00IC0yMzUgNzMxIDgwMF0KL0ZsYWdzIDQKL0NoYXJTZXQgKC9h
bXBlcnNhbmQvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4v
cGVyaW9kL3NsYXNoL3plcm8vb25lL3R3by90aHJlZS9maXZlL3NpeC9zZXZlbi9laWdodC9uaW5l
L2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvUC9SL1MvVC9XL1gvYnJhY2tldGxl
ZnQvYnJhY2tldHJpZ2h0L3VuZGVyc2NvcmUvYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28v
cC9xL3Ivcy90L3Uvdi93L3gveS9icmFjZWxlZnQvYmFyL2JyYWNlcmlnaHQvYXNjaWl0aWxkZSkK
L0ZvbnRGaWxlIDEyOSAwIFIKPj4gZW5kb2JqCjgxNyAwIG9iagpbNTI1IDAgNTI1IDUyNSA1MjUg
NTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgMCA1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNSA1MjUgNTI1IDUyNSA1MjUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUy
NSAwIDUyNSA1MjUgNTI1IDAgMCA1MjUgNTI1IDAgMCA1MjUgMCA1MjUgMCA1MjUgMCA1MjUgNTI1
IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUg
NTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgMCA1MjUgNTI1IDUyNSA1MjUgXQpl
bmRvYmoKODE2IDAgb2JqIDw8Ci9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyAwIC8ubm90
ZGVmIDM4L2FtcGVyc2FuZCAzOS8ubm90ZGVmIDQwL3BhcmVubGVmdC9wYXJlbnJpZ2h0L2FzdGVy
aXNrL3BsdXMvY29tbWEvaHlwaGVuL3BlcmlvZC9zbGFzaC96ZXJvL29uZS90d28vdGhyZWUgNTIv
Lm5vdGRlZiA1My9maXZlL3NpeC9zZXZlbi9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNz
L2VxdWFsL2dyZWF0ZXIgNjMvLm5vdGRlZiA4MC9QIDgxLy5ub3RkZWYgODIvUi9TL1QgODUvLm5v
dGRlZiA4Ny9XL1ggODkvLm5vdGRlZiA5MS9icmFja2V0bGVmdCA5Mi8ubm90ZGVmIDkzL2JyYWNr
ZXRyaWdodCA5NC8ubm90ZGVmIDk1L3VuZGVyc2NvcmUgOTYvLm5vdGRlZiA5Ny9hL2IvYy9kL2Uv
Zi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95IDEyMi8ubm90ZGVmIDEyMy9i
cmFjZWxlZnQvYmFyL2JyYWNlcmlnaHQvYXNjaWl0aWxkZSAxMjcvLm5vdGRlZl0KPj4gZW5kb2Jq
CjExNyAwIG9iaiA8PAovTGVuZ3RoMSAxNjI2Ci9MZW5ndGgyIDE1MjA0Ci9MZW5ndGgzIDUzMgov
TGVuZ3RoIDE2MDc1ICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnja7XdVcGRL
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
VoHzNw7NV5VIzadjCYgnuTWHrisTgoMvavDF9F4PD4L1G6OUuh57N0b0K0PVAyeBYkCqeoaMzgDI
1e7Gl+1Qxz6ZZsmYvg0rxsA5NSFTNPzXP+Qw2eHthpzsPyb2H1ODOVnkO9pN0FtDTidNyKI1hU2v
kDIwzj7aN58wxAtJfWI8alUQvGuEJ5zlFX6yHnL8uLvxuqlPGZI1c+Yo0nqZb4wMbu5I5bBgIaYU
/xnFQHZ9x+YAxsAteepE5oLG3y3ak8+d1suc4Tbsk2r8MGx1B/j+i8uVp7XlUGqgcPZ87b3xGR9D
kKbZvu0Qs/JHHTPW9Mxk/oIBijzCvAehvSGjoBmuwgwHegM+8fNrm5xKRnPiHA5wOIcyQ6kXSgp3
/XTdMTKk+dnHyR1PuWHEeyIO27XJJSr/9DJLh65ryKWe3NXX39zvM2kKFPyhQJZI2Rq/UlvI0fpR
Ty6pfDwqCi4Xzb0byUZptC6FrVDuezqy1Yn3W6hQBFMEPR728oWgYJIv4qStHzvlnEtIVlWQe+xZ
Wqn4SUwpqlfHd2mLXC37222WOuAj4kTysc7zj8YZcBAS3SEtr70P92gP5L18J9tv4e32lj/E4/TC
mZE7VMrazkE/7Tf0qRgx4WOtOulF+CPo63EOBsAtQVJZ0Le2uedCZGBjfmGscUyXkZWWGegG/mk3
HYEoMc5f82pr7YD1fK+/GTIrag0KYPxvfmD+P8D/EwBGVgADBydbawMHS5j/BRVt+GRlbmRzdHJl
YW0KZW5kb2JqCjExOCAwIG9iaiA8PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL0VuY29k
aW5nIDgxMiAwIFIKL0ZpcnN0Q2hhciAyCi9MYXN0Q2hhciAxNTEKL1dpZHRocyA4MTggMCBSCi9C
YXNlRm9udCAvT1ZUQ05SK05pbWJ1c1JvbU5vOUwtTWVkaQovRm9udERlc2NyaXB0b3IgMTE2IDAg
Ugo+PiBlbmRvYmoKMTE2IDAgb2JqIDw8Ci9Bc2NlbnQgNjkwCi9DYXBIZWlnaHQgNjkwCi9EZXNj
ZW50IC0yMDkKL0ZvbnROYW1lIC9PVlRDTlIrTmltYnVzUm9tTm85TC1NZWRpCi9JdGFsaWNBbmds
ZSAwCi9TdGVtViAxNDAKL1hIZWlnaHQgNDYxCi9Gb250QkJveCBbLTE2OCAtMzQxIDEwMDAgOTYw
XQovRmxhZ3MgNAovQ2hhclNldCAoL2ZpL2ZsL3BhcmVubGVmdC9wYXJlbnJpZ2h0L2NvbW1hL2h5
cGhlbi9wZXJpb2Qvc2xhc2gvemVyby9vbmUvdHdvL3RocmVlL2ZvdXIvZml2ZS9zaXgvc2V2ZW4v
ZWlnaHQvbmluZS9jb2xvbi9sZXNzL2dyZWF0ZXIvcXVlc3Rpb24vQS9DL0QvRS9IL0kvTC9NL04v
Ty9QL1IvUy9UL1UvVi9XL2JyYWNrZXRsZWZ0L2JyYWNrZXRyaWdodC9hL2IvYy9kL2UvZi9nL2gv
aS9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L2VtZGFzaCkKL0ZvbnRGaWxlIDExNyAw
IFIKPj4gZW5kb2JqCjgxOCAwIG9iagpbNTU2IDU1NiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAzMzMgMzMzIDAg
MCAyNTAgMzMzIDI1MCAyNzggNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAw
IDMzMyAwIDU3MCAwIDU3MCA1MDAgMCA3MjIgMCA3MjIgNzIyIDY2NyAwIDAgNzc4IDM4OSAwIDAg
NjY3IDk0NCA3MjIgNzc4IDYxMSAwIDcyMiA1NTYgNjY3IDcyMiA3MjIgMTAwMCAwIDAgMCAzMzMg
MCAzMzMgMCAwIDAgNTAwIDU1NiA0NDQgNTU2IDQ0NCAzMzMgNTAwIDU1NiAyNzggMCA1NTYgMjc4
IDgzMyA1NTYgNTAwIDU1NiA1NTYgNDQ0IDM4OSAzMzMgNTU2IDUwMCA3MjIgNTAwIDUwMCA0NDQg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAx
MDAwIF0KZW5kb2JqCjExNCAwIG9iaiA8PAovTGVuZ3RoMSAxMDM4Ci9MZW5ndGgyIDIzOTAKL0xl
bmd0aDMgNTMyCi9MZW5ndGggMzEwMSAgICAgIAovRmlsdGVyIC9GbGF0ZURlY29kZQo+PgpzdHJl
YW0KeNrtU2k8VH0bbrONLFHZc1TIOjN2QiFkL1J2jZljDLMwi4ydyJpKSkJkiyIpNEqIirIvzzCF
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
/SdZF4tKL1U4tSH5aB4fp+avmxmN6U7kUubUbYflsdpJxRu8Na9kJvCM+pSYM3OjQmpba7ISF1rQ
xbkFksEqyMI7m5xLbZjHXq++OhiQtiRnnZ/rULU0P7NtS5j74C6ive8YLlM5onRh3IC8j2GMwLzR
C55ahn3KgBOypK8epmTrVpg07sjlK/hc3vJmp0Pte57BgZE6ci4lCf76gayWqGp3DCLD1IQ6u/xW
m69xK1ovMV7gk/voFzlud/lwx7yOim83ZZKmC23kec+NZMDuOVeDYzVoXiXDmvN0Z6Pv1GX20T1K
gaf82lt2zjp+bEjIYZ0MfdK3L6qtrdc7O3FHra7xEYuFl0C6ZZ9JghjxtmDpOUMkYkrlo87XxMcN
iP/wgf1f4H9CAI0HUWQqiYAi+8D+BamsaoZlbmRzdHJlYW0KZW5kb2JqCjExNSAwIG9iaiA8PAov
VHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL0VuY29kaW5nIDgxOSAwIFIKL0ZpcnN0Q2hhciAw
Ci9MYXN0Q2hhciAxMTIKL1dpZHRocyA4MjAgMCBSCi9CYXNlRm9udCAvT0NUQUhGK0NNU1kxMAov
Rm9udERlc2NyaXB0b3IgMTEzIDAgUgo+PiBlbmRvYmoKMTEzIDAgb2JqIDw8Ci9Bc2NlbnQgNzUw
Ci9DYXBIZWlnaHQgNjgzCi9EZXNjZW50IC0xOTQKL0ZvbnROYW1lIC9PQ1RBSEYrQ01TWTEwCi9J
dGFsaWNBbmdsZSAtMTQuMDM1Ci9TdGVtViA4NQovWEhlaWdodCA0MzEKL0ZvbnRCQm94IFstMjkg
LTk2MCAxMTE2IDc3NV0KL0ZsYWdzIDQKL0NoYXJTZXQgKC9taW51cy9wZXJpb2RjZW50ZXJlZC9t
dWx0aXBseS9hc3Rlcmlza21hdGgvbGVzc2VxdWFsL2dyZWF0ZXJlcXVhbC9lbGVtZW50L25lZ2F0
aW9uc2xhc2gvZXhpc3RlbnRpYWwvdW5pb24vYnJhY2VsZWZ0L2JyYWNlcmlnaHQvYmFyL3JhZGlj
YWwpCi9Gb250RmlsZSAxMTQgMCBSCj4+IGVuZG9iago4MjAgMCBvYmoKWzc3OCAyNzggNzc4IDUw
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDc3OCA3NzggMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2NjcgMCAwIDAgMCAwIDAg
NTU2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDY2NyAwIDAgMCAwIDAgMCAwIDAgMCAwIDUwMCA1MDAgMCAwIDI3OCAwIDAg
MCAwIDAgODMzIF0KZW5kb2JqCjgxOSAwIG9iaiA8PAovVHlwZSAvRW5jb2RpbmcKL0RpZmZlcmVu
Y2VzIFsgMCAvbWludXMvcGVyaW9kY2VudGVyZWQvbXVsdGlwbHkvYXN0ZXJpc2ttYXRoIDQvLm5v
dGRlZiAyMC9sZXNzZXF1YWwvZ3JlYXRlcmVxdWFsIDIyLy5ub3RkZWYgNTAvZWxlbWVudCA1MS8u
bm90ZGVmIDU0L25lZ2F0aW9uc2xhc2ggNTUvLm5vdGRlZiA1Ny9leGlzdGVudGlhbCA1OC8ubm90
ZGVmIDkxL3VuaW9uIDkyLy5ub3RkZWYgMTAyL2JyYWNlbGVmdC9icmFjZXJpZ2h0IDEwNC8ubm90
ZGVmIDEwNi9iYXIgMTA3Ly5ub3RkZWYgMTEyL3JhZGljYWwgMTEzLy5ub3RkZWZdCj4+IGVuZG9i
agoxMTEgMCBvYmogPDwKL0xlbmd0aDEgMTYzMAovTGVuZ3RoMiAxODY4MAovTGVuZ3RoMyA1MzIK
L0xlbmd0aCAxOTU5OSAgICAgCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp42qy5c3Sk
b7cmHLNjuzo2O+kkHdu2VbFt2+o4Hdu2bdu27a9/73tmzqzzzfwzc/6otZ5749q49r1rPVVk3+UU
6fiNbAyAIjbWjnRM9IycABkzKwMnBwUbKxkbDik6BaCJE+CvnBWOjEzQHqjvaGZjLaTvCOQEqAKN
AEJAQwAzM4CJg4MDjgwgaGPrZm9mYuoIoFRWUKWioaH9T8k/JgADt/+h+evpYGZiDSD/++AMtLSx
tQJaO/6F+L92VAQCAY6mQICxmSUQICgrpy4uIwqgFJVRBogCrYH2+pYAOScDSzNDgJSZIdDaAUgF
MLaxB1j++wAwtLE2MvunNAf6v1j8DgB9gIMt0NDsrxvQ1RBo+4+KFmALtLcyc3D4+wwwcwCY2Otb
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
mT/k5nZMRDbyNYQXuxeS3HfCxZ53M8yuRu8CxjnUaWLqtj9D6+fuu5Sk3SW1cKnFwH7RcQdrZpqB
CwMV2pRUQwVbqDy1V/lqfg3oWk+A9EshvYW345YrMN26On8qz1hKelklN2pAsUKWyORwyza90tlw
QbLFNXnB8TgLgm4AtZ1f/r8M+H/gfwJw9nRxxPh7ezli0MD/AGDTDKhlbmRzdHJlYW0KZW5kb2Jq
CjExMiAwIG9iaiA8PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTEKL0VuY29kaW5nIDgxMiAw
IFIKL0ZpcnN0Q2hhciAyCi9MYXN0Q2hhciAyNDYKL1dpZHRocyA4MjEgMCBSCi9CYXNlRm9udCAv
V0FVWUpUK05pbWJ1c1JvbU5vOUwtUmVndQovRm9udERlc2NyaXB0b3IgMTEwIDAgUgo+PiBlbmRv
YmoKMTEwIDAgb2JqIDw8Ci9Bc2NlbnQgNjc4Ci9DYXBIZWlnaHQgNjUxCi9EZXNjZW50IC0yMTYK
L0ZvbnROYW1lIC9XQVVZSlQrTmltYnVzUm9tTm85TC1SZWd1Ci9JdGFsaWNBbmdsZSAwCi9TdGVt
ViA4NQovWEhlaWdodCA0NTAKL0ZvbnRCQm94IFstMTY4IC0yODEgMTAwMCA5MjRdCi9GbGFncyA0
Ci9DaGFyU2V0ICgvZmkvZmwvcXVvdGVyaWdodC9wYXJlbmxlZnQvcGFyZW5yaWdodC9wbHVzL2Nv
bW1hL2h5cGhlbi9wZXJpb2Qvc2xhc2gvemVyby9vbmUvdHdvL3RocmVlL2ZvdXIvZml2ZS9zaXgv
c2V2ZW4vZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vZXF1YWwvcXVlc3Rpb24vQS9CL0MvRC9F
L0YvRy9IL0kvSi9LL0wvTS9OL08vUC9RL1IvUy9UL1UvVi9XL1kvYnJhY2tldGxlZnQvYnJhY2tl
dHJpZ2h0L2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kv
ei9kYWdnZXIvZGFnZ2VyZGJsL3F1b3RlZGJsbGVmdC9xdW90ZWRibHJpZ2h0L2VuZGFzaC9lbWRh
c2gvRWFjdXRlL2FkaWVyZXNpcy9lYWN1dGUvb2RpZXJlc2lzKQovRm9udEZpbGUgMTExIDAgUgo+
PiBlbmRvYmoKODIxIDAgb2JqCls1NTYgNTU2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAzMzMgMzMzIDMzMyAwIDU2
NCAyNTAgMzMzIDI1MCAyNzggNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAw
IDI3OCAyNzggMCA1NjQgMCA0NDQgMCA3MjIgNjY3IDY2NyA3MjIgNjExIDU1NiA3MjIgNzIyIDMz
MyAzODkgNzIyIDYxMSA4ODkgNzIyIDcyMiA1NTYgNzIyIDY2NyA1NTYgNjExIDcyMiA3MjIgOTQ0
IDAgNzIyIDAgMzMzIDAgMzMzIDAgMCAwIDQ0NCA1MDAgNDQ0IDUwMCA0NDQgMzMzIDUwMCA1MDAg
Mjc4IDI3OCA1MDAgMjc4IDc3OCA1MDAgNTAwIDUwMCA1MDAgMzMzIDM4OSAyNzggNTAwIDUwMCA3
MjIgNTAwIDUwMCA0NDQgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUwMCA1MDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDQ0NCA0NDQgMCA1MDAgMTAwMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDYxMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgNDQ0IDAgMCAwIDAgNDQ0IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUwMCBd
CmVuZG9iagoxNTQgMCBvYmogPDwKL1R5cGUgL1BhZ2VzCi9Db3VudCA2Ci9QYXJlbnQgODIyIDAg
UgovS2lkcyBbMTA1IDAgUiAxNTYgMCBSIDE3NCAwIFIgMTgzIDAgUiAxOTEgMCBSIDIwNCAwIFJd
Cj4+IGVuZG9iagoyMTEgMCBvYmogPDwKL1R5cGUgL1BhZ2VzCi9Db3VudCA2Ci9QYXJlbnQgODIy
IDAgUgovS2lkcyBbMjA4IDAgUiAyMTMgMCBSIDI0NCAwIFIgMzA1IDAgUiAzNjUgMCBSIDQyNyAw
IFJdCj4+IGVuZG9iago0ODEgMCBvYmogPDwKL1R5cGUgL1BhZ2VzCi9Db3VudCA2Ci9QYXJlbnQg
ODIyIDAgUgovS2lkcyBbNDU4IDAgUiA0ODMgMCBSIDUxMSAwIFIgNTQ1IDAgUiA1NjkgMCBSIDU5
NyAwIFJdCj4+IGVuZG9iago2ODYgMCBvYmogPDwKL1R5cGUgL1BhZ2VzCi9Db3VudCA0Ci9QYXJl
bnQgODIyIDAgUgovS2lkcyBbNjQzIDAgUiA2ODggMCBSIDc0OCAwIFIgNzgzIDAgUl0KPj4gZW5k
b2JqCjgyMiAwIG9iaiA8PAovVHlwZSAvUGFnZXMKL0NvdW50IDIyCi9LaWRzIFsxNTQgMCBSIDIx
MSAwIFIgNDgxIDAgUiA2ODYgMCBSXQo+PiBlbmRvYmoKODIzIDAgb2JqIDw8Ci9UeXBlIC9PdXRs
aW5lcwovRmlyc3QgNyAwIFIKL0xhc3QgMTAyIDAgUgovQ291bnQgOAo+PiBlbmRvYmoKMTAyIDAg
b2JqIDw8Ci9UaXRsZSAxMDMgMCBSCi9BIDEwMCAwIFIKL1BhcmVudCA4MjMgMCBSCi9QcmV2IDk4
IDAgUgo+PiBlbmRvYmoKOTggMCBvYmogPDwKL1RpdGxlIDk5IDAgUgovQSA5NiAwIFIKL1BhcmVu
dCA4MjMgMCBSCi9QcmV2IDI3IDAgUgovTmV4dCAxMDIgMCBSCj4+IGVuZG9iago5NCAwIG9iaiA8
PAovVGl0bGUgOTUgMCBSCi9BIDkyIDAgUgovUGFyZW50IDg2IDAgUgovUHJldiA5MCAwIFIKPj4g
ZW5kb2JqCjkwIDAgb2JqIDw8Ci9UaXRsZSA5MSAwIFIKL0EgODggMCBSCi9QYXJlbnQgODYgMCBS
Ci9OZXh0IDk0IDAgUgo+PiBlbmRvYmoKODYgMCBvYmogPDwKL1RpdGxlIDg3IDAgUgovQSA4NCAw
IFIKL1BhcmVudCA3OCAwIFIKL1ByZXYgODIgMCBSCi9GaXJzdCA5MCAwIFIKL0xhc3QgOTQgMCBS
Ci9Db3VudCAtMgo+PiBlbmRvYmoKODIgMCBvYmogPDwKL1RpdGxlIDgzIDAgUgovQSA4MCAwIFIK
L1BhcmVudCA3OCAwIFIKL05leHQgODYgMCBSCj4+IGVuZG9iago3OCAwIG9iaiA8PAovVGl0bGUg
NzkgMCBSCi9BIDc3IDAgUgovUGFyZW50IDI3IDAgUgovUHJldiAzMSAwIFIKL0ZpcnN0IDgyIDAg
UgovTGFzdCA4NiAwIFIKL0NvdW50IC0yCj4+IGVuZG9iago3NSAwIG9iaiA8PAovVGl0bGUgNzYg
MCBSCi9BIDczIDAgUgovUGFyZW50IDMxIDAgUgovUHJldiA3MSAwIFIKPj4gZW5kb2JqCjcxIDAg
b2JqIDw8Ci9UaXRsZSA3MiAwIFIKL0EgNjkgMCBSCi9QYXJlbnQgMzEgMCBSCi9QcmV2IDY3IDAg
UgovTmV4dCA3NSAwIFIKPj4gZW5kb2JqCjY3IDAgb2JqIDw8Ci9UaXRsZSA2OCAwIFIKL0EgNjUg
MCBSCi9QYXJlbnQgMzEgMCBSCi9QcmV2IDYzIDAgUgovTmV4dCA3MSAwIFIKPj4gZW5kb2JqCjYz
IDAgb2JqIDw8Ci9UaXRsZSA2NCAwIFIKL0EgNjEgMCBSCi9QYXJlbnQgMzEgMCBSCi9QcmV2IDU5
IDAgUgovTmV4dCA2NyAwIFIKPj4gZW5kb2JqCjU5IDAgb2JqIDw8Ci9UaXRsZSA2MCAwIFIKL0Eg
NTcgMCBSCi9QYXJlbnQgMzEgMCBSCi9QcmV2IDU1IDAgUgovTmV4dCA2MyAwIFIKPj4gZW5kb2Jq
CjU1IDAgb2JqIDw8Ci9UaXRsZSA1NiAwIFIKL0EgNTMgMCBSCi9QYXJlbnQgMzEgMCBSCi9QcmV2
IDUxIDAgUgovTmV4dCA1OSAwIFIKPj4gZW5kb2JqCjUxIDAgb2JqIDw8Ci9UaXRsZSA1MiAwIFIK
L0EgNDkgMCBSCi9QYXJlbnQgMzEgMCBSCi9QcmV2IDQ3IDAgUgovTmV4dCA1NSAwIFIKPj4gZW5k
b2JqCjQ3IDAgb2JqIDw8Ci9UaXRsZSA0OCAwIFIKL0EgNDUgMCBSCi9QYXJlbnQgMzEgMCBSCi9Q
cmV2IDQzIDAgUgovTmV4dCA1MSAwIFIKPj4gZW5kb2JqCjQzIDAgb2JqIDw8Ci9UaXRsZSA0NCAw
IFIKL0EgNDEgMCBSCi9QYXJlbnQgMzEgMCBSCi9QcmV2IDM5IDAgUgovTmV4dCA0NyAwIFIKPj4g
ZW5kb2JqCjM5IDAgb2JqIDw8Ci9UaXRsZSA0MCAwIFIKL0EgMzcgMCBSCi9QYXJlbnQgMzEgMCBS
Ci9QcmV2IDM1IDAgUgovTmV4dCA0MyAwIFIKPj4gZW5kb2JqCjM1IDAgb2JqIDw8Ci9UaXRsZSAz
NiAwIFIKL0EgMzMgMCBSCi9QYXJlbnQgMzEgMCBSCi9OZXh0IDM5IDAgUgo+PiBlbmRvYmoKMzEg
MCBvYmogPDwKL1RpdGxlIDMyIDAgUgovQSAyOSAwIFIKL1BhcmVudCAyNyAwIFIKL05leHQgNzgg
MCBSCi9GaXJzdCAzNSAwIFIKL0xhc3QgNzUgMCBSCi9Db3VudCAtMTEKPj4gZW5kb2JqCjI3IDAg
b2JqIDw8Ci9UaXRsZSAyOCAwIFIKL0EgMjUgMCBSCi9QYXJlbnQgODIzIDAgUgovUHJldiAyMyAw
IFIKL05leHQgOTggMCBSCi9GaXJzdCAzMSAwIFIKL0xhc3QgNzggMCBSCi9Db3VudCAtMgo+PiBl
bmRvYmoKMjMgMCBvYmogPDwKL1RpdGxlIDI0IDAgUgovQSAyMSAwIFIKL1BhcmVudCA4MjMgMCBS
Ci9QcmV2IDE5IDAgUgovTmV4dCAyNyAwIFIKPj4gZW5kb2JqCjE5IDAgb2JqIDw8Ci9UaXRsZSAy
MCAwIFIKL0EgMTcgMCBSCi9QYXJlbnQgODIzIDAgUgovUHJldiAxNSAwIFIKL05leHQgMjMgMCBS
Cj4+IGVuZG9iagoxNSAwIG9iaiA8PAovVGl0bGUgMTYgMCBSCi9BIDEzIDAgUgovUGFyZW50IDgy
MyAwIFIKL1ByZXYgMTEgMCBSCi9OZXh0IDE5IDAgUgo+PiBlbmRvYmoKMTEgMCBvYmogPDwKL1Rp
dGxlIDEyIDAgUgovQSA5IDAgUgovUGFyZW50IDgyMyAwIFIKL1ByZXYgNyAwIFIKL05leHQgMTUg
MCBSCj4+IGVuZG9iago3IDAgb2JqIDw8Ci9UaXRsZSA4IDAgUgovQSA1IDAgUgovUGFyZW50IDgy
MyAwIFIKL05leHQgMTEgMCBSCj4+IGVuZG9iago4MjQgMCBvYmogPDwKL05hbWVzIFsoRG9jLVN0
YXJ0KSAxMDkgMCBSIChIZm9vdG5vdGUuMSkgMTY2IDAgUiAoSGZvb3Rub3RlLjIpIDE2OSAwIFIg
KEhmb290bm90ZS4zKSAxNzEgMCBSIChIZm9vdG5vdGUuNCkgMTg4IDAgUiAoSGZvb3Rub3RlLjUp
IDU5MCAwIFIgKEhmb290bm90ZS42KSA1OTIgMCBSIChIZm9vdG5vdGUuNykgNTk0IDAgUiAoSXRl
bS4xKSA3NjkgMCBSIChJdGVtLjEwKSA3OTAgMCBSIChJdGVtLjExKSA3OTEgMCBSIChJdGVtLjEy
KSA3OTIgMCBSIChJdGVtLjEzKSA3OTUgMCBSIChJdGVtLjE0KSA3OTcgMCBSIChJdGVtLjE1KSA4
MDAgMCBSIChJdGVtLjIpIDc3MCAwIFIgKEl0ZW0uMykgNzczIDAgUiAoSXRlbS40KSA3NzYgMCBS
IChJdGVtLjUpIDc3OCAwIFIgKEl0ZW0uNikgNzc5IDAgUiAoSXRlbS43KSA3ODEgMCBSIChJdGVt
LjgpIDc4NiAwIFIgKEl0ZW0uOSkgNzg4IDAgUiAobHN0bGlzdGluZy4tMSkgMjE2IDAgUiAobHN0
bGlzdGluZy4tMTApIDQ1MyAwIFIgKGxzdGxpc3RpbmcuLTExKSA0NTUgMCBSIChsc3RsaXN0aW5n
Li0xMikgNDYxIDAgUiAobHN0bGlzdGluZy4tMTMpIDQ2MyAwIFIgKGxzdGxpc3RpbmcuLTE0KSA0
NjUgMCBSIChsc3RsaXN0aW5nLi0xNSkgNDY3IDAgUiAobHN0bGlzdGluZy4tMTYpIDQ2OSAwIFIg
KGxzdGxpc3RpbmcuLTE3KSA0NzEgMCBSIChsc3RsaXN0aW5nLi0xOCkgNDczIDAgUiAobHN0bGlz
dGluZy4tMTkpIDQ3NSAwIFIgKGxzdGxpc3RpbmcuLTIpIDI0NyAwIFIgKGxzdGxpc3RpbmcuLTIw
KSA0NzcgMCBSIChsc3RsaXN0aW5nLi0yMSkgNDc5IDAgUiAobHN0bGlzdGluZy4tMjIpIDQ4NiAw
IFIgKGxzdGxpc3RpbmcuLTIzKSA0ODggMCBSIChsc3RsaXN0aW5nLi0yNCkgNDkwIDAgUiAobHN0
bGlzdGluZy4tMjUpIDQ5MiAwIFIgKGxzdGxpc3RpbmcuLTI2KSA0OTYgMCBSIChsc3RsaXN0aW5n
Li0yNykgNDk4IDAgUiAobHN0bGlzdGluZy4tMjgpIDUwMiAwIFIgKGxzdGxpc3RpbmcuLTI5KSA1
MDYgMCBSIChsc3RsaXN0aW5nLi0zKSAyODAgMCBSIChsc3RsaXN0aW5nLi0zMCkgNTE0IDAgUiAo
bHN0bGlzdGluZy4tMzEpIDUxOCAwIFIgKGxzdGxpc3RpbmcuLTMyKSA1MjIgMCBSIChsc3RsaXN0
aW5nLi0zMykgNTM4IDAgUiAobHN0bGlzdGluZy4tMzQpIDU0MCAwIFIgKGxzdGxpc3RpbmcuLTM1
KSA1NDIgMCBSIChsc3RsaXN0aW5nLi0zNikgNTQ4IDAgUiAobHN0bGlzdGluZy4tMzcpIDU1MCAw
IFIgKGxzdGxpc3RpbmcuLTM4KSA1NTIgMCBSIChsc3RsaXN0aW5nLi0zOSkgNTU0IDAgUiAobHN0
bGlzdGluZy4tNCkgMzIzIDAgUiAobHN0bGlzdGluZy4tNDApIDU1NiAwIFIgKGxzdGxpc3Rpbmcu
LTQxKSA1NTggMCBSIChsc3RsaXN0aW5nLi00MikgNTYwIDAgUiAobHN0bGlzdGluZy4tNDMpIDU2
MiAwIFIgKGxzdGxpc3RpbmcuLTQ0KSA1NjQgMCBSIChsc3RsaXN0aW5nLi00NSkgNTY2IDAgUiAo
bHN0bGlzdGluZy4tNDYpIDU3MiAwIFIgKGxzdGxpc3RpbmcuLTQ3KSA1NzQgMCBSIChsc3RsaXN0
aW5nLi00OCkgNTc2IDAgUiAobHN0bGlzdGluZy4tNDkpIDU3OSAwIFIgKGxzdGxpc3RpbmcuLTUp
IDQ0MyAwIFIgKGxzdGxpc3RpbmcuLTUwKSA1ODIgMCBSIChsc3RsaXN0aW5nLi01MSkgNjAwIDAg
UiAobHN0bGlzdGluZy4tNTIpIDYyNSAwIFIgKGxzdGxpc3RpbmcuLTUzKSA2NjIgMCBSIChsc3Rs
aXN0aW5nLi01NCkgNjc3IDAgUiAobHN0bGlzdGluZy4tNTUpIDczOSAwIFIgKGxzdGxpc3Rpbmcu
LTYpIDQ0NSAwIFIgKGxzdGxpc3RpbmcuLTcpIDQ0NyAwIFIgKGxzdGxpc3RpbmcuLTgpIDQ0OSAw
IFIgKGxzdGxpc3RpbmcuLTkpIDQ1MSAwIFIgKGxzdG51bWJlci4tMS4xKSAyMTcgMCBSIChsc3Ru
dW1iZXIuLTEuMTApIDIyOSAwIFIgKGxzdG51bWJlci4tMS4xMSkgMjMwIDAgUiAobHN0bnVtYmVy
Li0xLjEyKSAyMzEgMCBSIChsc3RudW1iZXIuLTEuMTMpIDIzMiAwIFIgKGxzdG51bWJlci4tMS4x
NCkgMjMzIDAgUiAobHN0bnVtYmVyLi0xLjE1KSAyMzQgMCBSIChsc3RudW1iZXIuLTEuMTYpIDIz
NSAwIFIgKGxzdG51bWJlci4tMS4xNykgMjM2IDAgUiAobHN0bnVtYmVyLi0xLjE4KSAyMzcgMCBS
IChsc3RudW1iZXIuLTEuMTkpIDIzOCAwIFIgKGxzdG51bWJlci4tMS4yKSAyMjEgMCBSIChsc3Ru
dW1iZXIuLTEuMjApIDIzOSAwIFIgKGxzdG51bWJlci4tMS4yMSkgMjQwIDAgUiAobHN0bnVtYmVy
Li0xLjIyKSAyNDEgMCBSIChsc3RudW1iZXIuLTEuMjMpIDI0MiAwIFIgKGxzdG51bWJlci4tMS4z
KSAyMjIgMCBSIChsc3RudW1iZXIuLTEuNCkgMjIzIDAgUiAobHN0bnVtYmVyLi0xLjUpIDIyNCAw
IFIgKGxzdG51bWJlci4tMS42KSAyMjUgMCBSIChsc3RudW1iZXIuLTEuNykgMjI2IDAgUiAobHN0
bnVtYmVyLi0xLjgpIDIyNyAwIFIgKGxzdG51bWJlci4tMS45KSAyMjggMCBSIChsc3RudW1iZXIu
LTEwLjEpIDQ1NCAwIFIgKGxzdG51bWJlci4tMTEuMSkgNDU2IDAgUiAobHN0bnVtYmVyLi0xMi4x
KSA0NjIgMCBSIChsc3RudW1iZXIuLTEzLjEpIDQ2NCAwIFIgKGxzdG51bWJlci4tMTQuMSkgNDY2
IDAgUiAobHN0bnVtYmVyLi0xNS4xKSA0NjggMCBSIChsc3RudW1iZXIuLTE2LjEpIDQ3MCAwIFIg
KGxzdG51bWJlci4tMTcuMSkgNDcyIDAgUiAobHN0bnVtYmVyLi0xOC4xKSA0NzQgMCBSIChsc3Ru
dW1iZXIuLTE5LjEpIDQ3NiAwIFIgKGxzdG51bWJlci4tMi4xKSAyNDggMCBSIChsc3RudW1iZXIu
LTIuMTApIDI1NyAwIFIgKGxzdG51bWJlci4tMi4xMSkgMjU4IDAgUiAobHN0bnVtYmVyLi0yLjEy
KSAyNTkgMCBSIChsc3RudW1iZXIuLTIuMTMpIDI2MCAwIFIgKGxzdG51bWJlci4tMi4xNCkgMjYx
IDAgUiAobHN0bnVtYmVyLi0yLjE1KSAyNjIgMCBSIChsc3RudW1iZXIuLTIuMTYpIDI2MyAwIFIg
KGxzdG51bWJlci4tMi4xNykgMjY0IDAgUiAobHN0bnVtYmVyLi0yLjE4KSAyNjUgMCBSIChsc3Ru
dW1iZXIuLTIuMTkpIDI2NiAwIFIgKGxzdG51bWJlci4tMi4yKSAyNDkgMCBSIChsc3RudW1iZXIu
LTIuMjApIDI2NyAwIFIgKGxzdG51bWJlci4tMi4yMSkgMjY4IDAgUiAobHN0bnVtYmVyLi0yLjIy
KSAyNjkgMCBSIChsc3RudW1iZXIuLTIuMjMpIDI3MCAwIFIgKGxzdG51bWJlci4tMi4yNCkgMjcx
IDAgUiAobHN0bnVtYmVyLi0yLjI1KSAyNzIgMCBSIChsc3RudW1iZXIuLTIuMjYpIDI3MyAwIFIg
KGxzdG51bWJlci4tMi4yNykgMjc0IDAgUiAobHN0bnVtYmVyLi0yLjI4KSAyNzUgMCBSIChsc3Ru
dW1iZXIuLTIuMjkpIDI3NiAwIFIgKGxzdG51bWJlci4tMi4zKSAyNTAgMCBSIChsc3RudW1iZXIu
LTIuMzApIDI3NyAwIFIgKGxzdG51bWJlci4tMi4zMSkgMjc4IDAgUiAobHN0bnVtYmVyLi0yLjMy
KSAyNzkgMCBSIChsc3RudW1iZXIuLTIuNCkgMjUxIDAgUiAobHN0bnVtYmVyLi0yLjUpIDI1MiAw
IFIgKGxzdG51bWJlci4tMi42KSAyNTMgMCBSIChsc3RudW1iZXIuLTIuNykgMjU0IDAgUiAobHN0
bnVtYmVyLi0yLjgpIDI1NSAwIFIgKGxzdG51bWJlci4tMi45KSAyNTYgMCBSIChsc3RudW1iZXIu
LTIwLjEpIDQ3OCAwIFIgKGxzdG51bWJlci4tMjEuMSkgNDgwIDAgUiAobHN0bnVtYmVyLi0yMi4x
KSA0ODcgMCBSIChsc3RudW1iZXIuLTIzLjEpIDQ4OSAwIFIgKGxzdG51bWJlci4tMjQuMSkgNDkx
IDAgUiAobHN0bnVtYmVyLi0yNS4xKSA0OTMgMCBSIChsc3RudW1iZXIuLTI1LjIpIDQ5NCAwIFIg
KGxzdG51bWJlci4tMjUuMykgNDk1IDAgUiAobHN0bnVtYmVyLi0yNi4xKSA0OTcgMCBSIChsc3Ru
dW1iZXIuLTI3LjEpIDQ5OSAwIFIgKGxzdG51bWJlci4tMjcuMikgNTAwIDAgUiAobHN0bnVtYmVy
Li0yNy4zKSA1MDEgMCBSIChsc3RudW1iZXIuLTI4LjEpIDUwMyAwIFIgKGxzdG51bWJlci4tMjgu
MikgNTA0IDAgUiAobHN0bnVtYmVyLi0yOC4zKSA1MDUgMCBSIChsc3RudW1iZXIuLTI5LjEpIDUw
NyAwIFIgKGxzdG51bWJlci4tMjkuMikgNTA4IDAgUiAobHN0bnVtYmVyLi0yOS4zKSA1MDkgMCBS
IChsc3RudW1iZXIuLTMuMSkgMjgxIDAgUiAobHN0bnVtYmVyLi0zLjEwKSAyOTAgMCBSIChsc3Ru
dW1iZXIuLTMuMTEpIDI5MSAwIFIgKGxzdG51bWJlci4tMy4xMikgMjkyIDAgUiAobHN0bnVtYmVy
Li0zLjEzKSAyOTMgMCBSIChsc3RudW1iZXIuLTMuMTQpIDI5NCAwIFIgKGxzdG51bWJlci4tMy4x
NSkgMjk1IDAgUiAobHN0bnVtYmVyLi0zLjE2KSAyOTYgMCBSIChsc3RudW1iZXIuLTMuMTcpIDI5
NyAwIFIgKGxzdG51bWJlci4tMy4xOCkgMjk4IDAgUiAobHN0bnVtYmVyLi0zLjE5KSAyOTkgMCBS
IChsc3RudW1iZXIuLTMuMikgMjgyIDAgUiAobHN0bnVtYmVyLi0zLjIwKSAzMDAgMCBSIChsc3Ru
dW1iZXIuLTMuMjEpIDMwMSAwIFIgKGxzdG51bWJlci4tMy4yMikgMzAyIDAgUiAobHN0bnVtYmVy
Li0zLjIzKSAzMDMgMCBSIChsc3RudW1iZXIuLTMuMjQpIDMwOCAwIFIgKGxzdG51bWJlci4tMy4y
NSkgMzA5IDAgUiAobHN0bnVtYmVyLi0zLjI2KSAzMTAgMCBSIChsc3RudW1iZXIuLTMuMjcpIDMx
MSAwIFIgKGxzdG51bWJlci4tMy4yOCkgMzEyIDAgUiAobHN0bnVtYmVyLi0zLjI5KSAzMTMgMCBS
IChsc3RudW1iZXIuLTMuMykgMjgzIDAgUiAobHN0bnVtYmVyLi0zLjMwKSAzMTQgMCBSIChsc3Ru
dW1iZXIuLTMuMzEpIDMxNSAwIFIgKGxzdG51bWJlci4tMy4zMikgMzE2IDAgUiAobHN0bnVtYmVy
Li0zLjMzKSAzMTcgMCBSIChsc3RudW1iZXIuLTMuMzQpIDMxOCAwIFIgKGxzdG51bWJlci4tMy4z
NSkgMzE5IDAgUiAobHN0bnVtYmVyLi0zLjM2KSAzMjAgMCBSIChsc3RudW1iZXIuLTMuMzcpIDMy
MSAwIFIgKGxzdG51bWJlci4tMy4zOCkgMzIyIDAgUiAobHN0bnVtYmVyLi0zLjQpIDI4NCAwIFIg
KGxzdG51bWJlci4tMy41KSAyODUgMCBSIChsc3RudW1iZXIuLTMuNikgMjg2IDAgUiAobHN0bnVt
YmVyLi0zLjcpIDI4NyAwIFIgKGxzdG51bWJlci4tMy44KSAyODggMCBSIChsc3RudW1iZXIuLTMu
OSkgMjg5IDAgUiAobHN0bnVtYmVyLi0zMC4xKSA1MTUgMCBSIChsc3RudW1iZXIuLTMwLjIpIDUx
NiAwIFIgKGxzdG51bWJlci4tMzAuMykgNTE3IDAgUiAobHN0bnVtYmVyLi0zMS4xKSA1MTkgMCBS
IChsc3RudW1iZXIuLTMxLjIpIDUyMCAwIFIgKGxzdG51bWJlci4tMzEuMykgNTIxIDAgUiAobHN0
bnVtYmVyLi0zMi4xKSA1MjMgMCBSIChsc3RudW1iZXIuLTMyLjEwKSA1MzIgMCBSIChsc3RudW1i
ZXIuLTMyLjExKSA1MzMgMCBSIChsc3RudW1iZXIuLTMyLjEyKSA1MzQgMCBSIChsc3RudW1iZXIu
LTMyLjEzKSA1MzUgMCBSIChsc3RudW1iZXIuLTMyLjE0KSA1MzYgMCBSIChsc3RudW1iZXIuLTMy
LjE1KSA1MzcgMCBSIChsc3RudW1iZXIuLTMyLjIpIDUyNCAwIFIgKGxzdG51bWJlci4tMzIuMykg
NTI1IDAgUiAobHN0bnVtYmVyLi0zMi40KSA1MjYgMCBSIChsc3RudW1iZXIuLTMyLjUpIDUyNyAw
IFIgKGxzdG51bWJlci4tMzIuNikgNTI4IDAgUiAobHN0bnVtYmVyLi0zMi43KSA1MjkgMCBSIChs
c3RudW1iZXIuLTMyLjgpIDUzMCAwIFIgKGxzdG51bWJlci4tMzIuOSkgNTMxIDAgUiAobHN0bnVt
YmVyLi0zMy4xKSA1MzkgMCBSIChsc3RudW1iZXIuLTM0LjEpIDU0MSAwIFIgKGxzdG51bWJlci4t
MzUuMSkgNTQzIDAgUiAobHN0bnVtYmVyLi0zNi4xKSA1NDkgMCBSIChsc3RudW1iZXIuLTM3LjEp
IDU1MSAwIFIgKGxzdG51bWJlci4tMzguMSkgNTUzIDAgUiAobHN0bnVtYmVyLi0zOS4xKSA1NTUg
MCBSIChsc3RudW1iZXIuLTQuMSkgMzI0IDAgUiAobHN0bnVtYmVyLi00LjEwKSAzMzMgMCBSIChs
c3RudW1iZXIuLTQuMTAwKSA0MzEgMCBSIChsc3RudW1iZXIuLTQuMTAxKSA0MzIgMCBSIChsc3Ru
dW1iZXIuLTQuMTAyKSA0MzMgMCBSIChsc3RudW1iZXIuLTQuMTAzKSA0MzQgMCBSIChsc3RudW1i
ZXIuLTQuMTA0KSA0MzUgMCBSIChsc3RudW1iZXIuLTQuMTA1KSA0MzYgMCBSIChsc3RudW1iZXIu
LTQuMTA2KSA0MzcgMCBSIChsc3RudW1iZXIuLTQuMTA3KSA0MzggMCBSIChsc3RudW1iZXIuLTQu
MTA4KSA0MzkgMCBSIChsc3RudW1iZXIuLTQuMTA5KSA0NDAgMCBSIChsc3RudW1iZXIuLTQuMTEp
IDMzNCAwIFIgKGxzdG51bWJlci4tNC4xMTApIDQ0MSAwIFIgKGxzdG51bWJlci4tNC4xMTEpIDQ0
MiAwIFIgKGxzdG51bWJlci4tNC4xMikgMzM1IDAgUiAobHN0bnVtYmVyLi00LjEzKSAzMzYgMCBS
IChsc3RudW1iZXIuLTQuMTQpIDMzNyAwIFIgKGxzdG51bWJlci4tNC4xNSkgMzM4IDAgUiAobHN0
bnVtYmVyLi00LjE2KSAzMzkgMCBSIChsc3RudW1iZXIuLTQuMTcpIDM0MCAwIFIgKGxzdG51bWJl
ci4tNC4xOCkgMzQxIDAgUiAobHN0bnVtYmVyLi00LjE5KSAzNDIgMCBSIChsc3RudW1iZXIuLTQu
MikgMzI1IDAgUiAobHN0bnVtYmVyLi00LjIwKSAzNDMgMCBSIChsc3RudW1iZXIuLTQuMjEpIDM0
NCAwIFIgKGxzdG51bWJlci4tNC4yMikgMzQ1IDAgUiAobHN0bnVtYmVyLi00LjIzKSAzNDYgMCBS
IChsc3RudW1iZXIuLTQuMjQpIDM0NyAwIFIgKGxzdG51bWJlci4tNC4yNSkgMzQ4IDAgUiAobHN0
bnVtYmVyLi00LjI2KSAzNDkgMCBSIChsc3RudW1iZXIuLTQuMjcpIDM1MCAwIFIgKGxzdG51bWJl
ci4tNC4yOCkgMzUxIDAgUiAobHN0bnVtYmVyLi00LjI5KSAzNTIgMCBSIChsc3RudW1iZXIuLTQu
MykgMzI2IDAgUiAobHN0bnVtYmVyLi00LjMwKSAzNTMgMCBSIChsc3RudW1iZXIuLTQuMzEpIDM1
NCAwIFIgKGxzdG51bWJlci4tNC4zMikgMzU1IDAgUiAobHN0bnVtYmVyLi00LjMzKSAzNTYgMCBS
IChsc3RudW1iZXIuLTQuMzQpIDM1NyAwIFIgKGxzdG51bWJlci4tNC4zNSkgMzU4IDAgUiAobHN0
bnVtYmVyLi00LjM2KSAzNTkgMCBSIChsc3RudW1iZXIuLTQuMzcpIDM2MCAwIFIgKGxzdG51bWJl
ci4tNC4zOCkgMzYxIDAgUiAobHN0bnVtYmVyLi00LjM5KSAzNjIgMCBSIChsc3RudW1iZXIuLTQu
NCkgMzI3IDAgUiAobHN0bnVtYmVyLi00LjQwKSAzNjMgMCBSIChsc3RudW1iZXIuLTQuNDEpIDM2
OCAwIFIgKGxzdG51bWJlci4tNC40MikgMzY5IDAgUiAobHN0bnVtYmVyLi00LjQzKSAzNzAgMCBS
IChsc3RudW1iZXIuLTQuNDQpIDM3MSAwIFIgKGxzdG51bWJlci4tNC40NSkgMzcyIDAgUiAobHN0
bnVtYmVyLi00LjQ2KSAzNzMgMCBSIChsc3RudW1iZXIuLTQuNDcpIDM3NCAwIFIgKGxzdG51bWJl
ci4tNC40OCkgMzc1IDAgUiAobHN0bnVtYmVyLi00LjQ5KSAzNzYgMCBSIChsc3RudW1iZXIuLTQu
NSkgMzI4IDAgUiAobHN0bnVtYmVyLi00LjUwKSAzNzcgMCBSIChsc3RudW1iZXIuLTQuNTEpIDM3
OCAwIFIgKGxzdG51bWJlci4tNC41MikgMzc5IDAgUiAobHN0bnVtYmVyLi00LjUzKSAzODAgMCBS
IChsc3RudW1iZXIuLTQuNTQpIDM4MSAwIFIgKGxzdG51bWJlci4tNC41NSkgMzgyIDAgUiAobHN0
bnVtYmVyLi00LjU2KSAzODMgMCBSIChsc3RudW1iZXIuLTQuNTcpIDM4NCAwIFIgKGxzdG51bWJl
ci4tNC41OCkgMzg1IDAgUiAobHN0bnVtYmVyLi00LjU5KSAzODYgMCBSIChsc3RudW1iZXIuLTQu
NikgMzI5IDAgUiAobHN0bnVtYmVyLi00LjYwKSAzODcgMCBSIChsc3RudW1iZXIuLTQuNjEpIDM4
OCAwIFIgKGxzdG51bWJlci4tNC42MikgMzg5IDAgUiAobHN0bnVtYmVyLi00LjYzKSAzOTAgMCBS
IChsc3RudW1iZXIuLTQuNjQpIDM5MSAwIFIgKGxzdG51bWJlci4tNC42NSkgMzkyIDAgUiAobHN0
bnVtYmVyLi00LjY2KSAzOTMgMCBSIChsc3RudW1iZXIuLTQuNjcpIDM5NCAwIFIgKGxzdG51bWJl
ci4tNC42OCkgMzk1IDAgUiAobHN0bnVtYmVyLi00LjY5KSAzOTYgMCBSIChsc3RudW1iZXIuLTQu
NykgMzMwIDAgUiAobHN0bnVtYmVyLi00LjcwKSAzOTcgMCBSIChsc3RudW1iZXIuLTQuNzEpIDM5
OCAwIFIgKGxzdG51bWJlci4tNC43MikgMzk5IDAgUiAobHN0bnVtYmVyLi00LjczKSA0MDAgMCBS
IChsc3RudW1iZXIuLTQuNzQpIDQwMSAwIFIgKGxzdG51bWJlci4tNC43NSkgNDAyIDAgUiAobHN0
bnVtYmVyLi00Ljc2KSA0MDMgMCBSIChsc3RudW1iZXIuLTQuNzcpIDQwNCAwIFIgKGxzdG51bWJl
ci4tNC43OCkgNDA1IDAgUiAobHN0bnVtYmVyLi00Ljc5KSA0MDYgMCBSIChsc3RudW1iZXIuLTQu
OCkgMzMxIDAgUiAobHN0bnVtYmVyLi00LjgwKSA0MDcgMCBSIChsc3RudW1iZXIuLTQuODEpIDQw
OCAwIFIgKGxzdG51bWJlci4tNC44MikgNDA5IDAgUiAobHN0bnVtYmVyLi00LjgzKSA0MTAgMCBS
IChsc3RudW1iZXIuLTQuODQpIDQxMSAwIFIgKGxzdG51bWJlci4tNC44NSkgNDEyIDAgUiAobHN0
bnVtYmVyLi00Ljg2KSA0MTMgMCBSIChsc3RudW1iZXIuLTQuODcpIDQxNCAwIFIgKGxzdG51bWJl
ci4tNC44OCkgNDE1IDAgUiAobHN0bnVtYmVyLi00Ljg5KSA0MTYgMCBSIChsc3RudW1iZXIuLTQu
OSkgMzMyIDAgUiAobHN0bnVtYmVyLi00LjkwKSA0MTcgMCBSIChsc3RudW1iZXIuLTQuOTEpIDQx
OCAwIFIgKGxzdG51bWJlci4tNC45MikgNDE5IDAgUiAobHN0bnVtYmVyLi00LjkzKSA0MjAgMCBS
IChsc3RudW1iZXIuLTQuOTQpIDQyMSAwIFIgKGxzdG51bWJlci4tNC45NSkgNDIyIDAgUiAobHN0
bnVtYmVyLi00Ljk2KSA0MjMgMCBSIChsc3RudW1iZXIuLTQuOTcpIDQyNCAwIFIgKGxzdG51bWJl
ci4tNC45OCkgNDI1IDAgUiAobHN0bnVtYmVyLi00Ljk5KSA0MzAgMCBSIChsc3RudW1iZXIuLTQw
LjEpIDU1NyAwIFIgKGxzdG51bWJlci4tNDEuMSkgNTU5IDAgUiAobHN0bnVtYmVyLi00Mi4xKSA1
NjEgMCBSIChsc3RudW1iZXIuLTQzLjEpIDU2MyAwIFIgKGxzdG51bWJlci4tNDQuMSkgNTY1IDAg
UiAobHN0bnVtYmVyLi00NS4xKSA1NjcgMCBSIChsc3RudW1iZXIuLTQ2LjEpIDU3MyAwIFIgKGxz
dG51bWJlci4tNDcuMSkgNTc1IDAgUiAobHN0bnVtYmVyLi00OC4xKSA1NzcgMCBSIChsc3RudW1i
ZXIuLTQ4LjIpIDU3OCAwIFIgKGxzdG51bWJlci4tNDkuMSkgNTgwIDAgUiAobHN0bnVtYmVyLi00
OS4yKSA1ODEgMCBSIChsc3RudW1iZXIuLTUuMSkgNDQ0IDAgUiAobHN0bnVtYmVyLi01MC4xKSA1
ODMgMCBSIChsc3RudW1iZXIuLTUxLjEpIDYwMSAwIFIgKGxzdG51bWJlci4tNTEuMTApIDYxMCAw
IFIgKGxzdG51bWJlci4tNTEuMTEpIDYxMSAwIFIgKGxzdG51bWJlci4tNTEuMTIpIDYxMiAwIFIg
KGxzdG51bWJlci4tNTEuMTMpIDYxMyAwIFIgKGxzdG51bWJlci4tNTEuMTQpIDYxNCAwIFIgKGxz
dG51bWJlci4tNTEuMTUpIDYxNSAwIFIgKGxzdG51bWJlci4tNTEuMTYpIDYxNiAwIFIgKGxzdG51
bWJlci4tNTEuMTcpIDYxNyAwIFIgKGxzdG51bWJlci4tNTEuMTgpIDYxOCAwIFIgKGxzdG51bWJl
ci4tNTEuMTkpIDYxOSAwIFIgKGxzdG51bWJlci4tNTEuMikgNjAyIDAgUiAobHN0bnVtYmVyLi01
MS4yMCkgNjIwIDAgUiAobHN0bnVtYmVyLi01MS4yMSkgNjIxIDAgUiAobHN0bnVtYmVyLi01MS4y
MikgNjIyIDAgUiAobHN0bnVtYmVyLi01MS4zKSA2MDMgMCBSIChsc3RudW1iZXIuLTUxLjQpIDYw
NCAwIFIgKGxzdG51bWJlci4tNTEuNSkgNjA1IDAgUiAobHN0bnVtYmVyLi01MS42KSA2MDYgMCBS
IChsc3RudW1iZXIuLTUxLjcpIDYwNyAwIFIgKGxzdG51bWJlci4tNTEuOCkgNjA4IDAgUiAobHN0
bnVtYmVyLi01MS45KSA2MDkgMCBSIChsc3RudW1iZXIuLTUyLjEpIDYyNiAwIFIgKGxzdG51bWJl
ci4tNTIuMTApIDYzNSAwIFIgKGxzdG51bWJlci4tNTIuMTEpIDYzNiAwIFIgKGxzdG51bWJlci4t
NTIuMTIpIDYzNyAwIFIgKGxzdG51bWJlci4tNTIuMTMpIDYzOCAwIFIgKGxzdG51bWJlci4tNTIu
MTQpIDYzOSAwIFIgKGxzdG51bWJlci4tNTIuMTUpIDY0MCAwIFIgKGxzdG51bWJlci4tNTIuMTYp
IDY0MSAwIFIgKGxzdG51bWJlci4tNTIuMTcpIDY0NiAwIFIgKGxzdG51bWJlci4tNTIuMTgpIDY0
NyAwIFIgKGxzdG51bWJlci4tNTIuMTkpIDY0OCAwIFIgKGxzdG51bWJlci4tNTIuMikgNjI3IDAg
UiAobHN0bnVtYmVyLi01Mi4yMCkgNjQ5IDAgUiAobHN0bnVtYmVyLi01Mi4yMSkgNjUwIDAgUiAo
bHN0bnVtYmVyLi01Mi4yMikgNjUxIDAgUiAobHN0bnVtYmVyLi01Mi4yMykgNjUyIDAgUiAobHN0
bnVtYmVyLi01Mi4yNCkgNjUzIDAgUiAobHN0bnVtYmVyLi01Mi4yNSkgNjU0IDAgUiAobHN0bnVt
YmVyLi01Mi4yNikgNjU1IDAgUiAobHN0bnVtYmVyLi01Mi4yNykgNjU2IDAgUiAobHN0bnVtYmVy
Li01Mi4yOCkgNjU3IDAgUiAobHN0bnVtYmVyLi01Mi4yOSkgNjU4IDAgUiAobHN0bnVtYmVyLi01
Mi4zKSA2MjggMCBSIChsc3RudW1iZXIuLTUyLjMwKSA2NTkgMCBSIChsc3RudW1iZXIuLTUyLjMx
KSA2NjAgMCBSIChsc3RudW1iZXIuLTUyLjMyKSA2NjEgMCBSIChsc3RudW1iZXIuLTUyLjQpIDYy
OSAwIFIgKGxzdG51bWJlci4tNTIuNSkgNjMwIDAgUiAobHN0bnVtYmVyLi01Mi42KSA2MzEgMCBS
IChsc3RudW1iZXIuLTUyLjcpIDYzMiAwIFIgKGxzdG51bWJlci4tNTIuOCkgNjMzIDAgUiAobHN0
bnVtYmVyLi01Mi45KSA2MzQgMCBSIChsc3RudW1iZXIuLTUzLjEpIDY2MyAwIFIgKGxzdG51bWJl
ci4tNTMuMTApIDY3MiAwIFIgKGxzdG51bWJlci4tNTMuMTEpIDY3MyAwIFIgKGxzdG51bWJlci4t
NTMuMTIpIDY3NCAwIFIgKGxzdG51bWJlci4tNTMuMTMpIDY3NSAwIFIgKGxzdG51bWJlci4tNTMu
MTQpIDY3NiAwIFIgKGxzdG51bWJlci4tNTMuMikgNjY0IDAgUiAobHN0bnVtYmVyLi01My4zKSA2
NjUgMCBSIChsc3RudW1iZXIuLTUzLjQpIDY2NiAwIFIgKGxzdG51bWJlci4tNTMuNSkgNjY3IDAg
UiAobHN0bnVtYmVyLi01My42KSA2NjggMCBSIChsc3RudW1iZXIuLTUzLjcpIDY2OSAwIFIgKGxz
dG51bWJlci4tNTMuOCkgNjcwIDAgUiAobHN0bnVtYmVyLi01My45KSA2NzEgMCBSIChsc3RudW1i
ZXIuLTU0LjEpIDY3OCAwIFIgKGxzdG51bWJlci4tNTQuMTApIDY5MiAwIFIgKGxzdG51bWJlci4t
NTQuMTEpIDY5MyAwIFIgKGxzdG51bWJlci4tNTQuMTIpIDY5NCAwIFIgKGxzdG51bWJlci4tNTQu
MTMpIDY5NSAwIFIgKGxzdG51bWJlci4tNTQuMTQpIDY5NiAwIFIgKGxzdG51bWJlci4tNTQuMTUp
IDY5NyAwIFIgKGxzdG51bWJlci4tNTQuMTYpIDY5OCAwIFIgKGxzdG51bWJlci4tNTQuMTcpIDY5
OSAwIFIgKGxzdG51bWJlci4tNTQuMTgpIDcwMCAwIFIgKGxzdG51bWJlci4tNTQuMTkpIDcwMSAw
IFIgKGxzdG51bWJlci4tNTQuMikgNjc5IDAgUiAobHN0bnVtYmVyLi01NC4yMCkgNzAyIDAgUiAo
bHN0bnVtYmVyLi01NC4yMSkgNzAzIDAgUiAobHN0bnVtYmVyLi01NC4yMikgNzA0IDAgUiAobHN0
bnVtYmVyLi01NC4yMykgNzA1IDAgUiAobHN0bnVtYmVyLi01NC4yNCkgNzA2IDAgUiAobHN0bnVt
YmVyLi01NC4yNSkgNzA3IDAgUiAobHN0bnVtYmVyLi01NC4yNikgNzA4IDAgUiAobHN0bnVtYmVy
Li01NC4yNykgNzA5IDAgUiAobHN0bnVtYmVyLi01NC4yOCkgNzEwIDAgUiAobHN0bnVtYmVyLi01
NC4yOSkgNzExIDAgUiAobHN0bnVtYmVyLi01NC4zKSA2ODAgMCBSIChsc3RudW1iZXIuLTU0LjMw
KSA3MTIgMCBSIChsc3RudW1iZXIuLTU0LjMxKSA3MTMgMCBSIChsc3RudW1iZXIuLTU0LjMyKSA3
MTQgMCBSIChsc3RudW1iZXIuLTU0LjMzKSA3MTUgMCBSIChsc3RudW1iZXIuLTU0LjM0KSA3MTYg
MCBSIChsc3RudW1iZXIuLTU0LjM1KSA3MTcgMCBSIChsc3RudW1iZXIuLTU0LjM2KSA3MTggMCBS
IChsc3RudW1iZXIuLTU0LjM3KSA3MTkgMCBSIChsc3RudW1iZXIuLTU0LjM4KSA3MjAgMCBSIChs
c3RudW1iZXIuLTU0LjM5KSA3MjEgMCBSIChsc3RudW1iZXIuLTU0LjQpIDY4MSAwIFIgKGxzdG51
bWJlci4tNTQuNDApIDcyMiAwIFIgKGxzdG51bWJlci4tNTQuNDEpIDcyMyAwIFIgKGxzdG51bWJl
ci4tNTQuNDIpIDcyNCAwIFIgKGxzdG51bWJlci4tNTQuNDMpIDcyNSAwIFIgKGxzdG51bWJlci4t
NTQuNDQpIDcyNiAwIFIgKGxzdG51bWJlci4tNTQuNDUpIDcyNyAwIFIgKGxzdG51bWJlci4tNTQu
NDYpIDcyOCAwIFIgKGxzdG51bWJlci4tNTQuNDcpIDcyOSAwIFIgKGxzdG51bWJlci4tNTQuNDgp
IDczMCAwIFIgKGxzdG51bWJlci4tNTQuNDkpIDczMSAwIFIgKGxzdG51bWJlci4tNTQuNSkgNjgy
IDAgUiAobHN0bnVtYmVyLi01NC41MCkgNzMyIDAgUiAobHN0bnVtYmVyLi01NC41MSkgNzMzIDAg
UiAobHN0bnVtYmVyLi01NC41MikgNzM0IDAgUiAobHN0bnVtYmVyLi01NC41MykgNzM1IDAgUiAo
bHN0bnVtYmVyLi01NC41NCkgNzM2IDAgUiAobHN0bnVtYmVyLi01NC41NSkgNzM3IDAgUiAobHN0
bnVtYmVyLi01NC41NikgNzM4IDAgUiAobHN0bnVtYmVyLi01NC42KSA2ODMgMCBSIChsc3RudW1i
ZXIuLTU0LjcpIDY4NCAwIFIgKGxzdG51bWJlci4tNTQuOCkgNjg1IDAgUiAobHN0bnVtYmVyLi01
NC45KSA2OTEgMCBSIChsc3RudW1iZXIuLTU1LjEpIDc0MCAwIFIgKGxzdG51bWJlci4tNTUuMTAp
IDc1MyAwIFIgKGxzdG51bWJlci4tNTUuMTEpIDc1NCAwIFIgKGxzdG51bWJlci4tNTUuMTIpIDc1
NSAwIFIgKGxzdG51bWJlci4tNTUuMTMpIDc1NiAwIFIgKGxzdG51bWJlci4tNTUuMTQpIDc1NyAw
IFIgKGxzdG51bWJlci4tNTUuMTUpIDc1OCAwIFIgKGxzdG51bWJlci4tNTUuMTYpIDc1OSAwIFIg
KGxzdG51bWJlci4tNTUuMTcpIDc2MCAwIFIgKGxzdG51bWJlci4tNTUuMTgpIDc2MSAwIFIgKGxz
dG51bWJlci4tNTUuMTkpIDc2MiAwIFIgKGxzdG51bWJlci4tNTUuMikgNzQxIDAgUiAobHN0bnVt
YmVyLi01NS4yMCkgNzYzIDAgUiAobHN0bnVtYmVyLi01NS4yMSkgNzY0IDAgUiAobHN0bnVtYmVy
Li01NS4yMikgNzY1IDAgUiAobHN0bnVtYmVyLi01NS4yMykgNzY2IDAgUiAobHN0bnVtYmVyLi01
NS4yNCkgNzY3IDAgUiAobHN0bnVtYmVyLi01NS4zKSA3NDIgMCBSIChsc3RudW1iZXIuLTU1LjQp
IDc0MyAwIFIgKGxzdG51bWJlci4tNTUuNSkgNzQ0IDAgUiAobHN0bnVtYmVyLi01NS42KSA3NDUg
MCBSIChsc3RudW1iZXIuLTU1LjcpIDc0NiAwIFIgKGxzdG51bWJlci4tNTUuOCkgNzUxIDAgUiAo
bHN0bnVtYmVyLi01NS45KSA3NTIgMCBSIChsc3RudW1iZXIuLTYuMSkgNDQ2IDAgUiAobHN0bnVt
YmVyLi03LjEpIDQ0OCAwIFIgKGxzdG51bWJlci4tOC4xKSA0NTAgMCBSIChsc3RudW1iZXIuLTku
MSkgNDUyIDAgUiAocGFnZS4xKSAxMDggMCBSIChwYWdlLjEwKSAzMDcgMCBSIChwYWdlLjExKSAz
NjcgMCBSIChwYWdlLjEyKSA0MjkgMCBSIChwYWdlLjEzKSA0NjAgMCBSIChwYWdlLjE0KSA0ODUg
MCBSIChwYWdlLjE1KSA1MTMgMCBSIChwYWdlLjE2KSA1NDcgMCBSIChwYWdlLjE3KSA1NzEgMCBS
IChwYWdlLjE4KSA1OTkgMCBSIChwYWdlLjE5KSA2NDUgMCBSIChwYWdlLjIpIDE1OCAwIFIgKHBh
Z2UuMjApIDY5MCAwIFIgKHBhZ2UuMjEpIDc1MCAwIFIgKHBhZ2UuMjIpIDc4NSAwIFIgKHBhZ2Uu
MykgMTc2IDAgUiAocGFnZS40KSAxODUgMCBSIChwYWdlLjUpIDE5MyAwIFIgKHBhZ2UuNikgMjA2
IDAgUiAocGFnZS43KSAyMTAgMCBSIChwYWdlLjgpIDIxNSAwIFIgKHBhZ2UuOSkgMjQ2IDAgUiAo
c2VjdGlvbiouMSkgMTE5IDAgUiAoc2VjdGlvbiouMikgNiAwIFIgKHNlY3Rpb24qLjMpIDE3OSAw
IFIgKHNlY3Rpb24qLjQpIDE4MCAwIFIgKHNlY3Rpb24qLjUpIDE4MSAwIFIgKHNlY3Rpb24qLjYp
IDE4NiAwIFIgKHNlY3Rpb24qLjcpIDc2OCAwIFIgKHNlY3Rpb24qLjgpIDEwMSAwIFIgKHNlY3Rp
b24uMSkgMTAgMCBSIChzZWN0aW9uLjIpIDE0IDAgUiAoc2VjdGlvbi4zKSAxOCAwIFIgKHNlY3Rp
b24uNCkgMjIgMCBSIChzZWN0aW9uLjUpIDI2IDAgUiAoc2VjdGlvbi42KSA4NSAwIFIgKHNlY3Rp
b24uNykgOTcgMCBSIChzdWJzZWN0aW9uLjI2LjYpIDMwIDAgUiAoc3Vic2VjdGlvbi41LjEpIDgx
IDAgUiAoc3Vic2VjdGlvbi42LjEpIDg5IDAgUiAoc3Vic2VjdGlvbi42LjIpIDkzIDAgUiAoc3Vi
c3Vic2VjdGlvbi4yNi42LjEpIDM0IDAgUiAoc3Vic3Vic2VjdGlvbi4yNi42LjEwKSA3MCAwIFIg
KHN1YnN1YnNlY3Rpb24uMjYuNi4xMSkgNzQgMCBSIChzdWJzdWJzZWN0aW9uLjI2LjYuMikgMzgg
MCBSIChzdWJzdWJzZWN0aW9uLjI2LjYuMykgNDIgMCBSIChzdWJzdWJzZWN0aW9uLjI2LjYuNCkg
NDYgMCBSIChzdWJzdWJzZWN0aW9uLjI2LjYuNSkgNTAgMCBSIChzdWJzdWJzZWN0aW9uLjI2LjYu
NikgNTQgMCBSIChzdWJzdWJzZWN0aW9uLjI2LjYuNykgNTggMCBSIChzdWJzdWJzZWN0aW9uLjI2
LjYuOCkgNjIgMCBSIChzdWJzdWJzZWN0aW9uLjI2LjYuOSkgNjYgMCBSXQovTGltaXRzIFsoRG9j
LVN0YXJ0KSAoc3Vic3Vic2VjdGlvbi4yNi42LjkpXQo+PiBlbmRvYmoKODI1IDAgb2JqIDw8Ci9L
aWRzIFs4MjQgMCBSXQo+PiBlbmRvYmoKODI2IDAgb2JqIDw8Ci9EZXN0cyA4MjUgMCBSCj4+IGVu
ZG9iago4MjcgMCBvYmogPDwKL1R5cGUgL0NhdGFsb2cKL1BhZ2VzIDgyMiAwIFIKL091dGxpbmVz
IDgyMyAwIFIKL05hbWVzIDgyNiAwIFIKL1BhZ2VNb2RlIC9Vc2VPdXRsaW5lcyAKL09wZW5BY3Rp
b24gMTA0IDAgUgo+PiBlbmRvYmoKODI4IDAgb2JqIDw8Ci9BdXRob3IoKS9UaXRsZSgpL1N1Ympl
Y3QoKS9DcmVhdG9yKExhVGVYIHdpdGggaHlwZXJyZWYgcGFja2FnZSkvUHJvZHVjZXIocGRmZVRl
WC0xLjIxYSkvS2V5d29yZHMoKQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMjI1MTIyMTMxKzAxJzAw
JykKL1BURVguRnVsbGJhbm5lciAoVGhpcyBpcyBwZGZlVGVYLCBWZXJzaW9uIDMuMTQxNTkyLTEu
MjFhLTIuMiAoV2ViMkMgNy41LjQpIGtwYXRoc2VhIHZlcnNpb24gMy41LjQpCj4+IGVuZG9iagp4
cmVmCjAgODI5CjAwMDAwMDAwMDEgNjU1MzUgZiAKMDAwMDAwMDAwMiAwMDAwMCBmIAowMDAwMDAw
MDAzIDAwMDAwIGYgCjAwMDAwMDAwMDQgMDAwMDAgZiAKMDAwMDAwMDAwMCAwMDAwMCBmIAowMDAw
MDAwMDA5IDAwMDAwIG4gCjAwMDAwMDkxOTIgMDAwMDAgbiAKMDAwMDIxNzc1NCAwMDAwMCBuIAow
MDAwMDAwMDU1IDAwMDAwIG4gCjAwMDAwMDAwODEgMDAwMDAgbiAKMDAwMDAxNDIyNiAwMDAwMCBu
IAowMDAwMjE3NjY4IDAwMDAwIG4gCjAwMDAwMDAxMjYgMDAwMDAgbiAKMDAwMDAwMDE4MCAwMDAw
MCBuIAowMDAwMDE0MjgzIDAwMDAwIG4gCjAwMDAyMTc1ODAgMDAwMDAgbiAKMDAwMDAwMDIyNiAw
MDAwMCBuIAowMDAwMDAwMjY1IDAwMDAwIG4gCjAwMDAwMTc3NTQgMDAwMDAgbiAKMDAwMDIxNzQ5
MiAwMDAwMCBuIAowMDAwMDAwMzExIDAwMDAwIG4gCjAwMDAwMDAzNTIgMDAwMDAgbiAKMDAwMDAx
NzgxMSAwMDAwMCBuIAowMDAwMjE3NDA0IDAwMDAwIG4gCjAwMDAwMDAzOTggMDAwMDAgbiAKMDAw
MDAwMDQzMyAwMDAwMCBuIAowMDAwMDM0MzIyIDAwMDAwIG4gCjAwMDAyMTcyNzkgMDAwMDAgbiAK
MDAwMDAwMDQ3OSAwMDAwMCBuIAowMDAwMDAwNTI4IDAwMDAwIG4gCjAwMDAwMzY5NzEgMDAwMDAg
biAKMDAwMDIxNzE2NyAwMDAwMCBuIAowMDAwMDAwNTgwIDAwMDAwIG4gCjAwMDAwMDA2MTUgMDAw
MDAgbiAKMDAwMDAzNzAyOCAwMDAwMCBuIAowMDAwMjE3MDkzIDAwMDAwIG4gCjAwMDAwMDA2NzIg
MDAwMDAgbiAKMDAwMDAwMDcxNyAwMDAwMCBuIAowMDAwMDQyMzk3IDAwMDAwIG4gCjAwMDAyMTcw
MDYgMDAwMDAgbiAKMDAwMDAwMDc3NCAwMDAwMCBuIAowMDAwMDAwODE2IDAwMDAwIG4gCjAwMDAw
NDY0NDggMDAwMDAgbiAKMDAwMDIxNjkxOSAwMDAwMCBuIAowMDAwMDAwODczIDAwMDAwIG4gCjAw
MDAwMDA5MjQgMDAwMDAgbiAKMDAwMDA1Njc2NCAwMDAwMCBuIAowMDAwMjE2ODMyIDAwMDAwIG4g
CjAwMDAwMDA5ODEgMDAwMDAgbiAKMDAwMDAwMTAyNSAwMDAwMCBuIAowMDAwMDU5NzI4IDAwMDAw
IG4gCjAwMDAyMTY3NDUgMDAwMDAgbiAKMDAwMDAwMTA4MiAwMDAwMCBuIAowMDAwMDAxMTI2IDAw
MDAwIG4gCjAwMDAwNjI3MzkgMDAwMDAgbiAKMDAwMDIxNjY1OCAwMDAwMCBuIAowMDAwMDAxMTgz
IDAwMDAwIG4gCjAwMDAwMDEyMzIgMDAwMDAgbiAKMDAwMDA2Mzk1MyAwMDAwMCBuIAowMDAwMjE2
NTcxIDAwMDAwIG4gCjAwMDAwMDEyODkgMDAwMDAgbiAKMDAwMDAwMTMzMCAwMDAwMCBuIAowMDAw
MDY4MTg0IDAwMDAwIG4gCjAwMDAyMTY0ODQgMDAwMDAgbiAKMDAwMDAwMTM4NyAwMDAwMCBuIAow
MDAwMDAxNDMxIDAwMDAwIG4gCjAwMDAwNzEzOTUgMDAwMDAgbiAKMDAwMDIxNjM5NyAwMDAwMCBu
IAowMDAwMDAxNDg4IDAwMDAwIG4gCjAwMDAwMDE1MzYgMDAwMDAgbiAKMDAwMDA3MTU2OCAwMDAw
MCBuIAowMDAwMjE2MzEwIDAwMDAwIG4gCjAwMDAwMDE1OTQgMDAwMDAgbiAKMDAwMDAwMTYzNiAw
MDAwMCBuIAowMDAwMDc3MDA2IDAwMDAwIG4gCjAwMDAyMTYyMzYgMDAwMDAgbiAKMDAwMDAwMTY5
NCAwMDAwMCBuIAowMDAwMDAxNzQ1IDAwMDAwIG4gCjAwMDAyMTYxMjUgMDAwMDAgbiAKMDAwMDAw
MTc5MSAwMDAwMCBuIAowMDAwMDAxODI5IDAwMDAwIG4gCjAwMDAwNzcxNzkgMDAwMDAgbiAKMDAw
MDIxNjA1MSAwMDAwMCBuIAowMDAwMDAxODgwIDAwMDAwIG4gCjAwMDAwMDE5MTYgMDAwMDAgbiAK
MDAwMDA4MjA4NiAwMDAwMCBuIAowMDAwMjE1OTQwIDAwMDAwIG4gCjAwMDAwMDE5NjIgMDAwMDAg
biAKMDAwMDAwMjAyMSAwMDAwMCBuIAowMDAwMDgyMTQzIDAwMDAwIG4gCjAwMDAyMTU4NjYgMDAw
MDAgbiAKMDAwMDAwMjA3MiAwMDAwMCBuIAowMDAwMDAyMTEyIDAwMDAwIG4gCjAwMDAwODg1NDgg
MDAwMDAgbiAKMDAwMDIxNTc5MiAwMDAwMCBuIAowMDAwMDAyMTYzIDAwMDAwIG4gCjAwMDAwMDIy
MDYgMDAwMDAgbiAKMDAwMDEwMDcyOSAwMDAwMCBuIAowMDAwMjE1NzAzIDAwMDAwIG4gCjAwMDAw
MDIyNTIgMDAwMDAgbiAKMDAwMDAwMjI4NyAwMDAwMCBuIAowMDAwMTAwODQ0IDAwMDAwIG4gCjAw
MDAyMTU2MjUgMDAwMDAgbiAKMDAwMDAwMjMzNSAwMDAwMCBuIAowMDAwMDAyMzY1IDAwMDAwIG4g
CjAwMDAwMDQxMTkgMDAwMDAgbiAKMDAwMDAwOTI0OCAwMDAwMCBuIAowMDAwMDAyNDE3IDAwMDAw
IG4gCjAwMDAwMDkwMTggMDAwMDAgbiAKMDAwMDAwOTA3NiAwMDAwMCBuIAowMDAwMjEzNzUzIDAw
MDAwIG4gCjAwMDAxOTM4NTkgMDAwMDAgbiAKMDAwMDIxMzU4MCAwMDAwMCBuIAowMDAwMTkyOTIx
IDAwMDAwIG4gCjAwMDAxODk1MzggMDAwMDAgbiAKMDAwMDE5Mjc2MCAwMDAwMCBuIAowMDAwMTg4
NjI1IDAwMDAwIG4gCjAwMDAxNzIyNTUgMDAwMDAgbiAKMDAwMDE4ODQ1MiAwMDAwMCBuIAowMDAw
MDA5MTM0IDAwMDAwIG4gCjAwMDAwMDQ0NjcgMDAwMDAgbiAKMDAwMDAwNDYyMyAwMDAwMCBuIAow
MDAwMDA0Nzc4IDAwMDAwIG4gCjAwMDAwMDQ5MzMgMDAwMDAgbiAKMDAwMDAwNTA4OCAwMDAwMCBu
IAowMDAwMDA1MjQzIDAwMDAwIG4gCjAwMDAwMDUzOTggMDAwMDAgbiAKMDAwMDAwNTU2MCAwMDAw
MCBuIAowMDAwMTcwOTQ4IDAwMDAwIG4gCjAwMDAxNTkzMDQgMDAwMDAgbiAKMDAwMDE3MDc4NiAw
MDAwMCBuIAowMDAwMDA1NzI2IDAwMDAwIG4gCjAwMDAwMDU4OTIgMDAwMDAgbiAKMDAwMDAwNjA1
OSAwMDAwMCBuIAowMDAwMDA2MjI1IDAwMDAwIG4gCjAwMDAwMDYzOTIgMDAwMDAgbiAKMDAwMDAw
NjU1OSAwMDAwMCBuIAowMDAwMDA2NzI1IDAwMDAwIG4gCjAwMDAwMDY4OTEgMDAwMDAgbiAKMDAw
MDAwNzA1OCAwMDAwMCBuIAowMDAwMDA3MjI2IDAwMDAwIG4gCjAwMDAwMDczOTQgMDAwMDAgbiAK
MDAwMDAwNzU0OSAwMDAwMCBuIAowMDAwMDA3NzEwIDAwMDAwIG4gCjAwMDAwMDc4NjUgMDAwMDAg
biAKMDAwMDAwODAyNSAwMDAwMCBuIAowMDAwMDA4MTg2IDAwMDAwIG4gCjAwMDAwMDgzNDEgMDAw
MDAgbiAKMDAwMDAwODQ5NyAwMDAwMCBuIAowMDAwMTU4MjY4IDAwMDAwIG4gCjAwMDAxNDk0OTUg
MDAwMDAgbiAKMDAwMDE1ODEwNyAwMDAwMCBuIAowMDAwMDA4NjU5IDAwMDAwIG4gCjAwMDAwMDg4
NDAgMDAwMDAgbiAKMDAwMDIxNTAxMiAwMDAwMCBuIAowMDAwMDE0NTI5IDAwMDAwIG4gCjAwMDAw
MTIzNzcgMDAwMDAgbiAKMDAwMDAwOTM3MiAwMDAwMCBuIAowMDAwMDE0MTY4IDAwMDAwIG4gCjAw
MDAwMTI1NjUgMDAwMDAgbiAKMDAwMDE0ODY2MCAwMDAwMCBuIAowMDAwMTMyMzgwIDAwMDAwIG4g
CjAwMDAxNDg0ODMgMDAwMDAgbiAKMDAwMDAxMjc4MSAwMDAwMCBuIAowMDAwMDEyOTM5IDAwMDAw
IG4gCjAwMDAwMTMwOTcgMDAwMDAgbiAKMDAwMDAxNDM0MCAwMDAwMCBuIAowMDAwMDEzMjU1IDAw
MDAwIG4gCjAwMDAwMTM1MTggMDAwMDAgbiAKMDAwMDAxNDQwMyAwMDAwMCBuIAowMDAwMDEzNzgy
IDAwMDAwIG4gCjAwMDAwMTQ0NjYgMDAwMDAgbiAKMDAwMDAxMzk3OCAwMDAwMCBuIAowMDAwMDE4
MDM5IDAwMDAwIG4gCjAwMDAwMTcxMzkgMDAwMDAgbiAKMDAwMDAxNDY1NCAwMDAwMCBuIAowMDAw
MDE3Njk2IDAwMDAwIG4gCjAwMDAwMTcyNzkgMDAwMDAgbiAKMDAwMDAxNzQ4OCAwMDAwMCBuIAow
MDAwMDE3ODY3IDAwMDAwIG4gCjAwMDAwMTc5MjUgMDAwMDAgbiAKMDAwMDAxNzk4MiAwMDAwMCBu
IAowMDAwMDIyMjUwIDAwMDAwIG4gCjAwMDAwMjE1ODQgMDAwMDAgbiAKMDAwMDAxODE1MSAwMDAw
MCBuIAowMDAwMDIyMDczIDAwMDAwIG4gCjAwMDAwMjIxMzEgMDAwMDAgbiAKMDAwMDAyMTcyNCAw
MDAwMCBuIAowMDAwMDIyMTg3IDAwMDAwIG4gCjAwMDAwMjE4ODIgMDAwMDAgbiAKMDAwMDAyNjMy
NCAwMDAwMCBuIAowMDAwMDI2MTU0IDAwMDAwIG4gCjAwMDAwMjIzNjEgMDAwMDAgbiAKMDAwMDAy
NjI2NiAwMDAwMCBuIAowMDAwMTMwMTI1IDAwMDAwIG4gCjAwMDAxMjgwOTkgMDAwMDAgbiAKMDAw
MDEyOTk2NCAwMDAwMCBuIAowMDAwMTI3NTEzIDAwMDAwIG4gCjAwMDAxMjUwNjUgMDAwMDAgbiAK
MDAwMDEyNzM1MyAwMDAwMCBuIAowMDAwMTI0NzM4IDAwMDAwIG4gCjAwMDAxMjI1NjQgMDAwMDAg
biAKMDAwMDEyNDU2OSAwMDAwMCBuIAowMDAwMDMxMTMzIDAwMDAwIG4gCjAwMDAwMzA5NjMgMDAw
MDAgbiAKMDAwMDAyNjQ4NyAwMDAwMCBuIAowMDAwMDMxMDc1IDAwMDAwIG4gCjAwMDAwMzQzNzkg
MDAwMDAgbiAKMDAwMDAzNDE1MiAwMDAwMCBuIAowMDAwMDMxMjk2IDAwMDAwIG4gCjAwMDAwMzQy
NjQgMDAwMDAgbiAKMDAwMDIxNTEyOSAwMDAwMCBuIAowMDAwMDM4NDcwIDAwMDAwIG4gCjAwMDAw
MzY4MDEgMDAwMDAgbiAKMDAwMDAzNDQ3NyAwMDAwMCBuIAowMDAwMDM2OTEzIDAwMDAwIG4gCjAw
MDAwMzcwODUgMDAwMDAgbiAKMDAwMDAzNzE0MyAwMDAwMCBuIAowMDAwMTIxMTQ4IDAwMDAwIG4g
CjAwMDAxMDk0OTAgMDAwMDAgbiAKMDAwMDEyMDk4NyAwMDAwMCBuIAowMDAwMDM3MjAxIDAwMDAw
IG4gCjAwMDAwMzcyNTcgMDAwMDAgbiAKMDAwMDAzNzMxNSAwMDAwMCBuIAowMDAwMDM3MzczIDAw
MDAwIG4gCjAwMDAwMzc0MzEgMDAwMDAgbiAKMDAwMDAzNzQ4OSAwMDAwMCBuIAowMDAwMDM3NTQ3
IDAwMDAwIG4gCjAwMDAwMzc2MDUgMDAwMDAgbiAKMDAwMDAzNzY2MyAwMDAwMCBuIAowMDAwMDM3
NzIxIDAwMDAwIG4gCjAwMDAwMzc3NzkgMDAwMDAgbiAKMDAwMDAzNzgzNyAwMDAwMCBuIAowMDAw
MDM3ODk0IDAwMDAwIG4gCjAwMDAwMzc5NTIgMDAwMDAgbiAKMDAwMDAzODAxMCAwMDAwMCBuIAow
MDAwMDM4MDY4IDAwMDAwIG4gCjAwMDAwMzgxMjYgMDAwMDAgbiAKMDAwMDAzODE4NCAwMDAwMCBu
IAowMDAwMDM4MjQyIDAwMDAwIG4gCjAwMDAwMzgzMDAgMDAwMDAgbiAKMDAwMDAzODM1NyAwMDAw
MCBuIAowMDAwMDM4NDE0IDAwMDAwIG4gCjAwMDAwNDM4MzcgMDAwMDAgbiAKMDAwMDA0MDMxNyAw
MDAwMCBuIAowMDAwMDM4NTk2IDAwMDAwIG4gCjAwMDAwNDA0MjkgMDAwMDAgbiAKMDAwMDA0MDQ4
NyAwMDAwMCBuIAowMDAwMDQwNTQ1IDAwMDAwIG4gCjAwMDAwNDA2MDMgMDAwMDAgbiAKMDAwMDA0
MDY2MSAwMDAwMCBuIAowMDAwMDQwNzE5IDAwMDAwIG4gCjAwMDAwNDA3NzcgMDAwMDAgbiAKMDAw
MDA0MDgzNSAwMDAwMCBuIAowMDAwMDQwODkxIDAwMDAwIG4gCjAwMDAwNDA5NDkgMDAwMDAgbiAK
MDAwMDA0MTAwNyAwMDAwMCBuIAowMDAwMDQxMDY1IDAwMDAwIG4gCjAwMDAwNDExMjMgMDAwMDAg
biAKMDAwMDA0MTE4MSAwMDAwMCBuIAowMDAwMDQxMjM5IDAwMDAwIG4gCjAwMDAwNDEyOTcgMDAw
MDAgbiAKMDAwMDA0MTM1NSAwMDAwMCBuIAowMDAwMDQxNDEzIDAwMDAwIG4gCjAwMDAwNDE0NzEg
MDAwMDAgbiAKMDAwMDA0MTUyOCAwMDAwMCBuIAowMDAwMDQxNTg2IDAwMDAwIG4gCjAwMDAwNDE2
NDQgMDAwMDAgbiAKMDAwMDA0MTcwMiAwMDAwMCBuIAowMDAwMDQxNzYwIDAwMDAwIG4gCjAwMDAw
NDE4MTggMDAwMDAgbiAKMDAwMDA0MTg3NiAwMDAwMCBuIAowMDAwMDQxOTM0IDAwMDAwIG4gCjAw
MDAwNDE5OTIgMDAwMDAgbiAKMDAwMDA0MjA1MCAwMDAwMCBuIAowMDAwMDQyMTA3IDAwMDAwIG4g
CjAwMDAwNDIxNjUgMDAwMDAgbiAKMDAwMDA0MjIyMyAwMDAwMCBuIAowMDAwMDQyMjgxIDAwMDAw
IG4gCjAwMDAwNDIzMzkgMDAwMDAgbiAKMDAwMDA0MjQ1NCAwMDAwMCBuIAowMDAwMDQyNTEyIDAw
MDAwIG4gCjAwMDAwNDI1NzAgMDAwMDAgbiAKMDAwMDA0MjYyNyAwMDAwMCBuIAowMDAwMDQyNjg1
IDAwMDAwIG4gCjAwMDAwNDI3NDMgMDAwMDAgbiAKMDAwMDA0MjgwMSAwMDAwMCBuIAowMDAwMDQy
ODU5IDAwMDAwIG4gCjAwMDAwNDI5MTcgMDAwMDAgbiAKMDAwMDA0Mjk3NSAwMDAwMCBuIAowMDAw
MDQzMDMzIDAwMDAwIG4gCjAwMDAwNDMwOTEgMDAwMDAgbiAKMDAwMDA0MzE0OSAwMDAwMCBuIAow
MDAwMDQzMjA3IDAwMDAwIG4gCjAwMDAwNDMyNjMgMDAwMDAgbiAKMDAwMDA0MzMyMSAwMDAwMCBu
IAowMDAwMDQzMzc5IDAwMDAwIG4gCjAwMDAwNDM0MzcgMDAwMDAgbiAKMDAwMDA0MzQ5NSAwMDAw
MCBuIAowMDAwMDQzNTUzIDAwMDAwIG4gCjAwMDAwNDM2MTAgMDAwMDAgbiAKMDAwMDA0MzY2NyAw
MDAwMCBuIAowMDAwMDQzNzI0IDAwMDAwIG4gCjAwMDAwNDM3ODEgMDAwMDAgbiAKMDAwMDA0ODg3
MyAwMDAwMCBuIAowMDAwMDQ1NDEwIDAwMDAwIG4gCjAwMDAwNDM5NjMgMDAwMDAgbiAKMDAwMDA0
NTUyMiAwMDAwMCBuIAowMDAwMDQ1NTgwIDAwMDAwIG4gCjAwMDAwNDU2MzggMDAwMDAgbiAKMDAw
MDA0NTY5NiAwMDAwMCBuIAowMDAwMDQ1NzU0IDAwMDAwIG4gCjAwMDAwNDU4MTIgMDAwMDAgbiAK
MDAwMDA0NTg3MCAwMDAwMCBuIAowMDAwMDQ1OTI2IDAwMDAwIG4gCjAwMDAwNDU5ODQgMDAwMDAg
biAKMDAwMDA0NjA0MiAwMDAwMCBuIAowMDAwMDQ2MTAwIDAwMDAwIG4gCjAwMDAwNDYxNTggMDAw
MDAgbiAKMDAwMDA0NjIxNiAwMDAwMCBuIAowMDAwMDQ2Mjc0IDAwMDAwIG4gCjAwMDAwNDYzMzIg
MDAwMDAgbiAKMDAwMDA0NjM5MCAwMDAwMCBuIAowMDAwMDQ2NTA1IDAwMDAwIG4gCjAwMDAwNDY1
NjMgMDAwMDAgbiAKMDAwMDA0NjYyMSAwMDAwMCBuIAowMDAwMDQ2Njc5IDAwMDAwIG4gCjAwMDAw
NDY3MzcgMDAwMDAgbiAKMDAwMDA0Njc5NSAwMDAwMCBuIAowMDAwMDQ2ODUzIDAwMDAwIG4gCjAw
MDAwNDY5MTEgMDAwMDAgbiAKMDAwMDA0Njk2OSAwMDAwMCBuIAowMDAwMDQ3MDI3IDAwMDAwIG4g
CjAwMDAwNDcwODQgMDAwMDAgbiAKMDAwMDA0NzE0MiAwMDAwMCBuIAowMDAwMDQ3MjAwIDAwMDAw
IG4gCjAwMDAwNDcyNTggMDAwMDAgbiAKMDAwMDA0NzMxNiAwMDAwMCBuIAowMDAwMDQ3Mzc0IDAw
MDAwIG4gCjAwMDAwNDc0MzIgMDAwMDAgbiAKMDAwMDA0NzQ5MCAwMDAwMCBuIAowMDAwMDQ3NTQ4
IDAwMDAwIG4gCjAwMDAwNDc2MDYgMDAwMDAgbiAKMDAwMDA0NzY2MyAwMDAwMCBuIAowMDAwMDQ3
NzIxIDAwMDAwIG4gCjAwMDAwNDc3NzkgMDAwMDAgbiAKMDAwMDA0NzgzNyAwMDAwMCBuIAowMDAw
MDQ3ODk1IDAwMDAwIG4gCjAwMDAwNDc5NTMgMDAwMDAgbiAKMDAwMDA0ODAxMSAwMDAwMCBuIAow
MDAwMDQ4MDY5IDAwMDAwIG4gCjAwMDAwNDgxMjcgMDAwMDAgbiAKMDAwMDA0ODE4NSAwMDAwMCBu
IAowMDAwMDQ4MjQzIDAwMDAwIG4gCjAwMDAwNDgyOTkgMDAwMDAgbiAKMDAwMDA0ODM1NyAwMDAw
MCBuIAowMDAwMDQ4NDE1IDAwMDAwIG4gCjAwMDAwNDg0NzMgMDAwMDAgbiAKMDAwMDA0ODUzMSAw
MDAwMCBuIAowMDAwMDQ4NTg5IDAwMDAwIG4gCjAwMDAwNDg2NDYgMDAwMDAgbiAKMDAwMDA0ODcw
MyAwMDAwMCBuIAowMDAwMDQ4NzYwIDAwMDAwIG4gCjAwMDAwNDg4MTcgMDAwMDAgbiAKMDAwMDA1
Mzc0NCAwMDAwMCBuIAowMDAwMDUwMjIwIDAwMDAwIG4gCjAwMDAwNDg5OTkgMDAwMDAgbiAKMDAw
MDA1MDMzMiAwMDAwMCBuIAowMDAwMDUwMzkwIDAwMDAwIG4gCjAwMDAwNTA0NDggMDAwMDAgbiAK
MDAwMDA1MDUwNiAwMDAwMCBuIAowMDAwMDUwNTY0IDAwMDAwIG4gCjAwMDAwNTA2MjIgMDAwMDAg
biAKMDAwMDA1MDY4MCAwMDAwMCBuIAowMDAwMDUwNzM2IDAwMDAwIG4gCjAwMDAwNTA3OTQgMDAw
MDAgbiAKMDAwMDA1MDg1MiAwMDAwMCBuIAowMDAwMDUwOTEwIDAwMDAwIG4gCjAwMDAwNTA5Njgg
MDAwMDAgbiAKMDAwMDA1MTAyNiAwMDAwMCBuIAowMDAwMDUxMDg0IDAwMDAwIG4gCjAwMDAwNTEx
NDIgMDAwMDAgbiAKMDAwMDA1MTIwMCAwMDAwMCBuIAowMDAwMDUxMjU4IDAwMDAwIG4gCjAwMDAw
NTEzMTYgMDAwMDAgbiAKMDAwMDA1MTM3MyAwMDAwMCBuIAowMDAwMDUxNDMxIDAwMDAwIG4gCjAw
MDAwNTE0ODkgMDAwMDAgbiAKMDAwMDA1MTU0NyAwMDAwMCBuIAowMDAwMDUxNjA1IDAwMDAwIG4g
CjAwMDAwNTE2NjMgMDAwMDAgbiAKMDAwMDA1MTcyMSAwMDAwMCBuIAowMDAwMDUxNzc5IDAwMDAw
IG4gCjAwMDAwNTE4MzcgMDAwMDAgbiAKMDAwMDA1MTg5NSAwMDAwMCBuIAowMDAwMDUxOTUyIDAw
MDAwIG4gCjAwMDAwNTIwMTAgMDAwMDAgbiAKMDAwMDA1MjA2OCAwMDAwMCBuIAowMDAwMDUyMTI2
IDAwMDAwIG4gCjAwMDAwNTIxODQgMDAwMDAgbiAKMDAwMDA1MjI0MiAwMDAwMCBuIAowMDAwMDUy
MzAwIDAwMDAwIG4gCjAwMDAwNTIzNTggMDAwMDAgbiAKMDAwMDA1MjQxNiAwMDAwMCBuIAowMDAw
MDUyNDc0IDAwMDAwIG4gCjAwMDAwNTI1MzIgMDAwMDAgbiAKMDAwMDA1MjU4OSAwMDAwMCBuIAow
MDAwMDUyNjQ3IDAwMDAwIG4gCjAwMDAwNTI3MDUgMDAwMDAgbiAKMDAwMDA1Mjc2MyAwMDAwMCBu
IAowMDAwMDUyODIxIDAwMDAwIG4gCjAwMDAwNTI4NzkgMDAwMDAgbiAKMDAwMDA1MjkzNyAwMDAw
MCBuIAowMDAwMDUyOTk1IDAwMDAwIG4gCjAwMDAwNTMwNTMgMDAwMDAgbiAKMDAwMDA1MzExMSAw
MDAwMCBuIAowMDAwMDUzMTY4IDAwMDAwIG4gCjAwMDAwNTMyMjYgMDAwMDAgbiAKMDAwMDA1MzI4
NCAwMDAwMCBuIAowMDAwMDUzMzQyIDAwMDAwIG4gCjAwMDAwNTM0MDAgMDAwMDAgbiAKMDAwMDA1
MzQ1OCAwMDAwMCBuIAowMDAwMDUzNTE2IDAwMDAwIG4gCjAwMDAwNTM1NzMgMDAwMDAgbiAKMDAw
MDA1MzYzMCAwMDAwMCBuIAowMDAwMDUzNjg3IDAwMDAwIG4gCjAwMDAwNTc2MzEgMDAwMDAgbiAK
MDAwMDA1NTg0MiAwMDAwMCBuIAowMDAwMDUzODMwIDAwMDAwIG4gCjAwMDAwNTU5NTQgMDAwMDAg
biAKMDAwMDA1NjAxMiAwMDAwMCBuIAowMDAwMDU2MDcwIDAwMDAwIG4gCjAwMDAwNTYxMjggMDAw
MDAgbiAKMDAwMDA1NjE4NiAwMDAwMCBuIAowMDAwMDU2MjQ0IDAwMDAwIG4gCjAwMDAwNTYzMDIg
MDAwMDAgbiAKMDAwMDA1NjM1OCAwMDAwMCBuIAowMDAwMDU2NDE2IDAwMDAwIG4gCjAwMDAwNTY0
NzQgMDAwMDAgbiAKMDAwMDA1NjUzMiAwMDAwMCBuIAowMDAwMDU2NTkwIDAwMDAwIG4gCjAwMDAw
NTY2NDggMDAwMDAgbiAKMDAwMDA1NjcwNiAwMDAwMCBuIAowMDAwMDU2ODIxIDAwMDAwIG4gCjAw
MDAwNTY4NzkgMDAwMDAgbiAKMDAwMDA1NjkzNyAwMDAwMCBuIAowMDAwMDU2OTk1IDAwMDAwIG4g
CjAwMDAwNTcwNTMgMDAwMDAgbiAKMDAwMDA1NzExMSAwMDAwMCBuIAowMDAwMDU3MTY5IDAwMDAw
IG4gCjAwMDAwNTcyMjcgMDAwMDAgbiAKMDAwMDA1NzI4NSAwMDAwMCBuIAowMDAwMDU3MzQzIDAw
MDAwIG4gCjAwMDAwNTc0MDEgMDAwMDAgbiAKMDAwMDA1NzQ1OSAwMDAwMCBuIAowMDAwMDU3NTE3
IDAwMDAwIG4gCjAwMDAwNTc1NzQgMDAwMDAgbiAKMDAwMDA2MDU5MiAwMDAwMCBuIAowMDAwMDU5
MjEwIDAwMDAwIG4gCjAwMDAwNTc3OTUgMDAwMDAgbiAKMDAwMDA1OTMyMiAwMDAwMCBuIAowMDAw
MDU5MzgwIDAwMDAwIG4gCjAwMDAwNTk0MzggMDAwMDAgbiAKMDAwMDA1OTQ5NiAwMDAwMCBuIAow
MDAwMDU5NTU0IDAwMDAwIG4gCjAwMDAwNTk2MTIgMDAwMDAgbiAKMDAwMDA1OTY3MCAwMDAwMCBu
IAowMDAwMDU5Nzg0IDAwMDAwIG4gCjAwMDAwNTk4NDIgMDAwMDAgbiAKMDAwMDA1OTkwMCAwMDAw
MCBuIAowMDAwMDU5OTU4IDAwMDAwIG4gCjAwMDAwNjAwMTYgMDAwMDAgbiAKMDAwMDA2MDA3NCAw
MDAwMCBuIAowMDAwMDYwMTMyIDAwMDAwIG4gCjAwMDAwNjAxOTAgMDAwMDAgbiAKMDAwMDA2MDI0
NyAwMDAwMCBuIAowMDAwMDYwMzA1IDAwMDAwIG4gCjAwMDAwNjAzNjMgMDAwMDAgbiAKMDAwMDA2
MDQyMCAwMDAwMCBuIAowMDAwMDYwNDc4IDAwMDAwIG4gCjAwMDAwNjA1MzUgMDAwMDAgbiAKMDAw
MDIxNTI0NiAwMDAwMCBuIAowMDAwMDY0MDA5IDAwMDAwIG4gCjAwMDAwNjIzMzcgMDAwMDAgbiAK
MDAwMDA2MDc0MyAwMDAwMCBuIAowMDAwMDYyNDQ5IDAwMDAwIG4gCjAwMDAwNjI1MDcgMDAwMDAg
biAKMDAwMDA2MjU2NSAwMDAwMCBuIAowMDAwMDYyNjIzIDAwMDAwIG4gCjAwMDAwNjI2ODEgMDAw
MDAgbiAKMDAwMDA2Mjc5NiAwMDAwMCBuIAowMDAwMDYyODU0IDAwMDAwIG4gCjAwMDAwNjI5MTIg
MDAwMDAgbiAKMDAwMDA2Mjk3MCAwMDAwMCBuIAowMDAwMDYzMDI2IDAwMDAwIG4gCjAwMDAwNjMw
ODQgMDAwMDAgbiAKMDAwMDA2MzE0MiAwMDAwMCBuIAowMDAwMDYzMjAwIDAwMDAwIG4gCjAwMDAw
NjMyNTggMDAwMDAgbiAKMDAwMDA2MzMxNiAwMDAwMCBuIAowMDAwMDYzMzczIDAwMDAwIG4gCjAw
MDAwNjM0MzEgMDAwMDAgbiAKMDAwMDA2MzQ4OSAwMDAwMCBuIAowMDAwMDYzNTQ3IDAwMDAwIG4g
CjAwMDAwNjM2MDUgMDAwMDAgbiAKMDAwMDA2MzY2MyAwMDAwMCBuIAowMDAwMDYzNzIxIDAwMDAw
IG4gCjAwMDAwNjM3NzkgMDAwMDAgbiAKMDAwMDA2MzgzNyAwMDAwMCBuIAowMDAwMDYzODk1IDAw
MDAwIG4gCjAwMDAwNjg1ODYgMDAwMDAgbiAKMDAwMDA2NjYyNCAwMDAwMCBuIAowMDAwMDY0MTcz
IDAwMDAwIG4gCjAwMDAwNjY3MzYgMDAwMDAgbiAKMDAwMDA2Njc5NCAwMDAwMCBuIAowMDAwMDY2
ODUyIDAwMDAwIG4gCjAwMDAwNjY5MTAgMDAwMDAgbiAKMDAwMDA2Njk2OCAwMDAwMCBuIAowMDAw
MDY3MDI2IDAwMDAwIG4gCjAwMDAwNjcwODQgMDAwMDAgbiAKMDAwMDA2NzE0MiAwMDAwMCBuIAow
MDAwMDY3MjAwIDAwMDAwIG4gCjAwMDAwNjcyNTggMDAwMDAgbiAKMDAwMDA2NzMxNiAwMDAwMCBu
IAowMDAwMDY3Mzc0IDAwMDAwIG4gCjAwMDAwNjc0MzIgMDAwMDAgbiAKMDAwMDA2NzQ5MCAwMDAw
MCBuIAowMDAwMDY3NTQ4IDAwMDAwIG4gCjAwMDAwNjc2MDUgMDAwMDAgbiAKMDAwMDA2NzY2MyAw
MDAwMCBuIAowMDAwMDY3NzIxIDAwMDAwIG4gCjAwMDAwNjc3NzkgMDAwMDAgbiAKMDAwMDA2Nzgz
NyAwMDAwMCBuIAowMDAwMDY3ODk1IDAwMDAwIG4gCjAwMDAwNjc5NTMgMDAwMDAgbiAKMDAwMDA2
ODAxMSAwMDAwMCBuIAowMDAwMDY4MDY5IDAwMDAwIG4gCjAwMDAwNjgxMjcgMDAwMDAgbiAKMDAw
MDA2ODI0MSAwMDAwMCBuIAowMDAwMDY4Mjk5IDAwMDAwIG4gCjAwMDAwNjgzNTcgMDAwMDAgbiAK
MDAwMDA2ODQxNSAwMDAwMCBuIAowMDAwMDY4NDcyIDAwMDAwIG4gCjAwMDAwNjg1MjkgMDAwMDAg
biAKMDAwMDA3MjMxOCAwMDAwMCBuIAowMDAwMDcwODc3IDAwMDAwIG4gCjAwMDAwNjg3MTIgMDAw
MDAgbiAKMDAwMDA3MDk4OSAwMDAwMCBuIAowMDAwMDcxMDQ3IDAwMDAwIG4gCjAwMDAwNzExMDUg
MDAwMDAgbiAKMDAwMDA3MTE2MyAwMDAwMCBuIAowMDAwMDcxMjIxIDAwMDAwIG4gCjAwMDAwNzEy
NzkgMDAwMDAgbiAKMDAwMDA3MTMzNyAwMDAwMCBuIAowMDAwMDcxNDUyIDAwMDAwIG4gCjAwMDAw
NzE1MTAgMDAwMDAgbiAKMDAwMDA3MTYyNSAwMDAwMCBuIAowMDAwMDcxNjgzIDAwMDAwIG4gCjAw
MDAwNzE3NDEgMDAwMDAgbiAKMDAwMDA3MTc5OSAwMDAwMCBuIAowMDAwMDcxODU3IDAwMDAwIG4g
CjAwMDAwNzE5MTUgMDAwMDAgbiAKMDAwMDA3MTk3MiAwMDAwMCBuIAowMDAwMDcyMDMwIDAwMDAw
IG4gCjAwMDAwNzIwODggMDAwMDAgbiAKMDAwMDA3MjE0NiAwMDAwMCBuIAowMDAwMDcyMjA0IDAw
MDAwIG4gCjAwMDAwNzIyNjEgMDAwMDAgbiAKMDAwMDA3NzQyNiAwMDAwMCBuIAowMDAwMDc1MTY5
IDAwMDAwIG4gCjAwMDAwNzI0NTcgMDAwMDAgbiAKMDAwMDA3NjM2OSAwMDAwMCBuIAowMDAwMDc2
NDI3IDAwMDAwIG4gCjAwMDAwNzY0ODUgMDAwMDAgbiAKMDAwMDA3NjU0MyAwMDAwMCBuIAowMDAw
MDc2NjAxIDAwMDAwIG4gCjAwMDAwNzY2NTkgMDAwMDAgbiAKMDAwMDA3NjcxNyAwMDAwMCBuIAow
MDAwMDc2Nzc1IDAwMDAwIG4gCjAwMDAwNzY4MzMgMDAwMDAgbiAKMDAwMDA3Njg5MCAwMDAwMCBu
IAowMDAwMDc2OTQ4IDAwMDAwIG4gCjAwMDAwNzcwNjMgMDAwMDAgbiAKMDAwMDA3NzEyMSAwMDAw
MCBuIAowMDAwMTA4ODQzIDAwMDAwIG4gCjAwMDAxMDUxNzYgMDAwMDAgbiAKMDAwMDEwODY4MSAw
MDAwMCBuIAowMDAwMDc1MzQxIDAwMDAwIG4gCjAwMDAwNzU0OTkgMDAwMDAgbiAKMDAwMDA3NTY1
NyAwMDAwMCBuIAowMDAwMDc3MjM2IDAwMDAwIG4gCjAwMDAwNzU4MTUgMDAwMDAgbiAKMDAwMDA3
NzMwMCAwMDAwMCBuIAowMDAwMDc2MDE2IDAwMDAwIG4gCjAwMDAwNzczNjMgMDAwMDAgbiAKMDAw
MDA3NjIwMyAwMDAwMCBuIAowMDAwMDgzMTc4IDAwMDAwIG4gCjAwMDAwODAxNDAgMDAwMDAgbiAK
MDAwMDA3NzU3OSAwMDAwMCBuIAowMDAwMDgwNjk3IDAwMDAwIG4gCjAwMDAwODA3NTUgMDAwMDAg
biAKMDAwMDA4MDgxMyAwMDAwMCBuIAowMDAwMDgwODcxIDAwMDAwIG4gCjAwMDAwODA5MjkgMDAw
MDAgbiAKMDAwMDA4MDk4NyAwMDAwMCBuIAowMDAwMDgxMDQ1IDAwMDAwIG4gCjAwMDAwODExMDMg
MDAwMDAgbiAKMDAwMDA4MTE1OSAwMDAwMCBuIAowMDAwMDgxMjE3IDAwMDAwIG4gCjAwMDAwODEy
NzUgMDAwMDAgbiAKMDAwMDA4MTMzMyAwMDAwMCBuIAowMDAwMDgxMzkxIDAwMDAwIG4gCjAwMDAw
ODE0NDkgMDAwMDAgbiAKMDAwMDA4MTUwNyAwMDAwMCBuIAowMDAwMDgxNTY1IDAwMDAwIG4gCjAw
MDAwODE2MjMgMDAwMDAgbiAKMDAwMDA4MTY4MSAwMDAwMCBuIAowMDAwMDgxNzM5IDAwMDAwIG4g
CjAwMDAwODE3OTYgMDAwMDAgbiAKMDAwMDA4MTg1NCAwMDAwMCBuIAowMDAwMDgxOTEyIDAwMDAw
IG4gCjAwMDAwODE5NzAgMDAwMDAgbiAKMDAwMDA4MjAyOCAwMDAwMCBuIAowMDAwMDgwMjgwIDAw
MDAwIG4gCjAwMDAwODA0ODkgMDAwMDAgbiAKMDAwMDA4MjE5OCAwMDAwMCBuIAowMDAwMDgyMjU2
IDAwMDAwIG4gCjAwMDAwODIzMTQgMDAwMDAgbiAKMDAwMDA4MjM3MiAwMDAwMCBuIAowMDAwMDgy
NDMwIDAwMDAwIG4gCjAwMDAwODI0ODggMDAwMDAgbiAKMDAwMDA4MjU0NiAwMDAwMCBuIAowMDAw
MDgyNjA0IDAwMDAwIG4gCjAwMDAwODI2NjIgMDAwMDAgbiAKMDAwMDA4MjcyMCAwMDAwMCBuIAow
MDAwMDgyNzc4IDAwMDAwIG4gCjAwMDAwODI4MzUgMDAwMDAgbiAKMDAwMDA4Mjg5MyAwMDAwMCBu
IAowMDAwMDgyOTUwIDAwMDAwIG4gCjAwMDAwODMwMDcgMDAwMDAgbiAKMDAwMDA4MzA2NCAwMDAw
MCBuIAowMDAwMDgzMTIxIDAwMDAwIG4gCjAwMDAwODkxMjAgMDAwMDAgbiAKMDAwMDA4NjU4NSAw
MDAwMCBuIAowMDAwMDgzMzE4IDAwMDAwIG4gCjAwMDAwODY2OTcgMDAwMDAgbiAKMDAwMDA4Njc1
NSAwMDAwMCBuIAowMDAwMDg2ODEzIDAwMDAwIG4gCjAwMDAwODY4NzEgMDAwMDAgbiAKMDAwMDA4
NjkyOSAwMDAwMCBuIAowMDAwMDg2OTg3IDAwMDAwIG4gCjAwMDAwODcwNDUgMDAwMDAgbiAKMDAw
MDA4NzEwMSAwMDAwMCBuIAowMDAwMDg3MTU5IDAwMDAwIG4gCjAwMDAwODcyMTcgMDAwMDAgbiAK
MDAwMDA4NzI3NSAwMDAwMCBuIAowMDAwMDg3MzMzIDAwMDAwIG4gCjAwMDAwODczOTEgMDAwMDAg
biAKMDAwMDA4NzQ0OSAwMDAwMCBuIAowMDAwMDg3NTA3IDAwMDAwIG4gCjAwMDAwODc1NjUgMDAw
MDAgbiAKMDAwMDA4NzYyMyAwMDAwMCBuIAowMDAwMDg3NjgxIDAwMDAwIG4gCjAwMDAwODc3Mzkg
MDAwMDAgbiAKMDAwMDA4Nzc5NyAwMDAwMCBuIAowMDAwMDg3ODUzIDAwMDAwIG4gCjAwMDAwODc5
MTEgMDAwMDAgbiAKMDAwMDA4Nzk2OSAwMDAwMCBuIAowMDAwMDg4MDI3IDAwMDAwIG4gCjAwMDAw
ODgwODUgMDAwMDAgbiAKMDAwMDA4ODE0MyAwMDAwMCBuIAowMDAwMDg4MjAxIDAwMDAwIG4gCjAw
MDAwODgyNTkgMDAwMDAgbiAKMDAwMDA4ODMxNyAwMDAwMCBuIAowMDAwMDg4Mzc1IDAwMDAwIG4g
CjAwMDAwODg0MzIgMDAwMDAgbiAKMDAwMDA4ODQ5MCAwMDAwMCBuIAowMDAwMDg4NjA1IDAwMDAw
IG4gCjAwMDAwODg2NjEgMDAwMDAgbiAKMDAwMDA4ODcxOSAwMDAwMCBuIAowMDAwMDg4Nzc3IDAw
MDAwIG4gCjAwMDAwODg4MzUgMDAwMDAgbiAKMDAwMDA4ODg5MyAwMDAwMCBuIAowMDAwMDg4OTUw
IDAwMDAwIG4gCjAwMDAwODkwMDYgMDAwMDAgbiAKMDAwMDA4OTA2MyAwMDAwMCBuIAowMDAwMjE1
MzYzIDAwMDAwIG4gCjAwMDAwOTUxODQgMDAwMDAgbiAKMDAwMDA5MTc3OCAwMDAwMCBuIAowMDAw
MDg5MjQ2IDAwMDAwIG4gCjAwMDAwOTE4OTAgMDAwMDAgbiAKMDAwMDA5MTk0OCAwMDAwMCBuIAow
MDAwMDkyMDA2IDAwMDAwIG4gCjAwMDAwOTIwNjQgMDAwMDAgbiAKMDAwMDA5MjEyMiAwMDAwMCBu
IAowMDAwMDkyMTgwIDAwMDAwIG4gCjAwMDAwOTIyMzggMDAwMDAgbiAKMDAwMDA5MjI5NCAwMDAw
MCBuIAowMDAwMDkyMzUyIDAwMDAwIG4gCjAwMDAwOTI0MTAgMDAwMDAgbiAKMDAwMDA5MjQ2OCAw
MDAwMCBuIAowMDAwMDkyNTI2IDAwMDAwIG4gCjAwMDAwOTI1ODQgMDAwMDAgbiAKMDAwMDA5MjY0
MiAwMDAwMCBuIAowMDAwMDkyNzAwIDAwMDAwIG4gCjAwMDAwOTI3NTggMDAwMDAgbiAKMDAwMDA5
MjgxNiAwMDAwMCBuIAowMDAwMDkyODc0IDAwMDAwIG4gCjAwMDAwOTI5MzEgMDAwMDAgbiAKMDAw
MDA5Mjk4OSAwMDAwMCBuIAowMDAwMDkzMDQ3IDAwMDAwIG4gCjAwMDAwOTMxMDUgMDAwMDAgbiAK
MDAwMDA5MzE2MyAwMDAwMCBuIAowMDAwMDkzMjIxIDAwMDAwIG4gCjAwMDAwOTMyNzkgMDAwMDAg
biAKMDAwMDA5MzMzNyAwMDAwMCBuIAowMDAwMDkzMzk1IDAwMDAwIG4gCjAwMDAwOTM0NTMgMDAw
MDAgbiAKMDAwMDA5MzUxMCAwMDAwMCBuIAowMDAwMDkzNTY4IDAwMDAwIG4gCjAwMDAwOTM2MjYg
MDAwMDAgbiAKMDAwMDA5MzY4NCAwMDAwMCBuIAowMDAwMDkzNzQyIDAwMDAwIG4gCjAwMDAwOTM4
MDAgMDAwMDAgbiAKMDAwMDA5Mzg1OCAwMDAwMCBuIAowMDAwMDkzOTE2IDAwMDAwIG4gCjAwMDAw
OTM5NzQgMDAwMDAgbiAKMDAwMDA5NDAzMiAwMDAwMCBuIAowMDAwMDk0MDkwIDAwMDAwIG4gCjAw
MDAwOTQxNDcgMDAwMDAgbiAKMDAwMDA5NDIwNSAwMDAwMCBuIAowMDAwMDk0MjYzIDAwMDAwIG4g
CjAwMDAwOTQzMjEgMDAwMDAgbiAKMDAwMDA5NDM3OSAwMDAwMCBuIAowMDAwMDk0NDM3IDAwMDAw
IG4gCjAwMDAwOTQ0OTUgMDAwMDAgbiAKMDAwMDA5NDU1MyAwMDAwMCBuIAowMDAwMDk0NjExIDAw
MDAwIG4gCjAwMDAwOTQ2NjkgMDAwMDAgbiAKMDAwMDA5NDcyNiAwMDAwMCBuIAowMDAwMDk0Nzg0
IDAwMDAwIG4gCjAwMDAwOTQ4NDEgMDAwMDAgbiAKMDAwMDA5NDg5OSAwMDAwMCBuIAowMDAwMDk0
OTU2IDAwMDAwIG4gCjAwMDAwOTUwMTMgMDAwMDAgbiAKMDAwMDA5NTA3MCAwMDAwMCBuIAowMDAw
MDk1MTI3IDAwMDAwIG4gCjAwMDAxMDEzMDYgMDAwMDAgbiAKMDAwMDA5ODMxNCAwMDAwMCBuIAow
MDAwMDk1Mjg0IDAwMDAwIG4gCjAwMDAwOTk2ODggMDAwMDAgbiAKMDAwMDA5OTc0NiAwMDAwMCBu
IAowMDAwMDk5ODA0IDAwMDAwIG4gCjAwMDAwOTk4NjIgMDAwMDAgbiAKMDAwMDA5OTkyMCAwMDAw
MCBuIAowMDAwMDk5OTc4IDAwMDAwIG4gCjAwMDAxMDAwMzYgMDAwMDAgbiAKMDAwMDEwMDA5MiAw
MDAwMCBuIAowMDAwMTAwMTUwIDAwMDAwIG4gCjAwMDAxMDAyMDggMDAwMDAgbiAKMDAwMDEwMDI2
NiAwMDAwMCBuIAowMDAwMTAwMzI0IDAwMDAwIG4gCjAwMDAxMDAzODIgMDAwMDAgbiAKMDAwMDEw
MDQ0MCAwMDAwMCBuIAowMDAwMTAwNDk4IDAwMDAwIG4gCjAwMDAxMDA1NTYgMDAwMDAgbiAKMDAw
MDEwMDYxNCAwMDAwMCBuIAowMDAwMTAwNjcyIDAwMDAwIG4gCjAwMDAxMDA3ODYgMDAwMDAgbiAK
MDAwMDEwMDkwMiAwMDAwMCBuIAowMDAwMTAwOTYwIDAwMDAwIG4gCjAwMDAwOTg0ODYgMDAwMDAg
biAKMDAwMDA5ODY5NyAwMDAwMCBuIAowMDAwMTAxMDE4IDAwMDAwIG4gCjAwMDAwOTg5MTAgMDAw
MDAgbiAKMDAwMDA5OTEyMSAwMDAwMCBuIAowMDAwMTAxMDc2IDAwMDAwIG4gCjAwMDAwOTkzMzEg
MDAwMDAgbiAKMDAwMDEwMTEzMyAwMDAwMCBuIAowMDAwMTAxMTkxIDAwMDAwIG4gCjAwMDAwOTk1
MDEgMDAwMDAgbiAKMDAwMDEwMTI0OSAwMDAwMCBuIAowMDAwMTA1MDc3IDAwMDAwIG4gCjAwMDAx
MDI3OTggMDAwMDAgbiAKMDAwMDEwMTQzMiAwMDAwMCBuIAowMDAwMTA0NTU2IDAwMDAwIG4gCjAw
MDAxMDQ2MTQgMDAwMDAgbiAKMDAwMDEwMjk4NiAwMDAwMCBuIAowMDAwMTA0NjcyIDAwMDAwIG4g
CjAwMDAxMDMxODIgMDAwMDAgbiAKMDAwMDEwNDczMCAwMDAwMCBuIAowMDAwMTA0Nzg4IDAwMDAw
IG4gCjAwMDAxMDQ4NDYgMDAwMDAgbiAKMDAwMDEwMzM5NCAwMDAwMCBuIAowMDAwMTAzNTkwIDAw
MDAwIG4gCjAwMDAxMDQ5MDQgMDAwMDAgbiAKMDAwMDEwMzc4NiAwMDAwMCBuIAowMDAwMTA0OTYy
IDAwMDAwIG4gCjAwMDAxMDM5NzkgMDAwMDAgbiAKMDAwMDEwNDE2NiAwMDAwMCBuIAowMDAwMTA1
MDIwIDAwMDAwIG4gCjAwMDAxMDQzNTMgMDAwMDAgbiAKMDAwMDEwOTIzNiAwMDAwMCBuIAowMDAw
MTA5MDcyIDAwMDAwIG4gCjAwMDAxMjE5OTggMDAwMDAgbiAKMDAwMDEyMTY1NiAwMDAwMCBuIAow
MDAwMTI0OTc0IDAwMDAwIG4gCjAwMDAxMjQ5NTAgMDAwMDAgbiAKMDAwMDEyNzkwNiAwMDAwMCBu
IAowMDAwMTI3NzY2IDAwMDAwIG4gCjAwMDAxMzAzNzkgMDAwMDAgbiAKMDAwMDEzMDM0NSAwMDAw
MCBuIAowMDAwMTMwNDkyIDAwMDAwIG4gCjAwMDAxNDkxMDEgMDAwMDAgbiAKMDAwMDE1ODkwMSAw
MDAwMCBuIAowMDAwMTU4NjI1IDAwMDAwIG4gCjAwMDAxNzE3NDcgMDAwMDAgbiAKMDAwMDE3MTQy
NyAwMDAwMCBuIAowMDAwMTg5MDgyIDAwMDAwIG4gCjAwMDAxOTM1MzQgMDAwMDAgbiAKMDAwMDE5
MzI2MiAwMDAwMCBuIAowMDAwMjE0MzI5IDAwMDAwIG4gCjAwMDAyMTU0NjQgMDAwMDAgbiAKMDAw
MDIxNTU1MCAwMDAwMCBuIAowMDAwMjE3ODI2IDAwMDAwIG4gCjAwMDAyMzE5NzUgMDAwMDAgbiAK
MDAwMDIzMjAxNCAwMDAwMCBuIAowMDAwMjMyMDUyIDAwMDAwIG4gCjAwMDAyMzIxODIgMDAwMDAg
biAKdHJhaWxlcgo8PAovU2l6ZSA4MjkKL1Jvb3QgODI3IDAgUgovSW5mbyA4MjggMCBSCi9JRCBb
PEQyRjg2MEQ4RkQwNzBFRDlENEMwRkYwMzNGNThDRDJCPiA8RDJGODYwRDhGRDA3MEVEOUQ0QzBG
RjAzM0Y1OENEMkI+XQo+PgpzdGFydHhyZWYKMjMyNDQ1CiUlRU9GCj==


--=-5AxpH1/SXfDpgSwSgMDC--

From hbr@poly.edu Fri Mar  3 12:14:05 2006
Received: from duke.poly.edu (duke.poly.edu [128.238.2.92])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k23KE5jd031593
	for <std-interval@compgeom.poly.edu>; Fri, 3 Mar 2006 12:14:05 -0800
Received: from [128.238.34.253] (polytope.poly.edu [128.238.34.253])
	by duke.poly.edu (8.13.1/8.13.1) with ESMTP id k23IAb5v000912;
	Fri, 3 Mar 2006 13:10:37 -0500 (EST)
Mime-Version: 1.0 (Apple Message framework v746.2)
Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
Message-Id: <3237163E-C77D-4554-AB5B-3747B3F47675@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Date: Fri, 3 Mar 2006 13:10:34 -0500
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.746.2)
X-Spam-Checker-Version: SpamAssassin 3.0.1 (2004-10-22) on duke.poly.edu
X-Virus-Scanned: ClamAV version 0.87, clamav-milter version 0.87 on
	duke.poly.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k23KE5jd031593
Subject: [std-interval] Please reply to
	http://compgeom.poly.edu/std-interval/questionnaire.html 
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 03 Mar 2006 20:14:05 -0000

Dear std-interval list subscriber:

At the Mont-Tremblant meeting, it was suggested that we (the  
submitters of the std::interval<T> proposal) evaluate the impact of  
having IA provided by the C++ standard.  To this end, we have set up  
a web questionnaire.  We would be grateful if you could

1.  Fill in the questionnaire yourself.

2. Send this email to any party (esp. users of IA in goverment lab,  
industrial or commercial settings) whom you know is interested in IA,  
and ask them to support our efforts by filling in the questionnaire.

We have tried to keep this questionnaire short, while maximizing the  
opportunity to give feedback on several aspects of the proposal.  I  
would hope it is possible to answer it in less than 10 minutes,  
perhaps 15 if giving more elaborate answers towards the end (feedback  
on pros/cons of IA in C++ standard).

We thank you for you support,
--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu



From Stephen.Clamage@Sun.COM Fri Mar  3 12:42:27 2006
Received: from brmea-mail-3.sun.com (brmea-mail-3.Sun.COM [192.18.98.34])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k23KgRjd031749
	for <std-interval@compgeom.poly.edu>; Fri, 3 Mar 2006 12:42:27 -0800
Received: from phys-mpk-1 ([129.146.11.81])
	by brmea-mail-3.sun.com (8.12.10/8.12.9) with ESMTP id k23Id2Qj005484
	for <std-interval@compgeom.poly.edu>;
	Fri, 3 Mar 2006 11:39:02 -0700 (MST)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IVK00G01DR11E@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Fri, 03 Mar 2006 10:39:02 -0800 (PST)
Received: from [129.150.23.31]
 (vpn-129-150-23-31.SFBay.Sun.COM [129.150.23.31]) by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IVK00LD5EGGKW@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Fri, 03 Mar 2006 10:38:40 -0800 (PST)
Date: Fri, 03 Mar 2006 10:38:37 -0800
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] Please reply to
	http://compgeom.poly.edu/std-interval/questionnaire.html
In-reply-to: <3237163E-C77D-4554-AB5B-3747B3F47675@poly.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <44088D2D.2060503@sun.com>
Organization: Sun Microsystems, Inc.
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 8BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: <3237163E-C77D-4554-AB5B-3747B3F47675@poly.edu>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 03 Mar 2006 20:42:27 -0000

... and where is the questionnaire?

---
Steve Clamage, stephen.clamage@sun.com

Hervé Brönnimann wrote:

> Dear std-interval list subscriber:
> 
> At the Mont-Tremblant meeting, it was suggested that we (the  submitters 
> of the std::interval<T> proposal) evaluate the impact of  having IA 
> provided by the C++ standard.  To this end, we have set up  a web 
> questionnaire.  We would be grateful if you could
> 
> 1.  Fill in the questionnaire yourself.
> 
> 2. Send this email to any party (esp. users of IA in goverment lab,  
> industrial or commercial settings) whom you know is interested in IA,  
> and ask them to support our efforts by filling in the questionnaire.
> 
> We have tried to keep this questionnaire short, while maximizing the  
> opportunity to give feedback on several aspects of the proposal.  I  
> would hope it is possible to answer it in less than 10 minutes,  perhaps 
> 15 if giving more elaborate answers towards the end (feedback  on 
> pros/cons of IA in C++ standard).
> 
> We thank you for you support,
> -- 
> Hervé Brönnimann
> CIS, Polytechnic University
> hbr@poly.edu
> 
> 
> 
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval


From hbr@poly.edu Fri Mar  3 13:17:04 2006
Received: from duke.poly.edu (duke.poly.edu [128.238.2.92])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k23LH3jd031870
	for <std-interval@compgeom.poly.edu>; Fri, 3 Mar 2006 13:17:03 -0800
Received: from [128.238.34.253] (polytope.poly.edu [128.238.34.253])
	by duke.poly.edu (8.13.1/8.13.1) with ESMTP id k23JDara020925;
	Fri, 3 Mar 2006 14:13:36 -0500 (EST)
In-Reply-To: <44088D2D.2060503@sun.com>
References: <3237163E-C77D-4554-AB5B-3747B3F47675@poly.edu>
	<44088D2D.2060503@sun.com>
Mime-Version: 1.0 (Apple Message framework v746.2)
Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
Message-Id: <1EE54568-8FE5-4CDE-82EB-44A50B2CDC86@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Subject: Re: [std-interval] Please reply to
	http://compgeom.poly.edu/std-interval/questionnaire.html
Date: Fri, 3 Mar 2006 14:13:32 -0500
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.746.2)
X-Spam-Checker-Version: SpamAssassin 3.0.1 (2004-10-22) on duke.poly.edu
X-Virus-Scanned: ClamAV version 0.87, clamav-milter version 0.87 on
	duke.poly.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k23LH3jd031870
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 03 Mar 2006 21:17:04 -0000

Sorry, it's in the subject line, but you're right that it should also  
be clearly mentioned in the text...

http://compgeom.poly.edu/std-interval/questionnaire.html

--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu


On Mar 3, 2006, at 1:38 PM, Steve Clamage wrote:

> ... and where is the questionnaire?
>
> ---
> Steve Clamage, stephen.clamage@sun.com
>
> Hervé Brönnimann wrote:
>
>> Dear std-interval list subscriber:
>> At the Mont-Tremblant meeting, it was suggested that we (the   
>> submitters of the std::interval<T> proposal) evaluate the impact  
>> of  having IA provided by the C++ standard.  To this end, we have  
>> set up  a web questionnaire.  We would be grateful if you could
>> 1.  Fill in the questionnaire yourself.
>> 2. Send this email to any party (esp. users of IA in goverment  
>> lab,  industrial or commercial settings) whom you know is  
>> interested in IA,  and ask them to support our efforts by filling  
>> in the questionnaire.
>> We have tried to keep this questionnaire short, while maximizing  
>> the  opportunity to give feedback on several aspects of the  
>> proposal.  I  would hope it is possible to answer it in less than  
>> 10 minutes,  perhaps 15 if giving more elaborate answers towards  
>> the end (feedback  on pros/cons of IA in C++ standard).
>> We thank you for you support,
>> -- 
>> Hervé Brönnimann
>> CIS, Polytechnic University
>> hbr@poly.edu
>> _______________________________________________
>> Std-interval mailing list
>> Std-interval@compgeom.poly.edu
>> http://compgeom.poly.edu/mailman/listinfo/std-interval
>
>
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval
>


From hbr@poly.edu Fri Mar  3 13:18:53 2006
Received: from duke.poly.edu (duke.poly.edu [128.238.2.92])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k23LIrjd031887
	for <std-interval@compgeom.poly.edu>; Fri, 3 Mar 2006 13:18:53 -0800
Received: from [128.238.34.253] (polytope.poly.edu [128.238.34.253])
	by duke.poly.edu (8.13.1/8.13.1) with ESMTP id k23JFQPi021706;
	Fri, 3 Mar 2006 14:15:26 -0500 (EST)
Mime-Version: 1.0 (Apple Message framework v746.2)
Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
Message-Id: <F0F082C4-DCAF-48AF-B076-1B39B5A8FBFB@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Subject: Re: [std-interval] Please reply to
	http://compgeom.poly.edu/std-interval/questionnaire.html 
Date: Fri, 3 Mar 2006 14:15:23 -0500
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.746.2)
X-Virus-Scanned: ClamAV version 0.87, clamav-milter version 0.87 on
	duke.poly.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k23LIrjd031887
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 03 Mar 2006 21:18:53 -0000

If this wasn't clear from the subject line, I apologize. In any case,  
let me make it even clearer: the questionnaire is available at

    http://compgeom.poly.edu/std-interval/questionnaire.html

Thanks,
--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu



From eliasen@mindspring.com Fri Mar  3 14:34:28 2006
Received: from smtpauth02.mail.atl.earthlink.net
	(smtpauth02.mail.atl.earthlink.net [209.86.89.62])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k23MYSjd032028
	for <std-interval@compgeom.poly.edu>; Fri, 3 Mar 2006 14:34:28 -0800
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=QKYfsuV+CJhQpDz0ZruSHEUee0oJf1CQxCHSNVa0gDaKTMdjt9QnKhyJUB1pY0uH;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [68.164.104.8] (helo=[192.168.1.103])
	by smtpauth02.mail.atl.earthlink.net with asmtp (Exim 4.34)
	id 1FFGvZ-0001Ez-TT
	for std-interval@compgeom.poly.edu; Fri, 03 Mar 2006 15:31:06 -0500
Message-ID: <4408A788.1050009@mindspring.com>
Date: Fri, 03 Mar 2006 13:31:04 -0700
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Please reply to
	http://compgeom.poly.edu/std-interval/questionnaire.html
References: <F0F082C4-DCAF-48AF-B076-1B39B5A8FBFB@poly.edu>
In-Reply-To: <F0F082C4-DCAF-48AF-B076-1B39B5A8FBFB@poly.edu>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac450729f3b64d5f5bf154ac1c2c84427920c5350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 68.164.104.8
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 03 Mar 2006 22:34:28 -0000


   I would suggest that the buttons at the bottom of the form be
re-ordered to have "submit" first and "clear" second to follow more
common interface conventions.  I didn't quite click "clear," but my
finger was a millimeter away.... :)  Otherwise, looks like a useful and
well-considered survey.

   FYI, I'm a developer who has developed my own Interval Arithmetic
library for my programming language "Frink" (implemented in Java).  See
http://futureboy.us/frinkdocs/ for more information about the language.

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From hbr@poly.edu Fri Mar  3 14:45:51 2006
Received: from duke.poly.edu (duke.poly.edu [128.238.2.92])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k23Mjojd032094
	for <std-interval@compgeom.poly.edu>; Fri, 3 Mar 2006 14:45:51 -0800
Received: from [128.238.34.253] (polytope.poly.edu [128.238.34.253])
	by duke.poly.edu (8.13.1/8.13.1) with ESMTP id k23KgOYF020430;
	Fri, 3 Mar 2006 15:42:24 -0500 (EST)
In-Reply-To: <4408A788.1050009@mindspring.com>
References: <F0F082C4-DCAF-48AF-B076-1B39B5A8FBFB@poly.edu>
	<4408A788.1050009@mindspring.com>
Mime-Version: 1.0 (Apple Message framework v746.2)
Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
Message-Id: <1B01C736-D160-4A19-9279-2E72408C9CEE@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Subject: Re: [std-interval] Please reply to
	http://compgeom.poly.edu/std-interval/questionnaire.html
Date: Fri, 3 Mar 2006 15:42:22 -0500
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.746.2)
X-Virus-Scanned: ClamAV version 0.87, clamav-milter version 0.87 on
	duke.poly.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k23Mjojd032094
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 03 Mar 2006 22:45:51 -0000

Thanks for sharing the feedback. I'm not an interface designer :-)
Done.
--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu


On Mar 3, 2006, at 3:31 PM, Alan Eliasen wrote:
>    I would suggest that the buttons at the bottom of the form be
> re-ordered to have "submit" first and "clear" second to follow more
> common interface conventions.  I didn't quite click "clear," but my
> finger was a millimeter away.... :)  Otherwise, looks like a useful  
> and
> well-considered survey.
>
>    FYI, I'm a developer who has developed my own Interval Arithmetic
> library for my programming language "Frink" (implemented in Java).   
> See
> http://futureboy.us/frinkdocs/ for more information about the  
> language.
>
> -- 
>   Alan Eliasen                 |  "When trouble is solved before it
>   eliasen@mindspring.com       |    forms, who calls that clever?"
>   http://futureboy.us/         |              --Sun Tzu
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval
>


From guillaume.melquiond@ens-lyon.fr Fri Mar  3 17:04:40 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k2414cjd032280
	for <std-interval@compgeom.poly.edu>; Fri, 3 Mar 2006 17:04:39 -0800
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id B664915B6F3
	for <std-interval@compgeom.poly.edu>;
	Sat,  4 Mar 2006 00:01:26 +0100 (CET)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 25090-30 for <std-interval@compgeom.poly.edu>;
	Sat, 4 Mar 2006 00:01:26 +0100 (CET)
Received: from vpn-user-204-67.ens-lyon.fr (vpn-user-204-67.ens-lyon.fr
	[140.77.204.67])	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 0EF9415B6E7
	for <std-interval@compgeom.poly.edu>;
	Sat,  4 Mar 2006 00:01:25 +0100 (CET)
Received: from blongios.ens-lyon.fr ([unix socket]) by blongios (Cyrus
	v2.1.18-IPv6-Debian-2.1.18-1) with LMTP;
	Fri, 03 Mar 2006 02:09:24 +0100
X-Sieve: CMU Sieve 2.2
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16]) by
	blongios.ens-lyon.fr (Postfix) with ESMTP id 0BB551EC063A for
	<guillaume.melquiond@ens-lyon.fr>;
	Fri,  3 Mar 2006 02:09:24 +0100 (CET)
Received: from localhost (localhost [127.0.0.1]) by pilet.ens-lyon.fr
	<guillaume.melquiond@ens-lyon.fr>;
	Fri,  3 Mar 2006 02:09:31 +0100 (CET)
Received: from pilet.ens-lyon.fr ([127.0.0.1]) by localhost (pilet
	[127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 27895-97 for
	<guillaume.melquiond@ens-lyon.fr>;
	Fri, 3 Mar 2006 02:09:31 +0100 (CET)
Received: from brmea-mail-3.sun.com (brmea-mail-3.Sun.COM [192.18.98.34])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id CCBAF15B5EB for
	<guillaume.melquiond@ens-lyon.fr>;
	Fri,  3 Mar 2006 02:09:30 +0100 (CET)
Received: from sfbaymail1sca.SFBay.Sun.COM ([129.145.154.35]) by
	brmea-mail-3.sun.com (8.12.10/8.12.9) with ESMTP id k2319FQj024381;
	Thu, 2	Mar 2006 18:09:16 -0700 (MST)
Received: from philmont.sfbay.sun.com (philmont.SFBay.Sun.COM
	[129.146.86.162]) by sfbaymail1sca.SFBay.Sun.COM
	(8.12.10+Sun/8.12.10/ENSMAIL,v2.2) with ESMTP id k2319FEZ016034;
	Thu, 2 Mar	2006 17:09:15 -0800 (PST)
Received: from philmont (localhost [127.0.0.1]) by philmont.sfbay.sun.com
	(8.12.10+Sun/8.12.9) with ESMTP id k2319Fbd012674;
	Thu, 2 Mar 2006 17:09:15	-0800 (PST)
Message-Id: <200603030109.k2319Fbd012674@philmont.sfbay.sun.com>
To: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>,
   =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>,
   Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
From: Lawrence.Crowl@sun.com
Sender: crowl@philmont.sfbay.sun.com
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
Resent-From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
Resent-To: std-interval@compgeom.poly.edu
Date: Sat, 04 Mar 2006 00:01:16 +0100
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 7bit
Resent-Message-Id: <20060303230125.0EF9415B6E7@pilet.ens-lyon.fr>
Resent-Date: Sat,  4 Mar 2006 00:01:25 +0100 (CET)
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
cc: Steve Clamage <Stephen.Clamage@sun.com>
cc: Bill Walster <Bill.Walster@sun.com>
Subject: [std-interval] Re: winter 2006 draft for standard C++ intervals
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence.Crowl@sun.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sat, 04 Mar 2006 01:04:40 -0000

Overall, I thought the proposal well written.  I do have some
comments.

(A date would have helped in identifying the document, even if you do
not yet have a document number.)

============

Should std::valarray<interval> be allowed?

   Note that Sun's interval library includes specializations for
   valarray over intervals.  This specialization improves performance
   over the simple approach.

Should intervals be passed by value or by reference?

   I strongly prefer the pass-by-value approach over the legacy
   pass-by-reference approach of std::complex.  The choice has
   implications beyond the efficiency of the interval operations
   because users will tend to copy the style of the standard.  This
   pass-by-reference style leads to inefficiency and incorrectness.

   "Changing [interval parameters from pass-by-reference] to pass by
   value would only penalize the other ABIs."

   What evidence do you have to support this claim?  In fact, for most
   ABIs, the performance of intervals pass-by-value will be faster
   than pass-by-reference.  On those ABIs where performance by-value
   is lower, it will be only marginally lower. (For example, on x86
   pass-by-value pushes two words to the stack; pass-by-reference
   varies from pushing one word to writing two words and pushing one.)
   On the other hand, ABIs that support "small structs passed in
   registers", the difference is signficant, often avoiding memory
   entirely.

   "Note that this point is moot when functions are inline, which is
   expected to be the case most of the time."

   This statement is entirely untrue for the simple implementations.

   Pass-by-reference inhibits optimization.  The problem is that
   pass-by-reference introduces potential aliases between parameters.
   The compiler must load/store intervals to memory at many
   intermediate stages of computation to avoid incorrect results.  In
   contrast, value parameters cannot be aliased, and hence may be
   retained in registers.

   The aliasing problem is particularly severe because programmers
   often write programs as though it did not exist.  That is, they
   write functions that fail when parameters are in fact aliased.
   For example, the typical code for complex::operator*= is:

      real = real*rhs.real - imag*rhs.imag;
      imag = imag*rhs.real + real*rhs.imag;

   and it fails under pass-by-reference for the expression c*=c.
   Workarounds to this problem genrally involve retaining an extra copy
   of something, which ends up being very similar to pass-by-value.

   Now, imagine all that code where the programmer did not account for
   aliasing in user-written functions.  Now imagine all that code just
   naturally corrected with pass-by-value.

   This issue is very important.

26.6 Interval Numbers

   Paragraph 2 has a stale reference to interval<bool>.

   Paragraph 2 also says "instantiating the template interval for any
   type other than ... is unspecified".  By omitting the generic
   template definition, and defining only the specializations, the user
   cannot instantiate interval over any other type and the unspecified
   behavior is gone.  Is there any particular reason to provide the
   generic template definition?  If not, I suggest you remove it.
   Section 26.6.2 would go away.

26.6.1 Header <interval> synopsis // values:

   Several of the free functions seem more natural to me as member
   functions.  They are inf, sup, midpoint, and width.

26.6.1 Header <interval> synopsis // algebraic operators:

   Why is square a "value", but sqrt is a "algebraic operator"?

26.6.1 Header <interval> synopsis // set operations:

   These operations seem much more natural to me as member functions.
   Consider:

      if ( contains( a, b ) )

   versus

      if ( a.contains(b) )

   or more signficiantly

      a = intersect( hull( a, b ), c );

   versus

      a = a.hull(b).intersect(c);

   As with the values functions, we need to balance the expectations of
   the users.  I speak of my expectations as a C++ expert, not of the
   expectations of an interval expert.  It may well be that changing
   would be worse than not.

26.6.11 interval static value operations

   Based on the example in VI.1, you also need

      interval<T> interval<T>::epsilon()
         { return interval( -std::numeric_limits<T>::min(), 
                             std::numeric_limits<T>::min() ); }

   And based on the example in VI.2, you also need

      interval<T> interval<T>::min()
         { return interval( std::numeric_limits<T>::min(), 
                            std::numeric_limits<T>::min() ); }

   which results in

      assign_box( r, -std::interval<T>::min() );

============

  Lawrence Crowl             650-786-6146   Sun Microsystems, Inc.
                   Lawrence.Crowl@Sun.com   16 Network Circle, UMPK16-303
           http://www.Crowl.org/Lawrence/   Menlo Park, California, 94025

From george.corliss@marquette.edu Sun Mar  5 15:58:58 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k25Nwvjd013951
	for <std-interval@compgeom.poly.edu>; Sun, 5 Mar 2006 15:58:58 -0800
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 5 Mar 2006 15:56:12 -0600
Received: from 65.29.133.38 ([65.29.133.38]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Sun,  5 Mar 2006 21:56:10 +0000
User-Agent: Microsoft-Entourage/11.2.1.051004
Date: Sun, 05 Mar 2006 15:56:10 -0600
From: George Corliss <George.Corliss@marquette.edu>
To: <std-interval@compgeom.poly.edu>
Message-ID: <C030BA9A.213A%George.Corliss@Marquette.edu>
Thread-Topic: Test compliance?
Thread-Index: AcZAn5y52xCVcaySEdqAUQAKlZKJfg==
Mime-version: 1.0
Content-type: text/plain;
	charset="ISO-8859-1"
X-OriginalArrivalTime: 05 Mar 2006 21:56:12.0491 (UTC)
	FILETIME=[9E3551B0:01C6409F]
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k25Nwvjd013951
cc: ISL List <isl@interval.louisiana.edu>
Subject: [std-interval] Test compliance?
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 05 Mar 2006 23:58:58 -0000

Guillaume, Hervé, Sylvain,

Is there, or is there a plan for, a suite a program to check compliance with
the proposed C++ interval standard?

It would seem that such a suite might serve several functions:

1.  Writing careful test cases might uncover weaknesses in the proposal.

2.  If the proposal and the test suite agree, reading the code in the test
suite may help some people understand what is the intent of the standard.
If so, the intent of the standard might benefit from clarification.

3.  One way to produce multiple reference implementations of the standard
quickly is to write wrappers for existing packages so that they can support
standard-compliant programs with zero modification to existing packages.
One would like to check the resulting wrapper plus underlying package for
compliance with the standard.


If there is no plan for a compliance checker, I'd volunteer to work on one.
Volunteers to work with me are MOST welcome.

I have a framework I used to check arithmetic operations and elementary
functions in COSY and INTLAB.  That framework is not in C++, and it is
rather awkward, depending on Maple for after-the-fact result checking, but
it IS a starting point.  I'd guess that authors of existing packages may
have test suites that could be modified to the proposed standard without TOO
much work?

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu



From guillaume.melquiond@ens-lyon.fr Mon Mar  6 14:35:02 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k26MZ2jd017236
	for <std-interval@compgeom.poly.edu>; Mon, 6 Mar 2006 14:35:02 -0800
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 42E2D15B936
	for <std-interval@compgeom.poly.edu>;
	Mon,  6 Mar 2006 21:32:50 +0100 (CET)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 24450-87 for <std-interval@compgeom.poly.edu>;
	Mon, 6 Mar 2006 21:32:49 +0100 (CET)
Received: from vpn-user-204-67.ens-lyon.fr (vpn-user-204-67.ens-lyon.fr
	[140.77.204.67])	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id AF8AD15B914
	for <std-interval@compgeom.poly.edu>;
	Mon,  6 Mar 2006 21:32:49 +0100 (CET)
Subject: Re: [std-interval] Test compliance?
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <C030BA9A.213A%George.Corliss@Marquette.edu>
References: <C030BA9A.213A%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1
Date: Mon, 06 Mar 2006 21:32:39 +0100
Message-Id: <1141677159.3950.105.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 06 Mar 2006 22:35:02 -0000

Le dimanche 05 mars 2006 à 15:56 -0600, George Corliss a écrit :
> Guillaume, Hervé, Sylvain,
> 
> Is there, or is there a plan for, a suite a program to check compliance with
> the proposed C++ interval standard?

None that I know of.

> It would seem that such a suite might serve several functions:
> 
> 1.  Writing careful test cases might uncover weaknesses in the proposal.
> 
> 2.  If the proposal and the test suite agree, reading the code in the test
> suite may help some people understand what is the intent of the standard.
> If so, the intent of the standard might benefit from clarification.
> 
> 3.  One way to produce multiple reference implementations of the standard
> quickly is to write wrappers for existing packages so that they can support
> standard-compliant programs with zero modification to existing packages.
> One would like to check the resulting wrapper plus underlying package for
> compliance with the standard.

This third point seems interesting to me the other way around too. Such
a suite would indeed provide a tool for testing a common subset of any
existing interval package. The only work would be in writing a (cheap)
wrapper. This would be great.

Best regards,

Guillaume

From guillaume.melquiond@ens-lyon.fr Mon Mar  6 14:35:05 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k26MZ5jd017240
	for <std-interval@compgeom.poly.edu>; Mon, 6 Mar 2006 14:35:05 -0800
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 9A13615B939
	for <std-interval@compgeom.poly.edu>;
	Mon,  6 Mar 2006 21:32:53 +0100 (CET)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 24450-88 for <std-interval@compgeom.poly.edu>;
	Mon, 6 Mar 2006 21:32:53 +0100 (CET)
Received: from vpn-user-204-67.ens-lyon.fr (vpn-user-204-67.ens-lyon.fr
	[140.77.204.67])	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id D953D15B936
	for <std-interval@compgeom.poly.edu>;
	Mon,  6 Mar 2006 21:32:52 +0100 (CET)
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <200603030109.k2319Fbd012674@philmont.sfbay.sun.com>
References: <200603030109.k2319Fbd012674@philmont.sfbay.sun.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Mon, 06 Mar 2006 21:32:41 +0100
Message-Id: <1141677162.3950.106.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
Subject: [std-interval] Re: winter 2006 draft for standard C++ intervals
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 06 Mar 2006 22:35:06 -0000

Thanks a lot for your comments.

Le jeudi 02 mars 2006 à 17:09 -0800, Lawrence.Crowl@sun.com a écrit :

> Should intervals be passed by value or by reference?
> 
>    I strongly prefer the pass-by-value approach over the legacy
>    pass-by-reference approach of std::complex.  The choice has
>    implications beyond the efficiency of the interval operations
>    because users will tend to copy the style of the standard.  This
>    pass-by-reference style leads to inefficiency and incorrectness.
> 
>    "Changing [interval parameters from pass-by-reference] to pass by
>    value would only penalize the other ABIs."
> 
>    What evidence do you have to support this claim?

I didn't write this sentence (or at least I don't think so), so I can't
tell what its author meant. But as I understand it, it just means that
an ABI that prefers pass-by-value will not be more penalized than it
already is with std::complex (since both types have the same memory
layout and std::complex is passed by reference), while an ABI that
prefers pass-by-reference will be more penalized than it is with
std::complex when passing by value.

>    "Note that this point is moot when functions are inline, which is
>    expected to be the case most of the time."
> 
>    This statement is entirely untrue for the simple implementations.

By the time interval arithmetic is in the Standard (if it ever is), I
expect the compilers to be able to make this statement holds true, since
inlining is such a strong requirement in C++. But I am perhaps giving
too much credit to compiler writers.

>    This issue is very important.

Agreed. In my opinion, the interval class should indicate (by a typedef
member for example) which parameter-passing convention it uses, so that
it can be left undecided in the Standard. As a consequence, an
implementation would always be optimal yet standardized. No architecture
would be penalized by the passing conventions of its ABI. But I fear
this additional layer of complexity would raise the bar even higher in
order for the proposal to be accepted.

I know some other C++ specialists are subscribed to this mailing-list.
So I would be happy to hear their opinions on a Standard-compliant
parameter-passing convention the interval class should use.

> 26.6 Interval Numbers
> 
>    Paragraph 2 has a stale reference to interval<bool>.

I did some wild cutting in our draft, in order to get this version out
and the ball rolling. So I am not surprised I missed some references to
interval<bool> :-).

> 26.6.1 Header <interval> synopsis // values:
> 
>    Several of the free functions seem more natural to me as member
>    functions.  They are inf, sup, midpoint, and width.

There is an inconvenience with such member functions: you can't use them
in template algorithms that expects a "UnaryFunction" argument. This is
one of the concepts of the STL and the C++ language cannot use member
functions in these places unfortunately. By providing these functions as
free functions, the user can for example type

  std::transform(vec1.begin(), vec1.end(), vec2.begin(), midpoint);

in order to compute the vector of midpoints of a vector of intervals.

> 26.6.1 Header <interval> synopsis // set operations:
> 
>    These operations seem much more natural to me as member functions.
>    Consider:
> 
>       if ( contains( a, b ) )
> 
>    versus
> 
>       if ( a.contains(b) )

Agreed, the member function syntax is nicer. But for the same reason as
before, this prevents "contains" from being directly used with
algorithms that expect "BinaryFunction" or "BinaryPredicate" arguments.

>    or more signficiantly
> 
>       a = intersect( hull( a, b ), c );
> 
>    versus
> 
>       a = a.hull(b).intersect(c);

On the previous examples, I agree that the member function syntax looked
nicer and more natural. But on this example I disagree. Such a syntax is
tied to a different semantic in my opinion. If I read "a.hull(b)", I
expect the interval stored in "a" to be modified by adding "b". The
syntax is too close from "a += b" to have the semantic of "a + b".

> 26.6.11 interval static value operations
> 
>    Based on the example in VI.1, you also need
> 
>       interval<T> interval<T>::epsilon()
>          { return interval( -std::numeric_limits<T>::min(), 
>                              std::numeric_limits<T>::min() ); }

I suppose this one could be mathematically defined as the tightest
representable interval such that it contains zero yet zero is not a
bound. Is epsilon a suitable name?

>    And based on the example in VI.2, you also need
> 
>       interval<T> interval<T>::min()
>          { return interval( std::numeric_limits<T>::min(), 
>                             std::numeric_limits<T>::min() ); }

I cannot find a concise mathematical definition for this interval. Are
there practical uses for it?

On this subject, are there other interval constants that people feel
useful?

Best regards,

Guillaume


From george.corliss@marquette.edu Mon Apr  3 20:06:24 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3436Ojd005451
	for <std-interval@compgeom.poly.edu>; Mon, 3 Apr 2006 20:06:24 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Mon, 3 Apr 2006 20:13:46 -0500
Received: from 65.29.133.38 ([65.29.133.38]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Tue,  4 Apr 2006 01:13:46 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Mon, 03 Apr 2006 20:13:45 -0500
From: George Corliss <George.Corliss@marquette.edu>
To: <std-interval@compgeom.poly.edu>
Message-ID: <C0573279.37DC%George.Corliss@Marquette.edu>
Thread-Topic: C++ interval std
Thread-Index: AcZXhQTVQ6J6WsN4EdqUwQAKlZKJfg==
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 04 Apr 2006 01:13:46.0981 (UTC)
	FILETIME=[0603B150:01C65785]
Subject: [std-interval] C++ interval std
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 04 Apr 2006 03:06:24 -0000

FYI:

Wednesday, March 29, Sun Microsystems
Ned Nedialkov and I (George Corliss)  with quite a few Sun people.
Here is my visit report:


C++ compiler developers:
Steve Clamage <Stephen.Clamage@Sun.com>
Lawrence Crowl <Lawrence.Crowl@Sun.com>

Steve and Lawrence are both members of the C++ Committee (J16),
representing Sun. Steve is the chair of J16.  It was Lawrence
who wrote the comment to the this group in early March about
passing by value.

The discussion was quite wide ranging, but here are some points.

The standards committee is also considering user-defined literals.
If they adopt something there, we can probably use whatever is
adopted for our problems of literals in an interval context.

Sun has an open source release of its interval elementary functions,
so the barrier to entry is low.  That means we CAN require math.h
functions be provided in an interval standard.

Lawrence feels strongly that the standard should be to pass by
value.  Intervals are small data structures; by value allows them
to be passed in registers for speed.  That is how the current Sun
C++ compiler works.  There is no reason to follow the C++ complex
standard.  The library is often taken as an example by coders, and
there is no good reason to follow the tradition of C from 20 years
ago that structures should be passed by reference.

Infinities, etc.  Define mathematically what you must contain, and
permit as much implementation creativity as you can.

At this point, correctness is MUCH more important than speed.  When
people start demanding intervals be fast, we'll know we've won.
Having tests in each operation is not a problem.

Uninitialized.  The convention in C/C++ is to initialize to zero,
but we agree that is not correct for intervals.  Whole is probably
the best we can do.  Aside: The next day, we visited Berkeley and
talked with Jim Demmel and Bill Kahan.  Among other things, Kahan
wants user-defined data types to be tagged.  If we have the
Kahan-suggested tag, we can tag intervals as Uninitialized.

The 1999 C standard provides for access to IEEE hardware.  The
next version of the C++ standard will also address features new
in the 1999 C standard to be included in C++.

The current C++ standard does not discuss or acknowledge threads.
They are working on the next revision of the standard, which will
have something to say about threads in the language proper and in
the standard library.  Probably the interval standard should say,
"Intervals will be implemented in a thread-safe manner."

What it really takes to sell intervals to the standard committee
is evidence of users, together with broad agreement from the
domain experts.  I'll contact Siegfried to see what he knows about
numbers of users of his packages.  At some point, an open letter
to the standards committee with 100 signatures from the interval
community would help.

A freely available reference implementation is necessary.

Evidence of widespread teaching of intervals will help.



IEEE 754R
David Hough <David.Hough@Sun.com>

IEEE 754R is nearly over.  It is likely to include
   Decimal formats for floating point
       (Should C++ IA standard permit decimal intervals?)
   Quad precision
       (Should C++ IA standard quad intervals?)
   Fused Multiply and Add
       (I assume with directed rounding?
        Great for interval linear algebra, too)
   min/max
       (I wonder how they handle NaN, infinity, etc.)
   expression evaluation
       (Don't remember what that means)

As far as David is concerned, ISVs (Independent Software Vendors)
drive the market.

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu


From wolff@informatik.uni-wuerzburg.de Tue Apr  4 02:09:52 2006
Received: from mailrelay.rz.uni-wuerzburg.de (wrzx35.rz.uni-wuerzburg.de
	[132.187.3.35])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3499pjd005793
	for <std-interval@compgeom.poly.edu>; Tue, 4 Apr 2006 02:09:52 -0700
Received: from virusscan.mail (mail03.mail [172.25.1.102])
	by mailrelay.mail (Postfix) with ESMTP id 59BECC8E
	for <std-interval@compgeom.poly.edu>;
	Tue,  4 Apr 2006 09:17:18 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1])
	by virusscan.mail (Postfix) with ESMTP id 4D8E6B6E
	for <std-interval@compgeom.poly.edu>;
	Tue,  4 Apr 2006 09:17:18 +0200 (CEST)
Received: from [192.168.178.22] (p5081C99E.dip0.t-ipconnect.de
	[80.129.201.158])
	by mailmaster.uni-wuerzburg.de (Postfix) with ESMTP id C98F41DBB
	for <std-interval@compgeom.poly.edu>;
	Tue,  4 Apr 2006 09:17:12 +0200 (CEST)
Message-ID: <44321D18.90801@informatik.uni-wuerzburg.de>
Date: Tue, 04 Apr 2006 09:15:36 +0200
From: "J. Wolff v. Gudenberg" <wolff@informatik.uni-wuerzburg.de>
User-Agent: Mozilla Thunderbird 1.0.7 (Windows/20050923)
X-Accept-Language: de-DE, de, en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
In-Reply-To: <C0573279.37DC%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Virus-Scanned: by amavisd-new at uni-wuerzburg.de
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 04 Apr 2006 09:09:52 -0000

George,
Very interesting indeed. I added a few comments
Juergen

George Corliss schrieb:
> FYI:
> 
> Wednesday, March 29, Sun Microsystems
> Ned Nedialkov and I (George Corliss)  with quite a few Sun people.
> Here is my visit report:
> 
> 
> C++ compiler developers:
> Steve Clamage <Stephen.Clamage@Sun.com>
> Lawrence Crowl <Lawrence.Crowl@Sun.com>
> 
> Steve and Lawrence are both members of the C++ Committee (J16),
> representing Sun. Steve is the chair of J16.  It was Lawrence
> who wrote the comment to the this group in early March about
> passing by value.
> 
> The discussion was quite wide ranging, but here are some points.
> 
> The standards committee is also considering user-defined literals.
> If they adopt something there, we can probably use whatever is
> adopted for our problems of literals in an interval context.
> 
> Sun has an open source release of its interval elementary functions,
> so the barrier to entry is low.  That means we CAN require math.h
> functions be provided in an interval standard.

We SHOULD do this, but perhaps not with last bit accuracy.
filib provides another open source implementation with guaranteed bounds
> 
> Lawrence feels strongly that the standard should be to pass by
> value.  Intervals are small data structures; by value allows them
> to be passed in registers for speed.  That is how the current Sun
> C++ compiler works.  There is no reason to follow the C++ complex
> standard.  The library is often taken as an example by coders, and
> there is no good reason to follow the tradition of C from 20 years
> ago that structures should be passed by reference.

I fully agree
> 
> I
> IEEE 754R
> David Hough <David.Hough@Sun.com>
> 
> IEEE 754R is nearly over.  It is likely to include
>    Decimal formats for floating point
>        (Should C++ IA standard permit decimal intervals?)
>  
   Quad precision
>        (Should C++ IA standard quad intervals?)
basic arithmetic operations should work via template instantiation.
of course that does not hold for elementary functions
>    Fused Multiply and Add
>        (I assume with directed rounding?
>         Great for interval linear algebra, too)
>    min/max
>        (I wonder how they handle NaN, infinity, etc.)
>    expression evaluation
>        (Don't remember what that means)

perhaps the distinction of interval constants and variables with some 
possible preprocessing, such that x-x = 0 ??

> Dr. George F. Corliss
> Electrical and Computer Engineering
> Marquette University
> PO Box 1881 
> 1515 W. Wisconsin Ave.
> Milwaukee WI 53201-1881 USA
> 414-288-6599; Fax: 288-5579; Dept. 288-6280
> Office: Haggerty Engineering 296
> George.Corliss@Marquette.edu
> 
> 
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval
From Sylvain.Pion@sophia.inria.fr Tue Apr  4 04:04:36 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k34B4ajd006354
	for <std-interval@compgeom.poly.edu>; Tue, 4 Apr 2006 04:04:36 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k349C0MF032317
	for <std-interval@compgeom.poly.edu>; Tue, 4 Apr 2006 11:12:04 +0200
Received: from [193.16.179.143] ([193.16.179.143])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k349BtGf032252
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Tue, 4 Apr 2006 11:11:57 +0200
Message-ID: <4432385E.4050805@sophia.inria.fr>
Date: Tue, 04 Apr 2006 11:11:58 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
In-Reply-To: <C0573279.37DC%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Tue, 04 Apr 2006
	11:11:58 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 04 Apr 2006 11:04:37 -0000

George Corliss wrote:
> FYI:
> 
> Wednesday, March 29, Sun Microsystems
> Ned Nedialkov and I (George Corliss)  with quite a few Sun people.
> Here is my visit report:

Thanks for the report.

> C++ compiler developers:
> Steve Clamage <Stephen.Clamage@Sun.com>
> Lawrence Crowl <Lawrence.Crowl@Sun.com>
> 
> Steve and Lawrence are both members of the C++ Committee (J16),
> representing Sun. Steve is the chair of J16.  It was Lawrence
> who wrote the comment to the this group in early March about
> passing by value.

Note that I am attending the ISO C++ meeting this week in Berlin,
so I will have the opportunity to present the status (briefly, as
I don't think we are ready to show a concrete update adressing all
the comments), and discuss with Lawrence and Steve.

> The discussion was quite wide ranging, but here are some points.
> 
> The standards committee is also considering user-defined literals.
> If they adopt something there, we can probably use whatever is
> adopted for our problems of literals in an interval context.
> 
> Sun has an open source release of its interval elementary functions,
> so the barrier to entry is low.  That means we CAN require math.h
> functions be provided in an interval standard.

There are also other open source implementations available.
However, at the presentation in Mont-Tremblant, the committee was
a bit reluctant to add more "complicated numeric functions" to
the standard, because there was other proposals with such a common
theme.  So the question might boild down to whether we prefer to
have nothing or an incomplete library.

I however agree that this would make the proposal attractive to more
users, and that the more complete implementation based on existing
codes is probably not that hard.

> Lawrence feels strongly that the standard should be to pass by
> value.  Intervals are small data structures; by value allows them
> to be passed in registers for speed.  That is how the current Sun
> C++ compiler works.  There is no reason to follow the C++ complex
> standard.  The library is often taken as an example by coders, and
> there is no good reason to follow the tradition of C from 20 years
> ago that structures should be passed by reference.

I don't have any strong opinion on this.
I only did a very local experiment on some code of mine on x86, and
changing to pass-by-value slowed the code down a bit.
I am ready to follow any recommendation from the commitee on this.
I tend to think that there should be a general policy for the standard
library, otherwise I fear that the library might become inconsistent
in that respect.


> Infinities, etc.  Define mathematically what you must contain, and
> permit as much implementation creativity as you can.
> 
> At this point, correctness is MUCH more important than speed.  When
> people start demanding intervals be fast, we'll know we've won.
> Having tests in each operation is not a problem.

Well, if we're arguing that passsing-by-value is fundamentally important
for speed, and that adding a few more tests is not because speed is less
important... ;)

It's important to get the semantics that most people want first,
I agree.

> Uninitialized.  The convention in C/C++ is to initialize to zero,
> but we agree that is not correct for intervals.  Whole is probably
> the best we can do.

I'm not convinced.  Initilization to [0,0] seems nice to me for
intervals because of homogeneity reasons with floating-point.
I could even imagine that the empty interval would make as much
sense as whole.

What makes you think that [0,0] is "not correct", and why 'whole'
would be better than 'empty' ?

 >  Aside: The next day, we visited Berkeley and
> talked with Jim Demmel and Bill Kahan.  Among other things, Kahan
> wants user-defined data types to be tagged.  If we have the
> Kahan-suggested tag, we can tag intervals as Uninitialized.

Could you elaborate on this tag ?  What would it do ?
Would this be a run-time feature of the objects telling if
they are initialized or not ?  Can't this be left to some
"debug mode" ?

> The 1999 C standard provides for access to IEEE hardware.  The
> next version of the C++ standard will also address features new
> in the 1999 C standard to be included in C++.
> 
> The current C++ standard does not discuss or acknowledge threads.
> They are working on the next revision of the standard, which will
> have something to say about threads in the language proper and in
> the standard library.  Probably the interval standard should say,
> "Intervals will be implemented in a thread-safe manner."

I guess this will have to be true for the whole standard library,
or almost all, so I don't think we should worry specifically about
this at the interval level, other than stating this requirement.

> What it really takes to sell intervals to the standard committee
> is evidence of users, together with broad agreement from the
> domain experts.  I'll contact Siegfried to see what he knows about
> numbers of users of his packages.  At some point, an open letter
> to the standards committee with 100 signatures from the interval
> community would help.

The web-survey we are conducting has already been able to collect
some informations for this purpose.  I hope Herve will be able to
produce a summary soon.

> A freely available reference implementation is necessary.

We have already a preliminary one, but it should be improved
and updated.  We (Herve, Guillaume and myself) are lacking time
for this, so we should organize a bit more with other volunteers.

> Evidence of widespread teaching of intervals will help.

> 
> 
> IEEE 754R
> David Hough <David.Hough@Sun.com>
> 
> IEEE 754R is nearly over.  It is likely to include
>    Decimal formats for floating point
>        (Should C++ IA standard permit decimal intervals?)

We have explicitly asked this question (at the Mont-Tremblant meeting)
to the IBM representant supporting the decimal floating-point proposal.
He agreed that, at least currently, there is no need for this
compatibility as the corresponding user communities targetted are
a priori separate.

>    Quad precision
>        (Should C++ IA standard quad intervals?)

I would say that it depends if quads appear in the C++ language
(or is this supposed to be the already existing "long double" ?).
But if they appear, probably support for interval<quads> should
be added, yes.

>    Fused Multiply and Add
>        (I assume with directed rounding?
>         Great for interval linear algebra, too)

I guess it also depends if there appears a function for doing fma
on floating-point types in C++, in which case a natural overload
for intervals would be nice and natural.

>    min/max
>        (I wonder how they handle NaN, infinity, etc.)
>    expression evaluation
>        (Don't remember what that means)
> 
> As far as David is concerned, ISVs (Independent Software Vendors)
> drive the market.

More generally, since IEEE754R will most probably be released before
C++0x, it would be nice if C++0x would take it into account.

-- 
Sylvain
From crowl@philmont.sfbay.sun.com Tue Apr  4 05:26:35 2006
Received: from brmea-mail-1.sun.com (brmea-mail-1.Sun.COM [192.18.98.31])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k34CQZjd006482
	for <std-interval@compgeom.poly.edu>; Tue, 4 Apr 2006 05:26:35 -0700
Received: from sfbaymail1sca.SFBay.Sun.COM ([129.145.154.35])
	by brmea-mail-1.sun.com (8.12.10/8.12.9) with ESMTP id k34AXrSD018893
	for <std-interval@compgeom.poly.edu>;
	Tue, 4 Apr 2006 04:33:54 -0600 (MDT)
Received: from philmont.sfbay.sun.com (philmont.SFBay.Sun.COM
	[129.146.86.162])with ESMTP id k34AXrEZ009035
	for <std-interval@compgeom.poly.edu>;
	Tue, 4 Apr 2006 03:33:53 -0700 (PDT)
Received: from philmont (localhost [127.0.0.1])k34AXrbd008489
	for <std-interval@compgeom.poly.edu>;
	Tue, 4 Apr 2006 03:33:53 -0700 (PDT)
Message-Id: <200604041033.k34AXrbd008489@philmont.sfbay.sun.com>
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std 
From: Lawrence.Crowl@Sun.com
In-reply-to: Your message of Tue, 04 Apr 2006 11:11:58 +0200.
             <4432385E.4050805@sophia.inria.fr> 
Date: Tue, 04 Apr 2006 03:33:53 -0700
Sender: crowl@philmont.sfbay.sun.com
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence.Crowl@Sun.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 04 Apr 2006 12:26:36 -0000

Sylvain Pion <Sylvain.Pion@sophia.inria.fr> writes:
 >Well, if we're arguing that passsing-by-value is fundamentally important
 >for speed, and that adding a few more tests is not because speed is less
 >important... ;)

Pass-by-value is also a correctness issue.

 >> Uninitialized.  The convention in C/C++ is to initialize to zero,
 >> but we agree that is not correct for intervals.  Whole is probably
 >> the best we can do.
 >
 >I'm not convinced.  Initilization to [0,0] seems nice to me for
 >intervals because of homogeneity reasons with floating-point.
 >I could even imagine that the empty interval would make as much
 >sense as whole.
 >
 >What makes you think that [0,0] is "not correct", and why 'whole'
 >would be better than 'empty' ?

Note that on modern systems, initialization to [0,0] is more efficient.

 >>    Quad precision
 >>        (Should C++ IA standard quad intervals?)
 >
 >I would say that it depends if quads appear in the C++ language
 >(or is this supposed to be the already existing "long double" ?).
 >But if they appear, probably support for interval<quads> should
 >be added, yes.

The meaning of long double is implementation-dependent.  On Solaris
SPARC, it is 128 bits.  On Solaris x86, it is 80 bits.

 >More generally, since IEEE754R will most probably be released before
 >C++0x, it would be nice if C++0x would take it into account.

An explicit mention of IEEE754R in the C++ standard will require a
paper.

  Lawrence Crowl             650-786-6146   Sun Microsystems, Inc.
                   Lawrence.Crowl@Sun.com   16 Network Circle, UMPK16-303
           http://www.Crowl.org/Lawrence/   Menlo Park, California, 94025
From george.corliss@marquette.edu Tue Apr  4 20:49:19 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k353nJjd007576
	for <std-interval@compgeom.poly.edu>; Tue, 4 Apr 2006 20:49:19 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Tue, 4 Apr 2006 20:57:04 -0500
Received: from 65.29.133.38 ([65.29.133.38]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Wed,  5 Apr 2006 01:57:03 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Tue, 04 Apr 2006 20:57:00 -0500
Subject: Re: [std-interval] C++ interval std
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C0588E1C.38EC%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] C++ interval std
Thread-Index: AcZYVDn8eJmQesRHEdqglwAKlZKJfg==
In-Reply-To: <4432385E.4050805@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 05 Apr 2006 01:57:04.0069 (UTC)
	FILETIME=[3C699F50:01C65854]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 03:49:20 -0000

Sylvain Pion wrote:
>> Steve and Lawrence are both members of the C++ Committee (J16),
>> representing Sun. Steve is the chair of J16.  It was Lawrence
>> who wrote the comment to the this group in early March about
>> passing by value.
> 
> Note that I am attending the ISO C++ meeting this week in Berlin,
> so I will have the opportunity to present the status (briefly, as
> I don't think we are ready to show a concrete update adressing all
> the comments), and discuss with Lawrence and Steve.
Understood.  I hope that as soon as you have an updated draft of the
proposal, you'll let us all know.

>> Sun has an open source release of its interval elementary functions,
>> so the barrier to entry is low.  That means we CAN require math.h
>> functions be provided in an interval standard.
> 
> There are also other open source implementations available.
> However, at the presentation in Mont-Tremblant, the committee was
> a bit reluctant to add more "complicated numeric functions" to
> the standard, because there was other proposals with such a common
> theme.  So the question might boild down to whether we prefer to
> have nothing or an incomplete library.
> 
> I however agree that this would make the proposal attractive to more
> users, and that the more complete implementation based on existing
> codes is probably not that hard.
Since there are AT LEAST two implementations of elementary functions
available, I favor asking that they be included in the standard, unless the
committee balks.

>> Infinities, etc.  Define mathematically what you must contain, and
>> permit as much implementation creativity as you can.
>> 
>> At this point, correctness is MUCH more important than speed.  When
>> people start demanding intervals be fast, we'll know we've won.
>> Having tests in each operation is not a problem.
> 
> Well, if we're arguing that passsing-by-value is fundamentally important
> for speed, and that adding a few more tests is not because speed is less
> important... ;)
> 
> It's important to get the semantics that most people want first,
> I agree.
Pass by value vs. pass by reference is an issue of speed and flexibility, as
I understand it.  There is no question of tightness.

Several of the possible choices about infinities, for example, give
enclosures in a wider set of cases, at the expense of additional tests.
There, I argue that we MUST get enclosures (I hear no opposition to that),
we SHOULD get them in as wide a set of circumstances as possible
(alternative being some form of "I can't," such as an exception or some form
of NaN), and we should get as tight as we can (but that's a Quality of
Implementation issue.

>> Uninitialized.  The convention in C/C++ is to initialize to zero,
>> but we agree that is not correct for intervals.  Whole is probably
>> the best we can do.
> 
> I'm not convinced.  Initilization to [0,0] seems nice to me for
> intervals because of homogeneity reasons with floating-point.
> I could even imagine that the empty interval would make as much
> sense as whole.
> 
> What makes you think that [0,0] is "not correct", and why 'whole'
> would be better than 'empty' ?
I agree that initialization of uninitialized intervals to [0,0] is easy, and
it is consistent with floating-point practice.  My reservation is that it
can lead to violations of containment.

The issue is not with "our" code.  It is with users' code.  Floating-point
arithmetic makes no promises of accuracy.  Intervals promise a guaranteed
enclosure.  If a user mis-uses our tools and gets a violation of
containment, WE will be blamed, not the programmer who forgot to initialize
all variables.  I want to make it as difficult as possible for even
incorrect code to lie.

Simple example:
   interval Pi;
   cout << "Pi is enclosed by " << Pi;

The result violates containment if the default initializer is either [0, 0]
or Empty.  It is truthful if the initializer is Whole.

Of course, no one would do that on purpose, but programmers DO sometimes use
variables they have not initialized.

One easy-to-imagine case might define a variable by a complicated set of
nested cases/ifs.  The programmer thinks all possible cases are covered, but
misses one case.  In that case, the variable is not given a value, but the
following code uses it, unaware that it might not have been assigned a valid
value.

Asserting that a set is empty is perhaps the strongest assertion one can
make about a set.  Asserting that it is contained in the universal set is
the weakest assertion one can make.  That is why I argue for Whole.

I'd like to have some special "undefined" value that would propagate like a
NaN, but that is too much to ask for.  Whole does not lie.

A Tag (see below) could be used for exactly that purpose.

>>  Aside: The next day, we visited Berkeley and
>> talked with Jim Demmel and Bill Kahan.  Among other things, Kahan
>> wants user-defined data types to be tagged.  If we have the
>> Kahan-suggested tag, we can tag intervals as Uninitialized.
> 
> Could you elaborate on this tag ?  What would it do ?
> Would this be a run-time feature of the objects telling if
> they are initialized or not ?  Can't this be left to some
> "debug mode" ?
Let me explain Kahan's reasoning, as well as I am able.

The request is that a tag be permitted by the standard.  As I understand it,
what would be required is to remove the phrase that an interval is
represented by two values.  The down side, of course, is that it is harder
to know how much memory an interval may require.

If we are permitted a tag, the tag can be used in MANY different ways within
an implementation.  The tag could be an attribute, or it could be a pointer
to a complicated internal data structure of properties of the interval.  The
most extreme case I can think of is that the tag might point to the Abstract
Syntax Tree that generated the interval, allowing run-time symbolic
processing.

In most implementations I can imagine, the tag could be used for
"uninitialized," "exterior interval," various flavors of NaN, precision in a
multiple precision implementation, and the like.  If we want a (center,
radius) implementation, a tag could distinguish semi-infinite intervals, or
it could distinguish [lo, hi] from (center, radius) intervals.

The proposed standard is 1-D, where boxes and ellipses are the same (finite)
sets, but if we want to build higher-dimensional Interval, we might consider
subclasses Box and Ellipse, although polymorphism handles that without
explicit tags.  Hmmmm.  That suggests that C++ run-time types form a sort of
tag.

>> The 1999 C standard provides for access to IEEE hardware.  The
>> next version of the C++ standard will also address features new
>> in the 1999 C standard to be included in C++.
>> 
>> The current C++ standard does not discuss or acknowledge threads.
>> They are working on the next revision of the standard, which will
>> have something to say about threads in the language proper and in
>> the standard library.  Probably the interval standard should say,
>> "Intervals will be implemented in a thread-safe manner."
> 
> I guess this will have to be true for the whole standard library,
> or almost all, so I don't think we should worry specifically about
> this at the interval level, other than stating this requirement.
Agreed.

>> IEEE 754R
>> David Hough <David.Hough@Sun.com>
>> 
>> IEEE 754R is nearly over.  It is likely to include
>>    Decimal formats for floating point
>>        (Should C++ IA standard permit decimal intervals?)
> 
> We have explicitly asked this question (at the Mont-Tremblant meeting)
> to the IBM representant supporting the decimal floating-point proposal.
> He agreed that, at least currently, there is no need for this
> compatibility as the corresponding user communities targeted are
> a priori separate.
As I read it, there is nothing to prevent someone from offering additional
base types, including decimal or multiple precision?  Technically, they
would not be standard-conforming, but they could conform to the spirit.

>>    Fused Multiply and Add
>>        (I assume with directed rounding?
>>         Great for interval linear algebra, too)
> 
> I guess it also depends if there appears a function for doing fma
> on floating-point types in C++, in which case a natural overload
> for intervals would be nice and natural.
The benefit to intervals is clearer at the vector level, which the proposed
standard does not consider.  My observation is that a dot product is easier,
tighter, or faster with a directed rounding FMA.

>>    min/max
>>        (I wonder how they handle NaN, infinity, etc.)
>>    expression evaluation
>>        (Don't remember what that means)
>> 
>> As far as David is concerned, ISVs (Independent Software Vendors)
>> drive the market.
> 
> More generally, since IEEE754R will most probably be released before
> C++0x, it would be nice if C++0x would take it into account.
Yes, probably.

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu


From george.corliss@marquette.edu Tue Apr  4 20:53:08 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k353r8jd007592
	for <std-interval@compgeom.poly.edu>; Tue, 4 Apr 2006 20:53:08 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Tue, 4 Apr 2006 21:00:53 -0500
Received: from 65.29.133.38 ([65.29.133.38]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Wed,  5 Apr 2006 02:00:53 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Tue, 04 Apr 2006 21:00:50 -0500
Subject: Re: [std-interval] C++ interval std 
From: George Corliss <George.Corliss@marquette.edu>
To: "Lawrence.Crowl@Sun.com, For discussions concerning the C++
 standardization of intervals" <std-interval@compgeom.poly.edu>
Message-ID: <C0588F02.38F1%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] C++ interval std 
Thread-Index: AcZYVMMTAZN1JcRIEdqglwAKlZKJfg==
In-Reply-To: <200604041033.k34AXrbd008489@philmont.sfbay.sun.com>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 05 Apr 2006 02:00:53.0378 (UTC)
	FILETIME=[C5176620:01C65854]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 03:53:08 -0000

Lawrence Crowl writes:
>> Well, if we're arguing that passsing-by-value is fundamentally important
>> for speed, and that adding a few more tests is not because speed is less
>> important... ;)
> Pass-by-value is also a correctness issue.
Opps.  I missed that point.

>>> Uninitialized.  The convention in C/C++ is to initialize to zero,
>>> but we agree that is not correct for intervals.  Whole is probably
>>> the best we can do.
>> 
>> I'm not convinced.  Initilization to [0,0] seems nice to me for
>> intervals because of homogeneity reasons with floating-point.
>> I could even imagine that the empty interval would make as much
>> sense as whole.
>> 
>> What makes you think that [0,0] is "not correct", and why 'whole'
>> would be better than 'empty' ?
> 
> Note that on modern systems, initialization to [0,0] is more efficient.
That may be, but I maintain Whole is most faithful to "Thou shalt not lie."

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu


From eliasen@mindspring.com Wed Apr  5 00:12:49 2006
Received: from elasmtp-banded.atl.sa.earthlink.net
	(elasmtp-banded.atl.sa.earthlink.net [209.86.89.70])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k357Cnjd007783
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 00:12:49 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=B300tu7jGaOxYvu35cAZuMw85NeNAaBQ89OI62+BT6JqfyHMwz11r0vh8ZoQJuOi;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [68.165.133.132] (helo=[192.168.1.103])
	by elasmtp-banded.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1FR0RW-0001Rq-Pb
	for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 01:20:35 -0400
Message-ID: <4433539B.5000604@mindspring.com>
Date: Tue, 04 Apr 2006 23:20:27 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr>
In-Reply-To: <4432385E.4050805@sophia.inria.fr>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45073e1b0b071585356e68f49b43b5e18283350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 68.165.133.132
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 07:12:49 -0000


George Corliss wrote:
>> Lawrence feels strongly that the standard should be to pass by
>> value.  Intervals are small data structures; by value allows them
>> to be passed in registers for speed.  That is how the current Sun
>> C++ compiler works.  There is no reason to follow the C++ complex
>> standard.  The library is often taken as an example by coders, and
>> there is no good reason to follow the tradition of C from 20 years
>> ago that structures should be passed by reference.

Sylvain Pion wrote:
> I don't have any strong opinion on this.
> I only did a very local experiment on some code of mine on x86, and
> changing to pass-by-value slowed the code down a bit.

   I was curious to see about the speed difference between passing by
value and passing by reference, because passing by value always has been
slower and always *has* to be slower because it (unnecessarily) creates
a copy of the object when passed in.  I tried three ways on x86_64, gcc
3.4.4, linux:

No optimization:
addByValue:     2230000 ticks
addByRef:       1850000 ticks
addByConstRef:  1880000 ticks

-O:
addByValue:     870000 ticks
addByRef:       550000 ticks
addByConstRef:  510000 ticks

-O2:
addByValue:     720000 ticks
addByRef:       410000 ticks
addByConstRef:  440000 ticks

-O3:
addByValue:     1110000 ticks
addByRef:       600000 ticks
addByConstRef:  610000 ticks

   There's a bit of noise in the numbers, but passing by value is always
significantly slower.  These tests were run repeatedly and the
proportions are always the same.  -O3 is actually consistently slower,
which shouldn't surprise anyone who has worked with performance tuning
in gcc.  It usually is.

   Also ran on x86 Windows.  Pattern was the same.  With -O2, passing by
value took about 2.6 times as long!

   I didn't test passing by pointer, but I can.

   Passing in unmodifiable objects as constant references when
appropriate both obviates the need for copying and gives explicit
const-correctness from the start.  We don't have to worry about
dereferencing pointers or memory ownership issues.  It's indeed the
pattern followed by most modern libraries.

   To the caller of the functions, it just looks like an ordinary
pass-by-value, but is faster, and allows the compiler to catch a lot of
types of problems.

   I recommend that for long-term performance and const-correctness,
that objects be passed as constant references when possible.

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From llib@computer.org Wed Apr  5 01:20:24 2006
Received: from anumail3.anu.edu.au (anumail3.anu.edu.au [150.203.2.43])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k358KNjd007850
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 01:20:23 -0700
Received: from alto.anu.edu.au (alto.anu.edu.au [150.203.163.9])
	by anumail3.anu.edu.au (8.13.6/8.13.6) with ESMTP id k356S1GI024141
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 16:28:03 +1000 (EST)
Received: from [150.203.160.40] (fiordland.anu.edu.au [150.203.160.40])
	by alto.anu.edu.au (8.13.3+Sun/8.13.3) with ESMTP id k356S0iQ012055
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 16:28:01 +1000 (EST)
Message-ID: <44336367.9060400@computer.org>
Date: Wed, 05 Apr 2006 16:27:51 +1000
From: Bill Clarke <llib@computer.org>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US;
	rv:1.7.12) Gecko/20050923 Thunderbird/1.0.7 Mnenhy/0.7.3.0
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
In-Reply-To: <4433539B.5000604@mindspring.com>
X-Enigmail-Version: 0.93.0.0
Content-Type: multipart/signed; micalg=pgp-sha1;
 protocol="application/pgp-signature";
 boundary="------------enig9B510B28404B47FAFAC88CF1"
X-PMX-Version: 4.7.1.128075, Antispam-Engine: 2.3.0.1, Antispam-Data:
	2006.04.04.225109 internal
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 08:20:24 -0000

This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig9B510B28404B47FAFAC88CF1
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Alan Eliasen wrote, On 04/05/06 15:20:
> George Corliss wrote:
>>>Lawrence feels strongly that the standard should be to pass by
>>>value.  Intervals are small data structures; by value allows them
>>>to be passed in registers for speed.
[...]
>    I was curious to see about the speed difference between passing by
> value and passing by reference, because passing by value always has been
> slower and always *has* to be slower because it (unnecessarily) creates
> a copy of the object when passed in.  I tried three ways on x86_64, gcc
> 3.4.4, linux:
[...]
>    To the caller of the functions, it just looks like an ordinary
> pass-by-value, but is faster, and allows the compiler to catch a lot of
> types of problems.
> 
>    I recommend that for long-term performance and const-correctness,
> that objects be passed as constant references when possible.

This experiment is extremely platform specific, as you probably are
aware.  Most platforms in use today other than x86 will be the other way
around (add-by-value will be faster than add-by-const-ref).
(Was this 64-bit code?  I thought x86_64 would be faster with
pass-by-value since I got the impression the ABI passed parameters in
registers)

With inlining then they should be identical (perhaps you could re-run
your experiment with inlining to verify this?).

Surely it is possible to permit the implementer to choose the parameter
passing convention, between pass-by-value and pass-by-const-ref?  It
should have no visible impact on the programmer which is used.

e.g., within interval<T>:
typedef interval<T> param_type;
or
typedef const interval<T>& param_type;

cheers,
/lib
-- 
/lib BillClarke PostdoctoralFellow CompSci ANU cs.anu.edu.au/CC-NUMA
http://llib.cjb.net llib@computer.org  tel:+61-2-6125x5687 fax:x0010
PGPid:B381EE7DB7D3E58F17248C672E2DA124ADADF444 GNU unix LaTeX XPilot
Buffy DrWho Goodies StarTrek XFiles Origami SML SMP MPI mozilla tcsh
Asimov Bear Clarke Donaldson Volleyball Ultimate Cricket emacs C++ X
Jordan Kay Lackey Martin Stasheff DeepPurple H&C KLF Queen PinkFloyd

--------------enig9B510B28404B47FAFAC88CF1
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFEM2NpLi2hJK2t9EQRAn5zAJ45S7Hzm2jGOsBpuR0Na1bKmSt3kACfZOs8
L5u1qdcXzAjuzeHhTLlNNTU=
=ATgL
-----END PGP SIGNATURE-----

--------------enig9B510B28404B47FAFAC88CF1--
From first.i.last@comcast.net Wed Apr  5 01:30:53 2006
Received: from rwcrmhc12.comcast.net (rwcrmhc12.comcast.net [216.148.227.152])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k358Uqjd007870
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 01:30:53 -0700
Received: from rmailcenter79.comcast.net ([204.127.197.179])
          by comcast.net (rwcrmhc12) with SMTP
          id <20060405063829m1200khvf0e>; Wed, 5 Apr 2006 06:38:29 +0000
Received: from [71.192.84.143] by rmailcenter79.comcast.net;
	Wed, 05 Apr 2006 06:38:28 +0000
From: first.i.last@comcast.net
To: std-interval@compgeom.poly.edu
Date: Wed, 05 Apr 2006 06:38:28 +0000
Message-Id: <040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
Subject: [std-interval] Re: Std-interval Digest, Vol 3, Issue 1
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 08:30:53 -0000

 -------------- Original message ----------------------
From: std-interval-request@compgeom.poly.edu
> Send Std-interval mailing list submissions to
> 	std-interval@compgeom.poly.edu
----------------------------------------------------------------------
> 
> Message: 1
> Date: Mon, 03 Apr 2006 20:13:45 -0500
> From: George Corliss <George.Corliss@marquette.edu>
> Subject: [std-interval] C++ interval std
> To: <std-interval@compgeom.poly.edu>
> Message-ID: <C0573279.37DC%George.Corliss@Marquette.edu>
> Content-Type: text/plain;	charset="US-ASCII"
> 

[snip]

> Lawrence feels strongly that the standard should be to pass by
> value.  Intervals are small data structures;

That perspective causes problems, just as it did for complex.  Intervals should be considered atomic types whose internal structure is opaque.  We don't consider fp types as structures even though they consist of three distinct fields (and in fact are treated as separate fields in software implementations of the run-time library).

> by value allows them
> to be passed in registers for speed.  That is how the current Sun
> C++ compiler works.  There is no reason to follow the C++ complex
> standard.  The library is often taken as an example by coders, and
> there is no good reason to follow the tradition of C from 20 years
> ago that structures should be passed by reference.

There may or may not be a good reason for it.  On FPUs with weak connections to the CPU, such as x87, passing by value is strongly preferred.  Yet on FPUs with strong connections to the main CPU passing by reference might be much more efficient.

If the standard syntax is pass by value then a compiler that prefered pass by reference would be free to do so internally (assuming appropriate referential safe guards).

> Uninitialized.  The convention in C/C++ is to initialize to zero,

Not quite.  The default initialization convention in C depends on the lifetime of the object.  Dynamic objects (typically stack and heap) are not initialized at all by default.  Static objects are initialized to zero, but that is not a special property of numerics.  All static objects lacking an initialization expression get a default expression of zero.

Intervals should work the same way.  Anything with an init expression gets it.  Anything without one gets default initialized.  Statics get zero and dynamics don't get touched (c.f. core constants).  Only the latter is a concern, and then only during development/debug.

Typical C programmer rant:  If I _wanted_ it initialized I would have done it _myself_ -- don't slow me down without my permission.

On platforms with NaN support uninitialized FP objects that will be initialized without the programmer's explicit permission should get a characteristic NaN.  On platforms without NaN support they should get HUGE_VAL because that is the standard diagnostic value.

So the default constructor should either use NaN, which would then be an empty interval or HUGE_VAL, which would match the existing standard for "something to think about here".

> but we agree that is not correct for intervals.  Whole is probably
> the best we can do.

Yuck.  Empty is clearly superior to whole in that it has less chance of accidentally producing apparently sensible results.  And for production an uninitialized interval should not be initialized.  After all,  C++ lacks basis support for array initialization so any default initialization effort, like touching every value in a big array, is just wasted time.

>  Aside: The next day, we visited Berkeley and
> talked with Jim Demmel and Bill Kahan.  Among other things, Kahan
> wants user-defined data types to be tagged.  If we have the
> Kahan-suggested tag, we can tag intervals as Uninitialized.

How will uninit tags be handled when they meet other values?  Will they have precedence as NaNs do?  If so then external tags are unnecessarily duplicative of internal values such as a characteristic NaN.

> 
> The 1999 C standard provides for access to IEEE hardware.  The
> next version of the C++ standard will also address features new
> in the 1999 C standard to be included in C++.
> 
> The current C++ standard does not discuss or acknowledge threads.
> They are working on the next revision of the standard, which will
> have something to say about threads in the language proper and in
> the standard library.  Probably the interval standard should say,
> "Intervals will be implemented in a thread-safe manner."

That is a tall order.  Intervals should be thread safe when the underlying language is thread-safe.  Consider errno and matherr() for intervals.

> IEEE 754R is nearly over.  It is likely to include
>    Decimal formats for floating point
>        (Should C++ IA standard permit decimal intervals?)

Of course.  For every floating point type we need a corresponding interval type.  The radix is irrelevant.

>    Quad precision
>        (Should C++ IA standard quad intervals?)

Of course.  For every floating point type we need a corresponding interval type.  The mantissa width is irrelevant.

>    Fused Multiply and Add
>        (I assume with directed rounding?
>         Great for interval linear algebra, too)
>    min/max
>        (I wonder how they handle NaN, infinity, etc.)

In the proposal only NaNs are special.  In min() NaNs are greater than all numbers. In max() NaNs are lesser than all numbers.

>    expression evaluation
>        (Don't remember what that means)

Mainly control over the width or temporaries used during calculation (implict promotion to double or extended double causes problems such as multiple rounding and can be orders of magnitude slower if the wider types are not supported in hardware).

This is a complex area.  There are other aspects under consideration such as programmer control of order of evaluation and programmer permission for various optimization transforms.

_____________________________________________
> > Std-interval mailing list
> > Std-interval@compgeom.poly.edu
> > http://compgeom.poly.edu/mailman/listinfo/std-interval
> 
> ------------------------------
> Message: 3
> Date: Tue, 04 Apr 2006 11:11:58 +0200
> From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <4432385E.4050805@sophia.inria.fr>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed

> George Corliss wrote:
> > Lawrence feels strongly that the standard should be to pass by value.  Intervals are small data structures; by value allows them to be passed in registers for speed.  That is how the current Sun C++ compiler works.  There is no reason to follow the C++ complex standard.  The library is often taken as an example by coders, and there is no good reason to follow the tradition of C from 20 years ago that structures should be passed by reference.
 
> I don't have any strong opinion on this. I only did a very local experiment on some code of mine on x86, and changing to pass-by-value slowed the code down a bit.

Some compilers give the programmer little control over parameter passing.  Others give a great deal of control, including offering both stack and register passing for atomic types, putting small structs in registers, and even hybrids with part in registers and part on the stack.

This matters because the implementor _must_ have the freedom to optimize parameter passing.  So the standard should be as quiet as possible on the issue.  The _syntax_ should be by-value because that imposes the least (i.e., no actual) constraints.  But the code generated could be either at the discretion of the implementor.

The best approach is probably a second set of types that are specifically used for argument passing.  Portable code often uses this approach.  It allows an implementor to alter the parameter passing convention on a platform-by-platform basis.

So non-inline interval functions would take arguments of type IntervalArg<double> from which the function could obtain the actual argument.

> > Uninitialized.  The convention in C/C++ is to initialize to zero,
> > but we agree that is not correct for intervals.  Whole is probably
> > the best we can do.
> 
> I'm not convinced.  Initilization to [0,0] seems nice to me for
> intervals because of homogeneity reasons with floating-point.

But it's not homogeneous except in the case of static variables.  The default constructor simply needs an _isBSS() predicate or something similar to determine whether to initialize the value to binary zero, which might or might not be tge numeric value [0,0], or to leave the value uninitialized.

> I could even imagine that the empty interval would make as much sense as whole.

More IMHO.

>  >  Aside: The next day, we visited Berkeley and
> > talked with Jim Demmel and Bill Kahan.  Among other things, Kahan
> > wants user-defined data types to be tagged.  If we have the
> > Kahan-suggested tag, we can tag intervals as Uninitialized.
> 
> Could you elaborate on this tag ?  What would it do ?
> Would this be a run-time feature of the objects telling if
> they are initialized or not ?  Can't this be left to some
> "debug mode" ?

The concept includes things like the openness of the ends of the intervals and the possiblity of including dependency info (or links) to enable run-time narrowing of exaggerated interval widths caused by inconsistent expression evaluation (commony called multiple dependency).  It also includes the possiblity of representing the full set of function results rather than only the results of domain-filtered parameters.

> > IEEE 754R is nearly over.  It is likely to include
> >    Decimal formats for floating point
> >        (Should C++ IA standard permit decimal intervals?)
> 
> We have explicitly asked this question (at the Mont-Tremblant meeting)
> to the IBM representant supporting the decimal floating-point proposal.
> He agreed that, at least currently, there is no need for this
> compatibility as the corresponding user communities targetted are
> a priori separate.

If you adopt this reasoning then there should be no interval standard.  Consider that a standard based upon the above rationale would maintain and/or increase that division within the user community.  I consider that to be a Bad Thing(tm).

> >    Fused Multiply and Add
> >        (I assume with directed rounding?
> >         Great for interval linear algebra, too)
> 
> I guess it also depends if there appears a function for doing fma
> on floating-point types in C++, in which case a natural overload
> for intervals would be nice and natural.

This is an iceberg issue.  It is not only the existence of an explicit fma function that is at issue.  The hidden part of this issue is that the compiler may transform ordinary algebraic expressions into fma instructions rather than just add & mul instructions.  If the code generation works for fp types but not for interval types then users will not want to use intervals.

The hidden part of this issue is not a library issue, but a compiler/code generator issue.  If fma support makes it into the language (which is mostly an issue of how to tell the compiler when it is forbidden to generate the fma instruction) then inline and template implementations of intervals will need to be written so they work no matter how the controls are set.  That can be fairly subtle due to the fact that the effect of outward rounding on an fma instruction is sometimes murky.

> ------------------------------
> 
> Message: 4
> Date: Tue, 04 Apr 2006 03:33:53 -0700
> From: Lawrence.Crowl@Sun.com
> Subject: Re: [std-interval] C++ interval std 
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <200604041033.k34AXrbd008489@philmont.sfbay.sun.com>
> 
> Sylvain Pion <Sylvain.Pion@sophia.inria.fr> writes:
>  >Well, if we're arguing that passsing-by-value is fundamentally important
>  >for speed, and that adding a few more tests is not because speed is less
>  >important... ;)
> 
> Pass-by-value is also a correctness issue.

How so?

> 
>  >> Uninitialized.  The convention in C/C++ is to initialize to zero,
>  >> but we agree that is not correct for intervals.  Whole is probably
>  >> the best we can do.
>  >
>  >I'm not convinced.  Initilization to [0,0] seems nice to me for
>  >intervals because of homogeneity reasons with floating-point.
>  >I could even imagine that the empty interval would make as much
>  >sense as whole.
>  >
>  >What makes you think that [0,0] is "not correct", and why 'whole'
>  >would be better than 'empty' ?
> 
> Note that on modern systems, initialization to [0,0] is more efficient.

Please state the reasoning behind the above statement.

> 
>  >>    Quad precision
>  >>        (Should C++ IA standard quad intervals?)
>  >
>  >I would say that it depends if quads appear in the C++ language
>  >(or is this supposed to be the already existing "long double" ?).
>  >But if they appear, probably support for interval<quads> should
>  >be added, yes.
> 
> The meaning of long double is implementation-dependent.  On Solaris
> SPARC, it is 128 bits.  On Solaris x86, it is 80 bits.

And some compilers accept the syntax of long double but don't implement it (long double becomes a synonym for double).

===================
From Stephen.Clamage@Sun.COM Wed Apr  5 02:55:05 2006
Received: from brmea-mail-4.sun.com (brmea-mail-4.Sun.COM [192.18.98.36])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k359t4jd007964
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 02:55:05 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-4.sun.com (8.12.10/8.12.9) with ESMTP id k3582juf015989
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 02:02:45 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IX800201OZYFC@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 01:02:45 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-78.SFBay.Sun.COM [129.150.20.78])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IX800MVAP0HEM@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 01:02:43 -0700 (PDT)
Date: Wed, 05 Apr 2006 01:02:40 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] C++ interval std
In-reply-to: <44336367.9060400@computer.org>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <443379A0.7010800@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii; format=flowed
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: <C0573279.37DC%George.Corliss@Marquette.edu>
 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
 <44336367.9060400@computer.org>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 09:55:05 -0000

Bill Clarke wrote:
> 
> Surely it is possible to permit the implementer to choose the parameter
> passing convention, between pass-by-value and pass-by-const-ref?  It
> should have no visible impact on the programmer which is used.

The standard can state, for example, that that whether a parameter is passed by 
value or by reference is implementation-defined, meaning that an implementation 
can choose either and must document the choice. Or it could say that the choice 
is unspecified, meaning that the implementation does not need to document what 
it does, and does not need to be consistent.

The choice can have an effect on programmers, however, since the types of the 
functions
   interval foo(interval);
   interval foo(const interval&);
are different.

1. If you create a function pointer interval(*)(interval), it cannot be used to 
hold the address of "interval foo(const interval&)". I don't know of a 
convenient way to deal with this problem, where you need to modify your code 
based on details of a predefined type.

2. The result of typeid(foo) is different in the two cases, which can affect the 
operation of a program.
     interval bar(const interval&);
     if( typeid(foo) == typeid(bar) ) ...

That said, it is already the case that member functions of classes in the 
standard library are explicitly allowed to vary from the exemplars listed in the 
standard. But the implementation is required to accept code that is valid for 
the exemplars.

Example: An implementation can add a default parameter to a class member 
function. If the standard says this:
      class Foo {
      public:
            fun(int);
      };
An implemtation can have this:
     class Foo {
     public:
           fun(int, int=0);
     };
According to the standard, the following is valid:
     Foo f;
     f.fun(3);
and indeed that code compiles with the modified implementation.

Similarly, code that can call one of the versions of the interval function foo 
above can also call the other version.

My point is that allowing freedom of implementation is not without consequences 
for C++ programmers, but there is already some precedent for that freedom of 
implementation. We need to be aware of the potential problems for programmers, 
and make a considered choice.

---
Steve Clamage, stephen.clamage@sun.com

From Sylvain.Pion@sophia.inria.fr Wed Apr  5 04:25:05 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35BP5jd008503
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 04:25:05 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k359Wo6l010850
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 11:32:54 +0200
Received: from [193.16.179.143] ([193.16.179.143])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k359WmMb010836
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 11:32:49 +0200
Message-ID: <44338EC4.4020106@sophia.inria.fr>
Date: Wed, 05 Apr 2006 11:32:52 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: std-interval@compgeom.poly.edu
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Wed, 05 Apr 2006
	11:32:49 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
Subject: [std-interval] passing by value vs reference
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 11:25:06 -0000

[ Let me create separate threads of discussion on each point. ]


Summary of the arguments on this issue:

1- pass by value can be faster or slower than pass by reference
    depending on the processor/ABI.
2- pass by value can be faster due to removal of aliasing issues.
3- pass by value is safer in general as a programming idiom
    (an example is operator*= which may need tweaking to protect
     itself multipliying by *this)
4- pass by reference is consistent with std::complex
5- having it specified is useful when taking addresses of functions.


Possible solutions, assuming we want a uniform treatment for all
functions on intervals:

1- enforce pass-by-value
2- enforce pass-by-ref
3- leave freedom for the implementation to choose
4- leave freedom for the implementation and have it provide
    a standard specified way to obtain this information.


Now, I assume that users want the best performance on all
compilers/processors, so I don't like 1 nor 2.
I also do not see a large need for manipulating function
pointers for the intervals, I never needed that personnaly
at least (speak up if you think it is an important use case).
If there is indeed no large need for these, and given that it
is always possible (though painful) to write function wrappers
to get function pointers, then I would prefer 3 to 4.  I think
the complexity of implementing 4 is not worth it.  Moreover,
specifying 4- can be proposed later as an addition (e.g. in
the more general context of the whole standard library).


So, as for the proper text in the proposal, let me propose:
- to have the text of the function prototypes use pass-by-value,
   as it fulfills the "advocate safer programming style" argument
   of Lawrence, and it is also shorter.
- a note at the beginning mentionning that the implementation
   is free to use pass-by-reference.


Does this seem reasonnable ?

-- 
Sylvain
From eliasen@mindspring.com Wed Apr  5 05:45:03 2006
Received: from smtpauth04.mail.atl.earthlink.net
	(smtpauth04.mail.atl.earthlink.net [209.86.89.64])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35Cj3jd008600
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 05:45:03 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=egn8e96nGjCv1u9uwiCpb0QNM4UOKzWXMusb80IEkMysfAdtZwOO2Re/S2dhDlQm;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by smtpauth04.mail.atl.earthlink.net with asmtp (Exim 4.34)
	id 1FR5d7-0007Ra-3q
	for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 06:52:53 -0400
Message-ID: <4433A182.7060405@mindspring.com>
Date: Wed, 05 Apr 2006 04:52:50 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org>
In-Reply-To: <44336367.9060400@computer.org>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45077aaba6d529e8ad282228b05237e472f0350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 12:45:03 -0000

Bill Clarke wrote:
> This experiment is extremely platform specific, as you probably are
> aware.  Most platforms in use today other than x86 will be the other way
> around (add-by-value will be faster than add-by-const-ref).

   How can that assertion possibly be made?  As you know, if a parameter
is passed by value, then the copy constructor is automatically called
for each object (e.g. twice for an add operator) on function entry, and
then the destructor is called (twice) on function exit.  The passed-in
objects should not be modified in the interim.  So pass-by-value
*always* has completely unnecessary overhead.  There is absolutely no
reason to copy and subsequently destroy the objects being passed in.
Passing by constant reference will *always* be faster in this respect,
as the copy constructors and destructors will never be called.

   The architecture doesn't matter.  Say, for an addition operator, if
you pass by value, you're *always* incurring the additional overhead of
two unnecessary object copies and two unnecessary object destructions.
There is simply no advantage to pass-by-value over
pass-by-constant-reference in any way.  Your compiler might be smart
enough to optimize out the copies and destructions, but pass-by-value
should *never* be faster with a reasonable compiler.

   Why would one ever want the compiler to potentially call copy
constructors and destructors when we *know* they're a total waste of
cycles?  We can simply prevent that inefficiency in advance for all
compilers.

> (Was this 64-bit code?  I thought x86_64 would be faster with
> pass-by-value since I got the impression the ABI passed parameters in
> registers)

   As I mentioned in my original message, I did the test with both
x86_64 code and x86.  The x86_64 code was 64-bit code, and those were
the numbers cited.  The difference in performance, as I noted, was even
greater on the x86.  (Pass-by-value was about 1.7 times slower on
x86_64, about 2.6 times slower on x86.)  Registers don't enter into the
picture.  Pass-by-constant-reference arguments can be passed in
registers too, of course.

   The difference is that pass-by-value is likely to perform unnecessary
copy constructors and unnecessary destructions.  There is simply no
advantage to this, when we can be smart and tell even the dumbest
compilers that these copying and destroying operations should never even
be attempted.  Silly, useless performance problems (e.g. unnecessary
copy constructor calls) will be avoided in advance.  That's a good thing.

> With inlining then they should be identical (perhaps you could re-run
> your experiment with inlining to verify this?).

   The constructor was inlined.  I fail to see how inlining could ever
make pass-by-value faster, as it always has unnecessary overhead.  A
smart compiler could make it *as* fast as pass-by-constant-reference,
but I can't see how it could ever make it faster.  Specifying
pass-by-constant-reference would simply eliminate a source of
inefficiency with broken compilers.

> Surely it is possible to permit the implementer to choose the parameter
> passing convention, between pass-by-value and pass-by-const-ref?  It
> should have no visible impact on the programmer which is used.

   I agree that it should have no visible impact on the library user.
But there is really no reason to *not* use pass-by-constant-reference.
 Even if you are doing lazy operations and need to modify some part of
the passed-in object, you can always use the "mutable" keyword.

   In short, if you can find a compiler that does pass-by-value faster
than pass-by-constant-ref, I'll show you a broken compiler.

   Specifying pass-by-constant-reference also allows the compiler to
detect and prevent accidental modification of the objects being passed
in, or erroneous programmer attempts to modify a passed-in object (which
is probably never what you want to do, and should always fail.)

   Const-correctness is also a desirable goal, in my opinion.  It
becomes prohibitive and breaks code to add const-correctness late in the
game, which is why we should get it right the first time.

   If you're interested, you can dowload the really simple test programs
here and run them on your own computer:

   http://futureboy.us/temp/Interval.h
   http://futureboy.us/temp/Interval.cc

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From eliasen@mindspring.com Wed Apr  5 06:05:30 2006
Received: from smtpauth04.mail.atl.earthlink.net
	(smtpauth04.mail.atl.earthlink.net [209.86.89.64])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35D5Ujd008641
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 06:05:30 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=D7Jg/xk7YR5Q9XAY3ATWMnF4lMNHnkuLKcsDPYluRDZ/yNJjZFog7PJPjlRu8uDu;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by smtpauth04.mail.atl.earthlink.net with asmtp (Exim 4.34)
	id 1FR5wv-0006uK-0p
	for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 07:13:21 -0400
Message-ID: <4433A64B.4000708@mindspring.com>
Date: Wed, 05 Apr 2006 05:13:15 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Re: Std-interval Digest, Vol 3, Issue 1
References: <040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
In-Reply-To: <040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac450785798d193fd860e3dd117508e7f86d8f350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 13:05:30 -0000

first.i.last@comcast.net wrote:
>>but we agree that is not correct for intervals.  Whole is probably
>>the best we can do.
> 
> Yuck.  Empty is clearly superior to whole in that it has less 
> chance of accidentally producing apparently sensible results.
> And for production an uninitialized interval should not be
> initialized.  After all,  C++ lacks basis support for array
> initialization so any default initialization effort, like touching
> every value in a big array, is just wasted time.

   I think that there should *never* be a zero-arg default constructor
for intervals.  All constructors should have at least one argument to
force the programmer to declare their intent.  There's no point to a
zero-argument constructor, because allowing such gives the programmer
*lots* of ways to mess up and use uninitialized objects.  If you want to
use an interval, you should provide reasonable arguments to it in a
constructor.  That way, you *never* get an Interval object that hasn't
been initialized to a known value.  A huge class of errors is eliminated
at compile-time!

   In my interval implementations in Java, there's no way to construct
an interval without specifying its values.  There's no reason to allow a
"default" interval.  I believe in constructing APIs that eliminate
sources of expected programmer error at compile-time.  This is an
obvious case.

   There is simply no reason to allow a "default" interval initialized
to a value that we *know* isn't right for anything.  We can prevent this
mess at compile time, and should.

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From guillaume.melquiond@ens-lyon.fr Wed Apr  5 06:34:36 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35DYajd008674
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 06:34:36 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id C376F15B790
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 13:42:37 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 14139-83 for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 13:42:37 +0200 (CEST)
Received: from menthe.lip.ens-lyon.fr (menthe.lip.ens-lyon.fr [140.77.13.88])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id C0CC115B7A3
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 13:42:34 +0200 (CEST)
Subject: Re: [std-interval] default constructor
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <4433A64B.4000708@mindspring.com>
References: 
	<040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
	<4433A64B.4000708@mindspring.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Wed, 05 Apr 2006 13:42:28 +0200
Message-Id: <1144237348.1575.11.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 13:34:36 -0000

Le mercredi 05 avril 2006 à 05:13 -0600, Alan Eliasen a écrit :

>    I think that there should *never* be a zero-arg default constructor
> for intervals.  All constructors should have at least one argument to
> force the programmer to declare their intent.

This is too strong a requirement. Forbidding arrays of intervals is a
sure way of alienating any C++ user. You need a default constructor if
you don't want the users to go to great and error-prone lengths to
create arrays (or any higher-level containers).

Best regards,

Guillaume

From Stephen.Clamage@Sun.COM Wed Apr  5 06:43:52 2006
Received: from brmea-mail-4.sun.com (brmea-mail-4.Sun.COM [192.18.98.36])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35Dhqjd008691
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 06:43:52 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-4.sun.com (8.12.10/8.12.9) with ESMTP id k35BpaSa011589
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 05:51:36 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IX800K01Z690J@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 04:51:36 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-68.SFBay.Sun.COM [129.150.20.68])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IX800M02ZLXEM@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 04:51:35 -0700 (PDT)
Date: Wed, 05 Apr 2006 04:51:32 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] C++ interval std
In-reply-to: <4433A182.7060405@mindspring.com>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <4433AF44.8020308@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii; format=flowed
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: <C0573279.37DC%George.Corliss@Marquette.edu>
 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
 <44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 13:43:53 -0000

Alan Eliasen wrote:
> Bill Clarke wrote:
> 
>>This experiment is extremely platform specific, as you probably are
>>aware.  Most platforms in use today other than x86 will be the other way
>>around (add-by-value will be faster than add-by-const-ref).
> 
> 
>    How can that assertion possibly be made?  As you know, if a parameter
> is passed by value, then the copy constructor is automatically called
> for each object (e.g. twice for an add operator) on function entry, and
> then the destructor is called (twice) on function exit.

A simple object like complex or interval should have no user-defined copy 
constructor or destructor. That is, the default copy constructor generated by 
the compiler does the right thing and does not need to be user-defined. The 
destructor has nothing to do, and so should not be user-defined. In that case, 
pass-by-value can be optimized into register passing with no additional copying.

It is possible to construct a test case where pass-by-value gives worse 
performance than pass-by-reference, and your example does indeed run faster with 
pass-by-reference using Sun compilers at low optimization.

At high optimization, the compiler eliminated the loops and all but one call to 
"add", which it inlined. I played with the test case for a short time, but was 
unable to defeat the optimizer with minor changes.

I will need a little time to construct a test case that forces the compiler to 
retain the loops and call the add functions. I'm at the C++ Committee meeting 
right now, and don't have much time to work on this test.

---
Steve Clamage, stephen.clamage@sun.com

From guillaume.melquiond@ens-lyon.fr Wed Apr  5 06:47:42 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35Dlgjd008705
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 06:47:42 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 3FE0B15B7A4
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 13:55:42 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 17473-28 for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 13:55:42 +0200 (CEST)
Received: from menthe.lip.ens-lyon.fr (menthe.lip.ens-lyon.fr [140.77.13.88])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id F1C2515B788
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 13:55:41 +0200 (CEST)
Subject: Re: [std-interval] C++ interval std
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <4433A182.7060405@mindspring.com>
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	 <44336367.9060400@computer.org>  <4433A182.7060405@mindspring.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Wed, 05 Apr 2006 13:55:35 +0200
Message-Id: <1144238135.1575.25.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 13:47:42 -0000

Le mercredi 05 avril 2006 à 04:52 -0600, Alan Eliasen a écrit :
> Bill Clarke wrote:
> > This experiment is extremely platform specific, as you probably are
> > aware.  Most platforms in use today other than x86 will be the other way
> > around (add-by-value will be faster than add-by-const-ref).
> 
>    How can that assertion possibly be made?  As you know, if a parameter
> is passed by value, then the copy constructor is automatically called
> for each object (e.g. twice for an add operator) on function entry, and
> then the destructor is called (twice) on function exit.  The passed-in
> objects should not be modified in the interim.  So pass-by-value
> *always* has completely unnecessary overhead.  There is absolutely no
> reason to copy and subsequently destroy the objects being passed in.
> Passing by constant reference will *always* be faster in this respect,
> as the copy constructors and destructors will never be called.

Please note that our proposed interval type is meant to be a POD (plain
old data) type and as such has no copy constructor nor destructor. As a
consequence, on some architectures and with non-broken compilers, they
will behave no differently than if the function arguments were simply
integers; except that the register will probably be bigger, or two
registers will be used. When this happens, passing by value will be
faster than passing by const-reference. Indeed there is no architecture
such that foo(int) is slower than bar(int const &).

Best regards,

Guillaume

From guillaume.melquiond@ens-lyon.fr Wed Apr  5 06:57:58 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35Dvwjd008737
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 06:57:58 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id BC18D15B7B0
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 14:06:00 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 17399-82 for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 14:06:00 +0200 (CEST)
Received: from menthe.lip.ens-lyon.fr (menthe.lip.ens-lyon.fr [140.77.13.88])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 6A93B15B7A6
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 14:06:00 +0200 (CEST)
Subject: Re: [std-interval] passing by value vs reference
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <44338EC4.4020106@sophia.inria.fr>
References: <44338EC4.4020106@sophia.inria.fr>
Content-Type: text/plain; charset=ISO-8859-1
Date: Wed, 05 Apr 2006 14:05:54 +0200
Message-Id: <1144238754.1575.37.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 13:57:58 -0000

Le mercredi 05 avril 2006 à 11:32 +0200, Sylvain Pion a écrit :

> 3- leave freedom for the implementation to choose
> 4- leave freedom for the implementation and have it provide
>     a standard specified way to obtain this information.

> I would prefer 3 to 4.  I think
> the complexity of implementing 4 is not worth it.

I don't see any additional complexity in 4 with respect to 3. As already
mentioned by Bill Clarke, you could simply have a typedef member in
interval<T> to express the calling convention of the functions of the
interval library: typedef interval<T> const &param_type;

This requires all the functions of the library to use the same calling
convention. But I don't think it is too strong a requirement since there
is no function that uses more than two interval arguments.

Best regards,

Guillaume

From crowl@philmont.sfbay.sun.com Wed Apr  5 07:17:04 2006
Received: from brmea-mail-1.sun.com (brmea-mail-1.Sun.COM [192.18.98.31])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35EH3jd008772
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 07:17:03 -0700
Received: from sfbaymail1sca.SFBay.Sun.COM ([129.145.154.35])
	by brmea-mail-1.sun.com (8.12.10/8.12.9) with ESMTP id k35COtGp017250
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 06:24:55 -0600 (MDT)
Received: from philmont.sfbay.sun.com (philmont.SFBay.Sun.COM
	[129.146.86.162])with ESMTP id k35COsoc005778
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 05:24:54 -0700 (PDT)
Received: from philmont (localhost [127.0.0.1])k35COsbd029560
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 05:24:54 -0700 (PDT)
Message-Id: <200604051224.k35COsbd029560@philmont.sfbay.sun.com>
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std 
From: Lawrence.Crowl@Sun.com
In-reply-to: Your message of Tue, 04 Apr 2006 23:20:27 MDT.
             <4433539B.5000604@mindspring.com> 
Date: Wed, 05 Apr 2006 05:24:54 -0700
Sender: crowl@philmont.sfbay.sun.com
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence.Crowl@Sun.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 14:17:04 -0000

Alan Eliasen <eliasen@mindspring.com> writes:
 >   I was curious to see about the speed difference between passing by
 >value and passing by reference, because passing by value always has been
 >slower and always *has* to be slower because it (unnecessarily) creates
 >a copy of the object when passed in.

It does not unnecessarily create an object.  In particular, when the
parameter to a function is the result of an expression, the const ref
approach requires allocating a temporary and passing its address.  In
contrast, pass-by-value can put the result of the expression directly
into the parameter register; no copies are required.

Pass-by-reference aften introduces additional copies because the
programmer must copy the parameter into a local variable in order to
avoid aliases between parameters.

 >I tried three ways on x86_64, gcc 3.4.4, linux:

I would need the benchmark source in order to evaluate it and to
execute it on other systems.

In developing the SPARC V9 ABI, I showed a 7x performance advantage for
pass-by-value over pass-by-reference when computing Mandelbrot with
complex numbers.

 >   Passing in unmodifiable objects as constant references when
 >appropriate both obviates the need for copying and gives explicit
 >const-correctness from the start.  We don't have to worry about
 >dereferencing pointers or memory ownership issues.  It's indeed the
 >pattern followed by most modern libraries.

You are assuming that "const" means "unmodifiable".  It does not.  It
means that non-mutuable fields may not change when accessed through the
const-qualified name.  The object may still change via access through
non-const-qualified names.  The distinction between a value and a
reference is critical here, because the former is unaliased and the
latter is potentially aliased.  This aliasing can also have substantial
effect on the ability of the compiler to apply global optimizations.

 >   To the caller of the functions, it just looks like an ordinary
 >pass-by-value, but is faster, and allows the compiler to catch a lot of
 >types of problems.

But it doesn't look the same, because of the aliasing issue.  With
reference parameters, the function must make an explicit declaration
about its behavior in the presence of aliasing.

 >   I recommend that for long-term performance and const-correctness,
 >that objects be passed as constant references when possible.

Would you recommend that ints be passed by const reference?

  Lawrence Crowl             650-786-6146   Sun Microsystems, Inc.
                   Lawrence.Crowl@Sun.com   16 Network Circle, UMPK16-303
           http://www.Crowl.org/Lawrence/   Menlo Park, California, 94025
From crowl@philmont.sfbay.sun.com Wed Apr  5 07:41:49 2006
Received: from brmea-mail-4.sun.com (brmea-mail-4.Sun.COM [192.18.98.36])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35Efnjd008799
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 07:41:49 -0700
Received: from sfbaymail1sca.SFBay.Sun.COM ([129.145.154.35])
	by brmea-mail-4.sun.com (8.12.10/8.12.9) with ESMTP id k35CnfSa020309
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 06:49:41 -0600 (MDT)
Received: from philmont.sfbay.sun.com (philmont.SFBay.Sun.COM
	[129.146.86.162])with ESMTP id k35Cnfoc012376
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 05:49:41 -0700 (PDT)
Received: from philmont (localhost [127.0.0.1])k35Cnfbd008613
	for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 05:49:41 -0700 (PDT)
Message-Id: <200604051249.k35Cnfbd008613@philmont.sfbay.sun.com>
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Re: C++ interval std
From: Lawrence.Crowl@Sun.com
In-reply-to: Your message of Wed, 05 Apr 2006 06:38:28 -0000.
	<040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
	
Date: Wed, 05 Apr 2006 05:49:41 -0700
Sender: crowl@philmont.sfbay.sun.com
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence.Crowl@Sun.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 14:41:50 -0000

first.i.last@comcast.net writes:
 >> Lawrence feels strongly that the standard should be to pass by
 >> value.  Intervals are small data structures;
 >
 >That perspective causes problems, just as it did for complex.
 >Intervals should be considered atomic types whose internal structure
 >is opaque.  We don't consider fp types as structures even though they
 >consist of three distinct fields (and in fact are t reated as separate
 >fields in software implementations of the run-time library).

The issue was the mechanism for passing the representation, not the
logical opacity of the type.

 >> by value allows them
 >> to be passed in registers for speed.  That is how the current Sun
 >> C++ compiler works.  There is no reason to follow the C++ complex
 >> standard.  The library is often taken as an example by coders, and
 >> there is no good reason to follow the tradition of C from 20 years
 >> ago that structures should be passed by reference.
 >
 >There may or may not be a good reason for it.  On FPUs with weak
 >connections to the CPU, such as x87, passing by value is strongly
 >preferred.  Yet on FPUs with strong connections to the main CPU
 >passing by reference might be much more efficient.

I don't follow the reasoning here.

 >If the standard syntax is pass by value then a compiler that prefered
 >pass by reference would be free to do so internally (assuming
 >appropriate referential safe guards).

SPARC V7 (32-bit) does in fact do this.  SPARC V9 (64-bit) does so
for large structs, but passes in registers for small structs.

 >> Uninitialized.  The convention in C/C++ is to initialize to zero,
 >
 >Not quite.  The default initialization convention in C depends on the
 >lifetime of the object.  Dynamic objects (typically stack and heap)
 >are not initialized at all by default.  Static objects are initialized
 >to zero, but that is not a special property of numerics.  All static
 >objects lacking an initialization expression get a default expression
 >of zero.

Correct.

 >> The current C++ standard does not discuss or acknowledge threads.
 >> They are working on the next revision of the standard, which will
 >> have something to say about threads in the language proper and in
 >> the standard library.  Probably the interval standard should say,
 >> "Intervals will be implemented in a thread-safe manner."
 >
 >That is a tall order.  Intervals should be thread safe when the
 >underlying language is thread-safe.  Consider errno and matherr() for
 >intervals.

More specifically, two threads should be able to operate on their
disjoint data without worry of interference.  Shared variables may need
synchronization.

 >Some compilers give the programmer little control over parameter
 >passing.  Others give a great deal of control, including offering both
 >stack and register passing for atomic types, putting small structs in
 >registers, and even hybrids with part in registers and part on the
 >stack.

Yes, though the controls are of dubious value.

 >This matters because the implementor _must_ have the freedom to
 >optimize parameter passing.  So the standard should be as quiet as
 >possible on the issue.  The _syntax_ should be by-value because that
 >imposes the least (i.e., no actual) constraints.  But the code
 >generated could be either at the discretion of the implementor.

Agreed.

 >The best approach is probably a second set of types that are
 >specifically used for argument passing.  Portable code often uses this
 >approach.  It allows an implementor to alter the parameter passing
 >convention on a platform-by-platform basis.  So non-inline interval
 >functions would take arguments of type IntervalArg<double> from which
 >the function could obtain the actual argument.

As Steve Clamage pointed out, you have interference when function
pointers are involved if you delay the parameter types.

 >> Pass-by-value is also a correctness issue.
 >
 >How so?

Because users will copy the style of interval function declarations.
If that style includes reference paramters, the programmers will litter
their programs with unintended aliases.  These aliases are the source
of bugs.

 >> Note that on modern systems, initialization to [0,0] is more efficient.
 >
 >Please state the reasoning behind the above statement.

Variables of static extent (globals, function-local static, static member)
can be allocated in a "fill with zeros" section if and only if their
initial representation consists of all zero.  This implies a [0,0] interval
with modern floating-point representations.  The same issue arises with
dynamically allocated code, though only on systems that first ensure
that they clear the memory.

 >> The meaning of long double is implementation-dependent.  On Solaris
 >> SPARC, it is 128 bits.  On Solaris x86, it is 80 bits.
 >
 >And some compilers accept the syntax of long double but don't
 >implement it (long double becomes a synonym for double).

This behavior falls under "quality of implementation". :-)

  Lawrence Crowl             650-786-6146   Sun Microsystems, Inc.
                   Lawrence.Crowl@Sun.com   16 Network Circle, UMPK16-303
           http://www.Crowl.org/Lawrence/   Menlo Park, California, 94025
From gdr@integrable-solutions.net Wed Apr  5 08:10:53 2006
Received: from mallaury.nerim.net (smtp-103-wednesday.noc.nerim.net
	[62.4.17.103])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35FAqjd008855
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 08:10:53 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by mallaury.nerim.net (Postfix) with ESMTP id B0D054F3E6
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 15:18:36 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k35DHItZ021637
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 15:17:18 +0200
Received: (from gdr@localhost)k35DHI2G021636;
	Wed, 5 Apr 2006 15:17:18 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	<4433AF44.8020308@sun.com>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <4433AF44.8020308@sun.com>
Organization: Integrable Solutions
Date: 05 Apr 2006 15:17:18 +0200
Message-ID: <m3odzgcgbl.fsf@uniton.integrable-solutions.net>
Lines: 24
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 15:10:53 -0000

Steve Clamage <Stephen.Clamage@Sun.COM> writes:

| Alan Eliasen wrote:
| > Bill Clarke wrote:
| >
| >>This experiment is extremely platform specific, as you probably are
| >>aware.  Most platforms in use today other than x86 will be the other way
| >>around (add-by-value will be faster than add-by-const-ref).
| >    How can that assertion possibly be made?  As you know, if a
| > parameter
| > is passed by value, then the copy constructor is automatically called
| > for each object (e.g. twice for an add operator) on function entry, and
| > then the destructor is called (twice) on function exit.
| 
| A simple object like complex or interval should have no user-defined
| copy constructor or destructor. That is, the default copy constructor
| generated by the compiler does the right thing and does not need to be
| user-defined. The destructor has nothing to do, and so should not be
| user-defined. In that case, pass-by-value can be optimized into
| register passing with no additional copying.

I do agree with Steve.

-- Gaby
From Sylvain.Pion@sophia.inria.fr Wed Apr  5 08:19:12 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35FJCjd008874
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 08:19:12 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k35DR0Ip017870
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 15:27:04 +0200
Received: from [193.16.179.143] ([193.16.179.143])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k35DQv4m017859
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 15:26:58 +0200
Message-ID: <4433C59B.3080700@sophia.inria.fr>
Date: Wed, 05 Apr 2006 15:26:51 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] passing by value vs reference
References: <44338EC4.4020106@sophia.inria.fr>
	<1144238754.1575.37.camel@localhost>
In-Reply-To: <1144238754.1575.37.camel@localhost>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Wed, 05 Apr 2006
	15:26:58 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 15:19:12 -0000

Guillaume Melquiond wrote:
> Le mercredi 05 avril 2006 à 11:32 +0200, Sylvain Pion a écrit :
> 
> 
>>3- leave freedom for the implementation to choose
>>4- leave freedom for the implementation and have it provide
>>    a standard specified way to obtain this information.
> 
> 
>>I would prefer 3 to 4.  I think
>>the complexity of implementing 4 is not worth it.
> 
> 
> I don't see any additional complexity in 4 with respect to 3. As already
> mentioned by Bill Clarke, you could simply have a typedef member in
> interval<T> to express the calling convention of the functions of the
> interval library: typedef interval<T> const &param_type;
> 
> This requires all the functions of the library to use the same calling
> convention. But I don't think it is too strong a requirement since there
> is no function that uses more than two interval arguments.

I meant complexity for the proposal.  I think this issue has the
potential to raise questions I would prefer to avoid discussing
if possible, like:
- should this be a mecanism applicable to the whole std library
   types instead?
- should it be fine grained for each argument of each function?
- is such a type-based mecanism enough for all users needs
   (or is a macro necessary for example)?
   For example: how would a user defined template function on
   intervals be defined to play nicely with this implementation
   "preference":
     template < typename T >
     void f(std::interval<T>::param_type i)
   does not work.

So, let's first hear if there is a need for such a mechanism at all,
or if the "unspecified" approach, 3, is good enough.

-- 
Sylvain
From gdr@integrable-solutions.net Wed Apr  5 08:26:54 2006
Received: from kraid.nerim.net (smtp-103-wednesday.nerim.net [62.4.16.103])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35FQsjd008894
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 08:26:54 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by kraid.nerim.net (Postfix) with ESMTP id 1DDED40E35
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 15:34:46 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k35DXKtZ021693
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 15:33:20 +0200
Received: (from gdr@localhost)k35DXKbh021692;
	Wed, 5 Apr 2006 15:33:20 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] default constructor
References: <040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
	<1144237348.1575.11.camel@localhost>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <1144237348.1575.11.camel@localhost>
Organization: Integrable Solutions
Date: 05 Apr 2006 15:33:20 +0200
Message-ID: <m3irpocfkv.fsf@uniton.integrable-solutions.net>
Lines: 16
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k35FQsjd008894
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 15:26:54 -0000

Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr> writes:

| Le mercredi 05 avril 2006 à 05:13 -0600, Alan Eliasen a écrit :
| 
| >    I think that there should *never* be a zero-arg default constructor
| > for intervals.  All constructors should have at least one argument to
| > force the programmer to declare their intent.
| 
| This is too strong a requirement. Forbidding arrays of intervals is a
| sure way of alienating any C++ user.

Indeed, that is an excellent observation.  It is good to take into
account experience of interval libraries in other languages; we must
however not forget ways C++ is natively used.

-- Gaby

From gdr@integrable-solutions.net Wed Apr  5 08:30:54 2006
Received: from kraid.nerim.net (smtp-103-wednesday.nerim.net [62.4.16.103])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35FUsjd008908
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 08:30:54 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by kraid.nerim.net (Postfix) with ESMTP id A433940E26
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 15:38:46 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k35DbKtZ021719
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 15:37:21 +0200
Received: (from gdr@localhost)k35DbKHS021718;
	Wed, 5 Apr 2006 15:37:20 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] passing by value vs reference
References: <44338EC4.4020106@sophia.inria.fr>
	<1144238754.1575.37.camel@localhost>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <1144238754.1575.37.camel@localhost>
Organization: Integrable Solutions
Date: 05 Apr 2006 15:37:20 +0200
Message-ID: <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
Lines: 20
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k35FUsjd008908
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 15:30:55 -0000

Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr> writes:

| Le mercredi 05 avril 2006 à 11:32 +0200, Sylvain Pion a écrit :
| 
| > 3- leave freedom for the implementation to choose
| > 4- leave freedom for the implementation and have it provide
| >     a standard specified way to obtain this information.
| 
| > I would prefer 3 to 4.  I think
| > the complexity of implementing 4 is not worth it.
| 
| I don't see any additional complexity in 4 with respect to 3. As already
| mentioned by Bill Clarke, you could simply have a typedef member in
| interval<T> to express the calling convention of the functions of the
| interval library: typedef interval<T> const &param_type;

If done that way, in the typical cases, the "T" would then appear in
non-deducible context. 

-- Gaby

From guillaume.melquiond@ens-lyon.fr Wed Apr  5 08:49:18 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35FnIjd008928
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 08:49:18 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 337D315B7B4
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 15:57:22 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 02286-06 for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 15:57:21 +0200 (CEST)
Received: from menthe.lip.ens-lyon.fr (menthe.lip.ens-lyon.fr [140.77.13.88])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id D549615B7A7
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 15:57:21 +0200 (CEST)
Subject: Re: [std-interval] passing by value vs reference
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
References: <44338EC4.4020106@sophia.inria.fr>
	 <1144238754.1575.37.camel@localhost>
	 <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
Content-Type: text/plain; charset=ISO-8859-1
Date: Wed, 05 Apr 2006 15:57:15 +0200
Message-Id: <1144245435.1575.53.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 15:49:18 -0000

Le mercredi 05 avril 2006 à 15:37 +0200, Gabriel Dos Reis a écrit :

> | > I would prefer 3 to 4.  I think
> | > the complexity of implementing 4 is not worth it.
> | 
> | I don't see any additional complexity in 4 with respect to 3. As already
> | mentioned by Bill Clarke, you could simply have a typedef member in
> | interval<T> to express the calling convention of the functions of the
> | interval library: typedef interval<T> const &param_type;
> 
> If done that way, in the typical cases, the "T" would then appear in
> non-deducible context. 

Right. This occurred to me when reading Sylvain's reply. However,
although typical, it seems to me this only applies to cases outside the
interval library. Indeed, the functions of the library do not have to
use param_type, since they already know their own calling convention,
and hence T is deducible there. So the issue only applies to
user-defined template functions that would try to benefit from using the
same calling convention.

Anyway, do you know of a way to avoid this issue?
(Please do not suggest macros :-)

Best regards,

Guillaume


From Sylvain.Pion@sophia.inria.fr Wed Apr  5 08:56:16 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35FuFjd008962
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 08:56:15 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k35E48mh031146
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 16:04:08 +0200
Received: from [193.16.179.143] ([193.16.179.143])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k35E47q3031138
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 16:04:08 +0200
Message-ID: <4433CE56.6030407@sophia.inria.fr>
Date: Wed, 05 Apr 2006 16:04:06 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] passing by value vs reference
References: <44338EC4.4020106@sophia.inria.fr>
	<1144238754.1575.37.camel@localhost>
	<m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
	<1144245435.1575.53.camel@localhost>
In-Reply-To: <1144245435.1575.53.camel@localhost>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Wed, 05 Apr 2006
	16:04:08 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 15:56:16 -0000

Guillaume Melquiond wrote:
> Le mercredi 05 avril 2006 à 15:37 +0200, Gabriel Dos Reis a écrit :
> 
> 
>>| > I would prefer 3 to 4.  I think
>>| > the complexity of implementing 4 is not worth it.
>>| 
>>| I don't see any additional complexity in 4 with respect to 3. As already
>>| mentioned by Bill Clarke, you could simply have a typedef member in
>>| interval<T> to express the calling convention of the functions of the
>>| interval library: typedef interval<T> const &param_type;
>>
>>If done that way, in the typical cases, the "T" would then appear in
>>non-deducible context. 
> 
> 
> Right. This occurred to me when reading Sylvain's reply. However,
> although typical, it seems to me this only applies to cases outside the
> interval library. Indeed, the functions of the library do not have to
> use param_type, since they already know their own calling convention,
> and hence T is deducible there. So the issue only applies to
> user-defined template functions that would try to benefit from using the
> same calling convention.
> 
> Anyway, do you know of a way to avoid this issue?
> (Please do not suggest macros :-)

"friend injection" I guess can be used for that, but then it
competes with macros in terms of code cleanliness.

-- 
Sylvain
From gdr@integrable-solutions.net Wed Apr  5 09:06:09 2006
Received: from kraid.nerim.net (smtp-103-wednesday.nerim.net [62.4.16.103])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35G69jd008994
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 09:06:09 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by kraid.nerim.net (Postfix) with ESMTP id 976BC40EFD
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 16:14:01 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k35ECZtZ021889
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 16:12:35 +0200
Received: (from gdr@localhost)k35ECZ9b021888;
	Wed, 5 Apr 2006 16:12:35 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] passing by value vs reference
References: <44338EC4.4020106@sophia.inria.fr>
	<1144238754.1575.37.camel@localhost>
	<m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
	<1144245435.1575.53.camel@localhost>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <1144245435.1575.53.camel@localhost>
Organization: Integrable Solutions
Date: 05 Apr 2006 16:12:35 +0200
Message-ID: <m3psjw9kmk.fsf@uniton.integrable-solutions.net>
Lines: 16
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 16:06:09 -0000

Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr> writes:

[...]

| Anyway, do you know of a way to avoid this issue?
| (Please do not suggest macros :-)

I happen to have the luck to seat in front of Sylvain at this moment
so we had a brief discussion.

While I do agree with Lawrence and Steve, I think Sylvain has a point
about the performance on some x86-based systems there is a performance
problem.  I'm afraid I do not have a clean solution at the moment.
Even template aliases don't help here.

-- Gaby
From fernando_cacciola@datafull.com Wed Apr  5 09:30:55 2006
Received: from postino4.prima.com.ar (postino4.prima.net.ar [200.42.0.162]
	(may be forged))
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k35GUrjd009021
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 09:30:54 -0700
Received: (qmail 58513 invoked from network); 5 Apr 2006 14:38:45 -0000
Received: from unknown (HELO ?192.168.1.100?)
	(fernando?cacciola@ciudad.com.ar@200.122.82.9)
	by postino4.prima.net.ar with SMTP; 5 Apr 2006 14:38:45 -0000
Message-ID: <4433D6B7.3020204@datafull.com>
Date: Wed, 05 Apr 2006 11:39:51 -0300
From: Fernando Cacciola <fernando_cacciola@datafull.com>
User-Agent: Debian Thunderbird 1.0.2 (X11/20050331)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] passing by value vs reference
References: <44338EC4.4020106@sophia.inria.fr>
In-Reply-To: <44338EC4.4020106@sophia.inria.fr>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: fernando_cacciola@datafull.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 16:30:55 -0000

Sylvain Pion wrote:

>
> So, as for the proper text in the proposal, let me propose:
> - to have the text of the function prototypes use pass-by-value,
>   as it fulfills the "advocate safer programming style" argument
>   of Lawrence, and it is also shorter.
> - a note at the beginning mentionning that the implementation
>   is free to use pass-by-reference.
>
FWIW, I agree with this for the reasons Sylvain gave (comparing the 
other choices).
The note should say pass-by-const-reference though.

Regarding the pass by-value vs by-const-reference discussion, it is 
important to consider that the fields of this POD are floating point types.
A compiler will use a register to pass the address of the interval in 
the pass-by-const-reference case, but that's the wrong register...
When the interval fields are actually used inside the called function, 
they will have to be loaded in the FPU registers.

The most efficient scenario occurs when the compiler elides the 
copy-constructor and the calling function had already the fields of the 
interval arguments (typically 2) already loaded in FPU registers. In 
that case, there is no argument passing at all.

In my experience, this sort of optimization is common when the argument 
is passed-by-value (yes, it is common); yet I've never seen it in a 
pass-by-const-reference case.

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com




From Sylvain.Pion@sophia.inria.fr Wed Apr  5 09:55:18 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35GtHjd009058
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 09:55:18 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k35F39KD019206
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 17:03:11 +0200
Received: from [193.16.179.143] ([193.16.179.143])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k35F3746019194
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 17:03:08 +0200
Message-ID: <4433DC2F.8080604@sophia.inria.fr>
Date: Wed, 05 Apr 2006 17:03:11 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] default constructor
References:
	<040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
	<4433A64B.4000708@mindspring.com> <1144237348.1575.11.camel@localhost>
In-Reply-To: <1144237348.1575.11.camel@localhost>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Wed, 05 Apr 2006
	17:03:08 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 16:55:18 -0000

Here is the summary of the various options I saw:

1- no default constructor at all
2- [0,0]
3- empty
4- whole
5- uninitialized tag
6- see below (something a la "singular iterator")


1- does not seem reasonnable for the array argument.
2-,3-,4- seem not clearly distinguisable from each other.
5- may cause additional run-time overhead which I'm not
ready to pay.  However, let me suggest that this goes
in some "debug mode".

Let me propose 6-:

We can do something similar to the "singular values"
of standard iterators.  That is, the default constructed
value is considered "uninitialized", and the standard would
only allow assignment on such an uninitialized value.
Only assignment from a non-uninitialized interval makes
it non-uninitialized.  And all other operations on
uninitialized intervals have undefined behavior (which
means everything can happen including WWIII).

This way, we can simply use the default compiler-generated
default constructor, no particular value is specified.
This is optimal for efficiency.
And, a "debug mode" is allowed to store an "uninitialized tag"
in the intervals to abort in case of operations using such
uninitialized intervals.
Note that some STLs ship with a debug mode which adds some
validity checks to iterators and other classes.
This "debug mode" would not be specified by the C++ standard,
but allowed thanks to defining "uninitialized" and undefined
behavior.  It then becomes a QoI issue.


Would such a solution answer the requests for more "safety",
and keep others happy ?

-- 
Sylvain
From guillaume.melquiond@ens-lyon.fr Wed Apr  5 10:18:37 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35HIajd009096
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 10:18:37 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 05C3E15B7B4
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 17:26:40 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 10185-80 for <std-interval@compgeom.poly.edu>;
	Wed, 5 Apr 2006 17:26:39 +0200 (CEST)
Received: from menthe.lip.ens-lyon.fr (menthe.lip.ens-lyon.fr [140.77.13.88])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id A0BA515B7A9
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 17:26:39 +0200 (CEST)
Subject: Re: [std-interval] passing by value vs reference
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <4433D6B7.3020204@datafull.com>
References: <44338EC4.4020106@sophia.inria.fr>
	 <4433D6B7.3020204@datafull.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Wed, 05 Apr 2006 17:26:33 +0200
Message-Id: <1144250793.1575.90.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 17:18:37 -0000

Le mercredi 05 avril 2006 à 11:39 -0300, Fernando Cacciola a écrit :

> Regarding the pass by-value vs by-const-reference discussion, it is 
> important to consider that the fields of this POD are floating point types.
> A compiler will use a register to pass the address of the interval in 
> the pass-by-const-reference case, but that's the wrong register...
> When the interval fields are actually used inside the called function, 
> they will have to be loaded in the FPU registers.
> 
> The most efficient scenario occurs when the compiler elides the 
> copy-constructor and the calling function had already the fields of the 
> interval arguments (typically 2) already loaded in FPU registers. In 
> that case, there is no argument passing at all.

This is not completely true: except for trivial cases, there is argument
passing even when registers are used.

Consider the following example with a, b, c, and d four intervals. I
will assume that the multiplications are not inlined (otherwise there
would be no difference between pass-by-reference and pass-by-value with
any sane compiler). Let us call r0:r1 the registers used to return an
interval, and a0:a1 and a2:a3 the registers used to pass first and
second interval arguments.

e = (a * b) * (c * d)

First (the expression is symmetric, so order of evaluation does not
matter), a * b is computed and the result is stored in r0:r1. It cannot
stay there, since r0:r1 will also be used to get the result of c * d. It
cannot be directly moved to a0:a1, since a0:a1 will be used to store c.
So it is moved to another register pair d0:d1. Then, the product c * d
can be computed and its value is moved from r0:r1 to a2:a3. Finally the
content of d0:d1 is moved to a0:a1 and the last multiplication can be
launched.

So there is argument passing and its cost is far from negligible: the
content of six registers has to be moved around just to get the
arguments of the last multiplication in the right places. Moreover,
registers like d0:d1 are probably either caller-save or callee-save. So
somebody somewhere may have to save and restore their values on the
stack. And so on.

But I agree that this whole register mess is still cheaper than any
stack usage caused by passing-by-reference on processors that are not
register-starved.

Best regards,

Guillaume

From fernando_cacciola@datafull.com Wed Apr  5 11:46:24 2006
Received: from postino3.prima.com.ar (postino3.prima.com.ar [200.42.0.148])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k35IkMjd010697
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 11:46:23 -0700
Received: (qmail 71069 invoked from network); 5 Apr 2006 16:54:15 -0000
Received: from unknown (HELO ?192.168.1.100?)
	(fernando?cacciola@ciudad.com.ar@200.122.82.9)
	by postino3.prima.com.ar with SMTP; 5 Apr 2006 16:54:15 -0000
Message-ID: <4433F679.9000906@datafull.com>
Date: Wed, 05 Apr 2006 13:55:21 -0300
From: Fernando Cacciola <fernando_cacciola@datafull.com>
User-Agent: Debian Thunderbird 1.0.2 (X11/20050331)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] passing by value vs reference
References: <44338EC4.4020106@sophia.inria.fr>
	<4433D6B7.3020204@datafull.com> <1144250793.1575.90.camel@localhost>
In-Reply-To: <1144250793.1575.90.camel@localhost>
Content-Type: multipart/alternative;
 boundary="------------090509050105000404080501"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: fernando_cacciola@datafull.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 18:46:24 -0000

This is a multi-part message in MIME format.
--------------090509050105000404080501
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Guillaume Melquiond wrote:

>Le mercredi 05 avril 2006 à 11:39 -0300, Fernando Cacciola a écrit :
>
>  
>
>>Regarding the pass by-value vs by-const-reference discussion, it is 
>>important to consider that the fields of this POD are floating point types.
>>A compiler will use a register to pass the address of the interval in 
>>the pass-by-const-reference case, but that's the wrong register...
>>When the interval fields are actually used inside the called function, 
>>they will have to be loaded in the FPU registers.
>>
>>The most efficient scenario occurs when the compiler elides the 
>>copy-constructor and the calling function had already the fields of the 
>>interval arguments (typically 2) already loaded in FPU registers. In 
>>that case, there is no argument passing at all.
>>    
>>
>
>This is not completely true: except for trivial cases, there is argument
>passing even when registers are used.
>
>Consider the following example with a, b, c, and d four intervals. I
>will assume that the multiplications are not inlined (otherwise there
>would be no difference between pass-by-reference and pass-by-value with
>any sane compiler). Let us call r0:r1 the registers used to return an
>interval, and a0:a1 and a2:a3 the registers used to pass first and
>second interval arguments.
>
>e = (a * b) * (c * d)
>
>  
>
If  the FPU registers are stacked, like in the x86 family, it wouldn't 
be too uncommon, IMHO, for a compiler to do:

( a * b )

values stacked in st0,st1,st2,st3 in the FPU
result stored in st0,st1, and the FPU stack pointer moved to st2

( c * d )

values stacked in st2,st3,st4,st5 in the FPU
result stored in st2,st3, and the FPU stack pointer moved to st4

[( a * b )] * [( c * d )]

values for the subexpressions ALREADY stored in st0,st1,st2 and st3
final result stored in st0,st1


That is, stacked FPU registers allows the compiler to allocate the 
function frames (which is the problem in your example) without using the 
external memory-based stack or rearranging the registers manually.

Anyway, I was just pointing out the fact that pass-by-value allows reuse 
of FP registers (in non-inlined cases, of course, which is the point).
That's a fundamental source of FP optimizations even if it is only 
applicable to a fraction of the entire argument set.
Just consider that, for example, in the x86 architecture, storing a 
value back into memory may involve rounding besides the actual copy. 
Keeping values in the registers is more significant with floating-points 
than it is with integrals.

Best

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com


--------------090509050105000404080501
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Guillaume Melquiond wrote:
<blockquote cite="mid1144250793.1575.90.camel@localhost" type="cite">
  <pre wrap="">Le mercredi 05 avril 2006 &agrave; 11:39 -0300, Fernando Cacciola a &eacute;crit :

  </pre>
  <blockquote type="cite">
    <pre wrap="">Regarding the pass by-value vs by-const-reference discussion, it is 
important to consider that the fields of this POD are floating point types.
A compiler will use a register to pass the address of the interval in 
the pass-by-const-reference case, but that's the wrong register...
When the interval fields are actually used inside the called function, 
they will have to be loaded in the FPU registers.

The most efficient scenario occurs when the compiler elides the 
copy-constructor and the calling function had already the fields of the 
interval arguments (typically 2) already loaded in FPU registers. In 
that case, there is no argument passing at all.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
This is not completely true: except for trivial cases, there is argument
passing even when registers are used.

Consider the following example with a, b, c, and d four intervals. I
will assume that the multiplications are not inlined (otherwise there
would be no difference between pass-by-reference and pass-by-value with
any sane compiler). Let us call r0:r1 the registers used to return an
interval, and a0:a1 and a2:a3 the registers used to pass first and
second interval arguments.

e = (a * b) * (c * d)

  </pre>
</blockquote>
If&nbsp; the FPU registers are stacked, like in the x86 family, it wouldn't
be too uncommon, IMHO, for a compiler to do:<br>
<br>
( a * b )<br>
<br>
values stacked in st0,st1,st2,st3 in the FPU<br>
result stored in st0,st1, and the FPU stack pointer moved to st2<br>
<br>
( c * d )<br>
<br>
values stacked in st2,st3,st4,st5 in the FPU<br>
result stored in st2,st3, and the FPU stack pointer moved to st4<br>
<br>
[( a * b )] * [( c * d )]<br>
<br>
values for the subexpressions ALREADY stored in st0,st1,st2 and st3<br>
final result stored in st0,st1<br>
<br>
<br>
That is, stacked FPU registers allows the compiler to allocate the
function frames (which is the problem in your example) without using
the external memory-based stack or rearranging the registers manually. <br>
<br>
Anyway, I was just pointing out the fact that pass-by-value allows
reuse of FP registers (in non-inlined cases, of course, which is the
point). <br>
That's a fundamental source of FP optimizations even if it is only
applicable to a fraction of the entire argument set.<br>
Just consider that, for example, in the x86 architecture, storing a
value back into memory may involve rounding besides the actual copy.
Keeping values in the registers is more significant with
floating-points than it is with integrals.<br>
<br>
Best<br>
<br>
Fernando Cacciola<br>
SciSoft<br>
<a class="moz-txt-link-freetext" href="http://fcacciola.50webs.com">http://fcacciola.50webs.com</a><br>
<br>
</body>
</html>

--------------090509050105000404080501--
From first.i.last@comcast.net Wed Apr  5 12:11:57 2006
Received: from rwcrmhc13.comcast.net (rwcrmhc13.comcast.net [204.127.192.83])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35JBvjd010748
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 12:11:57 -0700
Received: from rmailcenter15.comcast.net ([204.127.197.125])
          by comcast.net (rwcrmhc13) with SMTP
          id <20060405171952m13003qs34e>; Wed, 5 Apr 2006 17:19:53 +0000
Received: from [71.192.84.143] by rmailcenter15.comcast.net;
	Wed, 05 Apr 2006 17:19:52 +0000
From: first.i.last@comcast.net
To: std-interval@compgeom.poly.edu
Date: Wed, 05 Apr 2006 17:19:52 +0000
Message-Id: <040520061719.13682.4433FC37000C44CE0000357222058861729B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
Subject: [std-interval] Initialization
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 19:11:57 -0000

There's an attribution missing in the original.

> Message: 1
> Date: Tue, 04 Apr 2006 20:57:00 -0500
> From: George Corliss <George.Corliss@marquette.edu>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <C0588E1C.38EC%George.Corliss@Marquette.edu>
> Content-Type: text/plain;	charset="US-ASCII"
> 
> Sylvain Pion wrote:

> >> Uninitialized.  The convention in C/C++ is to initialize to zero,
> >> but we agree that is not correct for intervals.  Whole is probably
> >> the best we can do.
> > 
> > I'm not convinced.  Initilization to [0,0] seems nice to me for
> > intervals because of homogeneity reasons with floating-point.
> > I could even imagine that the empty interval would make as much
> > sense as whole.
> > 
> > What makes you think that [0,0] is "not correct", and why 'whole'
> > would be better than 'empty' ?
> I agree that initialization of uninitialized intervals to [0,0] is easy, and
> it is consistent with floating-point practice.

Not always true.   For dynamic creation on the stack or heap there is no such promise.  For static initialization the promise is _not_ initialization to the value zero, but to the bitpattern all bits off, which may or may not produce a value of zero..

>  My reservation is that it can lead to violations of containment.
> 
> The issue is not with "our" code.  It is with users' code.  Floating-point
> arithmetic makes no promises of accuracy.  Intervals promise a guaranteed
> enclosure.  If a user mis-uses our tools and gets a violation of
> containment, WE will be blamed, not the programmer who forgot to initialize
> all variables.  I want to make it as difficult as possible for even
> incorrect code to lie.
> 
> Simple example:
>    interval Pi;
>    cout << "Pi is enclosed by " << Pi;
> 
> The result violates containment if the default initializer is either [0, 0]
> or Empty.  It is truthful if the initializer is Whole.

I find that to be just as misleading.  The problem is that the variable is named in a misleading manner.  If you use a more descriptive name you will not be mislead:

    interval Uninitialized;
    cout << "Pi is enclosed by " <<Uninitialized";

This puts the problem out of the domain of the standard and squarely on the back of the quality of the implementation of the application software.

For a case where the whole number line is a lie consider:

    cout << "e^(i*pi) is enclosed by " << whole();
> 
> Of course, no one would do that on purpose, but programmers DO sometimes use
> variables they have not initialized.

That's not the problem of the standard.  When there is a choice between minimizing user errors at the cost of hiding some of them versus indicating user errors at the cost of convenience, the choice should always be the latter because the former is unacceptable.

> 
> One easy-to-imagine case might define a variable by a complicated set of
> nested cases/ifs.  The programmer thinks all possible cases are covered, but
> misses one case.  In that case, the variable is not given a value, but the
> following code uses it, unaware that it might not have been assigned a valid
> value.

That is not something you fix by providing an initialization that is magically correct in all cases.  That is something you fix by creating an unambiguous indication that a variable has been used without being initialized.  Note that there have been software tools to do this for a long time.  In fact many compilers now perform this check automatically.  It is not always possible to detect at compile time, so a run-time flag/state/value is called for.

There is a strong concensus within the software engineering community that what used to be known as defensive programming hides errors.  The modern practice is to prefer exaggerations of errors over exaggerations of correctness.

Taken to the limit (reductio) the standard would have to forbid this
    interval target = 0;
    memset( &target, 0 );


> 
> Asserting that a set is empty is perhaps the strongest assertion one can
> make about a set.  Asserting that it is contained in the universal set is
> the weakest assertion one can make.  That is why I argue for Whole.

Whole is not the universal set.  Whole asserts that the value is a number.  But an uninitialized variable does not contain a number.

> 
> I'd like to have some special "undefined" value that would propagate like a
> NaN, but that is too much to ask for.

Why is it too much?  On IEEE platforms NaN is easily available.  And the standard already has a definition of a special (bad) numeric value for other platforms.  The proposal should at least include the provisions parallel to those already supported by the standard.

>  Whole does not lie.

There are cases where it does lie.  And in the cases where it does not lie it certainly hides software defects.

------------------------------

> Message: 4
> Date: Wed, 05 Apr 2006 05:13:15 -0600
> From: Alan Eliasen <eliasen@mindspring.com>
> Subject: Re: [std-interval] Re: Std-interval Digest, Vol 3, Issue 1
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <4433A64B.4000708@mindspring.com>
> Content-Type: text/plain; charset=us-ascii
> 
> first.i.last@comcast.net wrote:
> >>but we agree that is not correct for intervals.  Whole is probably
> >>the best we can do.
> > 
> > Yuck.  Empty is clearly superior to whole in that it has less 
> > chance of accidentally producing apparently sensible results.
> > And for production an uninitialized interval should not be
> > initialized.  After all,  C++ lacks basis support for array
> > initialization so any default initialization effort, like touching
> > every value in a big array, is just wasted time.
> 
>    I think that there should *never* be a zero-arg default constructor
> for intervals.  All constructors should have at least one argument to
> force the programmer to declare their intent.  There's no point to a
> zero-argument constructor, because allowing such gives the programmer
> *lots* of ways to mess up and use uninitialized objects.  If you want to
> use an interval, you should provide reasonable arguments to it in a
> constructor.  That way, you *never* get an Interval object that hasn't
> been initialized to a known value.  A huge class of errors is eliminated
> at compile-time!
> 
>    In my interval implementations in Java, there's no way to construct
> an interval without specifying its values.  There's no reason to allow a
> "default" interval.  I believe in constructing APIs that eliminate
> sources of expected programmer error at compile-time.  This is an
> obvious case.
> 
>    There is simply no reason to allow a "default" interval initialized
> to a value that we *know* isn't right for anything.  We can prevent this
> mess at compile time, and should.

The reaction of a practicing software engineer to the above suggestion is to get out his garlic and silver crucifix and back away slowly sreaming CHANGE IN SCOPE!

Is the goal to incrementally add intervals to C++ as a kind of monotonic action or is there a willingness to force changes in the basic architecture of the language?

1. Some standard containers require default ctors.
2. Dynamic arrays (but not static arrays) require default ctors.
3. We should not make correctness promises for intervals that exceed the promises that:
    a. we can keep
           Uninitialized intervals would still exist because the user can:
                      interval * p = (interval *) malloc(100);
    b. already exist the language for similar types
           No matter what the standard says users are going to treat intervals as alternative
           forms of floating point.  So we should minimize the variations with existing C++
           numeric practice in both positive and negative directions.

The best way to get this issue into the standard is to propose that the standard recommend but not require a diagnostic.

=============================================

-- Lee Winter

From first.i.last@comcast.net Wed Apr  5 12:46:34 2006
Received: from rwcrmhc13.comcast.net (rwcrmhc13.comcast.net [204.127.192.83])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35JkYjd010783
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 12:46:34 -0700
Received: from rmailcenter76.comcast.net ([204.127.197.158])
          by comcast.net (rwcrmhc13) with SMTP
          id <20060405175425m13003ro4be>; Wed, 5 Apr 2006 17:54:30 +0000
Received: from [71.192.84.143] by rmailcenter76.comcast.net;
	Wed, 05 Apr 2006 17:54:25 +0000
From: first.i.last@comcast.net
To: std-interval@compgeom.poly.edu
Date: Wed, 05 Apr 2006 17:54:25 +0000
Message-Id: <040520061754.14096.44340450000EE56F0000371022064244139B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
Subject: [std-interval] Tags
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 19:46:34 -0000

> ----------------------------------------------------------------------
> Message: 1
> Date: Tue, 04 Apr 2006 20:57:00 -0500
> From: George Corliss <George.Corliss@marquette.edu>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <C0588E1C.38EC%George.Corliss@Marquette.edu>
> Content-Type: text/plain;	charset="US-ASCII"
> 
> Sylvain Pion wrote:

> >>  Aside: The next day, we visited Berkeley and
> >> talked with Jim Demmel and Bill Kahan.  Among other things, Kahan
> >> wants user-defined data types to be tagged.  If we have the
> >> Kahan-suggested tag, we can tag intervals as Uninitialized.
> > 
> > Could you elaborate on this tag ?  What would it do ?
> > Would this be a run-time feature of the objects telling if
> > they are initialized or not ?  Can't this be left to some
> > "debug mode" ?
> Let me explain Kahan's reasoning, as well as I am able.
> 
> The request is that a tag be permitted by the standard.  As I understand it,
> what would be required is to remove the phrase that an interval is
> represented by two values.  The down side, of course, is that it is harder
> to know how much memory an interval may require.

That's what sizeof() is for.  Users who "know" the sizes of types are  sources of errors.  Let's not encourage them.

> 
> If we are permitted a tag, the tag can be used in MANY different ways within
> an implementation.  The tag could be an attribute, or it could be a pointer
> to a complicated internal data structure of properties of the interval.  The
> most extreme case I can think of is that the tag might point to the Abstract
> Syntax Tree that generated the interval, allowing run-time symbolic
> processing.
> 
> In most implementations I can imagine, the tag could be used for
> "uninitialized," "exterior interval," various flavors of NaN, precision in a
> multiple precision implementation, and the like.  If we want a (center,
> radius) implementation, a tag could distinguish semi-infinite intervals, or
> it could distinguish [lo, hi] from (center, radius) intervals.

Logically a tag is just a container for properties.  The existence of tags in the proposal might lead to questions about how they will be used and a demand for standardized properties.  That demand should be refused as premature.  The issue is not standardizing the properties but allowing implementors to create them directly rather than as shadow variables with the associated extremely high performance costs.

==================

-- Lee Winter

From fernando_cacciola@datafull.com Wed Apr  5 13:24:23 2006
Received: from postinofz1.prima.com.ar (postinofz1.prima.com.ar
	[200.42.0.149])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k35KOLjd010830
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 13:24:21 -0700
Received: (qmail 42286 invoked from network); 5 Apr 2006 18:32:17 -0000
Received: from unknown (HELO SciSoft0) (200.122.82.9)
  by postinofz1.prima.com.ar with SMTP; 5 Apr 2006 18:32:17 -0000
Message-ID: <007401c658df$6b032f80$6401a8c0@SciSoft0>
From: "Fernando Cacciola" <fernando_cacciola@datafull.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
References:
	<040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net><4433A64B.4000708@mindspring.com>
	<1144237348.1575.11.camel@localhost> <4433DC2F.8080604@sophia.inria.fr>
Subject: Re: [std-interval] default constructor
Date: Wed, 5 Apr 2006 15:33:20 -0300
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=response
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2180
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Fernando Cacciola <fernando_cacciola@datafull.com>, For discussions
	concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 20:24:23 -0000

Sylvain Pion wrote:
> Here is the summary of the various options I saw:
>
> 1- no default constructor at all
> 2- [0,0]
> 3- empty
> 4- whole
> 5- uninitialized tag
> 6- see below (something a la "singular iterator")
>
> ...
>
> Let me propose 6-:
>
> We can do something similar to the "singular values"
> of standard iterators.  That is, the default constructed
> value is considered "uninitialized", and the standard would
> only allow assignment on such an uninitialized value.
> Only assignment from a non-uninitialized interval makes
> it non-uninitialized.  And all other operations on
> uninitialized intervals have undefined behavior (which
> means everything can happen including WWIII).
>
> This way, we can simply use the default compiler-generated
> default constructor.

I like this.
It allows the implementation to deal with uninitialization in the best 
possible way given its particular target.

I wonder if, for all the other operations, unspecified behaviour isn't 
better than undefined behaviour?
An implementation will have to define this one way or another I think.

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com/



From eliasen@mindspring.com Wed Apr  5 13:41:13 2006
Received: from elasmtp-banded.atl.sa.earthlink.net
	(elasmtp-banded.atl.sa.earthlink.net [209.86.89.70])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35KfDjd010870
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 13:41:13 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=cOEAW52D0V3QJupdnKl0Lnw2S5f41BXnPxG1GDbX8Yi7kWxRZ32n44LIMwIpk119;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by elasmtp-banded.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1FRD42-00087l-8D
	for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 14:49:10 -0400
Message-ID: <44341121.9090206@mindspring.com>
Date: Wed, 05 Apr 2006 12:49:05 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	<4433AF44.8020308@sun.com>
In-Reply-To: <4433AF44.8020308@sun.com>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45075a569b048509bad654b63fa7c4ee2284350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 20:41:13 -0000

Steve Clamage wrote:


>> Bill Clarke wrote:
>>
>>> This experiment is extremely platform specific, as you probably are
>>> aware.  Most platforms in use today other than x86 will be the other way
>>> around (add-by-value will be faster than add-by-const-ref).

Alan Eliasen wrote:
>>    How can that assertion possibly be made?  As you know, if a parameter
>> is passed by value, then the copy constructor is automatically called
>> for each object (e.g. twice for an add operator) on function entry, and
>> then the destructor is called (twice) on function exit.
> 

Steve Clamage wrote:
> A simple object like complex or interval should have no user-defined
> copy constructor or destructor. That is, the default copy constructor
> generated by the compiler does the right thing and does not need to be
> user-defined. The destructor has nothing to do, and so should not be
> user-defined. In that case, pass-by-value can be optimized into register
> passing with no additional copying.

   You still agree, though, that even if the implementation doesn't do
memory allocation in the constructor, the compiler will still generate a
copy constructor and a destructor, (perhaps pretty simple and efficient)
and these will get normally get called in a pass-by-value.  Again, a
very smart compiler can optimize these away if it realizes that the copy
is unnecessary, but by simply specifying call-by-constant-reference, we
don't have to hope that the compiler is very smart.  We simply eliminate
even the possibility of calling the copy constructor and destructor.

> It is possible to construct a test case where pass-by-value gives worse
> performance than pass-by-reference, and your example does indeed run
> faster with pass-by-reference using Sun compilers at low optimization.

   As noted, it should always be the case that pass-by-value is at least
as slow as pass-by-constant-reference because of the overhead of calling
the copy constructors and destructors, which are almost always
unnecessary and can be trivially eliminated by specifying the calling
convention.  If it's ever faster, I'd argue that it's because the
compiler missed obvious optimizations for pass-by-constant-reference, or
is allocating registers badly.

> At high optimization, the compiler eliminated the loops and all but one
> call to "add", which it inlined. I played with the test case for a short
> time, but was unable to defeat the optimizer with minor changes.

   Heh!  That's a smart compiler!  I had considered adding some
randomization to the values to eliminate this possibility, but the
timing values would have likely been swamped by the random number generator.

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From eliasen@mindspring.com Wed Apr  5 13:45:16 2006
Received: from elasmtp-banded.atl.sa.earthlink.net
	(elasmtp-banded.atl.sa.earthlink.net [209.86.89.70])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35KjGjd010884
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 13:45:16 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=R+LsiJazE3zk/NsWKZJ/BvAsJerebWVcNouj5lu7cw8gR4E9THF1H1hM0yMQKba7;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by elasmtp-banded.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1FRD7x-00067I-GE
	for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 14:53:13 -0400
Message-ID: <44341214.90302@mindspring.com>
Date: Wed, 05 Apr 2006 12:53:08 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org>  <4433A182.7060405@mindspring.com>
	<1144238135.1575.25.camel@localhost>
In-Reply-To: <1144238135.1575.25.camel@localhost>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45074888d45d87f106167c50a438f215dd13350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 20:45:16 -0000

Guillaume Melquiond wrote:
> Please note that our proposed interval type is meant to be a POD (plain
> old data) type and as such has no copy constructor nor destructor. As a
> consequence, on some architectures and with non-broken compilers, they
> will behave no differently than if the function arguments were simply
> integers; except that the register will probably be bigger, or two
> registers will be used. When this happens, passing by value will be
> faster than passing by const-reference. Indeed there is no architecture
> such that foo(int) is slower than bar(int const &).

   As a "primitive" type, int is a different case than an object,
though.  Please note that calling foo(Interval a) normally requires a
call to a copy constructor and a call to the destructor if Interval is a
class.  This (probably unnecessary) call to the copy constructor and
destructor is always eliminated when calling foo(const Interval&).

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From eliasen@mindspring.com Wed Apr  5 14:20:05 2006
Received: from smtpauth08.mail.atl.earthlink.net
	(smtpauth08.mail.atl.earthlink.net [209.86.89.68])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35LK4jd011218
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 14:20:05 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=UcWbP/kA/y8rHmZg5zojmDIzMv/RL3gu+oJ81yYX1ARtuwRbWtCO64mY18V1vNTM;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by smtpauth08.mail.atl.earthlink.net with asmtp (Exim 4.34)
	id 1FRDfe-00073W-Lw; Wed, 05 Apr 2006 15:28:03 -0400
Message-ID: <44341A3D.8070502@mindspring.com>
Date: Wed, 05 Apr 2006 13:27:57 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: Lawrence.Crowl@sun.com,<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <200604051224.k35COsbd029560@philmont.sfbay.sun.com>
In-Reply-To: <200604051224.k35COsbd029560@philmont.sfbay.sun.com>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45078beb30d83f887963e0811e78e87f0333350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 21:20:05 -0000


> Alan Eliasen <eliasen@mindspring.com> writes:
>  >   I was curious to see about the speed difference between passing by
>  >value and passing by reference, because passing by value always has been
>  >slower and always *has* to be slower because it (unnecessarily) creates
>  >a copy of the object when passed in.

Lawrence.Crowl@sun.com wrote:
> It does not unnecessarily create an object.  In particular, when the
> parameter to a function is the result of an expression, the const ref
> approach requires allocating a temporary and passing its address.  In
> contrast, pass-by-value can put the result of the expression directly
> into the parameter register; no copies are required.

   This is totally implementation-dependent in the compiler.  Of course,
a smart compiler could put the result of pass-by-constant reference into
a register too.  It may already be in a register.

   It could be argued that pass-by-value *always* creates temporaries
because of calls to the copy constructor for each argument passed in to
a function or method.  As I noted before, a smart compiler can optimize
this away, but these copy constructor calls are almost always unnecessary.

>  >I tried three ways on x86_64, gcc 3.4.4, linux:
> 
> I would need the benchmark source in order to evaluate it and to
> execute it on other systems.

   That was posted last night.  My benchmark was very simple indeed, and
you may choose to write your own.

> In developing the SPARC V9 ABI, I showed a 7x performance advantage for
> pass-by-value over pass-by-reference when computing Mandelbrot with
> complex numbers.

   That's an impressive difference!  I'd like to see that benchmark
source too and test it on other compilers.

>  >   Passing in unmodifiable objects as constant references when
>  >appropriate both obviates the need for copying and gives explicit
>  >const-correctness from the start.  We don't have to worry about
>  >dereferencing pointers or memory ownership issues.  It's indeed the
>  >pattern followed by most modern libraries.
> 
> You are assuming that "const" means "unmodifiable".

   No, of course I'm not.

> It does not.  It
> means that non-mutuable fields may not change when accessed through the
> const-qualified name.  The object may still change via access through
> non-const-qualified names.  The distinction between a value and a
> reference is critical here, because the former is unaliased and the
> latter is potentially aliased.  This aliasing can also have substantial
> effect on the ability of the compiler to apply global optimizations.

   I can see the point that aliasing could be an issue if functions are
modifying the objects passed in.  That would seem to me to be very bad
programming practice, (one in which explicitly declaring const-ness
would help the compiler point these out.)

   If the issue is complete safety against bad programmers, then we
should do pass-by-value everywhere and copy the object every time it's
used.  It'd be safer.

   However, my entire point earlier was to argue against the statements
made that pass-by-value would or should be faster.  My benchmarks showed
that in the most common compilers used in the world, on the most common
hardware architectures, that pass-by-value indeed wasn't faster, but
rather significantly slower at all optimization levels.  I'd be
interested to see a platform where the reverse was true.

>  >   I recommend that for long-term performance and const-correctness,
>  >that objects be passed as constant references when possible.
> 
> Would you recommend that ints be passed by const reference?

   Of course not.  That's why I said "objects", meaning instantiations
of classes.  ints don't incur copy constructors and destructors like
objects do when passed as function arguments.  To save time, let's
assume that any other rookie mistakes that you might want to try to
ascribe to me in an effort to make me look foolish will also be answered
the same way.  :)

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From eliasen@mindspring.com Wed Apr  5 14:41:24 2006
Received: from smtpauth08.mail.atl.earthlink.net
	(smtpauth08.mail.atl.earthlink.net [209.86.89.68])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35LfOjd011271
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 14:41:24 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=tu6n5VJyp/zmTesjgN/fJlJQEPLgMHKQMN4bTw1Z8Q7wQmrP5wvTwOvdSHNOZhjc;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by smtpauth08.mail.atl.earthlink.net with asmtp (Exim 4.34)
	id 1FRE0I-0002XF-84
	for std-interval@compgeom.poly.edu; Wed, 05 Apr 2006 15:49:22 -0400
Message-ID: <44341F40.1060104@mindspring.com>
Date: Wed, 05 Apr 2006 13:49:20 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] default constructor
References:
	<040520060638.24353.443365E40003CC6700005F2122007610649B9C0E04D207D29B9C9D0700@comcast.net>
	<4433A64B.4000708@mindspring.com> <1144237348.1575.11.camel@localhost>
In-Reply-To: <1144237348.1575.11.camel@localhost>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac4507722b081a441016a95f679bde00fcd5e2350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 21:41:24 -0000

Guillaume Melquiond wrote:
> Le mercredi 05 avril 2006 à 05:13 -0600, Alan Eliasen a écrit :

>>   I think that there should *never* be a zero-arg default constructor
>>for intervals.  All constructors should have at least one argument to
>>force the programmer to declare their intent. 

> This is too strong a requirement. Forbidding arrays of intervals is a
> sure way of alienating any C++ user. You need a default constructor if
> you don't want the users to go to great and error-prone lengths to
> create arrays (or any higher-level containers).

   Okay, I concede this point, although it is dangerous.

   I would then consider the previous proposal that an interval is
initialized to an "uninitialized" value which causes errors or
propagates itself like NaN if used in a calculation.

   As you may know, there's more than one type of NaN.  There are
"quiet" and "signaling" NaNs.  Quiet NaNs just quietly propagate
themselves in floating-point calculations, like additions or multiplies,
and you'll generally notice them later, but this is incredibly dangerous
if you use them in a boolean expression like:

   if (NaN < 3)
      ...

   or

   if (NaN == NaN)        // (always returns false!)

   Which *doesn't* give you a way of knowing if your calculations were
"poisoned" by this meaningless comparison.

   On the other hand, if you use "signaling" NaNs, attempts at
performing the above comparisons would produce a floating-point error.

   As a result, in a former product, we chose to have switchable NaN
behavior.  In a developer/debug environment, we used signaling NaNs to
find errors of this sort immediately.  We may consider switchable
similar behavior for the Interval standard.  Using an "uninitialized"
interval in a calculation could produce an immediate error or exception.
  This behavior could also be switched off (but I can't think of a good
reason why except it could be faster as a check for uninitialized could
be eliminated.)  I haven't seen nor produced a concrete proposal for
this, but I think it should be considered strongly.

   In fact, the Interval specification could use the above behavior and
initialize itself to NaN (quiet or signaling) to prevent use of
uninitialized Intervals.

   As noted before, simply "poisoning" the results by propagating
uninitialized values isn't enough.  We have to have some way of
indicating errors in boolean comparisons.  What's our proposed policy on
exceptions?

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From gdr@integrable-solutions.net Wed Apr  5 16:20:25 2006
Received: from mallaury.nerim.net (smtp-103-wednesday.noc.nerim.net
	[62.4.17.103])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35NKPjd011375
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 16:20:25 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by mallaury.nerim.net (Postfix) with ESMTP id 174214F3BF
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 23:28:06 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k35LQptZ023422
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 23:26:51 +0200
Received: (from gdr@localhost)k35LQp81023421;
	Wed, 5 Apr 2006 23:26:51 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	<4433AF44.8020308@sun.com> <44341121.9090206@mindspring.com>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <44341121.9090206@mindspring.com>
Organization: Integrable Solutions
Date: 05 Apr 2006 23:26:51 +0200
Message-ID: <m3wte3soh0.fsf@uniton.integrable-solutions.net>
Lines: 53
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 23:20:25 -0000

Alan Eliasen <eliasen@mindspring.com> writes:

| Steve Clamage wrote:
| 
| 
| >> Bill Clarke wrote:
| >>
| >>> This experiment is extremely platform specific, as you probably are
| >>> aware.  Most platforms in use today other than x86 will be the other way
| >>> around (add-by-value will be faster than add-by-const-ref).
| 
| Alan Eliasen wrote:
| >>    How can that assertion possibly be made?  As you know, if a parameter
| >> is passed by value, then the copy constructor is automatically called
| >> for each object (e.g. twice for an add operator) on function entry, and
| >> then the destructor is called (twice) on function exit.
| > 
| 
| Steve Clamage wrote:
| > A simple object like complex or interval should have no user-defined
| > copy constructor or destructor. That is, the default copy constructor
| > generated by the compiler does the right thing and does not need to be
| > user-defined. The destructor has nothing to do, and so should not be
| > user-defined. In that case, pass-by-value can be optimized into register
| > passing with no additional copying.
| 
|    You still agree, though, that even if the implementation doesn't do
| memory allocation in the constructor, the compiler will still generate a
| copy constructor and a destructor, (perhaps pretty simple and efficient)
| and these will get normally get called in a pass-by-value.  Again, a
| very smart compiler can optimize these away if it realizes that the copy
| is unnecessary, but by simply specifying call-by-constant-reference, we
| don't have to hope that the compiler is very smart.  We simply eliminate
| even the possibility of calling the copy constructor and destructor.

Steve and Lawrence have been working on C++ and C++ compilers, long
long before I even knew the language existed -- let alone, started
working on C++ libraries and compilers.  Their inputs in that area
should not be taken lightly.
I know of no existing production C++ compilers that run trivial
destructors, or that do not implement trivial copy-constructor
appropriately (given ABI requirements) at usual optimization level.
If you find one, I would encourage you to report it to your vendor.
TC++PL3 has guidance, I believe, on exactly this point.  

You're right that we don't have to hope the compiler is very smart:
The compilers are already doing it; so that is a non-issue.

When you make your proposal to the committee, do expect that 
making pass-by-const-ref where it should have been pass-by-value (as
suggested by Lawrence and Steve) be a contentious point to resolve.

-- Gaby
From gdr@integrable-solutions.net Wed Apr  5 16:26:44 2006
Received: from mallaury.nerim.net (smtp-103-wednesday.noc.nerim.net
	[62.4.17.103])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35NQhjd011392
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 16:26:44 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by mallaury.nerim.net (Postfix) with ESMTP id 119C14F399
	for <std-interval@compgeom.poly.edu>;
	Wed,  5 Apr 2006 23:34:30 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k35LXFtZ023448
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 23:33:15 +0200
Received: (from gdr@localhost)k35LXF9H023447;
	Wed, 5 Apr 2006 23:33:15 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	<1144238135.1575.25.camel@localhost> <44341214.90302@mindspring.com>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <44341214.90302@mindspring.com>
Organization: Integrable Solutions
Date: 05 Apr 2006 23:33:15 +0200
Message-ID: <m3r74bso6c.fsf@uniton.integrable-solutions.net>
Lines: 28
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 23:26:44 -0000

Alan Eliasen <eliasen@mindspring.com> writes:

| Guillaume Melquiond wrote:
| > Please note that our proposed interval type is meant to be a POD (plain
| > old data) type and as such has no copy constructor nor destructor. As a
| > consequence, on some architectures and with non-broken compilers, they
| > will behave no differently than if the function arguments were simply
| > integers; except that the register will probably be bigger, or two
| > registers will be used. When this happens, passing by value will be
| > faster than passing by const-reference. Indeed there is no architecture
| > such that foo(int) is slower than bar(int const &).
| 
|    As a "primitive" type, int is a different case than an object,
| though.  Please note that calling foo(Interval a) normally requires a
| call to a copy constructor and a call to the destructor if Interval is a
| class.

That is an abstract requirement -- remember the "as if rule".
In the real practice, I have not see any modern production C++
compiler run trivial destructor or trivial copy-constructor for POD,
i.e., they don't do anything beyond what they would have done for C
struct. 

People seem to focuse on what it costs to copy data in function call;
I would suggest that the focus should be what it costs to access data
when inside the called function.

-- Gaby
From first.i.last@comcast.net Wed Apr  5 16:41:07 2006
Received: from rwcrmhc12.comcast.net (rwcrmhc12.comcast.net [204.127.192.82])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35Nf6jd011414
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 16:41:06 -0700
Received: from rmailcenter15.comcast.net ([204.127.197.125])
          by comcast.net (rwcrmhc12) with SMTP
          id <20060405214848m1200knj47e>; Wed, 5 Apr 2006 21:49:06 +0000
Received: from [71.192.84.143] by rmailcenter15.comcast.net;
	Wed, 05 Apr 2006 21:48:47 +0000
From: first.i.last@comcast.net
To: std-interval@compgeom.poly.edu
Date: Wed, 05 Apr 2006 21:48:47 +0000
Message-Id: <040520062148.13911.44343B3E0006F8000000365722058861729B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
Subject: [std-interval] Parameter passing
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 23:41:07 -0000

 -------------- Original message ----------------------
From: std-interval-request@compgeom.poly.edu
> Send Std-interval mailing list submissions to
> 	std-interval@compgeom.poly.edu
> 
> ------------------------------
> Message: 3
> Date: Tue, 04 Apr 2006 23:20:27 -0600
> From: Alan Eliasen <eliasen@mindspring.com>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <4433539B.5000604@mindspring.com>
> Content-Type: text/plain; charset=us-ascii
> 
> 
> George Corliss wrote:
> >> Lawrence feels strongly that the standard should be to pass by
> >> value.  Intervals are small data structures; by value allows them
> >> to be passed in registers for speed.  That is how the current Sun
> >> C++ compiler works.  There is no reason to follow the C++ complex
> >> standard.  The library is often taken as an example by coders, and
> >> there is no good reason to follow the tradition of C from 20 years
> >> ago that structures should be passed by reference.
> 
> Sylvain Pion wrote:
> > I don't have any strong opinion on this.
> > I only did a very local experiment on some code of mine on x86, and
> > changing to pass-by-value slowed the code down a bit.
> 
>    I was curious to see about the speed difference between passing by
> value and passing by reference, because passing by value always has been
> slower and always *has* to be slower because it (unnecessarily) creates
> a copy of the object when passed in.

No it does not have to be slower.  First, the pass-by-value copies created by 
the constructor can be optimized away in some cases, especially when inlining is 
active.  Second, on primitive architectures such as x86 pass by reference is 
much worse because the compiler cannot create the address of a value in the FPU.  
So it has to copy the values back to the CPU and write them to memory (always a 
BadThing(tm)) typically on the stack.  The region around the top-of-stack 
usually has good cache response so a cache miss will be rare.  But writing a 
value to memory is still expensive.  Then the addrss is passed to the receiving 
routine which copies the values back into the FPU to operate upon them.  
Efficient this is not.

Compare that sequence with the worst case pass-by-value which takes two FPU 
instructions to duplicate a value on the FPU stack.  Those instructions are 
extremely common, and thus heavily optimized.  On the more deeply pipelined FPUs 
with register renaming the copy might take zero time.  If the values are not 
modified the copies might be eliminated completely (by a post-optimizer) even if 
the copy constructor is called and generates the copy instructions.

Optimizing floating point is a treacherous area even within the implementation 
variations of a single generation of a single architecture.  It will never make 
it into the standard because the Committee will almost certainly object to 
mandates that restrict implementor's freedom to implement.

>  I tried three ways on x86_64, gcc

[omitted]

In general these kinds of tests are not useful because they are not reliable 
guidelines.  They rely upon the competence of the compiler which can only be 
determined by inspecting the code generated.

>    There's a bit of noise in the numbers, but passing by value is always 
significantly slower.

On that machine with that compiler.  Others mileage will _certainly_ vary.

>    Also ran on x86 Windows.  Pattern was the same.  With -O2, passing by
> value took about 2.6 times as long!

See what turning off optimizations can do to you?  If you inspect the generated 
code you are going to find lots of silly register transfers.

> 
>    I didn't test passing by pointer, but I can.
> 
>    Passing in unmodifiable objects as constant references when
> appropriate both obviates the need for copying and gives explicit
> const-correctness from the start.  We don't have to worry about
> dereferencing pointers or memory ownership issues.  It's indeed the
> pattern followed by most modern libraries.

Over specification is always a mistake unless the target platform is very 
narrowly defined.  See some of Bernstein's work on optimization wherein the 
comments in the C code are actually the assembly instructions he expects to 
generate on a specific platform.

> ------------------------------
> 
> Message: 4
> Date: Wed, 05 Apr 2006 16:27:51 +1000
> From: Bill Clarke <llib@computer.org>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <44336367.9060400@computer.org>
> Content-Type: text/plain; charset="iso-8859-1"
> 
> Alan Eliasen wrote, On 04/05/06 15:20:
> > George Corliss wrote:
> >>>Lawrence feels strongly that the standard should be to pass by
> >>>value.  Intervals are small data structures; by value allows them
> >>>to be passed in registers for speed.
> [...]
> >    I was curious to see about the speed difference between passing by
> > value and passing by reference, because passing by value always has been
> > slower and always *has* to be slower because it (unnecessarily) creates
> > a copy of the object when passed in.  I tried three ways on x86_64, gcc
> > 3.4.4, linux:
> [...]
> >    To the caller of the functions, it just looks like an ordinary
> > pass-by-value, but is faster, and allows the compiler to catch a lot of
> > types of problems.
> > 
> >    I recommend that for long-term performance and const-correctness,
> > that objects be passed as constant references when possible.
> 
> This experiment is extremely platform specific, as you probably are
> aware.  Most platforms in use today other than x86 will be the other way
> around (add-by-value will be faster than add-by-const-ref).
> (Was this 64-bit code?  I thought x86_64 would be faster with
> pass-by-value since I got the impression the ABI passed parameters in
> registers)

Long doubles won't fit.  And typical argument passing occurs int he CPU 
registers rather than on the FPU stack.

> 
> With inlining then they should be identical (perhaps you could re-run
> your experiment with inlining to verify this?).
> 
> Surely it is possible to permit the implementer to choose the parameter
> passing convention, between pass-by-value and pass-by-const-ref?  It
> should have no visible impact on the programmer which is used.

Exactly.

----------------------------------------------------------------------
> 
> Message: 1
> Date: Wed, 05 Apr 2006 01:02:40 -0700
> From: Steve Clamage <Stephen.Clamage@Sun.COM>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <443379A0.7010800@sun.com>
> Content-Type: text/plain; charset=us-ascii; format=flowed
> 
> Bill Clarke wrote:
> > 
> > Surely it is possible to permit the implementer to choose the parameter
> > passing convention, between pass-by-value and pass-by-const-ref?  It
> > should have no visible impact on the programmer which is used.
> 
> The standard can state, for example, that that whether a parameter is passed 
by 
> value or by reference is implementation-defined, meaning that an 
implementation 
> can choose either and must document the choice. Or it could say that the 
choice 
> is unspecified, meaning that the implementation does not need to document what 
> it does, and does not need to be consistent.
> 
> The choice can have an effect on programmers, however, since the types of the 
> functions
>    interval foo(interval);
>    interval foo(const interval&);
> are different.

This is not an appropriate example.  The counter is as follows:

----- platform1.h, value -----
    typedef  IntervalArg  Interval;

----- platform2.h, ref2const -----
    typedef  IntervalArg  Interval const &;

----- Interval.h, agnostic -----
    interval atan2( IntervalArg Y, IntervalArg X );

----- User.cpp, agnostic -----
    void slope( IntervalArg height, IntervalArg width )
    {
        return atan2( height, width );
    }

This approach gives user code the portability benefit of the argument type with 
no user-level platform dependency.

> 
> 1. If you create a function pointer interval(*)(interval), it cannot be used 
to 
> hold the address of "interval foo(const interval&)". I don't know of a 
> convenient way to deal with this problem, where you need to modify your code 
> based on details of a predefined type.

You don't need to modify code that uses an abstract argument type.  It is rare 
that it matters, but it can for templates, type_info, RTTI, and other 
type-sensitive constructs.  But that can be solved by giving IntervalArg a 
static member such as shown below:

----- platform2.h, ref2const -----
    class IntervalArg {
        interval const & ref_to_const;
        static int /* can't be bool */ const by_value = false;
    };

> 
> 2. The result of typeid(foo) is different in the two cases, which can affect 
the 
> operation of a program.
>      interval bar(const interval&);
>      if( typeid(foo) == typeid(bar) ) ...
> 
> That said, it is already the case that member functions of classes in the 
> standard library are explicitly allowed to vary from the exemplars listed in 
the 
> standard. But the implementation is required to accept code that is valid for 
> the exemplars.

So we provide an exemplar that is abstract and maximize the freedom of the 
implementors.  Note that the definition of IntervalArg might vary based on the 
compile-time switches provided to the translator.

> 
> Example: An implementation can add a default parameter to a class member 
> function. If the standard says this:
>       class Foo {
>       public:
>             fun(int);
>       };
> An implemtation can have this:
>      class Foo {
>      public:
>            fun(int, int=0);
>      };
> According to the standard, the following is valid:
>      Foo f;
>      f.fun(3);
> and indeed that code compiles with the modified implementation.
> 
> Similarly, code that can call one of the versions of the interval function foo 
> above can also call the other version.
> 
> My point is that allowing freedom of implementation is not without 
consequences 
> for C++ programmers, but there is already some precedent for that freedom of 
> implementation. We need to be aware of the potential problems for programmers, 
> and make a considered choice.

Let's not make a choice.  The one of the very worst problems in software 
engineering is premature optimization.  A choice now would be an instance os 
that haste.  Think of parameter typing as subject to delayed evaluation.  It 
should be delayed until the very last moment possible because that is the point 
in time at which the most information is avalable upon which to make a good 
decision.  Up until that point in time we hide the indecision behind an abstract 
type.

> ------------------------------
> 
> Message: 2
> Date: Wed, 05 Apr 2006 11:32:52 +0200
> From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
> Subject: [std-interval] passing by value vs reference
> To: std-interval@compgeom.poly.edu
> Message-ID: <44338EC4.4020106@sophia.inria.fr>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> 
> [ Let me create separate threads of discussion on each point. ]
> 
> 
> Summary of the arguments on this issue:
> 
> 1- pass by value can be faster or slower than pass by reference
>     depending on the processor/ABI.
> 2- pass by value can be faster due to removal of aliasing issues.
> 3- pass by value is safer in general as a programming idiom
>     (an example is operator*= which may need tweaking to protect
>      itself multipliying by *this)

I question this assertion (re safety, I understand op= quite well), but I doubt 
this issue will be decisive, so let's not pursue it until necessary.

> 4- pass by reference is consistent with std::complex

That is not a particularly attractive property.

> 5- having it specified is useful when taking addresses of functions.

That is false.  And having it specified is not neutral either.  It is a 
detriment -- it tends to embed platform degisn decision in user code, which is 
always a Bad Thing(tm).

> 
> 
> Possible solutions, assuming we want a uniform treatment for all
> functions on intervals:
> 
> 1- enforce pass-by-value
> 2- enforce pass-by-ref
> 3- leave freedom for the implementation to choose
> 4- leave freedom for the implementation and have it provide
>     a standard specified way to obtain this information.

5. Provide an abstraction that masks the issue from users so that only those 
concerned with the issue need deal with it, i.e., implementors.

> 
> 
> Now, I assume that users want the best performance on all
> compilers/processors, so I don't like 1 nor 2.
> I also do not see a large need for manipulating function
> pointers for the intervals, I never needed that personnaly
> at least (speak up if you think it is an important use case).
> If there is indeed no large need for these, and given that it
> is always possible (though painful) to write function wrappers
> to get function pointers, then I would prefer 3 to 4.  I think
> the complexity of implementing 4 is not worth it.  Moreover,
> specifying 4- can be proposed later as an addition (e.g. in
> the more general context of the whole standard library).

I agree but for different reasons.  There should be nothing in the standard that 
is no required by standardization.  If explicit manipulation of parameter types 
is perceived to be necessary (it is not so perceived by me), then an explicit 
type is called for.
But there is no showing that such explicit manipulation of parameter types is 
actually called for.  So the standard should use call-by-value syntax and allow 
call-by-ref2const semantics.

> 
> 
> So, as for the proper text in the proposal, let me propose:
> - to have the text of the function prototypes use pass-by-value,
>    as it fulfills the "advocate safer programming style" argument
>    of Lawrence, and it is also shorter.
> - a note at the beginning mentionning that the implementation
>    is free to use pass-by-reference.
> 
> 
> Does this seem reasonnable ?

Yes, but the proposal will need a rationale note explaining that implementors 
are explicitly permitted to vary the parameter handling as necessary to improve 
their quality of implementation.

> ------------------------------
> 
> Message: 3
> Date: Wed, 05 Apr 2006 04:52:50 -0600
> From: Alan Eliasen <eliasen@mindspring.com>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <4433A182.7060405@mindspring.com>
> Content-Type: text/plain; charset=us-ascii
> 
> Bill Clarke wrote:
> > This experiment is extremely platform specific, as you probably are
> > aware.  Most platforms in use today other than x86 will be the other way
> > around (add-by-value will be faster than add-by-const-ref).
> 
>    How can that assertion possibly be made?  As you know, if a parameter
> is passed by value, then the copy constructor is automatically called
> for each object (e.g. twice for an add operator) on function entry, and
> then the destructor is called (twice) on function exit.

Those function calls can be eliminated as unnecessary or optimized away after 
gode generation.  In many cases they will disappear when debugging is turned off 
and full optimization is turned on.

>  The passed-in
> objects should not be modified in the interim.  So pass-by-value
> *always* has completely unnecessary overhead.  There is absolutely no
> reason to copy and subsequently destroy the objects being passed in.
> Passing by constant reference will *always* be faster in this respect,
> as the copy constructors and destructors will never be called.

On some architectures/compilers this is true.  On others it is never true.

> 
>    The architecture doesn't matter.

Sure it does.  If there are no addresses for the memory holds operands for 
arithmetic instructions then mandating the creation of an address triggers huge 
overhead.  Suhc is life on platforms descended from calculator/watch chips.

>  Say, for an addition operator, if
> you pass by value, you're *always* incurring the additional overhead of
> two unnecessary object copies and two unnecessary object destructions.
> There is simply no advantage to pass-by-value over
> pass-by-constant-reference in any way.

On some popular architecture there is a huge advantage in avoiding the defects 
in the architecture.  Not all computer as carefully designed as a PDP-11.  There 
is a strong case for that claim that the most popular architecture wasn't really 
designed -- it "jest growd lak 'at".

>  Your compiler might be smart
> enough to optimize out the copies and destructions, but pass-by-value
> should *never* be faster with a reasonable compiler.

Our definitions of "reasonable" certainly differ.

> 
>    Why would one ever want the compiler to potentially call copy
> constructors and destructors when we *know* they're a total waste of
> cycles?  We can simply prevent that inefficiency in advance for all
> compilers.

Premature optimization cannot be justified no matter how good the underlying 
intentions are.

> 
> > (Was this 64-bit code?  I thought x86_64 would be faster with
> > pass-by-value since I got the impression the ABI passed parameters in
> > registers)
> 
>    As I mentioned in my original message, I did the test with both
> x86_64 code and x86.  The x86_64 code was 64-bit code, and those were
> the numbers cited.

But did you inspect the generated code?

> The difference in performance, as I noted, was even
> greater on the x86.  (Pass-by-value was about 1.7 times slower on
> x86_64, about 2.6 times slower on x86.)  Registers don't enter into the
> picture.

I don't understand that statement.  It is quite contrary to my experience.

>  Pass-by-constant-reference arguments can be passed in
> registers too, of course.
> 
>    The difference is that pass-by-value is likely to perform unnecessary
> copy constructors and unnecessary destructions.  There is simply no
> advantage to this, when we can be smart and tell even the dumbest
> compilers that these copying and destroying operations should never even
> be attempted.  Silly, useless performance problems (e.g. unnecessary
> copy constructor calls) will be avoided in advance.  That's a good thing.

That's what code optimizers are for.  These days they are quite smart about 
fixing the kind of simple inefficiencies you have mentioned.

> 
> > With inlining then they should be identical (perhaps you could re-run
> > your experiment with inlining to verify this?).
> 
>    The constructor was inlined.  I fail to see how inlining could ever
> make pass-by-value faster, as it always has unnecessary overhead.  A
> smart compiler could make it *as* fast as pass-by-constant-reference,
> but I can't see how it could ever make it faster.

Then try the experiment and see what happens to the inlined code sequence.  It 
can be quite a bit smaller/faster than an outlined function.

>  Specifying
> pass-by-constant-reference would simply eliminate a source of
> inefficiency with broken compilers.
> 
> > Surely it is possible to permit the implementer to choose the parameter
> > passing convention, between pass-by-value and pass-by-const-ref?  It
> > should have no visible impact on the programmer which is used.
> 
>    I agree that it should have no visible impact on the library user.
> But there is really no reason to *not* use pass-by-constant-reference.

If the argument for pass-by reference is so compelling than we should trust the 
implementors to be so compelled.  Otherwise the proposal should mandate either 
LSB-first or MSB-first memory layouts.  Anyone up for a food fight?  ;-) 

>  Even if you are doing lazy operations and need to modify some part of
> the passed-in object, you can always use the "mutable" keyword.
> 
>    In short, if you can find a compiler that does pass-by-value faster
> than pass-by-constant-ref, I'll show you a broken compiler.
> 
>    Specifying pass-by-constant-reference also allows the compiler to
> detect and prevent accidental modification of the objects being passed
> in, or erroneous programmer attempts to modify a passed-in object (which
> is probably never what you want to do, and should always fail.)
> 
>    Const-correctness is also a desirable goal, in my opinion.  It
> becomes prohibitive and breaks code to add const-correctness late in the
> game, which is why we should get it right the first time.

Const correctness should be a requirement.  But that does not have any effect 
upon calling conventions because both conventions can be const-correct.

> ------------------------------
> 
> Message: 6
> Date: Wed, 05 Apr 2006 04:51:32 -0700
> From: Steve Clamage <Stephen.Clamage@Sun.COM>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <4433AF44.8020308@sun.com>
> Content-Type: text/plain; charset=us-ascii; format=flowed
> 
> Alan Eliasen wrote:
> > Bill Clarke wrote:
> > 
> >>This experiment is extremely platform specific, as you probably are
> >>aware.  Most platforms in use today other than x86 will be the other way
> >>around (add-by-value will be faster than add-by-const-ref).
> > 
> > 
> >    How can that assertion possibly be made?  As you know, if a parameter
> > is passed by value, then the copy constructor is automatically called
> > for each object (e.g. twice for an add operator) on function entry, and
> > then the destructor is called (twice) on function exit.
> 
> A simple object like complex or interval should have no user-defined copy 
> constructor or destructor.

A desirable property, but unnecessarily restrictive.  In particular interval 
objects with explicit properties might not be PODs.  Histories of dependencies 
and restartable evaluations require pointers.  Pointer members will require an 
intelligent copy ctor and a deep dtor (modulo reference counting).

> That is, the default copy constructor generated by 
> the compiler does the right thing and does not need to be user-defined. The 
> destructor has nothing to do, and so should not be user-defined. In that case, 
> pass-by-value can be optimized into register passing with no additional 
copying.

That makes sense for PODs.  But any non-trivial imeplentations will not be able 
to use POD representations without fantastically high performance cost.

> ------------------------------
> 
> Message: 7
> Date: Wed, 05 Apr 2006 13:55:35 +0200
> From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> Subject: Re: [std-interval] C++ interval std
> To: std-interval@compgeom.poly.edu
> Message-ID: <1144238135.1575.25.camel@localhost>
> Content-Type: text/plain; charset=ISO-8859-1
> 
> Le mercredi 05 avril 2006 à 04:52 -0600, Alan Eliasen a écrit :
> > Bill Clarke wrote:
> > > This experiment is extremely platform specific, as you probably are
> > > aware.  Most platforms in use today other than x86 will be the other way
> > > around (add-by-value will be faster than add-by-const-ref).
> > 
> >    How can that assertion possibly be made?  As you know, if a parameter
> > is passed by value, then the copy constructor is automatically called
> > for each object (e.g. twice for an add operator) on function entry, and
> > then the destructor is called (twice) on function exit.  The passed-in
> > objects should not be modified in the interim.  So pass-by-value
> > *always* has completely unnecessary overhead.  There is absolutely no
> > reason to copy and subsequently destroy the objects being passed in.
> > Passing by constant reference will *always* be faster in this respect,
> > as the copy constructors and destructors will never be called.
> 
> Please note that our proposed interval type is meant to be a POD (plain
> old data) type and as such has no copy constructor nor destructor.

Is it your plan that the proposal include the POD-only requirement?  I would 
suggest that it is an obvious possibility that yeilds good performence 
improvements, but how important is it to get fat intervals quickly?

I would must prefer not to see such a requirement in the standard.

> As a
> consequence, on some architectures and with non-broken compilers, they
> will behave no differently than if the function arguments were simply
> integers; except that the register will probably be bigger, or two
> registers will be used. When this happens, passing by value will be
> faster than passing by const-reference. Indeed there is no architecture
> such that foo(int) is slower than bar(int const &).

Of course there is.  When addresses are narrow (fit in a register) and ints are 
wide (don't fit in a register).  64-bit code on 32-bit hardware.  32-bit code on 
16-bit hardware.  16-bit code on 8-bit hardware.  I've even worked on a 
bit-slice machine with 20-bit ints and 16-bit addresses.

----------------------------------------------------------------------
> 
> Message: 1
> Date: Wed, 05 Apr 2006 14:05:54 +0200
> From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> Subject: Re: [std-interval] passing by value vs reference
> To: std-interval@compgeom.poly.edu
> Message-ID: <1144238754.1575.37.camel@localhost>
> Content-Type: text/plain; charset=ISO-8859-1
> 
> Le mercredi 05 avril 2006 à 11:32 +0200, Sylvain Pion a écrit :
> 
> > 3- leave freedom for the implementation to choose
> > 4- leave freedom for the implementation and have it provide
> >     a standard specified way to obtain this information.
> 
> > I would prefer 3 to 4.  I think
> > the complexity of implementing 4 is not worth it.
> 
> I don't see any additional complexity in 4 with respect to 3. As already
> mentioned by Bill Clarke, you could simply have a typedef member in
> interval<T> to express the calling convention of the functions of the
> interval library: typedef interval<T> const &param_type;
> 
> This requires all the functions of the library to use the same calling
> convention.

How do you derive this requirement?  I don't see it.

> ------------------------------
> 
> Message: 2
> Date: Wed, 05 Apr 2006 05:24:54 -0700
> From: Lawrence.Crowl@Sun.com
> Subject: Re: [std-interval] C++ interval std 
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <200604051224.k35COsbd029560@philmont.sfbay.sun.com>
> 
> Alan Eliasen <eliasen@mindspring.com> writes:
>  >   I was curious to see about the speed difference between passing by
>  >value and passing by reference, because passing by value always has been
>  >slower and always *has* to be slower because it (unnecessarily) creates
>  >a copy of the object when passed in.
> 
> It does not unnecessarily create an object.  In particular, when the
> parameter to a function is the result of an expression, the const ref
> approach requires allocating a temporary and passing its address.  In
> contrast, pass-by-value can put the result of the expression directly
> into the parameter register; no copies are required.
> 
> Pass-by-reference aften introduces additional copies because the
> programmer must copy the parameter into a local variable in order to
> avoid aliases between parameters.
> 
>  >I tried three ways on x86_64, gcc 3.4.4, linux:
> 
> I would need the benchmark source in order to evaluate it and to
> execute it on other systems.
> 
> In developing the SPARC V9 ABI, I showed a 7x performance advantage for
> pass-by-value over pass-by-reference when computing Mandelbrot with
> complex numbers.

This is easily understandable for narrow function interfaces.  When the register 
set gets.  But the C99 suite of functions have up four fp arguments.  For quads 
it would be 128*2*4 = 1024 bits.  That's a lot of registers even at 64 bits 
each.  And even more of a concern on some of the crippled architectures still in 
use.

> 
>  >   Passing in unmodifiable objects as constant references when
>  >appropriate both obviates the need for copying and gives explicit
>  >const-correctness from the start.  We don't have to worry about
>  >dereferencing pointers or memory ownership issues.  It's indeed the
>  >pattern followed by most modern libraries.
> 
> You are assuming that "const" means "unmodifiable".  It does not.  It
> means that non-mutuable fields may not change when accessed through the
> const-qualified name.  The object may still change via access through
> non-const-qualified names.  The distinction between a value and a
> reference is critical here, because the former is unaliased and the
> latter is potentially aliased.  This aliasing can also have substantial
> effect on the ability of the compiler to apply global optimizations.
> 
>  >   To the caller of the functions, it just looks like an ordinary
>  >pass-by-value, but is faster, and allows the compiler to catch a lot of
>  >types of problems.
> 
> But it doesn't look the same, because of the aliasing issue.  With
> reference parameters, the function must make an explicit declaration
> about its behavior in the presence of aliasing.

That is an aspect of the language rather than the implementation.  Are we 
setting out to fix the aliasing problem WRT intervals?  It would be a huge 
change in scope.

> 
>  >   I recommend that for long-term performance and const-correctness,
>  >that objects be passed as constant references when possible.
> 
> Would you recommend that ints be passed by const reference?

Rarely.  But I would resist the argument that it is never necessary.
> ------------------------------
> 
> Message: 3
> Date: Wed, 05 Apr 2006 05:49:41 -0700
> From: Lawrence.Crowl@Sun.com
> Subject: Re: [std-interval] Re: C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <200604051249.k35Cnfbd008613@philmont.sfbay.sun.com>
> 
> first.i.last@comcast.net writes:
>  >> Lawrence feels strongly that the standard should be to pass by
>  >> value.  Intervals are small data structures;
>  >
>  >That perspective causes problems, just as it did for complex.
>  >Intervals should be considered atomic types whose internal structure
>  >is opaque.  We don't consider fp types as structures even though they
>  >consist of three distinct fields (and in fact are t reated as separate
>  >fields in software implementations of the run-time library).
> 
> The issue was the mechanism for passing the representation, not the
> logical opacity of the type.

The issue is the atomicity of the type.  Atomicity often implies effective 
opacity.  Opacity always implies atomicity.

In a few years we will expect to see hardware supporting native intervals types 
(the design papers have been around for decades).  At that point intervals are 
no longer "small data structures" as you described them.  They are native types.  
As soon as there are two dissimilar hardware implementations in existence all 
arguments about the internals of the representation leave the standard.

FP layouts are famous for being diverse.  There is almost every possible byte 
ordering available for 32-bit values.  We should not expect that historical 
trend to vanish even though it would make everyone's life easier.

So we should not predicate premature design decision on the current state of the 
art when we plan to drive a vigorous change process.

> 
>  >> by value allows them
>  >> to be passed in registers for speed.  That is how the current Sun
>  >> C++ compiler works.  There is no reason to follow the C++ complex
>  >> standard.  The library is often taken as an example by coders, and
>  >> there is no good reason to follow the tradition of C from 20 years
>  >> ago that structures should be passed by reference.
>  >
>  >There may or may not be a good reason for it.  On FPUs with weak
>  >connections to the CPU, such as x87, passing by value is strongly
>  >preferred.  Yet on FPUs with strong connections to the main CPU
>  >passing by reference might be much more efficient.
> 
> I don't follow the reasoning here.

To create a reference on weakly connected systems one must copy from the FPU to 
addressable memory, create the address in the CPU, pass the address to the 
recipient function and then copy the values from memory back into the FPU.

On strongly connected systems where there is one stack containing intergers, fp 
values, and addresses one simply passes the address of the fp values without 
moving them.

The effect of aliasing is irrelevant because we should be most concered with the 
passage of parameters during expression evaluation where there are cannot be 
aliases because there are no references or pointers to temporary objects.

> 
>  >If the standard syntax is pass by value then a compiler that prefered
>  >pass by reference would be free to do so internally (assuming
>  >appropriate referential safe guards).
> 
> SPARC V7 (32-bit) does in fact do this.  SPARC V9 (64-bit) does so
> for large structs, but passes in registers for small structs.

I'm certain Sun is not alone in that.  Watcom C/C++ provides explicit control 
over the passing conventions right down to individual function prototypes.

>  >> Pass-by-value is also a correctness issue.
>  >
>  >How so?
> 
> Because users will copy the style of interval function declarations.
> If that style includes reference paramters, the programmers will litter
> their programs with unintended aliases.  These aliases are the source of bugs.

OK, we appear to be agreed that the _syntax_ of parameter passing should not 
contain explicit references.  But implicit references, i.e., the semantics of 
parameter passing, whether via an explicit abstract type for interval parameters 
or by hidden manpilation by the compiler, are not affected by this issue.

> ------------------------------
> 
> Message: 7
> Date: 05 Apr 2006 15:37:20 +0200
> From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> Subject: Re: [std-interval] passing by value vs reference
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
> Content-Type: text/plain; charset=iso-8859-1
> 
> Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr> writes:
> 
> | Le mercredi 05 avril 2006 à 11:32 +0200, Sylvain Pion a écrit :
> | 
> | > 3- leave freedom for the implementation to choose
> | > 4- leave freedom for the implementation and have it provide
> | >     a standard specified way to obtain this information.
> | 
> | > I would prefer 3 to 4.  I think
> | > the complexity of implementing 4 is not worth it.
> | 
> | I don't see any additional complexity in 4 with respect to 3. As already
> | mentioned by Bill Clarke, you could simply have a typedef member in
> | interval<T> to express the calling convention of the functions of the
> | interval library: typedef interval<T> const &param_type;
> 
> If done that way, in the typical cases, the "T" would then appear in
> non-deducible context. 

It need not be a dependent type.  It could easily by a parallel set of 
templates.

========================

-- Lee Winter

P.S.  Does anyone know how I can get out of digest mode?
From first.i.last@comcast.net Wed Apr  5 16:54:22 2006
Received: from rwcrmhc14.comcast.net (rwcrmhc14.comcast.net [204.127.192.84])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k35NsLjd011441
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 16:54:21 -0700
Received: from rmailcenter76.comcast.net ([204.127.197.158])
          by comcast.net (rwcrmhc14) with SMTP
          id <20060405220221m1400n7vq6e>; Wed, 5 Apr 2006 22:02:21 +0000
Received: from [71.192.84.143] by rmailcenter76.comcast.net;
	Wed, 05 Apr 2006 22:02:19 +0000
From: first.i.last@comcast.net
To: std-interval@compgeom.poly.edu
Date: Wed, 05 Apr 2006 22:02:19 +0000
Message-Id: <040520062202.11917.44343E6B000E78CA00002E8D22064244139B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
Subject: [std-interval] Re: Std-interval Digest, Vol 3, Issue 6
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 05 Apr 2006 23:54:22 -0000

Alan Eliasen <eliasen@mindspring.com> writes:

>    I can see the point that aliasing could be an issue if functions are
> modifying the objects passed in.  That would seem to me to be very bad
> programming practice, (one in which explicitly declaring const-ness
> would help the compiler point these out.)

That is not the kind of aliasing that causes the problem.  The problem stems from the fact that call-by-reference provides a way to access a variable that does not prevent other access.  THus the modification would not occur in the function receiving the parameter (the callee), but in another function called by the callee, which other function had access to the objected referred to by the paremeter.  It's effectively a minor fomr of volatility which defeats powerful optimization.

Truly volatile objects can change state at any point in time.  Potentially aliased objects, whether actually aliased or not, can logically change state any time a non-transparent function is called.

This is a classic complaint about C from FORTRAN users.

-- Lee Winter
From gdr@integrable-solutions.net Wed Apr  5 17:19:26 2006
Received: from kraid.nerim.net (smtp-103-wednesday.nerim.net [62.4.16.103])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k360JQjd011483
	for <std-interval@compgeom.poly.edu>; Wed, 5 Apr 2006 17:19:26 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by kraid.nerim.net (Postfix) with ESMTP id 9DDAF40E20
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 00:27:24 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k35MPvtZ023658
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 00:25:58 +0200
Received: (from gdr@localhost)k35MPvo7023657;
	Thu, 6 Apr 2006 00:25:57 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Parameter passing
References: <040520062148.13911.44343B3E0006F8000000365722058861729B9C0E04D207D29B9C9D0700@comcast.net>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <040520062148.13911.44343B3E0006F8000000365722058861729B9C0E04D207D29B9C9D0700@comcast.net>
Organization: Integrable Solutions
Date: 06 Apr 2006 00:25:57 +0200
Message-ID: <m3fykrr762.fsf@uniton.integrable-solutions.net>
Lines: 126
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k360JQjd011483
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 00:19:26 -0000

first.i.last@comcast.net writes:

[...]

| > Message: 6
| > Date: Wed, 05 Apr 2006 04:51:32 -0700
| > From: Steve Clamage <Stephen.Clamage@Sun.COM>
| > Subject: Re: [std-interval] C++ interval std
| > To: For discussions concerning the C++ standardization of intervals
| > 	<std-interval@compgeom.poly.edu>
| > Message-ID: <4433AF44.8020308@sun.com>
| > Content-Type: text/plain; charset=us-ascii; format=flowed
| > 
| > Alan Eliasen wrote:
| > > Bill Clarke wrote:
| > > 
| > >>This experiment is extremely platform specific, as you probably are
| > >>aware.  Most platforms in use today other than x86 will be the other way
| > >>around (add-by-value will be faster than add-by-const-ref).
| > > 
| > > 
| > >    How can that assertion possibly be made?  As you know, if a parameter
| > > is passed by value, then the copy constructor is automatically called
| > > for each object (e.g. twice for an add operator) on function entry, and
| > > then the destructor is called (twice) on function exit.
| > 
| > A simple object like complex or interval should have no user-defined copy 
| > constructor or destructor.
| 
| A desirable property, but unnecessarily restrictive.  In particular interval 
| objects with explicit properties might not be PODs.  

There are many PODs that do not have, nor need, a user-written copy
constructor and destructor.  If the mental model of interval is that
it is just a couple of floating point numbers, then Steve is
exactly right.  Are you operating under the assumption that an
interval is NOT essentially a couple of numbers?  If yes, please be
more specific.

[...]

| > Please note that our proposed interval type is meant to be a POD (plain
| > old data) type and as such has no copy constructor nor destructor.
| 
| Is it your plan that the proposal include the POD-only requirement?  I would 
| suggest that it is an obvious possibility that yeilds good performence 
| improvements, but how important is it to get fat intervals quickly?
| 
| I would must prefer not to see such a requirement in the standard.

The proposal would need to be precise about whether internal<T> is a
POD or not; that is unavoidable.

[...]

| > Message: 3
| > Date: Wed, 05 Apr 2006 05:49:41 -0700
| > From: Lawrence.Crowl@Sun.com
| > Subject: Re: [std-interval] Re: C++ interval std
| > To: For discussions concerning the C++ standardization of intervals
| > 	<std-interval@compgeom.poly.edu>
| > Message-ID: <200604051249.k35Cnfbd008613@philmont.sfbay.sun.com>
| > 
| > first.i.last@comcast.net writes:
| >  >> Lawrence feels strongly that the standard should be to pass by
| >  >> value.  Intervals are small data structures;
| >  >
| >  >That perspective causes problems, just as it did for complex.
| >  >Intervals should be considered atomic types whose internal structure
| >  >is opaque.  We don't consider fp types as structures even though they
| >  >consist of three distinct fields (and in fact are t reated as separate
| >  >fields in software implementations of the run-time library).
| > 
| > The issue was the mechanism for passing the representation, not the
| > logical opacity of the type.
| 
| The issue is the atomicity of the type.  Atomicity often implies effective 
| opacity.  Opacity always implies atomicity.

Yet, at the end of the day the proposal needs to spell out the
mechanism for passing the representation.  At the moment, I don't see
how the committee would buy a proposal that is very vague about such
issue.  Past experience with vagueness in that area has been a fertile
source of programmer confusion, and defect reports (that the committee
had to deal with).

[...]

| > Message: 7
| > Date: 05 Apr 2006 15:37:20 +0200
| > From: Gabriel Dos Reis <gdr@integrable-solutions.net>
| > Subject: Re: [std-interval] passing by value vs reference
| > To: For discussions concerning the C++ standardization of intervals
| > 	<std-interval@compgeom.poly.edu>
| > Message-ID: <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
| > Content-Type: text/plain; charset=iso-8859-1
| > 
| > Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr> writes:
| > 
| > | Le mercredi 05 avril 2006 à 11:32 +0200, Sylvain Pion a écrit :
| > | 
| > | > 3- leave freedom for the implementation to choose
| > | > 4- leave freedom for the implementation and have it provide
| > | >     a standard specified way to obtain this information.
| > | 
| > | > I would prefer 3 to 4.  I think
| > | > the complexity of implementing 4 is not worth it.
| > | 
| > | I don't see any additional complexity in 4 with respect to 3. As already
| > | mentioned by Bill Clarke, you could simply have a typedef member in
| > | interval<T> to express the calling convention of the functions of the
| > | interval library: typedef interval<T> const &param_type;
| > 
| > If done that way, in the typical cases, the "T" would then appear in
| > non-deducible context. 
| 
| It need not be a dependent type.  It could easily by a parallel set of 
| templates.

More specifically?


[ As I mentioned earlier, I'm not sure template aliases help in this
case. ]

-- Gaby

From guillaume.melquiond@ens-lyon.fr Thu Apr  6 02:10:00 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k369A0jd012642
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 02:10:00 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 5FE7E15B5B8
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 09:18:19 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 06783-72 for <std-interval@compgeom.poly.edu>;
	Thu, 6 Apr 2006 09:18:16 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id AFE9715B56C
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 09:18:16 +0200 (CEST)
Subject: Re: [std-interval] Parameter passing
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <040520062148.13911.44343B3E0006F8000000365722058861729B9C0E04D207D29B9C9D0700@comcast.net>
References: 
	<040520062148.13911.44343B3E0006F8000000365722058861729B9C0E04D207D29B9C9D0700@comcast.net>
Content-Type: text/plain; charset=ISO-8859-1
Date: Thu, 06 Apr 2006 09:18:02 +0200
Message-Id: <1144307882.3988.78.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 09:10:01 -0000

To get out of digest mode, go to
  http://compgeom.poly.edu/mailman/listinfo/std-interval
and search "edit options" at the very bottom of the page.

Le mercredi 05 avril 2006 à 21:48 +0000, first.i.last@comcast.net a
écrit :
 
> > Please note that our proposed interval type is meant to be a POD (plain
> > old data) type and as such has no copy constructor nor destructor.
> 
> Is it your plan that the proposal include the POD-only requirement?  I would 
> suggest that it is an obvious possibility that yeilds good performence 
> improvements, but how important is it to get fat intervals quickly?
> 
> I would must prefer not to see such a requirement in the standard.

If an implementation follows the specification of our proposal, then the
resulting type is necessarily a POD. The interface has been specially
designed so that it happens. With respect to the scope of our proposal,
I don't see the point of adding a non-POD field to the interval class
(what would it contain?) or of saying that the copy constructor and the
destructor have side effects (what would they do?). Maybe we missed
something in writing the proposal, but at least our toy implementation
was clearly a POD.

> > As a
> > consequence, on some architectures and with non-broken compilers, they
> > will behave no differently than if the function arguments were simply
> > integers; except that the register will probably be bigger, or two
> > registers will be used. When this happens, passing by value will be
> > faster than passing by const-reference. Indeed there is no architecture
> > such that foo(int) is slower than bar(int const &).
> 
> Of course there is.  When addresses are narrow (fit in a register) and ints are 
> wide (don't fit in a register).  64-bit code on 32-bit hardware.  32-bit code on 
> 16-bit hardware.  16-bit code on 8-bit hardware.  I've even worked on a 
> bit-slice machine with 20-bit ints and 16-bit addresses.

It is not enough to consider only the part where the caller writes the
arguments. You are missing the part where the callee reads the
arguments. This requires an indirection when passing an argument by
reference. Let us consider a non-trivial example like the successor
function:

  int foo(int a)        { return a + 1; }
  int bar(int const &a) { return a + 1; }

So I state it again, slightly modified: there is no architecture such
that foo(int) is slower than bar(int const &) if the functions use the
integer argument.

> > I don't see any additional complexity in 4 with respect to 3. As already
> > mentioned by Bill Clarke, you could simply have a typedef member in
> > interval<T> to express the calling convention of the functions of the
> > interval library: typedef interval<T> const &param_type;
> > 
> > This requires all the functions of the library to use the same calling
> > convention.
> 
> How do you derive this requirement?  I don't see it.

If you have two functions with different calling conventions:

  interval foo(interval, interval);
  interval bar(interval const &, interval const &);

then one of them is obviously not of the type

  interval binary_function(param_type, param_type);

Best regards,

Guillaume


From guillaume.melquiond@ens-lyon.fr Thu Apr  6 02:10:05 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k369A4jd012650
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 02:10:05 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id D636C15B56C
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 09:18:23 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 07181-75 for <std-interval@compgeom.poly.edu>;
	Thu, 6 Apr 2006 09:18:21 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 70DD615B5B8
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 09:18:21 +0200 (CEST)
Subject: Re: [std-interval] passing by value vs reference
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <4433F679.9000906@datafull.com>
References: <44338EC4.4020106@sophia.inria.fr>
	 <4433D6B7.3020204@datafull.com> <1144250793.1575.90.camel@localhost>
	 <4433F679.9000906@datafull.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Thu, 06 Apr 2006 09:18:09 +0200
Message-Id: <1144307889.3988.80.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 09:10:05 -0000

Le mercredi 05 avril 2006 à 13:55 -0300, Fernando Cacciola a écrit :

> If  the FPU registers are stacked, like in the x86 family, it wouldn't
> be too uncommon, IMHO, for a compiler to do:

[...]

As a matter of fact, it would be really uncommon. For example, x86 ABIs
require the FPU stack to be empty (except maybe for arguments) at the
beginning of every functions. Otherwise the functions would cause FPU
stack overflows since they would have very little or no space left to do
their computations. Thanks to the empty stack, the compiler knows that
it can use eight FPU registers without crashing the whole process. So
for the particular example of (a*b)*(c*d), there is no way for a
compiler to avoid temporarily storing the result of a*b on the memory
stack.

> That is, stacked FPU registers allows the compiler to allocate the
> function frames (which is the problem in your example) without using
> the external memory-based stack or rearranging the registers
> manually. 

As a side note on this topic, stacked FPU registers seemed like a good
idea thirty years ago. But now that the technology has evolved and has
gone past GHz speeds, this good idea has become a nightmare for
processor designers. Translating stack positions to standard bank
positions incur a huge latency in decoding FPU instructions in the
processor. This translation work is better done once and for all at
compilation time. I would be really surprised if a modern processor
(that is not plagued by backward compatibility concerns) implements
stacked FPU registers.

Best regards,

Guillaume


From guillaume.melquiond@ens-lyon.fr Thu Apr  6 02:10:08 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k369A7jd012655
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 02:10:07 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 91D5B15B5B8
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 09:18:26 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 09749-01 for <std-interval@compgeom.poly.edu>;
	Thu, 6 Apr 2006 09:18:26 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id C0C0D15B56C
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 09:18:25 +0200 (CEST)
Subject: Re: [std-interval] C++ interval std
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <44341214.90302@mindspring.com>
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	 <44336367.9060400@computer.org>  <4433A182.7060405@mindspring.com>
	 <1144238135.1575.25.camel@localhost>  <44341214.90302@mindspring.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Thu, 06 Apr 2006 09:18:14 +0200
Message-Id: <1144307894.3988.81.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 09:10:08 -0000

Le mercredi 05 avril 2006 à 12:53 -0600, Alan Eliasen a écrit :

> > Please note that our proposed interval type is meant to be a POD (plain
> > old data) type and as such has no copy constructor nor destructor. As a
> > consequence, on some architectures and with non-broken compilers, they
> > will behave no differently than if the function arguments were simply
> > integers; except that the register will probably be bigger, or two
> > registers will be used. When this happens, passing by value will be
> > faster than passing by const-reference. Indeed there is no architecture
> > such that foo(int) is slower than bar(int const &).
> 
>    As a "primitive" type, int is a different case than an object,
> though.

Int is indeed different from a non-POD type, but not that different from
a POD type; this is why I chose int as an example. As any other class, a
POD type has a copy constructor and a destructor for the sake of
language uniformity, but a compiler should _never_ call them. As a
matter of fact, it should not even generate them. And this is not a
matter of optimizing or not: this is explicitly the point of a POD type.
So even when all the optimizations are disabled, a real compiler will
not call a destructor on a POD object.

Best regards,

Guillaume

From Stephen.Clamage@Sun.COM Thu Apr  6 02:23:18 2006
Received: from brmea-mail-1.sun.com (brmea-mail-1.Sun.COM [192.18.98.31])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k369NGjd012701
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 02:23:16 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-1.sun.com (8.12.10/8.12.9) with ESMTP id k367VOGp006624
	for <std-interval@compgeom.poly.edu>;
	Thu, 6 Apr 2006 01:31:24 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IXA00I01I3EYE@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Thu, 06 Apr 2006 00:31:24 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-99.SFBay.Sun.COM [129.150.20.99])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IXA00M5EI89UZ@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Thu, 06 Apr 2006 00:31:24 -0700 (PDT)
Date: Thu, 06 Apr 2006 00:31:20 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] C++ interval std
In-reply-to: <44341121.9090206@mindspring.com>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <4434C3C8.7050808@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii; format=flowed
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: <C0573279.37DC%George.Corliss@Marquette.edu>
 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
 <44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
 <4433AF44.8020308@sun.com> <44341121.9090206@mindspring.com>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 09:23:18 -0000

Alan Eliasen wrote:
> Steve Clamage wrote:
> 
> 
> 
>>>Bill Clarke wrote:
>>>
>>>
>>>>This experiment is extremely platform specific, as you probably are
>>>>aware.  Most platforms in use today other than x86 will be the other way
>>>>around (add-by-value will be faster than add-by-const-ref).
> 
> 
> Alan Eliasen wrote:
> 
>>>   How can that assertion possibly be made?  As you know, if a parameter
>>>is passed by value, then the copy constructor is automatically called
>>>for each object (e.g. twice for an add operator) on function entry, and
>>>then the destructor is called (twice) on function exit.
>>
> 
> Steve Clamage wrote:
> 
>>A simple object like complex or interval should have no user-defined
>>copy constructor or destructor. That is, the default copy constructor
>>generated by the compiler does the right thing and does not need to be
>>user-defined. The destructor has nothing to do, and so should not be
>>user-defined. In that case, pass-by-value can be optimized into register
>>passing with no additional copying.
> 
> 
>    You still agree, though, that even if the implementation doesn't do
> memory allocation in the constructor, the compiler will still generate a
> copy constructor and a destructor, (perhaps pretty simple and efficient)
> and these will get normally get called in a pass-by-value.  Again, a
> very smart compiler can optimize these away if it realizes that the copy
> is unnecessary, but by simply specifying call-by-constant-reference, we
> don't have to hope that the compiler is very smart.  We simply eliminate
> even the possibility of calling the copy constructor and destructor.

In C++, every type (including int) has a constructor and destructor. This point 
of definition simplifies the exposition of language rules. We are saved from 
hopelessly inefficient implementations by the "as-if rule." It says the 
implementation can do what is wants as long as observable behavior is preserved. 
Multiple copies of temporary objects (as in parameter and returned-value 
passing) are not counted in "observable behavior" -- extra copies can be elided.

For POD types, I have never seen or heard of a compiler that actually generated 
a real constructor or destructor. Compilers perform a simple copy by whatever 
means is most efficient.

> 
> 
>>It is possible to construct a test case where pass-by-value gives worse
>>performance than pass-by-reference, and your example does indeed run
>>faster with pass-by-reference using Sun compilers at low optimization.
> 
> 
>    As noted, it should always be the case that pass-by-value is at least
> as slow as pass-by-constant-reference because of the overhead of calling
> the copy constructors and destructors, which are almost always
> unnecessary and can be trivially eliminated by specifying the calling
> convention.  If it's ever faster, I'd argue that it's because the
> compiler missed obvious optimizations for pass-by-constant-reference, or
> is allocating registers badly.
> 
> 
>>At high optimization, the compiler eliminated the loops and all but one
>>call to "add", which it inlined. I played with the test case for a short
>>time, but was unable to defeat the optimizer with minor changes.
> 
> 
>    Heh!  That's a smart compiler!  I had considered adding some
> randomization to the values to eliminate this possibility, but the
> timing values would have likely been swamped by the random number generator.
> 

In the original example, the call to "add" in the loop uses the same parameters. 
The compiler inlines the call, then hoists the computation out of the loop. The 
loop is now empty, so the compiler just computes the answer at compile time. 
Since the result of the computation was not used, the compiler can elide that as 
well!

I modified the loop to use the result by incrementing a variable that was later 
printed. (If the variable wasn't used, the compiler elided it, too. The "as-if" 
rule again.) To prevent hoisting the "add" out of the loop, I caused each 
iteration to add different values. Here is an example of two modified loops, and 
the output statements:

    Interval c(0.0,0.0);
    start = clock();
    for (i=0; i<upper; i++)
    {
       c.upper += addByValue( a, addByValue(Interval(i,0), b) ).upper;
    }
    end = clock();
    cout << "addByValue: \t" << (end-start) << " ticks " << c.upper << endl;

    c.upper = 0;
    start = clock();
    for (i=0; i<upper; i++)
    {
       c.upper += addByConstRef( a, addByConstRef(Interval(i,0), b) ).upper;
    }
    end = clock();
    cout << "addByConstRef: \t" << (end-start) << " ticks " << c.upper << endl;

I compiled and ran on 64-bit sparc (US II) and 64-bit amd64 (Opteron). According 
to my earlier claims, pass-by-value should have been faster.

64-bit sparc:
addByValue:     690000 ticks 4.1e+08
addByRef:       680000 ticks 4.1e+08
addByConstRef:  450000 ticks 4.1e+08

64-bit amd64:
addByValue:     1280000 ticks 4.1e+08
addByRef:        670000 ticks 4.1e+08
addByConstRef:   670000 ticks 4.1e+08

Color my face red. :-)

This result is quite different from other experiments with small structs that 
showed pass-by-value performing better. One possibility is that the compiler is 
missing some optimization opportunities. Another is that this example is not 
representative.

---
Steve Clamage, stephen.clamage@sun.com

From guillaume.melquiond@ens-lyon.fr Thu Apr  6 03:17:08 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k36AH7jd012784
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 03:17:07 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 3C72B15B708
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 10:25:27 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 17699-10 for <std-interval@compgeom.poly.edu>;
	Thu, 6 Apr 2006 10:25:26 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id B07B515B6FC
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 10:25:26 +0200 (CEST)
Subject: Re: [std-interval] C++ interval std
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <4434C3C8.7050808@sun.com>
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	 <44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	 <4433AF44.8020308@sun.com> <44341121.9090206@mindspring.com>
	 <4434C3C8.7050808@sun.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Thu, 06 Apr 2006 10:25:14 +0200
Message-Id: <1144311915.3988.95.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 10:17:08 -0000

Le jeudi 06 avril 2006 à 00:31 -0700, Steve Clamage a écrit :

> This result is quite different from other experiments with small structs that 
> showed pass-by-value performing better. One possibility is that the compiler is 
> missing some optimization opportunities. Another is that this example is not 
> representative.

Is your Interval class considered a "small struct" by the ABIs you
tested? According to the AMD64 ABI, it should be, since it is two
doubles; but I am not completely sure. If it is not, then pass-by-value
will go through the stack and will be a lot worse than pass-by-ref. This
would explain your results and it would mean that your example is not
representative at all.

I don't know if it is possible, but in this case it would be nice if you
could modify the ABI so that intervals are passed through registers.
This would tell if there really is a point in not simply using const
references.

Best regards,

Guillaume

From Stephen.Clamage@Sun.COM Thu Apr  6 04:11:05 2006
Received: from brmea-mail-3.sun.com (brmea-mail-3.Sun.COM [192.18.98.34])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k36BB5jd013292
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 04:11:05 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-3.sun.com (8.12.10/8.12.9) with ESMTP id k369J6JK004655
	for <std-interval@compgeom.poly.edu>;
	Thu, 6 Apr 2006 03:19:07 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IXA00401MWXYB@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Thu, 06 Apr 2006 02:19:06 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-101.SFBay.Sun.COM [129.150.20.101])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IXA00MAGN7SUZ@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Thu, 06 Apr 2006 02:19:06 -0700 (PDT)
Date: Thu, 06 Apr 2006 02:19:03 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] C++ interval std
In-reply-to: <1144311915.3988.95.camel@saline>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <4434DD07.4060704@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=ISO-8859-1; format=flowed
Content-transfer-encoding: 8BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: <C0573279.37DC%George.Corliss@Marquette.edu>
 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
 <44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
 <4433AF44.8020308@sun.com> <44341121.9090206@mindspring.com>
 <4434C3C8.7050808@sun.com> <1144311915.3988.95.camel@saline>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 11:11:05 -0000

The Interval class is the one posted by Alan Eliasen,
except that I removed the tag member from the Interval class,
leaving only 2 doubles.

In the compiled code, all the Interval functions were inlined,
so there are no calls to the functions. Here are two extracts
from the source code, along with the generated amd64 code.

I can also post the sparc code if you like.

First, the call-by-value part.
The compiler unrolled the loop 4 times.

     32     start = clock();
     33     for (i=0; i<upper; i++)
     34     {
     35        c.upper += addByValue( a, addByValue(Interval(i,0), b) ).upper;
     36     }
     37     end = clock();

         call       clock                                ;/ line : 32
         movq       %rax,%r12                            ;/ line : 32
         movlpd     .tim.0+32,%xmm0                              ;/ line : 26
         movlpd     %xmm0,72(%rsp)                               ;/ line : 33
         movq       48(%rsp),%r8                         ;/ line : 33
         movq       56(%rsp),%r9                         ;/ line : 33
         movq       %r8,160(%rsp)                                ;/ line : 33
         movq       %r9,168(%rsp)                                ;/ line : 33
         movq       32(%rsp),%r8                         ;/ line : 33
         movq       40(%rsp),%r9                         ;/ line : 33
         movq       %r8,224(%rsp)                                ;/ line : 33
         movq       %r9,232(%rsp)                                ;/ line : 33
.LP0.382:
         movlpd     160(%rsp),%xmm6                              ;/ line : 35
         movlpd     168(%rsp),%xmm5                              ;/ line : 35
         movlpd     224(%rsp),%xmm4                              ;/ line : 35
         movlpd     232(%rsp),%xmm3                              ;/ line : 35
         xorl       %eax,%eax                            ;/ line : 35
         movlpd     .tim.0+40,%xmm2                              ;/ line : 35
         movlpd     .tim.0+32,%xmm1
         movlpd     .tim.0+32,%xmm0
         movlpd     %xmm0,-8(%rbp)
         .zalign 16,8
.CGB.191:
         movlpd     %xmm1,64(%rsp)                               ;/ line : 35
         movq       64(%rsp),%r8                         ;/ line : 35
         movq       72(%rsp),%r9                         ;/ line : 35
         movq       %r8,176(%rsp)                                ;/ line : 35
         movq       %r9,184(%rsp)                                ;/ line : 35
         movlpd     176(%rsp),%xmm0                              ;/ line : 35
         addsd      %xmm6,%xmm0                          ;/ line : 35
         movlpd     %xmm0,192(%rsp)                              ;/ line : 35
         movlpd     184(%rsp),%xmm0                              ;/ line : 35
         addsd      %xmm5,%xmm0                          ;/ line : 35
         movlpd     %xmm0,200(%rsp)                              ;/ line : 35
         movq       192(%rsp),%xmm0                              ;/ line : 35
         movhpd     200(%rsp),%xmm0                              ;/ line : 35
         movq       %xmm0,208(%rsp)                              ;/ line : 35
         movhpd     %xmm0,216(%rsp)                              ;/ line : 35
         movlpd     208(%rsp),%xmm0                              ;/ line : 35
         addsd      %xmm4,%xmm0                          ;/ line : 35
         movlpd     %xmm0,240(%rsp)                              ;/ line : 35
         movlpd     216(%rsp),%xmm0                              ;/ line : 35
         addsd      %xmm3,%xmm0                          ;/ line : 35
         movlpd     %xmm0,248(%rsp)                              ;/ line : 35
         movq       240(%rsp),%r8                                ;/ line : 35
         movq       248(%rsp),%r9                                ;/ line : 35
         movq       %r8,80(%rsp)                         ;/ line : 35
         movq       %r9,88(%rsp)                         ;/ line : 35
         movlpd     -8(%rbp),%xmm0                               ;/ line : 35
         addsd      88(%rsp),%xmm0                               ;/ line : 35
         addsd      %xmm2,%xmm1                          ;/ line : 35
         movlpd     %xmm1,64(%rsp)                               ;/ line : 35
         movq       64(%rsp),%r8                         ;/ line : 35
         movq       72(%rsp),%r9                         ;/ line : 35
         movq       %r8,176(%rsp)                                ;/ line : 35
         movq       %r9,184(%rsp)                                ;/ line : 35
         movlpd     176(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm6,%xmm7                          ;/ line : 35
         movlpd     %xmm7,192(%rsp)                              ;/ line : 35
         movlpd     184(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm5,%xmm7                          ;/ line : 35
         movlpd     %xmm7,200(%rsp)                              ;/ line : 35
         movq       192(%rsp),%xmm7                              ;/ line : 35
         movhpd     200(%rsp),%xmm7                              ;/ line : 35
         movq       %xmm7,208(%rsp)                              ;/ line : 35
         movhpd     %xmm7,216(%rsp)                              ;/ line : 35
         movlpd     208(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm4,%xmm7                          ;/ line : 35
         movlpd     %xmm7,240(%rsp)                              ;/ line : 35
         movlpd     216(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm3,%xmm7                          ;/ line : 35
         movlpd     %xmm7,248(%rsp)                              ;/ line : 35
         movq       240(%rsp),%r8                                ;/ line : 35
         movq       248(%rsp),%r9                                ;/ line : 35
         movq       %r8,80(%rsp)                         ;/ line : 35
         movq       %r9,88(%rsp)                         ;/ line : 35
         addsd      88(%rsp),%xmm0                               ;/ line : 35
         addsd      %xmm2,%xmm1                          ;/ line : 35
         movlpd     %xmm1,64(%rsp)                               ;/ line : 35
         movq       64(%rsp),%r8                         ;/ line : 35
         movq       72(%rsp),%r9                         ;/ line : 35
         movq       %r8,176(%rsp)                                ;/ line : 35
         movq       %r9,184(%rsp)                                ;/ line : 35
         movlpd     176(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm6,%xmm7                          ;/ line : 35
         movlpd     %xmm7,192(%rsp)                              ;/ line : 35
         movlpd     184(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm5,%xmm7                          ;/ line : 35
         movlpd     %xmm7,200(%rsp)                              ;/ line : 35
         movq       192(%rsp),%xmm7                              ;/ line : 35
         movhpd     200(%rsp),%xmm7                              ;/ line : 35
         movq       %xmm7,208(%rsp)                              ;/ line : 35
         movhpd     %xmm7,216(%rsp)                              ;/ line : 35
         movlpd     208(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm4,%xmm7                          ;/ line : 35
         movlpd     %xmm7,240(%rsp)                              ;/ line : 35
         movlpd     216(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm3,%xmm7                          ;/ line : 35
         movlpd     %xmm7,248(%rsp)                              ;/ line : 35
         movq       240(%rsp),%r8                                ;/ line : 35
         movq       248(%rsp),%r9                                ;/ line : 35
         movq       %r8,80(%rsp)                         ;/ line : 35
         movq       %r9,88(%rsp)                         ;/ line : 35
         addsd      88(%rsp),%xmm0                               ;/ line : 35
         addsd      %xmm2,%xmm1                          ;/ line : 35
         movlpd     %xmm1,64(%rsp)                               ;/ line : 35
         movq       64(%rsp),%r8                         ;/ line : 35
         movq       72(%rsp),%r9                         ;/ line : 35
         movq       %r8,176(%rsp)                                ;/ line : 35
         movq       %r9,184(%rsp)                                ;/ line : 35
         movlpd     176(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm6,%xmm7                          ;/ line : 35
         movlpd     %xmm7,192(%rsp)                              ;/ line : 35
         movlpd     184(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm5,%xmm7                          ;/ line : 35
         movlpd     %xmm7,200(%rsp)                              ;/ line : 35
         movq       192(%rsp),%xmm7                              ;/ line : 35
         movhpd     200(%rsp),%xmm7                              ;/ line : 35
         movq       %xmm7,208(%rsp)                              ;/ line : 35
         movhpd     %xmm7,216(%rsp)                              ;/ line : 35
         movlpd     208(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm4,%xmm7                          ;/ line : 35
         movlpd     %xmm7,240(%rsp)                              ;/ line : 35
         movlpd     216(%rsp),%xmm7                              ;/ line : 35
         addsd      %xmm3,%xmm7                          ;/ line : 35
         movlpd     %xmm7,248(%rsp)                              ;/ line : 35
         movq       240(%rsp),%r8                                ;/ line : 35
         movq       248(%rsp),%r9                                ;/ line : 35
         movq       %r8,80(%rsp)                         ;/ line : 35
         movq       %r9,88(%rsp)                         ;/ line : 35
         addsd      88(%rsp),%xmm0                               ;/ line : 35
         movlpd     %xmm0,-8(%rbp)                               ;/ line : 35
         addsd      %xmm2,%xmm1                          ;/ line : 35
         addl       $4,%eax                              ;/ line : 35
.LU2.397:
         cmpl       $99999999,%eax                               ;/ line : 35
         jle        .CGB.191                             ;/ line : 35
.LX0.383:
.LE0.384:
.CGC.192:
         xorl       %ebx,%ebx                            ;/ line : 45
         call       clock                                ;/ line : 37
         movq       %rax,%r13                            ;/ line : 37


Now the call-by-const-ref part.
The compiler unrolled this loop 6 times.

     52     start = clock();
     53     for (i=0; i<upper; i++)
     54     {
     55        c.upper += addByConstRef( a, addByConstRef(Interval(i,0), b) ).upper;
     56     }
     57     end = clock();

         call       clock                                ;/ line : 52
         movq       %rax,%r12                            ;/ line : 52
         movlpd     56(%rsp),%xmm0                               ;/ line : 53
         movlpd     %xmm0,296(%rsp)                              ;/ line : 53
         movlpd     48(%rsp),%xmm4                               ;/ line : 55
         movlpd     32(%rsp),%xmm3                               ;/ line : 55
         movlpd     40(%rsp),%xmm2                               ;/ line : 55
         movlpd     .tim.0+40,%xmm5                              ;/ line : 55
         movlpd     .tim.0+32,%xmm1
         movlpd     .tim.0+32,%xmm0
         movlpd     %xmm0,-8(%rbp)
         .zalign 16,8
.CGF.195:
         movsd      %xmm1,%xmm0                          ;/ line : 55
         addsd      %xmm4,%xmm0                          ;/ line : 55
         movlpd     %xmm0,288(%rsp)                              ;/ line : 55
         movq       288(%rsp),%r8                                ;/ line : 55
         movq       296(%rsp),%r9                                ;/ line : 55
         movq       %r8,128(%rsp)                                ;/ line : 55
         movq       %r9,136(%rsp)                                ;/ line : 55
         movlpd     128(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm3,%xmm0                          ;/ line : 55
         movlpd     %xmm0,304(%rsp)                              ;/ line : 55
         movlpd     136(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm2,%xmm0                          ;/ line : 55
         movlpd     %xmm0,312(%rsp)                              ;/ line : 55
         movq       304(%rsp),%r8                                ;/ line : 55
         movq       312(%rsp),%r9                                ;/ line : 55
         movq       %r8,144(%rsp)                                ;/ line : 55
         movq       %r9,152(%rsp)                                ;/ line : 55
         movlpd     -8(%rbp),%xmm0                               ;/ line : 55
         addsd      152(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm5,%xmm1                          ;/ line : 55
         movsd      %xmm1,%xmm6                          ;/ line : 55
         addsd      %xmm4,%xmm6                          ;/ line : 55
         movlpd     %xmm6,288(%rsp)                              ;/ line : 55
         movq       288(%rsp),%r8                                ;/ line : 55
         movq       296(%rsp),%r9                                ;/ line : 55
         movq       %r8,128(%rsp)                                ;/ line : 55
         movq       %r9,136(%rsp)                                ;/ line : 55
         movlpd     128(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm3,%xmm6                          ;/ line : 55
         movlpd     %xmm6,304(%rsp)                              ;/ line : 55
         movlpd     136(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm2,%xmm6                          ;/ line : 55
         movlpd     %xmm6,312(%rsp)                              ;/ line : 55
         movq       304(%rsp),%r8                                ;/ line : 55
         movq       312(%rsp),%r9                                ;/ line : 55
         movq       %r8,144(%rsp)                                ;/ line : 55
         movq       %r9,152(%rsp)                                ;/ line : 55
         addsd      152(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm5,%xmm1                          ;/ line : 55
         movsd      %xmm1,%xmm6                          ;/ line : 55
         addsd      %xmm4,%xmm6                          ;/ line : 55
         movlpd     %xmm6,288(%rsp)                              ;/ line : 55
         movq       288(%rsp),%r8                                ;/ line : 55
         movq       296(%rsp),%r9                                ;/ line : 55
         movq       %r8,128(%rsp)                                ;/ line : 55
         movq       %r9,136(%rsp)                                ;/ line : 55
         movlpd     128(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm3,%xmm6                          ;/ line : 55
         movlpd     %xmm6,304(%rsp)                              ;/ line : 55
         movlpd     136(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm2,%xmm6                          ;/ line : 55
         movlpd     %xmm6,312(%rsp)                              ;/ line : 55
         movq       304(%rsp),%r8                                ;/ line : 55
         movq       312(%rsp),%r9                                ;/ line : 55
         movq       %r8,144(%rsp)                                ;/ line : 55
         movq       %r9,152(%rsp)                                ;/ line : 55
         addsd      152(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm5,%xmm1                          ;/ line : 55
         movsd      %xmm1,%xmm6                          ;/ line : 55
         addsd      %xmm4,%xmm6                          ;/ line : 55
         movlpd     %xmm6,288(%rsp)                              ;/ line : 55
         movq       288(%rsp),%r8                                ;/ line : 55
         movq       296(%rsp),%r9                                ;/ line : 55
         movq       %r8,128(%rsp)                                ;/ line : 55
         movq       %r9,136(%rsp)                                ;/ line : 55
         movlpd     128(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm3,%xmm6                          ;/ line : 55
         movlpd     %xmm6,304(%rsp)                              ;/ line : 55
         movlpd     136(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm2,%xmm6                          ;/ line : 55
         movlpd     %xmm6,312(%rsp)                              ;/ line : 55
         movq       304(%rsp),%r8                                ;/ line : 55
         movq       312(%rsp),%r9                                ;/ line : 55
         movq       %r8,144(%rsp)                                ;/ line : 55
         movq       %r9,152(%rsp)                                ;/ line : 55
         addsd      152(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm5,%xmm1                          ;/ line : 55
         movsd      %xmm1,%xmm6                          ;/ line : 55
         addsd      %xmm4,%xmm6                          ;/ line : 55
         movlpd     %xmm6,288(%rsp)                              ;/ line : 55
         movq       288(%rsp),%r8                                ;/ line : 55
         movq       296(%rsp),%r9                                ;/ line : 55
         movq       %r8,128(%rsp)                                ;/ line : 55
         movq       %r9,136(%rsp)                                ;/ line : 55
         movlpd     128(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm3,%xmm6                          ;/ line : 55
         movlpd     %xmm6,304(%rsp)                              ;/ line : 55
         movlpd     136(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm2,%xmm6                          ;/ line : 55
         movlpd     %xmm6,312(%rsp)                              ;/ line : 55
         movq       304(%rsp),%r8                                ;/ line : 55
         movq       312(%rsp),%r9                                ;/ line : 55
         movq       %r8,144(%rsp)                                ;/ line : 55
         movq       %r9,152(%rsp)                                ;/ line : 55
         addsd      152(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm5,%xmm1                          ;/ line : 55
         movsd      %xmm1,%xmm6                          ;/ line : 55
         addsd      %xmm4,%xmm6                          ;/ line : 55
         movlpd     %xmm6,288(%rsp)                              ;/ line : 55
         movq       288(%rsp),%r8                                ;/ line : 55
         movq       296(%rsp),%r9                                ;/ line : 55
         movq       %r8,128(%rsp)                                ;/ line : 55
         movq       %r9,136(%rsp)                                ;/ line : 55
         movlpd     128(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm3,%xmm6                          ;/ line : 55
         movlpd     %xmm6,304(%rsp)                              ;/ line : 55
         movlpd     136(%rsp),%xmm6                              ;/ line : 55
         addsd      %xmm2,%xmm6                          ;/ line : 55
         movlpd     %xmm6,312(%rsp)                              ;/ line : 55
         movq       304(%rsp),%r8                                ;/ line : 55
         movq       312(%rsp),%r9                                ;/ line : 55
         movq       %r8,144(%rsp)                                ;/ line : 55
         movq       %r9,152(%rsp)                                ;/ line : 55
         addsd      152(%rsp),%xmm0                              ;/ line : 55
         movlpd     %xmm0,-8(%rbp)                               ;/ line : 55
         addsd      %xmm5,%xmm1                          ;/ line : 55
         addl       $6,%ebx                              ;/ line : 55
.LUF.414:
         cmpl       $99999994,%ebx                               ;/ line : 55
         jle        .CGF.195                             ;/ line : 55
.LX5.422:
.LE5.423:
.LU10.415:
         movlpd     48(%rsp),%xmm2                               ;/ line : 55
         movlpd     32(%rsp),%xmm3                               ;/ line : 55
         movlpd     40(%rsp),%xmm4                               ;/ line : 55
         movlpd     .tim.0+40,%xmm5                              ;/ line : 55
         .zalign 16,8
.LU11.416:
         movsd      %xmm1,%xmm0                          ;/ line : 55
         addsd      %xmm2,%xmm0                          ;/ line : 55
         movlpd     %xmm0,288(%rsp)                              ;/ line : 55
         movq       288(%rsp),%r8                                ;/ line : 55
         movq       296(%rsp),%r9                                ;/ line : 55
         movq       %r8,128(%rsp)                                ;/ line : 55
         movq       %r9,136(%rsp)                                ;/ line : 55
         movlpd     128(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm3,%xmm0                          ;/ line : 55
         movlpd     %xmm0,304(%rsp)                              ;/ line : 55
         movlpd     136(%rsp),%xmm0                              ;/ line : 55
         addsd      %xmm4,%xmm0                          ;/ line : 55
         movlpd     %xmm0,312(%rsp)                              ;/ line : 55
         movq       304(%rsp),%r8                                ;/ line : 55
         movq       312(%rsp),%r9                                ;/ line : 55
         movq       %r8,144(%rsp)                                ;/ line : 55
         movq       %r9,152(%rsp)                                ;/ line : 55
         movlpd     -8(%rbp),%xmm0                               ;/ line : 55
         addsd      152(%rsp),%xmm0                              ;/ line : 55
         movlpd     %xmm0,-8(%rbp)                               ;/ line : 55
         addsd      %xmm5,%xmm1                          ;/ line : 55
         incl       %ebx                         ;/ line : 55
         cmpl       $99999999,%ebx                               ;/ line : 55
         jle        .LU11.416                            ;/ line : 55
.LX6.424:
.LE6.425:
.LX2.387:
.LE2.388:
         call       clock                                ;/ line : 57

---
Steve Clamage, stephen.clamage@sun.com


Guillaume Melquiond wrote:

> Le jeudi 06 avril 2006 à 00:31 -0700, Steve Clamage a écrit :
> 
> 
>>This result is quite different from other experiments with small structs that 
>>showed pass-by-value performing better. One possibility is that the compiler is 
>>missing some optimization opportunities. Another is that this example is not 
>>representative.
> 
> 
> Is your Interval class considered a "small struct" by the ABIs you
> tested? According to the AMD64 ABI, it should be, since it is two
> doubles; but I am not completely sure. If it is not, then pass-by-value
> will go through the stack and will be a lot worse than pass-by-ref. This
> would explain your results and it would mean that your example is not
> representative at all.
> 
> I don't know if it is possible, but in this case it would be nice if you
> could modify the ABI so that intervals are passed through registers.
> This would tell if there really is a point in not simply using const
> references.
> 
> Best regards,
> 
> Guillaume
> 
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval


From guillaume.melquiond@ens-lyon.fr Thu Apr  6 05:33:33 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k36CXWjd013372
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 05:33:32 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id F3DDA15B767
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 12:41:53 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 31398-49 for <std-interval@compgeom.poly.edu>;
	Thu, 6 Apr 2006 12:41:53 +0200 (CEST)
Received: from menthe.lip.ens-lyon.fr (menthe.lip.ens-lyon.fr [140.77.13.88])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id ABA9815B764
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 12:41:52 +0200 (CEST)
Subject: Re: [std-interval] C++ interval std
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <4434DD07.4060704@sun.com>
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	 <4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	 <44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	 <4433AF44.8020308@sun.com> <44341121.9090206@mindspring.com>
	 <4434C3C8.7050808@sun.com> <1144311915.3988.95.camel@saline>
	 <4434DD07.4060704@sun.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Thu, 06 Apr 2006 12:41:47 +0200
Message-Id: <1144320107.8015.0.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 12:33:33 -0000

Le jeudi 06 avril 2006 à 02:19 -0700, Steve Clamage a écrit :
> The Interval class is the one posted by Alan Eliasen,
> except that I removed the tag member from the Interval class,
> leaving only 2 doubles.
> 
> In the compiled code, all the Interval functions were inlined,
> so there are no calls to the functions. Here are two extracts
> from the source code, along with the generated amd64 code.

If all the functions are inlined, you are not testing which argument
passing method is the best one for your architecture. You are only
testing whether the compiler is good enough to produce optimal assembly
in both cases, since no information is hidden behind function call. The
answer seems to be "no" for your compiler (SunCC?).

I know for example that GCC is really bad at handling and optimizing
pass-by-value arguments, and I have already submitted a few bug-reports
on this topic.

Best regards,

Guillaume

From first.i.last@comcast.net Thu Apr  6 10:01:01 2006
Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [204.127.192.81])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k36H11jd013678
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 10:01:01 -0700
Received: from rmailcenter80.comcast.net ([204.127.197.180])
          by comcast.net (rwcrmhc11) with SMTP
          id <20060406150915m110001ck8e>; Thu, 6 Apr 2006 15:09:15 +0000
Received: from [71.192.84.143] by rmailcenter80.comcast.net;
	Thu, 06 Apr 2006 15:09:13 +0000
From: first.i.last@comcast.net
To: std-interval@compgeom.poly.edu
Date: Thu, 06 Apr 2006 15:09:13 +0000
Message-Id: <040620061509.27602.44352F18000A73E200006BD222007601809B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
Subject: [std-interval] PODs and parameter passing
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 17:01:02 -0000

 -------------- Original message ----------------------
From: std-interval-request@compgeom.poly.edu
> Send Std-interval mailing list submissions to
> 	std-interval@compgeom.poly.edu
> ------------------------------
> 
> Message: 2
> Date: 06 Apr 2006 00:25:57 +0200
> From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> Subject: Re: [std-interval] Parameter passing
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <m3fykrr762.fsf@uniton.integrable-solutions.net>
> Content-Type: text/plain; charset=iso-8859-1
> 
> first.i.last@comcast.net writes:
> 
> [...]
> 
> | A desirable property, but unnecessarily restrictive.  In particular interval 
> | objects with explicit properties might not be PODs.  
> 
> There are many PODs that do not have, nor need, a user-written copy
> constructor and destructor.  If the mental model of interval is that
> it is just a couple of floating point numbers, then Steve is
> exactly right.  Are you operating under the assumption that an
> interval is NOT essentially a couple of numbers?

Yes.

>  If yes, please be more specific.

First, there are properties that may need to be represented such as:
    -- openness of each end point
    -- domain filtration active flag (result is only partial)
    -- disjointness
    -- dependency list
    -- generative expression (built at run-time)
    -- and on non-IEEE machines, various flags/codes for
uninit, dead, and flavors of NaN (e.g., EIO, EDOM, ERANGE, div0, imag).

Second, and perhaps more important, while it is convenient to use a particular mental model of the internals of an interval, I doubt that it is strictly necessary.  Such a constraint upon the implementation will retard progress in developing innovative implementations. This is a non-trivial concern in that progress in the field is rapid and the goal of this effort is to establish a kind of best practice that will be emulated by implementations rather than to perform the classic standardization work of resolving conflicts among disparate existing implementations.

Third, the standard should not inhibit any existing practice without some consideration of the loss.  Algol's triplex type would be forbidden by the "an interval is two numbers" mental model.  It would still be a POD, and while natually substituable for an interval, could not comply with the "double interval[2]" mental model.  If necessary that kind of restriction is tolerable, but some showing of the necessity is called for.

> 
> [...]
> 
> | > Please note that our proposed interval type is meant to be a POD (plain
> | > old data) type and as such has no copy constructor nor destructor.
> | 
> | Is it your plan that the proposal include the POD-only requirement?  I would 
> | suggest that it is an obvious possibility that yeilds good performence 
> | improvements, but how important is it to get fat intervals quickly?
> | 
> | I would must prefer not to see such a requirement in the standard.
> 
> The proposal would need to be precise about whether internal<T> is a
> POD or not; that is unavoidable.

Why?  To the extent that concrete and abstract bound a range of degrees of specificity, what is lost by tending toward the abstract?

It appears to me that the fewer requirements we place upon implementations the greater the chance of acceptance and the greater the chance of implementors acting upon the opportunity.

In this regard I consider things like specific requirements of PODness to be a kind of fine print that should be minimized.

The only requirement for specificity I see would be to state whether or not the user is allowed to assume PODness.  And I would argue against that assumption.  But is such a statement in fact required?

> 
> [...]
> 
> | > Message: 3
> | > Date: Wed, 05 Apr 2006 05:49:41 -0700
> | > From: Lawrence.Crowl@Sun.com
> | > Subject: Re: [std-interval] Re: C++ interval std
> | > To: For discussions concerning the C++ standardization of intervals
> | > 	<std-interval@compgeom.poly.edu>
> | > Message-ID: <200604051249.k35Cnfbd008613@philmont.sfbay.sun.com>
> | > 
> | > first.i.last@comcast.net writes:
> | >  >> Lawrence feels strongly that the standard should be to pass by
> | >  >> value.  Intervals are small data structures;
> | >  >
> | >  >That perspective causes problems, just as it did for complex.
> | >  >Intervals should be considered atomic types whose internal structure
> | >  >is opaque.  We don't consider fp types as structures even though they
> | >  >consist of three distinct fields (and in fact are t reated as separate
> | >  >fields in software implementations of the run-time library).
> | > 
> | > The issue was the mechanism for passing the representation, not the
> | > logical opacity of the type.
> | 
> | The issue is the atomicity of the type.  Atomicity often implies effective 
> | opacity.  Opacity always implies atomicity.
> 
> Yet, at the end of the day the proposal needs to spell out the
> mechanism for passing the representation.  At the moment, I don't see
> how the committee would buy a proposal that is very vague about such
> issue.  Past experience with vagueness in that area has been a fertile
> source of programmer confusion, and defect reports (that the committee
> had to deal with).

Is an abstract type for parameters vague?

> 
> [...]
> 
> | > Message: 7
> | > Date: 05 Apr 2006 15:37:20 +0200
> | > From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> | > Subject: Re: [std-interval] passing by value vs reference
> | > To: For discussions concerning the C++ standardization of intervals
> | > 	<std-interval@compgeom.poly.edu>
> | > Message-ID: <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
> | > Content-Type: text/plain; charset=iso-8859-1
> | > 

> | > If done that way, in the typical cases, the "T" would then appear in
> | > non-deducible context. 
> | 
> | It need not be a dependent type.  It could easily by a parallel set of templates.
> 
> More specifically?

----- interval.h -----
    template< T > struct Interval    { ... };
    template< T > struct IntervalArg { ... };

Such an abstraction would require each implementor to document the calling convention actually used so that interfacing with other languages was possible, but implementations already have to document all kinds of calling convention properties of which parameter passing is only one.

Does the interval standard need to be specific about who cleans arguments off of the stack? Or whether external symbols get leading underbar warts? Or whether stack frame management is required (call/ret versus enter/leave).  Parameter access specs don't really belong in a high level language.  (I know, C is not a high level language and C++ drags much of that along, but we can try...).

> 
> 
> [ As I mentioned earlier, I'm not sure template aliases help in this
> case. ]

I don't understand the term template alias.  Coud you describe one?

> ------------------------------
> 
> Message: 3
> Date: Thu, 06 Apr 2006 09:18:02 +0200
> From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> Subject: Re: [std-interval] Parameter passing
> To: std-interval@compgeom.poly.edu
> Message-ID: <1144307882.3988.78.camel@saline>
> Content-Type: text/plain; charset=ISO-8859-1
> 
> Le mercredi 05 avril 2006 à 21:48 +0000, first.i.last@comcast.net a
> écrit :
>  
> > > Please note that our proposed interval type is meant to be a POD (plain
> > > old data) type and as such has no copy constructor nor destructor.
> > 
> > Is it your plan that the proposal include the POD-only requirement?  I would 
> > suggest that it is an obvious possibility that yeilds good performence 
> > improvements, but how important is it to get fat intervals quickly?
> > 
> > I would must prefer not to see such a requirement in the standard.
> 
> If an implementation follows the specification of our proposal, then the
> resulting type is necessarily a POD. The interface has been specially
> designed so that it happens. With respect to the scope of our proposal,
> I don't see the point of adding a non-POD field to the interval class
> (what would it contain?) or of saying that the copy constructor and the
> destructor have side effects (what would they do?). Maybe we missed
> something in writing the proposal, but at least our toy implementation
> was clearly a POD.

I understand that the current version of the proposal requires that
intervals bs PODs and further than they are just two floating point values.  I suggest that both of those constraints be relaxed.
> 
> > > As a
> > > consequence, on some architectures and with non-broken compilers, they
> > > will behave no differently than if the function arguments were simply
> > > integers; except that the register will probably be bigger, or two
> > > registers will be used. When this happens, passing by value will be
> > > faster than passing by const-reference. Indeed there is no architecture
> > > such that foo(int) is slower than bar(int const &).
> > 
> > Of course there is.  When addresses are narrow (fit in a register) and ints 
> are 
> > wide (don't fit in a register).  64-bit code on 32-bit hardware.  32-bit code 
> on 
> > 16-bit hardware.  16-bit code on 8-bit hardware.  I've even worked on a 
> > bit-slice machine with 20-bit ints and 16-bit addresses.
> 
> It is not enough to consider only the part where the caller writes the
> arguments. You are missing the part where the callee reads the
> arguments. This requires an indirection when passing an argument by
> reference. Let us consider a non-trivial example like the successor
> function:
> 
>   int foo(int a)        { return a + 1; }
>   int bar(int const &a) { return a + 1; }
> 
> So I state it again, slightly modified: there is no architecture such
> that foo(int) is slower than bar(int const &) if the functions use the
> integer argument.

If the function call hierarchy is deep then many functions will accept and pass on parameters with only the leaf functions actually "using" the values.

But this is far afield from the real issue because floats aren't ints and many compilers will not pass floats in registers, much less structs in registers.  The standard should not make unnecessary assumptions about what implementations are willing and able to do at the lower levels.

> 
> > > I don't see any additional complexity in 4 with respect to 3. As already
> > > mentioned by Bill Clarke, you could simply have a typedef member in
> > > interval<T> to express the calling convention of the functions of the
> > > interval library: typedef interval<T> const &param_type;
> > > 
> > > This requires all the functions of the library to use the same calling
> > > convention.
> > 
> > How do you derive this requirement?  I don't see it.
> 
> If you have two functions with different calling conventions:
> 
>   interval foo(interval, interval);
>   interval bar(interval const &, interval const &);
> 
> then one of them is obviously not of the type
> 
>   interval binary_function(param_type, param_type);

Of course.

Does the existence of the type definition _require_ its use?  I think not.  On the assumption that some strange function (of which I am at present unable to conceive an example) needs to use the "other" convention, it can simply do so.  The only value in standardizing the convention lies in the assumption that users will emulate it.  If the library sets a default convention either implicitly via bare argument declarations or explicitly with a specific argument type definition then users will adopt the default convention.  That does not require that there be no exceptions to the default convention.

My dispute is with: "This REQUIRES [emphais added] all the functions of the library to use the same calling convention."  It permits/encourages the use of the same convention, but does not mandate it.

> ------------------------------
> 
> Message: 4
> Date: Thu, 06 Apr 2006 09:18:09 +0200
> From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> Subject: Re: [std-interval] passing by value vs reference
> To: std-interval@compgeom.poly.edu
> Message-ID: <1144307889.3988.80.camel@saline>
> Content-Type: text/plain; charset=ISO-8859-1
> 
> Le mercredi 05 avril 2006 à 13:55 -0300, Fernando Cacciola a écrit :
> 
> > If  the FPU registers are stacked, like in the x86 family, it wouldn't
> > be too uncommon, IMHO, for a compiler to do:
> 
> [...]
> 
> As a matter of fact, it would be really uncommon. For example, x86 ABIs
> require the FPU stack to be empty (except maybe for arguments) at the
> beginning of every functions.

There are x86 systems without the (draconian) requirement for an empty FPU stack on function entry.  It is vary hard to evaluate a substantial expression efficiently under that requirement.

> Otherwise the functions would cause FPU
> stack overflows since they would have very little or no space left to do
> their computations.

That is what the stack overflow trap is for.

> Thanks to the empty stack, the compiler knows that
> it can use eight FPU registers without crashing the whole process. So
> for the particular example of (a*b)*(c*d), there is no way for a
> compiler to avoid temporarily storing the result of a*b on the memory stack.

Of course there is.  Pseudo code using FPU stack only with depth comments:

mulltree:      ; 0
    push a      ; 1
    push b      ; 2
    mul          ; 1
    push c      ; 2
    push d      ; 3
    mul          ; 2
    mul          ; 1

> 
> > That is, stacked FPU registers allows the compiler to allocate the
> > function frames (which is the problem in your example) without using
> > the external memory-based stack or rearranging the registers
> > manually. 
> 
> As a side note on this topic, stacked FPU registers seemed like a good
> idea thirty years ago. But now that the technology has evolved and has
> gone past GHz speeds, this good idea has become a nightmare for
> processor designers. Translating stack positions to standard bank
> positions incur a huge latency in decoding FPU instructions in the
> processor. This translation work is better done once and for all at
> compilation time. I would be really surprised if a modern processor
> (that is not plagued by backward compatibility concerns) implements
> stacked FPU registers.

If that were true (I am agnostic) then compilers would be better off generating explict register access instructions instead of implicit stack access instructions.  Even the x87 has both.

My understanding is that the opposite is occurring.  For instance, one well regarded compiler used to reserve some of the registers for explicit access and used the rest as a stack.  Fairly recently they discarded the direct access area and now use the entire register set as a stack.  This in a compiler known for decades to generate tight, fast code.

Point is that we should not be trying to shoehorn intervals into a single theoretical platform model unless it is absolutely necessary.

> ------------------------------
> 
> Message: 6
> Date: Thu, 06 Apr 2006 00:31:20 -0700
> From: Steve Clamage <Stephen.Clamage@Sun.COM>
> Subject: Re: [std-interval] C++ interval std
> To: For discussions concerning the C++ standardization of intervals
> 	<std-interval@compgeom.poly.edu>
> Message-ID: <4434C3C8.7050808@sun.com>
> Content-Type: text/plain; charset=us-ascii; format=flowed
> 
> Alan Eliasen wrote:
> > Steve Clamage wrote:
> > 
> > 
> > 
> >>>Bill Clarke wrote:
> >>>
> >>>
> >>>>This experiment is extremely platform specific, as you probably are
> >>>>aware.  Most platforms in use today other than x86 will be the other way
> >>>>around (add-by-value will be faster than add-by-const-ref).
> > 
> > 
> > Alan Eliasen wrote:
> > 
> >>>   How can that assertion possibly be made?  As you know, if a parameter
> >>>is passed by value, then the copy constructor is automatically called
> >>>for each object (e.g. twice for an add operator) on function entry, and
> >>>then the destructor is called (twice) on function exit.
> >>
> > 
> > Steve Clamage wrote:
> > 
> >>A simple object like complex or interval should have no user-defined
> >>copy constructor or destructor. That is, the default copy constructor
> >>generated by the compiler does the right thing and does not need to be
> >>user-defined. The destructor has nothing to do, and so should not be
> >>user-defined. In that case, pass-by-value can be optimized into register
> >>passing with no additional copying.
> > 
> > 
> >    You still agree, though, that even if the implementation doesn't do
> > memory allocation in the constructor, the compiler will still generate a
> > copy constructor and a destructor, (perhaps pretty simple and efficient)
> > and these will get normally get called in a pass-by-value.  Again, a
> > very smart compiler can optimize these away if it realizes that the copy
> > is unnecessary, but by simply specifying call-by-constant-reference, we
> > don't have to hope that the compiler is very smart.  We simply eliminate
> > even the possibility of calling the copy constructor and destructor.
> 
> In C++, every type (including int) has a constructor and destructor. This point 
> of definition simplifies the exposition of language rules. We are saved from 
> hopelessly inefficient implementations by the "as-if rule." It says the 
> implementation can do what is wants as long as observable behavior is preserved. 
> Multiple copies of temporary objects (as in parameter and returned-value 
> passing) are not counted in "observable behavior" -- extra copies can be elided.
> 
> For POD types, I have never seen or heard of a compiler that actually generated 
> a real constructor or destructor. Compilers perform a simple copy by whatever 
> means is most efficient.

You have stated the key point quite well.  It means that one writes code for correctness and efficiency (algorithm selection) but one leaves the low-level details to the compiler.

We can trust that the implementors will have at least as much interest in fast code as we do and that they will be far better informed as to what matters on their target platforms.  So the issue should be delegated to the implementors.

> ******************************************

-- Lee Winter

From gdr@integrable-solutions.net Thu Apr  6 11:01:48 2006
Received: from kraid.nerim.net (smtp-104-thursday.nerim.net [62.4.16.104])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k36I1ljd013759
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 11:01:47 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by kraid.nerim.net (Postfix) with ESMTP id BD86040F5F
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 18:09:51 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k36G8LtZ027572
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 18:08:21 +0200
Received: (from gdr@localhost)k36G8Ln2027571;
	Thu, 6 Apr 2006 18:08:21 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] PODs and parameter passing
References: <040620061509.27602.44352F18000A73E200006BD222007601809B9C0E04D207D29B9C9D0700@comcast.net>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <040620061509.27602.44352F18000A73E200006BD222007601809B9C0E04D207D29B9C9D0700@comcast.net>
Organization: Integrable Solutions
Date: 06 Apr 2006 18:08:21 +0200
Message-ID: <m3mzeylma2.fsf@uniton.integrable-solutions.net>
Lines: 108
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 18:01:48 -0000

first.i.last@comcast.net writes:

[...]

| > | > Please note that our proposed interval type is meant to be a POD (plain
| > | > old data) type and as such has no copy constructor nor destructor.
| > | 
| > | Is it your plan that the proposal include the POD-only requirement?  I would 
| > | suggest that it is an obvious possibility that yeilds good performence 
| > | improvements, but how important is it to get fat intervals quickly?
| > | 
| > | I would must prefer not to see such a requirement in the standard.
| > 
| > The proposal would need to be precise about whether internal<T> is a
| > POD or not; that is unavoidable.
| 
| Why?

because if the proposal is accepted, it is going to be part of a much
larger context.  They are some operations on can do on types depending
on whether they are PODs or not, like offsetof, initializations and
other fine details.  The standard needs to say whether such operations
are permitted or not.

[...]

| In this regard I consider things like specific requirements of
| PODness to be a kind of fine print that should be minimized. 

probably; but in the context we are talking about, you have to
specify.  You can't do without it -- and we learnt it the hard way. 

[...]

| > | > The issue was the mechanism for passing the representation, not the
| > | > logical opacity of the type.
| > | 
| > | The issue is the atomicity of the type.  Atomicity often implies effective 
| > | opacity.  Opacity always implies atomicity.
| > 
| > Yet, at the end of the day the proposal needs to spell out the
| > mechanism for passing the representation.  At the moment, I don't see
| > how the committee would buy a proposal that is very vague about such
| > issue.  Past experience with vagueness in that area has been a fertile
| > source of programmer confusion, and defect reports (that the committee
| > had to deal with).
| 
| Is an abstract type for parameters vague?

In C++, there is the notion of "abstract class" but I doubt that is
what you were refering to.  One has to be more specific than general
terms; this is not a language independent specification.

| > [...]
| > 
| > | > Message: 7
| > | > Date: 05 Apr 2006 15:37:20 +0200
| > | > From: Gabriel Dos Reis <gdr@integrable-solutions.net>
| > | > Subject: Re: [std-interval] passing by value vs reference
| > | > To: For discussions concerning the C++ standardization of intervals
| > | > 	<std-interval@compgeom.poly.edu>
| > | > Message-ID: <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
| > | > Content-Type: text/plain; charset=iso-8859-1
| > | > 
| 
| > | > If done that way, in the typical cases, the "T" would then appear in
| > | > non-deducible context. 
| > | 
| > | It need not be a dependent type.  It could easily by a parallel set of templates.
| > 
| > More specifically?
| 
| ----- interval.h -----
|     template< T > struct Interval    { ... };
|     template< T > struct IntervalArg { ... };

That is half of it; the other half is how are they used concretely in
specifying function parameters?  That is the most interesting bits.
Please don't be afraid to be concrete, otherwise I fear we would not
communicate effectively: the issue at hand is too concrete.

| Such an abstraction would require each implementor to document the
| calling convention actually used so that interfacing with other
| languages was possible, but implementations already have to document
| all kinds of calling convention properties of which parameter
| passing is only one. 

How is IntervalArg<T> is different from IntervalArg<T>?  What do they
contain? 

| Does the interval standard need to be specific about who cleans
| arguments off of the stack?

Once we know what IntervalArg<T> and Interval<T> contain and do, we
can get to that question.

[...]

| > [ As I mentioned earlier, I'm not sure template aliases help in this
| > case. ]
| 
| I don't understand the term template alias.  Coud you describe one?

A "template alias" is an alias for a family of types

   http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1489.pdf

-- Gaby
From first.i.last@comcast.net Thu Apr  6 12:26:32 2006
Received: from rwcrmhc14.comcast.net (rwcrmhc14.comcast.net [216.148.227.154])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k36JQWjd013880
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 12:26:32 -0700
Received: from rmailcenter90.comcast.net ([204.127.197.190])
          by comcast.net (rwcrmhc14) with SMTP
          id <20060406173448m1400n82oie>; Thu, 6 Apr 2006 17:34:48 +0000
Received: from [71.192.84.143] by rmailcenter90.comcast.net;
	Thu, 06 Apr 2006 17:34:47 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] PODs and parameter passing
Date: Thu, 06 Apr 2006 17:34:47 +0000
Message-Id: <040620061734.6507.44355137000047DE0000196B22068246939B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 19:26:32 -0000

 -------------- Original message ----------------------
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> first.i.last@comcast.net writes:
> 
> [...]
> 
> | > | > Please note that our proposed interval type is meant to be a POD (plain
> | > | > old data) type and as such has no copy constructor nor destructor.
> | > | 
> | > | Is it your plan that the proposal include the POD-only requirement?  I 
> would 
> | > | suggest that it is an obvious possibility that yeilds good performence 
> | > | improvements, but how important is it to get fat intervals quickly?
> | > | 
> | > | I would must prefer not to see such a requirement in the standard.
> | > 
> | > The proposal would need to be precise about whether internal<T> is a
> | > POD or not; that is unavoidable.
> | 
> | Why?
> 
> because if the proposal is accepted, it is going to be part of a much
> larger context.  They are some operations on can do on types depending
> on whether they are PODs or not, like offsetof, initializations and
> other fine details.  The standard needs to say whether such operations
> are permitted or not.

OK, I did not ask a sufficiently precise question.  Why is "implementation defined" unacceptable?  I.e., why does PODness have to be a constant for all implementations?

I hope offsetof() is not going to be used much on intervals.  There would be little point in scrounging around inside an interval unless you are trying to cause (yourself) some trouble.

Initialization of an interval is almost certainly going to require a ctor due to the problem of compiler mangling of literal constants, so for purposes of initialization intervals aren't going to behave like PODs even if they are PODs.

Can you think of any other fine details (other than things like binary IO) that might influence the preference for PODs over "real" objects?

> 
> [...]
> 
> | In this regard I consider things like specific requirements of
> | PODness to be a kind of fine print that should be minimized. 
> 
> probably; but in the context we are talking about, you have to
> specify.  You can't do without it -- and we learnt it the hard way.

OK I accept your judgement that a specification is necessary.  That leaves the issue of whether it can be delegated to the implementation.  If it can be then its worth discussing whether it should be.
 
> 
> [...]
> 
> | > | > The issue was the mechanism for passing the representation, not the
> | > | > logical opacity of the type.
> | > | 
> | > | The issue is the atomicity of the type.  Atomicity often implies effective 
> | > | opacity.  Opacity always implies atomicity.
> | > 
> | > Yet, at the end of the day the proposal needs to spell out the
> | > mechanism for passing the representation.  At the moment, I don't see
> | > how the committee would buy a proposal that is very vague about such
> | > issue.  Past experience with vagueness in that area has been a fertile
> | > source of programmer confusion, and defect reports (that the committee
> | > had to deal with).
> | 
> | Is an abstract type for parameters vague?
> 
> In C++, there is the notion of "abstract class" but I doubt that is
> what you were refering to.  One has to be more specific than general
> terms; this is not a language independent specification.

Abstractions hide implementation details.  The previous suggestion (yours?) of interval::param_type would hide either "interval const &" or "interval" type definitions.  That would certainly be usefu, but  dependent types are problematic.  The only variation I'm suggesting is to make that parameter type independent of the interval template type.

> 
> | > [...]
> | > 
> | > | > Message: 7
> | > | > Date: 05 Apr 2006 15:37:20 +0200
> | > | > From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> | > | > Subject: Re: [std-interval] passing by value vs reference
> | > | > To: For discussions concerning the C++ standardization of intervals
> | > | > 	<std-interval@compgeom.poly.edu>
> | > | > Message-ID: <m3d5fwcfe7.fsf@uniton.integrable-solutions.net>
> | > | > Content-Type: text/plain; charset=iso-8859-1
> | > | > 
> | 
> | > | > If done that way, in the typical cases, the "T" would then appear in
> | > | > non-deducible context. 
> | > | 
> | > | It need not be a dependent type.  It could easily by a parallel set of 
> templates.
> | > 
> | > More specifically?
> | 
> | ----- interval.h -----
> |     template< T > struct Interval    { ... };
> |     template< T > struct IntervalArg { ... };
> 
> That is half of it; the other half is how are they used concretely in
> specifying function parameters?  That is the most interesting bits.
> Please don't be afraid to be concrete, otherwise I fear we would not
> communicate effectively: the issue at hand is too concrete.
> 
> | Such an abstraction would require each implementor to document the
> | calling convention actually used so that interfacing with other
> | languages was possible, but implementations already have to document
> | all kinds of calling convention properties of which parameter
> | passing is only one. 
> 
> How is IntervalArg<T> is different from IntervalArg<T>?  What do they
> contain? 

OK, I'll bite.  For this discussion assume Interval<T> is the same as the existing proposal.  If Interval<T> were not a template, say intervalf, interval, and intervalld, and intervalq in C99-style naming,  then we would use intervalf_arg_t, interval_arg_t, intervalld_arg_t, and intervalq_arg_t as corresponding argument types.  They would be implementation defined.  Everywhere that one wanted to pass in interval argument one would use the corresponding *arg_t to maintain platform optimization agility.

But Interval is going to be a template.  It is tempting to want to derive the argument type, hre named IntervalArg from the value type Interval.  But templates ahve weaknesses, one of which inhibits that derivation.

So I'm suggesting an independent template.  In crudest terms it would be something like this :
    
namespace pbr {

    template< typename T >
    struct IntervalArg { typedef T const & _t; };

    struct IntervalArg<float>
    { typedef Interval<float> const & _t; };

    struct IntervalArg<double>
    { typedef Interval<double> const & _t; };

    ... ditto for other fp types

} // pbr

namespace pbv {

    template< typename T >
    struct IntervalArg { typedef T const & _t; };

    struct IntervalArg<float>
    { typedef Interval<float> _t; };

    struct IntervalArg<double>
    { typedef Interval<double> _t; };

    ... ditto for other fp types

} // pbv

In use it would be a bit ugly:

    using namespace pbv; // or pbr
    template< typename T >
    Interval<T> agile_func( IntervalArg<T>::_t arg1 ) { ... }

A subtlety that may not be immediately apparent is that the purpose of the unspecialized template is to address contexts in which a template parameter T represents an interval type, whose base type is not specific.  Thus:

    template< typename T /* in truth Interval<U> */ >
    struct userdefined {
        ...
        T interval_func( IntervalArg<T>::_t arg );
        ...
    }; // userdefined

A more complex implementation would eliminate the unsightly ::_t along the lines of a proxy type.  It would rely upon the compiler to optimize away all of the bookkeepping:

namespace pbr {

    template < typename T >
    struct IntervalArg {  // for discussion purposes only
        IntervalArg( Interval<T> arg )
        : ref_( val )
        {}
        operator Interval<T> () const
        { return ref_; }
    private:
        Interval<T> const & ref_;
    };

} // pbr

namespace pbv { // all of this optimizes away

    template < typename T >
    struct IntervalArg {  // for discussion purposes only
        IntervalArg( Interval<T> arg )
        : val_( arg )
        {}
        operator Interval<T> () const
        { return val_; }
    private:
        Interval<T> val_;
    };

} // pbv

Usage is then straightforward:

    using namespace pbv; // or pbr
    template< typename T >
    Interval<T> agile_func( IntervalArg<T> arg1 ) { ... }

Lest any reader misunferstand, I am _not_ proposing that both pbr and pbv be available.  I only used the namespaces to separate the alternative implementations for the purposes of clarity within this discussion.

> 
> | Does the interval standard need to be specific about who cleans
> | arguments off of the stack?
> 
> Once we know what IntervalArg<T> and Interval<T> contain and do, we
> can get to that question.

I was being facetious.  I suppose that's an error in judgement when one is indulging in language laywering.  ;-)

Stack cleaning conventions don't belong in the standard IMHO.

> 
> [...]
> 
> | > [ As I mentioned earlier, I'm not sure template aliases help in this
> | > case. ]
> | 
> | I don't understand the term template alias.  Coud you describe one?
> 
> A "template alias" is an alias for a family of types
> 
>    http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1489.pdf

Nope.  I'm not going there!  Not now, and probably not ever.

Thanks for the info.

-- Lee Winter
From gdr@integrable-solutions.net Thu Apr  6 16:00:03 2006
Received: from kraid.nerim.net (smtp-104-thursday.nerim.net [62.4.16.104])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k36N02jd014122
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 16:00:02 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by kraid.nerim.net (Postfix) with ESMTP id 220A040E20
	for <std-interval@compgeom.poly.edu>;
	Thu,  6 Apr 2006 23:08:15 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k36L6itZ029705
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 23:06:44 +0200
Received: (from gdr@localhost)k36L6iii029704;
	Thu, 6 Apr 2006 23:06:44 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] PODs and parameter passing
References: <040620061734.6507.44355137000047DE0000196B22068246939B9C0E04D207D29B9C9D0700@comcast.net>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <040620061734.6507.44355137000047DE0000196B22068246939B9C0E04D207D29B9C9D0700@comcast.net>
Organization: Integrable Solutions
Date: 06 Apr 2006 23:06:44 +0200
Message-ID: <m3r74a4dnf.fsf@uniton.integrable-solutions.net>
Lines: 282
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 06 Apr 2006 23:00:03 -0000

first.i.last@comcast.net writes:

[...]

| > | > The proposal would need to be precise about whether internal<T> is a
| > | > POD or not; that is unavoidable.
| > | 
| > | Why?
| > 
| > because if the proposal is accepted, it is going to be part of a much
| > larger context.  They are some operations on can do on types depending
| > on whether they are PODs or not, like offsetof, initializations and
| > other fine details.  The standard needs to say whether such operations
| > are permitted or not.
| 
| OK, I did not ask a sufficiently precise question.  Why is
| "implementation defined" unacceptable?  I.e., why does PODness have
| to be a constant for all implementations? 

Because whether the operations in question are permitted or not would
depend on the compiler; I don't see any compelling reason for that
sort of non-portability.

| I hope offsetof() is not going to be used much on intervals. 

It is a reasonable hope; others have other reasonable expectations
too.  The question is not whether it would be used "too much", but
whether it should be permitted at all.  I can see arguments both
ways; but none that convinces me of the non-portability you suggest.

| There
| would be little point in scrounging around inside an interval unless
| you are trying to cause (yourself) some trouble. 

That is your expectation; others expect to "serialize" things, using
offsetof among other things -- and we do have an open issue with
std::complex for example, from various point of view.

| Initialization of an interval is almost certainly going to require a
| ctor due to the problem of compiler mangling of literal constants,

I'm sorry; I don't see the connection.  Could you elaborate?

| so for purposes of initialization intervals aren't going to behave
| like PODs even if they are PODs. 

I don't see why.

| Can you think of any other fine details (other than things like
| binary IO) that might influence the preference for PODs over "real"
| objects? 

It all depends on the degree of non-PODness; there are ABIs out there
on popular platforms that make optimization decisions based on degree
of PODness.

[...]

| > | > | > The issue was the mechanism for passing the representation, not the
| > | > | > logical opacity of the type.
| > | > | 
| > | > | The issue is the atomicity of the type.  Atomicity often implies effective 
| > | > | opacity.  Opacity always implies atomicity.
| > | > 
| > | > Yet, at the end of the day the proposal needs to spell out the
| > | > mechanism for passing the representation.  At the moment, I don't see
| > | > how the committee would buy a proposal that is very vague about such
| > | > issue.  Past experience with vagueness in that area has been a fertile
| > | > source of programmer confusion, and defect reports (that the committee
| > | > had to deal with).
| > | 
| > | Is an abstract type for parameters vague?
| > 
| > In C++, there is the notion of "abstract class" but I doubt that is
| > what you were refering to.  One has to be more specific than general
| > terms; this is not a language independent specification.
| 
| Abstractions hide implementation details.  The previous suggestion
| (yours?) of interval::param_type

(no, it was not mine)

| would hide either "interval const
| &" or "interval" type definitions.  That would certainly be usefu,
| but  dependent types are problematic.  The only variation I'm
| suggesting is to make that parameter type independent of the
| interval template type. 

and that begs the question of to what degree the problem worths that
level of complexity.  

[...]

| > | ----- interval.h -----
| > |     template< T > struct Interval    { ... };
| > |     template< T > struct IntervalArg { ... };
| > 
| > That is half of it; the other half is how are they used concretely in
| > specifying function parameters?  That is the most interesting bits.
| > Please don't be afraid to be concrete, otherwise I fear we would not
| > communicate effectively: the issue at hand is too concrete.
| > 
| > | Such an abstraction would require each implementor to document the
| > | calling convention actually used so that interfacing with other
| > | languages was possible, but implementations already have to document
| > | all kinds of calling convention properties of which parameter
| > | passing is only one. 
| > 
| > How is IntervalArg<T> is different from IntervalArg<T>?  What do they
| > contain? 
| 
| OK, I'll bite.  For this discussion assume Interval<T> is the same
| as the existing proposal.  If Interval<T> were not a template, say
| intervalf, interval, and intervalld, and intervalq in C99-style
| naming,  then we would use intervalf_arg_t, interval_arg_t,
| intervalld_arg_t, and intervalq_arg_t as corresponding argument
| types.  They would be implementation defined.  Everywhere that one
| wanted to pass in interval argument one would use the corresponding
| *arg_t to maintain platform optimization agility. 
| 
| But Interval is going to be a template.  It is tempting to want to
| derive the argument type, hre named IntervalArg from the value type
| Interval.  But templates ahve weaknesses, one of which inhibits that
| derivation. 
| 
| So I'm suggesting an independent template.  In crudest terms it
| would be something like this : 
|     
| namespace pbr {
| 
|     template< typename T >
|     struct IntervalArg { typedef T const & _t; };
| 
|     struct IntervalArg<float>
|     { typedef Interval<float> const & _t; };
| 
|     struct IntervalArg<double>
|     { typedef Interval<double> const & _t; };
| 
|     ... ditto for other fp types
| 
| } // pbr
| 
| namespace pbv {
| 
|     template< typename T >
|     struct IntervalArg { typedef T const & _t; };
| 
|     struct IntervalArg<float>
|     { typedef Interval<float> _t; };
| 
|     struct IntervalArg<double>
|     { typedef Interval<double> _t; };
| 
|     ... ditto for other fp types
| 
| } // pbv
| 
| In use it would be a bit ugly:
| 
|     using namespace pbv; // or pbr
|     template< typename T >
|     Interval<T> agile_func( IntervalArg<T>::_t arg1 ) { ... }

Now, I can't call agile_func() using the "natural" syntax; I have to
explicitly specify the argument type.  It is a clutter and a level
of complexity that I'm having trouble finding convincing justification
for. 

| A subtlety that may not be immediately apparent is that the purpose
| of the unspecialized template is to address contexts in which a
| template parameter T represents an interval type, whose base type is
| not specific.  Thus: 
| 
|     template< typename T /* in truth Interval<U> */ >
|     struct userdefined {
|         ...
|         T interval_func( IntervalArg<T>::_t arg );
|         ...
|     }; // userdefined
| 
| A more complex implementation would eliminate the unsightly ::_t
| along the lines of a proxy type.  It would rely upon the compiler to
| optimize away all of the bookkeepping: 

So now, we have to add increasing levels of complexity to "solve"
something I'm not sure is a problem.  Simple things should be simple.

| namespace pbr {
| 
|     template < typename T >
|     struct IntervalArg {  // for discussion purposes only
|         IntervalArg( Interval<T> arg )
|         : ref_( val )
|         {}
|         operator Interval<T> () const
|         { return ref_; }
|     private:
|         Interval<T> const & ref_;
|     };
| 
| } // pbr

ABIs that unconditionally pass structs by "invisible" references would
now go through two indirections to access the data passed to the
function.  What really is the problem this is supposed to solve?

| namespace pbv { // all of this optimizes away
| 
|     template < typename T >
|     struct IntervalArg {  // for discussion purposes only
|         IntervalArg( Interval<T> arg )
|         : val_( arg )
|         {}
|         operator Interval<T> () const
|         { return val_; }
|     private:
|         Interval<T> val_;
|     };
| 
| } // pbv
| 
| Usage is then straightforward:
| 
|     using namespace pbv; // or pbr
|     template< typename T >
|     Interval<T> agile_func( IntervalArg<T> arg1 ) { ... }
| 
| Lest any reader misunferstand, I am _not_ proposing that both pbr
| and pbv be available.  I only used the namespaces to separate the
| alternative implementations for the purposes of clarity within this
| discussion. 

I understand that.  However, from my perspective -- because C++ has
template, argument deduction, overloading -- it really is
essential that non-portability be minimized when they can't be
avoided.  I'm not sure it cannot be avoided here.  Yes, we have
instances of such non-portability in the current standard; but past
lessons suggest that we don't multiply the existing troubles.

| > | Does the interval standard need to be specific about who cleans
| > | arguments off of the stack?
| > 
| > Once we know what IntervalArg<T> and Interval<T> contain and do, we
| > can get to that question.
| 
| I was being facetious.  I suppose that's an error in judgement when
| one is indulging in language laywering.  ;-) 

For the interest of the discussion, we should refrain from suggesting
people are "language lawyer" just because they don't agree with us.

| Stack cleaning conventions don't belong in the standard IMHO.
| 
| > 
| > [...]
| > 
| > | > [ As I mentioned earlier, I'm not sure template aliases help in this
| > | > case. ]
| > | 
| > | I don't understand the term template alias.  Coud you describe one?
| > 
| > A "template alias" is an alias for a family of types
| > 
| >    http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1489.pdf
| 
| Nope.  I'm not going there!  Not now, and probably not ever.

Good.  For the interest of the discussion, writing

    template<typename T>
      using IntervalArg = const Interval<T>&;

would make the "T" in a deducible context; remove needs for proxies
and such.  

>From my perspective, It is still a level of complexity (like any other
alternative you've suggested) for which I have not seen real
justification for -- e.g. what problems it supposed to solve, why that
problem is important, why that is a better alternative.

-- Gaby
From first.i.last@comcast.net Thu Apr  6 20:31:10 2006
Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [204.127.192.81])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k373VAjd014412
	for <std-interval@compgeom.poly.edu>; Thu, 6 Apr 2006 20:31:10 -0700
Received: from rmailcenter16.comcast.net ([204.127.197.126])
          by comcast.net (rwcrmhc11) with SMTP
          id <20060407013914m11005he6he>; Fri, 7 Apr 2006 01:39:29 +0000
Received: from [71.192.84.143] by rmailcenter16.comcast.net;
	Fri, 07 Apr 2006 01:39:06 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] PODs and parameter passing
Date: Fri, 07 Apr 2006 01:39:06 +0000
Message-Id: <040720060139.23646.4435C2BA000BCCFE00005C5E22058864429B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 03:31:10 -0000

 -------------- Original message ----------------------
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> first.i.last@comcast.net writes:
> 
> [...]
> 
> | > | > The proposal would need to be precise about whether internal<T> is a
> | > | > POD or not; that is unavoidable.
> | > | 
> | > | Why?
> | > 
> | > because if the proposal is accepted, it is going to be part of a much
> | > larger context.  They are some operations on can do on types depending
> | > on whether they are PODs or not, like offsetof, initializations and
> | > other fine details.  The standard needs to say whether such operations
> | > are permitted or not.
> | 
> | OK, I did not ask a sufficiently precise question.  Why is
> | "implementation defined" unacceptable?  I.e., why does PODness have
> | to be a constant for all implementations? 
> 
> Because whether the operations in question are permitted or not would
> depend on the compiler; I don't see any compelling reason for that
> sort of non-portability.

It is only non-portable if it is not detectable at compile time.

> 
> | I hope offsetof() is not going to be used much on intervals. 
> 
> It is a reasonable hope; others have other reasonable expectations
> too.  The question is not whether it would be used "too much", but
> whether it should be permitted at all.  I can see arguments both
> ways; but none that convinces me of the non-portability you suggest.
> 
> | There
> | would be little point in scrounging around inside an interval unless
> | you are trying to cause (yourself) some trouble. 
> 
> That is your expectation; others expect to "serialize" things, using
> offsetof among other things -- and we do have an open issue with
> std::complex for example, from various point of view.

Serialization suggests interval::operator<<() and interval::operator>>() rather than offsetof(), but the (non-)existence of those methods is a hugely contentious issue.  In fact serialization of the mental model "double interval[2]' could be handled by a user with upper() and lower().  Deserialization is just use of an appropriate constructor.  I have very little sympathy for users who insist on below-API access to objects.

Does anyone reading this list believe that using offsetof() on intervals is a healthy practice?  If so, to what end?

> 
> | Initialization of an interval is almost certainly going to require a
> | ctor due to the problem of compiler mangling of literal constants,
> 
> I'm sorry; I don't see the connection.  Could you elaborate?
> 
> | so for purposes of initialization intervals aren't going to behave
> | like PODs even if they are PODs. 
> 
> I don't see why.

If we allow classic static init then the compiler will be translating the text of literal values into binary.  If that translation occurs without directed rounding it will produce degenerate intervals that astonish the user and are in reality containment failures.  Consider this:

    static interval const tenths[] = 
    { { 0.0, 0.0 }
    , { 0.1, 0.1 } // oops
    , { 0.2, 0.2 } // oops
    , { 0.3, 0.3 } // oops
    , { 0.4, 0.4 } // oops
    , { 0.5, 0.5 }
    , { 0.6, 0.6 } // oops
    , { 0.7, 0.7 } // oops
    , { 0.8, 0.8 } // oops
    , { 0.9, 0.9 } // oops
    };

The array will contain the correct values only if the translation of the two members of each element is done with opposing directed rounding of the individual results.  So we might be force to use only dynamic initialization such as:

    static interval const tenths[] = 
    { interval( "[0.0]" }  // only used for consistency of notation
    { interval( "[0.1]" }
    { interval( "[0.2]" }
    { interval( "[0.3]" }
    { interval( "[0.4]" }
    { interval( "[0.5]" }  // only used for consistency of notation
    { interval( "[0.6]" }
    { interval( "[0.7]" }
    { interval( "[0.8]" }
    { interval( "[0.9]" }
    };

The above produces two degenerate intervals and eight non-degenerate intervals, will not astonish the user, and has no containment failures (assuming interval::interval( char const * ) works properly).

Thus PODness is not everywhere advantageous.

Is the distinction clear from the above example?

> | Can you think of any other fine details (other than things like
> | binary IO) that might influence the preference for PODs over "real"
> | objects? 
> 
> It all depends on the degree of non-PODness; there are ABIs out there
> on popular platforms that make optimization decisions based on degree
> of PODness.

Let's see if we can mutate a classic into something useful:

    Intervals should be as POD as possible and no PODer.
          -- apologies to Albert?

-- Lee Winter
From Stephen.Clamage@Sun.COM Fri Apr  7 02:19:44 2006
Received: from brmea-mail-2.sun.com (brmea-mail-2.Sun.COM [192.18.98.43])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k379Jijd014745
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 02:19:44 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-2.sun.com (8.12.10/8.12.9) with ESMTP id k377S5mU023812
	for <std-interval@compgeom.poly.edu>;
	Fri, 7 Apr 2006 01:28:05 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IXC00C01CDF8N@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 00:28:04 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-161.SFBay.Sun.COM [129.150.20.161])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IXC00GROCQQI8@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 00:28:04 -0700 (PDT)
Date: Fri, 07 Apr 2006 00:28:03 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] PODs and parameter passing
In-reply-to: 
	<040720060139.23646.4435C2BA000BCCFE00005C5E22058864429B9C0E04D207D29B9C9D0700@comcast.net>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <44361483.9070208@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii; format=flowed
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: 
	<040720060139.23646.4435C2BA000BCCFE00005C5E22058864429B9C0E04D207D29B9C9D0700@comcast.net>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 09:19:44 -0000

first.i.last@comcast.net wrote:
>  -------------- Original message ----------------------
> From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> 
>>first.i.last@comcast.net writes:
>>
>>[...]
>>| OK, I did not ask a sufficiently precise question.  Why is
>>| "implementation defined" unacceptable?  I.e., why does PODness have
>>| to be a constant for all implementations? 
>>
>>Because whether the operations in question are permitted or not would
>>depend on the compiler; I don't see any compelling reason for that
>>sort of non-portability.
> 
> It is only non-portable if it is not detectable at compile time.

Scenario: A programmer develops on one platform, unaware that the code depends 
on a feature that varies among implementations. A colleague tries the code on a 
different platform, and it doesn't compile. The code requires a significant 
re-write to accomodate the differences.

Don't you agree this is a portability issue?

I'm a compiler developer. I find that the majority of customer questions and 
complaints are of the form, "My code works with compiler X, why doesn't it work 
with your compiler?"  Often the answer is that the code is not portable, in the 
sense of the scenario above.

Every time the standard says "undefined", "unspecified", or "implementation 
defined", it opens the door to problems like these. We need a compelling reason 
to leave issues like POD-ness and function signatures up to individual 
implementations.

[...]
>>
>>It all depends on the degree of non-PODness; there are ABIs out there
>>on popular platforms that make optimization decisions based on degree
>>of PODness.

Gaby, PODness is binary. If a type does not satisfy all the requirements of a 
POD, it is not a POD.

 > Let's see if we can mutate a classic into something useful:
 >
 >     Intervals should be as POD as possible and no PODer.
 >           -- apologies to Albert?
 >
 > -- Lee Winter

Let's paraphrase Tolstoy's "Anna Karenina" instead:
    All PODs are alike. Every non-POD is non-POD in its own way.

In particular, a POD does not have a user-defined constructor. If the only 
departure from PODness is the presence of user-defined initialization or 
converting constructors (but still no copy constructor), a compiler can generate 
efficient code for copying and passing values in and out of functions. (I think 
we could also allow private or protected members.)

---
Steve Clamage, stephen.clamage@sun.com

From Sylvain.Pion@sophia.inria.fr Fri Apr  7 02:29:03 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k379T3jd014776
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 02:29:03 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k377bS8O012821
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 09:37:32 +0200
Received: from [193.16.179.143] ([193.16.179.143])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k377bGn6012729
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 09:37:16 +0200
Message-ID: <443616B2.2040303@sophia.inria.fr>
Date: Fri, 07 Apr 2006 09:37:22 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] PODs and parameter passing
References: <040720060139.23646.4435C2BA000BCCFE00005C5E22058864429B9C0E04D207D29B9C9D0700@comcast.net>
In-Reply-To: <040720060139.23646.4435C2BA000BCCFE00005C5E22058864429B9C0E04D207D29B9C9D0700@comcast.net>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Fri, 07 Apr 2006
	09:37:17 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 09:29:03 -0000

I have the impression that the discussion is drifting a lot on details
which are really really minor.  I think that the issue of parameter
passing can be decided by the C++ committee, as it does not require
any expertise on intervals.

Therefore I propose to STOP the discussion on this issue now.

Lee, please try to refrain from monopolizing the mailing-list.
When you have points to make, please provide *concrete arguments*,
otherwise there is no need to give an opinion, and try to think
about the importance of all of them with respect to the goal of
this project.

We have a lot of more important issues that need attention so that
we converge to a consensus for them, and we don't have time to loose.

-- 
Sylvain
From gdr@integrable-solutions.net Fri Apr  7 02:52:12 2006
Received: from kraid.nerim.net (smtp-105-friday.nerim.net [62.4.16.105])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k379qBjd014806
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 02:52:12 -0700
Received: from uniton.integrable-solutions.net (gdr.net1.nerim.net
	[62.212.99.186])
	by kraid.nerim.net (Postfix) with ESMTP id 99B6C40F34
	for <std-interval@compgeom.poly.edu>;
	Fri,  7 Apr 2006 10:00:40 +0200 (CEST)
Received: from uniton.integrable-solutions.net (localhost [127.0.0.1])
	with ESMTP id k377x6tZ000899
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 09:59:07 +0200
Received: (from gdr@localhost)k377x6sD000898;
	Fri, 7 Apr 2006 09:59:06 +0200
X-Authentication-Warning: uniton.integrable-solutions.net: gdr set sender to
	gdr@integrable-solutions.net using -f
Sender: gdr@integrable-solutions.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] PODs and parameter passing
References: <040720060139.23646.4435C2BA000BCCFE00005C5E22058864429B9C0E04D207D29B9C9D0700@comcast.net>
	<44361483.9070208@sun.com>
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
In-Reply-To: <44361483.9070208@sun.com>
Organization: Integrable Solutions
Date: 07 Apr 2006 09:59:06 +0200
Message-ID: <m3y7yh6cl1.fsf@uniton.integrable-solutions.net>
Lines: 21
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 09:52:12 -0000

Steve Clamage <Stephen.Clamage@Sun.COM> writes:

[...]

| >>It all depends on the degree of non-PODness; there are ABIs out there
| >>on popular platforms that make optimization decisions based on degree
| >>of PODness.
| 
| Gaby, PODness is binary. If a type does not satisfy all the
| requirements of a POD, it is not a POD.

you are exactly right.  

What I thinking of when I wrote that was scenario when the standard
says a class is a non-POD, but but the ABI treats it -- for calling
convention purpose -- as a POD because its copy-constructor is trivial
and it is sufficiently simple (e.g. does not have virtual functions,
not virtual base class etc.).  But, since we were discussing standard
matters, I should have been more specific.

-- Gaby
From first.i.last@comcast.net Fri Apr  7 03:14:22 2006
Received: from rwcrmhc14.comcast.net (rwcrmhc14.comcast.net [216.148.227.154])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k37AEMjd014843
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 03:14:22 -0700
Received: from rmailcenter16.comcast.net ([204.127.197.126])
          by comcast.net (rwcrmhc14) with SMTP
          id <20060407082251m1400r6mnqe>; Fri, 7 Apr 2006 08:22:51 +0000
Received: from [71.192.84.143] by rmailcenter16.comcast.net;
	Fri, 07 Apr 2006 08:22:50 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] PODs and parameter passing
Date: Fri, 07 Apr 2006 08:22:50 +0000
Message-Id: <040720060822.28780.4436215A0004D9800000706C22058864429B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 10:14:22 -0000

 -------------- Original message ----------------------
From: Steve Clamage <Stephen.Clamage@Sun.COM>
> first.i.last@comcast.net wrote:
> >  -------------- Original message ----------------------
> > From: Gabriel Dos Reis <gdr@integrable-solutions.net>
> > 
> >>first.i.last@comcast.net writes:
> >>
> >>[...]
> >>| OK, I did not ask a sufficiently precise question.  Why is
> >>| "implementation defined" unacceptable?  I.e., why does PODness have
> >>| to be a constant for all implementations? 
> >>
> >>Because whether the operations in question are permitted or not would
> >>depend on the compiler; I don't see any compelling reason for that
> >>sort of non-portability.
> > 
> > It is only non-portable if it is not detectable at compile time.
> 
> Scenario: A programmer develops on one platform, unaware that the code depends 
> on a feature that varies among implementations. A colleague tries the code on a 
> different platform, and it doesn't compile. The code requires a significant 
> re-write to accomodate the differences.
> 
> Don't you agree this is a portability issue?
> 
> I'm a compiler developer. I find that the majority of customer questions and 
> complaints are of the form, "My code works with compiler X, why doesn't it work 
> with your compiler?"  Often the answer is that the code is not portable, in the 
> sense of the scenario above.
> 
> Every time the standard says "undefined", "unspecified", or "implementation 
> defined", it opens the door to problems like these. We need a compelling reason 
> to leave issues like POD-ness and function signatures up to individual 
> implementations.

I understand and agree with everything you wrote.  But you ignored the point I made, which is that "implementation defined and not detectable" is quite distinct from "implementation defined and detectable".  The former is a problem and typically involves user-supplied configuation variables/scripts/macros -- quite a hassle.  The latter is portable.  It takes a modicum of effort, but it is portable.

The whole point of things like std::numeric_limits<> is that machines differ.  Those differences matter.  Some of those differences matter a lot.  Thus for portable _performance_ rather than portable _compilation_, it is worth the investment of time to handle potential performace issues rather than glossing them over.

Now std::interval is not going to save the world WRT portable numeric software.  But if there ever was or will ever be time to address platform variations _with_which_users_must_contend_ then that time is prior to the adoption of the standard.  If the issues can be delegated to the implementors, leaving the users safely isolated, then there is no need for the standard to address them and we should not spend a lot of time on them.

Given the discussions over the impact of calling conventions it appears that many writers to this list belive calling conventions are important user-visible aspects performance.

> 
> [...]
> >>
> >>It all depends on the degree of non-PODness; there are ABIs out there
> >>on popular platforms that make optimization decisions based on degree
> >>of PODness.
> 
> Gaby, PODness is binary. If a type does not satisfy all the requirements of a 
> POD, it is not a POD.
> 
>  > Let's see if we can mutate a classic into something useful:
>  >
>  >     Intervals should be as POD as possible and no PODer.
>  >           -- apologies to Albert?
>  >
>  > -- Lee Winter
> 
> Let's paraphrase Tolstoy's "Anna Karenina" instead:
>     All PODs are alike. Every non-POD is non-POD in its own way.
> 
> In particular, a POD does not have a user-defined constructor. If the only 
> departure from PODness is the presence of user-defined initialization or 
> converting constructors (but still no copy constructor), a compiler can generate 
> efficient code for copying and passing values in and out of functions. (I think 
> we could also allow private or protected members.)

Are you implying that the existence or non-existence of copy ctors is a key determinant in efficiency?  If so, what portability would be lost if the standard stated that intervals are non-PODs and implementations varied in their support for copy ctors?

You didn't mention destructors, I assume because they has less impact on the callinc convention topic.  How much efficiency is lost due to the simpl presence of a desctructor?  I'm particularly concerned with temporaries generated during expression evaluation rather than copies generated during parameter passing.

Classic implementations of C's math.h always had to wrestle with speed versus correctness.  Some vendors appeased their customers by delegating the decision to them -- they provided a fast RTL and a good RTL that could be selected at link time.  As intervals become pervasive we should expect the kind of adaptive radiation that would drive vedors to offer alternative implementations.  The standard should not forbid that tradeoff without some compelling jusitification.

It is my expectation that some implementations might have variants of both forms.  For example, a blunt variant might be useful where fat intervals were rare and the extra overhead in time and space for dependency detection and correction was not desired.  A sharp variant would be useful where fat intervals are common and the extra overhead in time and space were worth it in order to obtain narrow results.

AFAIK dependency detection and correction are the only features that would require elaborate construction and destruction of interval objects.  All of the other features of which I have ever heard are simple state variables.  Does anyone have a contrary example?

-- Lee Winter
From Sylvain.Pion@sophia.inria.fr Fri Apr  7 04:00:42 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k37B0fjd014897
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 04:00:41 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k379972E007452
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 11:09:11 +0200
Received: from [193.16.179.143] ([193.16.179.143])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k37993Vp007430
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 11:09:04 +0200
Message-ID: <44362C36.6080502@sophia.inria.fr>
Date: Fri, 07 Apr 2006 11:09:10 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Fri, 07 Apr 2006
	11:09:04 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
Subject: [std-interval] C++ committee feedback
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 11:00:42 -0000

Dear all,

I just raised the issue in front of the Library Working Group
of the ISO C++ committee, with the help of Steve.

The feedback is positive and encouraging.  A straw poll has been
taken, on whether we should continue the effort :
Strongly in favor = 4
Weakly   in favor = 5
Weakly   against  = 0
Strongly against  = 0

The question was also raised whether we should target C++0x or TR2,
the preference is for TR2 (10 votes against 1).

[
   TR2 is a non-normative document which serves as explicit exposure of
   the intent of the committee for the next standard.
   TRs are usually also implemented by compiler vendors and serve to make
   sure users are really happy with the specification before the final
   blessing.
   C++0x is the code-name for the next standard.
]


The goal is now to reach a consensus here and have a revision of the
proposal for the next meeting, beginning of october 2006.


We also discussed 2 issues briefly:
- pass-by-value versus pass-by-ref has already been debated by the
   committee for std::complex.  Seems like the debate was as hot as
   it is for intervals.  That's an issue for the committee.
- there are still concerns on the exact list of functions that we
   will propose, we need to make sure we have the good set (sufficiently
   useful, specified with enough details such as the width of intervals,
   and taking into account the difficulty of implementation).


Steve, please correct me if I did not get something correctly or if you
want to add something.

-- 
Sylvain
From Stephen.Clamage@Sun.COM Fri Apr  7 04:43:01 2006
Received: from brmea-mail-3.sun.com (brmea-mail-3.Sun.COM [192.18.98.34])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k37Bh0jd015385
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 04:43:01 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-3.sun.com (8.12.10/8.12.9) with ESMTP id k379pNJO021288
	for <std-interval@compgeom.poly.edu>;
	Fri, 7 Apr 2006 03:51:24 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IXC00B01J94W3@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 02:51:23 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-161.SFBay.Sun.COM [129.150.20.161])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IXC00G1KJDLI8@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 02:51:23 -0700 (PDT)
Date: Fri, 07 Apr 2006 02:51:22 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] PODs and parameter passing
In-reply-to: 
	<040720060822.28780.4436215A0004D9800000706C22058864429B9C0E04D207D29B9C9D0700@comcast.net>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <4436361A.5050503@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii; format=flowed
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: 
	<040720060822.28780.4436215A0004D9800000706C22058864429B9C0E04D207D29B9C9D0700@comcast.net>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 11:43:01 -0000

first.i.last@comcast.net wrote:

>  -------------- Original message ----------------------
> From: Steve Clamage <Stephen.Clamage@Sun.COM>
> 
...
>>In particular, a POD does not have a user-defined constructor. If the only 
>>departure from PODness is the presence of user-defined initialization or 
>>converting constructors (but still no copy constructor), a compiler can generate 
>>efficient code for copying and passing values in and out of functions. (I think 
>>we could also allow private or protected members.)
> 
> 
> Are you implying that the existence or non-existence of copy ctors is a key determinant in efficiency?  If so, what portability would be lost if the standard stated that intervals are non-PODs and implementations varied in their support for copy ctors?
> 
> You didn't mention destructors, I assume because they has less impact on the callinc convention topic.  How much efficiency is lost due to the simpl presence of a desctructor?  I'm particularly concerned with temporaries generated during expression evaluation rather than copies generated during parameter passing.

A POD has no user-defined constructors or destructor. If an object has a 
user-defined copy constructor or destructor, it affects what the compiler must 
do when passing and returning values. It's so much a question of how smart the 
compiler is, but what the language definition requires.

My point was that we can add an initialization constructor (but not a copy 
constructor) to what is otherwise a POD without affecting the efficiency of 
passing around values.

I expect an Interval type to be composed only of simple types (floating-point, 
pointer, enum, integer), and thus not need a user-defined copy constructor or 
destructor.

> Classic implementations of C's math.h always had to wrestle with speed versus correctness.  Some vendors appeased their customers by delegating the decision to them -- they provided a fast RTL and a good RTL that could be selected at link time.  As intervals become pervasive we should expect the kind of adaptive radiation that would drive vedors to offer alternative implementations.  The standard should not forbid that tradeoff without some compelling jusitification.

There is no problem with multiple library implementations co-existing and 
selectable at compile time or link time. For them to be most useful, the 
interfaces should be the same. The language standard would define only the 
interfaces, not the internals.

Example 1: Sun provides multiple versions of the basic C allocators 
malloc/calloc/realloc/free, each with different performance characteristics. 
Each of them conforms to the C (and C++) standards in that function signatures 
are identical in all versions. A programmer can select any one of the versions 
at link time, no source file editing or recompilation needed. If a programmer 
uses an extended interface offered by an allocator library, the code would not 
work with other libraries. The Standard allows extended interfaces, as long as a 
program using only the standard intefaces works correctly.  (The "as-if" rule 
again.)

Example 2:  Sun C++ comes with two different implementations of the C++ Standard 
Library: the default libCstd and the optional libstlport. The various Standard 
Library components are implemented very differently in the two libraries. Yet 
the public interfaces are identical, conforming to the C++ standard (except for 
some deficiencies in libCstd). To switch between libraries, one must recompile 
and re-link, but no source code editing is needed.

Getting back to Intervals, we should decide whether the Interval type supports a 
way (like a tag) to provide more information than just two floating-point 
values. I don't envision support for two kinds of Intervals, one with a 
tag-equivalent and one without.

As a quality of implementation (QOI) issue, the standard could allow the inquiry 
functions to return constant values, with no need to store and update the tag 
information. Different implementions with identical interfaces could offer 
tradeoffs among speed, accuracy, precision, and sharpness.

Example: The Standard requires types float, double, and long double, but says 
nothing about their representation or accuracy of computation. The only 
requirements are that arithmetic operations and sets of math functions be 
provided, and that minimum ranges are supported. All else is QOI. (Let the 
marketplace discard silly implementations instead of us trying to legislate 
against them.)

---
Steve Clamage, stephen.clamage@sun.com

From Stephen.Clamage@Sun.COM Fri Apr  7 04:54:57 2006
Received: from brmea-mail-2.sun.com (brmea-mail-2.Sun.COM [192.18.98.43])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k37Bsvjd015414
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 04:54:57 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-2.sun.com (8.12.10/8.12.9) with ESMTP id k37A3KmU004956
	for <std-interval@compgeom.poly.edu>;
	Fri, 7 Apr 2006 04:03:20 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IXC00B01J94W3@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 03:03:20 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-161.SFBay.Sun.COM [129.150.20.161])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IXC00GQOJXII8@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 03:03:20 -0700 (PDT)
Date: Fri, 07 Apr 2006 03:03:18 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] C++ committee feedback
In-reply-to: <44362C36.6080502@sophia.inria.fr>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <443638E6.2090309@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii; format=flowed
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: <44362C36.6080502@sophia.inria.fr>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 11:54:58 -0000

Your summary looks right to me. The some points that helped persuade the group 
to move forward with intervals were these:

1. The domain experts (you guys) will reach consensus on what the library should 
look like by October. Except for Sylvain, nobody on the committe has the 
expertise to design the library or evaluate competing proposals. Without 
consensus, the project is doomed. So let's not get caught up in too much trivia. 
The goal should be a library interface that you all can live with.

2. Intervals are not just an academic exercise. Intervals are used widely in 
important industries to aid in critical designs.

3. Interval implementations exist and get a lot of use. The proposed library 
will be based on experience.

4. Although implementation is difficult, a reference implementation of the basic 
functions (arithmetic and transcendental functions) is freely available as Open 
Source from Sun.

---
Steve Clamage, stephen.clamage@sun.com

Sylvain Pion wrote:

> Dear all,
> 
> I just raised the issue in front of the Library Working Group
> of the ISO C++ committee, with the help of Steve.
> 
> The feedback is positive and encouraging.  A straw poll has been
> taken, on whether we should continue the effort :
> Strongly in favor = 4
> Weakly   in favor = 5
> Weakly   against  = 0
> Strongly against  = 0
> 
> The question was also raised whether we should target C++0x or TR2,
> the preference is for TR2 (10 votes against 1).
> 
> [
>   TR2 is a non-normative document which serves as explicit exposure of
>   the intent of the committee for the next standard.
>   TRs are usually also implemented by compiler vendors and serve to make
>   sure users are really happy with the specification before the final
>   blessing.
>   C++0x is the code-name for the next standard.
> ]
> 
> 
> The goal is now to reach a consensus here and have a revision of the
> proposal for the next meeting, beginning of october 2006.
> 
> 
> We also discussed 2 issues briefly:
> - pass-by-value versus pass-by-ref has already been debated by the
>   committee for std::complex.  Seems like the debate was as hot as
>   it is for intervals.  That's an issue for the committee.
> - there are still concerns on the exact list of functions that we
>   will propose, we need to make sure we have the good set (sufficiently
>   useful, specified with enough details such as the width of intervals,
>   and taking into account the difficulty of implementation).
> 
> 
> Steve, please correct me if I did not get something correctly or if you
> want to add something.
> 


From Mark.Woodyard@Sun.COM Fri Apr  7 09:31:56 2006
Received: from brmea-mail-3.sun.com (brmea-mail-3.Sun.COM [192.18.98.34])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k37GVtjd015751
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 09:31:55 -0700
Received: from fe-amer-03.sun.com ([192.18.108.177])
	by brmea-mail-3.sun.com (8.12.10/8.12.9) with ESMTP id k37EeNJO012838
	for <std-interval@compgeom.poly.edu>;
	Fri, 7 Apr 2006 08:40:23 -0600 (MDT)
Received: from conversion-daemon.mail-amer.sun.com by mail-amer.sun.com
	(Sun Java System Messaging Server 6.2-4.02 (built Sep  9 2005))
	id <0IXC00M01W22ET00@mail-amer.sun.com>
	std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 08:40:23 -0600 (MDT)
Received: from [129.150.48.33] by mail-amer.sun.com
 (Sun Java System Messaging Server 6.2-4.02 (built Sep  9 2005))
 with ESMTPSA id <0IXC001KPWRB4KK4@mail-amer.sun.com> for
 std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 08:40:23 -0600 (MDT)
Date: Fri, 07 Apr 2006 08:40:23 -0600
From: Mark Woodyard <Mark.Woodyard@Sun.COM>
Subject: Re: [std-interval] C++ committee feedback
In-reply-to: <443638E6.2090309@sun.com>
Sender: Mark.Woodyard@Sun.COM
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <443679D7.3010809@sun.com>
MIME-version: 1.0
Content-type: text/plain; format=flowed; charset=ISO-8859-1
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
References: <44362C36.6080502@sophia.inria.fr> <443638E6.2090309@sun.com>
User-Agent: Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.7) Gecko/20051027
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 16:31:56 -0000

Steve,

Steve Clamage wrote:

>
>
> 4. Although implementation is difficult, a reference implementation of 
> the basic functions (arithmetic and transcendental functions) is 
> freely available as Open Source from Sun.
>

I know that Sun has provided open source for FP transcendental 
functions; but for intervals?  If this is the case, can you give me a 
pointer to it?

Thanks,

Mark

-- 
<http://www.sun.com> 	* Mark Woodyard *
*Sun Microsystems, Inc.*
ubrm05-420, 500 Eldorado Blvd., Bldg 5
Broomfield, CO 80021 US
Phone x43078/+1 720 895 3078
Mobile (303) 883-0525
Fax (720) 895-3078
Email Mark.Woodyard@Sun.COM
	

From eliasen@mindspring.com Fri Apr  7 12:52:13 2006
Received: from elasmtp-spurfowl.atl.sa.earthlink.net
	(elasmtp-spurfowl.atl.sa.earthlink.net [209.86.89.66])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k37JqDjd016024
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 12:52:13 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=KG7fF9PX5uOblesxgIfcdrg6v0fvY3smtkjN7s0UjbNpCyY8mdR8z9NF+vgJPNz0;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by elasmtp-spurfowl.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1FRvGM-0001tn-TB
	for std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 14:00:51 -0400
Message-ID: <4436A8CE.7040708@mindspring.com>
Date: Fri, 07 Apr 2006 12:00:46 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	<4433AF44.8020308@sun.com> <44341121.9090206@mindspring.com>
	<4434C3C8.7050808@sun.com> <1144311915.3988.95.camel@saline>
	<4434DD07.4060704@sun.com> <1144320107.8015.0.camel@localhost>
In-Reply-To: <1144320107.8015.0.camel@localhost>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45072812717783db9a96a2b1b0276655ee56350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 19:52:13 -0000

Guillaume Melquiond wrote:
> I know for example that GCC is really bad at handling and optimizing
> pass-by-value arguments, and I have already submitted a few bug-reports
> on this topic.

   Can you provide the bug report IDs so that we can see if these have
been fixed in subsequent releases, or verify their status?  Thanks!

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From eliasen@mindspring.com Fri Apr  7 12:57:11 2006
Received: from elasmtp-junco.atl.sa.earthlink.net
	(elasmtp-junco.atl.sa.earthlink.net [209.86.89.63])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k37JvBjd016062
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 12:57:11 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=tiilU7jnHM2tUrtTJa4d4PMk0U6MkYS/WTJQakZ42DIV0TA9NTezGp1+HxLQdvhn;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.45] (helo=[192.168.1.101])
	by elasmtp-junco.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1FRvL9-0003M0-Nm
	for std-interval@compgeom.poly.edu; Fri, 07 Apr 2006 14:05:50 -0400
Message-ID: <4436A9EA.50506@mindspring.com>
Date: Fri, 07 Apr 2006 12:05:30 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.12) Gecko/20050915
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ interval std
References: <C0573279.37DC%George.Corliss@Marquette.edu>
	<4432385E.4050805@sophia.inria.fr> <4433539B.5000604@mindspring.com>
	<44336367.9060400@computer.org> <4433A182.7060405@mindspring.com>
	<4433AF44.8020308@sun.com> <44341121.9090206@mindspring.com>
	<4434C3C8.7050808@sun.com>
In-Reply-To: <4434C3C8.7050808@sun.com>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45079f2b0045d6da3c35d5484423a9698e90350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.45
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 19:57:11 -0000

Steve Clamage wrote:
> I compiled and ran on 64-bit sparc (US II) and 64-bit amd64 (Opteron).
> According to my earlier claims, pass-by-value should have been faster.
> 
> 64-bit sparc:
> addByValue:     690000 ticks 4.1e+08
> addByRef:       680000 ticks 4.1e+08
> addByConstRef:  450000 ticks 4.1e+08
> 
> 64-bit amd64:
> addByValue:     1280000 ticks 4.1e+08
> addByRef:        670000 ticks 4.1e+08
> addByConstRef:   670000 ticks 4.1e+08
> 
> Color my face red. :-)
> 
> This result is quite different from other experiments with small structs
> that showed pass-by-value performing better. One possibility is that the
> compiler is missing some optimization opportunities. Another is that
> this example is not representative.

   Well, it looks like in GCC that it's quite dependent on optimization
levels and inlining.  I rewrote my samples to include both inlined and
ordinary functions, and made some changes that apparently prevented the
compiler from optimizing out loops.  I should adopt your sample for the
inner loop, but here are my numbers:

x86_64, gcc 3.4.4, Linux:
-O0:
addByValue:             20020000 ticks  Sum: [1.7, 4.1]
addByRef:               19590000 ticks  Sum: [1.7, 4.1]
addByConstRef:          19590000 ticks  Sum: [1.7, 4.1]
addByValueInline:       22550000 ticks  Sum: [1.7, 4.1]
addByRefInline:         19460000 ticks  Sum: [1.7, 4.1]
addByConstRefInline:    19610000 ticks  Sum: [1.7, 4.1]

-O1:
addByValue:             12570000 ticks  Sum: [1.7, 4.1]
addByRef:               8350000 ticks   Sum: [1.7, 4.1]
addByConstRef:          8620000 ticks   Sum: [1.7, 4.1]
addByValueInline:       9980000 ticks   Sum: [1.7, 4.1]
addByRefInline:         5600000 ticks   Sum: [1.7, 4.1]
addByConstRefInline:    5600000 ticks   Sum: [1.7, 4.1]

-O2:
addByValue:             11490000 ticks  Sum: [1.7, 4.1]
addByRef:               7370000 ticks   Sum: [1.7, 4.1]
addByConstRef:          7960000 ticks   Sum: [1.7, 4.1]
addByValueInline:       2140000 ticks   Sum: [1.7, 4.1]
addByRefInline:         5590000 ticks   Sum: [1.7, 4.1]
addByConstRefInline:    5600000 ticks   Sum: [1.7, 4.1]

-O3:
addByValue:             2140000 ticks   Sum: [1.7, 4.1]
addByRef:               5590000 ticks   Sum: [1.7, 4.1]
addByConstRef:          5580000 ticks   Sum: [1.7, 4.1]
addByValueInline:       2000000 ticks   Sum: [1.7, 4.1]
addByRefInline:         5600000 ticks   Sum: [1.7, 4.1]
addByConstRefInline:    5590000 ticks   Sum: [1.7, 4.1]



and x86 Windows (mingw):

-O0:
addByValue:             115077 ticks    Sum: [1.7, 4.1]
addByRef:               85886 ticks     Sum: [1.7, 4.1]
addByConstRef:          85675 ticks     Sum: [1.7, 4.1]
addByValueInline:       128447 ticks    Sum: [1.7, 4.1]
addByRefInline:         90221 ticks     Sum: [1.7, 4.1]
addByConstRefInline:    90612 ticks     Sum: [1.7, 4.1]

-O1:
addByValue:             100967 ticks    Sum: [1.7, 4.1]
addByRef:               37254 ticks     Sum: [1.7, 4.1]
addByConstRef:          35842 ticks     Sum: [1.7, 4.1]
addByValueInline:       54780 ticks     Sum: [1.7, 4.1]
addByRefInline:         23334 ticks     Sum: [1.7, 4.1]
addByConstRefInline:    23495 ticks     Sum: [1.7, 4.1]

-O2:
addByValue:             63462 ticks     Sum: [1.7, 4.1]
addByRef:               38547 ticks     Sum: [1.7, 4.1]
addByConstRef:          38886 ticks     Sum: [1.7, 4.1]
addByValueInline:       82340 ticks     Sum: [1.7, 4.1]
addByRefInline:         26108 ticks     Sum: [1.7, 4.1]
addByConstRefInline:    21181 ticks     Sum: [1.7, 4.1]

-O3:
addByValue:             71995 ticks     Sum: [1.7, 4.1]
addByRef:               23043 ticks     Sum: [1.7, 4.1]
addByConstRef:          22283 ticks     Sum: [1.7, 4.1]
addByValueInline:       66817 ticks     Sum: [1.7, 4.1]
addByRefInline:         22082 ticks     Sum: [1.7, 4.1]
addByConstRefInline:    22653 ticks     Sum: [1.7, 4.1]

   Source for tests:

http://futureboy.us/temp/Interval.h
http://futureboy.us/temp/Interval.cc

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From avitzur@PacificT.com Fri Apr  7 16:48:02 2006
Received: from red.evocative.com (red.evocative.com [67.131.251.18])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k37Nm2jd016302
	for <std-interval@compgeom.poly.edu>; Fri, 7 Apr 2006 16:48:02 -0700
Received: from [192.168.1.100] (open-131-161-241-26.cliq.com [131.161.241.26])
	by red.evocative.com (8.13.4/8.12.5) with SMTP id k37LvVti083966
	for <std-interval@compgeom.poly.edu>;
	Fri, 7 Apr 2006 14:57:43 -0700 (PDT)
X-Local-Message: <MX[192.168.1.100]>[192.168.1.100]
Mime-Version: 1.0
X-Sender: w1019@mail.pacifict.com
Message-Id: <p06100508c05c7fd1e140@[192.168.1.100]>
Date: Fri, 7 Apr 2006 14:56:20 -0700
To: std-interval@compgeom.poly.edu
From: Ron Avitzur <avitzur@PacificT.com>
Subject: [std-interval] default constructor  
Content-Type: text/plain; charset="us-ascii" ; format="flowed"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 07 Apr 2006 23:48:02 -0000

>a POD type has a copy constructor and a destructor for the sake of
>language uniformity, but a compiler should _never_ call them. As a
>matter of fact, it should not even generate them. And this is not a
>matter of optimizing or not: this is explicitly the point of a POD type.

I ran into a problem using CodeWarrior to compile for both PPC and x86 where

  Interval stack[kStackSize];

created a huge performance penalty due to the compiler generating an 
empty default constructor and passing a pointer to it to 
__construct_array which called it repeatedly, even at the highest 
optimization levels. (Interval is a POD-type in my implementation.) 
The run-time penalty this imposed did not show up on profiles, being 
absorbed by the function containing the local variable which I 
expected to be expensive, so it took a while to discover the problem.

While this case is just a compiler bug, it illustrates an issue for the API.

Having the interval default constructor initialize to some reasonable 
value can protect against one class of typical program error, but may 
introduce other problems. Programmers reasonably expect declaring a 
stack array of doubles to have no run-time cost. Any non-empty 
default initialization changes a declaration which may be expected to 
be free or constant-time as in the case of an array of doubles, into 
an operation which depends on the array size.

Ron Avitzur
From Stephen.Clamage@Sun.COM Sun Apr  9 09:23:17 2006
Received: from brmea-mail-1.sun.com (brmea-mail-1.Sun.COM [192.18.98.31])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k39GNGjd027665
	for <std-interval@compgeom.poly.edu>; Sun, 9 Apr 2006 09:23:16 -0700
Received: from phys-mpk-2 ([129.146.11.82])
	by brmea-mail-1.sun.com (8.12.10/8.12.9) with ESMTP id k39EWP3d018949
	for <std-interval@compgeom.poly.edu>;
	Sun, 9 Apr 2006 08:32:25 -0600 (MDT)
Received: from conversion-daemon.mpk-mail1.sfbay.sun.com by
 mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 id <0IXG00001L1SK3@mpk-mail1.sfbay.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Sun, 09 Apr 2006 07:32:25 -0700 (PDT)
Received: from [127.0.0.1] (vpn-129-150-20-217.SFBay.Sun.COM [129.150.20.217])
 by mpk-mail1.sfbay.sun.com
 (iPlanet Messaging Server 5.2 HotFix 1.24 (built Dec 19 2003))
 with ESMTP id <0IXG00CIXLPXOW@mpk-mail1.sfbay.sun.com> for
 std-interval@compgeom.poly.edu; Sun, 09 Apr 2006 07:32:25 -0700 (PDT)
Date: Sun, 09 Apr 2006 07:32:29 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] C++ committee feedback
In-reply-to: <443679D7.3010809@sun.com>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-id: <44391AFD.7030507@sun.com>
Organization: Sun Microsystems, Inc
MIME-version: 1.0
Content-type: text/plain; charset=us-ascii; format=flowed
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2)
 Gecko/20040804 Netscape/7.2 (ax)
References: <44362C36.6080502@sophia.inria.fr> <443638E6.2090309@sun.com>
 <443679D7.3010809@sun.com>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 09 Apr 2006 16:23:17 -0000

Our C++ interface to the interval library is not open source. The headers come 
with the compiler, but a C++ runtime library is also needed.

Using Sun C++, you get access to the C++ interval library by including 
<suninterval.h> and adding -xia to all CC command lines.

There is nothing special about the C++ library. It is a thin layer of inline 
class functions to the underlying interval library that is open source, plus I/O 
functions in the runtime library. I don't have access to any computers inside 
Sun until Wednesday, so I can't be more specific than that.

---
Steve Clamage, stephen.clamage@sun.com

Mark Woodyard wrote:

> Steve,
> 
> Steve Clamage wrote:
> 
>>
>>
>> 4. Although implementation is difficult, a reference implementation of 
>> the basic functions (arithmetic and transcendental functions) is 
>> freely available as Open Source from Sun.
>>
> 
> I know that Sun has provided open source for FP transcendental 
> functions; but for intervals?  If this is the case, can you give me a 
> pointer to it?
> 
> Thanks,
> 
> Mark
> 



From george.corliss@marquette.edu Sun Apr  9 15:22:03 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k39MM3jd028004
	for <std-interval@compgeom.poly.edu>; Sun, 9 Apr 2006 15:22:03 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 9 Apr 2006 15:31:24 -0500
Received: from 65.29.133.38 ([65.29.133.38]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Sun,  9 Apr 2006 20:31:23 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Sun, 09 Apr 2006 15:31:23 -0500
Subject: Re: [std-interval] C++ committee feedback
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C05ED94B.3C44%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] C++ committee feedback
Thread-Index: AcZcFJEXz7ZjYMgHEdq/XgAKlZKJfg==
In-Reply-To: <44362C36.6080502@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 09 Apr 2006 20:31:24.0523 (UTC)
	FILETIME=[920043B0:01C65C14]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 09 Apr 2006 22:22:03 -0000

Sylvain,

Congratulations, and thanks to you and the rest of your team.

Can you point us to the most recent version of the proposal?

I would encourage you to send this report also to the reliable_computing
alias with a renewed invitation to subscribe here.

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu


> 
> I just raised the issue in front of the Library Working Group
> of the ISO C++ committee, with the help of Steve.
> 
> The feedback is positive and encouraging.  A straw poll has been
> taken, on whether we should continue the effort :
> Strongly in favor = 4
> Weakly   in favor = 5
> Weakly   against  = 0
> Strongly against  = 0
> 
> The question was also raised whether we should target C++0x or TR2,
> the preference is for TR2 (10 votes against 1).
> 
> [
>    TR2 is a non-normative document which serves as explicit exposure of
>    the intent of the committee for the next standard.
>    TRs are usually also implemented by compiler vendors and serve to make
>    sure users are really happy with the specification before the final
>    blessing.
>    C++0x is the code-name for the next standard.
> ]
> 
> 
> The goal is now to reach a consensus here and have a revision of the
> proposal for the next meeting, beginning of october 2006.
> 
> 
> We also discussed 2 issues briefly:
> - pass-by-value versus pass-by-ref has already been debated by the
>    committee for std::complex.  Seems like the debate was as hot as
>    it is for intervals.  That's an issue for the committee.
> - there are still concerns on the exact list of functions that we
>    will propose, we need to make sure we have the good set (sufficiently
>    useful, specified with enough details such as the width of intervals,
>    and taking into account the difficulty of implementation).
> 
> 
> Steve, please correct me if I did not get something correctly or if you
> want to add something.

From Sylvain.Pion@sophia.inria.fr Mon Apr 10 11:13:01 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3AID0jd031367
	for <std-interval@compgeom.poly.edu>; Mon, 10 Apr 2006 11:13:00 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k3AGMdQ4011056
	for <std-interval@compgeom.poly.edu>; Mon, 10 Apr 2006 18:22:39 +0200
Received: from [138.96.83.37] (mouche.inria.fr [138.96.83.37])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k3AGMQQb011015
	for <std-interval@compgeom.poly.edu>; Mon, 10 Apr 2006 18:22:27 +0200
Message-ID: <443A8642.5020500@sophia.inria.fr>
Date: Mon, 10 Apr 2006 18:22:26 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] C++ committee feedback
References: <C05ED94B.3C44%George.Corliss@Marquette.edu>
In-Reply-To: <C05ED94B.3C44%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-2.0.2
	(sophia.inria.fr [138.96.64.20]); Mon, 10 Apr 2006 18:22:27 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 10 Apr 2006 18:13:01 -0000

George,

George Corliss wrote:
> Sylvain,
> 
> Congratulations, and thanks to you and the rest of your team.

Thanks.

> Can you point us to the most recent version of the proposal?

So far this is still what Guillaume sent a few weeks ago.

> I would encourage you to send this report also to the reliable_computing
> alias with a renewed invitation to subscribe here.

Yes, but I would wait a bit more.  I think that there are still a
few big questions that need to be discussed here (and I would
appreciate if new people give a fresh look at a more polished
version of the proposal in some time):

1- the set of functions which we want to propose for standardization.
2- the required precision for these functions.
3- the mathematical semantic of intervals (cset versus other models...).
4- how to deal with comparisons of intervals.


I propose to begin by discussing the list of functions here.
The current proposal does not include cos/sin/exp/log for example,
which I think now is a mistake, but the question is to determine
what set we want exactly.
In a couple of days I expect to send a list of functions
(after having a look at the C89 and C99 standards "math.h"),
then proposing a list which matches the criteria of usefulness,
implementation difficulty, completeness, and existing implementations.
Does this sound OK ?


BTW, so far we have 51 subscribers here, and we got more than 40
answers to the questionnaire.

-- 
Sylvain
From george.corliss@marquette.edu Mon Apr 10 11:49:32 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3AInWjd031404
	for <std-interval@compgeom.poly.edu>; Mon, 10 Apr 2006 11:49:32 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Mon, 10 Apr 2006 11:59:08 -0500
Received: from 134.48.168.34 ([134.48.168.34]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Mon, 10 Apr 2006 16:59:08 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Mon, 10 Apr 2006 11:59:07 -0500
Subject: Re: [std-interval] C++ committee feedback
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C05FF90B.3D29%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] C++ committee feedback
Thread-Index: AcZcwBRCUv24bcizEdqX4gAKlZKJfg==
In-Reply-To: <443A8642.5020500@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 10 Apr 2006 16:59:08.0502 (UTC)
	FILETIME=[15276F60:01C65CC0]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 10 Apr 2006 18:49:32 -0000

Sylvain,

>> I would encourage you to send this report also to the reliable_computing
>> alias with a renewed invitation to subscribe here.
> 
> Yes, but I would wait a bit more.  I think that there are still a
> few big questions that need to be discussed here (and I would
> appreciate if new people give a fresh look at a more polished
> version of the proposal in some time):
> 
> 1- the set of functions which we want to propose for standardization.
> 2- the required precision for these functions.
> 3- the mathematical semantic of intervals (cset versus other models...).
> 4- how to deal with comparisons of intervals.
Good suggestion.  I think we benefit from as many participants in the
discussions as possible.  In particular, a friend notes that "the Germans"
have not been represented, although Juergen has.  I'd encourage sending the
meeting feedback and this agenda to reliable computing with a renewed
invitation.  You want discussion while the issues are debated, not after it
is too late.

Perhaps we should circulate the response John Pryce had sent you directly?
Many of his issues may be improved by further discussion, too.
> 
> I propose to begin by discussing the list of functions here.
> The current proposal does not include cos/sin/exp/log for example,
> which I think now is a mistake, but the question is to determine
> what set we want exactly.
> In a couple of days I expect to send a list of functions
> (after having a look at the C89 and C99 standards "math.h"),
> then proposing a list which matches the criteria of usefulness,
> implementation difficulty, completeness, and existing implementations.
> Does this sound OK ?
Yes.

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu


> 
> 
> BTW, so far we have 51 subscribers here, and we got more than 40
> answers to the questionnaire.

From george.corliss@marquette.edu Tue Apr 11 16:53:47 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3BNrkjd001250
	for <std-interval@compgeom.poly.edu>; Tue, 11 Apr 2006 16:53:46 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Tue, 11 Apr 2006 17:03:50 -0500
Received: from 134.48.168.34 ([134.48.168.34]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Tue, 11 Apr 2006 22:03:41 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Tue, 11 Apr 2006 17:03:35 -0500
Subject: Re: [std-interval] response from ISL
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C06191EB.3E60%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] response from ISL
Thread-Index: AcZds8c/BhmYeMmnEdqT5AAKlZKJfg==
In-Reply-To: <443A8642.5020500@sophia.inria.fr>
Mime-version: 1.0
Content-type: multipart/mixed;
	boundary="B_3227619819_5455820"
X-OriginalArrivalTime: 11 Apr 2006 22:03:50.0119 (UTC)
	FILETIME=[D0428F70:01C65DB3]
X-Mailman-Approved-At: Tue, 11 Apr 2006 17:17:04 -0700
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 11 Apr 2006 23:53:47 -0000

> This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

--B_3227619819_5455820
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit

Sylvain,

In the interest of full and open discussion, I have attached copies of an
informal cover letter and a draft of a possible set of revisions to the
earlier standard proposal our 5SL team had forwarded to you a few weeks ago
so that everyone can read and comment on our comments.

Some of the issue have been extensively debated here in the mean time, but
others have not.  I am most interested in the question of whether the
standard should specify a mathematical model for intervals in the sense
discussed here, and if so, what that model should be.  The attached response
argues that there should be a mathematical model, but that it should be
implementation-defined, since there has not been a consensus.  One of the
threads over the past couple weeks seems to suggest that leaving such an
issue to be defined by the implementation guarantees lack of portability.

"ISL" (Interval Subroutine Library) is a beginning effort to draw together
much existing interval code into a comprehensive, quality library.  Our
current members are
  George F. Corliss  & Marquette University
  R. Baker Kearfott  & University of Louisiana at Lafayette
  Ned Nedialkov      & McMaster University and
                     & Lawrence Livermore National Laboratory
  John D. Pryce      & Cranfield University, RMCS Shrivenham
  Spencer Smith      & McMaster University

Clearly, if we are ever to have a portable interval library, it must depend
on a portable interval arithmetic, as this standardization process is
urging.

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu



--B_3227619819_5455820
Content-type: application/octet-stream; name="200603coverletter.pdf"
Content-disposition: attachment;
	filename="200603coverletter.pdf"
Content-transfer-encoding: base64

JVBERi0xLjIKOSAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0Yx
Ci9Gb250RGVzY3JpcHRvciA4IDAgUgovQmFzZUZvbnQvRFpCWFpaK0NNUjEwCi9GaXJzdENo
YXIgMzMKL0xhc3RDaGFyIDE5NgovV2lkdGhzWzI3Ny44IDUwMCA4MzMuMyA1MDAgODMzLjMg
Nzc3LjggMjc3LjggMzg4LjkgMzg4LjkgNTAwIDc3Ny44IDI3Ny44IDMzMy4zIDI3Ny44CjUw
MCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgMjc3LjggMjc3Ljgg
Mjc3LjggNzc3LjggNDcyLjIgNDcyLjIgNzc3LjgKNzUwIDcwOC4zIDcyMi4yIDc2My45IDY4
MC42IDY1Mi44IDc4NC43IDc1MCAzNjEuMSA1MTMuOSA3NzcuOCA2MjUgOTE2LjcgNzUwIDc3
Ny44CjY4MC42IDc3Ny44IDczNi4xIDU1NS42IDcyMi4yIDc1MCA3NTAgMTAyNy44IDc1MCA3
NTAgNjExLjEgMjc3LjggNTAwIDI3Ny44IDUwMCAyNzcuOAoyNzcuOCA1MDAgNTU1LjYgNDQ0
LjQgNTU1LjYgNDQ0LjQgMzA1LjYgNTAwIDU1NS42IDI3Ny44IDMwNS42IDUyNy44IDI3Ny44
IDgzMy4zIDU1NS42CjUwMCA1NTUuNiA1MjcuOCAzOTEuNyAzOTQuNCAzODguOSA1NTUuNiA1
MjcuOCA3MjIuMiA1MjcuOCA1MjcuOCA0NDQuNCA1MDAgMTAwMCA1MDAKNTAwIDUwMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCA2MjUgODMzLjMKNzc3LjggNjk0LjQgNjY2LjcgNzUwIDcyMi4yIDc3Ny44IDcy
Mi4yIDc3Ny44IDAgMCA3MjIuMiA1ODMuMyA1NTUuNiA1NTUuNiA4MzMuMyA4MzMuMwoyNzcu
OCAzMDUuNiA1MDAgNTAwIDUwMCA1MDAgNTAwIDc1MCA0NDQuNCA1MDAgNzIyLjIgNzc3Ljgg
NTAwIDkwMi44IDEwMTMuOSA3NzcuOAoyNzcuOCA1MDBdCj4+CmVuZG9iagoxMiAwIG9iago8
PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0YyCi9Gb250RGVzY3JpcHRvciAx
MSAwIFIKL0Jhc2VGb250L01aQUhMTytDTVRUMTAKL0ZpcnN0Q2hhciAzMwovTGFzdENoYXIg
MTk2Ci9XaWR0aHNbNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUy
NSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1CjUyNSA1MjUgNTI1IDUyNSA1MjUg
NTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUy
NSA1MjUgNTI1CjUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUg
NTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1CjUyNSA1MjUgNTI1IDUy
NSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUg
NTI1IDUyNSA1MjUgNTI1CjUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUy
NSA1MjUgNTI1IDUyNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUg
NTI1IDUyNSA1MjUgMCAwIDUyNQo1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUy
NSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNQo1MjUg
NTI1XQo+PgplbmRvYmoKMTUgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UeXBlMQov
TmFtZS9GMwovRm9udERlc2NyaXB0b3IgMTQgMCBSCi9CYXNlRm9udC9CQUZFR0ErQ01CWDEw
Ci9GaXJzdENoYXIgMzMKL0xhc3RDaGFyIDE5NgovV2lkdGhzWzM1MCA2MDIuOCA5NTguMyA1
NzUgOTU4LjMgODk0LjQgMzE5LjQgNDQ3LjIgNDQ3LjIgNTc1IDg5NC40IDMxOS40IDM4My4z
IDMxOS40CjU3NSA1NzUgNTc1IDU3NSA1NzUgNTc1IDU3NSA1NzUgNTc1IDU3NSA1NzUgMzE5
LjQgMzE5LjQgMzUwIDg5NC40IDU0My4xIDU0My4xIDg5NC40Cjg2OS40IDgxOC4xIDgzMC42
IDg4MS45IDc1NS42IDcyMy42IDkwNC4yIDkwMCA0MzYuMSA1OTQuNCA5MDEuNCA2OTEuNyAx
MDkxLjcgOTAwCjg2My45IDc4Ni4xIDg2My45IDg2Mi41IDYzOC45IDgwMCA4ODQuNyA4Njku
NCAxMTg4LjkgODY5LjQgODY5LjQgNzAyLjggMzE5LjQgNjAyLjgKMzE5LjQgNTc1IDMxOS40
IDMxOS40IDU1OSA2MzguOSA1MTEuMSA2MzguOSA1MjcuMSAzNTEuNCA1NzUgNjM4LjkgMzE5
LjQgMzUxLjQgNjA2LjkKMzE5LjQgOTU4LjMgNjM4LjkgNTc1IDYzOC45IDYwNi45IDQ3My42
IDQ1My42IDQ0Ny4yIDYzOC45IDYwNi45IDgzMC42IDYwNi45IDYwNi45CjUxMS4xIDU3NSAx
MTUwIDU3NSA1NzUgNTc1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDY5MS43IDk1OC4zIDg5NC40IDgwNS42IDc2
Ni43IDkwMCA4MzAuNiA4OTQuNCA4MzAuNiA4OTQuNCAwIDAgODMwLjYgNjcwLjgKNjM4Ljkg
NjM4LjkgOTU4LjMgOTU4LjMgMzE5LjQgMzUxLjQgNTc1IDU3NSA1NzUgNTc1IDU3NSA4Njku
NCA1MTEuMSA1OTcuMiA4MzAuNiA4OTQuNAo1NzUgMTA0MS43IDExNjkuNCA4OTQuNCAzMTku
NCA1NzVdCj4+CmVuZG9iagoxOCAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUx
Ci9OYW1lL0Y0Ci9Gb250RGVzY3JpcHRvciAxNyAwIFIKL0Jhc2VGb250L05VRk1VUitDTVRJ
MTAKL0ZpcnN0Q2hhciAzMwovTGFzdENoYXIgMTk2Ci9XaWR0aHNbMzA2LjcgNTE0LjQgODE3
LjggNzY5LjEgODE3LjggNzY2LjcgMzA2LjcgNDA4LjkgNDA4LjkgNTExLjEgNzY2LjcgMzA2
LjcgMzU3LjgKMzA2LjcgNTExLjEgNTExLjEgNTExLjEgNTExLjEgNTExLjEgNTExLjEgNTEx
LjEgNTExLjEgNTExLjEgNTExLjEgNTExLjEgMzA2LjcgMzA2LjcKMzA2LjcgNzY2LjcgNTEx
LjEgNTExLjEgNzY2LjcgNzQzLjMgNzAzLjkgNzE1LjYgNzU1IDY3OC4zIDY1Mi44IDc3My42
IDc0My4zIDM4NS42CjUyNSA3NjguOSA2MjcuMiA4OTYuNyA3NDMuMyA3NjYuNyA2NzguMyA3
NjYuNyA3MjkuNCA1NjIuMiA3MTUuNiA3NDMuMyA3NDMuMyA5OTguOQo3NDMuMyA3NDMuMyA2
MTMuMyAzMDYuNyA1MTQuNCAzMDYuNyA1MTEuMSAzMDYuNyAzMDYuNyA1MTEuMSA0NjAgNDYw
IDUxMS4xIDQ2MCAzMDYuNwo0NjAgNTExLjEgMzA2LjcgMzA2LjcgNDYwIDI1NS42IDgxNy44
IDU2Mi4yIDUxMS4xIDUxMS4xIDQ2MCA0MjEuNyA0MDguOSAzMzIuMiA1MzYuNwo0NjAgNjY0
LjQgNDYzLjkgNDg1LjYgNDA4LjkgNTExLjEgMTAyMi4yIDUxMS4xIDUxMS4xIDUxMS4xIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDYyNy4yIDgxNy44IDc2Ni43IDY5Mi4yIDY2NC40IDc0My4zIDcxNS42Cjc2
Ni43IDcxNS42IDc2Ni43IDAgMCA3MTUuNiA2MTMuMyA1NjIuMiA1ODcuOCA4ODEuNyA4OTQu
NCAzMDYuNyAzMzIuMiA1MTEuMSA1MTEuMQo1MTEuMSA1MTEuMSA1MTEuMSA4MzEuMyA0NjAg
NTM2LjcgNzE1LjYgNzE1LjYgNTExLjEgODgyLjggOTg1IDc2Ni43IDI1NS42IDUxMS4xXQo+
PgplbmRvYmoKMjEgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UeXBlMQovTmFtZS9G
NQovRm9udERlc2NyaXB0b3IgMjAgMCBSCi9CYXNlRm9udC9JVkxZUksrQ01NSTEwCi9GaXJz
dENoYXIgMzMKL0xhc3RDaGFyIDE5NgovV2lkdGhzWzYyMi41IDQ2Ni4zIDU5MS40IDgyOC4x
IDUxNyAzNjIuOCA2NTQuMiAxMDAwIDEwMDAgMTAwMCAxMDAwIDI3Ny44IDI3Ny44IDUwMAo1
MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDI3Ny44IDI3Ny44
IDc3Ny44IDUwMCA3NzcuOCA1MDAgNTMwLjkKNzUwIDc1OC41IDcxNC43IDgyNy45IDczOC4y
IDY0My4xIDc4Ni4yIDgzMS4zIDQzOS42IDU1NC41IDg0OS4zIDY4MC42IDk3MC4xIDgwMy41
Cjc2Mi44IDY0MiA3OTAuNiA3NTkuMyA2MTMuMiA1ODQuNCA2ODIuOCA1ODMuMyA5NDQuNCA4
MjguNSA1ODAuNiA2ODIuNiAzODguOSAzODguOQozODguOSAxMDAwIDEwMDAgNDE2LjcgNTI4
LjYgNDI5LjIgNDMyLjggNTIwLjUgNDY1LjYgNDg5LjYgNDc3IDU3Ni4yIDM0NC41IDQxMS44
IDUyMC42CjI5OC40IDg3OCA2MDAuMiA0ODQuNyA1MDMuMSA0NDYuNCA0NTEuMiA0NjguOCAz
NjEuMSA1NzIuNSA0ODQuNyA3MTUuOSA1NzEuNSA0OTAuMwo0NjUgMzIyLjUgMzg0IDYzNi41
IDUwMCAyNzcuOCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAKMCAwIDAgMCAwIDAgMCA2MTUuMyA4MzMuMyA3NjIuOCA2OTQuNCA3NDIuNCA4
MzEuMyA3NzkuOSA1ODMuMyA2NjYuNyA2MTIuMiAwIDAgNzcyLjQKNjM5LjcgNTY1LjYgNTE3
LjcgNDQ0LjQgNDA1LjkgNDM3LjUgNDk2LjUgNDY5LjQgMzUzLjkgNTc2LjIgNTgzLjMgNjAy
LjUgNDk0IDQzNy41CjU3MCA1MTcgNTcxLjQgNDM3LjIgNTQwLjMgNTk1LjggNjI1LjcgNjUx
LjQgMjc3LjhdCj4+CmVuZG9iagoyNCAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5
cGUxCi9OYW1lL0Y2Ci9Gb250RGVzY3JpcHRvciAyMyAwIFIKL0Jhc2VGb250L1lIWlFUWCtD
TVNZMTAKL0ZpcnN0Q2hhciAzMwovTGFzdENoYXIgMTk2Ci9XaWR0aHNbMTAwMCA1MDAgNTAw
IDEwMDAgMTAwMCAxMDAwIDc3Ny44IDEwMDAgMTAwMCA2MTEuMSA2MTEuMSAxMDAwIDEwMDAg
MTAwMCA3NzcuOAoyNzUgMTAwMCA2NjYuNyA2NjYuNyA4ODguOSA4ODguOSAwIDAgNTU1LjYg
NTU1LjYgNjY2LjcgNTAwIDcyMi4yIDcyMi4yIDc3Ny44IDc3Ny44CjYxMS4xIDc5OC41IDY1
Ni44IDUyNi41IDc3MS40IDUyNy44IDcxOC43IDU5NC45IDg0NC41IDU0NC41IDY3Ny44IDc2
MiA2ODkuNyAxMjAwLjkKODIwLjUgNzk2LjEgNjk1LjYgODE2LjcgODQ3LjUgNjA1LjYgNTQ0
LjYgNjI1LjggNjEyLjggOTg3LjggNzEzLjMgNjY4LjMgNzI0LjcgNjY2LjcKNjY2LjcgNjY2
LjcgNjY2LjcgNjY2LjcgNjExLjEgNjExLjEgNDQ0LjQgNDQ0LjQgNDQ0LjQgNDQ0LjQgNTAw
IDUwMCAzODguOSAzODguOSAyNzcuOAo1MDAgNTAwIDYxMS4xIDUwMCAyNzcuOCA4MzMuMyA3
NTAgODMzLjMgNDE2LjcgNjY2LjcgNjY2LjcgNzc3LjggNzc3LjggNDQ0LjQgNDQ0LjQKNDQ0
LjQgNjExLjEgNzc3LjggNzc3LjggNzc3LjggNzc3LjggMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgNzc3LjggMjc3
LjggNzc3LjggNTAwIDc3Ny44IDUwMCA3NzcuOCA3NzcuOCA3NzcuOCA3NzcuOCAwIDAgNzc3
LjgKNzc3LjggNzc3LjggMTAwMCA1MDAgNTAwIDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3
Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44Cjc3Ny44IDc3Ny44IDEwMDAgMTAw
MCA3NzcuOCA3NzcuOCAxMDAwIDc3Ny44XQo+PgplbmRvYmoKMjcgMCBvYmoKPDwKL1R5cGUv
Rm9udAovU3VidHlwZS9UeXBlMQovTmFtZS9GNwovRm9udERlc2NyaXB0b3IgMjYgMCBSCi9C
YXNlRm9udC9XS05HREcrTVNCTTEwCi9GaXJzdENoYXIgMAovTGFzdENoYXIgMTI3Ci9XaWR0
aHNbNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3
LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjgKNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3
LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3
LjgKNzc3LjggNzc3LjggNzc3LjggODg4LjkgODg4LjkgNzc3LjggNzc3LjggNzc3LjggNzc3
LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjgKNzc3LjggNzc3LjggNzc3LjggNTAw
IDI3Ny44IDIyMi4yIDM4OC45IDYxMS4xIDcyMi4yIDYxMS4xIDcyMi4yIDc3Ny44IDc3Ny44
IDc3Ny44Cjc3Ny44IDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCAxMDAwIDc3Ny44IDc3Ny44
IDU1NS42IDcyMi4yIDY2Ni43IDcyMi4yIDcyMi4yIDY2Ni43CjYxMS4xIDc3Ny44IDc3Ny44
IDM4OC45IDUwMCA3NzcuOCA2NjYuNyA5NDQuNCA3MjIuMiA3NzcuOCA2MTEuMSA3NzcuOCA3
MjIuMiA1NTUuNgo2NjYuNyA3MjIuMiA3MjIuMiAxMDAwIDcyMi4yIDcyMi4yIDY2Ni43IDE4
ODguOSAyMzMzLjMgMTg4OC45IDIzMzMuMyAwIDU1NS42IDYzOC45CjAgMCAwIDAgNzIyLjIg
NTU1LjYgNzc3LjggNjY2LjcgNDQ0LjQgNjY2LjcgNzc3LjggNzc3LjggNzc3LjggNzc3Ljgg
MjIyLjIgMzg4LjkgNzc3LjgKNzc3LjggNzc3LjggNzc3LjggNzc3LjggNzc3LjggMTAwMCAx
MDAwIDc3Ny44IDY2Ni43IDU1NS42IDU0MC4zIDU0MC4zIDQyOS4yXQo+PgplbmRvYmoKMzAg
MCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UeXBlMQovTmFtZS9GOAovRm9udERlc2Ny
aXB0b3IgMjkgMCBSCi9CYXNlRm9udC9LUklKSk0rQ01TWTcKL0ZpcnN0Q2hhciAzMwovTGFz
dENoYXIgMTk2Ci9XaWR0aHNbMTEzOC45IDU4NS4zIDU4NS4zIDExMzguOSAxMTM4LjkgMTEz
OC45IDg5Mi45IDExMzguOSAxMTM4LjkgNzA4LjMgNzA4LjMgMTEzOC45CjExMzguOSAxMTM4
LjkgODkyLjkgMzI5LjQgMTEzOC45IDc2OS44IDc2OS44IDEwMTUuOSAxMDE1LjkgMCAwIDY0
Ni44IDY0Ni44IDc2OS44CjU4NS4zIDgzMS40IDgzMS40IDg5Mi45IDg5Mi45IDcwOC4zIDkx
Ny42IDc1My40IDYyMC4yIDg4OS41IDYxNi4xIDgxOC40IDY4OC41IDk3OC42CjY0Ni41IDc4
Mi4xIDg3MS43IDc5MS43IDEzNDIuNyA5MzUuNiA5MDUuOCA4MDkuMiA5MzUuOSA5ODEgNzAy
LjIgNjQ3LjggNzE3LjggNzE5LjkKMTEzNS4xIDgxOC45IDc2NC40IDgyMy4xIDc2OS44IDc2
OS44IDc2OS44IDc2OS44IDc2OS44IDcwOC4zIDcwOC4zIDUyMy44IDUyMy44IDUyMy44CjUy
My44IDU4NS4zIDU4NS4zIDQ2Mi4zIDQ2Mi4zIDMzOS4zIDU4NS4zIDU4NS4zIDcwOC4zIDU4
NS4zIDMzOS4zIDkzOC41IDg1OS4xIDk1NC40CjQ5My42IDc2OS44IDc2OS44IDg5Mi45IDg5
Mi45IDUyMy44IDUyMy44IDUyMy44IDcwOC4zIDg5Mi45IDg5Mi45IDg5Mi45IDg5Mi45IDAg
MAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDg5Mi45IDMzOS4zIDg5Mi45IDU4NS4zCjg5Mi45IDU4NS4zIDg5Mi45IDg5
Mi45IDg5Mi45IDg5Mi45IDAgMCA4OTIuOSA4OTIuOSA4OTIuOSAxMTM4LjkgNTg1LjMgNTg1
LjMgODkyLjkKODkyLjkgODkyLjkgODkyLjkgODkyLjkgODkyLjkgODkyLjkgODkyLjkgODky
LjkgODkyLjkgODkyLjkgODkyLjkgMTEzOC45IDExMzguOSA4OTIuOQo4OTIuOSAxMTM4Ljkg
ODkyLjldCj4+CmVuZG9iagozMiAwIG9iago8PAovRmlsdGVyWy9GbGF0ZURlY29kZV0KL0xl
bmd0aCAzMTc0Cj4+CnN0cmVhbQp42p1ZW6/jthF+768w9kkH2KNIFKnLFkWxaZp0gwQIslsU
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
MEqi8YnZRCaPQuWvWX7e3tQoefWILWd8t+VMVGjyxUVNkdPfWnByumi5V4KaODRqukfSWby5
i4INvn/nsM192IJEd8ooArK5al7KWORzry0y5rs0LDKWMS52SZjGnhe91oJG+R6nLY9f7r43
qii8KoyoIqVrea6pX8QPkzRMbvzQ+v7pnpjhWpWPNPgffCYF3eZygU//dMSMagbc57P1vaWS
8vzGH4ow9UYBcAAtOLllpPy20obWtzd4Jp3qFSS/8NFVKfsGyxjl/8EBNbRd7f/+nK0aJ/Q3
xY1Z44Xrxt7kj1KolsjlJBo9o/X9ZqpD5b/bXGvq+WolEr3JP0VTVvwzttjcGIhx6W/zhXH3
+ydL/8985Pt7yjiQSRFu7TNp8hUnyRXbmv9+oPwuOZWOX2bn67n1NYC33qwwpc2XteWDEQXQ
Po8sSR96N/w/fHHzblR48++IZzRRdxhNitCk/y1e1Spe4228KimWkIU4ARmBhSQOU050scTI
n/4DCTerZwplbmRzdHJlYW0KZW5kb2JqCjM0IDAgb2JqCjw8Ci9GMSA5IDAgUgovRjIgMTIg
MCBSCi9GMyAxNSAwIFIKL0Y0IDE4IDAgUgovRjUgMjEgMCBSCi9GNiAyNCAwIFIKL0Y3IDI3
IDAgUgovRjggMzAgMCBSCj4+CmVuZG9iago2IDAgb2JqCjw8Ci9Qcm9jU2V0Wy9QREYvVGV4
dC9JbWFnZUNdCi9Gb250IDM0IDAgUgo+PgplbmRvYmoKMzkgMCBvYmoKPDwKL1R5cGUvRm9u
dAovU3VidHlwZS9UeXBlMQovTmFtZS9GOQovRm9udERlc2NyaXB0b3IgMzggMCBSCi9CYXNl
Rm9udC9aRllMS0QrQ01SNwovRmlyc3RDaGFyIDMzCi9MYXN0Q2hhciAxOTYKL1dpZHRoc1sz
MjMuNCA1NjkuNCA5MzguNSA1NjkuNCA5MzguNSA4NzcgMzIzLjQgNDQ2LjQgNDQ2LjQgNTY5
LjQgODc3IDMyMy40IDM4NC45CjMyMy40IDU2OS40IDU2OS40IDU2OS40IDU2OS40IDU2OS40
IDU2OS40IDU2OS40IDU2OS40IDU2OS40IDU2OS40IDU2OS40IDMyMy40IDMyMy40CjMyMy40
IDg3NyA1MzguNyA1MzguNyA4NzcgODQzLjMgNzk4LjYgODE1LjUgODYwLjEgNzY3LjkgNzM3
LjEgODgzLjkgODQzLjMgNDEyLjcgNTgzLjMKODc0IDcwNi40IDEwMjcuOCA4NDMuMyA4Nzcg
NzY3LjkgODc3IDgyOS40IDYzMSA4MTUuNSA4NDMuMyA4NDMuMyAxMTUwLjggODQzLjMgODQz
LjMKNjkyLjUgMzIzLjQgNTY5LjQgMzIzLjQgNTY5LjQgMzIzLjQgMzIzLjQgNTY5LjQgNjMx
IDUwNy45IDYzMSA1MDcuOSAzNTQuMiA1NjkuNCA2MzEKMzIzLjQgMzU0LjIgNjAwLjIgMzIz
LjQgOTM4LjUgNjMxIDU2OS40IDYzMSA2MDAuMiA0NDYuNCA0NTIuNiA0NDYuNCA2MzEgNjAw
LjIgODE1LjUKNjAwLjIgNjAwLjIgNTA3LjkgNTY5LjQgMTEzOC45IDU2OS40IDU2OS40IDU2
OS40IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDcwNi40IDkzOC41IDg3NyA3ODEuOCA3NTQgODQzLjMgODE1LjUg
ODc3IDgxNS41Cjg3NyAwIDAgODE1LjUgNjc3LjYgNjQ2LjggNjQ2LjggOTcwLjIgOTcwLjIg
MzIzLjQgMzU0LjIgNTY5LjQgNTY5LjQgNTY5LjQgNTY5LjQgNTY5LjQKODQzLjMgNTA3Ljkg
NTY5LjQgODE1LjUgODc3IDU2OS40IDEwMTMuOSAxMTM2LjkgODc3IDMyMy40IDU2OS40XQo+
PgplbmRvYmoKNDAgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UeXBlMQovTmFtZS9G
MTAKL0ZvbnREZXNjcmlwdG9yIDI2IDAgUgovQmFzZUZvbnQvV0tOR0RHK01TQk0xMAovRmly
c3RDaGFyIDAKL0xhc3RDaGFyIDEyNwovV2lkdGhzWzc5OS40IDc5OS40IDc5OS40IDc5OS40
IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40
Cjc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40
IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40Cjc5OS40IDc5OS40IDc5OS40IDkxMy42
IDkxMy42IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40IDc5OS40
IDc5OS40Cjc5OS40IDc5OS40IDc5OS40IDUxMy45IDI4NS41IDIyOC40IDM5OS43IDYyOC4x
IDc0Mi4zIDYyOC4xIDc0Mi4zIDc5OS40IDc5OS40IDc5OS40Cjc5OS40IDEwMjcuOCAxMDI3
LjggMTAyNy44IDEwMjcuOCAxMDI3LjggMTAyNy44IDc5OS40IDc5OS40IDU3MSA3MjIuMiA2
NjYuNyA3MjIuMgo3MjIuMiA2NjYuNyA2MTEuMSA3NzcuOCA3NzcuOCAzODguOSA1MDAgNzc3
LjggNjY2LjcgOTQ0LjQgNzIyLjIgNzc3LjggNjExLjEgNzc3LjgKNzIyLjIgNTU1LjYgNjY2
LjcgNzIyLjIgNzIyLjIgMTAwMCA3MjIuMiA3MjIuMiA2NjYuNyAxOTQxLjMgMjM5OC4xIDE5
NDEuMyAyMzk4LjEKMCA1NzEgNjU2LjYgMCAwIDAgMCA3NDIuMyA1NzEgNzk5LjQgNjg1LjIg
NDU2LjggNjg1LjIgNzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgMjI4LjQKMzk5LjcgNzk5LjQg
Nzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgMTAyNy44IDEwMjcuOCA3OTkuNCA2ODUu
MiA1NTUuNiA1NTYuMyA1NTYuMwo0NDEuNF0KPj4KZW5kb2JqCjQzIDAgb2JqCjw8Ci9UeXBl
L0ZvbnQKL1N1YnR5cGUvVHlwZTEKL05hbWUvRjExCi9Gb250RGVzY3JpcHRvciA0MiAwIFIK
L0Jhc2VGb250L1pOS1dRVStDTVI5Ci9GaXJzdENoYXIgMzMKL0xhc3RDaGFyIDE5NgovV2lk
dGhzWzI4NS41IDUxMy45IDg1Ni41IDUxMy45IDg1Ni41IDc5OS40IDI4NS41IDM5OS43IDM5
OS43IDUxMy45IDc5OS40IDI4NS41IDM0Mi42CjI4NS41IDUxMy45IDUxMy45IDUxMy45IDUx
My45IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDI4NS41IDI4
NS41CjI4NS41IDc5OS40IDQ4NS4zIDQ4NS4zIDc5OS40IDc3MC43IDcyNy45IDc0Mi4zIDc4
NSA2OTkuNCA2NzAuOCA4MDYuNSA3NzAuNyAzNzEgNTI4LjEKNzk5LjIgNjQyLjMgOTQyIDc3
MC43IDc5OS40IDY5OS40IDc5OS40IDc1Ni41IDU3MSA3NDIuMyA3NzAuNyA3NzAuNyAxMDU2
LjIgNzcwLjcKNzcwLjcgNjI4LjEgMjg1LjUgNTEzLjkgMjg1LjUgNTEzLjkgMjg1LjUgMjg1
LjUgNTEzLjkgNTcxIDQ1Ni44IDU3MSA0NTcuMiAzMTQgNTEzLjkKNTcxIDI4NS41IDMxNCA1
NDIuNCAyODUuNSA4NTYuNSA1NzEgNTEzLjkgNTcxIDU0Mi40IDQwMiA0MDUuNCAzOTkuNyA1
NzEgNTQyLjQgNzQyLjMKNTQyLjQgNTQyLjQgNDU2LjggNTEzLjkgMTAyNy44IDUxMy45IDUx
My45IDUxMy45IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDY0Mi4zIDg1Ni41IDc5OS40IDcxMy42IDY4NS4yIDc3
MC43IDc0Mi4zIDc5OS40Cjc0Mi4zIDc5OS40IDAgMCA3NDIuMyA1OTkuNSA1NzEgNTcxIDg1
Ni41IDg1Ni41IDI4NS41IDMxNCA1MTMuOSA1MTMuOSA1MTMuOSA1MTMuOQo1MTMuOSA3NzAu
NyA0NTYuOCA1MTMuOSA3NDIuMyA3OTkuNCA1MTMuOSA5MjcuOCAxMDQyIDc5OS40IDI4NS41
IDUxMy45XQo+PgplbmRvYmoKNDYgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UeXBl
MQovTmFtZS9GMTIKL0ZvbnREZXNjcmlwdG9yIDQ1IDAgUgovQmFzZUZvbnQvREVVWVNLK0NN
U1k2Ci9GaXJzdENoYXIgMzMKL0xhc3RDaGFyIDE5NgovV2lkdGhzWzEyMjIuMiA2MzguOSA2
MzguOSAxMjIyLjIgMTIyMi4yIDEyMjIuMiA5NjMgMTIyMi4yIDEyMjIuMiA3NjguNSA3Njgu
NSAxMjIyLjIKMTIyMi4yIDEyMjIuMiA5NjMgMzY1LjcgMTIyMi4yIDgzMy4zIDgzMy4zIDEw
OTIuNiAxMDkyLjYgMCAwIDcwMy43IDcwMy43IDgzMy4zIDYzOC45Cjg5OC4xIDg5OC4xIDk2
MyA5NjMgNzY4LjUgOTg5LjkgODEzLjMgNjc4LjQgOTYxLjIgNjcxLjMgODc5LjkgNzQ2Ljcg
MTA1OS4zIDcwOS4zCjg0Ni4zIDkzOC44IDg1NC41IDE0MjcuMiAxMDA1LjcgOTczIDg3OC40
IDEwMDguMyAxMDYxLjQgNzYyIDcxMS4zIDc3NC40IDc4NS4yIDEyMjIuNwo4ODMuNyA4MjMu
OSA4ODQgODMzLjMgODMzLjMgODMzLjMgODMzLjMgODMzLjMgNzY4LjUgNzY4LjUgNTc0LjEg
NTc0LjEgNTc0LjEgNTc0LjEKNjM4LjkgNjM4LjkgNTA5LjMgNTA5LjMgMzc5LjYgNjM4Ljkg
NjM4LjkgNzY4LjUgNjM4LjkgMzc5LjYgMTAwMCA5MjQuMSAxMDI3LjggNTQxLjcKODMzLjMg
ODMzLjMgOTYzIDk2MyA1NzQuMSA1NzQuMSA1NzQuMSA3NjguNSA5NjMgOTYzIDk2MyA5NjMg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgOTYzIDM3OS42IDk2MyA2MzguOSA5NjMgNjM4LjkgOTYzIDk2Mwo5NjMg
OTYzIDAgMCA5NjMgOTYzIDk2MyAxMjIyLjIgNjM4LjkgNjM4LjkgOTYzIDk2MyA5NjMgOTYz
IDk2MyA5NjMgOTYzIDk2MyA5NjMgOTYzCjk2MyA5NjMgMTIyMi4yIDEyMjIuMiA5NjMgOTYz
IDEyMjIuMiA5NjNdCj4+CmVuZG9iago0OSAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBl
L1R5cGUxCi9OYW1lL0YxMwovRm9udERlc2NyaXB0b3IgNDggMCBSCi9CYXNlRm9udC9LVk1B
R0IrQ01NSTkKL0ZpcnN0Q2hhciAzMwovTGFzdENoYXIgMTk2Ci9XaWR0aHNbNjM5LjQgNDc3
LjEgNjA5LjUgODUyLjUgNTI5LjQgMzc0LjQgNjcxLjEgMTAyNy44IDEwMjcuOCAxMDI3Ljgg
MTAyNy44IDI4NS41CjI4NS41IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDUxMy45
IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDUxMy45IDI4NS41CjI4NS41IDc5OS40
IDUxMy45IDc5OS40IDUxMy45IDU0My43IDc3MC43IDc3Ny43IDczMy42IDg0Ny41IDc1Ni4z
IDY1Ni4yIDgwNC44IDg1MC4yCjQ0OS4zIDU2Ni4zIDg3MC40IDY5OS40IDk5Mi45IDgyMS42
IDc4Mi4xIDY1Ni4yIDgxMC42IDc3Ny42IDYyNy45IDU5OS42IDY5OS4xIDU5OS40Cjk3MC41
IDg0OSA1OTYuNSA2OTkuMiAzOTkuNyAzOTkuNyAzOTkuNyAxMDI3LjggMTAyNy44IDQyNC40
IDU0NC41IDQ0MC40IDQ0NC45IDUzMi41CjQ3Ny44IDQ5OC44IDQ5MC4xIDU5Mi4yIDM1MS43
IDQyMC4xIDUzNS4xIDMwNi43IDkwNS41IDYyMCA0OTcuNSA1MTUuOSA0NTkuMiA0NjMuNwo0
NzguOCAzNzEuMSA1OTEuNCA0OTkuMiA3MzYuNiA1ODIuNiA1MDYuMiA0NzggMzM0LjUgMzkx
LjYgNjUzLjMgNTEzLjkgMjg1LjUgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjI3LjcgODU2LjUgNzgyLjEgNzEz
LjYKNzYwLjYgODUwLjIgNzk5LjIgNTk5LjUgNjg1LjIgNjMxLjEgMCAwIDc5Mi4xIDY1OC43
IDU3OS4yIDUzMC44IDQ1NS45IDQxNi40IDQ1MC42CjUxMy4yIDQ4MS4xIDM2My44IDU5Mi4y
IDU5OS41IDYxOS4yIDUwNi45IDQ1MC42IDU4OC4yIDUyOS40IDU4Ny43IDQ1Mi40IDU1Ni4z
IDYxMS43CjY0MC44IDY3MC41IDI4NS41XQo+PgplbmRvYmoKNTIgMCBvYmoKPDwKL1R5cGUv
Rm9udAovU3VidHlwZS9UeXBlMQovTmFtZS9GMTQKL0ZvbnREZXNjcmlwdG9yIDUxIDAgUgov
QmFzZUZvbnQvUlRUTVFEK0NNU1k5Ci9GaXJzdENoYXIgMzMKL0xhc3RDaGFyIDE5NgovV2lk
dGhzWzEwMjcuOCA1MTMuOSA1MTMuOSAxMDI3LjggMTAyNy44IDEwMjcuOCA3OTkuNCAxMDI3
LjggMTAyNy44IDYyOC4xIDYyOC4xIDEwMjcuOAoxMDI3LjggMTAyNy44IDc5OS40IDI3OS4z
IDEwMjcuOCA2ODUuMiA2ODUuMiA5MTMuNiA5MTMuNiAwIDAgNTcxIDU3MSA2ODUuMiA1MTMu
OQo3NDIuMyA3NDIuMyA3OTkuNCA3OTkuNCA2MjguMSA4MjEuMSA2NzMuNiA1NDIuNiA3OTMu
OCA1NDIuNCA3MzYuMyA2MTAuOSA4NzEgNTYyLjcKNjk2LjYgNzgyLjIgNzA3LjkgMTIyOS4y
IDg0Mi4xIDgxNi4zIDcxNi44IDgzOS4zIDg3My45IDYyMi40IDU2My4yIDY0Mi4zIDYzMi4x
IDEwMTcuNQo3MzIuNCA2ODUgNzQyIDY4NS4yIDY4NS4yIDY4NS4yIDY4NS4yIDY4NS4yIDYy
OC4xIDYyOC4xIDQ1Ni44IDQ1Ni44IDQ1Ni44IDQ1Ni44IDUxMy45CjUxMy45IDM5OS43IDM5
OS43IDI4NS41IDUxMy45IDUxMy45IDYyOC4xIDUxMy45IDI4NS41IDg1Ni41IDc3MC43IDg1
Ni41IDQyOC4yIDY4NS4yCjY4NS4yIDc5OS40IDc5OS40IDQ1Ni44IDQ1Ni44IDQ1Ni44IDYy
OC4xIDc5OS40IDc5OS40IDc5OS40IDc5OS40IDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDc5OS40IDI4NS41IDc5
OS40IDUxMy45IDc5OS40IDUxMy45Cjc5OS40IDc5OS40IDc5OS40IDc5OS40IDAgMCA3OTku
NCA3OTkuNCA3OTkuNCAxMDI3LjggNTEzLjkgNTEzLjkgNzk5LjQgNzk5LjQgNzk5LjQKNzk5
LjQgNzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgNzk5LjQgMTAy
Ny44IDEwMjcuOCA3OTkuNCA3OTkuNCAxMDI3LjgKNzk5LjRdCj4+CmVuZG9iago1NSAwIG9i
ago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0YxNQovRm9udERlc2NyaXB0
b3IgNTQgMCBSCi9CYXNlRm9udC9DTFdXUk4rQ01CWFRJMTAKL0ZpcnN0Q2hhciAzMwovTGFz
dENoYXIgMTk2Ci9XaWR0aHNbMzg2LjEgNjIwLjYgOTQ0LjQgODY4LjUgOTQ0LjQgODg1LjUg
MzU1LjYgNDczLjMgNDczLjMgNTkxLjEgODg1LjUgMzU1LjYgNDE0LjQKMzU1LjYgNTkxLjEg
NTkxLjEgNTkxLjEgNTkxLjEgNTkxLjEgNTkxLjEgNTkxLjEgNTkxLjEgNTkxLjEgNTkxLjEg
NTkxLjEgMzU1LjYgMzU1LjYKMzg2LjEgODg1LjUgNTkxLjEgNTkxLjEgODg1LjUgODY1LjUg
ODE2LjcgODI2LjcgODc1LjUgNzU2LjcgNzI3LjIgODk1LjMgODk2LjEgNDcxLjcKNjEwLjUg
ODk1IDY5Ny44IDEwNzIuOCA4OTYuMSA4NTUgNzg3LjIgODU1IDg1OS40IDY1MCA3OTYuMSA4
ODAuOCA4NjUuNSAxMTYwIDg2NS41Cjg2NS41IDcwOC45IDM1Ni4xIDYyMC42IDM1Ni4xIDU5
MS4xIDM1NS42IDM1NS42IDU5MS4xIDUzMi4yIDUzMi4yIDU5MS4xIDUzMi4yIDQwMAo1MzIu
MiA1OTEuMSAzNTUuNiAzNTUuNiA1MzIuMiAyOTYuNyA5NDQuNCA2NTAgNTkxLjEgNTkxLjEg
NTMyLjIgNTAxLjcgNDg2LjkgMzg1IDYyMC42CjUzMi4yIDc2Ny44IDU2MC42IDU2MS43IDQ5
MC42IDU5MS4xIDExODIuMiA1OTEuMSA1OTEuMSA1OTEuMSAwIDAgMCAwIDAgMCAwIDAgMCAw
CjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2OTcuOCA5
NDQuNCA4ODUuNSA4MDYuNyA3NjcuOCA4OTYuMQo4MjYuNyA4ODUuNSA4MjYuNyA4ODUuNSAw
IDAgODI2LjcgNzU1LjYgNjc0LjQgNzAzLjkgMTA0NC43IDEwNTkuNCAzNTUuNiAzODUgNTkx
LjEKNTkxLjEgNTkxLjEgNTkxLjEgNTkxLjEgOTQ4LjkgNTMyLjIgNjY1IDgyNi43IDgyNi43
IDU5MS4xIDEwMjIuOCAxMTQwLjUgODg1LjUgMjk2LjcKNTkxLjFdCj4+CmVuZG9iago1NiAw
IG9iago8PAovRmlsdGVyWy9GbGF0ZURlY29kZV0KL0xlbmd0aCAzODg3Cj4+CnN0cmVhbQp4
2rUa247jtvW9X2HsS2V0rIgURUkbFEnaXDoBghbZBYJinQeNrRkLkS1Xknd2+vU9N0qU5NlM
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
E0voEvpJrtBKd+l2kustmWWHhzPQlIcz4zSOgIGUNX+dmpMHlGwn3k4Obk8lI7VvXAG3kK2r
xevqGKyCHUzIzGLoME39dyHWDg8n/JsEr1o/o3YyPtcYH5548NX4UmC2gfGvqQb36tth90hD
DbRPpu9GvKuS3AsEl5dGUbx4NZL4Up6o6asRX5qGZ9PhgjCGH0oZ5aIap5F/+h+m0dbRCmVu
ZHN0cmVhbQplbmRvYmoKNTcgMCBvYmoKPDwKL0Y2IDI0IDAgUgovRjEgOSAwIFIKL0Y0IDE4
IDAgUgovRjIgMTIgMCBSCi9GNyAyNyAwIFIKL0Y4IDMwIDAgUgovRjkgMzkgMCBSCi9GNSAy
MSAwIFIKL0YxMCA0MCAwIFIKL0YxMSA0MyAwIFIKL0YxMiA0NiAwIFIKL0YxMyA0OSAwIFIK
L0YxNCA1MiAwIFIKL0YzIDE1IDAgUgovRjE1IDU1IDAgUgo+PgplbmRvYmoKMzYgMCBvYmoK
PDwKL1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10KL0ZvbnQgNTcgMCBSCj4+CmVuZG9iago2
MiAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0YxNgovRm9udERl
c2NyaXB0b3IgNjEgMCBSCi9CYXNlRm9udC9aRlJOUFMrQ01NSTcKL0ZpcnN0Q2hhciAzMwov
TGFzdENoYXIgMTk2Ci9XaWR0aHNbNzE5LjcgNTM5LjcgNjg5LjkgOTUwIDU5Mi43IDQzOS4y
IDc1MS40IDExMzguOSAxMTM4LjkgMTEzOC45IDExMzguOSAzMzkuMwozMzkuMyA1ODUuMyA1
ODUuMyA1ODUuMyA1ODUuMyA1ODUuMyA1ODUuMyA1ODUuMyA1ODUuMyA1ODUuMyA1ODUuMyA1
ODUuMyA1ODUuMyAzMzkuMwozMzkuMyA4OTIuOSA1ODUuMyA4OTIuOSA1ODUuMyA2MTAuMSA4
NTkuMSA4NjMuMiA4MTkuNCA5MzQuMSA4MzguNyA3MjQuNSA4ODkuNCA5MzUuNgo1MDYuMyA2
MzIgOTU5LjkgNzgzLjcgMTA4OS40IDkwNC45IDg2OC45IDcyNy4zIDg5OS43IDg2MC42IDcw
MS41IDY3NC44IDc3OC4yIDY3NC42CjEwNzQuNCA5MzYuOSA2NzEuNSA3NzguNCA0NjIuMyA0
NjIuMyA0NjIuMyAxMTM4LjkgMTEzOC45IDQ3OC4yIDYxOS43IDUwMi40IDUxMC41CjU5NC43
IDU0MiA1NTcuMSA1NTcuMyA2NjguOCA0MDQuMiA0NzIuNyA2MDcuMyAzNjEuMyAxMDEzLjcg
NzA2LjIgNTYzLjkgNTg4LjkgNTIzLjYKNTMwLjQgNTM5LjIgNDMxLjYgNjc1LjQgNTcxLjQg
ODI2LjQgNjQ3LjggNTc5LjQgNTQ1LjggMzk4LjYgNDQyIDczMC4xIDU4NS4zIDMzOS4zCjAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDY5My44IDk1NC40IDg2OC45Cjc5Ny42IDg0NC41IDkzNS42IDg4Ni4zIDY3
Ny42IDc2OS44IDcxNi45IDAgMCA4ODAgNzQyLjcgNjQ3LjggNjAwLjEgNTE5LjIgNDc2LjEg
NTE5LjgKNTg4LjYgNTQ0LjEgNDIyLjggNjY4LjggNjc3LjYgNjk0LjYgNTcyLjggNTE5Ljgg
NjY4IDU5Mi43IDY2MiA1MjYuOCA2MzIuOSA2ODYuOSA3MTMuOAo3NTYgMzM5LjNdCj4+CmVu
ZG9iago2NSAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0YxNwov
Rm9udERlc2NyaXB0b3IgNjQgMCBSCi9CYXNlRm9udC9KWk5NTkYrQ01UVDkKL0ZpcnN0Q2hh
ciAzMwovTGFzdENoYXIgMTk2Ci9XaWR0aHNbNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1CjUyNSA1
MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1CjUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1
MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1
CjUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1
MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1CjUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1MjUgNTI1IDUyNSA1
MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgMCAwIDUyNQo1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1
MjUgNTI1IDUyNQo1MjUgNTI1XQo+PgplbmRvYmoKNjYgMCBvYmoKPDwKL0ZpbHRlclsvRmxh
dGVEZWNvZGVdCi9MZW5ndGggNDA4OQo+PgpzdHJlYW0KeNrFWltv5LYVfu+vMPYlMuBhJFLU
JZs0SNCkdYEGQbJAmsZ5kMeaGXVnpOlIstdtf3zPjRJ1sbPtS19mKF4PeW7fOeRVqMLwan9F
f3+8+vrdp98mV7nKk6t3uyttVRpfbUysMvj+wy/BnU709a/v/nz1zTvqGg9dDXT1e747lNcb
k9rgobzTNq2rrmpqrEmCZsf/nevSlt205bE49mXL5cu1DYOy6y91eW2j4IGH3D/zv8yRBMWl
6g6nsqu2MtWZxl1wTIFrt0j3p9/akeIoVWF0FRK5H7h13HqqjJU2t2l/cKKSWJqfuW08ikzl
mbQV9QOTUx7LU1l3xYV6w0GZHHttokjllrru+nq7SmdsVCLTldwWjW0jGXfBYoMqS9323l5v
oiQJPsO/dPybTacj5LfMdz3fV6pSNx+wcjY0ipXNpfV8vdFZ0FT1tU4DZG2SB4/X1gbM1tm0
Fs7SsaFCEckjYWuug+K+7UgCii1OlIfBqcHPh/J4g985DNke+4eq3suAjmdooaY/olRUZauu
NzaJQCarlnuBxN0wIyKrVaZ9Rjwdqu0BdpDq4FQ8Y8EEW1yzAf4hgdjyz5Koam5wqzk0ldyx
ufD/qahlKMkhnEXXSl+kARu68nIqaS88Je55zg8bKeuYfyqgB/xU2+III+IouJRtf+wW4pep
1I1BhaK1Do6+uVqIOMahMnIKrL+4EWPTQSzVqPbOLOBCuafseUaaPFMkk6jUsfdWNpiA/uQp
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
pO1RqWKrHuGP9LhtAto/lzRpqurvuZOszUJCai5+bwM0Gz+x5U5NnzzS96Ddo6F/U5TCNRGL
osPYx/gQgvjCokmmEbxxej/D61QcLI9z/IZjCMTC9IITlReMA6RWrwR3uq5k/F9p8F8D4aEr
KlHgp38BEK4BJwplbmRzdHJlYW0KZW5kb2JqCjcxIDAgb2JqCjw8Ci9GMSA5IDAgUgovRjIg
MTIgMCBSCj4+CmVuZG9iago2OSAwIG9iago8PAovUHJvY1NldFsvUERGL1RleHQvSW1hZ2VD
XQovRm9udCA3MSAwIFIKPj4KZW5kb2JqCjggMCBvYmoKPDwKL1R5cGUvRm9udERlc2NyaXB0
b3IKL0NhcEhlaWdodCA4NTAKL0FzY2VudCA4NTAKL0Rlc2NlbnQgLTIwMAovRm9udEJCb3hb
LTI1MSAtMjUwIDEwMDkgOTY5XQovRm9udE5hbWUvRFpCWFpaK0NNUjEwCi9JdGFsaWNBbmds
ZSAwCi9TdGVtViA2OQovRm9udEZpbGUgNyAwIFIKL0ZsYWdzIDQKPj4KZW5kb2JqCjcgMCBv
YmoKPDwKL0ZpbHRlclsvRmxhdGVEZWNvZGVdCi9MZW5ndGgxIDE5NDMKL0xlbmd0aDIgMTM4
MjMKL0xlbmd0aDMgNTMzCi9MZW5ndGggMTQ5MDkKPj4Kc3RyZWFtCnja7bdlUNzftv6JBHfX
QOPu7k5wd7fGLbi7u0uQ4O7u7hAguASH4BBcA9O/c+49yb3/eTM176am6aL6s/b67udZa0tX
U5AoqTKImDmYACUd7F0YWBhZeAFi8ioszAAWRmZmUXgKCjEnoLGLlYO9uLELkBfAwsPDCpAE
moA+gN68HOy8HKzw8BQAMQdHTycrC0sXALUYzT9ZXAARO6CTlamxPUDe2MUSaAeaxNTYFqDq
YGoFdPFkBABEbG0BKv884gxQAToDndyAZozw8CwsADMrUxeACdDCyh6e6R9X0vbmDgCuf4fN
XB3/e8gN6OQM8gWg/pdTGgDIp5mDva0nwAxoDs+k4ADSA4Lc/D829n/j639PLulqa6tgbPfP
9P/06v8YNrazsvX8rwQHO0dXF6ATQN7BDOhk/79TNYH/9iYPNLNytfvfo9IuxrZWpiL2FrZA
APO/Q1bOklYeQDMlKxdTS4C5sa0z8F9xoL3Z/zYB6ty/LDCJ64hq6ejQ/XtZ/z2oZGxl76Lm
6fifaf/J/hez/GFQe5ysPAC6zKD+soASQX///Un/f4lJ2Js6mFnZWwBYOTgBxk5Oxp7woB0E
Ig6ANwvAyt4M6AEAeoAcMzHaO7iAHgGAmuILMHdwgv9nRVm42AFM5v8K/hdzgNjqL+YEse1/
mA2U/tnVwQVoZmL778X9zwjPf438zzA7M4DJ0dgJaG8LNP8ryvJf0f+VzAYK27o6/wmA5Ewd
7OyM/0RA/iw9HS2B9n9CIIuOIFkHsz8hbgCTF9DJ4U8A5M7BHvgf5gDZcnH/M84BMuRi6QT8
K4MVVLiDq9OfANs/nXH7KwNkzhm0TP9hkDVnoNtfzji4/7Fv6/BXhOefHDur/xnlBKkDP7sa
/+kzJ9s/3QQ6/3P+/wRBAiJ/CFS26B/iAjCJ/SGQsPgfAolK/Ie4QKVL/iGQ9Kc/BCpa6g+B
TEj/IVC5Mn8IpC73h0Dq8n8IpKf4H+IG6Sn9IZCCyh8CKaj+IZCC2h8CVav+h0AKmn8IpKD9
H+IB1WDiZGxqA3T5H7sMdGH+Z7P+zwG2/zzwPzcg6I5i+rPXeEBdNPlDIE3TPweDGVSW2V/4
zxL+hf/snr8QJGjxF4IKtfwLQZX+deSYQa21/gtBnmz+QpAp278Q5MruD4LuGSb7vxDkyuEv
BLly/Av/2WR/IciV01/4z3b+C0GuXP5CkCvXvxDkyu0vBLly/4OsIFcefyHIledfCHLl9ReC
bADtzIyd/92h//NuFRV18PBmYAUdWdA/5n9WggfAw8nj+z8z1e2tQAdIWhx01JmZuUAr/k/U
1NUJdOm4/OsLDXRx/zebW4GueSDQA2gKH6CqLE99Rr2GzYxtWElJHTT/WhoRGMSvzvVmK7AW
d9CWvuNTR3U3KrTebAPvQ/HKgd5seHRT9fI+5S/DzRCUORU/78t/Ir3WPZEU4vVLA0FY4QGN
ve5mNZP9NQdBwQiA1j7TpjEglBrPr8PUg/yo5Uus6RKezaqg/NpAHdGqSI6ltCxM1J6wcFNa
a6qcIUoaPNHf8k3cbn1yFWs96z0iRMFDzuaBOwNyVQIBkcTVGtwZWsLHz6R/zuoGupsdYtd8
85XPwDcqlkn315vdhvCsc+KWYrWMEe6P3S908VZ0NNcQvD7I5ptxK3qYV4/SJBYc/sqlR3LD
q4woF/KBM/5dsQcMjN7Nn0UheZKf+mJYdDo2Y7tknBlDdkTnew6wNBOR0b9FFfpIfDGw8Vex
ukvwqCzskRTJxx+KRTDRC6ZojOuLk8s18D9Pt9ZQWs0JQlMUz8rOl1MY13QkTS38knyZfI+b
2XYCXZc02H8A+XOfc7v8mVTTNpK5UmBsAEU/qCV74/Fdvuo5W61nsbBCsLie5i2tx5RarL2l
K7EFSws/Q7/Zhgh8wujCaiJpRg826Own49r8DvQKB3sEqTAKgnktMJ72wH42PhoMVRMXBizL
uRK9bAZzwvbzL35aqWGwpyVS81osGVPXdyOkrCohqGl2TAZLi9LUwGE2HJuGGzRnTgsiRnHT
qHRsP8ZyMwWWE+yBapqEE7ZhYfDtMSx7u6NKa3nhUgzvAteb1Mi3gt31II3qfsilpynIAK4i
v/gFq+GnKAN+rG6ZaeF5YfBowndfopXKuirN5uaCAXjlVO+0IdXz1rWD2t+JRXbJ8dv5bKZg
H0Pkz8XIri7smMFpT/DqyItVWNShVPVCf1B2zBPBDSMD0QNo3OYyho6RwMQHTX728jaaFKld
JG9STKuJoCYM5Oa4jiHuWocIy65u8l4gCyXhD4c/wWjSBasVD2IbnPhF0xXtsQWQsD4YNeEn
IFrFNc45R5/A13rVpBVr/Yo2rhkdXdKljuz0zgxAfL/Qzf8yjjKNJua9s/H6q6vYAkGNL028
lDCccrYfTKe73cEe8WGigiUV3KcMCw+LkB7hwyPRZx/oxBZet+MGVZppSopWtEnvpxyyM7rm
s6jLtv7CJtJqY2+BooW00N/iUyT5bwZYIti8jTvakuBL/H4ZAR/dJT+JuU8nP2J+uNGEf1lc
f3PXDINK9Gq3Ms3ws39lEMp81jirMSPVzFDR8E+YSti/tHP4/D00yBGg5r5LAh7FpVfGr0kn
lE6vHPg9TGx68kNCTsiM22eXxr6xM6teoq9bXSij5+lnFiseJ/JrYxPFpL9HkhkeSNrwH7kq
NZo/LXgmibAgmSclxs9ESeJ+8Vgyjar2aZJkCHc5c/4eAgNMHZdDkAli+8Z+vcrk8KSY8vG3
Vs4l/WHC4iSJdrsqW4xzyKRlP44nOrxlbwFCpkAMJEaGX7s1YwU92swK988KqbJcu82b5538
Oo+e9HBMCEd167RdJ52Yq2rJF5XkSDBncLWaERQ1OQHpKzdu4ztZycJWSKwm+x7lIabKk/Bi
ttxpOjMqGGncWOc8P2Ru88svNeVpz0mV4vywL1EhSOeUHZbHcgP8/fdp0Sj8fvGKfcMTsw+F
rIdP6tReM+ShqtneQCYvmtX9mgH4OAje812bhVHjbg5jyq8VI791gMTvTyTEsdeATPlqO1Sd
pEVPuesKFRsSsVEshOKQgub0+wxyyFVm50loG42sqif9PFlRiG5yqC+x3fPnUeVHWVQRN3Ue
Zfjq3qNi/bREYL8vf0MiQjIGbrKI5kP3ne905WiYCXediRrR6J18W5Sd3TW0yVl5HiKW4Jty
xnHf+VlVy1WGE4vWQ3C+ZImLdbN4EUuO4HNcrzhTu/iBxIHyBzXVC4qxloh9g2L0srF951uy
x+cI8il7ZQzDeKncL+p5j8JGUZmFjNX7FMRU72Fn/qzy483syxgGzNdnBHbJy+uJacrbQsxl
QddbRZrzMFfuyqq0y8imtB9K+POLYV6tb2FYKHvAqVasXJoobyPfTYr58cJ+f4haNlNboNux
NjJCReep5+40DQcO2ddBPzxusJBx9cAucKM7vV52u7Q2nMFFi5kCtayDqUjy0PjorlZUn6Oh
6S4K9CpH4DJm5LmbvgjJTnKRZOSnjZ/aXU8efNEOjdpFhyT8svzSPnh0/HNT4seECjHvjTE1
k7fgMMxYY+0MbrtFXCcTWh9hzuDQbxb24cItGwc517MMNfOhO6gQf0zXcSL94JJeVymuNYin
I8tTpGX7oXnCaKJVjqoJ553JLJGkTvhQoRQn6kFohfgk3kS2i/FhehN7GsucRcUitnZHSs6X
FR/9wKFrD+zwYKUcQ1GNUa9QvfSiWNxN+50FHx+242pSv2WIKwAzF0tPyQ2Uvpuw5MW8NfSo
lno5NaycpjN2VHvoZuk3Nx8P+MRD4Z/bEZPJC7xSiRKQECSbyAQMPakKt5jtGvF8hKo0d689
x1QVZMxf5hhRn9izbKsP8xK+Z6UYCetttmVdGXvT03jdmaRokRkSxKTedYkznDbKF88hoB2b
G03n6n3/ElKhdkuH6jDm4/MBqm6yizxTab50UHUpcdk7j2VMeOyWlxTx1SV7T44qccPEJ8/F
lcd07iA9RdpOvWbc4bfUye+Gr1FdsYnJDIt1xMDTNUjZS34nvO10C2gSqDCT4c7ncp7N3szc
r5YHQz/lOmFcyvPDDkXYjSHDDC/rImrVXCVm3E3XoM3SMkzdm8MvJ/Ryt0jPML5XOEjxy8Bv
vPEYBqvKex9QG1gDfFXLyo3OI4+7qWonuwv4GDLcylZmpmgyExZJtt1mgsMXMTVhP3PZkihl
pZ5gTb06eYQSY24Gw7YyouEm/2ILieg6n71+PPnlTNmbPujkon0W+YhOmFZkIFA/IvApFt6u
+O5nsDT3JWERQSIKRRkTlcvexPFVQk4PyUUcmCBVm5xY49fdT207qdxm8eR2rKqaBZKcull0
GD8svy3vy2eu2JpRAOtfuewYVcGkGrx8xFsCcfCg5HnHszvvzHUOHdB2PQhiPqA4S8iOptSL
MdryanW2TV6y67N4jM1+tKHs9ZfS0eObt5sl5qljP+Cs/GHOeirM/TqxLSEY2tizMrhgAk9b
sNaNuMqccNx2bDaUOFizr6vNqFDPxJjF8h2BEnFh6mOIf/5HGWPhLPp6en0FLLj0qVwve4QY
8VbZ6/dKYK/8fBfM+bekL5kmg5uX+IO8z0tjYTLkiPIiinA6+DwkkEddI8pOrkPqGHqoQVmA
+e8XnJ84izT1ntFEBHDTCiwynNlNKw8aTUyTkm71jWFO4jchdlCRp4IJEvLw8CJ+Qvrq5h/w
sXPpF2tmj77OGJ98cnS7wQwc7cdN7qpKIJ0kSRrpqSxy7oJwDE3iz26LlDCuOEOHecX3Vv8p
YuRjQnnxkjRhapgLp0Y9BUcsduMRYOPc14xxslojkmovEueNZlIHPOhWujc6cWzICN+9ihzO
q38TCbeJQaezZmFeDFZ4GDNCRqzDnHLBjiA7dMG5Qt2Hv5JFL5jpMcISy515WL6sgxmPRvLK
4AkWQoZGUOxcara+ibvfD0YbdcHmEcuVELaixSvgVWzlt/58edg3plyA3usnaKQhm6fDEaWs
XKzpVzug1QZbF1H0nBNKomSEqMOpoAmht8gHQcBFRRikOgsQUdEOZG7S8E36TCc6oiwglhv6
czl7HDr2yBfpacLHU282X3mR/V0OAy1UV5HqQtnBJNe2dW36JZSHPGV3Y3DU7or5AgMAWWjw
cL7nho17wHqE7l+rponiFrjELnZGXXpfLbm8v1uWWk1t/aKCdDavy2ZfTixLoobSYqh+QRc7
4X+yJleDE3yfwu3VMnErEFRh/7LSepus3cm28WTE8CIljTMXWBoI2RwPTzky3/R2+wS3qeVG
E+PziqhBVzv04D0bGyqNrpx11ppyQgmW7CrbFMK5X8d2mUBgnEaWlAXbWGYw3+UkbLwtOFu5
vZGN+2k1MFf0QibkLTMzmvwYr4OI76usijM6yuzp9+/QPdX6kH6Va7x2ba+GV7j1RQsPcVAV
HjPTaptk1FqQJKr8iXBNA5+c8tHnhNx5ni/tGmYuSUaqVyrjkmSi3p8EGT2ef5++1GPF2rR/
zpslFKth5loktvdQ0dsxjcL9FPrSkzenIHoOB6CcrYWv8dlTSg6DTcvKWyXxklPdQSee9VeS
HOrW9O+Zygj46dPy0UMie6ZLRTM539rUUyIykGiCCpZy/vTn/mlsnxe95FCmitCQk5CNnhps
Fs0xq2DNPpzCpDLE2ufSBFLeM7n644FwQ3nkecZJ+UmGLaywyUUkQhTMT5UWeWXYKmIDLovO
2yd9oj8ju4mCfTXwVxHQ6HY99OrHFMwBZnvPUhEHbE5N4g6mbqk+QUFGrkuV7s5rOLPmRN35
WZ/5bpA09elLYuTwj+I62Bic3bjB6tVcI3FgwAtVcUw+ikx4bUQLd3K460oMFilHprJ5mY9V
8Yyd+v2csPeVX5wWolL7/cUysMsCe3zcLrL8NPam84olQq0JLoA8c6diTjRztGgjRv4B4me2
RrX6wLZd8bfSawap1uvZ150V940t0ZNI61RVpvvo82xm2RkHLTwTCVnNCXLmfV696BFXBbrO
J+p3LEFtEdKaCsWNxAZgw1X8Idrizvn6k0bOfQQ9hhDHa2EptoVD+JuN+fFBYYvS+rA2Q9tB
BYd9i6T5g+wk+in4FtdstoNYyZFxn3ONDIklnPgnZIHQT6OROBGk6ARMVk+KGF+XrmjlcmEz
r8HeVOm47migh3Q7iqbragVycsDnvpoNXwvMKiRMAUvAS0OgDZJnD5OALjzqv4pxFY7UgJh6
6efJajC9VfBuHw9m233gABS9XEuKy3I9ezaHReqgX+9akcGOLwHhMVA0jSJHJJA2eZezxm6V
m6bVitvwTs3rjh/Z4jwd+ggIgFHw900CugKbk1oSsC+BBs1LPMPnUl3ANVaaGdoFA/SlCAjg
3s6rP6rZo+V5pT+UUXwODi3SEef3wl78jaM6NgyW8KCM0d+8VjmlXSOSAYHTvxFn50xNh2hF
AtpgzLW/8D1MYwvfT2g7rLmQzmy8kkFW5+qdvjXfeOolxXiw0PzumpWk2LCT5s2aCrglGDPb
C1tCYSe0nQc0u6M+iW/eTSIkeNeE4l0FZhF4ksdSyDLg7jbO+HJpni20NuLWocG6vO52SJKY
seFPLsx8KJhXIGkHU8JSsc+jfkbSSAATOBkgKW09sXW0de1wsvwCZg3euhw3XmxABclBz31q
VZlgJSuJEYGsHkZgvOxZrvakj9jr9J572O8H/EGl2JQtw3PVYsUp29wPhxlx3f3F37J6OUau
LhSY7FYgmwawgv2l0g6unJCr+3G8Lrno9IfMvipxTiWui3RpjLC13d7Ui5Kh0M6HUNU62Fhs
kkyAzI+4Qf3oRbn1nrc+u2hfjEZ6azx+Kldp4lukHq+C3qySmtT4K5yOkC4GdX2+ERUF1Knq
iYBXx0b8NdIOOBvYYwpTpYXPycvKc1BETk/t6NIj+T3TdRimC5leAXTQiWN5jsTyPzhNoADt
ptBbjh+8y09IEmBmCfR0JsHQ9TGfPcZSF070mEQasLVHzJqqoQIYU/OKPvDt5D2ItwXdWvaS
+dN2/va/HuWOUsDPfnWUOFDDflP9WLdyLrapKGsZ0FYvpiFuyCVzGdbCNENeHwKuVUp2lRgj
hmjFnsyk15B0b+Het7ZO5oPYt2wGoIr3pK/hpstkWcLv0WHMbT5506ofhsv8FXT6S/xZ90AM
GwnCvyOnvZjsa2rlOKBHqbFQBhx1E+3C42uJN4UF2oXIdaB1kC6c86apwgCS9iAsfFW+wsdU
7iv7gpse01Ku1wPZb5Hp3xOt+M56m9HSYg10HC08ykhVNBsfS5A3d1ksr253KwANl1iShX63
pSRkDdiGqpVOHYoYIbR3R0tyQAHmhRaM1tRRvk/8quqZt+hbUS8xO7kRQgToARtWnOqi2BCH
UdgUDISNCqmxSkbXug30kTW3BlqH7IpmK9Wl7VN+yJJWpdNsRM8Rw3BfahCTe42IwkoLkYzY
65zlN6TtXaORhz/7nji1XSp77s3Sq6XI8McT0X+vs4GJVQIqkBUqKXOgKPpdHXIWXRSR1D7K
N7wvVpKwB7EdXxrKPeV4SXpW86MNr2GPJoK98dh3i0urfGqtsobWhqvQsA+cHqnWV2laSL/N
MRGVnDGPrWwwtiM0GE5pD7WN9kP55vjlfJTptwjhypruN2KoWmvMpGJKJLD8nopcUglFb6+y
RpYp9dQtY6mtXRyFnR6LCt4m6Swif3BJG9ztgkPqVmraa0iErwHVu3luNRrtMX4xhIBDKRjz
BuPtD4lrVsbRetDpfkLd5zShqg9pODlflyXjmN198u6uLzR1cC1TFR1ke67HaW7DekwlwSZL
P02WyEBWpgn15MI6EghZzp8esKCI3xMnctA8WpUB+t7entULBWsu2d/3V3EK1OIUnJ6Kg7L8
TcoediLAOAdFf8zLq8Xg6aPRuik2DaUEHk/FfkndOTGWE8de+jRQOu9TqDVEu0PxEvn76xQr
nsyt9m+Tj3ITeSr1zA32vgTbPL1a1WBjmF43kNGWy5eEHtOtWgSYzYuCCFw0FjRts93+eJwo
SG0Gd6ZI+ZQRuci7pwhnv76rUpnp6WLfqnWyY323TrkLQb+qOaY2Y3cmjwlA+fToxYK6WgIx
eOzzHong35/eg3Fke+8wygP2c2+xFsllJ+9iJVfVKSLzh5lHkImdVRKTI7I4aycFOav+F5rY
N4Jpzre+wpy6lHIK23IwEw8V3LQ9ateAcN/fKyG6CbZtbXNDccfp5+iGq/uaDEqJnYPKXchv
H05er/xkqiEsD3pTAxAKjD5dTW5HV6Jvk6pSpJqrJhMY/AydRtaSTbAOUs+cbqeoTXWti4p8
sNwIiMdARljAILEwdeEU9RrLsvE3+omeUOghgF8ofIalxHHk2gSEcqK5nNw+PhOOtlcxkc++
/YArtX14IYyW5EN1cyhPp9vRRN297krD96MnwKhI9zSTnn2LCfTz/B19bW1qkDKawp7ZPDOu
lmaTyaqDhdwLCXJCLHudLXWKPFCo/wMRZaAv9Dhs8Ik+j26tWRHQVrp/ckkfl9KlN8F536Qm
TOa8GGvrRPt+n8Sn7/hyyp/Mm3mD8Xk4gk/xeQOL+vVW44HtJdrELZcRFi5f4RisByMLKdxl
/dNyqMvv4OzkiO5EQVcxU0eTWhbpiwEFxvFXU4EP6yGSv9R9tNZ6+SN+ryuJSCzSBciJn0LZ
Wfa79uPBWYn8Clj4Jsf4ZHQ2W3nLNo6B+9XaHLrUrQvWJz6p1t5CZF8wbv9AKCXg6sDYllDn
oJ/uQsBoSqqdgz4Wh8CXhHEPscpVd2lg+XewOxpV3GZ9rQRxe4IBVCt3NjKcDMs7o93BShLa
d0oS1Zqfl2IU1KaBx25sIsJi+KvzzVoDMtdxolFt0TIjUepHfWmF7rAipEYIh+jShb1ZsJk9
t17EBTIey0XfwI8ZIYOhueB+BY1oydo2F77pklasP4/bdhKUhDflbnO7cWhPLC7cRQPkJNQJ
aYOhA5a1u5mHLTTkKAiYHr08DzqO6uwNVtPH0erWaObGJJEqdPlDmvl2dYY+XjvfZ+fIdqGg
pLrc9WmrxG6R0cBOLIhe/KAGki2l/LCiertU5z/BwoBYPPBODmBnJNsxFFG3NcNxsW6ESghZ
ahw5FGkgsZDiqB7IJFDjQfEL5DodZ5UjS2N+l8WZseCH46YicmmDlmkQe/AYT8zjsFP/VWJe
5QxHTNOJaSxOC1HlayGb3VZcDihvo/36OeYc3GOMw6daMKEsRI70JwJUPUV/+XELk1sFdEYa
QSF1VgN8h2YHVVL6WgmE2HF0ghU4tKIj5iZ0ttVkAxRp1k9dwbdOB2FjyzTZSNptJU53i+qP
UbL24i03h9sw32Zb+5gSKAhlq9qYk7MGvz4ihBgVbgWJWBde8Scd4temo4+i4VwZoeiGFQk3
YLo8pFAVyUtkM0vYwObRw+Q3qm69QDqasZc1iRCS3w1NQSMVGniCLzzn88g4f7XLVNMxwRjq
3/UouzhgskdOrHTqL7CK69CbOL05oJvW1cvDA/vtIRxYe+rTvbyr85src4qPSEW8YO6SnhOD
fKBG4QBiZoHYS8vCugsiasGZKkg1i/O0KI/A4706KaRtqDXsAwWJ+B7VZdf49OVb4vEt+EK8
8UjUFqx7wEtruc5cOodQYWTBfWk64eNNSVAiHm7OHJiNGvHg/PA3Pj/N8ktx3Ub+D/fDc4kB
LR1xmQwmuIHisyE7jXeviczUhWLEHmh+TCpIxaGCOgMCGd4VjB6XAlJE7Yc3uU7gDR7gklUM
TbYGJDZmgZ92T1hH533iyfXzd0opjwmrFsWTWuhWH+LRUihsMpaLwmkvz+0BGjxJ8Bg2KT8i
WrGtzCyGPtSuZoqchnVMfhxDHvCJESdwDGcUgTzhDiPQNH9sQLtAfDgjFCnAD9Zgm8ortayc
IwRgy9QByOQT0yLx4H+whHBj8EbZXY3CTkepPEtbcxEyA1nylzkrZO2hrsB5BPs8ztYq2xX5
olh0DW9l8stt8D9w7alWhxE9Obp7aounGTWhkcWXPuffR1/UwCm2cExUSz1tqvFjwLvg1kvz
Xvfmo1ukzMrApGBtwxcVq+yY0I2cvxP4fESeWQor35fUnpGuaeX/UrwRvQAjTmk3LR+NaToQ
UNSpsMyeD2m/dRJQNkxJBRv6VaT0luVkPOmD0MqZQr/nL1MyKPz+guUtj6m3wITBRMRcn03t
jqHw2OTOzkIUV5SbE/AYNmF4GkjpTaE98nTNUMvetA+fWe8DaINTwkiGZcnTZvik4+NJMB41
wQWijys3ywPKYSBp8PrOZ6sxy3TZvWffSXeyYN2h9rrMCyBrcqD9WJpuEiw317257kgzxbeb
VWnaOcpCtUJnqLydyD4vCVlCOHufXiT74CNWNbKcvhUUgbNUzVWlFYaUSUaxGjaEY7QoD6t8
+k7Rp3KWmm16EKx4i+HhWpmUXxLbCBl1qG5IZNtOfavH6d2r5IOggchkCzb0XFaBFKZ0Kem6
8noSK7kdmaDYy8R5HdBTHe7Kvbj9+c437eN8cI+kiuMyf4NFUTsBWYXoo9ZVqspqXs338DvH
H0oaom/5GAisI2Ia+TaJ7564dhVMZKgdti1snGMPiXkm2lfw8kfjc4vvTc93Uki1+YbSkR72
C+9xffs/rqDSMA432Ky44sZ2dxkyi3ubQtJ39XNpMFyWrEfDJw6pmYtjKxFfeb3DR0x1B2QP
KxEfj1K8IvcZpqGp0UuwdXMAjMOhidm7MS5auDrOG0x09pwa8d9rItygPyFFjkYtg++xqai0
D6cZIphXi6XrfF/VU6uOMUF2YVgeKhVa1JVVaFI3B9jbYrHOpBKy8UPiGN/bHd0qJGHV7FoE
PUXxZ/Xw1MoF4lMyzWoMaqDjFf6ahEuhsPh9wvSclIFCt3blmD15Lhno5yiNMSTKS/mRgv7T
5qXHuGLSXgX2/FRvtm12EqmfhGXVy3HXbWQ8RrhSo+EXJV99aig9nvHZ7hlBdDJHsfOcaKWQ
Zfog7dQhnweIj4XI636LLLBtW6cmEJb6ts4+Ct0Qfh9TttJ5hmaptY0FS9eG46gnmmPnV/NL
uJJCN6Sj8nmQNmQZdrl3dFXyz+S3M5iPAvQ3MH4WZpJ/tvNqeCkKbPi+UHbjo5dfYRetORNx
oXpNfEVUF1tTZza00lgyjHKZtu7ov45DyyCmuFdAiH4ts5VjnhvChY2i/oWZwnnDj+XeKpTk
1zcUFvoPXTmAyYL6u1vFwuwiCwbOm0Tl4/CThgb+6avltTSZanu/hwkfhLtNOHrJs2aGKM3f
hZhb6EpYVIoCaMrWXevuTcFCVl5C0hpJdXsQwYfr0chzcQ/Ygs/qsBYTcJWn5TiwmL6HLLzk
R8IRln4fa+79qhssQpk87hs1Kn7J06SqdewKvfVq6/6QSl9H116UOlMxfOxdnEIrxVCk9oqC
3v1cV8uwQWE6XUTypKXGMHwEW2CSZkGs5qvfV0Gd7+QiHU2GR3RbhfITL0IFuz1YW3gdJZT7
MU71Cd75nmBas8P13Tj1O59vPJ6l+4XTLORMsMfNtWxDoW/CGffi9dGaQNmmt6scNRUOEquH
9RUtai8YueNR/RtBU/iDzQWfGvrmzYjUxG+dT3XBOB8bWMFicdun3weBNG3RC8CbQdN32/7H
4zXTEfZHQsXjZMS850MFEXe9yQdDbGLBeRqhMySmlG1YLOSd9YB1jd013KNZVE/C8Ae650PO
hgCt0NOfZVuXiN+mMyAZ8XuZMCOaxSzNZjGJkmQOVdGxtBUDr4zI9VO4V9tUCyvtfpeZa/qz
bjkkMx/WZ+gicghsJTXtXzZL6/6K/dR+adh6mlcjyiSyM2eBwUqqF22CJ65oivxUPpjOGjTc
LuRkxbyq3+Mp9VDtuHgvId2PY6ObAP50eKQmjd7jnu3UV1rCT01fAVObg2VSGFOa7+7SmJyv
yZJx1KpoC3DOypI3mMLE/D1OffT+LhJH31ucwniP3X5CYHI+Vqs5u8+BA3lTAbGOyfoG3gBl
wg9fbbPTKKxCPsqvkZGL3uHc1HKqkAih+enqtqWN0oEk0SofD1IW7TnrI+oFOj3yD0K4S3dI
adyYpOSAipqNlU+lF/VX1BnhZ8M7008dDCjl0w0CHrBr+fnL+R7dk4xSIkv2nPdqrWwp2BZ4
7ku0GvD+aKZGSZy81pCIuUpsN5q03E/lAl/T4puDm6v8jrc59AaKNenCaIwM5J6cyqBvRby4
7bkdm1TC9SZDuV8+3z3zXo1XQXJNPjimRThbbqax3GzNzYzIXOH1xH4d9nLErVBng0N11jHq
Z+rIf15eoVMLi6+PbfKtgZj2fmTu2kz9hRBxsIOhZUlojY1E9Ry0oRD25uk6Q+W4YRCuofP4
27vXzMjeaOFiOnMgwVvoi+j++BT8e9UwFH6nAR1OmsG2T0Zz1Hl9liRF7WkGA+fYCNHZBs6p
OnwKz6/ftJFmFh4p9Up6H2UxhPHTozwojgbQp5ecaileloMI8nf0f7TWSyDe0BVPZtur9yST
MpZ4HZdNaaozCuHWP+qjHtd4eKbnbJaGE+to0rNMDMN4u5mFZiW3LhfoBO294ji4LcAHSKIJ
PPbC9U5oU1JwuYwCemxkSnTOv0Hg2CT0+5DXoGHQ08ER6uc1afwYQFiC0qZVp57G+Czz3JHY
J91lfKk3nH/HuoNTY9ZuGB9VtSFoSYtFWSAr8TVAkYPRI0zrunTAN6/m63AQ89e+xh8HNSF5
RGNywg2WSGlRzsGx/LoWz2uWIz+vb3R3i/ZO4ebYpeKfTvLWIl5vI9WtBmlM84jAE0Wlt9OZ
V7u/AsqGMfloKr47xyrBZakC546GltRY7gHtjL80IndwSPIPMusyKVDcVS5i3zaqkbNORaPM
tJS6s0IpKITRyvTJCXk7kL8vwOxfyPBMTcVMpjX5MuizIPoiPds9SdoyqUkRaJdD785xetyd
NiBg3sNiOC4NyfPbgbFu/ziNZY5IeEVyajvAhM9QKtBHrxl/73Sn3C+bZ6wJUF1eMySbLk5V
Q5Wlim1tPDymC3Ro/j0LAf0oxDGIePhRpwhfn9fMQqERcIkeXc4fH+MZFowzYigoiuMXB7Ad
u68Hm4E/o3B8S4fYCTtFRTFKzpuP6XJwptkaJxW+4a5qypO+osXL+cg2lIrqK2Nh3VQ9ZVoC
i9Frk+uMdmInll15j9aPiGvW7T/t6NZBZBkRpvuJ4QqgWcPrrGodVaRAV4Kb/kux+pc3Brv7
2zSTNwtzDFNHgLCtEqt45p6ypsdIoe76yolIwyqyu4dc7SNbUu1KxfDFx5KiS6HlaNjrtiWD
6SY8SYP47AwaC8lCtQvfoV5ciEFtG3lvAN8hygvCXv+LVDpfjRXQSETweK62hJXokvxQahD6
BsP56MLn9uuM4ORF9yH/C6TgtZVbU+CBpACHw7el59QN4b5TX+P9lodRahzstl+rtTd+YRr7
NFW0/VbnwnMkPuVgtR15tN6+rZepy/4Sa8rdAhVbo/DduAlCcY51V6yftAmsMnFjTcN3L4zX
EmqQ2BY7o7OL8+J5Wwh1S2C4gZU162s0P3qy7dk07CXwNEbTvu36Au8D2mbRDm5nIDjBolrm
KA60tgNomBnvKMuO94Suf/Jwa0s9eajJQPI9Jh5XzuNDC3Dl8zjSDpjIA3hMK85huyD1zaDr
me61qrvdp68/Q2sB3oaVRu7eTQXykSTXo1OHOrRsmWEBWAbDJY/W/YtDp7KvGgRUTs0D8Y6p
vEcfIq9ab29NSg9gHUmhDVgcLB4VemsFWEPJ0l4OAa7qlEGXM/ahsGwMYOLTuCU3DnEPmaF8
LYJ9Zc+Zm9anKAlh5OBweJ9ZnMxHjhQTxyCVJwJvUZphnOZ+gI9yfhnKgby8mUaVMqB/EBXK
sSk/J2KXg/w5ne4fgKP8IUG+vXNBS9vhR5O2KzxExnUOcw/iCTrywYtc7jYYSnuz7Lj4SPR7
SqrVOOow3drqL6vGaPV26wmuQxO/PONCJ8eEg8WIOdVG6aXKokW+6o9vVzArjOd8Ohcf39yt
SsMxvmnHD77LeJivEb2Z4MNJAAQ0Y2eG/U+v0nU6COL3UDUQBrECkk4GrO14EqLjB8E1YXQd
dYtCoS18FVE+X1SjK145rE6zGk7yhi0d8S07i77v+PK5XVvz6B0WZwdW/9JX2iYnaGEXNXuf
LRnULMr/IKuRLGd2FX8sWGEJZ7jjK1QrJwynUruEs2iueVGA16nRUqpnuA2389tM7Lvw6mdK
Hmo/dD5zA8xU+t1QeEY5/Y7Ql02Nqk3PHY8lmRAhcWcMslJ5Pmq/04NuYDeKaKJCOtFaPNX3
pKYM2sYZBh05Q5Ef8z941EmhsL2p/TMpez3guvq1y1PE+a1IGWgWYrthKJtfhLgCajByB7Jp
B4Z1xwjxmO4ZjboVGkdYSA2UBGpM5mxqW+FqzkwMR2/Mgl1XxkKJq2QGKfT3bslKiksdk3aU
CZ95mRaaf/x6UDfhGOw/c7s9hf/e27UIvxGc2MmVEqSbGyiam5C80QZcn0YCx0pbzmBU1+L3
S4DlOq3+omiGnLMeoDWHNTr12fjScK6+927gJqSqiJSDRtR9Q3irvid4c0hZ0uuupw5hgExn
/OCl8iBTTkjrh54ypBqHoDUcxgfg+NgAAumbjoW3AiVnzcayvtVaxaWXeLOS7MOdTXvLNvJj
UMzpUIyzz2thdhc5y3q9EprRQ7EnvFBARsMbOEuiQYZVSFsg+bKfn4j3lfnKAnVadCI/O5j4
WtSIL1FsbiIGmI9nMMbwZHCtGPu2HeP0AdqZdB4exaO93adK65CpzPkDgrBP+XKnN5FU0vZL
/MMq7L7LbYFRTAGnrWyJo3yx3kU3GLzGt5vm6V7ePx64jyk5f6b9YmRJgy+Bkag6GDSHySBX
tZv8PioTIffY57rupB5Ss5UWPhV8dog/6YzbNMnt8VxbfVY9DKvYf/OVcNFrKeOrx2p6dbKG
MKPPrmElxa2MmXzUeRDN4uaPnQwZleeQokH29/yxZGM68qMvmnRW9dRELXbfWLy/wRNLo/s5
kTVaBM4K0Wl8u7xOAHeU1Z0pxxjZ/OaHPzAdLxvYZBDlQrWhXYlYtF6+dEfNGP7V7vYd2twU
XWDoshBeE9G7E6/q1biBLHMeY1JGmxYTXEYZcw5bvA5A0TnDoRhrEYP2wemJRV2Z33A8EzM+
h5mZAniiCqt2Y/SrPdN9765JYdRiY1kg4eL+NsiZzQ8hdOgoZWjaJ4KndM1lhzv/A+Y0VkFc
StM1qUCLkgMP/ul25mwZpMep0dQm6TBeETSyo7m2fGx2GAWTf+/ybltRSUVOZsiyBPx6qZED
A7ZhQaD03YeCUX1RChTtuSeYZE4RHoGoNY8KJPr8TW2yqTqP3MdeWGxq9zA6Pjv+DwCwHaYh
ht2bLbV9fR+eKqUgIrkCqZBM9nl6W+rdRGFU419M2DZTZvpKSwc0I61jLT9aglqG9rxfIIJD
hduCSEqkvkPOv5/7McqoXRqmhYG+VNYX2/r6f5VU42JUxSRyN3xtPPs1nEFVs2dmyxv0yZ0g
9b2d2DSJsixbUtb6PYqYcwmpumZqt/9hBXU0srVemCxPJ8GH6uPx4cggR7nZZ6vsEN2uZUkl
lfyx4W3OvUv/79PE5faa3jIr4oOnhl97EaDJ69ohyhVgFT3RPBlKGurCA3JZw8PJzORk+XA1
Zv0yJUKpVZTznz/dFmuq+NJGoQkDajYiJvKgyQLKzG6+Bh9RIemssOTUOtSc3F4Z/YJKMq5+
WJZRcB7fdkxdzJM66l5FoSEtemm/OF4N/nTwPWykI3Wy75RCksEp8yg3N3vyE4tloSAexm+p
hJ8Z9+B0H/r1TYI6JzxPd6aZ043EIWSLc24qRPZDllf6sDEf947NMB2X0QMxbcivEZAT1GKa
sNg4WMv9WOJ1CiM19uGUexh4gHy8BzQUaTGzDQE4CFywiX2Bscvj47jyNxjERrptTJ82mrfv
kpV/9eeFz9dnwc5gTvnnjGfwTq5YzpAbtqvk3lw4e0df7GgXM1ZV8DFlrKFX5c7EpNbqdiX3
bH23HF2LVs2gm7FgVUSDXLNMnutsaNfENhnVVpIKCt86DGUsnZr8cI26obtdyVDgfFfrPqHd
CeGxL/xupIynXxsi3ozAHlPyPC9YIk/IUL6zihJAEdplRvZiTxjNJ9kNmQdeyC3xmKcEAUNP
e/+dV0FuZ2obhVOaINGhiZE/etGkSnZo5fyN7njF5908KlEL68TT7iFVF2qES9OmsfDMWc20
S7yXWxuZuUBD7OmjSrDdl8alCsUZQ1650wFeinmUsekovcOgnWwnIuQTwvQtygeJJuN4IFfW
UaaKumBnGO9oZErAZjdxl3HeOcZuihizJ8vNgNiUs+iIx3VcJt/vk2xRorypAUdOnMyLd2V9
+yi/LzxLuNZ6+nfE9fRXUyEWGPyC3ANtDb8DBiobUHsl+Je2MVpnHnAzN3JQ+KrDp+ucQnzX
ogsrgY/Ty4dcoUFb6pAkkohcWRMWom206iUnH7n50eIEBR/XaK3VfaK7M2t/ysK6wMtW6RwQ
rpk9mD7aPg8q4ClZizz0B+uH2VaJewQQJgtGoX94iX2Twg3F06JTxq7AjC6n12CYdjDExML3
boyK9wUjrl092oqILYUp+GZ4seoeUBleqWYtUrE5kgxd6jrfNYVqy3W547K4pHZwqYPFZdR0
2198jAXUqP4ueB+EaVKr2xh5AzmDi5dhkrpXkeDpATy28EmXqOrsgsAd2gtlQZIthZpXbcCM
W9ogI5BKGmjsFLInIVC54RZUVUjXGou855B9VOcypwlmGnQG6340xfhGaW6IQ2kzf6YKcTU8
WahzG+YI14jJqt/EvqznYABl4Sqfxzm6uMLPnc1uvrqyvrWnltZG5k9LdM/dywQ0Apvr/rJj
lJZBft3FGKK3y9iqWYZDWK7vSnLioxrKjDbOx7YsjNFA0whdA4uXiE+wwzkuN1JwHxIbMiWN
hC2OREcCJZeEM/ZoVDi0GSUlvdfAEoatjsmuBWcuVtWDS5aqPxafNP9IGtrHBRV/DLMyB00D
PlbtMmySfDqetMyVk6l4ueDAVSaB29tWq9viD2nYtIaOkXu2JNg8tv/IpSEJK7YDD4OOQjDn
+AM6VGqBw6+CMTPUy8+8vyTky2ezBxikmUzcLKjoH0rbwTTjdSJwHDmyIzazXhfr6j4K3+rq
nxOi5rscyC8LHSmR2nbCT8IBQfGRifdZd2yB5hCD0N0PTW8zSZ8UybP6K14T275y6vikCPA3
Wmtpmd04evV3dmIwJMrB3SgjCSV87IQrH/MRyC+hdFK8RMOxEfC4x9k7RJXEVrIG0rHaEw0i
PpzkWPFBeXf6KiYwmKGJseBJGXq6b9CSnaPKdaHO3kNSMD4VPH6kfGTLMLDOvcSJMbTLE8JH
YodR8W1lL8+lvkoUOOVHrfwZ63RcbTW0N3kfqYgNv8tt7VUgMOLx1q5nea6Ce0/kH3PcfRZN
sYRQBfQm3F9Ehe8KXeJt5sUc3Vx5l1s5HRAGND4zEsw32OEp7VOrWxJSL6VDcXlFvSzFAhyv
ADM4kt8vbvlLTVuzO0qoAm+2L3DASbZEsMdxxPhdm6MwNUXeVQUKZbF8FA1mf05nr7F12WXz
qXukIQTZrDaTRs9gigydnMP5NH5TlM9orSijF7NJY6U7c6O0trJCLiT1dnsRJmkOkUYZtmVg
N4pqfQEsOkoIYaWV1ixzGXhnzdS+HKO1BoqimiGznW6AUyjPE9Zjag8khpxFTXNvxAkj1co4
Ka15sDJBBBOUS1WEJyeSXGFr15NMx4o/zMaZv7laZdJjb53mkKAH9Wj2yFugxzwA+ZK83Hdl
skkquMkMY+/tiSnH8Xh9Q0X0CgjFEMwKtZM5hK5RF8LqRVDIiwRhkMRvoEkPaotpDBIalmNM
9PuZSPFPjmV2FpmHLfo1sN5uRKkvHvgrYik71Lf1NMM9F1ZI7zQgDQvmbubNy6fnd68B3CUR
d2W3uU3rZAkHZlv2Fd5gwt4l7QZF4MeMFSK2IpRqENlSWpCcKu7jl3l+olgEXrDzntrZ9qEz
dDsSWdwjcnMtORMlYuZlkWM21+4HKHSqGr+vfL2eVO9f4el+9juDX8ArPMw0TuEiZIlBYHuI
lmDmyIXudhxIbOT3/V53mXf2mLKbQlpRBHTGkZ8HEK9CfW9lHn7daCqrb+fqt1vhvE7zqPhB
y2CgSakkfTHLqs90nN06F8q5z4rkJndrfvCxUVeQRiVuR/gaaYcOf7pG0O8GGksmKMaf3tbW
qNsyk4EKZbArPoltDYxA3nLCLfPuW7NfrPGSGvdn1CfLBV9t6IhJbgUmXL4r/NZlGRLH3pzR
MQqwuI7OvkSiE1yF75kBXDG/sDcrUqQyDlWdaMjnJIk+buGinz180SQ0mdh5+tpBOYCpPHWR
XcU8Q8Vrw9vvvxF6fAcYxu2avwFIpbgvVp+/2UmZx7o5vhEhBKdYR3IG7kYxHwNVr+EX5Uqq
QizBEl2Tb+LN8yzlOj3Jtrj2s/OOyb2S8PKq4fy+Kp6lr9CXKA9Ewe5/5k0BqwvSrqNv3+gL
U+OIgzW1PzV3FpvLasEx7sDBcKs9CCEfaAwfyj4zRUUtu+W8i6EJ1B4i/7HOQQ7AA6c5/gro
Ts5IGT+rZXYY1tLDWyggv20m8ZcoJkZvgqnL+6oh2LdHdJn5kTyDtTx8caFtuK2k8KcV1I0n
ODPD6zf+odWdCyy+LDnKTQ2jZxdhz5l8xL6K/t8et8MeS9BE9i3gPFLfFCKcXHNRrZMFp78P
2cIt/uJWmn7rOYCO6YY+FEEoZ9jli/yCjdfyeccxX2LOXcWxeBOzo5bYoDOGe5vJWqrnjUaH
So5bs8Yop4Z0TA96pu7b3TDnS7TkvXJOS82Y+7duZpzCaTMwSf4JEWTqK7q4+9a6GOKEd8Mp
ys5qQ493uTHVMSB9U63XY6IYY6XVuA0KfKk3sxzeLaKpjCXJ2WYgfz4lWNCdCFOLx+pyJCNF
c2TrGb+bRsL61UnQVTuFZjjNRJ2SUYVLx/eBD8idAkx+MV1vYac1RN06H22+pFGSTOQXaoDZ
kMhEiFGr9G4TG+/iHOSmkdao19HsZw91N04JWR2HwTXwflsptii0fDQ+mgKrWRFJ39EmE+F+
E4Sc76PxJOezfLVr2AxY7tw9G69KqJZhm31zuTTzrGbqNBlMuf7Qu6o23rIBeDNwHadS1LO8
n3rvSxo4j06Vzn69EkDH9DH73WuuU+s+g2Z+xpcYqf/UWOdKzsmQFj3xkwzuw5JdVu+l0moV
FJDNbfYTQzxB0DMQsXdzn0SJkgCrTowkcEghDsunSOesigTKLbNYMyNwkH6un1hDStV5oV6+
pLnZoaB7QCheixY6/FrOGCepnOq2DQAp4eIkpZSCAMtoEOYXR5jfMsq8p70sYJmZPTk+UUc5
TOrpamWozo4XOHW3pJjnMCO2gV1JyE7HLl5DuPtBMHNi7ueYXfWJlXDij+2KLioxeK+Q9mH1
/Fu3wbHA1Sx+Oi13lfapfvEfFvhUYKKMj4f+E1OCRDSSO8c+a0+2ZLEPen7roKtZ573rduxn
ggiR8T4lSqRvrC9V0Pyo+yNB+2JSKyVXHfGpPf7tHiIHV7Ck3UzEicE8c0VN+sYF+x1cJhO8
nND7gD9xTn5JmaGrAq/P6uTs0Ge3R6iJzLzjCAefEKs7+uWH9Z2REDYEKIMAc3hW8IUvZeAf
reTMelqiGNI0fD9FcDjtSZgjGFTfzwo24PbL9M69IyN8DaYMacZOX9HRkhvgIKdpAzNuDYWc
6TzK939WkwEMPnhhe9iNpKd987xe58UfwVbPG9/gQ9qy4Rz/zIve2vv55zWTK+SMqfOIpvm1
wFaYt8p1hsloLWRbtxPz/8sX/P8/wf8nJjC1BRo7uTjYGTvZwMP/X9Trtw4KZW5kc3RyZWFt
CmVuZG9iagoxMSAwIG9iago8PAovVHlwZS9Gb250RGVzY3JpcHRvcgovQ2FwSGVpZ2h0IDg1
MAovQXNjZW50IDg1MAovRGVzY2VudCAtMjAwCi9Gb250QkJveFstNCAtMjM1IDczMSA4MDBd
Ci9Gb250TmFtZS9NWkFITE8rQ01UVDEwCi9JdGFsaWNBbmdsZSAwCi9TdGVtViA2OQovRm9u
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
v12YI5vVRv/iEV6tEpHzjsFJvBXmPa5tQknqQtI9e7qbJ1UKZ5xXn8AN5zBqNTiXazbtp8SP
8UfGb9Nr+V+sja28n99WthEQqefLk4oUkLhX/9NjXFcnvTqOxZgXt+8OlP3hJuIpAXujlNwM
dfq7jlbfz1FRlmlFapJmQyJUoqneXkFpK8VmJan1C3vbgXEz5U1MHWITHHl0Kp3fTc0Jjfrf
TQVmGN5wmHgl/UxS+ow7o7yJZ+Y9RQy8RES4UK1ft7Sz9P5XhyCXF4BFvvsnqY4mz9nyFkXv
S+6BcY848vmLYh1KCfF/ZFP3lhw71EW9B32PEPAOKO8yS9/xfc6tpvW2usUHXNCr3TcVR5dT
HYJ7nH1vK2Jt6FRbn6EF04KX3oOuAK3eLq49eRAUJEoou/jqs0PNmZDuXihBjdWR0P/nh+x/
G/yPaABHIWFojLMjDO1ARvZfjclLIQplbmRzdHJlYW0KZW5kb2JqCjE0IDAgb2JqCjw8Ci9U
eXBlL0ZvbnREZXNjcmlwdG9yCi9DYXBIZWlnaHQgODUwCi9Bc2NlbnQgODUwCi9EZXNjZW50
IC0yMDAKL0ZvbnRCQm94Wy0zMDEgLTI1MCAxMTY0IDk0Nl0KL0ZvbnROYW1lL0JBRkVHQStD
TUJYMTAKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDExNAovRm9udEZpbGUgMTMgMCBSCi9GbGFn
cyA0Cj4+CmVuZG9iagoxMyAwIG9iago8PAovRmlsdGVyWy9GbGF0ZURlY29kZV0KL0xlbmd0
aDEgMTIwMQovTGVuZ3RoMiA2NzM3Ci9MZW5ndGgzIDUzMwovTGVuZ3RoIDc1MzEKPj4Kc3Ry
ZWFtCnja7ZNlWFRt1/dBQhykB6QZugSG7u4upaQGZoCBYYYYkO4GKelQQpCSEpSU7hJpECRU
GqRF6uG6rue+Lt/7fr+8x/vtOZ6994f9W2ud//Xf6zw3K6OeIY88FGUDU0Eh0Tz8vPwSIEVt
BRN+MIifFwxWALCyKrrBIGg4CqkEQcMkQPzi4gIgFZjN7cvtIyEsJAEWAQBYQYooF283uL0D
GsShyPlHlShI3hnmBreFIEHaELQDzPlWxBaCABmibOEwtDcvCCSPQIAM/ljiDjKAucPcPGFQ
XgCAnx8EhduiQTYwezgSwPeHLXWkHQok+lcY6uHyr5QnzM391heI40+nnKBbn1AUEuENgsLs
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
ZXNjZW50IC0yMDAKL0ZvbnRCQm94Wy0xNjMgLTI1MCAxMTQ2IDk2OV0KL0ZvbnROYW1lL05V
Rk1VUitDTVRJMTAKL0l0YWxpY0FuZ2xlIC0xNC4wNAovU3RlbVYgNjgKL0ZvbnRGaWxlIDE2
IDAgUgovRmxhZ3MgNjgKPj4KZW5kb2JqCjE2IDAgb2JqCjw8Ci9GaWx0ZXJbL0ZsYXRlRGVj
b2RlXQovTGVuZ3RoMSAxNTI1Ci9MZW5ndGgyIDEwNjM1Ci9MZW5ndGgzIDUzMwovTGVuZ3Ro
IDExNTQ0Cj4+CnN0cmVhbQp42u2UVViczbagcXd3Gnd3d3eXIEEaaNzd3d01uLtb8OAuAUKA
4B4cQpDh33uf/efsMzfzzN08090X/a5ater9VlV9VGSqGkxi5g6mQGkHe1cmNmY2foCEkqYc
GyuAjZmVVRyBikrCGWjiCnKwlzRxBfID2Pj42AHSQNP3P+8/fi5ufjZuBAQqgISDo5czyNLK
FUArQfdXFg9AzA7oDDIzsQcombhaAe3ei5iZ2AI0HMxAQFcvZgBAzNYWoP7XFBeAOtAF6OwO
NGdGQGBjA5iDzFwBpkBLkD0Cy19acvYWDgCef4bN3Rz/a8gd6Ozy7gWg/YcpHeDd09zB3tYL
YA60QGBRdnhfD/hu838s9r/x+s/i0m62tsomdn+V/0ez/se4iR3I1utfGQ52jm6uQGeAkoM5
0Nn+P1N1gP+UUwKag9zs/nNUztXEFmQmZm9pCwQwsXEys3L+Mw5ykQZ5As1VQa5mVgALE1sX
4D/iQHvz/zR5798/PFiUtaSVtNQZ/rW7/xxVNQHZu2p6OQIBrH+n/4PZ/ub3LjmDPAEfWN/b
zPae+P79r3+G/7GalL2ZgznI3hLAzsUNMHF2NvFCeD9I78QF8GEDgOzNgZ4AoOe7MguzvYPr
+xTAe2v8ABYOzgh/bSwbDyeAxeIfwX8x1zuD/s0c78NObg6uQHNT23/u6b9H+P418t/DnKwA
FkcTZ6C9LdDijyjbv6L/kfxe3czBzs7k78j78lZejlZA+79D3O9z31dxMP93iIv3r3m2Dn8n
cXP8ZQN0+eva/B18Lyb2N73XEf+b3vWl/k0879Pl/qb38sr/Jt73J1L9m94zNf6m9wfQ/Jt4
ACw6/6b3W/vv1v23ZrzfB5a/n5jvfTHTv+ldy+zv3WB9X9v8D3xvI/APfF/hj61jfVez/APf
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
4EXo8XEcz7Tz/Ymh9d4WFQXUa3SY1gK0nT/zm2Nhq4Qrf3Nrpws55RkEWZGI/JCw+lZ7VkTF
fYGdLjozoSs9yylL8JUcXilnEw/Hfkq4V8bHIiXN5QLPngaPk9VEkhcFs5DgA+ATKf9boPEI
6KCenr7HajhgtPNbFz4sSoaWPu6CF5kggaQczITH8VG+T+gqWW0UuZyvQ8ramMu859MFFpjU
JNIkAri9Jls1b9Q+glcnVCnhsDj21vTLMi6xPnTbUABsiBTMpCzTfl3CjKoDMl1GeXBjFVSf
T1520OVB9a1pw7A7bH07OmuRTnlMuqyz4fOLo+dIdwan6jxcplmclurLKxwuEs8ebbUvVEK2
FnfX3S33vf6KDg9BPmoSA6SSllisWLbl2lXZ5ao/nHOtCww8He14mJZbU2dcEw7TVENUX38F
VBjjaTS/Ni+XUJTy/lOwvjih29iwNHQZlX6Q9QrkB614iG0Ktm5YuRD4ayM1NJaVUF/Bc1+x
8f3sXNhiyOz0xvYrFOlRfrDokwqSkgpZn2zXtZfQQijyadNPVQfgaROg2Xv8My8GRIFfPkpB
pz50LAoHXUJ6rkTMCrDY9Zmbz7PPqJDqIkuigmkG6+igBJE2dQCrlognvg0nglrJ4qEs/Vhv
DsOZ+OHkyQVLZ7fo01pY6ACuXPic/a+f/ng8j9d3kXzkhN/Z0fyR1m5TN1v1gEoye958V87b
eUMz5w3a8FIPVkHw8w+TebKoOGEf9jstn3QpL9XovHzyudXrUQuH3AbuhLSTbvu9sL8MDebO
yfz2zrFhFdxbc+/K3r3LHmT1GdD2hHXx5YVwctty6Rv78QlZwekjb/lMHwoL1tvoij59cB0s
MfT6lWCq9FOaItbFgdp066tM92zw5i/YEczPGs5MYL/j+Je1oZorCfCCfOe/ZhiVIxUTMLSK
Oj/c79Vk6pZDlftDjHYmkWR189EmbRDIkZoQ17H+X34Q/n+B/ycKmNkCTZxdHexMnG0QEP4X
B9y3KwplbmRzdHJlYW0KZW5kb2JqCjIwIDAgb2JqCjw8Ci9UeXBlL0ZvbnREZXNjcmlwdG9y
Ci9DYXBIZWlnaHQgODUwCi9Bc2NlbnQgODUwCi9EZXNjZW50IC0yMDAKL0ZvbnRCQm94Wy0z
MiAtMjUwIDEwNDggNzUwXQovRm9udE5hbWUvSVZMWVJLK0NNTUkxMAovSXRhbGljQW5nbGUg
LTE0LjA0Ci9TdGVtViA3MgovRm9udEZpbGUgMTkgMCBSCi9GbGFncyA2OAo+PgplbmRvYmoK
MTkgMCBvYmoKPDwKL0ZpbHRlclsvRmxhdGVEZWNvZGVdCi9MZW5ndGgxIDk3NwovTGVuZ3Ro
MiAzNDU5Ci9MZW5ndGgzIDUzMwovTGVuZ3RoIDQxNTAKPj4Kc3RyZWFtCnja7VN5PJT9u0bT
SyI7hfTQyNYMg7GVXbJvQ7YsM+bBMDMYMxhDtvFWlpSJZEmJZBfZQkmWNjuJIl4qlbLv5Ey9
v/ftnPd3/jmf89/5nOf7z/e67vu+7utz399HWtIGBdPHBmBA4wAiGYaAI7QAQ0tLU4QSwLwr
KXFKSxuSQDQZF0A0QpNBLQChqakGmFHwgLIKoKSuhVTRQqpzckoDhgGBVBLOx5cMyBrK/chS
B/QJIAnnhSYClmiyL0hginih8QAqwAsHkqlwANDH4wG7HyXBgB0YDJJCQCyckxOBALA4LzKA
AX1wRE7FH7ZMid4BgPqfNJYS+FcoBCQFM30Bsj+dygFMn9gAIp4KYEFvTkWrAGY/kOnmf2zs
v/H1T3FjCh5vhSb8kP85rH+Lowk4PPVfGQGEQAoZJAGWAViQRPxnqiP4pzlLEIujEP4ZNSWj
8TgvfaIPHgRgCFW4kuqfPC7YGBcGYm1wZC9fwBuNDwZ/8iAR+08nzPn99KFoesbC2c5c4V/b
/TNqg8YRyfbUQBBQ+pX+EyN+YeaUSLgwwFUJrqSEYCYyz183t390O0X0CsDiiD6AMlINQJNI
aCon8yExERKgIQAcEQuGAWAY07IinBhAZpYAzNFEAt4BJM4fi0VoaACKgbgf5E+M/AGZuwrA
/qI0AUWvAAIB/TejpgQo4sHg4F8EAlAMxqODff9mfsg6/UJMCee/kSaz3OUXUgcUf0lrMusw
v9CP1n8jBHMCiuAvqMzUCftPkBml/oT/vg8Dg4AwGkxFGYApI5njUVLVANSRSpH/NdGBiAui
gKZGAFJJQ11FA/mT9aKQSCCR/PNPYO76L+yNYz4PEAwDvTijVamxJZoGI0oTuEJubhPEYZJ7
HLd4yNYtOL8JMSM7g9xaIzOf6igVFiizbBQ4SD92XI3r3dg7NUeUlmOj8JqSyaPG7TotEEJn
tdffeapeNmL2dKufDa7zdEFo8H4jLUpII0XqJTpj7qNvc253tRFx+u5bmVddQtB4DauVFUbM
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
jNwod2UVw8gr0aRSupVVHkoV1StUdO+O9RRj4EhaE2OD8bwzCx+Xn35Fn2WMwdu8x64pPSLC
XtNscVqt9fb5yHbdVEJCRK5NYeDg4iW+KYkGw6F2rbjgjMJmvTk6FaXzsFmQKqWfQTo52blP
zL4pkmPirb0evZggJpLC65h192aql08xm9mTzu1xEcugT6choS3jHY89lG44p9da9BmLSk4W
3X93VVOp2S26zG5Y55RFpgl8rF6rxj4hX/XoQp0pv1dTgvg5zH7Brza6KChbpyu00LgbJXUu
U+hFeIHVcsVaMQTJMfXMTCe86eFxa9nB70krZMFujw7XU/1pl29n1WXUvHFaP0J4Djvq263t
NeUWxfrIdFd3/TKyybnGMtZ27ytKgXvCzQ6OOXNLvyTgHPvuAGRZ+NsBnLOgS3zn093G3Vyr
QEz+g2LUjgcR25u0uf/Tty7WIx0qWQmG6gkFbFG3J0wiN5NtOs5KMLTOFY5ketxE3ojYVxfh
NpprsGbCQz9bUNy/OufwwjNq+KuyzW5RvU3HqRAjWOJw2cTDlxGfPSqO8EsgUiE9wWV5Ol2l
4iXSnBNv5ksyerWxazXyN5zme7HSnIPCsvXhjRnd4mvIgulF4VpXKFd+V2rrvdXm6V4Ba3x4
ptkWt8ywcvBdjo30Sy9xrjw9RSEJagiVq7LXP1OoonBtu97VDrWL+tmG9hU8KMtNUf71VJmV
D1DVaJs7AIU9fUHFcD1zI/tStNnpu0H1AeWief2HRSdQt/WfnUCOyn/7g21F6v3F6+qEo2GW
sopRq13xSv/Lj/P/Bf5PCHjhQTSJHEBAk/w5Of8DXvRYqQplbmRzdHJlYW0KZW5kb2JqCjIz
IDAgb2JqCjw8Ci9UeXBlL0ZvbnREZXNjcmlwdG9yCi9DYXBIZWlnaHQgODUwCi9Bc2NlbnQg
ODUwCi9EZXNjZW50IC0yMDAKL0ZvbnRCQm94Wy0yOSAtOTYwIDExMTYgNzc1XQovRm9udE5h
bWUvWUhaUVRYK0NNU1kxMAovSXRhbGljQW5nbGUgLTE0LjAzNQovU3RlbVYgODUKL0ZvbnRG
aWxlIDIyIDAgUgovRmxhZ3MgNjgKPj4KZW5kb2JqCjIyIDAgb2JqCjw8Ci9GaWx0ZXJbL0Zs
YXRlRGVjb2RlXQovTGVuZ3RoMSAxMDE1Ci9MZW5ndGgyIDI2MDYKL0xlbmd0aDMgNTMzCi9M
ZW5ndGggMzMyMQo+PgpzdHJlYW0KeNrtU3k8lG3btqSHSdaivlJ3ZGcWjDH2fd+XaKxj5sYw
ZhhjD8kukj1Ljy0SHgkpRLJnpwgpechTdlHW8k71PD3v2/v+8/6+/77fd1//3OdxHtdxHdd5
npfgOVMLSTU82RnUJpOokggoQh7QMLK4iIADCCgcIiioQQGxVAKZpImlgvIAAo1GAGq+rgAC
CcBR8lJweSQKAhEENMhegRSCqxsVENEQ/cpCAWqeIIWAw5IAIyzVDfSkieCwRMCCjCOA1EAo
AKgRiYD51y0+gDnoA1L8QDwUAkEgADwBRwWcQVcCCQL7akqP5EIGUN9hvK/XXyk/kOJD8wWI
0HyKAjSXeDKJGAjgQRcIzJhMOw2kefmvbf0HVz+La/sSicZYz6/y3wr1b3msJ4EY+CeD7Onl
SwUpgBEZD1JIP1Otwe/mjEA8wdfz56weFUsk4NRIrkQQkETIQOHSyO8Jgo82IQDEmxKoODfA
BUv0Ab/hIAn/sxVa+b4ZgV3UxZhZ2oj/2drvWVMsgUS1DPQCAfjf9G8x4u+YViYKIQCwhUPh
cASNSFt//dn/dJoWCUfGE0iugBRSFsBSKNhACG2KaBESCEYABBIeDADAAJplGJREptK2ALTa
hAAuZArka18RsggA5kkg+fp8xf+EUADMi+jr8xOMkgNgzrQ2gNS/MTlpAEYEfXxAb19aQ/+C
ZdAAjEByIZAI1MAfIBIOwEAi6AmS/t4vKwPAsETQy+0HgqIJ6v2I5KQAmPmPiPYKYL6kr+P3
43w4jeBMweJowi7/ZAsu/Sf8fQ5/4AganYLFf5u+r+C/N05dnRwQLCmFBiTRsrQ6IhCyAAqF
DPlXohWJ4O0L6mnS7gSHy0l9byTOl0Kh3e3bi6ENxV+xC4E2SCAYAOIgObnHCfSOEnziH502
W0b5rRu6ByaqsoUx1YiTxoNXUs2ZrpCNM+0HBrrEJTYKYrP6Xp+dQA7dDFdgIXY+VJw2Eagv
OVp7NsuvQloK95R5arW/yTCSYZmuiESNwRkx5z3HbBbFX7ilJqFw5O7uonfw2uu8vaBIp8c6
GNcTVV2K1pxaQ0LpFD8LJnjh3mpn9ycv84BrroyNDnPp0jFHes5yyo+jTEczH6qPTxDVFQqE
lV5JbRTrJ4tpqvRrbrWVfEFfqCo7E6Bf2bn/JrGS1W/yJkS5wbo+3ll64v1a2xp7n4eEe06h
/Ebc/PSB8Ze210xjwkSPOV4vxbfMqDDBDLbN5YjaHPqHPhsl6AG6jQv8OXj//PBUlVWFh2zi
Nw9ub1m53ts18snxhyW6Gl/wlensaFwfxFpQmoF7kZStMpvmhHOeTdPhfZDounFEQknS7xLx
6wqWL6zJcz2YoB06h+I+45eBLeUu10yWDMIwv95fm2uJ7Q+/1meyaKC6dHXkxqkP0k7UOkMN
hmilxKikiQ8sOydLIzcHeYQ0SrezOSWj/GurwNBgUbvwKN4Vj83wwy9XFNUaeFZ1xmcCZN0k
xPKXZFXvjJz+gj/8wf8OtM3J7t07M17ytFfCXkeP8qE3KUkVEXd3C9EsykXXVSMwO/aMeKqL
fRfnrdN5Rz2bjQxPv6WX1nE5nMhrlVWhaOasC3t55ldWR5u+J5e0ehC8IV8QpM2TFc/PfkbN
eQO73YqCvff1EgzqDbGCXcr1vYbPdtoTBJ+wsxk1vbXdpmKUtWZTsp0ivbX3MEoVKc8YImyO
LPXE9JpM2tkr2Wa1dqk8u/ReRH4+wPraMhJPz11Xtu3A6sDkEqdiBGRITMDfPtWOcyu1RDiw
f3AL4GNzPv+gm6vRtaW7XPcjZILduk1jKlwBI3ao0LI/XmHdBPjteK2NIYJBJUmUY+a4Cn3d
70Mv4jSKLpuy77XHskdIcBy1iawJk6G+zbv2vJ+q90c94ZRKjlwIorMxwIt6VjiBsjyyYM8j
xYlyWoVlC+jUGHcTMtswB3OpVJVadvZ2EdONxM61vA1kC4PCY+L53jl0csda5OmxxVbLYxlQ
0T4+onXp+Ums6QZbmY5xQE2Xic1scih6FhnZS84N/Yw+MdG3LvyxdOi9TnqzXrf7wnjY2KMk
SLvuMfSGwl5a1g3zI4S5EqVDPUCDTPybrJwjy1NFfPn1icFGA/S2w8/HONsqmxgc94UT9jf6
DmaU7bzN9z7PkEMXhFLOsTgspIhMHlKk3qj4ZIq2bTKyWhcrWRcE+DMqHYp2S1Dyj4rPK7K7
v3x0yr9caKuK/4aHZfypPmY6TOT1adgZ22S61jv7ku/oODgjVN9XnLseKIUQsCvUYoZ+Ub/N
3OQ8W6txt7ojsKbhSruM/Yb+wGKPVJ/kDkcUL/REkPuCTnmV+IxK8AM/AM1vulUsp5krS6lr
0E2vWGebactLHFVf2TJDlDsxJZ+tjZnijDrIvjzmwIQzmejsSWt+QXeZfn5XUFgcFfNGW/6y
WVbF+jFGmBcMlzPtsHE59STrXHjjkWEifP5q+qwr+t5yvn4o+GRXti32gC/XRKhsqxDc4mpt
KO9WfPJpGX5lXseRNy2Sjon3rpQtA3/L57iD7KGSfGZCn3zG7hKO815sUtBV9SIcjwk3FyPX
u5PQ8Qay5adBWQbWBzcGQmXL94WsgrbwTtKuLSmZ4q1GOLRncRhd25pGin37Y0yDeNiA+KtL
rWb5+bD74gf+OapKlESD4KFxRgMxvxvXD4dTDJ30VwafqdaktWfk2cxXydDLNKfNQTUA9y3n
DnWn/uDTdm2NaYUvFp32UGHYhlvlXEuZ22t80TnhdZDLBcUp1hETppiczEtuakdfnH8gyW3h
sPW78eQvAIf6cNIbRi/sXQ7XEfeZTw7CRfjTLTFYlKmLY15mT4v+xbTem9r9Hg9Gij6scj+w
Lba6e/yhKOM7g+BN9tfs9VLV4dMQX/TwjWlA6iQ4t3nyIxByDvN7Rnp/T1hU8nmkllOp6+mZ
+UpL6lWmoKR0Ss1aTareGPE87sziJsT8TROj+uokl37TnId5rjGdas2zqQDuMO339OjRKm4r
gVuBBeJ4QtmBSTmOvzYAT29LRuoPQmYu7b4LDiMVjF857FnpQyk4dr392rZQ3rFcenWe5SwT
iWqXHQfEUMqLcd2pZYTcaXwYXSq22+K4UJBn6hOh+ZZE92w7/vFVixT5gozbz/gHZBQM3G0o
UZp1wgr9uU+jR6/8EeHHOMJSOOalUHHsRLWKUXBBQKPUxiczvFuxqNpCKVE7k+O6HO+a1kYJ
k4nR/ec1g7NpTvwvrKzSo5FP0UrZj4sWOPJLp/aOLnZUGrRxBpv5tF082tYO+yWd1Qguodzs
YEN+9yjFx7YpQy/0DFixD10pm2b7VKG8cXN/+rkzC5IsXDs5bRHrsjppUcfdq91OZVxwGgue
IGud7Boy8Shmfd13T+OhQG5WslrSwYcPzW4WocvLhgiMh6b0ot7TlsiP1Aa4ikCUMezRLlan
6UDoqAw365puf6o9N11NKzd743TtioQmdWp7pWkQ6AwURIqkUWJY4FHNr3fgvb6fK5RT95BB
ahi1aqgOcRijKqEDiXMLiewcxMmGDDCxaMqGXzzhX6aTvTJeqV4+lFsY4cEXwhA3sik3Z+eX
LeLzyhOlk5w58rk7MzEmHks8siq7Rfow8WrhTVpMn3bynVLNubW01bqtoofdhprCN7TWZZYM
LWO9tbUcZELzf9E5RIzPPHPPfOa+PZeF1llZzRBXx2mErgwOz7KquKpsN8bT0xF/CoGJ9B7l
thWqEfmfmzpDjk+WmErjoreabNZDsGOxuQmM0Toi5+rhaqpul6KWW5W05piLAk5V95N6j2Dt
vCVv3sIuBp7J8WTdVhB4rqXBOTtc8uV4aymIvc1yDQw7VC9qf0l+s5ZxPyTc9O6rerk8qavK
+/ytzRFRLbGdw8LZTswbKoVVwONJPz2jRym25oYrbb5xyV3jlmzJNn4DKVZdgaWvYjuCD5te
vn6ubElTUL8SqBtzMX/LT/Hn5bkdyGkX/bypSDJWlmNk2/yOQEfiaArVZyfBUsxzvdEYanRg
JssqurqiHsKVPxroQ5fl7wuOn9qZvxiISKvssm75I5ogx7NfUsxqqGEAnbJX4LMLX326Jcj4
4LfDbjiu7En6agZ6uo6rL38jKr6s+6XmKZfQdgn7WSOptCvkS7aVLTKkZLbhGvYT/rENQd0w
MScelf47Fz7TG1q/uy5QNHplGVKo7vBJmM9kbtax76NUOOMwsqmoFlrnbaGV06fPrxK1Z6fq
HNs8InSGtTjjiVgbFNp9N5FdSGnZDuc4znpe9Zj/LeI2rElbpIj1y5eBDIHxN1L+SeNLuLfK
hlUvClAd0AcXf4WzHkf+6tQxEaU0SfFUvSPIzNnx8SX88jmEupdvis4tIt01C2fdaieWDLGB
ixI57kmPzRM2hPQx+Tq//ZE7S4T/Lz/I/wv8nxDAEUEshUr2xFI8IJB/AK9PsQwKZW5kc3Ry
ZWFtCmVuZG9iagoyNiAwIG9iago8PAovVHlwZS9Gb250RGVzY3JpcHRvcgovQ2FwSGVpZ2h0
IDg1MAovQXNjZW50IDg1MAovRGVzY2VudCAtMjAwCi9Gb250QkJveFstNTUgLTQyMCAyMzQz
IDkyMF0KL0ZvbnROYW1lL1dLTkdERytNU0JNMTAKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDQw
Ci9Gb250RmlsZSAyNSAwIFIKL0ZsYWdzIDQKPj4KZW5kb2JqCjI1IDAgb2JqCjw8Ci9GaWx0
ZXJbL0ZsYXRlRGVjb2RlXQovTGVuZ3RoMSA4MjcKL0xlbmd0aDIgMTg4NwovTGVuZ3RoMyA1
MzMKL0xlbmd0aCAyNDkzCj4+CnN0cmVhbQp42u1SeziUiRpXLjEt6kgrl3ws1rjOuI0RwriW
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
+VkDBsapprQmZ4TntNfjUCOZqQ6fHEVkBByNUT9oQhzQ0dlRnKBIab3L0GiXtShS8Sl+5i6Y
6Vo4oE5VKdUi5Q8ZifgkjdC5I3vLns4uPGpMjjkf1pSCj1bqqCu81zqI3y+1rHkO5SA4sHZZ
qefeUZzt8H3Ur32L6eUGqykHZEqt4VFegMIF3/QXArCn78USYpgEu2aqaarz12RfM3srVXrn
koPs0xZRSU6Dme3v6KhF7lyFeWCd8w617LYPF0pPJgyTJ0pVVqEyXnAJvl7tdW7P7r9YvL4f
/sH85rC/eK2mVfIKrZ96na60mZRymzvh3beuv9xWfGdZYIUz+/SRVjn59a3xb2Y6ZTk1Dudp
FVdSHFPjYlw9phbsOt6F7t89rH1icXtSxoi8vIbQV7lLhUlR8mCbY0d9g74hx/XG8We4CQ1x
HFd2TVS5NdruYDI+F5h6JlyTZ1iAmPIy3Sl6dSip0GlEgoX0vImp4S7N+PMWQ8NxZlmwSDPI
9ZiAna8/l8z16lTsXSmfofx+yzxFGNeYuuvNLY0gzqod5XzEgSal1kdTctP4UZ+K2zmaSOcj
VxSSorIxao1RJ76xiN6s53kcFRpqd3Fs+jrfxr+rNvGG8IZybcYx/8x+3rGmYPXjF3ynbwRU
l8vbmZ6aa5ffVpGLPyit4l02sPw818/es1LwgbVYAqr1sNfeoz2rh56g7aazRHYdaUkRJDcs
D185/cCsgxOnohvcZedC7S5e8rPQzQ/fcHlzerWWm4e9kZZEcLNPx8tLWEgwtK3jE91kt0vd
xumd13GfMkf9lw/i/wT/EwRECkigM2lUAv0EAvEHIFEbKQplbmRzdHJlYW0KZW5kb2JqCjI5
IDAgb2JqCjw8Ci9UeXBlL0ZvbnREZXNjcmlwdG9yCi9DYXBIZWlnaHQgODUwCi9Bc2NlbnQg
ODUwCi9EZXNjZW50IC0yMDAKL0ZvbnRCQm94Wy0xNSAtOTUxIDEyNTIgNzgyXQovRm9udE5h
bWUvS1JJSkpNK0NNU1k3Ci9JdGFsaWNBbmdsZSAtMTQuMDM1Ci9TdGVtViA5MwovRm9udEZp
bGUgMjggMCBSCi9GbGFncyA2OAo+PgplbmRvYmoKMjggMCBvYmoKPDwKL0ZpbHRlclsvRmxh
dGVEZWNvZGVdCi9MZW5ndGgxIDc4MAovTGVuZ3RoMiA3MzkKL0xlbmd0aDMgNTMzCi9MZW5n
dGggMTMwNwo+PgpzdHJlYW0KeNrtUl1QE1cYVQErywg4gqBWuGhTcSDJbiBEIFpDFAk2iKFK
SYthzV6SlWQXNxtMTBkFUahTW2cygD9QFBVoxapUR1EsjlRBVKqMIiCiI7ZUoIKWtoIVu0Ad
p9iXTt86vftyv++ce+7Z812eX2wcX0bQa2AkTbF8TICFAbkyLkECMAGK8HhyBuIsSVOLcRaG
ASw0FAMysw5gYoBKwkRYmFiEIDwgp1OtDKnTs8BfPm+YJQEyI2RILU4BJc7qoZET0eIGEEdr
SchaBQDIDAagGj5iAipogkwaJAQIgmGAILUsWAN1JIUIhz0pqGQaSEbbhDn1JZQGGRPnC/hz
PucBziVBUwYrIGAyIoyhudsg5+Uf2/obV2PFI80GQwxuHJYfzuk1GDeSBuufBNqYamYhA5Q0
ARlqLDUejnpTQoI0G8eiChY3kFoZpTNAwMeCBWiQeBQgTZGkBRKxJKvVg2TcYIIjfUgRY61w
6Y0YES5TKaKjlQGjgx0FY3GSYt+zpkKAvmKP1NirmguJIS3gA1SAohhH5L6Xu8Qxly2htDRB
UjogEocAnGFwK4JyUiKxGNgwQFIEtABo4RwLBRTNckcAF006SKYZZHiqWEgwEOImLizSlMKN
RT8MI6//T0QEbbHxuefHDxVjABOJRUAyX5T+V+JKilxnhorFQIyi6HxMMtLVmhkGUuzIO+Ky
elknk1y+EFqgFtlT4EmO1wTOCvglqf/czdnxp+saWo7unquuwKbHfJdpVzll0jH5iQ0NtQGB
P+/L2XWl3bdFfK0wI9zZcPGU9O7yOZUlk4/77korDxJpL01q67169t2sCT+N20+x2VrlpKIb
6v7921YdkAWGuxwZ7F5n62sverYhK6l6qVrnfbRWGj9lybW3c5m0OCe0+FnvxbrfFu4h09sc
VqSJx92XKr1cy4obzYddUuY4b5wwuEnqGzlQ7j7kqvpIPnPKscqDrtlReVdKvIYW8hKSslJq
ptfrKyvRA4mJbjUp4sBg+SF6vf3r7YEbK791PmTd1HVzddFnKZtrx+VcHzRunO3R+rH/A5e8
oOhG5vqJ24VTVx60VqzdXu7X59dhv9Us+SKxe/tDQbN32SmXnY8K7myTxh9Op06WCeVdJT0q
195SVGB2bVum0KSeKX6r2FvQI3m870LbpyAffcNzgqS1pNrhxs5M3fpH3fd2eHQPOZWZfGZE
vPn7igVLm0wdLcpNmsSJ+hfF8F5e4IlSdbS95RRzPl/uf8u/uHyW7WbyvIInCeaurA43B1Oc
fdoZk351jPhzWxrB7wwuR7Z2ulQ2u84ICJb1Ry9SL35Uycs+9j34HbVVuO/NWSUrv77h+RR9
aI5Ps+ryZFFte7cLcH5a8VWIZm/nPsEnNearUWef1w7azv3qkWCyl0XcKIjZuvb2eL/ltzue
hjjerZeeBOvbrLzWfjqmdMCtyti/+4K9qONLTapNLqwKn5RN/Ph+YewCH7X6tH8TxbOEHpma
X2e8MK2Pr3Z3V2mCFEtSd9TrCMJyXOsV/6RRsciepmgyx0/sZCRb3iHae4e2dCXnrrG5rUV/
OO04dHly1LET37SGOfpktKp6uqIy+olMptUxy9invFi9fDP90NMz56HTlYOGKo+ehhezCP4t
z1VCzDchfMslTV6SRvDhgOP9bTNbdpfWOUQ3ShWFibleVUOHB3Zm1JzLXdqU13wnyZs5/+Bx
9dx69F8u5H+B/4SA1gBxhqWNOJOCIH8AcW/KoAplbmRzdHJlYW0KZW5kb2JqCjM4IDAgb2Jq
Cjw8Ci9UeXBlL0ZvbnREZXNjcmlwdG9yCi9DYXBIZWlnaHQgODUwCi9Bc2NlbnQgODUwCi9E
ZXNjZW50IC0yMDAKL0ZvbnRCQm94Wy0yNyAtMjUwIDExMjIgNzUwXQovRm9udE5hbWUvWkZZ
TEtEK0NNUjcKL0l0YWxpY0FuZ2xlIDAKL1N0ZW1WIDc5Ci9Gb250RmlsZSAzNyAwIFIKL0Zs
YWdzIDQKPj4KZW5kb2JqCjM3IDAgb2JqCjw8Ci9GaWx0ZXJbL0ZsYXRlRGVjb2RlXQovTGVu
Z3RoMSA3NzgKL0xlbmd0aDIgMTM0OQovTGVuZ3RoMyA1MzMKL0xlbmd0aCAxOTMxCj4+CnN0
cmVhbQp42u1SWVgTWRplQBYD0iISUNEpIpElnQ0MSBTZsSEdOhhQFkGLpBJLk6oYgklEtEFR
HEAFFCVuONOoNGArwQVFJEpHgVGxkVVEDSK4YLOjojgFjDPf2P3S37zNN3Vf6vz/ueeee+5P
tONwyT58NA4KRBEZmU6hMwE/9kp3gE6h4YhEPykEymAU8QdlEBOge3jQAZ8EIeBCA+huTFcP
pgsdhyMCfqhEKYWF62WAo5/TBMsd8BFDUpgHIgAblK2HxJgIDxQBXJQHQzIlBQB8RCJg5cSW
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
NTBdCi9Gb250TmFtZS9aTktXUVUrQ01SOQovSXRhbGljQW5nbGUgMAovU3RlbVYgNzQKL0Zv
bnRGaWxlIDQxIDAgUgovRmxhZ3MgNAo+PgplbmRvYmoKNDEgMCBvYmoKPDwKL0ZpbHRlclsv
RmxhdGVEZWNvZGVdCi9MZW5ndGgxIDEyNjcKL0xlbmd0aDIgNTcxNwovTGVuZ3RoMyA1MzMK
L0xlbmd0aCA2NTI1Cj4+CnN0cmVhbQp42u2UZVxUa7vG6RhaGkEGBGmGLmkECYGBIQRpZmCG
mCGGlhREkJAQUUG6u6S7QUJQBASkpEG6JM7svc+79d3nfDm/8+38zqwv87+e+7mea93rXouT
DQwRUIKibGBqKCRaQFhQWAaooq0vDRQWFAJwcqq4wazRCBTynjUaJgMUlpYWBip52ANFhIDC
EjKi0jLi0gAAJ1AF5eLjhrCHo4HcKjx/VEkClZxhbghbayRQ2xoNhzljTGytnYAQlC0ChvYR
BAKVnJyA+n9scQfqw9xhbp4wqCAAICwMhCJs0UAbmD0CCQD9EUkDaYcCSv4lQz1c/rXkCXNz
x+QCcmNy8gAxKaEopJMPEAqzA4B0UJjTYJgs/+NY/02qf5qreTg56Vg7/2GPadN/WbV2Rjj5
/Oc6ytnFAw1zA2qjoDA35D9LjWF/RdOGQREezv9c1UBbOyFslZD2TjCg0F8Swl0N4Q2DghFo
WzjQztrJHfanDkNC/xkC07Y/I4BMdbSM9Qz5/nygf62BrRFItIGPy9+ufxT/ycK/GNMcN4Q3
8JGQoJCQMKYQc/3rn/k/zlJF2qKgCCRmJMQlgNZubtY+AMxsYEgc6CcMRCChMG8gzBsTGCSI
RKExW4CYnvgD7VBugD+eprCkOBBkh/hD/JPFhIAgF2s3GNIJZof+pQr/p/rX0/xbFsXITh7u
vwQxIMgW5exs/UvB2MN9XOAw5C9JArMLMwUo6N+SBKZK6W+SlASCtP8mKYynwd+EmX+QjZu1
rSMM/W8JpUX/1v89I2bmQL/iSEthyn6RNCbu3yQshLl36G+IOQr2G2JywH9DTGTEb4gxdvoN
Mc7Ov1AY44z8DTHOqN9QBNOQ3xBzkNtviDnI/TfEdA/9G2Juz+M3xMTw/A0xMbx+IearAfL+
DTExfP7E/zq+ysoobz8BUWmggIg4Zp6ERCWAkuJC/v9eaIhEuHrANO4BxYWEhCSlRf5UbT3c
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
zWV7ValXS6n7WD8VRvUl75FWJnDMSB/1AHmzipm59sHRCxUDavxh+KjxcmnenZ3OdFgoXnf8
IntLXat3wlURj29XBm3eyz6DNW+ibtu94yu7fLaQSEXwcsltynyPgbWvOWm7gxBFnXQ/o69j
TMYv7m7QOZJ+zbd2pH5Hui2HP6ADdxMmusPerKOHqlMM2Vup3dt926+zVJHBBLWz4nlYwM5A
q7KjkaylHyA3d/UJMYTF2HKPT93f4tsaTmCFJUOaRf9T5hHYJEdW4Jjxltzd0OjP15WdC+7i
bqHxrOZ9VjX7V1Y+LUblQKlXsku536pwUbNPH4MGmF+a2NtYVGcI/S9/gP83+D9hYOsEs3ZD
o5yt3RwBgP8AUB77LAplbmRzdHJlYW0KZW5kb2JqCjQ1IDAgb2JqCjw8Ci9UeXBlL0ZvbnRE
ZXNjcmlwdG9yCi9DYXBIZWlnaHQgODUwCi9Bc2NlbnQgODUwCi9EZXNjZW50IC0yMDAKL0Zv
bnRCQm94Wy00IC05NDggMTMyOSA3ODZdCi9Gb250TmFtZS9ERVVZU0srQ01TWTYKL0l0YWxp
Y0FuZ2xlIC0xNC4wMzUKL1N0ZW1WIDkzCi9Gb250RmlsZSA0NCAwIFIKL0ZsYWdzIDY4Cj4+
CmVuZG9iago0NCAwIG9iago8PAovRmlsdGVyWy9GbGF0ZURlY29kZV0KL0xlbmd0aDEgNzc5
Ci9MZW5ndGgyIDc1MQovTGVuZ3RoMyA1MzMKL0xlbmd0aCAxMzIwCj4+CnN0cmVhbQp42u1S
aVAURxgFQcUxpiBRy0iMDYgi7DGz7AFIlOWKoovIgmRRwXG2dxmYnYFhdtkNIoLiiRciRI1S
yOEFgsQDKYyUpaIEkSgpS+OBMUIiHlABFI0mA8SygvmTyr9Upv/M973Xr1+/r12dwtRCpZZZ
BoMZmhNiIswHBKjUGjnARCji6hrAQpwjGToQ56APwLy9MaA06gEmA6jCR4L5eEoRxBUEMIkW
ltTHccAtYHo/SwGUBsiSBE4DFc7FQQMvQuAUUDMECTmLCAAlRYHw/i3JIBwmQ9YEtSIEwTCg
JQkOLIN6kkbE/Z7m0DoGKAbbWmPiG8gE2WTeF3DjfU4HvEstQ1MWoIU6RBzK8KdB3ss/tvU3
roaKBxspKhQ39Mv35/QOjBtIyvIngTEkGjnIAhWjhSw9lBoFB72poJY0GoaiczicIgklracg
EGJSEeopGwTI5GDSDLVhJEfEAR1OJcOBPqS1Q63w6Q0YEQcGRWrUcz0GBzsIhuEkzUVYEiFA
37IHauxtzYfEkmawCBWhKMYT+fXmb8mQw4JogtGStB5IZHKAsyxuQVBeSiKTgVQMkLQWmgE0
847FIprh+C2AjyYN6BgW6Z8qJpcCMZ7Mh0UmJ/BjieuHkXfv4+/PmFOFUiD0lnoBzFPiDRRe
8rS/8iJpMskI5wQCGYqiXph8oEsYWRbS3MAz4qN6U+tIPl4IzZBAdn81jrSOFUzy6FnaXfe9
c1TNxaYblbumRVdhH4VeydwePjyTCc1f0tRU7yH4tXDdzsY7k2/ImvdkzBhFXaj2vTvf5VTp
mGOTd5rKPCXEJbtbTy+fnrd62GOrIppbS6jsClqiu4s2LCxWCmaMrnjRkZTaeafg5Rerl575
LFo/obLeN8ohqHnqDtakHo7ue/n0wsVOjZ3S3HNYc88xfkJ+gevGbPpaY0WtU1kxuHRx5kPF
xFug1evY9eoyFLWtPARibT9c4GfyY8fbiG87tzntOdCV4NbwQbiqI7VhpO/5jtLF9u4xWa9m
tzUvu+y/6kkUksJpVizqvO83OqFdWOkQ63tUePK91lWsW+Llu+VPkmLtu36rAK2Mb0TFgwaX
LO8zPx7Pc6BX9Sgmd20psfo0K8CZeuXn2pdrA7/OOfD51fSRm3xqf/+pMKI925TzXZFHnyxv
ubbTcYp5y3PJEnxsjDBkdsGNNS9TvNqqIsIFKQ3T8ktsDzYFm/avqPl2GN2Qe/tBjmA7s3nr
uZluC/KSyrpDDo/KinxRauzND5zV27jWJvNsid/rhjRFy3L3507V86dP2mQ6PE/nSO195Xvy
ZnnNFnmoQBJTqql1qBvFLbq7zst22/6tJUi0KD7lIfL+rnCkPX3N9fgVP+iOmjPZMedum6/s
mTiMqCgPUe5WF8YcGbcw1z0pA6fq489Y6jYcEf/coVzpeHOsqs8u/d6X6tyCDMJ+fc6anvrs
GP+NRGTPqfUZe1tPVRUstfNEhp+1Sm/p/eRQlSouLw55najwvrdtQ51eHuQz+1Kg4XFsm/xE
nP/NXvtN+0ZgczNGRBRPdSae5YuL+s6PfMy2bzt/7RtiWqH0UZpznt6u5uMJGm/ByadjTNaz
jpfcb+yycdl8dSqGqdyeNT+KPyR3Tj/tNx60zOh2CSlePGlKVVjAib1WB6xrUYW0I3vBi9GP
2E6vuiZNSnRY+WbF2OKyXs9YdmWR+ejqpoSZlsBd1r/Yk+dw3cHqHahkHOr/cL27Gv2XH/K/
wH9CgKAgznKMAWcTEOQPRETJ4QplbmRzdHJlYW0KZW5kb2JqCjQ4IDAgb2JqCjw8Ci9UeXBl
L0ZvbnREZXNjcmlwdG9yCi9DYXBIZWlnaHQgODUwCi9Bc2NlbnQgODUwCi9EZXNjZW50IC0y
MDAKL0ZvbnRCQm94Wy0yOSAtMjUwIDEwNzUgNzUwXQovRm9udE5hbWUvS1ZNQUdCK0NNTUk5
Ci9JdGFsaWNBbmdsZSAtMTQuMDQKL1N0ZW1WIDc0Ci9Gb250RmlsZSA0NyAwIFIKL0ZsYWdz
IDY4Cj4+CmVuZG9iago0NyAwIG9iago8PAovRmlsdGVyWy9GbGF0ZURlY29kZV0KL0xlbmd0
aDEgODAzCi9MZW5ndGgyIDE1MDAKL0xlbmd0aDMgNTMzCi9MZW5ndGggMjA5NQo+PgpzdHJl
YW0KeNrtUns4VPsajt10GXclSvi5DBJjBmMMuV8ad7mkVFhmFjM1s0Zz0UzkUnShrTLlskuU
PGUr0ZZLithkSkVyacROqLMjRWUL0Rmcnn1O+/xznvPfec5a//ze73t/7/eu91sYbb8AE0cq
KwJ2YyFcEzwWbw2cvb3dSUByxOHQGIwzG4a4dBbiAnFha4AnkSyBB48BzMwBjmhNMLcmENBo
DHBmRQvY9CgaFxg6b5hnEYEjE2bTKRACvCEuDWZKRCgQAwSwKHSYK8AC4MhgAP/5KxzgD3Ng
dgxMxaLReDyg0ilcEAFH0RG06bwrdySSBYiLZSov+lsrBmZzJL6A4YLTDUDik8pCGAJAhSPR
pj4syTxY4uY/NvZvfH0v7sZjMHwg5rz8fFZ/aUNMOkPwDwKLGc3jwmzgzaLCbOR7ajC86M0b
ptJ5zO+77lyIQac4IlEMGJjgLbA4i8U6neNG58NUPzqXQgOREIMDL9RhhPq9E0l8Cz5MPbd6
O2522ri428WmH0RHuIGCaBjg/mQvYPyfWJIRm84HO3BYHA4vIUreb6dd3w1zRSgsKh2JAmYE
SwCx2ZAAjZNImREIIBYP6AgV5gOYL3FsikVYXMkVIEnmAIhksdHzayWQgCmFxWRC8+WFimRX
pv+ErIBpxAL66zc6ObH4sSZmJGBiRpDMxBEJgEjAHfhXYhBC38uD3V0AAWdFNLdazJLCY7Nh
hLvwc0ny+4Yj6ZLIYZgPU9CJFoKDxSQnMa6ffllOjozXYIceklsfM3MBq0xGss9lcxtuGoxl
BOvwow0+uUR3JOsbW8q+6HthGRxgHVyzZhJHrqv5UmkNL02WCnScFRGviT1EM+3SWDvRuEpH
eU1sgorVCZ2HUPb7v9Hu5D3+xQUZutJr0PVIRS/FymdiQpj0tcf5Q7vsidLUi/tvSO3Y510m
d3X2kflrBdXjbioBq3eXG9zp7lEO8MznX7PlL10tlLv0uTO1dtb1udJZxRGH3GdZGZuQ6ECB
m4eneYktvu5N+hwmb/nkGWliTcnQZIXv3BVrXsJl1U5Zs2yS4am6LnmL/K2lXdIaBbNn06Tq
+KU3bBuHbZahVOTAjYSp4TCMXqTiWvHBi0Nx3Q2arx6cF+vwtT+37V1LOjBAs6rXiCXcHm20
k1qjP7jks975Z27dNx/eOSYdJNuj2je+6gV8osw+KYKmuCqGRuH7TNcb9mtOZb28hMMbTYs+
ismjb7s7V6JviqjVGglIIoYlr3U/T0m60gt66Ipg1UfHXht0TipwTmRar4qkopo063QfLI/P
CkabKqkF7Ml4ldKqcSeszjK/8ElWwHEUzkd4IWyTUIkm1nAi230yLCsYr3xFntXQrVII0hVV
1bnKSCf6VhybUhFFCidflDXa09YYNI8ZSK8ruKJ6ijyedE7sefRk0VVKr2Yq7UNghS9LdZOt
9ODIXWIParmDqqhs1RtfHxP98qj3ufnx17uH4w73Y677Nz0eObR9y+t46YIfr2uep6e1r82s
X66Z/DWhdt8ffVNtrKKNa96OtPQTZXaKO/zaPpzcrbjz2pRdG/p2QqtxDhKnMuS/BCGQ5HKq
W5tyMOMuXkD868svGxTNWvOKOhOH62+foVj0kNSPoHlxNu92F/Sjbqw8+iykYx3VwShLfxCl
NQBiedqXiMJ1+7yeqT9xDr5NbthdktuUOVAiNDF+4VJLLK9/uWEHlJD+x6bie3GpwjQjHfl3
l31HZyyiYp4cDXpbvbM3LbeiuDLu62nr6J858sZwGiahuGFu4J2du92Yo1el7i9+jM08B+WJ
Sd390iutElU9BNhX02k845fkX0UtjdDFonMlStHPp73E+dEhW3Vojm2UZZGu/WCGljQnzNv6
dEaDfs7hd/ftyuQz1R9LzYJAXXhK+H7Oxi+zhv0layvFcjbCa6Znj8iQmPZnNgceHzhuT9ar
tlxxqClMvbak4C5xqjinwlI2L71VQyfm/JOMwpRpKc+3igp3eYX+Y73xTz9r6cqzfao25p9j
d7VY1Kpl/uSTk6s1vDShuKevcbSXu1zmsNDhQoxa9sw06lZxnch4yfQcJ/kIKfxo5NTlrhOV
PduceyjuSqcybqai6FP6nRPRIXx5Ebrv9IRZk8xn2d4yz7w8sdPKAzubiOxLNutjm1EqFzZb
rnCyW7I/sBFct9XCV5QnQ6FC5V2h5rO+FJytl31Qv1Hib+I05k8WhPwWTnqH7pjRWG58EopP
fez8YIAbXp59yI5XNYC9eudIfpXO3LJQO1ZTYphCd335O6f49x5j75+/u1vSVxajDm/b4tG8
V8FPWAQ5Un+wowRSi4mGZ0IsRjpCt4ntux+tbO0o+7hdSqXCtZM1ymlXdXQLUf2xjfdoLDjZ
MqXF5oeG5tw17fe6d+0OGU6/n3LxdAP07NLWB7fIsL56y/uLXiaTe/q1J1ds7zNsVl+i8Nuw
v/opz5rOLDXByyG3ta87b2mohxulzpVgZu/D2oUcainwlu+RMT92t7klx4Sq9RCdqm0yNPvx
uvm1uMOP1xPUvp60icMkc7iFb+we3ZjqN2i3nTM5VCV1cFtLBH9j60GDooxlOTtCa2VVQ7pl
tZpHxHEhM0XmESH9pVgvr+4Qh4pIzWQrVB9BSTo17ssnpt69WKnXx8cGSVC63tB0+t5GUhTm
6YHwTn9q58Mvt0Rl/qtztrWsm+BqDzofe9D1M6KQOY4qrOEoDz7+UAJlNvx+lWgm76w2kOng
E8aqFmyJbQpHUrcsy3zz6iRqBPdfPuj/C/xPCFAYMMTmspgQew8a/XfkW0nlCmVuZHN0cmVh
bQplbmRvYmoKNTEgMCBvYmoKPDwKL1R5cGUvRm9udERlc2NyaXB0b3IKL0NhcEhlaWdodCA4
NTAKL0FzY2VudCA4NTAKL0Rlc2NlbnQgLTIwMAovRm9udEJCb3hbLTMwIC05NTggMTE0NiA3
NzddCi9Gb250TmFtZS9SVFRNUUQrQ01TWTkKL0l0YWxpY0FuZ2xlIC0xNC4wMzUKL1N0ZW1W
IDg3Ci9Gb250RmlsZSA1MCAwIFIKL0ZsYWdzIDY4Cj4+CmVuZG9iago1MCAwIG9iago8PAov
RmlsdGVyWy9GbGF0ZURlY29kZV0KL0xlbmd0aDEgODM3Ci9MZW5ndGgyIDExMDcKL0xlbmd0
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
c2NlbnQgLTIwMAovRm9udEJCb3hbLTI5IC0yNTAgMTI3NCA3NTRdCi9Gb250TmFtZS9DTFdX
Uk4rQ01CWFRJMTAKL0l0YWxpY0FuZ2xlIC0xNC4wNAovU3RlbVYgMTA3Ci9Gb250RmlsZSA1
MyAwIFIKL0ZsYWdzIDY4Cj4+CmVuZG9iago1MyAwIG9iago8PAovRmlsdGVyWy9GbGF0ZURl
Y29kZV0KL0xlbmd0aDEgMTE0MwovTGVuZ3RoMiA1MjM1Ci9MZW5ndGgzIDUzMwovTGVuZ3Ro
IDU5OTUKPj4Kc3RyZWFtCnja7ZNnOJxr1/f1MghCiD4Rvc6MUUb0ThAt0UKMMRhlhjF6j14i
ooQQotcQRIveawpREp3oESVRogTP7L2fe++89/1+eY/323M81/Xl+q1znf/1P9e5Lt4bBsai
ynYYW6QGBo0TBYuBZYGqeipmJtpgEBAsBgLw8qpikXAcCoNWg+OQskAwDAYGKns6AMEyQLC0
LFRKVgIEAPACVTFuvliUgyMOKKAq+EeWNFDZFYlFIeBooB4c54h0xYsg4C5AYwwChcT5igGB
yi4uQKM/tngAjZAeSKwX0k4MAACDgXYoBA5oi3RAoQHif9jSRttjgNJ/he083f615IXEeuB9
AQXwPgWBeJd2GLSLL9AOaQ8Q18fgqyHxXv6fbf1fXP27uIani4s+3PUP+f9u1X9kwF1RLr7/
nYNxdfPEIbFAPYwdEov+91RT5F/2VDAu/1FIGwd3QSGU0Q4uSKAoGCoGgv4VR3looHyQdgYo
HMIRaA938UD+GUei7f7dB757f7oQV9U1NTXSF/77bv9aN4Cj0DgTXzckEPTPhj8Z/A/j+4RF
+QAtQWIgEBifiH//9WX1b/XU0QiMHQrtAIRISgHhWCzcF4AfIzxJAv3BQBTaDukDRPrgTYuL
oTE4/BYgvjWBQHsMFvDHxUKlgOJu+NvB2P0R/zMkhQ+p/E3SEkBx7X9IGiiu9zfh51LcFgtH
OCNxLkh73D9xib/jf03C3wv47fB/CAYUR/xNYBAIKG73G+LFkb8hXtPhN5QEiqN+QxmguMtv
iFd2/QfxzRdH/4Z4ZcxvCMG34DeEAsWxvyG+kMdviG8O7jfEH8jzH4TgC/n8hvhCvr8h/gj4
gYF7OP4Z+8+5UVHB+PiLQmBAUYgk/hIh0lCgtCQ08P9MvItGuXsitdWAkiAQSFr6r6lBeGKx
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
H6Iewv0cgd1IMeAOViIE5vY0yzPtxQBcFVynD50vpu4n6/O2sKKRVl2OJrI2S1r6L7P1vFZb
WG5xf0BKwaxDQK+1Et8cJvgCXN85tKArm74EdcQUb/UJcLK+USnp45+eI0QPLN8bIwiFFXuQ
n3UkPHpJEccksnnPJAtsMkX9dfZekDIbjVu4Sx98cLLUOx0Yph9cq3Wbz2F8cKMBIvcmQpn7
Ay5kQ3MwTvTdbUVBLidC//wfoZ7SoL2Yn1yxSimtGuy8F9c5uYfU5y81J026pFg2Tamqw0si
6qacHrKpsft8eYN611shkedRHy768Emg36fgM0pr/jiFMPPb6MRF5c29lrphm/64gP7cyRp1
9vlvaSmHkZ/M5MhDvnpmcvts2iSf7UTau3z0EqmOkesS+1AcNFklC53zor+q5/243dwyhi9y
RXPUX9e2Ln0DFau1G2tWlFLEyXEwoWXNTGE7v7EQs87xgWp3ivI+S8XUXSUZOarnzlBSUBKD
v5tjxjKqZ8wquMiq3vdWjc0Kebysi6oKNOlH9fD9/sm+15COXZVE0CTZ6/3GRM/2Jq3ZZ+PL
PccScm4CidOrrxe5MAxpR+IzCQWpuHM/NVq7IGKEu1aONgfc9PhIIByQdYvzipWUoKg9zQG8
HKMMQYW3kZ9yzV2T718JQ5iVfshPdpyzdGegom0Rb6cUkBZ39CxhtNvE9WPGtwgd0h88MjC1
bxUyLEz8zrL2jEN8viIo3XLtI0pGwPFlyWfUKrLYml+DSQ1nTxjbKyJRquuhFf3UxPcGN091
B4tV8N0WcYv+UgnHVj5J73RdfadkWTPyYjKSLJ42oiqpu+sWjstG8ZfDrlqiJXuvx6zG2SsX
LUm3mq6/Q6yf/jy34/Ykyw0c12fo0afLi1S2iH9b9SLtlX9Y2I+Mb+a8oP/PB/C/Av8jBBAu
SDgWh3GFY50BgP8ClN7UUgplbmRzdHJlYW0KZW5kb2JqCjYxIDAgb2JqCjw8Ci9UeXBlL0Zv
bnREZXNjcmlwdG9yCi9DYXBIZWlnaHQgODUwCi9Bc2NlbnQgODUwCi9EZXNjZW50IC0yMDAK
L0ZvbnRCQm94WzAgLTI1MCAxMTcxIDc1MF0KL0ZvbnROYW1lL1pGUk5QUytDTU1JNwovSXRh
bGljQW5nbGUgLTE0LjA0Ci9TdGVtViA4MQovRm9udEZpbGUgNjAgMCBSCi9GbGFncyA2OAo+
PgplbmRvYmoKNjAgMCBvYmoKPDwKL0ZpbHRlclsvRmxhdGVEZWNvZGVdCi9MZW5ndGgxIDc2
OQovTGVuZ3RoMiAxMjQ4Ci9MZW5ndGgzIDUzMwovTGVuZ3RoIDE4MjcKPj4Kc3RyZWFtCnja
7ZJpVBTZGYZlc6ADyhBwyChSINgsdlMNNJugsgyyCBIBQbZj0V1AaXcVVi92QxhWZ1BIQ1SU
NSwtoiiKso2SHoJBwFHRAUQW2YbFgEADsggtYRqIZ06Y/MnJv5xU1Y97v++9733qvVdfx8ub
ZE/HQmFnDGWTKGSKDeDo4eFqCUiHIEjQ13fEYYiNYKgTxIZtAIq1tQXgxmEApmYAaGlDNZN+
BII+4IhF8nEkPIINGDgarqksAXsmjCM0CAU8IHYEzJSa0CAG4I3REJjNJwOAPYMBHFtbwgKO
wSwY58J0MoFAoQB0hMYGQuFwBCWYrFG5omEYYLlRpnMiP7W4MM6ScgEG66SGgJSTjqEMPkCH
wwgmnph0P1hK8x+D/RuuzebOHAbDE2Ku2a9l9as2xEQY/H8KMGYkhw3jgAdGh3F0s9QP3mDz
gOkIh7m568qGGAjNHg1nwACJYk4GzTfqCMsZ4cF0L4RNiwDCIAYLXq/DKH0ziTS+dQ6TAOdj
nl7exhtnu9H0ghCU7cOPhAHwF/X6nPLLXJoRjvCAQJAMghSpUPp+GgVv2uwrlIbRETQcMKVa
ABCOQ3wCKLUypVKBaAqAoHSYB8A8KbEJGcXY0iWANJkYIAzDCWvHamUOmPislQi//gcHB4wX
DQIkU6rUkWJJASypYMy/ynxR5AwHdnUCqKCVpZmV6XqVxsFxGGWvXx1pOp/mYYg0UBjmwTRC
nDk/4Za1Qxc4gJSoqLhQtPCQRJVdXEkhWc0FzczNZD+qIk5f9NPlRRLnnCLbk/bus1Du7+23
8PO28avdsQi61NV+rLGB5ZNkfOxXmi3LutyaJa2y5APNMxrtlbXRsRpWabrPoEzx2whRfkuF
Ezp84w2x47mG3jkrz/n5S/Gr3Y6zrcpp5ReKou7LBJ71uKdye+W52ej2L1KdNbzVT1USRa+7
1bzdC3hldjx59UvbZUSlo65ZW+WFNjfHV78P9Dk/0vRkNS9nYKeirqJpw67SRpcdVfv/ohg1
XK3TWumucyfkYOxwb3lQeEDdkILq1HBJM7vW7/7qiM71b0N6V1Y0m+L1634IUIoqs9Dq8pjD
1GUZ+uOZ8ZfP52RsUVN6GqnUUubuWWDOGlfbFvW1uZan9V4+7fBKRaHeoysnbyvN0VMotlWC
BJckKxO9FsXWycZvLtr80KImU3/qs2sGcgapLx84L/rAqmOB2oXPrkzX4aUJdoLE142pnH0J
xUc45Enj3UjeWI8mSDSRzM5lMZ6RsJ/uEImZmRn64v3h5S9zVlsWXW8ojCzCPF3jXLcLSvco
5wtP1Tj3inmcmYkPB46nudolrOI5pbsVzXsmQGGwreuTe8ohWumNQ80SVsx8S4Vh3pXtNVdM
l7T1z3pXtg55HvQpYkRnKMVLYof7hijB1Qc45XqVbZoPJy7czu3TxJgwN2amR/h7PYM/kOMC
G08Ki4g4YXhZKVaLo8q2/2uB5MFUfYzvjmW5B98er+mPahIvNRVZuOcju189RUirS71xTdBY
w6uOrV8kVBDBfQq2g8+VHm5VeLcIvchhKegNZnnGLN88zs87Rn5sF/C0KIra0JrAh86euSRo
8X98K8ytQHlng/ghScPL4fB1gc30kuhEoVF9J9dJp18cvPxbyZT//ER737sj3fljLra62fcv
nyz3PVFObbI7nbwgTOrbRloevpeM/WlEt3NLedmh8ZHYCPn0f1wrmrz5YT5q/EtHjXD34RPn
HxmahfaLfhOcXrynpCZvwAOLzl/Oz5+dXSykh5xGf5eb3Owoq1jSr52WbM3Ndqq4aKxpeCjU
nyQRVAcrcqkz1bJiUUBhhwUXitC9fejy1/7tru91IUdxW/IH1R61z2KDajs7XkwR2sR6e0Wt
OY9ezIsDTGS+u4rYrjpTHc5oiNKzwVxud3iew8EhEFB5S2wzz0hpPiww7vC5LvMio/1oqiQi
M8J58GhbnDapoyJRbr/b0WfnFsIbVRZ4KBdH+0r5gpIS8vt+tkhyV/Wm91xK93V9Oebrye2p
ywy7A75/FAmcGvZoCpnChSD1oKCVhvv+9fu22OU0X1KrePL5T7Yfw416z1Gn5N/NqQef2SZ5
I+la3TEdU3z1/eNi3v4bXXVCBRmBqlnVDSNDNY2BKizv9eeNLpPpUz/+rf5xfvHd6mxRtJHH
n9NKkrRSzrnXZrPq7grNKq8mN8xlhtQ3CwZmro77sOPr5b5fmB3M/E711SgxS+eDxiSVc2Db
257irUicXkh2zbhcQUpP51cxbg5G/fSXox/3DKUXJO691dOVO/0NK/RHWm+2nNWdQXJtxBHG
lwYlAXf0yB//buAwKHze2f5u2rcydcBmYnGse9due2IoqSugW8FO+Vr5oaWu4cBI78pEbXr/
YoL5qFOKbHp61c43Ep/sLPC/fAj/N/ifMKAxYAhnY0wIP00g/Ay14N1bCmVuZHN0cmVhbQpl
bmRvYmoKNjQgMCBvYmoKPDwKL1R5cGUvRm9udERlc2NyaXB0b3IKL0NhcEhlaWdodCA4NTAK
L0FzY2VudCA4NTAKL0Rlc2NlbnQgLTIwMAovRm9udEJCb3hbLTYgLTIzMyA1NDIgNjk4XQov
Rm9udE5hbWUvSlpOTU5GK0NNVFQ5Ci9JdGFsaWNBbmdsZSAwCi9TdGVtViA3NAovRm9udEZp
bGUgNjMgMCBSCi9GbGFncyA0Cj4+CmVuZG9iago2MyAwIG9iago8PAovRmlsdGVyWy9GbGF0
ZURlY29kZV0KL0xlbmd0aDEgMTEwMgovTGVuZ3RoMiAzOTUyCi9MZW5ndGgzIDUzMwovTGVu
Z3RoIDQ2ODUKPj4Kc3RyZWFtCnja7ZZ5ONT9u8ftNESyheKLbNkZsmbNkmTnocgYXwyzMDOW
SfbstBCRJUQKWaLImmUQyr6VLUtZCtl3Z3r6Pb/Hec7551znv3OdmX/mdd/3536/53Pf3+v6
CvKZmEtoOmEcQV0MGi8hIymjDGgbWVgoATKS0hBBQW0sCMMjMGgdGB5UBmSUlGQATS8XQFYa
kFFQhiooy0IhEEFAG+NBwCJcXPGAiLbor6qLgCYKxCLgMDRgBMO7gihSEzgMCZhj4AgQT5AE
AE0kEjD7dQQHmIE4EOsNOklCIDIygBMCjgccQRcEGiL1y5MB2hkDXPwddvLy+CvlDWJxJF+A
CMmnKEBy6YRBIwmAE+gMkbqGIamBJC//Y1v/jat/Ntf1QiKvwVC/2v+6p/+ShqEQSMK/CjAo
Dy88iAWMME4gFv3PUmvwtzcj0Anhhfpn1gAPQyLgmmgXJAhI/w4hcLoIX9DJBIGHuwJ4rBf4
ZxhEO/3TA+na/nQgdcX2mtE1XbHfE/2dNIEh0HgLgse/u/6q/pNl/mbS7WARvsB1aUlpaRlS
Ien71y+7f4hdRsMxTgg0aSfkFQAYFgsjQEjLQSJ5wE8GQKCdQF8A9CUZlpJEY/CkIwDpTvwB
ZwwW8mucUGlAygOGBdFI0Bn/K/U7KvOv6O/x/TsMBaTgGBQK9u+IvBIghQNRCDgGSVqGv6IK
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
7lGwdFc4o1g65ppvL9t+Ddseed+UkP6AbETdbJTrzJFPCtGdv6eInHy9XyW2Slc4OfFeVB1R
rGZrGT9q6q0w6rMqRVHR/H4uO9u4XmsvfmpYLw/aed7+2/7ujmdy5+mZ1O8vfNMsZZjQ5AUm
H9ob2RuID6r9EvhrFSFDFM2eB5bNLaJMK+jSK0VqfVkmdtp34SKaujawuJMbq+n1E+fzypaQ
ZNf8jVvOY5dle66K/fxOxvH4jfGuKEIwnQNF9FjS93ugf/96kmqdo8fB9m14aK8qysvdhbuA
j8OlxCCrnE5TM7TxJD9L3EQKq2d5GAXZHX/aJpqHwFuPmLWI3ZOJ+lw3m8xyr75Cdedt4oD9
5twWE4sJK2hlL1zf1fAH1AExor951Gflop33rKn88ea+uKG8CMO2aSiaMs9nqDi1G1d+X7jx
xKtO+QeJQZQbta/LKIgymZxteRu+mc4xdh2R9o2FCjWpijQJUy6fHYYTE+ysTuS/4Zl/Odvn
61B5due0wpge5AY/m/vET56EvgUlJ7JC1V43tzW4FWXMl6fF/r7gUH3erG9Apzkyyo3QIRJD
eocqUktfcU2z0PDZpNbyNDIqxEQGSqnEGP0hKCqBJZf+X34g/9/g/0QDOBKEYfEYFAzrDoH8
B4bifjQKZW5kc3RyZWFtCmVuZG9iagoxIDAgb2JqCjw8Ci9DcmVhdG9yKCBUZVggb3V0cHV0
IDIwMDYuMDMuMTU6MTIxMikKL1Byb2R1Y2VyKGR2aXBkZm0gMC4xMy4yYywgQ29weXJpZ2h0
IFwyNTEgMTk5OCwgYnkgTWFyayBBLiBXaWNrcykKL0NyZWF0aW9uRGF0ZShEOjIwMDYwMzE1
MTIxMzAyKzAwJzAwJykKPj4KZW5kb2JqCjUgMCBvYmoKPDwKL1R5cGUvUGFnZQovUmVzb3Vy
Y2VzIDYgMCBSCi9Db250ZW50c1szMSAwIFIgNCAwIFIgMzIgMCBSIDMzIDAgUl0KL1BhcmVu
dCAzIDAgUgo+PgplbmRvYmoKMzUgMCBvYmoKPDwKL1R5cGUvUGFnZQovUmVzb3VyY2VzIDM2
IDAgUgovQ29udGVudHNbMzEgMCBSIDQgMCBSIDU2IDAgUiAzMyAwIFJdCi9QYXJlbnQgMyAw
IFIKPj4KZW5kb2JqCjU4IDAgb2JqCjw8Ci9UeXBlL1BhZ2UKL1Jlc291cmNlcyA1OSAwIFIK
L0NvbnRlbnRzWzMxIDAgUiA0IDAgUiA2NiAwIFIgMzMgMCBSXQovUGFyZW50IDMgMCBSCj4+
CmVuZG9iago2OCAwIG9iago8PAovVHlwZS9QYWdlCi9SZXNvdXJjZXMgNjkgMCBSCi9Db250
ZW50c1szMSAwIFIgNCAwIFIgNzAgMCBSIDMzIDAgUl0KL1BhcmVudCAzIDAgUgo+PgplbmRv
YmoKMyAwIG9iago8PAovVHlwZS9QYWdlcwovQ291bnQgNAovS2lkc1s1IDAgUiAzNSAwIFIg
NTggMCBSIDY4IDAgUl0KL01lZGlhQm94WzAgMCA1OTUgODQyXQo+PgplbmRvYmoKMzEgMCBv
YmoKPDwKL0xlbmd0aCAxCj4+CnN0cmVhbQoKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iago8
PAovTGVuZ3RoIDEKPj4Kc3RyZWFtCgplbmRzdHJlYW0KZW5kb2JqCjQgMCBvYmoKPDwKL0xl
bmd0aCAzMwo+PgpzdHJlYW0KMS4wMDAyOCAwIDAgMS4wMDAyOCA3MiA3NjkuODIgY20KZW5k
c3RyZWFtCmVuZG9iago3MiAwIG9iago8PAo+PgplbmRvYmoKNzMgMCBvYmoKbnVsbAplbmRv
YmoKNzQgMCBvYmoKPDwKPj4KZW5kb2JqCjIgMCBvYmoKPDwKL1R5cGUvQ2F0YWxvZwovUGFn
ZXMgMyAwIFIKL091dGxpbmVzIDcyIDAgUgovVGhyZWFkcyA3MyAwIFIKL05hbWVzIDc0IDAg
Ugo+PgplbmRvYmoKeHJlZgowIDc1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDExMTU4NyAw
MDAwMCBuIAowMDAwMTEyNTA3IDAwMDAwIG4gCjAwMDAxMTIxNjEgMDAwMDAgbiAKMDAwMDEx
MjM2MCAwMDAwMCBuIAowMDAwMTExNzUxIDAwMDAwIG4gCjAwMDAwMTA2MTAgMDAwMDAgbiAK
MDAwMDAyODg4NSAwMDAwMCBuIAowMDAwMDI4Njk5IDAwMDAwIG4gCjAwMDAwMDAwMDkgMDAw
MDAgbiAKMDAwMDA0NDA5NiAwMDAwMCBuIAowMDAwMDQzOTEwIDAwMDAwIG4gCjAwMDAwMDA5
MDggMDAwMDAgbiAKMDAwMDA1MTA0NCAwMDAwMCBuIAowMDAwMDUwODU0IDAwMDAwIG4gCjAw
MDAwMDE2MzUgMDAwMDAgbiAKMDAwMDA1ODg4NSAwMDAwMCBuIAowMDAwMDU4NjkwIDAwMDAw
IG4gCjAwMDAwMDI1NTUgMDAwMDAgbiAKMDAwMDA3MDc0MCAwMDAwMCBuIAowMDAwMDcwNTQ2
IDAwMDAwIG4gCjAwMDAwMDM1MTkgMDAwMDAgbiAKMDAwMDA3NTE5OSAwMDAwMCBuIAowMDAw
MDc1MDA0IDAwMDAwIG4gCjAwMDAwMDQ0NDggMDAwMDAgbiAKMDAwMDA3ODgyMyAwMDAwMCBu
IAowMDAwMDc4NjM1IDAwMDAwIG4gCjAwMDAwMDUzODIgMDAwMDAgbiAKMDAwMDA4MTYyNCAw
MDAwMCBuIAowMDAwMDgxNDMwIDAwMDAwIG4gCjAwMDAwMDYyNjEgMDAwMDAgbiAKMDAwMDEx
MjI2MCAwMDAwMCBuIAowMDAwMDA3MjUzIDAwMDAwIG4gCjAwMDAxMTIzMTAgMDAwMDAgbiAK
MDAwMDAxMDUwMSAwMDAwMCBuIAowMDAwMTExODUyIDAwMDAwIG4gCjAwMDAwMjE0ODMgMDAw
MDAgbiAKMDAwMDA4MzIzMCAwMDAwMCBuIAowMDAwMDgzMDQ0IDAwMDAwIG4gCjAwMDAwMTA2
NzEgMDAwMDAgbiAKMDAwMDAxMTYxOSAwMDAwMCBuIAowMDAwMDg1NDYxIDAwMDAwIG4gCjAw
MDAwODUyNzUgMDAwMDAgbiAKMDAwMDAxMjUxMSAwMDAwMCBuIAowMDAwMDkyMjk0IDAwMDAw
IG4gCjAwMDAwOTIxMDEgMDAwMDAgbiAKMDAwMDAxMzQ2NCAwMDAwMCBuIAowMDAwMDkzOTIw
IDAwMDAwIG4gCjAwMDAwOTM3MjcgMDAwMDAgbiAKMDAwMDAxNDM4NyAwMDAwMCBuIAowMDAw
MDk2MzIzIDAwMDAwIG4gCjAwMDAwOTYxMjkgMDAwMDAgbiAKMDAwMDAxNTM3MiAwMDAwMCBu
IAowMDAwMDk4MzYwIDAwMDAwIG4gCjAwMDAwOTgxNjMgMDAwMDAgbiAKMDAwMDAxNjM1NSAw
MDAwMCBuIAowMDAwMDE3MzMwIDAwMDAwIG4gCjAwMDAwMjEyOTEgMDAwMDAgbiAKMDAwMDEx
MTk1NSAwMDAwMCBuIAowMDAwMDI3NTU4IDAwMDAwIG4gCjAwMDAxMDQ2NjEgMDAwMDAgbiAK
MDAwMDEwNDQ3MCAwMDAwMCBuIAowMDAwMDIxNTQ1IDAwMDAwIG4gCjAwMDAxMDY3ODcgMDAw
MDAgbiAKMDAwMDEwNjYwMiAwMDAwMCBuIAowMDAwMDIyNTIzIDAwMDAwIG4gCjAwMDAwMjMy
NTAgMDAwMDAgbiAKMDAwMDAyNzQxMyAwMDAwMCBuIAowMDAwMTEyMDU4IDAwMDAwIG4gCjAw
MDAwMjg2MzcgMDAwMDAgbiAKMDAwMDAyNzYyMCAwMDAwMCBuIAowMDAwMDI4NTk0IDAwMDAw
IG4gCjAwMDAxMTI0NDIgMDAwMDAgbiAKMDAwMDExMjQ2NCAwMDAwMCBuIAowMDAwMTEyNDg1
IDAwMDAwIG4gCnRyYWlsZXIKPDwKL1NpemUgNzUKL1Jvb3QgMiAwIFIKL0luZm8gMSAwIFIK
Pj4Kc3RhcnR4cmVmCjExMjYwMgolJUVPRgo=

--B_3227619819_5455820
Content-type: application/octet-stream; name="20060227BronnimannEtAl.doc"
Content-disposition: attachment;
	filename="20060227BronnimannEtAl.doc"
Content-transfer-encoding: base64

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAFAAAAHwIAAAAA
AAAAEAAAIQIAAAEAAAD+////AAAAABYCAAAXAgAAGAIAABkCAAAgAgAA////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
///////////////////////////////////spcEAcWAJBAAA8BK/AAAAAAAAEAAAAAAABgAA
JeICAA4AYmpianFQcVAAAAAAAAAAAAAAAAAAAAAAAAAJBBYAN/ACABM6AQATOgEABhsBAAAA
AAAAAAAAAAAAAKwAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAD//w8A
AAAAAAAAAAAAAAAAAAAAAKQAAAAAAEIJAAAAAAAAQgkAAEIJAAAAAAAAQgkAAAAAAABiCQAA
agAAAAIKAAAUAAAAFgoAABQAAAAAAAAAAAAAAHIMAADUMAAA8r8AAAAAAADyvwAAAAAAAPK/
AAAAAAAA8r8AAHwEAABuxAAAZAIAAEY9AAAAAAAAsAUBAGgBAADexgAAAAAAAN7GAAAAAAAA
3sYAAAAAAADexgAAAAAAAN7GAAAAAAAAuccAAAAAAAC5xwAAAAAAALnHAAAAAAAAywMBAAIA
AADNAwEAAAAAAM0DAQAAAAAAzQMBAAAAAADNAwEAAAAAAM0DAQAAAAAAzQMBACQAAAAYBwEA
aAIAAIAJAQBkAAAA8QMBAE0BAAAAAAAAAAAAAAAAAAAAAAAAQgkAACAAAAAEzwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC5xwAAAAAAALnHAAAAAAAABM8AAAAAAAAEzwAAAAAAAPEDAQAAAAAA
AAAAAAAAAABCCQAAAAAAAEIJAAAAAAAA3sYAAAAAAAAAAAAAAAAAAN7GAADbAAAAPgUBADYA
AACY/AAAAAAAAJj8AAAAAAAAmPwAAAAAAAAEzwAAdBQAAEIJAAAAAAAA3sYAAAAAAABCCQAA
AAAAAN7GAAAAAAAAywMBAAAAAAAAAAAAAAAAAJj8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABM8AAAAAAADLAwEAAAAAAAAAAAAAAAAA
mPwAAAAAAACY/AAAHgAAAHf/AAAYAAAAQgkAAAAAAABCCQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw/8AAAAAAADexgAA
AAAAANLGAAAMAAAAsAgRudlJxgEAAAAAAAAAAPK/AAAAAAAAeOMAAIAXAACP/wAACAAAAAAA
AAAAAAAADwMBALwAAAB0BQEAPAAAALAFAQAAAAAAl/8AACwAAADkCQEAAAAAAPj6AACQAQAA
5AkBABAAAADD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQJAQAAAAAAAAAAAAAAAADMCQAA
NgAAAMP/AABMAwAAuccAAOIBAACbyQAAWAEAAJj8AAAAAAAA88oAABQBAAAHzAAA/QIAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuccAAAAAAAC5xwAAAAAAALnHAAAAAAAA
8QMBAAAAAADxAwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiPwAABAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALnHAAAAAAAAuccAAAAAAAC5xwAA
AAAAALAFAQAAAAAABM8AAAAAAAAEzwAAAAAAAATPAAAAAAAABM8AAAAAAAAAAAAAAAAAAEY9
AAAAAAAARj0AAOQBAAAqPwAABG0AAC6sAADEEwAARj0AAAAAAABGPQAAAAAAACo/AAAAAAAA
LqwAAAAAAAAqCgAAZAEAAI4LAADgAAAAbgwAAAQAAABCCQAAAAAAAEIJAAAAAAAAQgkAAAAA
AABCCQAAAAAAAEIJAAAAAAAAQgkAAAAAAAD/////AAAAAAIADAEAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAERvYyBObzogTj8/Pz89Pz8tPz8/Pw1BIFByb3Bvc2Fs
IHRvIGFkZCBJbnRlcnZhbCBBcml0aG1ldGljDXRvIHRoZSBDKysgU3RhbmRhcmQgTGlicmFy
eQ1IZXJ26SBCcvZubmltYW5uXyBHdWlsbGF1bWUgTWVscXVpb25khiBTeWx2YWluIFBpb26H
DTIwMD8tPz8tPz8gKHJldmlzaW9uIDEpDUNvbnRlbnRzDUNvbnRlbnRzIDENSSBIaXN0b3J5
IG9mIGNoYW5nZXMgdG8gdGhpcyBkb2N1bWVudCAyDUlJIE1vdGl2YXRpb24gYW5kIFNjb3Bl
IDINSUlJIEltcGFjdCBvbiB0aGUgU3RhbmRhcmQgMw1JViBEZXNpZ24gRGVjaXNpb25zIDMN
ViBQcm9wb3NlZCBUZXh0IGZvciB0aGUgU3RhbmRhcmQgNw0yNi42IEludGVydmFsIG51bWJl
cnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu
IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gOA0yNi42LjEgSGVhZGVyIDxpbnRlcnZhbD4g
c3lub3BzaXMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu
IC4gLiAuIC4gLiA4DTI2LjYuMiBpbnRlcnZhbCBjbGFzcyB0ZW1wbGF0ZSAuIC4gLiAuIC4g
LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDkN
MjYuNi4zIGludGVydmFsIG51bWVyaWMgc3BlY2lhbGl6YXRpb25zIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAxMA0yNi42LjQgaW50ZXJ2
YWwgbWVtYmVyIGZ1bmN0aW9ucyAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMTINMjYuNi41IGludGVydmFsIG1lbWJlciBvcGVy
YXRvcnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIDEzDTI2LjYuNiBpbnRlcnZhbCBub24tbWVtYmVyIG9wZXJhdGlvbnMgLiAu
IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDE0DTI2
LjYuNyBpbnRlcnZhbCBJTyBvcGVyYXRpb25zIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMTQNMjYuNi44IGludGVydmFs
IHZhbHVlIG9wZXJhdGlvbnMgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gMTUNMjYuNi45IGludGVydmFsIGFsZ2VicmFpYyBv
cGVyYXRpb25zIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIDE2DTI2LjYuMTAgaW50ZXJ2YWwgc2V0IG9wZXJhdGlvbnMgLiAuIC4gLiAu
IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAx
Ng0yNi42LjExIGludGVydmFsIHN0YXRpYyB2YWx1ZSBvcGVyYXRpb25zIC4gLiAuIC4gLiAu
IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAxNw1WIFBvc3NpYmxl
IGV4dGVuc2lvbnMgMTcNVi4xIDxjbWF0aD4gZnVuY3Rpb25zIC4gLiAuIC4gLiAuIC4gLiAu
IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu
IC4gLiAxNw1WSSBFeGFtcGxlcyBvZiB1c2FnZSBvZiB0aGUgaW50ZXJ2YWwgY2xhc3MuIDE4
DVZJLjEgVW5pZGltZW5zaW9uYWwgc29sdmVyIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4g
LiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIDE4DVZJLjIg
TXVsdGktZGltZW5zaW9uYWwgc29sdmVyIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAu
IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAxOQ1WSUkgQWNrbm93
bGVkZ2VtZW50cyAyMQ1SZWZlcmVuY2VzIDIxDV9DSVMsIFBvbHl0ZWNobmljIFVuaXZlcnNp
dHksIFNpeCBNZXRyb3RlY2gsIEJyb29rbHluLCBOWSAxMTIwMSwgVVNBLiBoYnJAcG9seS5l
ZHUNhsljb2xlIE5vcm1hbGUgU3Vw6XJpZXVyZSBkZSBMeW9uLCA0NiBhbGzpZSBkkkl0YWxp
ZSwgNjkzNjQgTHlvbiBjZWRleCAwNywgRnJhbmNlLiBndWlsbGF1bWUubWVscXVpb25kQGVu
cy1seW9uLmZyDYdJTlJJQSwgQlAgOTMsIDA2OTAyIFNvcGhpYSBBbnRpcG9saXMgY2VkZXgs
IEZyYW5jZS4gU3lsdmFpbi5QaW9uQHNvcGhpYS5pbnJpYS5mcg0xMQwod2FzIHByZXZpb3Vz
IHBhZ2UgbnVtYmVyKQ0NSSBIaXN0b3J5IG9mIGNoYW5nZXMgdG8gdGhpcyBkb2N1bWVudA1T
aW5jZSBpbml0aWFsIHZlcnNpb24gKE4xODQzPTA1LTAxMDMpIDoNlyBNb2RpZmllZCBpbnRl
cnZhbDxUPihUKSB0byBzYWZlbHkgaGFuZGxlIGV4Y2VwdGlvbmFsIHZhbHVlcy4NlyBBZGRl
ZCBpbnRlcnZhbChjaGFyIGNvbnN0ICopIGNvbnN0cnVjdG9yLg2XIEFkZGVkIGRhdGEgbWVt
YmVyIGZvciBmaXhpbmcgbWVtb3J5IGxheW91dCAoeWV0IG5vdCBmaXhpbmcgbWVtb3J5IGNv
bnRlbnQpLg2XIENoYW5nZWQgaW5mIGFuZCBzdXAgbWVtYmVycyB0byBsb3dlciBhbmQgdXBw
ZXIuDZcgQWRkZWQgdGhlIJNpbmNsdXNpb24gcHJvcGVydHmUIHRvIGlucHV0IGFuZCBvdXRw
dXQgb3BlcmF0b3JzLg2XIERlZmluZWQgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGNvbnN0
cnVjdG9ycyBieSCTZW5jbG9zdXJlc5QuDZcgRGVmaW5lZCBpbmYoaW50ZXJ2YWw8VD4pIGFu
ZCBzdXAoaW50ZXJ2YWw8VD4pIGZvciBlbXB0eSBpbnRlcnZhbHMuDZcgQWxsb3dlZCBzb21l
IGluZmluaXRlIGJvdW5kcyBmb3IgaW50ZXJ2YWw8VD4oVCxUKS4NlyBSZW1vdmVkIGNvcHkg
Y29uc3RydWN0b3JzIGFuZCBjb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3JzIGZyb20gaW50ZXJ2
YWwuDUlJIE1vdGl2YXRpb24gYW5kIFNjb3BlDVdoeSBpcyB0aGlzIGltcG9ydGFudD8gV2hh
dCBraW5kcyBvZiBwcm9ibGVtcyBkb2VzIGl0IGFkZHJlc3MsIGFuZCB3aGF0IGtpbmRzIG9m
IHByb2dyYW1tZXJzIGlzIGl0IGludGVuZGVkIHRvIHN1cHBvcnQ/IElzIGl0IGJhc2VkIG9u
IGV4aXN0aW5nIHByYWN0aWNlPyBJcyB0aGVyZSBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlv
bj8NSW50ZXJ2YWwgYXJpdGhtZXRpYyAoSUEpIGlzIGEgYmFzaWMgdG9vbCBmb3IgY2VydGlm
aWVkIG1hdGhlbWF0aWNhbCBjb21wdXRhdGlvbnMuIEEgbWF0aGVtYXRpY2FsIGludGVydmFs
IFthLCBiXSBpcyB0aGUgc2V0IG9mIG51bWJlcnMgbHlpbmcgYmV0d2VlbiB0aGUgdHdvIGJv
dW5kcyBhIGFuZCBiLiBUaGUgbW9zdCBpbXBvcnRhbnQgdXNlIGlzIGluIGNvbXB1dGluZyBw
cm92ZW4gaW5jbHVzaW9ucyBvZiB0aGUgcmFuZ2Ugb2YgYSBmdW5jdGlvbiBmLiBTdWNoIGFu
IGluY2x1c2lvbiBpcyBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgdmFsdWVzIGYgdGFrZXMg
YXMgaXRzIGFyZ3VtZW50cyB2YXJ5IG92ZXIgZ2l2ZW4gaW5wdXQgaW50ZXJ2YWxzLiBSLiBN
b29yZZJzIEZ1bmRhbWVudGFsIFRoZW9yZW0gKDE5NjUpLCB0aGUgYmFzaXMgb2YgdGhlIHRo
ZW9yeSwgYXNzZXJ0cyB0aGF0IGlmIHRoZSBlbGVtZW50YXJ5IGZ1bmN0aW9ucyAoaW5jbHVk
aW5nIGFyaXRobWV0aWMgb3BlcmF0aW9ucykgYXJlIGdpdmVuIGludGVydmFsIHZlcnNpb25z
IHRoYXQgcG9zc2VzcyB0aGlzIGluY2x1c2lvbiBwcm9wZXJ0eSwgYW5kIGlmIGEgZnVuY3Rp
b24gZiBpcyBidWlsdCBmcm9tIGVsZW1lbnRhcnkgZnVuY3Rpb25zLCB0aGVuIHRoZSBjb3Jy
ZXNwb25kaW5nIGludGVydmFsIHZlcnNpb24gb2YgZiBwb3NzZXNzZXMgdGhlIGluY2x1c2lv
biBwcm9wZXJ0eS4NQmFzaWMgaW50ZXJ2YWwgYXJpdGhtZXRpYyBpcyBwcmVzZW50ZWQgaW4g
bWFueSByZWZlcmVuY2VzIChlLmcuIFs1LCAxMSwgMTVdKS4gV2hhdCBpcyBvZnRlbiBvYnNj
dXJlZCBpbiB0aGUgbGl0ZXJhdHVyZSBpcyB0aGF0IHVuZGVybHlpbmcgZWFjaCBpbXBsZW1l
bnRhdGlvbiBvZiBJQSBtdXN0IGJlIGEgbWF0aGVtYXRpY2FsIG1vZGVsLCB3aGljaCBkZWZp
bmVzIHRoZSAgKGV4YWN0IGFyaXRobWV0aWMpIG51bWJlciBzeXN0ZW0gYW5kIHRoZSBzZXQg
b2YgYWxsIGFsbG93ZWQgaW50ZXJ2YWxzIGluIHRoYXQgbnVtYmVyIHN5c3RlbS4gVGhlcmUg
YXJlIHNldmVyYWwgdmFsAGkAZAAgAG0AbwBkAGUAbABzACAAbwBmACAASQBBAC4AIABUAGgA
aQBzACAAaQBzACAAaQBuACAAYwBvAG4AdAByAGEAcwB0ACAAdABvACAAPABjAG8AbQBwAGwA
ZQB4AD4ALAAgAHcAaABpAGMAaAAgAG8AbgBsAHkAIABoAGEAcwAgAG8AbgBlACAAbQBvAGQA
ZQBsAC4AIABUAGgAZQAgAG0AYQBpAG4AIABkAGkAcwB0AGkAbgBjAHQAaQBvAG4AIABpAHMA
IABiAGUAdAB3AGUAZQBuACAAcgBlAGEAbAAgAG4AdQBtAGIAZQByACAAbQBvAGQAZQBsAHMA
IAB0AGgAYQB0ACAAbwBuAGwAeQAgAGEAbABsAG8AdwAgAGEAcgBpAHQAaABtAGUAdABpAGMA
IABvAG4AIABmAGkAbgBpAHQAZQAgAG4AdQBtAGIAZQByAHMAIAAoAFIALQBtAG8AZABlAGwA
cwApACAAYQBuAGQAIABlAHgAdABlAG4AZABlAGQALQByAGUAYQBsACAAbgB1AG0AYgBlAHIA
IABtAG8AZABlAGwAcwAgAHQAaABhAHQAIAB0AHIAZQBhAHQAIABpAG4AZgBpAG4AaQB0AGkA
ZQBzACAAsQAeIiAAYQBzACAAYQBjAHQAdQBhAGwAIABuAHUAbQBiAGVycyAoUiotbW9kZWxz
KS4gUi1tb2RlbHMgYXJlIGFwcHJvcHJpYXRlIGZvciBtYWNoaW5lcyB3aG9zZSBmbG9hdGlu
ZyBwb2ludCBhcml0aG1ldGljIGRvZXMgbm90IHN1cHBvcnQgaW5maW5pdHkuIFNvbWUgUi1t
b2RlbCBpbXBsZW1lbnRhdGlvbnMgb25seSBzdXBwb3J0IGZpbml0ZSBpbnRlcnZhbHMuIE90
aGVycyBpbmNsdWRlIHNlbWktaW5maW5pdGUgaW50ZXJ2YWxzIGFuZCB0aGUgd2hvbGUgbGlu
ZS4gDVIqLW1vZGVscyBhcmUgYXBwcm9wcmlhdGUgZm9yIG1hY2hpbmVzIHdpdGggSUVFRSA3
NTQgYXJpdGhtZXRpYy4gQSBzdWl0YWJsZSBtYXRoZW1hdGljYWwgYmFzaXMgZm9yIGludGVy
dmFsIG9wZXJhdGlvbnMgaW4gUiotbW9kZWxzIGlzIGNvbnRhaW5tZW50IHNldCAoY3NldCkg
dGhlb3J5LCBhcyB1c2VkIGluIEZJTElCKysgYW5kIGluIHRoZSBTdW4gY29tcGlsZXJzLiBS
Ki1tb2RlbHMgdHlwaWNhbGx5IHN1cHBvcnQgaW50ZXJ2YWxzIHdpdGggYXJiaXRyYXJ5IGV4
dGVuZGVkLXJlYWwgZQBuAGQAcABvAGkAbgB0AHMALAAgAHQAaABhAHQAIABpAHMAIABhAGwA
bAAgAFsAYQAsACAAYgBdACAAdwBpAHQAaAAgABMgHiIgACgAIABhACAAKAAgAGIAIAAoACAA
HiI7ACAAYQBuACAAZQB4AGMAZQBwAHQAaQBvAG4AIABpAHMAIAB0AGgAZQAgAGkAbQBwAGwA
ZQBtAGUAbgB0AGEAdABpAG8AbgAgAG8AZgAgAEoAYQB1AGwAaQBuACAAZQB0ACAAYQBsAC4A
LAAgAHcAaABvAHMAZQAgAG0AbwBkAGUAbAAgAHMAdQBwAHAAbwByAHQAcwAgAGEAbABsACAA
cwB1AGMAaAAgAGkAbgB0AGUAcgB2AGEAbABzACAAZQB4AGMAZQBwAHQAIABmAG8AcgAgAHQA
aABlACAAcwBpAG4AZwBsAGUAdABvAG4AIABpAG4AdABlAHIAdgBhAGwAcwAgAFsAEyAeIiwA
IAATIB4iXQAgAGEAbgBkACAAWwAeIiwAIAAeIl0ALgAgAA0ARgBvAHIAIABlAHgAYQBtAHAA
bABlACwAIAB0AGgAZQAgAGkAbgB0AGUAcgB2AGEAbAAgADMAIAB0AG8AIAAeIiwAIABzAGEA
eQAsACAAZABvAGUAcwAgAG4AbwB0ACAAYwBvAG4AdABhAGkAbgAgAB4iIABpAG4AIABhAG4A
IABSAC0AbQBvAGQAZQBsACAAYQBuAGQAIABtAGEAdABoAGUAbQBhAHQAaQBjAGEAbABsAHkA
IAB3AG8AdQBsAGQAIABiAGUAIABkAGUAbgBvAHQAZQBkACAAWwAzACwAIAAeIikALgAgAEkA
bgAgAGEAbgAgAFIAKgAtAG0AbwBkAGUAbAAsACAAdABoAGkAcwAgAGkAbgB0AGUAcgB2AGEA
bAAgAGQAbwBlAHMAIABjAG8AbgB0AGEAaQBuACAAHiIuACAAVABoAGUAIABkAGkAZgBmAGUA
cgBlAG4AYwBlACAAYQBmAGYAZQBjAHQAcwAgAHQAaABlACAAYgBlAGgAYQB2AGkAbwB1AHIA
IABvAGYAIABkAGkAdgBpAHMAaQBvAG4AIABiAHkAIABpAG4AdABlAHIAdgBhAGwAcwAgAGMA
bwBuAHQAYQBpAG4AaQBuAGcAIAB6AGUAcgBvACwAIABzAGUAZQAgAGIAZQBsAG8AdwANAFIA
YQB0AGgAZQByACAAdABoAGEAbgAgAHIAZQBjAGEAbABsAGkAbgBnACAAdABoAGUAIABtAGEA
dABoAGUAbQBhAHQAaQBjAGEAbAAgAGQAZQBmAGkAbgBpAHQAaQBvAG4AIABvAGYAIABJAEEA
LAAgAHcAZQAgAHJlZmVyIHRoZSByZWFkZXIgdG8gb3VyT3VyIGFjY29tcGFueWluZyBwYXBl
ciBpbiB3aGljaCB3ZSBkZXNjcmliZSB0aGUgZGVzaWduIG9mIHRoZSBCb29zdC5JbnRlcnZh
bCBsaWJyYXJ5Lg1UaGF0IHBhcGVyIFsyXSBjb250YWlucyBhIGRlZmluaXRpb24gb2YgSUEg
aW4gdGhlIG1hdGhlbWF0aWNhbCBjb250ZXh0IG9mIGFuIG9yZGVyZWQgZmllbGQgKG5vdCBu
ZWNlc3NhcmlseSB0aGUgcmVhbHMsIGFsdGhvdWdoIHRoaXMgcHJvcG9zYWwgb25seSB0b3Vj
aGVzIHRoZSBiYXNpYyBmbG9hdGluZyBwb2ludCB0eXBlcyksIGFsb25nIHdpdGggYSBkaXNj
dXNzaW9uIG9mIHRoZSBpbnRlcnZhbCByZXByZXNlbnRhdGlvbnMsIHJvdW5kaW5nIG1vZGVz
LCBiYXNpYyBvcGVyYXRpb25zIG9uIGludGVydmFscywgaW5jbHVkaW5nIGRpdmlzaW9ucywg
dW5ib3VuZGVkIGFuZCBlbXB0eSBpbnRlcnZhbHMsIGFuZCBwb3NzaWJsZSBjb21wYXJpc29u
cyBzY2hlbWVzLg1JbiBleGFjdCBhcml0aG1ldGljLCBhbGwgdGhlc2UgbW9kZWxzIGJlaGF2
ZSBpZGVudGljYWxseSBwcm92aWRlZCBvbmUgdXNlcyBvbmx5IGZpbml0ZSBpbnRlcnZhbHMg
YW5kIGF2b2lkcyBkaXZpc2lvbiBieSBpbnRlcnZhbHMgY29udGFpbmluZyB6ZXJvLCBvciBh
bnkgb3RoZXIgb3BlcmF0aW9uIHRoYXQgd291bGQgcHJvZHVjZSBhbiBpbmZpbml0ZSBpbnRl
cnZhbCwgc3VjaCBhcyB0YW4oIFswLCAoLzJdICkuIFRoZXJlZm9yZSwgaW1wbGVtZW50YXRp
b25zIGJhc2VkIG9uIHRoZXNlIG1vZGVscyBzaG91bGQgbm90IGJlIG5vbi1jb25mb3JtaW5n
IGp1c3QgYmVjYXVzZSB0aGV5IHRyZWF0IGluZmluaXR5IGluIG9uZSB3YXkgcmF0aGVyIHRo
YW4gYW5vdGhlci4gVGhpcyBwcm9wb3NlZCBzdGFuZGFyZCB0YWtlcyBncmVhdCBjYXJlIHRv
IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgbWF0aGVtYXRpY2FsIG1vZGVscyB0aGF0IHVuZGVy
bGllIGFsbCB0aGUgbW9zdCB1c2VkIElBIGltcGxlbWVudGF0aW9ucy4gSXQgZG9lczoNcmVx
dWlyZSBzdXBwb3J0IGZvciB0aGUgZW1wdHkgc2V0LCBhbmQgZm9yIGluZmluaXRlIGludGVy
dmFsczsNZGVmaW5lIHRoZSBJL08gcmVwcmVzZW50YXRpb24uDUl0IGV4cGxpY2l0bHkgZG9l
cyBub3QgDXN1cHBvcnQgS2FoYW4tc3R5bGUgd3JhcGFyb3VuZCBpbnRlcnZhbHM7DXN1cHBv
cnQgS2F1Y2hlci1NYXJrb3Ytc3R5bGUgaW50ZXJ2YWxzIGhhdmluZyBkaXJlY3Rpb24gKJNm
cm9tIGEgdG8gYpQgb3Igk2Zyb20gYiB0byBhlCkuIA1JdCBhaW1zIG5vdCB0byBjb25zdHJh
aW4gb3RoZXIgZGVzaWduIGNob2ljZXMsIGF0IHRoZSBtYXRoZW1hdGljYWwgYW5kIHRoZSBw
cm9ncmFtbWluZyBsZXZlbCwgdGhhdCBhcmUgcG9pbnRlZCBvdXQgYXQgc3VpdGFibGUgcGxh
Y2VzIGluIHRoZSBwcm9wb3NlZCB0ZXh0Lg1Db25jZXJuaW5nIHByZXZpb3VzIHdvcmssIHRo
ZXJlIGV4aXN0IG1hbnkgaW1wbGVtZW50YXRpb25zIG9mIElBIChzZWUgWzQsIDgsIDksIDEy
ljE0XSBmb3Igc2l4IHR5cGljYWwgQysrIGltcGxlbWVudGF0aW9uczsgbW9yZSBjYW4gYmUg
Zm91bmQgb24gdGhlIEludGVydmFsIHdlYiBwYWdlIFs2XSwgaW5jbHVkaW5nIGZvciBvdGhl
ciBsYW5ndWFnZXMpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgYW5jZXN0b3Igb2YgdGhpcyBwcm9w
b3NhbCBpcyB0aGUgQm9vc3QgaW50ZXJ2YWwgbGlicmFyeSBbM10uIFRoZXkgcHJvdmlkZSBz
aW1pbGFyIGJ1dCBtdXR1YWxseSBpbmNvbXBhdGlibGUgaW50ZXJmYWNlcywgaGVuY2UgdGhl
IGRlc2lyZSB0byBkZWZpbmUgYSBzdGFuZGFyZCBpbnRlcmZhY2UgZm9yIHRoaXMgZnVuY3Rp
b25hbGl0eS4NVGhlcmUgYXJlIHNldmVyYWwga2luZHMgb2YgdXNhZ2Ugb2YgaW50ZXJ2YWwg
YXJpdGhtZXRpYyBbNiwgNywgMTBdLiBUaGVyZSBpcyBhIHdlYiBwYWdlIGdhdGhlcmluZyBp
bmZvcm1hdGlvbiBhYm91dCBpbnRlcnZhbCBjb21wdXRhdGlvbnMgWzZdLiBBbW9uZyBvdGhl
ciB0aGluZ3MsIGl0IHByb3ZpZGVzIGEgc3VydmV5IG9uIHRoZSBzdWJqZWN0IGFuZCBpdHMg
YXBwbGljYXRpb24gZG9tYWluczEpLiBXZSBjYW4gbGlzdCBhIGZldyBoZXJlLCB3aGlsZSBu
b3RpbmcgdGhhdCB0aGlzIGlsbHVzdHJhdGl2ZSBsaXN0IGlzIGluIG5vIHdheSBleGhhdXN0
aXZlMik6IA2XIENvbnRyb2xsaW5nIHJvdW5kaW5nIGVycm9ycyBvZiBmbG9hdGluZyBwb2lu
dCBjb21wdXRhdGlvbnMgYXQgcnVuIHRpbWUuDZcgU29sdmluZyBbc3lzdGVtcyBvZl0gW3Bs
YWluLCBsaW5lYXIsIG9yIGRpZmZlcmVudGlhbF0gZXF1YXRpb25zIHVzaW5nIGludGVydmFs
IGFuYWx5c2lzLg2XIEdsb2JhbCBvcHRpbWl6YXRpb24gKGUuZy4sIGZpbmRpbmcgb3B0aW1h
bCBzb2x1dGlvbnMgb2YgbXVsdGktZGltZW5zaW9uYWwgbm90LW5lY2Vzc2FyaWx5LWNvbnZl
eCBwcm9ibGVtcykuDZcgQ2VydGlmaWVkIG1NYXRoZW1hdGljYWwgcHJvb2ZzIChlLmcuLCBI
YWxlc5IgcmVjZW50IGNlbGVicmF0ZWQgcHJvb2Ygb2YgS2VwbGVyknMgY29uamVjdHVyZTMp
KS4NSUEgY2FuIGJlIGltcGxlbWVudGVkIGluIGEgbGlicmFyeSwgYW5kIHVzdWFsbHkgcmVx
dWlyZXMgcm91bmRpbmcgbW9kZSBjaGFuZ2VzIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGF2YWls
YWJsZSBpbiA8Y2ZlbnY+LiBIYXZpbmcgY29tcGlsZXIgc3VwcG9ydCBjYW4gZ3JlYXRseSBz
cGVlZCB1cCB0aGUgaW1wbGVtZW50YXRpb24gKGJ5IGVsaW1pbmF0aW5nIHJlZHVuZGFudCBy
b3VuZGluZyBtb2RlIGNoYW5nZXMgZm9yIGV4YW1wbGUpLg0xKWZ0cDovL2ludGVydmFsLmxv
dWlzaWFuYS5lZHUvcHViL2ludGVydmFsX21hdGgvcGFwZXJzL3BhcGVycy1vZi1LZWFyZm90
dC9FdXJvbWF0aF9idWxsZXRpbl8Nc3VydmV5X2FydGljbGUvc3VydmV5LnBzDTIpVmlzaXQg
aHR0cDovL3d3dy5jcy51dGVwLmVkdS9pbnRlcnZhbC1jb21wL2FwcGwuaHRtbCBmb3IgbW9y
ZSBleGFtcGxlcyB3aXRoIGxpbmtzDTMpaHR0cDovL3d3dy5tYXRoLnBpdHQuZWR1L350aGFs
ZXMva2VwbGVyOTgvDTIod2FzIHByZXZpb3VzIHBhZ2UgbnVtYmVyKQ0NV2h5IHN0YW5kYXJk
aXplIGl0IElBPw2XIFRoZSBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZCBpbiBtYW55IGFyZWFz
Ow2XIFRoZXJlIGFyZSBtYW55IGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucywgYWxsIHdpdGgg
ZGlmZmVyZW50IGRlc2lnbiBjaG9pY2VzOw2XIEEgYmFzaWMgdmVyc2lvbiBpcyBub3QgaGFy
ZCB0byBpbXBsZW1lbnQgYW5kIGNhbiBiZSBkb25lIHdpdGggb25seSBzdGFuZGFyZCBjb21w
b25lbnRzIChubyBuZWVkIHRvIGhhdmUgYXV4aWxpYXJ5IGxpYnJhcmllcyB1bmxlc3MgdGhl
IGludGVydmFsIHZlcnNpb25zIG9mIDxjbWF0aD4gZXh0ZW5zaW9ucyBhcmUgYWxzbyBzdGFu
ZGFyZGl6ZWQpOyBhbmQNlyBTdGFuZGFyZGl6YXRpb24gcHJvdmlkZXMgYW4gb3Bwb3J0dW5p
dHkgdG8gaGF2ZSBiZXR0ZXIgYW5kIG1vcmUgb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucy4N
QSBwcm90b3R5cGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBwcm9wb3NhbCBhbmQgc29tZSBl
eGFtcGxlIHByb2dyYW1zIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vIHd3dy1zb3AuaW5yaWEu
ZnIvZ2VvbWV0cmljYS90ZWFtL1N5bHZhaW4uUGlvbi9jeHgvLg1JSUkgSW1wYWN0IG9uIHRo
ZSBTdGFuZGFyZA1XaGF0IGRvZXMgaXQgZGVwZW5kIG9uLCBhbmQgd2hhdCBkZXBlbmRzIG9u
IGl0PyBJcyBpdCBhIHB1cmUgZXh0ZW5zaW9uLCBvciBkb2VzIGl0IHJlcXVpcmUgY2hhbmdl
cyB0byBzdGFuZGFyZCBjb21wb25lbnRzPyBDYW4gaXQgYmUgaW1wbGVtZW50ZWQgdXNpbmcg
dG9kYXmScyBjb21waWxlcnMsIG9yIGRvZXMgaXQgcmVxdWlyZSBsYW5ndWFnZSBmZWF0dXJl
cyB0aGF0IHdpbGwgb25seSBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiBDKysweD8NSXQgaXMg
YSBwdXJlIGV4dGVuc2lvbiB0byB0aGUgc3RhbmRhcmQgbGlicmFyeS4NSG93ZXZlciwgYW4g
ZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm9wb3NhbCB3aWxsIHJlbHkgb24g
c3BlY2lmaWMgb3B0aW1pemF0aW9ucyBmcm9tIHRoZSBjb21waWxlciAoZS5nLiwgb3B0aW1p
emluZyBhd2F5IHJlZHVuZGFudCBGUFUgcm91bmRpbmcgbW9kZSBjaGFuZ2VzKSwgd2hpY2gg
d2UgZGVzY3JpYmUgaW4gdGhlIG5leHQgc2VjdGlvbi4NSVYgRGVzaWduIERlY2lzaW9ucw1X
aHkgZGlkIHlvdSBjaG9vc2UgdGhlIHNwZWNpZmljIGRlc2lnbiB0aGF0IHlvdSBkaWQ/IFdo
YXQgYWx0ZXJuYXRpdmVzIGRpZCB5b3UgY29uc2lkZXIsIGFuZCB3aGF0IGFyZSB0aGUgdHJh
ZGVvZmZzPyBXaGF0IGFyZSB0aGUgY29uc2VxdWVuY2VzIG9mIHlvdXIgY2hvaWNlLCBmb3Ig
dXNlcnMgYW5kIGltcGxlbWVudGVycz8gV2hhdCBkZWNpc2lvbnMgYXJlIGxlZnQgdXAgdG8g
aW1wbGVtZW50ZXJzPyBJZiB0aGVyZSBhcmUgYW55IHNpbWlsYXIgbGlicmFyaWVzIGluIHVz
ZSwgaG93IGRvIHRoZWlyIGRlc2lnbiBkZWNpc2lvbnMgY29tcGFyZSB0byB5b3Vycz8NRGVz
aWduIG92ZXJ2aWV3BQ1UaGUgYmFzaWMgZGVzaWduIGFpbXMgYXQgaW50cm9kdWNlc2luZyBh
IHNpbmdsZSBjbGFzcyB0ZW1wbGF0ZSBpbnRlcnZhbDxUPiwgd2hlcmUgPFQ+IGlzIGEgcmVh
bCB0eXBlLiAgd2hpY2ggZ3VhcmFudGVlc09wZXJhdGlvbnMgb24gdGhpcyB0eXBlIGFpbSB0
byBndWFyYW50ZWUgdGhlIGluY2x1c2lvbiBwcm9wZXJ0eSwgZXZlbiBpbiBleGNlcHRpb25h
bCBjYXNlcy4gVGhhdCBpcywgaWYgYSBjb21wdXRhdGlvbiBpbiB0aGUgbWF0aGVtYXRpY2Fs
IGRvbWFpbiBndWFyYW50ZWVzIHRvIGVuY2xvc2UgYSBjZXJ0YWluIHNldCwgc28gbXVzdCBp
dHMgaW1wbGVtZW50ZWQgdmVyc2lvbiAodGhlIJNUaG91IHNoYWx0IG5vdCBsaWWUIHByaW5j
aXBsZSkuIElmIHRoaXMgaXMgaW1wb3NzaWJsZSwgYSBOYU4gcmVzdWx0IG9yIGV4Y2VwdGlv
biBtdXN0IGJlIHByb2R1Y2VkLiBMaWtlIHN0ZDo6Y29tcGxleDxUPiwgd2UgZGVjaWRlZCB0
byBzdXBwb3J0IHRoZSB0aHJlZSBidWlsdC1pbiBmbG9hdGluZyBwb2ludCB0eXBlcyBhbmQg
bGVhdmUgdGhlIHJlc3QgdW5zcGVjaWZpZWQuIFdlIGRlY2lkZWQgdG8gc3VwcG9ydCBlbXB0
eSBpbnRlcnZhbHMsIG9uIHRoZSBncm91bmQgdGhhdCBpbnRlcnZhbHMgYXJlIHNldHMsIGFu
ZCBhIHNldCBtb2RlbCB3aXRob3V0IHRoZSBlbXB0eSBzZXQgaXMgYXMgc3RyYW5nZSBhcyBh
IGZsb2F0aW5nIHBvaW50IG1vZGVsIHdpdGhvdXQgemVyby5iZWNhdXNlIHRoZXkgY2FuIGJl
IGludGVncmF0ZWQgZWFzaWx5IGludG8gdGhlIHByb3Bvc2FsLiBUaGUgYmVoYXZpb3Igb24g
b3V0LW9mLXJhbmdlIGFyZ3VtZW50IHZhbHVlcyAoaW4gc3FydCwgZm9yIGluc3RhbmNlKSBp
cyBhIHNpbGVudCBhbmQgbm8tZXhjZXB0aW9uIGJlaGF2aW9yLCB3aGljaCByZXR1cm5zIHRo
ZSBlbXB0eSBpbnRlcnZhbCBhbiBlbmNsb3N1cmUgb2YgdGhlIHZhbHVlcyBhdCBwb2ludHMg
d2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCBpZ25vcmVzIHRoZSBvdGhlciBw
b2ludHMuIEZvciBpbnN0YW5jZSBzcXJ0KFstMSw0XSkgcmV0dXJucyBbMCwyXS4NUmVwcmVz
ZW50YXRpb24gb2YgaW50ZXJ2YWxzDVR3byBuYXR1cmFsIHJlcHJlc2VudGF0aW9ucyBhcmU6
IJNsb3dlci91cHBlciBib3VuZJQsIHdoZXJlIFthLGJdIGlzIHJlcHJlc2VudGVkIGJ5IHR3
byBudW1iZXJzIHtsb3dlciwgdXBwZXJ9ICh1c2luZyBicmFjZXMgdG8gZGVsaW1pdCBhIGxp
c3Qgb2YgdmFsdWVzKSwgaG9sZGluZyBhIGFuZCBiIHJlc3BlY3RpdmVseTsgYW5kIJNtaWRw
b2ludC9yYWRpdXOUIJQsIHdoZXJlIFthLGJdIGlzIHJlcHJlc2VudGVkIHtyYWQsIG1pZH0g
aG9sZGluZyBtIGFuZCByIHN1Y2ggdGhlIGludGVydmFsIGlzIFttlnIsIG0rcl0uIFJvdW5k
b2ZmIG1heSBvY2N1ciB3aGVuIGNvbXB1dGluZyB0aGUgbWlkcG9pbnQgYW5kIHJhZGl1cyAo
b3Igd2lkdGggMnIpIGZyb20gdGhlIGJvdW5kcyB2ZXJzaW9uLCBhbmQgd2hlbiBjb21wdXRp
bmcgdGhlIGJvdW5kcyBmcm9tIHRoZSBtaWRwb2ludC9yYWRpdXMgdmVyc2lvbi4gRWFjaCBo
YXMgYWR2YW50YWdlcyBidXQgdGhpcyBwcm9wb3NhbCBnZW5lcmFsbHkgZGlzY3Vzc2VzIHRo
ZSBib3VuZHMgcmVwcmVzZW50YXRpb24uIEEgdmFyaWFudCBpcyB0byBzdG9yZSwgc2F5LCB7
bWxvd2VyLCB1cHBlcn0gaG9sZGluZyCWYSBhbmQgYiwgd2hpY2ggYWxsb3dzIGFsbCBhcml0
aG1ldGljIG9wZXJhdGlvbnMgdG8gYmUgZG9uZSB1c2luZyB1cHdhcmQgcm91bmRpbmcgb25s
eSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9uIG1hbnkgYXJjaGl0ZWN0dXJlcy4NRGl2aXNp
b24gYnkgYW4gaW50ZXJ2YWwgY29udGFpbmluZyB6ZXJvDVRoaXMgaXMgdGhlIHBvaW50IGFi
b3V0IHdoaWNoIHRoZXJlIGhhcyBiZWVuIG1vc3QgZGlzYWdyZWVtZW50IGluIHRoZSBsaXRl
cmF0dXJlLiBUaGVyZSBhcmUgdGhyZWUgY29tbW9uIG1vZGVscyBvZiBkaXZpc2lvbiBvbiBz
ZXRzOiBYL1kuIChpKSBhcyB0aGUgaW52ZXJzZSBvZiBtdWx0aXBsaWNhdGlvbjoge3ogfCAo
IHggKCBYLCAoIHggKCBZLCB4ID0geSAoIHp9LiAoaWkpIGFzIHRoZSBleHRlbnNpb24gb2Yg
ZGl2aXNpb246IHt6IHwgKCB4ICggWCwgKAAgAHgAIAAoACAAWQAsACAAegAgAD0AIAB4AC8A
eQB9AC4AIAAoAGkAaQBpACkAIAB0AGgAZQAgAGMAcwBlAHQAIABtAG8AZABlAGwALAAgAGEA
cwAgAHQAaABlACAAcwBlAHQAIABvAGYAIABhAGwAbAAgAGwAaQBtAGkAdABzACAAegBuACAA
PQAgAHgAbgAvAHkAbgAgAHcAaABlAHIAZQAgAHQAaABlACAAeABuACAAYwBvAG4AdgBlAHIA
ZwBlACAAdABvACAAcwBvAG0AZQAgAHAAbwBpAG4AdAAgAGkAbgAgAFgAIABhAG4AZAAgAHQA
aABlACAAeQBuACAAYwBvAG4AdgBlAHIAZwBlACAAdABvACAAcwBvAG0AZQAgAHAAbwBpAG4A
dAAgAGkAbgAgAFkALAAgAGEAbgBkACAAeQBuAGAiMAAuACAAQQBzACAAbABvAG4AZwAgAGEA
cwAgAFkAIABkAG8AZQBzACAAbgBvAHQAIABjAG8AbgB0AGEAaQBuACAAegBlAHIAbwAsACAA
dABoAGUAIAByAGUAcwB1AGwAdABzACAAYQByAGUAIABpAGQAZQBuAHQAaQBjAGEAbAAuACAA
QQBsAGwAIAB0AGgAcgBlAGUAIABtAG8AZABlAGwAcwAgAGgAYQB2AGUAIAB0AGgAZQBpAHIA
IABhAHAAcABsAGkAYwBhAHQAaQBvAG4AcwAsACAAYQBuAGQAIAB0AGgAZQAgAHMAdABhAG4A
ZABhAHIAZAAgAHMAdQBwAHAAbwByAHQAcwAgAGEAbABsACAAbwBmACAAdABoAGUAbQAuAA0A
RQAuAGcALgA6AA0ASQBuACAAYQBuACAAUgAtAG0AbwBkAGUAbAAgAHcAaQB0AGgAIABtAG8A
ZABlAGwAKABpACkALAAgADAALwAwACAAaQBzACAAdABoAGUAIABlAG0AcAB0AHkAIABzAGUA
dAAgAGEAbgBkACAAMQAvAFsAMAAsACAAMAAuADUAXQAgAGkAcwAgAFsAMgAsACAAHiIpAC4A
DQBJAG4AIABhAG4AIABSAC0AbQBvAGQAZQBsACAAdAByAGUAYQB0AGkAbgBnACAAZABpAHYA
aQBzAGkAbwBuACAAYQBzACAAaQBuAHYAZQByAHMAZQAgAG8AZgAgAG0AdQBsAHQAaQBwAGwA
aQBjAGEAdABpAG8AbgAsACAAMAAvADAAIABpAHMAIAAoABMgHiIsACAAHiIpACAAIABhAG4A
ZAAgADEALwBbADAALAAgADAALgA1AF0AIABpAHMAIABbADIALAAgAB4iKQAuAA0ASQBuACAA
YQBuACAAUgAqAC0AbQBvAGQAZQBsACAAYgBhAHMAZQBkACAAbwBuACAAYwBzAGUAdABzACwA
IAAwAC8AMAAgAGkAcwAgAFsAEyAeIiwAIAAeIl0ALgAgAFQAaABlACAAZQB4AGEAYwB0ACAA
YwBzAGUAdAAgAHIAZQBzAHUAbAB0ACAAbwBmACAAMQAvAFsAMAAsACAAMAAuADUAXQAgAGkA
cwAgAHQAaABlACAAdQBuAGkAbwBuACAAbwBmACAAWwAyACwAIAAeIl0AIABhAG4AZAAgAHQA
aABlACAAcwBpAG4AZwBsAGUAIABwAG8AaQBuAHQAIAB7ABMgHiJ9ACwAIAB3AGgAaQBjAGgA
IABiAGUAYwBvAG0AZQBzACAAWwATIB4iLAAgAB4iXQAgAGEAZgB0AGUAcgAgAHQAYQBrAGkA
bgBnACAAdABoAGUAIABpAG4AdABlAHIAdgBhAGwAIABoAHUAbABsAC4ADQBUAGgAZQAgAHMA
dABhAG4AZABhAHIAZAAgAHAAZQByAG0AaQB0AHMAIABhAG4AeQAgAG8AZgAgAHQAaABlAHMA
ZQAgAG0AbwBkAGUAbABzAC4ADQBFAG0AcAB0AHkAIABhAG4AZAAgAGkAbgBmAGkAbgBpAHQA
ZQAgAGkAbgB0AGUAcgB2AGEAbABzAA0ATwBuACAASQBFAEUARQAgAG0AYQBjAGgAaW5lcyBh
bmQgdXNpbmcgdGhlIGJvdW5kcyByZXByZXNlbnRhdGlvbiwgdGhlcmUgaXMgbm8gcHJvYmxl
bSB3aXRoIHJlcHJlc2VudGluZyBzZW1pLWluZmluaXRlIGludGVydmFscyBhbmQgdGhlIHdo
b2xlIGxpbmUuIE9uZSBjYW4gcmVwcmVzZW50IHRoZSBlbXB0eSBzZXQgYnkgc2V0dGluZyBs
b3dlciBhbmQgdXBwZXIgdG8gTmFOLiBGb3IgUi1tb2RlbHMgdGhpcyBsZXRzIHRoZSBlbXB0
eSBzZXQgcHJvcGFnYXRlIHRocm91Z2ggdGhlIGZvdXIgYXJpdGhtZXRpYyBvcGVyYXRpb25z
IHdpdGhvdXQgYWRkaXRpb25hbCBydW50aW1lIGNvc3QuIEZvciBjc2V0LWJhc2VkIFIqIG1v
ZGVscyB0aGVyZSBpcyBhIHNtYWxsIGFkZGl0aW9uYWwgY29zdCBjYXVzZWQgYnkgdGhlIG5l
ZWQgdG8gY2hlY2ssIGZvciBpbnN0YW5jZSwgZm9yIHRoZSBjYXNlIFsAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAATIB4iLAAgADMAXQAgACsAIABbAB4iLAAgAB4iXQAsACAA
dwBoAGkAYwBoACAAZwBlAG4AZQByAGEAdABlAHMAIABhACAATgBhAE4AIABpAG4AIAB0AGgA
ZQAgAGwAbwB3AGUAcgAgAGIAbwB1AG4AZAAgAGIAdQB0ACAAdwBoAG8AcwBlACAAYwBvAHIA
cgBlAGMAdAAgAGMAcwBlAHQAIAByAGUAcwB1AGwAdAAgAGkAcwAgAFsAEyAeIiwAIAAeIl0A
LgANAE8AbgAgAG0AYQBjAGgAaQBuAGUAcwAgAHQAaABhAHQAIABkAG8AIABuAG8AdAAgAHMA
dQBwAHAAbwByAHQAIABpAG4AZgBpAG4AaQB0AHkAIABhAG4AZAAgAE4AYQBOACwAIABhAG4A
IABSAC0AbQBvAGQAZQBsACAAaQBzACAAbQBvAHMAdAAgAG4AYQB0AHUAcgBhAGwALgAgAEkA
dAAgAGMAYQBuACAAcwB1AHAAcABvAHIAdAAgAGkAbgBmAGkAbgBpAHQAZQAgAGkAbgB0AGUA
cgB2AGEAbABzACAAYQBuAGQAIAB0AGgAZQAgAGUAbQBwAHQAeQAgAHMAZQB0ACwAIABiAHkA
IAB1AHMAaQBuAGcAIAByAGUAdgBlAHIAcwBlACAAbwByAGQAZQByAGUAZAAgAGIAbwB1AG4A
ZABzACwAIAB0AGgAYQB0ACAAaQBzACAAZABhAHQAYQAgAHcAaQB0AGgAIABsAG8AdwBlAHIA
IAA+ACAAdQBwAHAAZQByADoAIABhACAAcABvAHMAcwBpAGIAbABlACAAcwBjAGgAZQBtAGUA
IABpAHMAIABhAHMAIABmAG8AbABsAG8AdwBzAC4AIABMAGUAdAAgAE0AIABiAGUAIAB0AGgA
ZQAgAGwAYQByAGcAZQBzAHQAIABmAGkAbgBpAHQAZQAgAG0AYQBjAGgAaQBuAGUAIABuAHUA
bQBiAGUAcgAuACAARABhAHQAYQAgAHsATQAsACAAYgB9ACAAcgBlAHAAcgBlAHMAZQBuAHQA
cwAgAFsAEyAeIiwAIABiAF0AIABpAGYAIAAtAE0APABiADwATQAuACAARABhAHQAYQAgAHsA
YQAsAC0ATQB9ACAAcgBlAHAAcgBlAHMAZQBuAHQAcwAgAFsAYQAsACAAHiJdACAAaQBmACAA
LQBNADwAYQA8AE0ALgAgAFQAaABpAHMAIABjAG8AdgBlAHIAcwAgAGEAbABsACAAaQBuAHQA
ZQByAHYAYQBsAHMAIAB3AGgAbwBzAGUAIABlAG4AZABwAG8AaQBuAHQAcwAgAGEAcgBlACAA
bQBhAGMAaABpAG4AZQAgAG4AdQBtAGIAZQByAHMAIABvAHIAIABpAG4AZgBpAG4AaQB0AGUA
LAAgAGUAeABjAGUAcAB0ACAAdABoAGUAIABlAG0AcAB0AHkAIABzAGUAdAAsACAAdABoAGUA
IAB3AGgAbwBsAGUAIABsAGkAbgBlACAAYQBuAGQAIAAoAHMAaABvAHUAbABkACAAaQB0ACAA
YgBlACAAZABlAGUAbQBlAGQAIABuAGUAYwBlAHMAcwBhAHIAeQAgAHQAbwAgAHMAdQBwAHAA
bwByAHQAIAB0AGgAZQBtACkAIABhACAAZgBlAHcAIABpAG4AdABlAHIAdgBhAGwAcwAgAGwA
aQBrAGUAIABbALEATQAsACAAHiJdAC4AIABUAGgAZQBzAGUAIABtAGEAeQAgAGIAZQAgAHIA
ZQBwAHIAZQBzAGUAbgB0AGUAZAAgAGIAeQAgAHsAMQAsACAAMAB9ACwAIAB7ADIALAAgADAA
fQAsACAAJiAgAC4AIABBACAAcwBpAG4AZwBsAGUAIAB0AGUAcwB0ACAAcABlAHIAIABpAG4A
dABlAHIAdgBhAGwAIABzAGUAcABhAHIAYQB0AGUAcwAgAHQAaABlAHMAZQAgABwgdQBuAHUA
cwB1AGEAbAAdICAAYwBhAHMAZQBzACAAZgByAG8AbQAgAHQAaABlACAAHCB1c3VhbJQgY2Fz
ZSBvZiBmaW5pdGUsIG5vbi1lbXB0eSBpbnRlcnZhbHMuIFRodXMsIGFzc3VtaW5nIHRoZSBs
YXR0ZXIgaGFwcGVuIGFsbW9zdCBhbGwgdGhlIHRpbWUsIHRoZXJlIGlzIGxpdHRsZSBsb3Nz
IG9mIGVmZmljaWVuY3kuDU9wZXJhdGlvbnMgb24gZW1wdHkgYW5kIGluZmluaXRlIGludGVy
dmFscw1UaGVzZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYmFzaWMgZGVmaW5pdGlv
biBvZiBpbnRlcnZhbHMgYXMgc2V0cy4gSW4gcGFydGljdWxhciwgZm9yIGludGVydmFscyBY
IGFuZCBZLCBYICggWSBpcyBlbXB0eSBpZiBlaXRoZXIgb2YgWCxZIGlzIGVtcHR5LCBhbmQg
c2ltaWxhcmx5IGZvciBlbGVtZW50YXJ5IGZ1bmN0aW9ucy4gVGhlIGludGVydmFsIGh1bGwg
b2YgWCBhbmQgdGhlIGVtcHR5IHNldCBpcyBYLg1UaGVyZSBhcmUgc3VidGxlIGRpZmZpY3Vs
dGllcyB3aXRoIHNvbWUgZnVuY3Rpb25zIHRoYXQgY29udmVydCBwb2ludCAodGhhdCBpcywg
cmVhbCBvciBleHRlbmRlZC1yZWFsIG9mIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHByZWNpc2lv
bnMpIHZhbHVlcyB0byBpbnRlcnZhbHMgb3IgdmljZSB2ZXJzYS4gSWYgZ2l2ZW4gk25vbnNl
bnNllCBhcmd1bWVudHMsIGEgcG9pbnQtdmFsdWVkIGZ1bmN0aW9uIGNhbiByZXR1cm4gTmFO
LCBvciByYWlzZSBhbiBleGNlcHRpb24uIEFuIGludGVydmFsLXZhbHVlZCBmdW5jdGlvbiBj
YW4gcmV0dXJuIGVtcHR5LCBvciB3aG9sZSwgb3IgcmFpc2UgYW4gZXhjZXB0aW9uLiBSZXR1
cm5pbmcgd2hvbGUgbWVhbnMgk3dlIGtub3cgYWJzb2x1dGVseSBub3RoaW5nIGFib3V0IHRo
aXMgbnVtYmVylDsgd2hpbGUgZW1wdHkgbWVhbnMgaW4gYSBzZW5zZSB0aGF0IHdlIGtub3cg
ZXZlcnl0aGluZyBhYm91dCBhIG51bWJlciwgbmFtZWx5IJN0aGVyZSBpcyBubyBudW1iZXIg
c2F0aXNmeWluZyB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGNhbGN1bGF0aW9ulC4gV2UgYWlt
IHRvIGF2b2lkIGV4Y2VwdGlvbnMgd2hlcmUgcG9zc2libGUsIGJ1dCBzb21ldGltZXMgdGhl
eSBzZWVtIHRoZSBvbmx5IHdheSB0byBwcmV2ZW50IGNvZGUgk2x5aW5nlC4NQ29uc3RydWN0
b3JzLiBJZiBhbnkgYXJndW1lbnQgdG8gaW50ZXJ2YWwoKSBpcyBOYU4gdGhlbiBhbiBleGNl
cHRpb24gc2hvdWxkIGJlIHJhaXNlZCwgZm9yIHRoaXMgcmVhc29uLiBDb25zaWRlciBpbnRl
cnZhbCh4KSB3aGVyZSB4IGhvbGRzIE5hTi4gIA1XaWR0aCBhbmQgbWlkcG9pbnQgb2YgZW1w
dHkvaW5maW5pdGUgaW50ZXJ2YWxzLiBJdCBpcyBjb25zaXN0ZW50IHdpdGggc3RhbmRhcmQg
bWF0aGVtYXRpY2FsIGNvbnZlbnRpb24gZm9yIHRoZSB3aWR0aCBvZiB0aGUgZW1wdHkgc2V0
IHRvIGJlIJYoLiBUaGUgd2lkdGggb2YgYW4gaW50ZXJ2YWwgd2l0aCBlaXRoZXIgZW5kcG9p
bnQgYXQgaW5maW5pdHkgbXVzdCBiZSArKC4gV2hldGhlciBpbiBhbiBSLW1vZGVsIG9yIGFu
IFIqLW1vZGVsIHdlIGtub3cgbm8gdmFsaWQgZGVmaW5pdGlvbiBmb3IgdGhlIG1pZHBvaW50
IG9mIGVtcHR5IG9yIGluZmluaXRlIGludGVydmFscywgc28gdGhpcyBtdXN0IGVpdGhlciBy
YWlzZSBhbiBleGNlcHRpb24gb3IgcmV0dXJuIE5hTi4gV2UgY2hvc2UgTmFOLg1Cb3VuZHMg
b2YgZW1wdHkvaW5maW5pdGUgaW50ZXJ2YWxzLiBXZSBwcm9wb3NlIHRvIGxlYXZlIGl0IHVu
c3BlY2lmaWVkIGFzIHdlbGwuIERlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
ZW1wdHkgaW50ZXJ2YWxzLCBpdCBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24sIHJldHVybiBh
IE5hTiBvciB0aGUgYWN0dWFsIGJvdW5kcyBzdG9yZWQsIG9yIAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIAZQB0AHUAcgBuACAA
KwClACAAYQBuAGQAIAASIqUAIAAoAGEAdAAgAHQAaABlACAAYwBvAHMAdAAgAG8AZgAgAGEA
IAB0AGUAcwB0ACAAdwBpAHQAaABpAG4AIABsAG8AdwBlAHIAKAApACkALgAgAEEAbABsACAA
bwBmACAAdABoAGUAcwBlACAAbwBwAHQAaQBvAG4AcwAgAGgAYQB2AGUAIAB0AGgAZQBpAHIA
IABhAGQAdgBhAG4AdABhAGcAZQBzACwAIABpAG4AIABwAGEAcgB0AGkAYwB1AGwAYQByACAA
cgBlAHQAdQByAG4AaQBuAGcAIABOAGEATgAgAHcAbwB1AGwAZAAgAGEAbABsAG8AdwAgAHQA
bwAgAGIAeQBwAGEAcwBzACAAZAB5AG4AYQBtAGkAYwAgAGUAbQBwAHQAaQBuAGUAcwBzACAA
dABlAHMAdABpAG4AZwAgAGkAbgAgAG0AbwBzAHQAIAByAG8AdQB0AGkAbgBlAHMALgAgAEkA
ZgAgAGkAdAAgAG0AYQB0AHQAZQByAHMAIABmAG8AcgAgAHQAaABlACAAdQBzAGUAcgBzACwA
IAB0AGgAZQB5ACAAcwBoAG8AdQBsAGQAIAB3AHIAYQBwACAAdABoAGUAaQByACAAYwBhAGwA
bABzACAAdABvACAAbG93ZXIoKSBhbmQgdXBwZXIoKSB3aXRoIGEgbm9uLWVtcHRpbmVzcyB0
ZXN0LCBidXQgdGhlIGJhc2ljIGFjY2VzcywgZXNwZWNpYWxseSBmb3IgdGhlIGludGVybmFs
cyBvZiB0aGUgaW50ZXJ2YWwgY2xhc3MsIHNob3VsZCBub3QgYmUgcGVuYWxpemVkIGJ5IGEg
bWFuZGF0b3J5IHRlc3QuIFRoZSBmcmVlIGZ1bmN0aW9ucyBpbmYoaW50ZXJ2YWw8VD4pIGFu
ZCBzdXAoaW50ZXJ2YWw8VD4pIGhvd2V2ZXIgYXJlIGRlZmluZWQgZm9yIGVtcHR5IGludGVy
dmFscyB0b28uIA0NQWx0ZXJuYXRpdmVzIGFuZCB0cmFkZS1vZmZzDU5vdCBzdXBwb3J0aW5n
IGVtcHR5IGludGVydmFscyBpbXBsaWVzIGFsbCBraW5kcyBvZiBkZWNpc2lvbnMgYWJvdXQg
b3V0LW9mLXJhbmdlIGFyZ3VtZW50IHZhbHVlcyAoaW4gdGhlIG1hdGhlbWF0aWNhbCBmdW5j
dGlvbnMsIGJ1dCBhbHNvIGluY2x1ZGluZyB0aGUgY29uc3RydWN0b3JzIGFuZCBpbnRlcnNl
Y3Rpb24gZnVuY3Rpb25zKS4gTW9zdGx5LCBpdCByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIGV4
Y2VwdGlvbi10aHJvd2luZywgd2hpY2ggd2UgaGF2ZSB0cmllZCB0byBhdm9pZCB3aGVuZXZl
ciBwb3NzaWJsZS4gSXQgdHVybnMgb3V0IGVtcHR5IGludGVydmFscyBzb2x2ZSBhbGwgdGhl
c2UgcHJvYmxlbXMgYW5kIHN0aWxsIHJldHVybiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYWxs
b3cgdGhlIG90aGVyIGFwcHJvYWNoZXMgYnkgbWFudWFsIHRlc3RpbmcuDURlY2lzaW9ucyBs
ZWZ0IHRvIGltcGxlbWVudGVycw1UaGUgbW9zdCBjcnVjaWFsIHJlc3BvbnNpYmlsaXR5IG9m
IGFuIGltcGxlbWVudGVyIGlzIHRvIGRlY2lkZSB3aGljaCBtYXRoZW1hdGljYWwgaW50ZXJ2
YWwgbW9kZWwgdG8gdXNlLCB0byBtYWtlIHRoaXMgZXhwbGljaXQsIGFuZCB0byBmb2xsb3cg
aXQgdGhyb3VnaCBjb25zaXN0ZW50bHkuIFRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZW1w
dHkgaW50ZXJ2YWwgaXMgdGhlIG1vc3Qgb2J2aW91cyBvbmUsIGFsdGhvdWdoIHRoZSBJL08g
cmVwcmVzZW50YXRpb24gaXMgZml4ZWQgaW4gdGhpcyBwcm9wb3NhbC4gKFNlZSB0aGUgaXRl
bSBiZWxvdyBmb3IgYSBkaXNjdXNzaW9uIG9mIHBvc3NpYmxlIGNob2ljZXMuKSBUaGUgd2lk
dGggYW5kIG1pZHBvaW50IG9mIGFuIA0zKHdhcyBwcmV2aW91cyBwYWdlIG51bWJlcikNDWVt
cHR5IGludGVydmFsIGFyZSBhbHNvIGltcGxlbWVudGF0aW9uLWRlZmluZWQgKHdlIHJlY29t
bWVuZCBhIE5hTiBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCkuIFRoZSB2YWx1ZSBvZiB3
aG9sZSgpIHJlcXVpcmVzIHRoYXQgVCBoYXMgYW4gaW5maW5pdHkgKGluIHN0ZDo6bnVtZXJp
Y19saW1pdHM8VD4pLg1Db21wYXJpc29uIHdpdGggZXhpc3RpbmcgbGlicmFyaWVzDVJhdGhl
ciB0aGFuIGp1c3QgcHV0dGluZyB0b2dldGhlciB0aGUgY29tbW9uIHN1YnNldCBvZiBmZWF0
dXJlcyBwcm92aWRlZCBieSBleGlzdGluZyBDKysgaW50ZXJ2YWwgYXJpdGhtZXRpYyBsaWJy
YXJpZXMsIHdlIHRyaWVkIHRvIHByb3Bvc2UgYSBjb25zaXN0ZW50IHlldCBjb21wbGV0ZSBz
dXBlcnNldCBvZiBmZWF0dXJlcy4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgQm9vc3QuSW50ZXJ2
YWwgbGlicmFyeSBwcm92aWRlcyB0aGVzZSBmZWF0dXJlcyAoc3VjaCBhcyB3aGV0aGVyIHRv
IHN1cHBvcnQgZW1wdHkgaW50ZXJ2YWxzIG9yIG5vdCwgaG93IHRvIGRlYWwgd2l0aCByb3Vu
ZGluZywgdGhlIG1lYW5pbmcgb2YgY29tcGFyaXNvbnMsIHVzZXItZGVmaW5lZCB0eXBlcywg
ZXRjLikgdmlhIGEgcG9saWN5LWJhc2VkIGRlc2lnbi4gVGhpcyBwcm9wb3NhbCBpcyBhaW1l
ZCBhdCByZWR1Y2luZyB0aGUgYWNjb21wYW55aW5nIGNvbXBsZXhpdHkgKGZvciB0aGUgaW1w
bGVtZW50ZXIsIGJ1dCBhbHNvIHRoZSB1c2VyKSwgYnkgbWFraW5nIHJlYXNvbmFibGUgYW5k
IGNvbnNlcnZhdGl2ZSBjaG9pY2VzLg1JbiBhZGRpdGlvbiB0byB0aGUgQm9vc3QuSW50ZXJ2
YWwgbGlicmFyeSB0aGF0IGFjdGVkIGFzIGEgc2FuZGJveCBmb3IgdGhpcyBwcm9wb3NhbCwg
d2UgY29uc2lkZXJlZCB0aGUgQysrIGxpYnJhcmllcyBQUk9GSUwsIGZpbGliKyssIEdhb2ws
IGFuZCBTdW4gaW50ZXJ2YWwgbGlicmFyeS4gRXhjZXB0IGZvciBCb29zdCBhbmQgZmlsaWIr
Kywgbm9uZSBwcm92aWRlcyBzdXBwb3J0IGZvciB1c2VyLWRlZmluZWQgdHlwZXM7IG5laXRo
ZXIgZG9lcyB0aGlzIHByb3Bvc2FsLiBQUk9GSUwgYW5kIEdhb2wgb25seSBwcm92aWRlIHN1
cHBvcnQgZm9yIGRvdWJsZS1wcmVjaXNpb24gaW50ZXJ2YWxzOyB3ZSBwcm92aWRlIGFsbCB0
aHJlZSBidWlsdC1pbiBmbG9hdGluZyBwb2ludCB0eXBlcy4NVGhlcmUgYXJlIHR3byB1c3Vh
bCB3YXlzIG9mIGhhbmRsaW5nIGhhcmR3YXJlIHJvdW5kaW5nOiBlaXRoZXIgeW91IGhhbmRs
ZSBpdCB0cmFuc3BhcmVudGx5IGluIGVhY2ggaW50ZXJ2YWwgb3BlcmF0aW9uLCBvciB5b3Ug
c2V0IGl0IGdsb2JhbGx5IGFuZCByZXF1aXJlIHRoZSB1c2VyIHRvIGJlIHZlcnkgY2FyZWZ1
bCB3aXRoIGhpcyBvd24gZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb25zLg1JbiBCb29zdCBh
bmQgZmlsaWIrKywgZWl0aGVyIG9mIHRoZXNlIHR3byBiZWhhdmlvcnMgY2FuIGJlIHNlbGVj
dGVkIHRocm91Z2ggdGVtcGxhdGUgcGFyYW1ldGVycy4NSW4gUFJPRklMLCBvbmUgb2YgdGhl
bSBpcyBzZWxlY3RlZCB0aHJvdWdoIGEgbWFjcm8gZGVmaW5pdGlvbi4gSW4gR2FvbCwgb25s
eSBnbG9iYWwgcm91bmRpbmcgaXMgYXZhaWxhYmxlLg1GaW5hbGx5LCBpbiBTdW4gYW5kIGlu
IHRoaXMgcHJvcG9zYWwsIHJvdW5kaW5nIG1vZGUgc3dpdGNoZXMgYXJlIGhhbmRsZWQgdHJh
bnNwYXJlbnRseSwgdGhleSBuZXZlciBsZWFrIG91dHNpZGUgb2YgaW50ZXJ2YWwgb3BlcmF0
aW9ucy4NRXhjZXB0IGZvciBQUk9GSUwsIGFsbCB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgY29y
cmVjdGx5IHN1cHBvcnQgaW5maW5pdGUgYm91bmRzLiBUaGV5IGFsc28gaGFuZGxlIGVtcHR5
IGlucHV0IGludGVydmFscyB0aGUgc2FtZSB3YXkgdGhpcyBwcm9wb3NhbCBkb2VzOiB0aGUg
cmVzdWx0IG9mIGFuIG9wZXJhdGlvbiBpbnZvbHZpbmcgYW4gZW1wdHkgaW50ZXJ2YWwgaXMg
YW4gZW1wdHkgaW50ZXJ2YWwuIFdpdGggcmVzcGVjdCB0byBkaXZpc2lvbiBieSBhbiBpbnRl
cnZhbCBjb250YWluaW5nIDAsIHRoZSBsaWJyYXJpZXMgQm9vc3QgYW5kIEdhb2wgYW5kIHRo
aXMgcHJvcG9zYWwgcHJvdmlkZSB0aGUgdGlnaHRlciBpbnRlcnZhbHMgKHplcm8gb3Igc2Vt
aS1pbmZpbml0ZSBpbnRlcnZhbHMgd2hlbmV2ZXIgcG9zc2libGUpLg1UaGVyZSBpcyBubyBj
b21wYXJpc29uIG9yZGVyIG9uIGludGVydmFscyB0aGF0IG1hdGNoZXMgdGhlIG5hdHVyYWwg
dG90YWwgb3JkZXIgZGVmaW5lZCBvbiB0aGUgYmFzZSB0eXBlLg1ZZXQgYSBsb3Qgb2YgZXF1
YWxseSBtZWFuaW5nZnVsIG9yZGVycyBjYW4gYmUgZGVmaW5lZCBvbiBpbnRlcnZhbHMuIEJv
b3N0IHByb3ZpZGVzIHRoZXNlIHZhcmlvdXMgb3BlcmF0b3JzIHRocm91Z2ggbmFtZXNwYWNl
IHNlbGVjdGlvbiwgdGhlIG90aGVyIGxpYnJhcmllcyBwcm92aWRlIHRoZW0gdGhyb3VnaCBj
YWxscyB0byBleHBsaWNpdGx5LW5hbWVkIGZ1bmN0aW9ucy4NSG93ZXZlciwgYnkgaW1wbGVt
ZW50aW5nIHRoZXNlIG9wZXJhdG9ycyBzbyB0aGF0IHRoZXkgcmV0dXJuIG1vcmUgdGhhbiBq
dXN0IGEgYm9vbGVhbiwgbm8gbmFtZWQgZnVuY3Rpb25zIGFyZSBuZWVkZWQgaW4gdGhpcyBw
cm9wb3NhbCB0byBleHByZXNzIJNjZXJ0YWlulCBhbmQgk3Bvc3NpYmxllCBpbnRlcnZhbCBj
b21wYXJpc29ucy4NVGhlIEZvcnRyYW4gY29tbXVuaXR5IGlzIGFsc28gdmVyeSBhY3RpdmUg
aW4gdGhlIGRvbWFpbiBvZiBpbnRlcnZhbCBhcml0aG1ldGljIGFuZCB0aGlzIHByb3Bvc2Fs
IGlzIG9uIHBhciB3aXRoIGEgcHJvcG9zYWw0KSB0aGF0IHdhcyB3cml0dGVuIGZvciB0aGlz
IGxhbmd1YWdlLiBJbiB0aGUgY2FzZSBvZiBDKysgdGhvdWdoLCBpbnRlcnZhbCBhcml0aG1l
dGljIGRvZXMgbm90IHJlcXVpcmUgYW55IGxhbmd1YWdlIGNoYW5nZXMgYW5kIGNhbiAoc2hv
dWxkKSBiZSBpbXBsZW1lbnRlZCBpbiBhIGxpYnJhcnkuDVdlIG5vdyByYWlzZSBhIGZldyBt
b3JlIHNwZWNpYWxpemVkIHBvaW50cyBhYm91dCB0aGUgcHJlc2VudCBwcm9wb3NhbCwgYW5k
IHRoZWlyIHJhdGlvbmFsZXM6DZcgV2h5IHN1cHBvcnQgc2V2ZXJhbCBudW1iZXIgdHlwZXMg
YXMgdGVtcGxhdGUgcGFyYW1ldGVyPw1JdCBpcyBub3QgbXVjaCBoYXJkZXIgdG8gc3VwcG9y
dCBhbGwgdGhyZWUgYnVpbHQtaW4gZmxvYXRpbmcgcG9pbnQgdHlwZXMgZmxvYXR8ZG91Ymxl
fGxvbmcgZG91YmxlIHRoYW4gdG8gc3VwcG9ydCBvbmx5IG9uZSBvZiB0aGVtLg2XIFVzZXIg
ZGVmaW5lZCB0eXBlcyBhcyB0ZW1wbGF0ZSBwYXJhbWV0ZXI/DUlmIHNvbWUgbXVsdGlwcmVj
aXNpb24gaW50ZWdlciBvciByYXRpb25hbCBudW1iZXIgdHlwZSBnZXRzIHN0YW5kYXJkaXpl
ZCwgdGhlbiBpdCB3aWxsIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBwbHVnIHRoZW0gaW4gaW50
ZXJ2YWwsIGFuZCB1c2Ugc29tZSBvZiB0aGUgZnVuY3Rpb25zLiBJbiB0aGUgbWVhbiB0aW1l
LCB0aGlzIHByb3Bvc2FsIGRvZXMgbm90IGFkZHJlc3MgdGhlIHN1cHBvcnQgb2YgVURUcyBh
cyB0ZW1wbGF0ZSBwYXJhbWV0ZXIsIGFzIGl0IHdvdWxkIGludm9sdmUgZmluZGluZyBhIHdh
eSB0byBzcGVjaWZ5IGEgcm91bmRpbmcgbW9kZSBvciBzb21ldGhpbmcgZXF1aXZhbGVudCwg
d2hpY2ggZ2V0cyBjb21wbGljYXRlZC4gVGhlIEJvb3N0LkludGVydmFsIGxpYnJhcnkgc3Vw
cG9ydHMgdGhpcy4NlyBJbnRlZ3JhbCB0eXBlcyBhcyB0ZW1wbGF0ZSBwYXJhbWV0ZXI/DVdl
IGJlbGlldmUgdGhhdCB0aGVyZSBhcmUgbm90IGVub3VnaCB1c2UtY2FzZXMgZm9yIHRoaXMg
dG8gYmUgc3RhbmRhcmRpemVkLiBPbmUgbm90YWJsZSBleGNlcHRpb24gaXMgZm9yIHRoZSBi
b29sZWFuIGNhc2UsIHdpdGggYm9vbF9sYXR0aWNlIHNlcnZpbmcgYXMgdGhlIG5hdHVyYWwg
cmV0dXJuIHR5cGUgZm9yIGludGVydmFsIGNvbXBhcmlzb25zLg00KWh0dHA6Ly9pbnRlcnZh
bC5sb3Vpc2lhbmEuZWR1L0Y5MC9mOTYtcHJvLmFzYw00KHdhcyBwcmV2aW91cyBwYWdlIG51
bWJlcikNDZcgU3VwcG9ydCBmb3IgZGVjaW1hbCBmbG9hdGluZyB0eXBlcz8NVGhlcmUgaXMg
YSBwcm9wb3NhbCBmb3IgYWRkaW5nIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgdHlwZXMgdG8g
dGhlIHN0YW5kYXJkIGxpYnJhcnkgKE4xNzc2LCBEZWNpbWFsIHR5cGVzIGZvciBDKyssIGJ5
IFJvYmVydCBLbGFyZXIpLg1BcyB0aGV5IGFyZSByb3VuZGVkIG51bWVyaWMgdHlwZXMsIGl0
IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gc3VwcG9ydCB0aGVtLCBidXQgaXQgbWF5IGJlIHByZWZl
cmFibGUgdG8gd2FpdCBmb3IgYSB3aWRlIGFjY2VwdGFuY2Ugb2YgdGhlIGRlY2ltYWwgdHlw
ZXMgYmVmb3JlIGVudmlzaW9uaW5nIGRlY2ltYWwgaW50ZXJ2YWxzLg2XIFJlbGF0aW9uIHRv
IGV4aXN0aW5nIHN0YW5kYXJkcyA6IElFRUUtNzU0IGFuZCBMSUEtMTIzPw1SdW4gdGltZSBj
aG9pY2VzIG9mIHJvdW5kaW5nIG1vZGVzIGFyZSBub3QgcGFydCBvZiB0aGUgTElBIHN0YW5k
YXJkcywgYnV0IGFyZSBwYXJ0IG9mIHRoZSBJRUVFIDc1NCBzdGFuZGFyZC4gVGhlIHR5cGlj
YWwgaW1wbGVtZW50YXRpb24gb2YgaW50ZXJ2YWwgaXMgcHJvYmFibHkgZ29pbmcgdG8gcmVs
eSBvbiB0aGVzZSwgYnV0IHRoZSBMSUEgc3RhbmRhcmQgc2hvdWxkIGJlIGVub3VnaCB0byBp
bXBsZW1lbnQgaW50ZXJ2YWwgZm9yIGZsb2F0aW5nIHBvaW50IHR5cGVzLg2XIFByZWNpc2lv
biBvZiBpbnRlcnZhbHMNV2UgZG8gbm90IHRoaW5rIGl0IHNob3VsZCBiZSByZXF1aXJlZCB0
aGF0IHRoZSBzbWFsbGVzdCBpbnRlcnZhbHMgcHJlc2VydmluZyB0aGUgaW5jbHVzaW9uIHBy
b3BlcnR5IGJlIHJldHVybmVkIGJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucywgc2luY2UgdGhp
cyBjYW4gYmUgaGFyZCAob3Igc2xvdykgdG8gaW1wbGVtZW50IGluIExJQSB3aXRob3V0IElF
RUUgNzU0IHN1cHBvcnQuIEZvciB0aGVzZSByZWFzb25zLCB3ZSBwcm9wb3NlIHRoYXQgdGhl
IHN0YW5kYXJkIHNob3VsZCBub3QgcmVxdWlyZSBpbXBsZW1lbnRhdGlvbnMgdG8gcmV0dXJu
IHRoZSBzaGFycGVzdCBpbnRlcnZhbHMgcG9zc2libGUsIGJ1dCBvbmx5IHByZXNlcnZlIHRo
ZSBjb250YWlubWVudCBwcm9wZXJ0eSBmb3IgYWxsIGZ1bmN0aW9ucy4NVGhpcyBpc3N1ZSB0
aGVuIGJlY29tZXMgYSBRT0kgaXNzdWUsIGFuZCB0aGVyZSB3aWxsIGJlIHNvbWUgbGVld2F5
IGZvciBpbXBsZW1lbnRlcnMgdG8gY2hvb3NlIGJldHdlZW4gc3BlZWQgYW5kIHByZWNpc2lv
bi4NlyBsb3dlcigpIDw9IHVwcGVyKCkgaW52YXJpYW50DVR5cGljYWwgdXNlcyBvZiBpbnRl
cnZhbHMgcmVxdWlyZSB0aGlzIHByb3BlcnR5LiBUaGVyZSBhcmUgc29tZSBhcHBsaWNhdGlv
bnMgb2YgaW50ZXJ2YWxzIHdoaWNoIHVzZSByZXZlcnNlZCBvcmRlciBvZiB0aGUgYm91bmRz
IGxvd2VyKCkgPiB1cHBlcigpIChtb2RhbCBpbnRlcnZhbHMsIG9yIG5leHQgaXRlbXMpLCBi
dXQgdGhleSBhcmUgcHJvYmFibHkgbm90IHdvcnRoIHRha2luZyBpbnRvIGFjY291bnQgaW4g
dGhlIHN0YW5kYXJkLg2XIFdoeSBubyBtdXRhYmxlIHZlcnNpb25zIG9mIHRoZSBhY2Nlc3Mg
ZnVuY3Rpb25zIGxvd2VyKCkgYW5kIHVwcGVyKCk/DUJlY2F1c2UgbW9kaWZ5aW5nIHRoZSBi
b3VuZHMgbmVlZHMgdG8gYXNzZXJ0IHRoZSBpbnZhcmlhbnQgbG93ZXIoKSA8PSB1cHBlcigp
LiBUbyBjb21wZW5zYXRlLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhZGQgZnVuY3Rpb25z
IGxpa2Ugdm9pZCBhc3NpZ25fbG93ZXIoY29uc3QgVCYpLCBidXQgaXQgaXMgbm90IGNsZWFy
IHRoYXQgdGhpcyBpcyByZWFsbHkgdXNlZnVsLg2XIERpdmlzaW9uIGJ5IGFuIGludGVydmFs
IGNvbnRhaW5pbmcgemVybz8NVGhlcmUgdXN1YWxseSBhcmUgdHdvIHdheXMgb2YgZXhwcmVz
c2luZyB0aGUgZGl2aXNpb24gb24gc2V0czogWC9ZLiBFaXRoZXIgYXMgdGhlIHJlY2lwcm9j
YWwgb2YgdGhlIG11bHRpcGxpY2F0aW9uOiB7eiB8IDl4IDIgWDl5IDIgWSB4ID0geSC3IHp9
LiBPciBhcyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBkaXZpc2lvbjoge3ogfCA5eCAyIFg5eSAy
IFkgeiA9IHgveX0uIEFzIGxvbmcgYXMgWSBkb2VzIG5vdCBjb250YWluIHplcm8sIGJvdGgg
cmVzdWx0cyBhcmUgaWRlbnRpY2FsLiBCb3RoIGV4cHJlc3Npb25zIGhhdmUgdGhlaXIgYXBw
bGljYXRpb25zLiBUaGUgc2Vjb25kIGV4cHJlc3Npb24gZ2l2ZXMgdGlnaHRlciBpbnRlcnZh
bHMgYW5kIGl0IGNhbm5vdCBiZSBlbXVsYXRlZCB3aXRoIHRoZSBmaXJzdCBvbmUsIHdoaWxl
IHRoZSBjb252ZXJzZSBob2xkcyB0cnVlLiBTbyB3ZSBjaG9zZSB0byBpbXBsZW1lbnQgdGhl
IHNlY29uZCBleHByZXNzaW9uLg2XIFdyYXAtYXJvdW5kIGludGVydmFscz8NQSBwb3NzaWJs
ZSBkZXNpZ24gY2hvaWNlIGlzIHRvIGFsbG93IGludGVydmFscyB3aGVyZSBsb3dlcigpID4g
dXBwZXIoKSB0byByZXByZXNlbnQgdGhlIHJlc3VsdCBvZiB0aGUgZGl2aXNpb24gYnkgYW4g
aW50ZXJ2YWwgY29udGFpbmluZyB6ZXJvLAAgAGEAcwAgAHQAaABlACAAdQBuAGkAbwBuACAA
bwBmACAAdAB3AG8AIABpAG4AdABlAHIAdgBhAGwAcwAgACgAEiKlACwAdQBwAHAAZQByACgA
KQBdACAAWwAgAFsAbABvAHcAZQByACgAKQAsAKUAKQAsACAAdwBoAGkAYwBoACAAaQBzACAA
YQAgAHQAaQBnAGgAdABlAHIAIAByAGUAcwB1AGwAdAAgAHQAaABhAG4AIABpAG4AdABlAHIA
dgBhAGwAOgA6AHcAaABvAGwAZQAoACkALgAgAFcAZQAgAGYAZQBlAGwAIAB0AGgAZQAgAGIA
ZQB0AHQAZQByACAAdABpAGcAaAB0AG4AZQBzAHMAIABkAG8AZQBzACAAbgBvAHQALAAgAGgA
bwB3AGUAdgBlAHIALAAgAHcAYQByAHIAYQBuAHQAIAB0AGgAZQAgAGMAbwBtAHAAbABpAGMA
YQB0AGkAbwBuAHMAIABpAHQAIABpAG4AdAByAG8AZAB1AGMAZQBzACAAaQBuAHQAbwAgAHQA
aABlACAAbwB0AGgAZQByACAAYQByAGkAdABoAG0AZQB0AGkAYwAgAG8AcABlAHIAYQB0AGkA
bwBuAHMALgANABQgIABFAG0AcAB0AHkAIABpAG4AdABlAHIAdgBhAGwADQBUAGgAZQAgZW1w
dHkgaW50ZXJ2YWwgaXMgdXNlZnVsIGZvciBzZXQtYmFzZWQgb3BlcmF0aW9ucywgYW5kIGl0
IGlzIGNydWNpYWwgaW4gbWFraW5nIGl0IHBvc3NpYmxlIHRvIGF2b2lkIGV4Y2VwdGlvbnMg
YWx0b2dldGhlciBpbiB0aGUgZGVzaWduLiBJdCBjYW4gYmUgbWFkZSB0byBwbGF5IG5pY2Vs
eSB3aXRoIHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbnMgYXMgd2VsbCwgc28gd2UgZGVjaWRl
ZCB0byBhZGQgc3VwcG9ydCBmb3IgaXQuIEl0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBzZXZl
cmFsIHdheXMgOiANLSBlaXRoZXIgdXNpbmcgTmFOcyBmb3IgdGhlIGJvdW5kcywgd2hpY2gg
YWxsb3dzIHRvIHByb3BhZ2F0ZSB0aGUgZW1wdHkgaW50ZXJ2YWxzIHRocm91Z2ggYXJpdGht
ZXRpYyBvcGVyYXRpb25zIGxpa2UgYWRkaXRpb24gd2l0aG91dCBhZGRpdGlvbmFsIHJ1bnRp
bWUgY29zdC4NLSBmb3IgaW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IHN1cHBvcnQgTmFO
cywgdGhlIGVtcHR5IGludGVydmFsIGNhbiBiZSByZXByZXNlbnRlZCBieSByZXZlcnNlIG9y
ZGVyZWQgYm91bmRzIGxpa2UgWzE7MF0sIGF0IHRoZSBjb3N0IG9mIHNvbWUgY2hlY2tzIGF0
IHJ1biB0aW1lIHRvIGRpc3Rpbmd1aXNoIHRoZSBlbXB0eSBpbnRlcnZhbC4NV2UgcHJvcG9z
ZSB0aGF0IHRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoLCBnaXZpbmcgdGhl
IGltcGxlbWVudGVycyBtb3JlIGxlZXdheSB0byBjaG9vc2UgYmV0d2VlbiBjb21wbGV4aXR5
IG9mIGltcGxlbWVudGF0aW9uIGFuZCBlZmZpY2llbmN5Lg2XIFdoeSBpbnRlcnZhbDxUPjo6
ZW1wdHkoKSBhbmQgbm90IGlzX2VtcHR5KGludGVydmFsPFQ+IGNvbnN0Jik/DUluIGEgcHJl
dmlvdXMgdmVyc2lvbiwgd2UgaGFkIGEgZnVuY3Rpb24gdGVtcGxhdGUgaXNfZW1wdHkoaW50
ZXJ2YWw8VD4gY29uc3QmKSwgYW5kIHRoZW4gcmVhbGl6ZWQgdGhlcmUgd2FzIGEgY29uZmxp
Y3Qgd2l0aCB0aGUgbGlicmFyeSBUUjEgdGVtcGxhdGUgaXNfZW1wdHkgKHBhcnQgb2YgdGhl
IHR5cGUgdHJhaXRzKS4gSW5zdGVhZCBvZiBjb21pbmcgdXAgd2l0aCBhIGRpZmZlcmVudCBu
YW1lLCB3ZSBkZWNpZGVkIHRvIHRyZWF0IGludGVydmFsIGFzIGEgY29udGFpbmVyIGZvciB0
aGlzIHB1cnBvc2Ugb25seSwgd2l0aCBhIG1lbWJlciBmdW5jdGlvbiBib29sIGVtcHR5KCkg
Y29uc3Q7Lg01NSh3YXMgcHJldmlvdXMgcGFnZSBudW1iZXIpDQ1JbiB0aGlzIHNhbWUgcHJl
dmlvdXMgdmVyc2lvbiwgdGhlIGZ1bmN0aW9uIGludGVydmFsPFQ+OjplbXB0eSgpIHdhcyBz
dGF0aWMgYW5kIHJldHVybmVkIGFuIGVtcHR5IGludGVydmFsIChzaW1pbGFyIHRvIGludGVy
dmFsPFQ+Ojp3aG9sZSgpKS4gVG8gY3JlYXRlIGFuZCB1c2UgYW4gZW1wdHkgaW50ZXJ2YWws
IG9uZSBzaG91bGQgc2ltcGx5IHVzZSBhIGRlZmF1bHQtY29uc3RydWN0ZWQgaW50ZXJ2YWw8
VD4gZW1wdHk7DZcgV2hhdCBzaG91bGQgdGhlIGxvd2VyKCkgYW5kIHVwcGVyKCkgb2YgYW4g
ZW1wdHkgaW50ZXJ2YWwgcmV0dXJuAD8ADQBXAGUAIABwAHIAbwBwAG8AcwBlACAAdABvACAA
bABlAGEAdgBlACAAaQB0ACAAdQBuAHMAcABlAGMAaQBmAGkAZQBkACAAYQBzACAAdwBlAGwA
bAAuACAARABlAHAAZQBuAGQAaQBuAGcAIABvAG4AIAB0AGgAZQAgAGkAbQBwAGwAZQBtAGUA
bgB0AGEAdABpAG8AbgAgAG8AZgAgAGUAbQBwAHQAeQAgAGkAbgB0AGUAcgB2AGEAbABzACwA
IABpAHQAIABjAG8AdQBsAGQAIAB0AGgAcgBvAHcAIABhAG4AIABlAHgAYwBlAHAAdABpAG8A
bgAsACAAcgBlAHQAdQByAG4AIABhACAATgBhAE4AIABvAHIAIAB0AGgAZQAgAGEAYwB0AHUA
YQBsACAAYgBvAHUAbgBkAHMAIABzAHQAbwByAGUAZAAsACAAbwByACAAcgBlAHQAdQByAG4A
IAArAKUAIABhAG4AZAAgABIipQAgACgAYQB0ACAAdABoAGUAIABjAG8AcwB0ACAAbwBmACAA
YQAgAHQAZQBzAHQAIAB3AGkAdABoAGkAbgAgAGwAbwB3AGUAcgAoACkAKQAuACAAQQBsAGwA
IABvAGYAIAB0AGgAZQBzAGUAIABvAHAAdABpAG8AbgBzACAAaABhAHYAZQAgAHRoZWlyIGFk
dmFudGFnZXMsIGluIHBhcnRpY3VsYXIgcmV0dXJuaW5nIE5hTiB3b3VsZCBhbGxvdyB0byBi
eXBhc3MgZHluYW1pYyBlbXB0aW5lc3MgdGVzdGluZyBpbiBtb3N0IHJvdXRpbmVzLiBJZiBp
dCBtYXR0ZXJzIGZvciB0aGUgdXNlcnMsIHRoZXkgc2hvdWxkIHdyYXAgdGhlaXIgY2FsbHMg
dG8gbG93ZXIoKSBhbmQgdXBwZXIoKSB3aXRoIGEgbm9uLWVtcHRpbmVzcyB0ZXN0LCBidXQg
dGhlIGJhc2ljIGFjY2VzcywgZXNwZWNpYWxseSBmb3IgdGhlIGludGVybmFscyBvZiB0aGUg
aW50ZXJ2YWwgY2xhc3MsIHNob3VsZCBub3QgYmUgcGVuYWxpemVkIGJ5IGEgbWFuZGF0b3J5
IHRlc3QuIFRoZSBmcmVlIGZ1bmN0aW9ucyBpbmYoaW50ZXJ2YWw8VD4pIGFuZCBzdXAoaW50
ZXJ2YWw8VD4pIGhvd2V2ZXIgYXJlIGRlZmluZWQgZm9yIGVtcHR5IGludGVydmFscyB0b28u
DZcgV2hhdCBpcyB0aGUgYmVoYXZpb3Igb24gb3V0LW9mLXJhbmdlIGFyZ3VtZW50IHZhbHVl
cz8gRS5nLiwgc2hvdWxkIHNxcnQoeCkgdGhyb3cgaWYgaW50ZXJ2YWwgeCBjb250YWlucyBu
ZWdhdGl2ZSB2YWx1ZXM/DVdlIGRlY2lkZWQgdG8gaW50ZXJwcmV0IHRoZSBpbmNsdXNpb24g
cHJvcGVydHkgYXMgYWxsb3dpbmcgbmVnYXRpdmUgdmFsdWVzIGZvciBzcXJ0IHdpdGhvdXQg
dGhyb3dpbmcgZXhjZXB0aW9uLCBzaW1wbHkgc2F5aW5nIHRoYXQgc3FydChpKSBjb250YWlu
cyBzcXJ0KHgpIGZvciBhbnkgcG9zaXRpdmUgeCBpbiBpIChhbmQgaXMgZW1wdHkgaWYgaSBp
cyBlbnRpcmVseSBuZWdhdGl2ZSkuIFNpbWlsYXJseSBmb3IgYW55IGZ1bmN0aW9uIHdob3Nl
IGRvbWFpbiBpcyBhIHN1YnNldCBvZiB0aGUgcmVwcmVzZW50YWJsZSBULiBUaGlzIGlzIHRo
ZSBtb3N0IGluY2x1c2l2ZSB2aWV3IHNpbmNlIGl0IGFsbG93cyBmb3Igc2lsZW50IGVycm9y
IHByb3BhZ2F0aW9uIGFuZCByZWNvdmVyeSBmb3Igc3FydChpKSB3aGVyZSBpIGlzIChpbiB0
aGVvcnkpIGd1YXJhbnRlZWQgdG8gcmVwcmVzZW50IGEgcG9zaXRpdmUgbnVtYmVyIGJ1dCBp
dHMgaW50ZXJ2YWwgZW5jbG9zdXJlIGNvbnRhaW5zIG5lZ2F0aXZlIG51bWJlcnMuDU5vdGUg
dGhhdCwgaXQgaXMgYWx3YXlzIHBvc3NpYmxlIGZvciB0aGUgdXNlciB0byBjaGVjayBtYW51
YWxseSB0aGUgcmFuZ2Ugb2YgdGhlIGFyZ3VtZW50cyAoZS5nLiwgZG9lcyBpIGNvbnRhaW4g
bmVnYXRpdmUgbnVtYmVycykgYW5kIHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUgYWN0aW9u
LiBBcyBCaWxsIFdhbHN0ZXIgcHV0cyBpdDogk0RlcGVuZGluZyBvbiB0aGUgY29udGV4dCwg
YW4gZW1wdHkgcmVzdWx0IG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0aW9uIG9yIGZ1bmN0aW9u
IGV2YWx1YXRpb24gbWF5IG9yIG1heSBub3QgaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBoYXMg
YmVlbiBtYWRlLiBBbiBleGNlcHRpb24tbGlrZSBmZWF0dXJlIGlzIG5lZWRlZCB0byBwcm92
aWRlIGEgdGVzdCBmb3IgZXhwcmVzc2lvbiBjb250aW51aXR5LCB3aGljaCBpcyBhbiBhc3N1
bXB0aW9uIGZvciB0aGUgaW50ZXJ2YWwgTmV3dG9uIGFsZ29yaXRobSBhbmQgdGhlIEJyb3V3
ZXIgZml4ZWQtcG9pbnQgdGhlb3JlbS4gVGhpcyB3aWxsIG9ubHkgYmUgbmVlZGVkIGluIHNw
ZWNpYWwgY2lyY3Vtc3RhbmNlcyBhbmQgdGhlcmVmb3JlIG5lZWRzIHRvIGJlIGludm9rYWJs
ZSBvbmx5IHdoZW4gcmVxdWlyZWQulA2XIFdoeSB1c2UgdGhlIG5vdGF0aW9uIFt4OyB5XSBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgaW4gdGhlIEkvTyBvcGVyYXRvcjw8Pw1Db21wbGV4
IG51bWJlcnMgYWxyZWFkeSB1c2UgdGhlIG5vdGF0aW9uICh4LHkpIGFuZCB0aGUgdXNlIG9m
IGJyYWNrZXRzIGlzIGN1c3RvbWFyeSBmb3IgcmVwcmVzZW50aW5nIGludGVydmFsLiBXZSB1
c2UgdGhlIHNlbWljb2xvbiCSO5IgaW5zdGVhZCBvZiB0aGUgY29tbWEgkiySIGFzIHRoZSBz
ZXBhcmF0b3IsIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGxvY2FsZXMgKGFzIGZhciBhcyB3
ZSBrbm93LCBub25lIG9mIHRoZW0gdXNlIJI7kiBhcyBhIGRlY2ltYWwgcG9pbnQsIGJ1dCBz
b21lIGRvIHVzZSB0aGUgY29tbWEgkiySKS4NlyBXaHkgZG8gdGhlIEkvTyBvcGVyYXRvcnMg
aGF2ZSB0byBzYXRpc2Z5IHRoZSBpbmNsdXNpb24gcHJvcGVydHk/DUV2ZXJ5IGFyaXRobWV0
aWMgb3BlcmF0aW9uIG9mIHRoaXMgcHJvcG9zYWwgc2F0aXNmaWVzIHRoZSBpbmNsdXNpb24g
cHJvcGVydHkuIFRoaXMgYWxsb3dzIHRvIHBlcmZvcm0gZ3VhcmFudGVlZCBjb21wdXRhdGlv
bnMuIEludGVyYWN0aW9ucyB3aXRoIHRoZSB1c2VyIHNob3VsZCBwcm92aWRlIHRoZSBzYW1l
IGd1YXJhbnRlZXMuIElmIHRoZSB1c2VyIGlucHV0cyAwLjEsIGl0IHNob3VsZCBub3QgYmUg
aW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGV0b24gaW50ZXJ2YWwgdGhhdCBkb2VzIG5vdCBldmVu
IGNvbnRhaW4gdGhpcyB2YWx1ZS4gQW5kIHJlY2lwcm9jYWxseSwgdGhlIGFwcGxpY2F0aW9u
cyBzaG91bGQgbm90IGRpc3BsYXkgb3Igc3RvcmUgWzAuMTswLjFdIFswLjEzOyAwLjEzXSB3
aGVuIHRoZSBpbnRlcnZhbCBpcyBhIHNpbmdsZXRvbiBjb250YWluaW5nIDEvOCwgYW5kIGEg
Mi1kZWNpbWFsLXBsYWNlIGRpc3BsYXkgaGFzIGJlZW4gc3BlY2lmaWVkLg2XIFNwZWNpYWxp
emF0aW9ucyBmb3IgbnVtZXJpY19saW1pdHM8IGludGVydmFsPFQ+ID4/DVdlIGRvIG5vdCBz
ZWUgYSBtZWFuaW5nZnVsIHNwZWNpYWxpemF0aW9uIG9mIG51bWVyaWNfbGltaXRzIGZvciBp
bnRlcnZhbC4NlyBTaG91bGQgc3RkOjpzZXQ8aW50ZXJ2YWw+IHdvcms/DVNpbWlsYXJseSB0
byBMaWJyYXJ5IElzc3VlIDM4OCBjb25jZXJuaW5nIHN0ZDo6c2V0PHN0ZDo6Y29tcGxleD4s
IHdlIGRlY2lkZWQgdG8gbWFrZSBpdCBpbGxlZ2FsIChzZWUgMjYuNi43LCBjbGF1c2UgMiwg
YmVsb3cpLiBJbiBvcmRlciB0byBzYWZlbHkgdXNlIHN0ZDo6c2V0PGludGVydmFsPiwgdXNl
cnMgaGF2ZSB0byBwcm92aWRlIGEgZnVuY3RvciB0aGVtc2VsdmVzICh3aGljaCBjb3VsZCBp
bXBsZW1lbnQgbGV4aWNvZ3JhcGhpYyBvcmRlciBmb3IgZXhhbXBsZSkuDVRoZSBwcm9ibGVt
IGlzIHRoYXQgdGhlIG9ubHkgbmF0dXJhbCBzdHJpY3Qgd2VhayBvcmRlcmluZyBvbiBpbnRl
cnZhbDxUPiwgd2hpY2ggd2UgcHJvdmlkZSBhcyBvcGVyYXRvcjwoaW50ZXJ2YWwsaW50ZXJ2
YWwpLiBpcyB0aGUgb25lIHRoYXQgZXh0ZW5kcyB0aGUgb3JkZXIgb24gVCB3aGVuIHRoZSBp
bnRlcnZhbHMgYXJlIGRpc2pvaW50LCBhbmQgdGhhdCBpdHMgdXNlIGluIHNldCB3aWxsIHRo
cm93IHdoZW4gdGhlIHR3byBpbnRlcnZhbHMgb3ZlcmxhcC4NTm90ZSB0aGF0LCBhcyBsb25n
IGFzIG5vbmUgb2YgdGhlIGludGVydmFscyBpbiB0aGUgc2V0IG92ZXJsYXAsIHRoZSBzZXQg
d2lsbCB3b3JrLiBIZW5jZSBpdCBpcyBhbGxvd2VkIGZvciB0aGUgcHJvZ3JhbW1lcnMgdG8g
dXNlIHN0ZDo6c2V0PGludGVydmFsPiBhdCB0aGVpciBvd24gcmlzaywgYXMgbG9uZyBhcyB0
aGV5IGNhbiBndWFyYW50ZWUgdGhhdCBub25lIG9mIHRoZSBpbnRlcnZhbHMgb3ZlcmxhcCAo
Ynkgb3Bwb3NpdGlvbiB0byBzdGQ6OnNldDxzdGQ6OmNvbXBsZXg+IHdoaWNoIHdpbGwgbm90
IGNvbXBpbGUpLg1XZSBkbyBub3Qgc2VlIGFueSByZWFzb24gdG8gZGlzYWxsb3cgdGhpcyBw
b3NzaWJpbGl0eS4gQnV0IGFzIGZhciBhcyB3ZSB1bmRlcnN0YW5kIGl0LCBub3RoaW5nIGlu
IHRoZSANNih3YXMgcHJldmlvdXMgcGFnZSBudW1iZXIpDQ1zdGFuZGFyZCBkZXNjcmliZXMg
dGhlIGJlaGF2aW9yIG9mIHN0ZDo6c2V0IHdoZW4gdGhlIGNvbXBhcmlzb24gdGhyb3dzIChl
dmVuIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0IHJpZ2h0IG91dHNpZGUgdGhlIGNhbGwg
dG8gc2V0OjppbnNlcnQoKTsgaXQgY291bGQgZm9yIGluc3RhbmNlIGV4aGliaXQgYSBtZW1v
cnkgbGVhayBpZiBpdCBjcmVhdGVzIGEgbm9kZSBiZWZvcmUgZG9pbmcgYWxsIHRoZSBjb21w
YXJpc29ucykuDZcgU2hvdWxkIHN0ZDo6dmFsYXJyYXk8aW50ZXJ2YWw+IGJlIGFsbG93ZWQ/
DVdlIGRvIG5vdCBzZWUgYW55IHJlYXNvbiB3aHkgbm90Lg2XIE1lbW9yeSBsYXlvdXQNV2Ug
YXJlIGF3YXJlIG9mIExXRyBpc3N1ZSAzODcgb24gb3Zlci1lbmNhcHN1bGF0aW9uIG9mIHN0
ZDo6Y29tcGxleC4gVGhlIHNhbWUgaXNzdWUgd291bGQgYXJpc2Ugd2l0aCBpbnRlcnZhbCwg
c28gd2UgY291bGQgaGF2ZSBmb3JjZWQgdGhlIG1lbW9yeSBsYXlvdXQgb2YgdGhpcyB0ZW1w
bGF0ZSB0eXBlLiBCdXQgdGhlIHRyaXZpYWwgbGF5b3V0IHtsb3dlcix1cHBlcn0gaXMgbm90
IGFsd2F5cyBvcHRpbWFsLiBPbiBzb21lIGFyY2hpdGVjdHVyZXMgaXQgbWF5IGJlIGEgbG90
IG1vcmUgZWZmaWNpZW50IHRvIHN0b3JlIG9uZSBvZiB0aGUgYm91bmRzIHdpdGggYW4gb3Bw
b3NpdGUgc2lnbi4gVGhpcyBpcyBhIG1hdHRlciBvZiBBQkkuIEFzIGEgY29uc2VxdWVuY2Us
IHdlIG9ubHkgcHJvdmlkZSBhIHByaXZhdGUgbWVtYmVyIFQgZGF0YVsyXSB0byBmb3JjZSBh
IHJlcHJlc2VudGF0aW9uIGFzIGEgcGFpciBvZiBmbG9hdGluZy1wb2ludCBudW1iZXJzLg2X
IFNob3VsZCBpbnRlcnZhbHMgYmUgcGFzc2VkIGJ5IHZhbHVlIG9yIGJ5IHJlZmVyZW5jZT8N
R2l2ZW4gdGhhdCBpbnRlcnZhbHMgYXJlIHNtYWxsIG9iamVjdHMsIHNvbWUgQUJJcyBpbXBs
ZW1lbnQgcGFzc2luZyB0aGVtIGJ5IHZhbHVlIG1vcmUgZWZmaWNpZW50bHkgKGluIHJlZ2lz
dGVycyksIGJ1dCBvdGhlciBBQklzIHByZWZlciBwYXNzaW5nIGJ5IHJlZmVyZW5jZS4gV2Ug
aGF2ZSBjaG9zZW4gdG8gZm9sbG93IHdoYXQgd2FzIGFscmVhZHkgaW4gdGhlIHN0YW5kYXJk
IGZvciBzdGQ6OmNvbXBsZXgsIHdoaWNoIGlzIHBhc3NpbmcgYnkgcmVmZXJlbmNlLiBDaGFu
Z2luZyB0aGlzIHRvIHBhc3MgYnkgdmFsdWUgd291bGQgb25seSBwZW5hbGl6ZSB0aGUgb3Ro
ZXIgQUJJcy4gT25lIG9wdGlvbiBjb3VsZCBiZSB0byBtYWtlIHRoaXMgZGVwZW5kZW50IG9m
IHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGNvbW11bmljYXRlIHRoaXMgY2hvaWNlIHRvIHRo
ZSB1c2VyLCBmb3IgZXhhbXBsZSBieSBhIG5lc3RlZCB0eXBlIHByb3ZpZGVkIGJ5IGludGVy
dmFsLg1Ob3RlIHRoYXQgdGhpcyBwb2ludCBpcyBtb290IHdoZW4gZnVuY3Rpb25zIGFyZSBp
bmxpbmUsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIHRoZSBjYXNlIG1vc3Qgb2YgdGhlIHRp
bWUuBQ2XIE9wdGltaXphdGlvbiBleHBlY3RhdGlvbnMNT25lIGdvYWwgb2YgdGhlIHN0YW5k
YXJkaXphdGlvbiBvZiBpbnRlcnZhbCBhcml0aG1ldGljIGlzIHRvIG1ha2UgYW4gaW1wbGVt
ZW50YXRpb24gY2xvc2UgdG8gY29tcGlsZXJzLCBoZW5jZSBtb3RpdmF0ZSBzb21lIG9wdGlt
aXphdGlvbiB3b3JrLiBUaGVzZSBhcmUgbW9zdGx5IFFPSSBpc3N1ZXMsIGJ1dCB3ZSB3b3Vs
ZCBsaWtlIHRvIG1lbnRpb24gdHdvIG9wdGltaXphdGlvbnMgdGhhdCB3ZSB0aGluayBhcmUg
aW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCB3aGVuIGRlc2lnbmluZyB0aGlzIHByb3Bvc2Fs
OiByb3VuZGluZyBtb2RlIGNoYW5nZXMgYXJlIGNvc3RseSBmb3IgYmFzaWMgb3BlcmF0aW9u
cyBsaWtlIGludGVydmFsIGFkZGl0aW9uL211bHRpcGxpY2F0aW9uLiBBbmQgZWZmaWNpZW5j
eSBvZiB0aGVzZSBvcGVyYXRpb25zIGlzIGltcG9ydGFudC4gRm9ydHVuYXRlbHksIHRoZXJl
IGFyZSB0cmlja3MgdG8gZWxpbWluYXRlIG1vc3Qgcm91bmRpbmcgbW9kZSBjaGFuZ2VzLg1U
aGUgZmlyc3Qgb25lIGlzIHRoZSBvYnNlcnZhdGlvbiB0aGF0IHRoZSBhZGRpdGlvbiBhK2Ig
cm91bmRlZCB0b3dhcmRzIG1pbnVzIGluZmluaXR5IGlzIHRoZSBzYW1lIGFzIC0oLWEtYikg
d2l0aCBvcGVyYXRpb25zIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LCBzbyB0aGF0
IHRoZSBzYW1lIHJvdW5kaW5nIG1vZGUgY2FuIGJlIHVzZWQgZm9yIGJvdGggdGhlIGxvd2Vy
IGFuZCB1cHBlciBib3VuZHMuIFRoZSBzYW1lIHRyaWNrIGNhbiBiZSBhcHBsaWVkIHRvIG1h
bnkgb3RoZXIgb3BlcmF0aW9ucy4gQ2FyZSBoYXMgdG8gYmUgdGFrZW4sIHRob3VnaCwgZm9y
IG1hY2hpbmVzIHdoZXJlIGRvdWJsZSByb3VuZGluZyBjYW4gaGF2ZSBhbiBlZmZlY3QgKGUu
Zy4geDg2KS4NVGhlIHNlY29uZCBpcyB0aGUgaG9wZSB0aGF0IHRoZSBjb21waWxlciwgcHJv
dmlkZWQgaXQgaGFzIHNvbWUga25vd2xlZGdlIG9mIHJvdW5kaW5nIG1vZGUgY2hhbmdlIGZ1
bmN0aW9ucywgY2FuIGVsaW1pbmF0ZSBhIHJvdW5kaW5nIG1vZGUgY2hhbmdlIGlmIGl0IGtu
b3dzIHRoYXQgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgb25lIChwcmV2aW91c2x5
IGNoYW5nZWQpLiBJdCBjb3VsZCBhbHNvIGVsaW1pbmF0ZSBjb25zZWN1dGl2ZSByb3VuZGlu
ZyBtb2RlIGNoYW5nZXMsIHByb3ZpZGVkIHRoYXQgdGhlcmUgaXMgbm8gZmxvYXRpbmcgcG9p
bnQgb3BlcmF0aW9uIGluIGJldHdlZW4gdGhhdCBjYW4gYmUgYWZmZWN0ZWQuDVYgUHJvcG9z
ZWQgVGV4dCBmb3IgdGhlIFN0YW5kYXJkDUluIENoYXB0ZXIgMjYsIE51bWVyaWNzIGxpYnJh
cnkuDUFkZCBpbnRlcnZhbCB0byBwYXJhZ3JhcGggMiwgYW5kIGNoYW5nZSBUYWJsZSA3OSB0
byA6DVRhYmxlIDc5l051bWVyaWNzIGxpYnJhcnkgc3VtbWFyeQ03KHdhcyBwcmV2aW91cyBw
YWdlIG51bWJlcikNDVN1YmNsYXVzZSBIZWFkZXIocykNMjYuMSBSZXF1aXJlbWVudHMNMjYu
MiBDb21wbGV4IG51bWJlcnMgPGNvbXBsZXg+DTI2LjMgTnVtZXJpYyBhcnJheXMgPHZhbGFy
cmF5Pg0yNi40IEdlbmVyYWxpemVkIG51bWVyaWMgb3BlcmF0aW9ucyA8bnVtZXJpYz4NMjYu
NSBDIGxpYnJhcnkgPGNtYXRoPg08Y3N0ZGxpYj4NMjYuNiBJbnRlcnZhbCBhcml0aG1ldGlj
IDxpbnRlcnZhbD4NSW4gMjYuMSwgY2hhbmdlIHBhcmFncmFwaCAxIHRvIGFkZCBpbnRlcnZh
bC4NQ2hhbmdlIGZvb3Rub3RlIDI1MyB0byBhZGQgaW50ZXJ2YWwgYXMgYWxsb3dlZCBwYXJh
bWV0ZXIgdG8gdmFsYXJyYXkuDUFkZGl0aW9uIG9mIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiAy
Ni42IDoNMjYuNiBJbnRlcnZhbCBudW1iZXJzIFtsaWIuaW50ZXJ2YWwubnVtYmVyc10NMSBU
aGUgaGVhZGVyIDxpbnRlcnZhbD4gZGVmaW5lcyBhIGNsYXNzIHRlbXBsYXRlLCBhbmQgbnVt
ZXJvdXMgZnVuY3Rpb25zIGZvciByZXByZXNlbnRpbmcgYW5kIG1hbmlwdWxhdGluZyBudW1l
cmljYWwgaW50ZXJ2YWxzLg0yIFRoZSBlZmZlY3Qgb2YgaW5zdGFudGlhdGluZyB0aGUgdGVt
cGxhdGUgaW50ZXJ2YWwgZm9yIGFueSB0eXBlIG90aGVyIHRoYW4gZmxvYXQsIGRvdWJsZSwg
bG9uZyBkb3VibGUsIG9yIGJvb2wgaXMgdW5zcGVjaWZpZWQuDTMgSW50ZXJ2YWwgYXJpdGht
ZXRpYyAoSUEpIGlzIGEgYmFzaWMgdG9vbCBmb3IgY2VydGlmaWVkIG1hdGhlbWF0aWNhbCBj
b21wdXRhdGlvbnMuIEEgbWF0aGVtYXRpY2FsIGludGVydmFsIFthLGJdIGlzIHRoZSBzZXQg
b2YgbnVtYmVycyBseWluZyBiZXR3ZWVuIHRoZSB0d28gYm91bmRzIGEgYW5kIGIuIEFuIG9i
amVjdCBvZiBpbnRlcnZhbCB0eXBlIHJlcHJlc2VudHMgYSBtYXRoZW1hdGljYWwgaW50ZXJ2
YWwuIFRoZSBtb3N0IGltcG9ydGFudCB1c2UgaXMgaW4gY29tcHV0aW5nIHByb3ZlbiBpbmNs
dXNpb25zIG9mIHRoZSByYW5nZSBvZiBhIGZ1bmN0aW9uIGYuIFN1Y2ggYW4gaW5jbHVzaW9u
IGlzIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSB2YWx1ZXMgZiB0YWtlcyBhcyBpdHMgYXJn
dW1lbnRzIHZhcnkgb3ZlciBnaXZlbiBpbnB1dCBpbnRlcnZhbHMuIFIuIE1vb3JlknMgRnVu
ZGFtZW50YWwgVGhlb3JlbSAoMTk2NSksIHRoZSBiYXNpcyBvZiB0aGUgdGhlb3J5LCBhc3Nl
cnRzIHRoYXQgaWYgdGhlIGVsZW1lbnRhcnkgZnVuY3Rpb25zIChpbmNsdWRpbmcgYXJpdGht
ZXRpYyBvcGVyYXRpb25zKSBhcmUgZ2l2ZW4gaW50ZXJ2YWwgdmVyc2lvbnMgdGhhdCBwb3Nz
ZXNzIHRoaXMgaW5jbHVzaW9uIHByb3BlcnR5LCBhbmQgaWYgYSBmdW5jdGlvbiBmIGlzIGJ1
aWx0IGZyb20gZWxlbWVudGFyeSBmdW5jdGlvbnMsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcg
aW50ZXJ2YWwgdmVyc2lvbiBvZiBmIHBvc3Nlc3NlcyB0aGUgaW5jbHVzaW9uIHByb3BlcnR5
Lg00IE1pc3Npb24uIFRoaXMgc3RhbmRhcmQgc3VwcG9ydHMgc2V2ZXJhbCBhYnN0cmFjdCBp
bnRlcnZhbCBtb2RlbHMsIHRoYXQgaGFuZGxlIGluZmluaXR5IGFuZCByZWxhdGVkIGlzc3Vl
cyBpbiB0aGUgY29udGV4dCBvZiBpbnRlcnZhbCBhcml0aG1ldGljIGluIHZhbGlkIGJ1dCBk
aWZmZXJlbnQgd2F5cy4gSXQgdGhlcmVmb3JlIHByb3ZpZGVzIGEgY29tbW9uIEFQSSBmb3Ig
aW1wbGVtZW50YXRpb25zIG9mIGRpZmZlcmVudCBhYnN0cmFjdCBtb2RlbHMuIFRoZSBhYnN0
cmFjdCBtb2RlbHMgdGhhdCB1bmRlcmxpZSBzZXZlcmFsIHdpZGVseSB1c2VkIGludGVydmFs
IGltcGxlbWVudGF0aW9ucyBjb25mb3JtIHRvIHRoaXMgc3RhbmRhcmQsIG9yIGNhbiBiZSBt
YWRlIHRvIGRvIHNvIGJ5IG1pbm9yIG1vZGlmaWNhdGlvbnMuDTUgRWFjaCBpbXBsZW1lbnRh
dGlvbiBtdXN0IGJlIGJhc2VkIG9uIGFuIGFic3RyYWN0IGludGVydmFsIG1vZGVsIChhYnN0
cmFjdCBtb2RlbCBmb3Igc2hvcnQpLCB3aGljaCBzdGF0ZXMgdGhlIGZvbGxvd2luZy4NVGhl
IHVuZGVybHlpbmcgc2V0IG9mIG51bWJlcnMgKJN3aG9sZSBsaW5llCksIHdoaWNoIG11c3Qg
YmUgZWl0aGVyIHRoZSByZWFscyBSLCBvciB0aGUgZXh0ZW5kZWQgcmVhbHMgUiogPSBSICgg
eygoLCAoKH0gVGhlIGFic3RyYWN0IG1vZGVsIGlzIGFuIFItbW9kZWwgb3IgYW4gUiotbW9k
ZWwgYWNjb3JkaW5nIHRvIHdoaWNoIG9mIHRoZXNlIGlzIHRoZSBjYXNlLg1UaGUgc2V0IEkg
b2Ygc3VwcG9ydGVkIGludGVydmFscy4gVGhpcyBtdXN0IGluY2x1ZGUgdGhlIHNldCBJMCAs
IHdoaWNoIGlzIGRlZmluZWQgdG8gY29tcHJpc2UgdGhlIGVtcHR5IHNldCBhbmQgdGhlIHdo
b2xlIGxpbmUgYW5kIGFsbCBub25lbXB0eSBib3VuZGVkIGludGVydmFscywgdGhhdCBpcyBb
YSwgYl0gd2l0aCBhLCBiIHJlYWwgYW5kIGEgKCBiIC4NVGhlIGRlZmluaXRpb24gb2YgdGhl
IHNldCBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB4
ICggeSBhbmQgZWxlbWVudGFyeSBmdW5jdGlvbnMgZSh4LCCFKSBvbiBwb2ludCB2YWx1ZXMg
aW4gdGhlIGFic3RyYWN0IG1vZGVsLCBpbmNsdWRpbmcgYXQgc2luZ3VsYXJpdGllcy4gVGhp
cyBzZXQsIHdoaWNoIG1heSBjb250YWluIHplcm8sIG9uZSBvciBtYW55IHBvaW50cywgaXMg
dGVybWVkIHRoZSB7XGVtIG1hdGhlbWF0aWNhbCByZXN1bHR9IG9mIHRoZSBvcGVyYXRpb24g
b3IgZnVuY3Rpb24uDVRoZSBzZXQgSVQgb2YgaW50ZXJ2YWxzIHN1cHBvcnRlZCBieSB0aGUg
aW50ZXJ2YWw8VD4gaW5zdGFudGlhdGlvbiBtdXN0IGJlIGEgc3Vic2V0IG9mIEkgdGhhdCBp
bmNsdWRlcyB0aGUgZW1wdHkgc2V0IGFuZCB0aGUgd2hvbGUgbGluZS4NNiBJbmNsdXNpb24g
cHJvcGVydHkuIEluIHRoZSBpbnRlcnZhbDxUPiBpbnN0YW50aWF0aW9uLCB0aGUgcmVzdWx0
IFogb2YgWCAoIFkgb3IgZShYLCCFKSB3aGVyZSBYLCBZLCCFIGFyZSBpbnRlcnZhbHMgbXVz
dCBiZSBhIG1lbWJlciBvZiBJVCB0aGF0IGNvbnRhaW5zIHRoZSBtYXRoZW1hdGljYWwgcmVz
dWx0IG9mIHggKCB5IG9yIGUoeCwghSkgZm9yIGFsbCB4KFgsIHkoWSAsIGV0Yy4gSXQgaXMg
ZGVzaXJhYmxlIGZvciBaIHRvIGJlIHRoZSBzbWFsbGVzdCBzdWNoIGludGVydmFsLCBidXQg
dGhpcyBpcyBhIHF1YWxpdHktb2YtaW1wbGVtZW50YXRpb24gaXNzdWUuIA03IE1vZGVsLWRl
ZmluZWQgYmVoYXZpb3VyIGlzIGJlaGF2aW91ciB0aGF0IGlzIG5vdCBjb21tb24gdG8gYWxs
IHN0YW5kYXJkLWNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zLCBhbmQgaXMgaW1wbGllZCBi
eSB0aGUgYWJzdHJhY3QgbW9kZWwgdW5kZXJseWluZyB0aGUgaW1wbGVtZW50YXRpb24uIFtC
ZWdpbiBleGFtcGxlLiBUaGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBvZiAwLzAgaXMgbW9kZWwt
ZGVmaW5lZC4gSXQgaXMgZW1wdHkgaW4gdGhlIHVzdWFsIFItbW9kZWwgb2YgYXJpdGhtZXRp
YywgaXMgdGhlIHdob2xlIG9mIFIgaW4gYSCTYmFjay1wcm9wYWdhdGlvbpQgUi1tb2RlbCwg
YW5kIGlzIHRoZSB3aG9sZSBvZiBSKiBpbiB0aGUgY3NldCBhcml0aG1ldGljIFIqLW1vZGVs
LiAoIGVuZCBleGFtcGxlXQ1JbiBlYWNoIGltcGxlbWVudGF0aW9uknMgZG9jdW1lbnRhdGlv
biwgdGhlIHVuZGVybHlpbmcgYWJzdHJhY3QgbW9kZWwgbXVzdCBiZSBkZWZpbmVkLiBFYWNo
IGJlaGF2aW91ciB0aGF0IHRoZSBzdGFuZGFyZCBtYXJrcyBhcyCTbW9kZWwtZGVmaW5lZJQg
bXVzdCBiZSBkZXNjcmliZWQgaW4gc3VjaCBhIHdheSB0aGF0IG9uZSBjYW4gdmVyaWZ5IChh
KSB0aGUgY29uZm9ybWFuY2Ugb2YgdGhlIGRlc2NyaXB0aW9uIHRvIHRoZSBhYnN0cmFjdCBt
b2RlbCwgYW5kIChiKSB0aGUgY29uZm9ybWFuY2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uIHRv
IHRoZSBkZXNjcmlwdGlvbi4NMjYuNi4xIEhlYWRlciA8aW50ZXJ2YWw+IHN5bm9wc2lzIFts
aWIuaW50ZXJ2YWwuc3lub3BzaXNdDW5hbWVzcGFjZSBzdGQgew0NLy8gZm9yd2FyZCBkZWNs
YXJhdGlvbnM6DXRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBpbnRlcnZhbCA7DXRlbXBsYXRl
IDw+IGNsYXNzIGludGVydmFsIDxmbG9hdCA+Ow10ZW1wbGF0ZSA8PiBjbGFzcyBpbnRlcnZh
bCA8ZG91YmxlID47DXRlbXBsYXRlIDw+IGNsYXNzIGludGVydmFsIDwgbG9uZyBkb3VibGUg
PjsNDS8vIGFyaXRobWV0aWMgb3BlcmF0b3JzOg10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGludGVy
dmFsIDxUPiBvcGVyYXRvciArKCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwg
Y2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9wZXJhdG9yICsoIGNvbnN0IGludGVydmFsIDxUID4m
LCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwg
PFQ+IG9wZXJhdG9yICsoIGNvbnN0IGludGVydmFsIDxUID4mLCBjb25zdCBUJik7DXRlbXBs
YXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9wZXJhdG9yICsoIGNvbnN0IFQmLCBjb25z
dCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9w
ZXJhdG9yIC0oIGNvbnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxhdGUgPCBjbGFzcyBUPiBp
bnRlcnZhbCA8VD4gb3BlcmF0b3IgLSggY29uc3QgaW50ZXJ2YWwgPFQgPiYsIGNvbnN0IGlu
dGVydmFsIDxUID4mKTsNdGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0
b3IgLSggY29uc3QgaW50ZXJ2YWwgPFQgPiYsIGNvbnN0IFQmKTsNdGVtcGxhdGUgPCBjbGFz
cyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0b3IgLSggY29uc3QgVCYsIGNvbnN0IGludGVydmFs
IDxUID4mKTsNdGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0b3IgKigg
Y29uc3QgaW50ZXJ2YWwgPFQgPiYsIGNvbnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxhdGUg
PCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0b3IgKiggY29uc3QgaW50ZXJ2YWwgPFQg
PiYsIGNvbnN0IFQmKTsNdGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0
b3IgKiggY29uc3QgVCYsIGNvbnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxhdGUgPCBjbGFz
cyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0b3IgLyggY29uc3QgaW50ZXJ2YWwgPFQgPiYsIGNv
bnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4g
b3BlcmF0b3IgLyggY29uc3QgaW50ZXJ2YWwgPFQgPiYsIGNvbnN0IFQmKTsNdGVtcGxhdGUg
PCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0b3IgLyggY29uc3QgVCYsIGNvbnN0IGlu
dGVydmFsIDxUID4mKTsNOCh3YXMgcHJldmlvdXMgcGFnZSBudW1iZXIpDQ0NLy8gc3RyZWFt
IG9wZXJhdG9yczoNdGVtcGxhdGUgPCBjbGFzcyBULCBjbGFzcyBjaGFyVCAsIGNsYXNzIHRy
YWl0cyA+DWJhc2ljX2lzdHJlYW0gPGNoYXJUICwgdHJhaXRzID4mDW9wZXJhdG9yID4+KCBi
YXNpY19pc3RyZWFtIDxjaGFyVCAsIHRyYWl0cyA+JiwgaW50ZXJ2YWwgPFQgPiYpOw10ZW1w
bGF0ZSA8IGNsYXNzIFQsIGNsYXNzIGNoYXJUICwgY2xhc3MgdHJhaXRzID4NYmFzaWNfb3N0
cmVhbSA8Y2hhclQgLCB0cmFpdHMgPiYNb3BlcmF0b3IgPDwoIGJhc2ljX29zdHJlYW0gPGNo
YXJUICwgdHJhaXRzID4mLCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DQ0vLyB2YWx1ZXM6DXRl
bXBsYXRlIDwgY2xhc3MgVD4gVCBpbmYoIGNvbnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxh
dGUgPCBjbGFzcyBUPiBUIHN1cCggY29uc3QgaW50ZXJ2YWwgPFQgPiYpOw10ZW1wbGF0ZSA8
IGNsYXNzIFQ+IFQgbWlkcG9pbnQgKCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRl
IDwgY2xhc3MgVD4gVCB3aWR0aCAoIGNvbnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxhdGUg
PCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gYWJzKCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRl
bXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IHNxdWFyZSAoIGNvbnN0IGludGVydmFs
IDxUID4mKTsNLyAvDS8vIGFsZ2VicmFpYyBvcGVyYXRvcnM6DXRlbXBsYXRlIDwgY2xhc3Mg
VD4gaW50ZXJ2YWwgPFQ+IHNxdWFyZSAoIGNvbnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxh
dGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gc3FydCAoIGNvbnN0IGludGVydmFsIDxUID4m
KTsNDS8vIHNldCBvcGVyYXRpb25zOg10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGJvb2wgaXNfc2lu
Z2xldG9uICggY29uc3QgaW50ZXJ2YWwgPFQgPiYpOw10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGJv
b2wgY29udGFpbnMgKCBjb25zdCBpbnRlcnZhbCA8VCA+JiwgY29uc3QgVCYpOw10ZW1wbGF0
ZSA8IGNsYXNzIFQ+IGJvb2wgY29udGFpbnMgKCBjb25zdCBpbnRlcnZhbCA8VCA+JiwgY29u
c3QgaW50ZXJ2YWwgPFQgPiYpOw10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGJvb2wgb3ZlcmxhcCAo
IGNvbnN0IGludGVydmFsIDxUID4mLCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRl
IDwgY2xhc3MgVD4gYm9vbCBjb21wYXJhYmxlICggY29uc3QgaW50ZXJ2YWwgPFQgPiYgeCwg
Y29uc3QgaW50ZXJ2YWwgPFQgPiYgeSk7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwg
PFQ+IGludGVyc2VjdCAoIGNvbnN0IGludGVydmFsIDxUID4mLCBjb25zdCBpbnRlcnZhbCA8
VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IGh1bGwgKCBjb25zdCBp
bnRlcnZhbCA8VCA+JiwgY29uc3QgaW50ZXJ2YWwgPFQgPiYpOw10ZW1wbGF0ZSA8IGNsYXNz
IFQ+IHN0ZCA6OiBwYWlyIDwgaW50ZXJ2YWwgPFQ+LCBpbnRlcnZhbCA8VD4gPg1zcGxpdCAo
IGNvbnN0IGludGVydmFsIDxUID4mLCBjb25zdCBUJik7DXRlbXBsYXRlIDwgY2xhc3MgVD4g
c3RkIDo6IHBhaXIgPCBpbnRlcnZhbCA8VD4sIGludGVydmFsIDxUPiA+DWJpc2VjdCAoIGNv
bnN0IGludGVydmFsIDxUID4mKTsNDX0gLy8gb2YgbmFtZXNwYWNlIHN0ZA0yNi42LjIgaW50
ZXJ2YWwgY2xhc3MgdGVtcGxhdGUgW2xpYi5pbnRlcnZhbF0NbmFtZXNwYWNlIHN0ZCB7DQ10
ZW1wbGF0ZSA8IGNsYXNzIFQgPg1jbGFzcyBpbnRlcnZhbA17DVQgZGF0YSBbMl07DXB1Ymxp
YyA6DXR5cGVkZWYgVCB2YWx1ZV90eXBlIDsNaW50ZXJ2YWwgKCk7DWludGVydmFsICggY29u
c3QgY2hhciAqKTsNaW50ZXJ2YWwgKCBjb25zdCBUJiB0KTsNaW50ZXJ2YWwgKCBjb25zdCBU
JiBsbyAsIGNvbnN0IFQmIGhpICk7DXRlbXBsYXRlIDxjbGFzcyBVPiBleHBsaWNpdCBpbnRl
cnZhbCAoIGNvbnN0IFUmKTsNdGVtcGxhdGUgPGNsYXNzIFU+IGludGVydmFsICggY29uc3Qg
VSYsIGNvbnN0IFUmKTsNdGVtcGxhdGUgPGNsYXNzIFU+IGludGVydmFsICggY29uc3QgaW50
ZXJ2YWwgPFUgPiYpOw1ib29sIGVtcHR5IGJvb2wgaXNfZW1wdHlfaW50ZXJ2YWwoKSBjb25z
dCA7DVQgbG93ZXIgKCkgY29uc3QgOw1UIHVwcGVyICgpIGNvbnN0IDsNaW50ZXJ2YWwgJiBv
cGVyYXRvciA9KCBjb25zdCBUJik7DTkod2FzIHByZXZpb3VzIHBhZ2UgbnVtYmVyKQ0NaW50
ZXJ2YWwgJiBvcGVyYXRvciArPSggY29uc3QgVCYpOw1pbnRlcnZhbCAmIG9wZXJhdG9yIC09
KCBjb25zdCBUJik7DWludGVydmFsICYgb3BlcmF0b3IgKj0oIGNvbnN0IFQmKTsNaW50ZXJ2
YWwgJiBvcGVyYXRvciAvPSggY29uc3QgVCYpOw10ZW1wbGF0ZSA8Y2xhc3MgVT4gaW50ZXJ2
YWwgJiBvcGVyYXRvciA9KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7DXRlbXBsYXRlIDxjbGFz
cyBVPiBpbnRlcnZhbCAmIG9wZXJhdG9yICs9KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7DXRl
bXBsYXRlIDxjbGFzcyBVPiBpbnRlcnZhbCAmIG9wZXJhdG9yIC09KCBjb25zdCBpbnRlcnZh
bCA8VSA+Jik7DXRlbXBsYXRlIDxjbGFzcyBVPiBpbnRlcnZhbCAmIG9wZXJhdG9yICo9KCBj
b25zdCBpbnRlcnZhbCA8VSA+Jik7DXRlbXBsYXRlIDxjbGFzcyBVPiBpbnRlcnZhbCAmIG9w
ZXJhdG9yIC89KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7DXN0YXRpYyBpbnRlcnZhbCB3aG9s
ZSAoKTsNfTsNfSANLy8gb2YgbmFtZXNwYWNlIHN0ZA0yNi42LjMgaW50ZXJ2YWwgbnVtZXJp
YyBzcGVjaWFsaXphdGlvbnMgW2xpYi5pbnRlcnZhbC5zcGVjaWFsXQ1uYW1lc3BhY2Ugc3Rk
IHsNDXRlbXBsYXRlIDw+IGNsYXNzIGludGVydmFsIDxmbG9hdCA+DXsNZmxvYXQgZGF0YSBb
Ml07DXB1YmxpYyA6DXR5cGVkZWYgZmxvYXQgdmFsdWVfdHlwZSA7DWludGVydmFsICgpOw1p
bnRlcnZhbCAoIGNvbnN0IGNoYXIgKik7DWludGVydmFsICggY29uc3QgZmxvYXQgJiB0KTsN
aW50ZXJ2YWwgKCBjb25zdCBmbG9hdCAmIGxvICwgY29uc3QgZmxvYXQgJiBoaSApOw1leHBs
aWNpdCBpbnRlcnZhbCAoIGNvbnN0IGRvdWJsZSAmIHQpOw1pbnRlcnZhbCAoIGNvbnN0IGRv
dWJsZSAmIGxvICwgY29uc3QgZG91YmxlICYgaGkgKTsNZXhwbGljaXQgaW50ZXJ2YWwgKCBj
b25zdCBsb25nIGRvdWJsZSAmIHQpOw1pbnRlcnZhbCAoIGNvbnN0IGxvbmcgZG91YmxlICYg
bG8gLCBjb25zdCBsb25nIGRvdWJsZSAmIGhpICk7DWV4cGxpY2l0IGludGVydmFsICggY29u
c3QgaW50ZXJ2YWwgPGRvdWJsZSA+Jik7DWV4cGxpY2l0IGludGVydmFsICggY29uc3QgaW50
ZXJ2YWwgPCBsb25nIGRvdWJsZSA+Jik7DWJvb2wgZW1wdHkgYm9vbCBpc19lbXB0eV9pbnRl
cnZhbCgpIGNvbnN0IDsNZmxvYXQgbG93ZXIgKCkgY29uc3QgOw1mbG9hdCB1cHBlciAoKSBj
b25zdCA7DWludGVydmFsIDxmbG9hdCA+JiBvcGVyYXRvciA9KCBjb25zdCBmbG9hdCAmKTsN
aW50ZXJ2YWwgPGZsb2F0ID4mIG9wZXJhdG9yICs9KCBjb25zdCBmbG9hdCAmKTsNaW50ZXJ2
YWwgPGZsb2F0ID4mIG9wZXJhdG9yIC09KCBjb25zdCBmbG9hdCAmKTsNaW50ZXJ2YWwgPGZs
b2F0ID4mIG9wZXJhdG9yICo9KCBjb25zdCBmbG9hdCAmKTsNaW50ZXJ2YWwgPGZsb2F0ID4m
IG9wZXJhdG9yIC89KCBjb25zdCBmbG9hdCAmKTsNdGVtcGxhdGUgPGNsYXNzIFU+IGludGVy
dmFsIDxmbG9hdCA+JiBvcGVyYXRvciA9KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7DXRlbXBs
YXRlIDxjbGFzcyBVPiBpbnRlcnZhbCA8ZmxvYXQgPiYgb3BlcmF0b3IgKz0oIGNvbnN0IGlu
dGVydmFsIDxVID4mKTsNdGVtcGxhdGUgPGNsYXNzIFU+IGludGVydmFsIDxmbG9hdCA+JiBv
cGVyYXRvciAtPSggY29uc3QgaW50ZXJ2YWwgPFUgPiYpOw10ZW1wbGF0ZSA8Y2xhc3MgVT4g
aW50ZXJ2YWwgPGZsb2F0ID4mIG9wZXJhdG9yICo9KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7
DXRlbXBsYXRlIDxjbGFzcyBVPiBpbnRlcnZhbCA8ZmxvYXQgPiYgb3BlcmF0b3IgLz0oIGNv
bnN0IGludGVydmFsIDxVID4mKTsNc3RhdGljIGludGVydmFsIDxmbG9hdCA+IHdob2xlICgp
Ow19Ow0xMCh3YXMgcHJldmlvdXMgcGFnZSBudW1iZXIpDQ10ZW1wbGF0ZSA8PiBjbGFzcyBp
bnRlcnZhbCA8ZG91YmxlID4New1kb3VibGUgZGF0YSBbMl07DXB1YmxpYyA6DXR5cGVkZWYg
ZG91YmxlIHZhbHVlX3R5cGUgOw1pbnRlcnZhbCAoKTsNaW50ZXJ2YWwgKCBjb25zdCBjaGFy
ICopOw1pbnRlcnZhbCAoIGNvbnN0IGRvdWJsZSAmIHQpOw1pbnRlcnZhbCAoIGNvbnN0IGRv
dWJsZSAmIGxvICwgY29uc3QgZG91YmxlICYgaGkgKTsNZXhwbGljaXQgaW50ZXJ2YWwgKCBj
b25zdCBsb25nIGRvdWJsZSAmIHQpOw1pbnRlcnZhbCAoIGNvbnN0IGxvbmcgZG91YmxlICYg
bG8gLCBjb25zdCBsb25nIGRvdWJsZSAmIGhpICk7DWludGVydmFsICggY29uc3QgaW50ZXJ2
YWwgPGZsb2F0ID4mKTsNZXhwbGljaXQgaW50ZXJ2YWwgKCBjb25zdCBpbnRlcnZhbCA8IGxv
bmcgZG91YmxlID4mKTsNYm9vbCBlbXB0eSBib29sIGlzX2VtcHR5X2ludGVydmFsKCkgY29u
c3QgOw1kb3VibGUgbG93ZXIgKCkgY29uc3QgOw1kb3VibGUgdXBwZXIgKCkgY29uc3QgOw1p
bnRlcnZhbCA8ZG91YmxlID4mIG9wZXJhdG9yID0oIGNvbnN0IGRvdWJsZSAmKTsNaW50ZXJ2
YWwgPGRvdWJsZSA+JiBvcGVyYXRvciArPSggY29uc3QgZG91YmxlICYpOw1pbnRlcnZhbCA8
ZG91YmxlID4mIG9wZXJhdG9yIC09KCBjb25zdCBkb3VibGUgJik7DWludGVydmFsIDxkb3Vi
bGUgPiYgb3BlcmF0b3IgKj0oIGNvbnN0IGRvdWJsZSAmKTsNaW50ZXJ2YWwgPGRvdWJsZSA+
JiBvcGVyYXRvciAvPSggY29uc3QgZG91YmxlICYpOw10ZW1wbGF0ZSA8Y2xhc3MgVT4gaW50
ZXJ2YWwgPGRvdWJsZSA+JiBvcGVyYXRvciA9KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7DXRl
bXBsYXRlIDxjbGFzcyBVPiBpbnRlcnZhbCA8ZG91YmxlID4mIG9wZXJhdG9yICs9KCBjb25z
dCBpbnRlcnZhbCA8VSA+Jik7DXRlbXBsYXRlIDxjbGFzcyBVPiBpbnRlcnZhbCA8ZG91Ymxl
ID4mIG9wZXJhdG9yIC09KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7DXRlbXBsYXRlIDxjbGFz
cyBVPiBpbnRlcnZhbCA8ZG91YmxlID4mIG9wZXJhdG9yICo9KCBjb25zdCBpbnRlcnZhbCA8
VSA+Jik7DXRlbXBsYXRlIDxjbGFzcyBVPiBpbnRlcnZhbCA8ZG91YmxlID4mIG9wZXJhdG9y
IC89KCBjb25zdCBpbnRlcnZhbCA8VSA+Jik7DXN0YXRpYyBpbnRlcnZhbCA8ZG91YmxlID4g
d2hvbGUgKCk7DX07DXRlbXBsYXRlIDw+IGNsYXNzIGludGVydmFsIDwgbG9uZyBkb3VibGUg
Pg17DWxvbmcgZG91YmxlIGRhdGEgWzJdOw1wdWJsaWMgOg10eXBlZGVmIGxvbmcgZG91Ymxl
IHZhbHVlX3R5cGUgOw1pbnRlcnZhbCAoKTsNaW50ZXJ2YWwgKCBjb25zdCBjaGFyICopOw1p
bnRlcnZhbCAoIGNvbnN0IGxvbmcgZG91YmxlICYgdCk7DWludGVydmFsICggY29uc3QgbG9u
ZyBkb3VibGUgJiBsbyAsIGNvbnN0IGxvbmcgZG91YmxlICYgaGkgKTsNaW50ZXJ2YWwgKCBj
b25zdCBpbnRlcnZhbCA8ZmxvYXQgPiYpOw1pbnRlcnZhbCAoIGNvbnN0IGludGVydmFsIDxk
b3VibGUgPiYpOw1ib29sIGVtcHR5IGJvb2wgaXNfZW1wdHlfaW50ZXJ2YWwoKSBjb25zdCA7
DWxvbmcgZG91YmxlIGxvd2VyICgpIGNvbnN0IDsNbG9uZyBkb3VibGUgdXBwZXIgKCkgY29u
c3QgOw1pbnRlcnZhbCA8IGxvbmcgZG91YmxlID4mIG9wZXJhdG9yID0oIGNvbnN0IGxvbmcg
ZG91YmxlICYpOw1pbnRlcnZhbCA8IGxvbmcgZG91YmxlID4mIG9wZXJhdG9yICs9KCBjb25z
dCBsb25nIGRvdWJsZSAmKTsNaW50ZXJ2YWwgPCBsb25nIGRvdWJsZSA+JiBvcGVyYXRvciAt
PSggY29uc3QgbG9uZyBkb3VibGUgJik7DTExKHdhcyBwcmV2aW91cyBwYWdlIG51bWJlcikN
DWludGVydmFsIDwgbG9uZyBkb3VibGUgPiYgb3BlcmF0b3IgKj0oIGNvbnN0IGxvbmcgZG91
YmxlICYpOw1pbnRlcnZhbCA8IGxvbmcgZG91YmxlID4mIG9wZXJhdG9yIC89KCBjb25zdCBs
b25nIGRvdWJsZSAmKTsNdGVtcGxhdGUgPGNsYXNzIFU+IGludGVydmFsIDwgbG9uZyBkb3Vi
bGUgPiYgb3BlcmF0b3IgPSggY29uc3QgaW50ZXJ2YWwgPFUgPiYpOw10ZW1wbGF0ZSA8Y2xh
c3MgVT4gaW50ZXJ2YWwgPCBsb25nIGRvdWJsZSA+JiBvcGVyYXRvciArPSggY29uc3QgaW50
ZXJ2YWwgPFUgPiYpOw10ZW1wbGF0ZSA8Y2xhc3MgVT4gaW50ZXJ2YWwgPCBsb25nIGRvdWJs
ZSA+JiBvcGVyYXRvciAtPSggY29uc3QgaW50ZXJ2YWwgPFUgPiYpOw10ZW1wbGF0ZSA8Y2xh
c3MgVT4gaW50ZXJ2YWwgPCBsb25nIGRvdWJsZSA+JiBvcGVyYXRvciAqPSggY29uc3QgaW50
ZXJ2YWwgPFUgPiYpOw10ZW1wbGF0ZSA8Y2xhc3MgVT4gaW50ZXJ2YWwgPCBsb25nIGRvdWJs
ZSA+JiBvcGVyYXRvciAvPSggY29uc3QgaW50ZXJ2YWwgPFUgPiYpOw1zdGF0aWMgaW50ZXJ2
YWwgPCBsb25nIGRvdWJsZSA+IHdob2xlICgpOw19Ow19IA0vLyBvZiBuYW1lc3BhY2Ugc3Rk
DQ0yNi42LjQgaW50ZXJ2YWwgbWVtYmVyIGZ1bmN0aW9ucyBbbGliLmludGVydmFsLm1lbWJl
cnNdDQ1pbnRlcnZhbCAoKTsNMSBFZmZlY3RzOiBDb25zdHJ1Y3RzIGFuIGVtcHR5IGludGVy
dmFsLg0yIFBvc3Rjb25kaXRpb246IHRoaXMtPmVtcHR5KCkgaXMgdHJ1ZS4NDWludGVydmFs
ICggY29uc3QgY2hhciAqcyk7DTMgRWZmZWN0czogQ29uc3RydWN0cyBhbiBpbnRlcnZhbCBi
eSBleHRyYWN0aW5nIGFuIGludGVydmFsIGZyb20gdGhlIG51bGwtdGVybWluYXRlZCBieXRl
IHN0cmluZyAFcyBwb2ludGVkIHRvIGJ5IHMuDTQgTm90ZXM6IFVuZGVmaW5lZCBpZiB0aGUg
c3RyaW5nIHBvaW50ZWQgYnkgcyBjYW5ub3QgYmUgcGFyc2VkIGFzIGFuIGludGVydmFsLiBU
aGUgd2hvbGUgb2YgcyBtdXN0IHJlcHJlc2VudCBhbiBpbnRlcnZhbCBhY2NvcmRpbmcgdG8g
dGhlIGlucHV0IGxheW91dCBkZXNjcmliZWQgaW4gMjYuNi4xMi4NDWludGVydmFsICggY29u
c3QgVCYgdHgpOw01IEVmZmVjdHM6IENvbnN0cnVjdHMgYW4gaW50ZXJ2YWwgZW5jbG9zaW5n
IHt0fS4NNiBQb3N0Y29uZGl0aW9uOiBsb3dlcigpID09IHQgJiYgdXBwZXIoKSA9PSB0IGlm
IHQgaXMgYSBmaW5pdGUgbnVtYmVyLg1Ob3RlczogSWYgdGhlIHZhbHVlIG9mIHQgaXMgbm90
IGEgbnVtYmVyLCBpbnRlcnZhbCh0KSBzaGFsbCBiZSBlbXB0eS4gSWYgdGhlIHZhbHVlIG9m
IHQgaXMgaW5maW5pdGUsIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBmaW5pdGUgbnVt
YmVyIHRvIGJpZyB0byBiZSByZXByZXNlbnRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBp
bnRlcnZJZGVudGljYWwgdG8gdGhlIGVmZmVjdHMgb2YgaW50ZXJ2YWwoeCx4KS4NDWludGVy
dmFsICggY29uc3QgVCYgbG8gLCBjb25zdCBUJiBoaSApOw04IEVmZmVjdHM6IElmIGxvIGFu
ZCBoaSBob2xkIG51bWJlcnMgYSBhbmQgYiwgdGhpcyBjb25zdHJ1Y3RzIGFuIElULWVuY2xv
c3VyZSBYIG9mIHRoZSBzZXQgWCBvZiBhbGwgeCBpbiB0aGUgYWJzdHJhY3QgbW9kZWyScyBu
dW1iZXIgc3lzdGVtIHRoYXQgc2F0aXNmeSBhICggeCAoYiAsIG90aGVyd2lzZSByYWlzZXMg
YW4gZXhjZXB0aW9uLg05IE5vdGVzOiBUaGlzIGRlc2NyaXB0aW9uIGhhcyB0aGUgZm9sbG93
aW5nIGNhc2VzIGFuZCBjb25zZXF1ZW5jZXMuDWEuIEFuIGV4Y2VwdGlvbiBpcyByYWlzZWQg
aWYsIGFuZCBvbmx5IGlmLCBsbyBvciBoaSBpcyBub3QgYSBudW1iZXIuDWIuIFRoZSByZXN1
bHQgaXMgbW9kZWwtIGFuZCBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGlmIGxvIG9yIGhpIGlz
IGluZmluaXRlLiBUaGUgbW9kZWwgbWF5IGJlIGFuIFItbW9kZWwgb3IgYW4gUiotbW9kZWws
IGFuZCB0aGUgVCBudW1iZXIgc3lzdGVtIG1heSBvciBtYXkgbm90IHN1cHBvcnQgKDogdGhl
c2UgY2FzZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIFdpdGggYW4gUi1tb2Rl
bCBhbmQgaWYgVCBzdXBwb3J0cyAoLCB0aGlzIGxldHMgb25lIHNwZWNpZnkgaW5maW5pdGUg
aW50ZXJ2YWxzIHN1Y2ggYXMgWzEsKCkuIEhvd2V2ZXIgaXQgaXMgbm90IG1hbmRhdG9yeSBm
b3IgdGhlIG1vZGVsIHRvIHN1cHBvcnQgaW5maW5pdGUgaW50ZXJ2YWxzIGV4Y2VwdCBmb3Ig
d2hvbGUsIHNvIHRoZSBhY3R1YWwgaW50ZXJ2YWwgcmV0dXJuZWQgYnkgaW50ZXJ2YWwoMixp
bmZpbml0eSkgbWlnaHQgYmUgd2hvbGUuIFRoaXMgaXMgYSBRT0kgaXNzdWUuDWMuIFggaXMg
ZW1wdHkgaWYgYSA+IGIuIEluIHRoaXMgY2FzZSBlbXB0eSBtdXN0IGJlIHJldHVybmVkLg1k
LiBJZiB0aGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgYm91bmRzIGRhdGEgcmVwcmVzZW50
YXRpb24gdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWUgWCBpcyBleHBlY3RlZCB0byByZXByZXNl
bnQgWCBleGFjdGx5IHdoZW5ldmVyIFggaXMgZGVmaW5lZCwgaG93ZXZlciB0aGlzIGlzIGEg
UU9JIGlzc3VlLiBJZiB0aGUgbWlkcG9pbnQtcmFkaXVzIHJlcHJlc2VudGF0aW9uIGlzIHVz
ZWQgdGhlbgAgAFgAIABjAGEAbgBuAG8AdAAgAG4AZQBjAGUAcwBzAGEAcgBpAGwAeQAgAHIA
ZQBwAHIAZQBzAGUAbgB0ACAAWAAgAGUAeABhAGMAdABsAHkALAAgAGYAbwByACAAaQBuAHMA
dABhAG4AYwBlACAAaQBmACAAbABvACAAYQBuAGQAIABoAGkAIABoAG8AbABkACAAdAB3AG8A
IABjAG8AbgBzAGUAYwB1AHQAaQB2AGUAIABUAC0AbgB1AG0AYgBlAHIAcwAuACAAQwBvAG4A
cwB0AHIAdQBjAHQAcwAgAGEAbgAgAGkAbgB0AGUAcgB2AGEAbAAgAGUAbgBjAGwAbwBzAGkA
bgBnACAAewB4ACAAfAAgAGwAbwAgAF8AIAB4ACAAXwAgAGgAaQB9AC4ADQA5ACAAUABvAHMA
dABjAG8AbgBkAGkAdABpAG8AbgA6ACAAbABvAHcAZQByACgAKQAgAD0APQAgAGwAbwAgACYA
JgAgAHUAcABwAGUAcgAoACkAIAA9AD0AIABoAGkAIABpAGYAIABsAG8AIABfACAAaABpACwA
IABvAHQAaABlAHIAdwBpAHMAZQAgAHQAaABpAHMALQA+AGUAbQBwAHQAeQAoACkAIABpAHMA
IAB0AHIAdQBlAC4ADQAxADAAIABOAG8AdABlAHMAOgAgAFUAbgBkAGUAZgBpAG4AZQBkACAA
aQBmACAAbABvACAAaQBzACAAbgBlAGkAdABoAGUAcgAgAGEAIABmAGkAbgBpAHQAZQAgAG4A
dQBtAGIAZQByACAAbgBvAHIAIAASIqUALAAgAG8AcgAgAGkAZgAgAGgAaQAgAGkAcwAgAG4A
ZQBpAHQAaABlAHIAIABhACAAZgBpAG4AaQB0AGUAIABuAHUAbQBiAGUAcgAgAG4AbwByACAA
KwClAC4ADQANAHQAZQBtAHAAbABhAHQAZQAgADwAIABjAGwAYQBzAHMAIABVAD4AIABpAG4A
dABlAHIAdgBhAGwAIAAoACAAYwBvAG4AcwB0ACAAVQAmACAAeAApADsADQAxADEAIABFAGYA
ZgBlAGMAdABzADoAIABJAGQAZQBuAHQAaQBjAGEAbAAgAHQAbwAgAHQAaABlACAAZQBmAGYA
ZQBjAHQAcwAgAG8AZgAgAGkAbgB0AGUAcgB2AGEAbAAoAHgALAB4ACkALgANADEAMQAgAEUA
ZgBmAGUAYwB0AHMAOgAgAEMAbwBuAHMAdAByAHUAYwB0AHMAIABhAG4AIABpAG4AdABlAHIA
dgBhAGwAIABjAG8AbgB0AGEAaQBuAGkAbgBnACAAeAAuAA0AMQAyACAATgBvAHQAZQBzADoA
IABVAG5kZWZpbmVkIGlmIHggaXMgbm90IGEgZmluaXRlIG51bWJlci4NdGVtcGxhdGUgPCBj
bGFzcyBVPiBpbnRlcnZhbCAoIGNvbnN0IFUmIGxvICwgY29uc3QgVSYgaGkgKTsNMTMgRWZm
ZWN0czogSWYgbG8gYW5kIGhpIGhvbGQgbnVtYmVycyBhIGFuZCBiLCB0aGlzIGNvbnN0cnVj
dHMgYW4gSVQtZW5jbG9zdXJlIFggb2YgdGhlIHNldCBYIG9mIGFsbCB4IGluIHRoZSBhYnN0
cmFjdCBtb2RlbJJzIG51bWJlciBzeXN0ZW0gdGhhdCBzYXRpc2Z5IGEgKCB4ICggYiAsIG90
aGVyd2lzZSByYWlzZXMgYW4gZXhjZXB0aW9uLg1FZmZlY3RzOiBDb25zdHJ1Y3RzIGFuIGlu
dGVydmFsIGVuY2xvc2luZyB7eCB8IGxvIF8geCBfIGhpfS4NMTQgTm90ZXM6IFRoZSBub3Rl
cyBpbiBpdGVtIDkgYWJvdmUsIGFwcGx5Lg0xNCBQb3N0Y29uZGl0aW9uOiB0aGlzLT5lbXB0
eSgpIGlzIHRydWUgaWYgbG8gXyBoaSBpcyBmYWxzZS4NMTUgTm90ZXM6IFVuZGVmaW5lZCBp
ZiBsbyBpcyBuZWl0aGVyIGEgZmluaXRlIG51bWJlcgAgAG4AbwByACAAEiKlACwAIABvAHIA
IABpAGYAIABoAGkAIABpAHMAIABuAGUAaQB0AGgAZQByACAAYQAgAGYAaQBuAGkAdABlACAA
bgB1AG0AYgBlAHIAIABuAG8AcgAgACsApQAuAA0AdABlAG0AcABsAGEAdABlACAAPABjAGwA
YQBzAHMAIABVAD4AIABpAG4AdABlAHIAdgBhAGwAIAAoACAAYwBvAG4AcwB0ACAAaQBuAHQA
ZQByAHYAYQBsACAAPABVACAAPgAmACAAWABVACkAOwANADEAMgAoAHcAYQBzACAAcAByAGUA
dgBpAG8AdQBzACAAcABhAGcAZQAgAG4AdQBtAGIAZQByACkADQANADEANgAgAEUAZgBmAGUA
YwB0AHMAOgAgAEMAbwBuAHMAdAByAHUAYwB0AHMAIABhAG4AIABpAG4AdABlAHIAdgBhAGwA
IABYACAAZQBuAGMAbABvAHMAaQBuAGcAIAB0AGgAZQAgAGkAbgB0AGUAcgB2AGEAbAAgACAA
ewB4ACAAMgAgAFgAfQAuAFgAVQAuAA0AMQA3ACAAUABvAHMAdABjAG8AbgBkAGkAdABpAG8A
bgA6ACAAdABoAGkAcwAtAD4AZQBtAHAAdAB5ACgAKQAgAD0APQAgAFgALgBlAG0AcAB0AHkA
KAApLk5vdGVzOiBUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGNhc2VzIGFuZCBjb25zZXF1ZW5j
ZXMuDWEuIFggYW5kIFhVIGhhdmUgdGhlIHNhbWUgYWJzdHJhY3QgbW9kZWwgYnV0IGRpZmZl
cmVudCBwcmVjaXNpb25zLg1iLiBJZiBVIGlzIG9mIGEgbG93ZXIgcHJlY2lzaW9uIHRoYW4g
VCB0aGVuIFggc2hvdWxkIHJlcHJlc2VudCB0aGUgc2FtZSBtYXRoZW1hdGljYWwgaW50ZXJ2
YWwgYXMgWFUsIGhvd2V2ZXIgdGhpcyBpcyBhIFFPSSBpc3N1ZS4NYy4gSWYgVSBpcyBvZiBh
IGhpZ2hlciBwcmVjaXNpb24gdGhhbiBUIHRoZW4gaXQgaXMgcG9zc2libGUgdGhhdCB0aGUg
Ym91bmRzIG9mIFhVIGFyZSBiZXlvbmQgdGhlIGxhcmdlc3QgVC1yZXByZXNlbnRhYmxlIG51
bWJlciwgc28gdGhhdCBhIGZpbml0ZSBpbnRlcnZhbCBtYXkgYmUgY29udmVydGVkIHRvIGFu
IGluZmluaXRlIG9uZS4NZC4gVGhpcyBmdW5jdGlvbiBuZXZlciB0aHJvd3MgYW4gZXhjZXB0
aW9uLiANDWJvb2wgZW1wdHkgYm9vbCBpc19lbXB0eV9pbnRlcnZhbCgpIGNvbnN0IDsNMTgg
UmV0dXJuczogdHJ1ZSBpZiAgKnRoaXMgaXMgcmVwcmVzZW50cyB0aGUgZW1wdHkgc2V0LCBl
bHNlIGZhbHNlLg0NVCBsb3dlciAoKSBjb25zdCA7DTE5IFJldHVybnM6IHRoZSBhIGxvd2Vy
IGJvdW5kIG9mIHRoZSBpbnRlcnZhbCBYIHJlcHJlc2VudGVkIGJ5ICp0aGlzLg0yMCBOb3Rl
OiBVbmRlZmluZWQgaWYgKnRoaXMgaXMgZW1wdHkuDVQgdXBwZXIgKCkgY29uc3QgOw0yMSBS
ZXR1cm5zOiB0aGUgYW4gdXBwZXIgYm91bmQgb2YgdGhlIGludGVydmFsIFggcmVwcmVzZW50
ZWQgYnkgKnRoaXMuDTIyIE5vdGVzOiBUaGVzZSBhcHBseSB0byBsb3dlcigpIGFuZCB1cHBl
cigpLg1hLiBUaGUgZXhhY3QgbG93ZXIgb3IgdXBwZXIgYm91bmQgc2hvdWxkIGJlIHJldHVy
bmVkIGlmIGl0IGlzIGV4YWN0bHkgVC1yZXByZXNlbnRhYmxlLCBob3dldmVyIHRoaXMgaXMg
YSBRT0kgaXNzdWUuIEEgYm91bmQgaXMgaW4gZ2VuZXJhbCBub3QgZXhhY3RseSBULXJlcHJl
c2VudGFibGUgaWYgdGhlIG1pZHBvaW50LXJhZGl1cyBkYXRhIHJlcHJlc2VudGF0aW9uIGlz
IHVzZWQuDWIuIFRoZSByZXN1bHQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBpZiB0aGUg
Ym91bmQgaXMgaW5maW5pdGUgYW5kIHRoZSBUIG51bWJlciBzeXN0ZW0gZG9lcyBub3Qgc3Vw
cG9ydCAoLg1jLiBUaGUgcmVzdWx0IGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgaWYgWFVu
ZGVmaW5lZCBpZiAqdGhpcyBpcyBlbXB0ZW1wdHkuIENvbXBhcmUgaW5mKCkgYW5kIHN1cCgp
LCB3aGljaCByZXR1cm4gKyggYW5kICgoIG9uIHRoZSBlbXB0eSBzZXQueS4NDTI2LjYuNSBp
bnRlcnZhbCBtZW1iZXIgb3BlcmF0b3JzIFtsaWIuaW50ZXJ2YWwubWVtYmVycy5vcHNdDXRl
bXBsYXRlIDwgY2xhc3MgVT4gaW50ZXJ2YWwgPFQgPiYgb3BlcmF0b3IgPSggY29uc3QgaW50
ZXJ2YWwgPFUgPiYgcmhzIFhVICk7DTEgRWZmZWN0czogSWRlbnRpY2FsIHRvIHRoZSBlZmZl
Y3Qgb2YgY29udmVydGluZyBYVSB0byBpbnRlcnZhbDxUPiBhbmQgdGhlbiBhc3NpZ25pbmcu
IFRoYXQgaXMsIFN0b3JlcyBhbiBlbmNsb3N1cmUgb2Yge3ggfCB4IDIgcmhzfS5YID0gWFU7
IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgWCA9IGludGVydmFsPFQ+KFhVKTsNMiBQb3N0Y29u
ZGl0aW9uOiB0aGlzLT5lbXB0eSgpID09IHJocy5lbXB0eSgzKS4zIFJldHVybnM6ICp0aGlz
Lg0NdGVtcGxhdGUgPCBjbGFzcyBVPiBpbnRlcnZhbCA8VCA+JiBvcGVyYXRvciArPSggY29u
c3QgVSYgcmhzICk7DTQgUmV0dXJuczogKnRoaXMgKz0gaW50ZXJ2YWw8VD4ocmhzKS4NDXRl
bXBsYXRlIDwgY2xhc3MgVT4gaW50ZXJ2YWwgPFQgPiYgb3BlcmF0b3IgLT0oIGNvbnN0IFUm
IHJocyApOw01IFJldHVybnM6ICp0aGlzIC09IGludGVydmFsPFQ+KHJocykuDQ10ZW1wbGF0
ZSA8IGNsYXNzIFU+IGludGVydmFsIDxUID4mIG9wZXJhdG9yICo9KCBjb25zdCBVJiByaHMg
KTsNNiBSZXR1cm5zOiAqdGhpcyAqPSBpbnRlcnZhbDxUPihyaHMpLg0NdGVtcGxhdGUgPCBj
bGFzcyBVPiBpbnRlcnZhbCA8VCA+JiBvcGVyYXRvciAvPSggY29uc3QgVSYgcmhzICk7DTcg
UmV0dXJuczogKnRoaXMgLz0gaW50ZXJ2YWw8VD4ocmhzKS4NDXRlbXBsYXRlIDwgY2xhc3Mg
VT4gaW50ZXJ2YWwgPFQgPiYgb3BlcmF0b3IgKz0oIGNvbnN0IGludGVydmFsIDxVID4mIHJo
cyApOw04IEVmZmVjdHM6IExldCAqdGhpcyBhbmQgcmhzIHJlcHJlc2VudCB0aGUgaW50ZXJ2
YWxzIFggYW5kIFkgb24gZW50cnkuIFN0b3JlcyBpbiAqdGhpcywgYW5kIHJldHVybnMsIGFu
IGVuY2xvc3VyZSBvZiB7eCt5IHwgeCAyICp0aGlzIGFuZCB5IDIgcmhzfSBpbiAqdGhpcy4N
OSBSZXR1cm5zOiAqdGhpcy50aGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBYICsgWSAuDTkgTm90
ZTogVGhlIGVmZmVjdCBpcyBtb2RlbC1kZWZpbmVkIGlmIGVpdGhlciBvZiBYIGFuZCBZIGlz
IGluZmluaXRlLg0NdGVtcGxhdGUgPCBjbGFzcyBVPiBpbnRlcnZhbCA8VCA+JiBvcGVyYXRv
ciAtPSggY29uc3QgaW50ZXJ2YWwgPFUgPgAmACAAcgBoAHMAIAApADsADQAxADAAIABFAGYA
ZgBlAGMAdABzADoAIABMAGUAdAAgACoAdABoAGkAcwAgAGEAbgBkACAAcgBoAHMAIAByAGUA
cAByAGUAcwBlAG4AdAAgAHQAaABlACAAaQBuAHQAZQByAHYAYQBsAHMAIABYACAAYQBuAGQA
IABZACAAbwBuACAAZQBuAHQAcgB5AC4AIABTAHQAbwByAGUAcwAgAGkAbgAgACoAdABoAGkA
cwAsACAAYQBuAGQAIAByAGUAdAB1AHIAbgBzACwAIABhAG4AIABlAG4AYwBsAG8AcwB1AHIA
ZQAgAG8AZgAgAHQAaABlACAAbQBhAHQAaABlAG0AYQB0AGkAYwBhAGwAIAByAGUAcwB1AGwA
dAAgAFgAIAAoACAAWQAgAC4ARQBmAGYAZQBjAHQAcwA6ACAAUwB0AG8AcgBlAHMAIABhAG4A
IABlAG4AYwBsAG8AcwB1AHIAZQAgAG8AZgAgAHsAeAASInkAIAB8ACAAeAAgADIAIAAqAHQA
aABpAHMAIABhAG4AZAAgAHkAIAAyACAAcgBoAHMAfQAgAGkAbgAgACoAdABoAGkAcwAuAA0A
MQAxACAAUgBlAHQAdQByAG4AcwA6ACAAKgB0AGgAaQBzAC4ADQAxADMAKAB3AGEAcwAgcHJl
dmlvdXMgcGFnZSBudW1iZXIpDTExIE5vdGU6IFRoZSBlZmZlY3QgaXMgbW9kZWwtZGVmaW5l
ZCBpZiBlaXRoZXIgb2YgWCBhbmQgWSBpcyBpbmZpbml0ZS4NDXRlbXBsYXRlIDwgY2xhc3Mg
VT4gaW50ZXJ2YWwgPFQgPiYgb3BlcmF0b3IgKj0oIGNvbnN0IGludGVydmFsIDxVID4mIHJo
cyApOw0xMiBFZmZlY3RzOiBMZXQgKnRoaXMgYW5kIHJocyByZXByZXNlbnQgdGhlIGludGVy
dmFscyBYIGFuZCBZIG9uIGVudHJ5LiBTdG9yZXMgaW4gKnRoaXMsIGFuZCByZXR1cm5zLCBh
biBlbmNsb3N1cmUgb2YgdGhlIG1hdGhlbWF0aWNhbCByZXN1bHQgWCAoIFkgLg0xMyBOb3Rl
OiBUaGUgZWZmZWN0IGlzIG1vZGVsLWRlZmluZWQgaWYgZWl0aGVyIG9mIFggYW5kIFkgaXMg
aW5maW5pdGUuDQ1FZmZlY3RzOiBTdG9yZXMgYW4gZW5jbG9zdXJlIG9mIHt413kgfCB4IDIg
KnRoaXMgYW5kIHkgMiByaHN9IGluICp0aGlzLg0xMyBSZXR1cm5zOiAqdGhpcy4NdGVtcGxh
dGUgPCBjbGFzcyBVPiBpbnRlcnZhbCA8VCA+JiBvcGVyYXRvciAvPSggY29uc3QgaW50ZXJ2
YWwgPFUgPiYgcmhzICk7DTE0IEVmZmVjdHM6IExldCAqdGhpcyBhbmQgcmhzIHJlcHJlc2Vu
dCB0aGUgaW50ZXJ2YWxzIFggYW5kIFkgb24gZW50cnkuIFN0b3JlcyBpbiAqdGhpcywgYW5k
IHJldHVybnMsIGFuIGVuY2xvc3VyZSBvZiB0aGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBYIC8g
WSAuDUVmZmVjdHM6IFN0b3JlcyBhbiBlbmNsb3N1cmUgb2Yge3gveSB8IHggMiAqdGhpcyBh
bmQgeSAyIHJocyBhbmQgeSA2PSAwfSBpbiAqdGhpcy4NMTUgUmV0dXJuczogKnRoaXMuDTE2
IE5vdGU6IElmIG9ubHkgb25lIGJvdW5kIG9mIHJocyBpcyB6ZXJvIGFuZCAqdGhpcyBkb2Vz
IG5vdCBjb250YWluIGJvdGggbmVnYXRpdmUgYW5kIHBvc2l0aXZlIHZhbHVlcywgdGhlIHN0
b3JlZCBpbnRlcnZhbCBzaGFsbCBub3QgY29udGFpbiB2YWx1ZXMgdGhhdCBhcmUgb2YgYW4g
dW5leHBlY3RlZCBzaWduLiBJbiBwYXJ0aWN1bGFyIGl0IHNoYWxsIG5vdCBiZSBpbnRlcnZh
bDxUPjo6d2hvbGUoKVRoZSBlZmZlY3QgaXMgbW9kZWwtZGVmaW5lZCBpZiBlaXRoZXIgb2Yg
WCBhbmQgWSBpcyBpbmZpbml0ZSwgb3IgaWYgWSBjb250YWlucyB6ZXJvLiAuDTI2LjYuNiBp
bnRlcnZhbCBub24tbWVtYmVyIG9wZXJhdGlvbnMgW2xpYi5pbnRlcnZhbC5vcHNdDXRlbXBs
YXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9wZXJhdG9yICsoIGNvbnN0IGludGVydmFs
IDxUID4mIHhYKTsNMSBOb3RlczogVW5hcnkgb3BlcmF0b3IuDTIgUmV0dXJuczogaW50ZXJ2
YWw8VD4oeClYLg0NdGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0b3Ig
KyggY29uc3QgaW50ZXJ2YWwgPFQgPiYgbGhzICwgY29uc3QgaW50ZXJ2YWwgPFQgPiYgcmhz
ICk7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9wZXJhdG9yICsoIGNvbnN0
IGludGVydmFsIDxUID4mIGxocyAsIGNvbnN0IFQmIHJocyApOw10ZW1wbGF0ZSA8IGNsYXNz
IFQ+IGludGVydmFsIDxUPiBvcGVyYXRvciArKCBjb25zdCBUJiBsaHMgLCBjb25zdCBpbnRl
cnZhbCA8VCA+JiByaHMgKTsNMyBSZXR1cm5zOiBpbnRlcnZhbDxUPihsaHMpICs9IHJocy4N
DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9wZXJhdG9yIC0oIGNvbnN0IGlu
dGVydmFsIDxUID4mIFgpOw00IFJldHVybnNOb3RlczogVW5hcnkgb3BlcmF0b3JBbiBlbmNs
b3N1cmUgb2YgdGhlIG1hdGhlbWF0aWNhbCByZXN1bHQgKFgsIHdoZXJlIFggcmVwcmVzZW50
cyB0aGUgaW50ZXJ2YWwgWCAuDTUgUmV0dXJuc05vdGU6IElmIHRoZSBUIG51bWJlciBzeXN0
ZW0gaXMgc3ltbWV0cmljLCB0aGF0IGlzLCAoeCBpcyBleGFjdGx5IHJlcHJlc2VudGFibGUg
d2hlbmV2ZXIgeCBpcyBzbywgdGhlbiB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gKFgg
ZXhhY3RseSwgaG93ZXZlciB0aGlzIGlzIGEgUU9JIGlzc3VlLg1hIAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAaQBnAGgA
dAAgAGUAbgBjAGwAbwBzAHUAcgBlACAAbwBmACAAewASIngAIAB8ACAAeAAgADIAIABYAH0A
LgANAHQAZQBtAHAAbABhAHQAZQAgADwAIABjAGwAYQBzAHMAIABUAD4AIABpAG4AdABlAHIA
dgBhAGwAIAA8AFQAPgAgAG8AcABlAHIAYQB0AG8AcgAgAC0AKAAgAGMAbwBuAHMAdAAgAGkA
bgB0AGUAcgB2AGEAbAAgADwAVAAgAD4AJgAgAGwAaABzACAALAAgAGMAbwBuAHMAdAAgAGkA
bgB0AGUAcgB2AGEAbAAgADwAVAAgAD4AJgAgAHIAaABzACAAKQA7AA0AdABlAG0AcABsAGEA
dABlACAAPAAgAGMAbABhAHMAcwAgAFQAPgAgAGkAbgB0AGUAcgB2AGEAbAAgADwAVAA+ACAA
bwBwAGUAcgBhAHQAbwByACAALQAoACAAYwBvAG4AcwB0ACAAaQBuAHQAZQByAHYAYQBsACAA
PABUACAAPgAmACAAbABoAHMAIAAsACAAYwBvAG4AcwB0ACAAVAAmACAAcgBoAHMAIAApADsA
DQB0AGUAbQBwAGwAYQB0AGUAIAA8ACAAYwBsAGEAcwBzACAAVAA+ACAAaQBuAHQAZQByAHYA
YQBsACAAPABUAD4AIABvAHAAZXJhdG9yIC0oIGNvbnN0IFQmIGxocyAsIGNvbnN0IGludGVy
dmFsIDxUID4mIHJocyApOw02IFJldHVybnM6IGludGVydmFsPFQ+KGxocykgLT0gcmhzLg0N
dGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0b3IgKiggY29uc3QgaW50
ZXJ2YWwgPFQgPiYgbGhzICwgY29uc3QgaW50ZXJ2YWwgPFQgPiYgcmhzICk7DXRlbXBsYXRl
IDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9wZXJhdG9yICooIGNvbnN0IGludGVydmFsIDxU
ID4mIGxocyAsIGNvbnN0IFQmIHJocyApOw10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGludGVydmFs
IDxUPiBvcGVyYXRvciAqKCBjb25zdCBUJiBsaHMgLCBjb25zdCBpbnRlcnZhbCA8VCA+JiBy
aHMgKTsNNyBSZXR1cm5zOiBpbnRlcnZhbDxUPihsaHMpICo9IHJocy4NDXRlbXBsYXRlIDwg
Y2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IG9wZXJhdG9yIC8oIGNvbnN0IGludGVydmFsIDxUID4m
IGxocyAsIGNvbnN0IGludGVydmFsIDxUID4mIHJocyApOw10ZW1wbGF0ZSA8IGNsYXNzIFQ+
IGludGVydmFsIDxUPiBvcGVyYXRvciAvKCBjb25zdCBpbnRlcnZhbCA8VCA+JiBsaHMgLCBj
b25zdCBUJiByaHMgKTsNdGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gb3BlcmF0
b3IgLyggY29uc3QgVCYgbGhzICwgY29uc3QgaW50ZXJ2YWwgPFQgPiYgcmhzICk7DTggUmV0
dXJuczogaW50ZXJ2YWw8VD4obGhzKSAvPSByaHMuDQ0yNi42LjcgaW50ZXJ2YWwgSU8gb3Bl
cmF0aW9ucyBbbGliLmludGVydmFsLmlvXQ0xNCh3YXMgcHJldmlvdXMgcGFnZSBudW1iZXIp
DQ10ZW1wbGF0ZSA8IGNsYXNzIFQsIGNsYXNzIGNoYXJUICwgY2xhc3MgdHJhaXRzID4NYmFz
aWNfaXN0cmVhbSA8Y2hhclQgLCB0cmFpdHMgPiYNb3BlcmF0b3IgPj4oIGJhc2ljX2lzdHJl
YW0gPGNoYXJUICwgdHJhaXRzID4mIGlzICwgaW50ZXJ2YWwgPFQgPiYgaVgpOw0xIEVmZmVj
dHM6IEV4dHJhY3RzIGFuIGludGVydmFsIGkgb2YgdGhlIGZvcm06IHQsIFtdLCBbdF0sIG9y
IFt1O3ZdLCB3aGVyZSB1IGlzIHRoZSBsb3dlciBib3VuZCBhbmQgdiBpcyB0aGUgdXBwZXIg
Ym91bmRUaGUgc3RyZWFtIGlzdHJlYW0gaXMgcHJlcHJvY2Vzc2VkIGludG8gdG9rZW5zLCBh
bmQgd2hpdGUtc3BhY2UgZGlzY2FyZGVkLCBmb2xsb3dpbmcgc3RhbmRhcmQgQysrIHJ1bGVz
LiBUaGUgaGVhZCBvZiB0aGUgcmVzdWx0aW5nIHRva2VuIHN0cmVhbSBpcyBwYXJzZWQgYXMg
YSBtYXRoZW1hdGljYWwgaW50ZXJ2YWwgWCBmb2xsb3dpbmcgdGhlIHJ1bGVzIGluIDI2LjYu
MTIuIEFuIGVuY2xvc3VyZSBvZiBYIGlzIHRoZW4gc3RvcmVkIGluIFguDTIgUmVxdWlyZXNO
b3RlczogSWRlYWxseSBYIHNob3VsZCBiZSB0aGUgc21hbGxlc3QgSVQgLWVuY2xvc3VyZSBv
ZiBYLCBob3dldmVyIHRoaXMgaXMgYSBRT0kgaXNzdWUuIFRoZSBoYW5kbGluZyBvZiBpbmZp
bml0ZSBpbnRlcnZhbHMgaXMgbW9kZWwtZGVmaW5lZC4NVGhlIGlucHV0IHZhbHVlcyBiZSBj
b252ZXJ0aWJsZSB0byBULg1JZiBiYWQgaW5wdXQgaXMgZW5jb3VudGVyZWQsIHRoZSBmdW5j
dGlvbiBjYWxscyBpcy5zZXRzdGF0ZShpb3M6OmZhaWxiaXQpICh3aGljaCBtYXkgdGhyb3cg
aW9zOjpmYWlsdXJlIDI3LjQuNC4zKS4NMyBSZXR1cm5zOiBpcy4NDTQgTm90ZXM6IFRoaXMg
ZXh0cmFjdGlvbiBpcyBwZXJmb3JtZWQgYXMgYSBzZXJpZXMgb2Ygc2ltcGxlciBleHRyYWN0
aW9ucy4gVGhlcmVmb3JlLCB0aGUgc2tpcHBpbmcgb2Ygd2hpdGVzcGFjZSBpcyBzcGVjaWZp
ZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGVhY2ggb2YgdGhlIHNpbXBsZXIgZXh0cmFjdGlvbnMu
DTUgTm90ZXM6IFRoZSBleHRyYWN0aW9uIHJlc3BlY3RzIHRoZSBpbmNsdXNpb24gcHJvcGVy
dHk6IHRoZSBpbnRlcnZhbCBpIHNoYWxsIGVuY2xvc2UgYWxsIHRoZSB2YWx1ZXMgY29udGFp
bmVkIGluIHRoZSByZWFkIGludGVydmFsLg10ZW1wbGF0ZSA8IGNsYXNzIFQsIGNsYXNzIGNo
YXJUICwgY2xhc3MgdHJhaXRzID4NYmFzaWNfb3N0cmVhbSA8Y2hhclQgLCB0cmFpdHMgPiYN
b3BlcmF0b3IgPDwoIGJhc2ljX29zdHJlYW0gPGNoYXJUICwgdHJhaXRzID4mIG9zICwgY29u
c3QgaW50ZXJ2YWwgPFQgPiYgaVgpOw0NNiBFZmZlY3RzOiBJbnNlcnRzIHRoZSBpbnRlcnZh
bCBpIFggb250byB0aGUgc3RyZWFtIG9zIGFzIGlmIGl0IHdlcmUgaW1wbGVtZW50ZWQgYXMg
Zm9sbG93czoNW0NvbW1lbnQgYnkgSkRQOiB0aGlzIGNvZGUgc3RpbGwgbmVlZHMgYW1lbmRp
bmcgdG8gaGFuZGxlIGluZmluaXR5Ll0NdGVtcGxhdGUgPCBjbGFzcyBULCBjbGFzcyBjaGFy
VCAsIGNsYXNzIHRyYWl0cyA+DWJhc2ljX29zdHJlYW0gPGNoYXJUICwgdHJhaXRzID4mDW9w
ZXJhdG9yIDw8KCBiYXNpY19vc3RyZWFtIDxjaGFyVCAsIHRyYWl0cyA+JiBvcyAsIGNvbnN0
IGludGVydmFsIDxUID4mIGkpDXsNYmFzaWNfb3N0cmluZ3N0cmVhbSA8Y2hhclQgLCB0cmFp
dHMgPiBzOw1pZiAoaS4gZW1wdHkgKCkpDXMgPDwgIltdIjsNZWxzZSB7DXMuIGZsYWdzIChv
cy4gZmxhZ3MgKCkpOw1zLiBpbWJ1ZSAob3MuIGdldGxvYyAoKSk7DXMuIHByZWNpc2lvbiAo
b3MuIHByZWNpc2lvbiAoKSk7DXMgPDwgIlsiIDw8IGkuIGxvd2VyICgpIDw8ICI7IiA8PCBp
LiB1cHBlciAoKSA8PCAiXSI7DX0NcmV0dXJuIG9zIDw8IHMuc3RyICgpOw19DTcgUmV0dXJu
czogb3MuDTggTm90ZXM6IFRoZSBpbnNlcnRpb24gcmVzcGVjdHMgdGhlIGluY2x1c2lvbiBw
cm9wZXJ0eTogdGhlIHdyaXR0ZW4gaW50ZXJ2YWwgc2hhbGwgZW5jbG9zZSBhbGwgdGhlIHZh
bHVlcyBjb250YWluZWQgaW4gdGhlIG1hdGhlbWF0aWNhbCBpbnRlcnZhbCBYIHJlcHJlc2Vu
dGVkIGJ5IFhpLg0yNi42LjggaW50ZXJ2YWwgdmFsdWUgb3BlcmF0aW9ucyBbbGliLmludGVy
dmFsLnZhbHVlLm9wc10NdGVtcGxhdGUgPCBjbGFzcyBUPiBUIGluZiggY29uc3QgaW50ZXJ2
YWwgPFQgPiYgeCk7DTEgUmV0dXJuczogeC5sb3dlcigpIHdoZW4geCBpcyBub3QgZW1wdHks
IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmluZmluaXR5KCkgb3RoZXJ3aXNlLiBJbXBsZW1l
bnRhdGlvbmRlZmluZWQgaWYgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aGFzX2luZmluaXR5
ID09IGZhbHNlDXRlbXBsYXRlIDwgY2xhc3MgVD4gVCBzdXAoIGNvbnN0IGludGVydmFsIDxU
ID4mIHgpOw0yIFJldHVybnM6IHgudXBwZXIoKSB3aGVuIHggaXMgbm90IGVtcHR5LCAtc3Rk
OjpudW1lcmljX2xpbWl0czxUPjo6aW5maW5pdHkoKSBvdGhlcndpc2UuIEltcGxlbWVudGF0
aW9uZGVmaW5lZCBpZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjpoYXNfaW5maW5pdHkgPT0g
ZmFsc2UNdGVtcGxhdGUgPCBjbGFzcyBUPiBUIG1pZHBvaW50ICggY29uc3QgaW50ZXJ2YWwg
PFQgPiYgeCk7DTMgUmV0dXJuczogKGluZih4KStzdXAoeCkpL1QoMi4wKSB3aGVuIHggaXMg
bm90IGVtcHR5LCBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlIG90aGVyd2lzZS4N
MTUod2FzIHByZXZpb3VzIHBhZ2UgbnVtYmVyKQ0NdGVtcGxhdGUgPCBjbGFzcyBUPiBUIHdp
ZHRoICggY29uc3QgaW50ZXJ2YWwgPFQgPiYgeCk7DTQgUmV0dXJuczogVCgwKSB3aGVuIHgg
aXMgYSBzaW5nbGV0b24sIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUsIG5laXRo
ZXIgcG9zaXRpdmUgbm9yIDAsIHdoZW4geCBpcyBlbXB0eSwgYW5kIGFuIHVwcGVyIGJvdW5k
IG9uIHN1cCh4KSAtIGluZih4KSBvdGhlcndpc2UuDXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50
ZXJ2YWwgPFQ+IGFicyggY29uc3QgaW50ZXJ2YWwgPFQgPiYgWCk7DTUgUmV0dXJuczogYSB0
aWdodCBlbmNsb3N1cmUgb2Yge3x4fCB8IHggMiBYfS4NdGVtcGxhdGUgPCBjbGFzcyBUPiBp
bnRlcnZhbCA8VD4gc3F1YXJlICggY29uc3QgaW50ZXJ2YWwgPFQgPiYgWCk7DTYgUmV0dXJu
czogYW4gZW5jbG9zdXJlIG9mIHt4MiB8IHggMiBYfS4NMjYuNi45IGludGVydmFsIGFsZ2Vi
cmFpYyBvcGVyYXRpb25zIFtsaWIuaW50ZXJ2YWwuYWxnZWJyYWljLm9wc10NdGVtcGxhdGUg
PCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gc3FydCAoIGNvbnN0IGludGVydmFsIDxUID4mIFgp
Ow0xIFJldHVybnM6IGFuIGVuY2xvc3VyZSBvZiB7cHggfCB4IDIgWCBhbmQgeCBfIDB9Lg0y
Ni42LjEwIGludGVydmFsIHNldCBvcGVyYXRpb25zIFtsaWIuaW50ZXJ2YWwuc2V0Lm9wc10N
dGVtcGxhdGUgPCBjbGFzcyBUPiBib29sIGlzX3NpbmdsZXRvbiAoIGNvbnN0IGludGVydmFs
IDxUID4mIHgpOw0xIFJldHVybnM6IGZhbHNlIGlmIHggaXMgZW1wdHksIGFuZCBpbmYoeCkg
PT0gc3VwKHgpIG90aGVyd2lzZS4NdGVtcGxhdGUgPCBjbGFzcyBUPiBib29sIGVxdWFsICgg
aW50ZXJ2YWwgPFQ+IGNvbnN0ICYgeCwgaW50ZXJ2YWwgPFQ+IGNvbnN0ICYgeSk7DTIgUmV0
dXJuczogdHJ1ZSBpZiBib3RoIHggYW5kIHkgYXJlIGVtcHR5LCB0cnVlIGlmIG5laXRoZXIg
eCBub3IgeSBpcyBlbXB0eSBhbmQgaW5mKHgpID09IGluZih5KSAmJiBzdXAoeCkgPT0gc3Vw
KHkpIGlzIHRydWUsIGFuZCBmYWxzZSBvdGhlcndpc2UuDTMgTm90ZXM6IERpZmZlcnMgZnJv
bSBvcGVyYXRvcj09IGluIHRoZSByZXR1cm4gdHlwZSBhbmQgdGhlIHNlbWFudGljcyAoZXF1
YWxpdHkgYXMgc2V0KS4NdGVtcGxhdGUgPCBjbGFzcyBUPiBib29sIGNvbnRhaW5zICggY29u
c3QgaW50ZXJ2YWwgPFQgPiYgbGhzICwgY29uc3QgaW50ZXJ2YWwgPFQgPiYgcmhzICk7DTQg
UmV0dXJuczogdHJ1ZSBpZiByaHMgaXMgZW1wdHksIGZhbHNlIGlmIGxocyBpcyBlbXB0eSBh
bmQgcmhzIGlzIG5vdCwgaW5mKGxocykgPD0gaW5mKHJocykgJiYgc3VwKHJocykgPD0gc3Vw
KGxocykgb3RoZXJ3aXNlLg10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGJvb2wgY29udGFpbnMgKCBj
b25zdCBpbnRlcnZhbCA8VCA+JiBsaHMgLCBjb25zdCBUJiByaHMgKTsNNSBSZXR1cm5zOiBj
b250YWlucyhsaHMsIGludGVydmFsPFQ+KHJocykpDXRlbXBsYXRlIDwgY2xhc3MgVD4gYm9v
bCBvdmVybGFwICggY29uc3QgaW50ZXJ2YWwgPFQgPiYgeCwgY29uc3QgaW50ZXJ2YWwgPFQg
PiYgeSk7DTYgUmV0dXJuczogdHJ1ZSBpZiBuZWl0aGVyIHggbm9yIHkgaXMgZW1wdHkgYW5k
IGluZih5KSA8PSBzdXAoeCkgJiYgaW5mKHgpIDw9IHN1cCh5KSBpcyB0cnVlLCBmYWxzZSBv
dGhlcndpc2UuDXRlbXBsYXRlIDwgY2xhc3MgVD4gYm9vbCBjb21wYXJhYmxlICggY29uc3Qg
aW50ZXJ2YWwgPFQgPiYgeCwgY29uc3QgaW50ZXJ2YWwgPFQgPiYgeSk7DTcgUmV0dXJuczog
dHJ1ZSBpZiBuZWl0aGVyIHggbm9yIHkgaXMgZW1wdHkgYW5kIHN1cCh4KSA8IGluZih5KSB8
fCBzdXAoeSkgPCBpbmYoeCkgaXMgdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLg0xNih3YXMgcHJl
dmlvdXMgcGFnZSBudW1iZXIpDQ10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGludGVydmFsIDxUPiBp
bnRlcnNlY3QgKCBjb25zdCBpbnRlcnZhbCA8VCA+JiB4LCBjb25zdCBpbnRlcnZhbCA8VCA+
JiB5KTsNOCBSZXR1cm5zOiBhbiBlbXB0eSBpbnRlcnZhbDxUPiBpZiBvdmVybGFwKHgsIHkp
IGlzIGZhbHNlLCBpbnRlcnZhbDxUPihzdGQ6Om1heChpbmYoeCksIGluZih5KSksIHN0ZDo6
bWluKHN1cCh4KSwgc3VwKHkpKSkgb3RoZXJ3aXNlLg10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGlu
dGVydmFsIDxUPiBodWxsICggY29uc3QgaW50ZXJ2YWwgPFQgPiYgeCwgY29uc3QgaW50ZXJ2
YWwgPFQgPiYgeSk7DTkgUmV0dXJuczogeCBpZiB5IGlzIGVtcHR5LCB5IGlmIHggaXMgZW1w
dHksIGludGVydmFsPFQ+KHN0ZDo6bWluKGluZih4KSwgaW5mKHkpKSwgc3RkOjptYXgoc3Vw
KHgpLCBzdXAoeSkpKSBvdGhlcndpc2UuDXRlbXBsYXRlIDwgY2xhc3MgVD4gc3RkIDo6IHBh
aXIgPCBpbnRlcnZhbCA8VD4sIGludGVydmFsIDxUPiA+DXNwbGl0ICggY29uc3QgaW50ZXJ2
YWwgPFQgPiYgeCwgY29uc3QgVCYgdCk7DTEwIFJldHVybnM6IGEgcGFpciBvZiBpbnRlcnZh
bHMgc3VjaCB0aGF0IHRoZSBmaXJzdCAocmVzcC4gc2Vjb25kKSBtZW1iZXIgaXMgdGhlIHNt
YWxsZXN0IGludGVydmFsIGNvbnRhaW5pbmcgYWxsIHZhbHVlcyBvZiB4IHNtYWxsZXIgKHJl
c3AuIGxhcmdlcikgdGhhbiBvciBlcXVhbCB0byB0Lg0xMSBOb3RlczogUmV0dXJucyBhIHBh
aXIgb2YgdHdvIGVtcHR5IGludGVydmFsPFQ+IGlmIHggaXMgZW1wdHkuIE90aGVyd2lzZSwg
dGhlIGZpcnN0IG1lbWJlciB3aWxsIGJlIGVtcHR5IGlmIGFuZCBvbmx5IGlmIHQgPCBpbmYo
eCksIGFuZCB0aGUgc2Vjb25kIG1lbWJlciB3aWxsIGJlIGVtcHR5IGlmIGFuZCBvbmx5IGlm
IHN1cCh4KSA8IHQuIFVuZGVmaW5lZCBpZiB0IGlzIG5vdCBhIGZpbml0ZSBudW1iZXIuDXRl
bXBsYXRlIDwgY2xhc3MgVD4gc3RkIDo6IHBhaXIgPCBpbnRlcnZhbCA8VD4sIGludGVydmFs
IDxUPiA+DWJpc2VjdCAoIGNvbnN0IGludGVydmFsIDxUID4mIHgpOw0xMiBSZXR1cm5zOiBz
cGxpdCh4LCBtaWRwb2ludCh4KSkgaWYgeCBpcyBub3QgZW1wdHksIGEgcGFpciBvZiB0d28g
ZW1wdHkgaW50ZXJ2YWw8VD4gb3RoZXJ3aXNlLg0yNi42LjExIGludGVydmFsIHN0YXRpYyB2
YWx1ZSBvcGVyYXRpb25zIFtsaWIuaW50ZXJ2YWwuc3RhdGljLnZhbHVlLm9wc10Nc3RhdGlj
IGludGVydmFsIDxUPiB3aG9sZSAoKTsNMSBSZXR1cm5zOiBpbnRlcnZhbDxUPigtc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6aW5maW5pdHkoKSxzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpp
bmZpbml0eSgpKS4NMiBSZXF1aXJlczogc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aGFzX2lu
ZmluaXR5Lg0yNi42LjEyIGludGVydmFsIEkvTyBjb252ZXJzaW9uIHN5bnRheCBbbGliLmlu
dGVydmFsLmlvY29udmVyc2lvbl0NMSBJbnB1dDogVGhlIGlucHV0IHN0cmluZyB0byB0aGUg
Y29uc3RydWN0b3IgaW50ZXJ2YWwoY29uc3QgY2hhciAqcykgYW5kIHRoZSBpbnB1dCBzdHJl
YW0gb2YgdGhlIG9wZXJhdG9yID4+IGFyZSBwcmVwcm9jZXNzZWQgaW50byB0b2tlbnMsIGFu
ZCB3aGl0ZS1zcGFjZSBkaXNjYXJkZWQsIGZvbGxvd2luZyBzdGFuZGFyZCBDKysgcnVsZXMu
IFZhbGlkIHRva2VucyBhcmUgaW50ZWdyYWwgb3IgZmxvYXRpbmcgbGl0ZXJhbHMsIHRoZSBj
aGFyYWN0ZXJzIJFbkiCRXZIgkSiSIJEokiwgYW5kIHRoZSAoY2FzZSBpbnNlbnNpdGl2ZSkg
aWRlbnRpZmllcnMgkWluZpIgkWVtcHR5kiBhbmQgkXdob2xlki4gVGhlIGZvbGxvd2luZyBt
ZWFuaW5ncyBhcmUgYXNzaWduZWQNVG9rZW4gY29tYmluYXRpb24HTWVhbmluZwcHKCBpbmYH
KCAoBwdpbmYgb3IgKyBpbmYHCSsJKAcHWyBlbXB0eSBdIG9yIFsgXQdUaGUgZW1wdHkgc2V0
BwdbIHdob2xlIF0HdGhlIHdob2xlIGxpbmUHB1sgbG8gOyBoaSBdIHdoZXJlIGxvIGFuZCBo
aSBhcmUgaW50ZWdyYWwgb3IgZmxvYXRpbmcgbGl0ZXJhbHMgb3Igb25lIG9mIHRoZSBjb21i
aW5hdGlvbnMgbWVhbmluZyAoKAdUaGUgbW9kZWwtZGVmaW5lZCBtYXRoZW1hdGljYWwgaW50
ZXJ2YWwgWCBjb21wcmlzaW5nIGFsbCB4IGluIHRoZSBtb2RlbJJzIG51bWJlciBzeXN0ZW0g
c2F0aXNmeWluZyBhICggeCAoIGIgd2hlcmUgYSBhbmQgYiwgaW4gdGhlIHJhbmdlICgoIHRv
ICsoLCBhcmUgdGhlIGV4YWN0IHZhbHVlcyBkZW5vdGVkIGJ5IGxvIGFuZCBoaS4gSW4gcGFy
dGljdWxhciBYIGlzIGVtcHR5IGlmIGEgPiBiIC4HB1sgbG8gXQdUaGUgc2FtZSBhcyBbIGxv
IDsgbG8gXQcHKFRoZSBzcGFjZXMgaW4gdGhlIGxlZnQgaGFuZCBjb2x1bW4gbWVyZWx5IHNl
cnZlIHRvIGRlbGltaXQgdG9rZW5zIGFuZCBhcmUgbm90IG5lY2Vzc2FyeSBpbiB0aGUgaW5w
dXQgc3RyaW5nLikNMiBOb3RlczogQW4gaW1wbGVtZW50YXRpb24gbWF5IHByb3ZpZGUgZmVh
dHVyZXMgYmV5b25kIHRoZSBhYm92ZSwgZm9yIGluc3RhbmNlIHNpbXBsZSBleHByZXNzaW9u
cyBpbiB0aGUgaW5wdXQgc3RyZWFtIGFuZCBzeW1ib2xpYyByZXByZXNlbnRhdGlvbnMgb2Yg
Y29uc3RhbnRzIHN1Y2ggYXMgKCwgc28gdGhhdCBmb3IgaW5zdGFuY2Ugk1syKnBpXZQgd291
bGQgYmUgY29udmVydGVkIHRvIGFuIGludGVydmFsIGd1YXJhbnRlZWQgdG8gZW5jbG9zZSAy
KC4NUHJvdmlzaW9uIG1heSBiZSBtYWRlLCBmb3Igc29tZSBhYnN0cmFjdCBtb2RlbHMsIHRv
IGRpc3Rpbmd1aXNoICgwIGZyb20gKzAgaW4gYW4gaW5wdXQgc3RyaW5nLg0zIE91dHB1dDog
VG8gYmUgZG9uZS4NViBQb3NzaWJsZSBleHRlbnNpb25zDVYuMSA8Y21hdGg+IGZ1bmN0aW9u
cw1JdCB3b3VsZCBhbHNvIGJlIHZlcnkgdXNlZnVsIHRvIGhhdmUgdGhlIGVxdWl2YWxlbnQg
b2YgdGhlIDxjbWF0aD4gZnVuY3Rpb25zLCBhdCBsZWFzdCBmb3Igc29tZSBvZiB0aGVzZSBm
dW5jdGlvbnMsIGFuZCBmb3IgZmxvYXRpbmcgcG9pbnQgYmFzZSB0eXBlcy4NSG93ZXZlciwg
dGhlc2UgZnVuY3Rpb25zIChjb3MsIGV4cC4uLikgYXJlIG11Y2ggaGFyZGVyIHRvIGltcGxl
bWVudCBjb3JyZWN0bHksIHNpbmNlIHRoZWlyIGJlaGF2aW9yIHdpdGggcmVzcGVjdCB0byBy
b3VuZGluZyBtb2RlIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIElFRUUgNzU0IHN0YW5kYXJk
LCBhbmQgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIHZhcnkuDVdlIG11c3Qgbm90ZSBob3dl
dmVyLCB0aGF0IHRoZXJlIGV4aXN0IHNldmVyYWwgbGlicmFyaWVzIHdoaWNoIHByb3ZpZGUg
dGhlIG5lZWRlZCBmdW5jdGlvbmFsaXR5OiBJQk0gTWF0aGxpYiwgU3VuIGxpYm1jcjUpLCBD
UmxpYm02KSwgYW5kIE1QRlI3KS4NU28gdGhpcyBpcyBub3Qgb3V0IG9mIHJlYWNoLiBJZiB3
ZSB3ZXJlIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHByb3Bvc2FsLCBpdCB3b3VsZCByZXBsYWNl
IHRoZSBzZWN0aW9uIGFsZ2VicmFpYyBvcGVyYXRvcnMgaW4gdGhlIHN5bm9wc2lzIGFib3Zl
IGJ5IHRoZSBmb2xsb3dpbmc6DTUpaHR0cDovL3d3dy5zdW4uY29tL2Rvd25sb2FkL3Byb2R1
Y3RzLnhtbD9pZD00MTc5Nzc2NQ02KWh0dHA6Ly9saXBmb3JnZS5lbnMtbHlvbi5mci93d3cv
Y3JsaWJtLw03KWh0dHA6Ly93d3cubXBmci5vcmcvDTE3KHdhcyBwcmV2aW91cyBwYWdlIG51
bWJlcikNDW5hbWVzcGFjZSBzdGQgew0NLy8gYWxnZWJyYWljIGFuZCB0cmFuc2NlbmRlbnRh
bCBmdW5jdGlvbnM6DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IGFjb3MgKCBj
b25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+
IGFzaW4gKCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50
ZXJ2YWwgPFQ+IGF0YW4gKCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xh
c3MgVD4gaW50ZXJ2YWwgPFQ+IGNvcyggY29uc3QgaW50ZXJ2YWwgPFQgPiYpOw10ZW1wbGF0
ZSA8IGNsYXNzIFQ+IGludGVydmFsIDxUPiBjb3NoICggY29uc3QgaW50ZXJ2YWwgPFQgPiYp
Ow10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGludGVydmFsIDxUPiBleHAoIGNvbnN0IGludGVydmFs
IDxUID4mKTsNdGVtcGxhdGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gbG9nKCBjb25zdCBp
bnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IGxvZzEw
ICggY29uc3QgaW50ZXJ2YWwgPFQgPiYpOw10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGludGVydmFs
IDxUPiBwb3coIGNvbnN0IGludGVydmFsIDxUID4mLCBpbnQgKTsNdGVtcGxhdGUgPCBjbGFz
cyBUPiBpbnRlcnZhbCA8VD4gcG93KCBjb25zdCBpbnRlcnZhbCA8VCA+JiwgY29uc3QgVCYp
Ow10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGludGVydmFsIDxUPiBwb3coIGNvbnN0IGludGVydmFs
IDxUID4mLCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50
ZXJ2YWwgPFQ+IHBvdyggY29uc3QgVCYsIGNvbnN0IGludGVydmFsIDxUID4mKTsNdGVtcGxh
dGUgPCBjbGFzcyBUPiBpbnRlcnZhbCA8VD4gc2luKCBjb25zdCBpbnRlcnZhbCA8VCA+Jik7
DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IHNpbmggKCBjb25zdCBpbnRlcnZh
bCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IHNxcnQgKCBjb25z
dCBpbnRlcnZhbCA8VCA+Jik7DXRlbXBsYXRlIDwgY2xhc3MgVD4gaW50ZXJ2YWwgPFQ+IHRh
biggY29uc3QgaW50ZXJ2YWwgPFQgPiYpOw10ZW1wbGF0ZSA8IGNsYXNzIFQ+IGludGVydmFs
IDxUPiB0YW5oICggY29uc3QgaW50ZXJ2YWwgPFQgPiYpOw19IA0vLyBvZiBuYW1lc3BhY2Ug
c3RkDVZJIEV4YW1wbGVzIG9mIHVzYWdlIG9mIHRoZSBpbnRlcnZhbCBjbGFzcy4NV2Ugc2hv
dyBob3cgdG8gaW1wbGVtZW50IGEgc29sdmVyLXR5cGUgYXBwbGljYXRpb24gdXNpbmcgaW50
ZXJ2YWxzLiBXZSBlbXBoYXNpemUgdGhlc2UgYXJlIG9ubHkgcHJvb2ZvZi0gY29uY2VwdHMg
YW5kIGluIG5vIGNhc2UgbW9yZSB0aGFuIHRveSBkZW1vIHByb2dyYW1zLiBPdGhlciBwcm9v
Zi1vZi1jb25jZXB0IHByb2dyYW1zIHdoaWNoIGNvdWxkIGJlIGRlbW9uc3RyYXRlZCBoZXJl
IHdvdWxkIGluY2x1ZGUgY2VydGlmaWVkIGV2YWx1YXRpb24gb2YgYm9vbGVhbiBwcmVkaWNh
dGVzIChlLmcuLCBhcyB1c2VkIGluIGV4YWN0IGdlb21ldHJpYyBjb21wdXRpbmcpLCBpbnRl
cnZhbCBleHRlbnNpb25zIG9mIE5ld3RvbpJzIG1ldGhvZC4uLg1BIHByb3RvdHlwZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGlzIHByb3Bvc2FsIGFuZCBzb21lIGV4YW1wbGUgcHJvZ3JhbXMg
Y2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly8gd3d3LXNvcC5pbnJpYS5mci9nZW9tZXRyaWNhL3Rl
YW0vU3lsdmFpbi5QaW9uL2N4eC8uDVZJLjEgVW5pZGltZW5zaW9uYWwgc29sdmVyDUFzIGFu
IGV4YW1wbGUgb2YgdGhlIHVzZWZ1bG5lc3Mgb2Ygb3VyIHByb3Bvc2FsLCB3ZSBzaG93IGhv
dyB0byBpbXBsZW1lbnQgYSB2ZXJ5IHNpbXBsZSB1bmlkaW1lbnNpb25hbCBhbGdlYnJhaWMg
c29sdmVyLiBJbiBmYWN0LCB0aGUgZnVuY3Rpb24gdG8gc29sdmUgaXMgcGFzc2VkIGEgZnVu
Y3Rpb24gb2JqZWN0LCB3aGljaCBtdXN0IGJlIGFibGUgdG8gcHJvY2VzcyBpbnRlcnZhbHMu
DQ0vLyBSZXR1cm5zIGEgc29ydGVkIHNldCBvZiBpbnRlcnZhbHMgKHN1Yi1pbnRlcnZhbHMg
b2YgY3VycmVudCksIHdoaWNoIG1pZ2h0IGNvbnRhaW4gemVyb3Mgb2YgZi4NDS8vIFRoZSBk
aWNob3RvbXkgaXMgc3RvcHBlZCB3aGVuIHRoZSB3aWR0aCBvZiBzdWJpbnRlcnZhbHMgaXMg
PD0gcHJlY2lzaW9uLg10ZW1wbGF0ZSA8IGNsYXNzIEZ1bmN0aW9uICwgY2xhc3MgT3V0cHV0
SXRlcmF0b3IgLCBjbGFzcyBUID4NT3V0cHV0SXRlcmF0b3INc29sdmUgKCBGdW5jdGlvbiBm
LCBPdXRwdXRJdGVyYXRvciBvaXQgLA1pbnRlcnZhbCA8VD4gY29uc3QgJiBjdXJyZW50ICwg
VCBjb25zdCAmIHByZWNpc2lvbiA9IDApDXsNaW50ZXJ2YWwgPFQ+IHkgPSBmKCBjdXJyZW50
ICk7IA0vLyBFdmFsdWF0ZSBmKCkgb3ZlciBjdXJyZW50IGludGVydmFsLg0NLy8gU2hvcnQg
Y2lyY3VpdCBpZiBjdXJyZW50IGRvZXMgbm90IGNvbnRhaW4gYSB6ZXJvIG9mIGYNaWYgKCEg
Y29udGFpbnMgKHksIFQgKDApKSkgcmV0dXJuIG9pdDsNDS8vIFN0b3AgdGhlIGRpY2hvdG9t
eSBpZiByZXMgaXMgc21hbGwgZW5vdWdoICh0aGlzIHByZXZlbnRzIChtb3N0IHByb2JhYmx5
KSB1c2VsZXNzIHdvcmspLg0NLy8gQWxzbyBzdG9wIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUg
bWF4aW1hbCBwcmVjaXNpb24uDWludGVydmFsIDxUPiBlcHMoIC0gc3RkIDo6IG51bWVyaWNf
bGltaXRzIDxUID46OiBtaW4gKCksIHN0ZCA6OiBudW1lcmljX2xpbWl0cyA8VCA+OjogbWlu
ICgpKTsNaWYgKCBjb250YWlucyAoZXBzICwgeSkgfHwgd2lkdGggKCBjdXJyZW50ICkgPD0g
cHJlY2lzaW9uICkgew0xOCh3YXMgcHJldmlvdXMgcGFnZSBudW1iZXIpDQ0qb2l0ICsrID0g
Y3VycmVudCA7DXJldHVybiBvaXQ7DX0NDS8vIEVsc2UsIGRvIHRoZSBkaWNob3RvbXkgcmVj
dXJzaXZlbHkuDXN0ZCA6OiBwYWlyIDxJLCBJPiBpcCA9IGJpc2VjdCAoIGN1cnJlbnQgKTsN
DS8vIFN0b3AgaWYgd2UgY2FuknQgZGljaG90b21pemUgYW55bW9yZS4NaWYgKCBpc19zaW5n
bGV0b24gKGlwLiBmaXJzdCApIHx8IGlzX3NpbmdsZXRvbiAoaXAuIHNlY29uZCApKSB7DSpv
aXQgKysgPSBjdXJyZW50IDsNcmV0dXJuIG9pdDsNfQ1vaXQgPSBzb2x2ZSAoZiwgb2l0ICwg
aXAuZmlyc3QgLCBwcmVjaXNpb24gKTsNcmV0dXJuIHNvbHZlIChmLCBvaXQgLCBpcC5zZWNv
bmQgLCBwcmVjaXNpb24gKTsNfQ1UaGlzIHNvbHZlciBpcyB3cmFwcGVkIGluIHRoZSBleGFt
cGxlIGNvZGUgc3VibWl0dGVkIHdpdGggdGhpcyBwcm9wb3NhbCB1c2luZyBhIGRyaXZlciB0
aGF0IHBhcnNlcyBleHByZXNzaW9ucyAodXNpbmcgQm9vc3Quc3Bpcml0KSBhbmQgcHJvZHVj
ZXMgYW4gb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBvdXRwdXQ6DVR5cGUgYW4g
ZXhwcmVzc2lvbiBvZiBhIHZhcmlhYmxlIHQuLi4gb3IgW3Egb3IgUV0gdG8gcXVpdA0odCp0
IC0yKSoodCAtMyleMioodCAtNikqIHQqdCoodCArNileMg1lbnRlciB0aGUgYm91bmRzIG9m
IHRoZSBpbnRlcnZhbCBvdmVyIHdoaWNoIHRvIHNlYXJjaCBmb3IgemVyb2VzIDoNLTEwIDEw
DWVudGVyIHRoZSBwcmVjaXNpb24gd2l0aCB3aGljaCB0byBpc29sYXRlIHRoZSB6ZXJvZXMg
Og0wLjAwMDAwMDAxDVNvbHZlZCB3aXRoIDQwMyByZWN1cnNpdmUgY2FsbHMgKDcgaW50ZXJ2
YWxzIGJlZm9yZSBtZXJnaW5nICkNU29sdXRpb25zIChpZiBhbnkpIGxpZSBpbiA6DVsgLTYu
MDAwMDAwMDA1NTg3OTM1NDQ3NzsgLTUuOTk5OTk5OTk2Mjc0NzA5NzAxNV0NWyAtMS40MTQy
MTM1NjIzODQyNDc3Nzk4OyAtMS40MTQyMTM1NTMwNzEwMjIwMzM3XQ1bIC05LjMxMzIyNTc0
NjE1NDc4NTE1NjJlIC0wOTs5LjMxMzIyNTc0NjE1NDc4NTE1NjIgZSAtMDldDVsxLjQxNDIx
MzU1MzA3MTAyMjAzMzc7MS40MTQyMTM1NjIzODQyNDc3Nzk4XQ1bMi45OTk5OTk5OTgxMzcz
NTQ4NTA4OzMuMDAwMDAwMDA3NDUwNTgwNTk2OV0NWzUuOTk5OTk5OTk2Mjc0NzA5NzAxNTs2
LjAwMDAwMDAwNTU4NzkzNTQ0NzddDVRoZSBmdW5jdG9yIHBhc3NlZCB0byBzb2x2ZSBldmFs
dWF0ZXMgdGhlIGV4cHJlc3Npb24gdHJlZSBidWlsdCBieSB0aGUgcGFyc2VyLCBlaXRoZXIg
Zm9yIGEgZG91YmxlLCBvciBmb3IgYW4gaW50ZXJ2YWwuDVZJLjIgTXVsdGktZGltZW5zaW9u
YWwgc29sdmVyDUFzIGFuIGlsbHVzdHJhdGlvbiB0byB0aGUgcG93ZXIgYW5kIGVhc2Ugb2Yg
ZXh0ZW5zaW9uIG9mIHRoZSBtZXRob2QsIGxldCB1cyBzaG93IGhvdyB0byBnZW5lcmFsaXpl
IHRoZSBwcmV2aW91cyBzb2x2ZXIgdG8gc29sdmUgYSBzeXN0ZW0gb2YgcG9seW5vbWlhbCBl
cXVhdGlvbnMgKGFuIGFjdGl2ZSBhcmVhIG9mIHJlc2VhcmNoIGluIHJvYm90aWNzIGFuZCBh
cHBsaWVkIG51bWVyaWNzKS4gQ29uc2lkZXIgdGhlIHN5c3RlbTogVGhpcyBzeXN0ZW0gaXMg
ZnVsbHkgY29uc3RyYWluZWQgYnV0IGFkbWl0cyBzZXZlbiBzb2x1dGlvbnMgYW5kIGEgb25l
LWRpbWVuc2lvbmFsIHNpbmd1bGFyIHNvbHV0aW9uLiBXZSBzb2x2ZSBpdCB1c2luZyB0aGUg
Z2VuZXJhbGl6ZWQgYmlzZWN0aW9uIG1ldGhvZC4gQXNzdW1lIHRoYXQgd2lkdGggaGFzIGJl
ZW4gZXh0ZW5kZWQgdG8gdmVjdG9ycyBvZiBpbnRlcnZhbCAoYnkgdGFraW5nIG1heCBvZiB3
aWR0aCkgYW5kIHRoYXQgYXNzaWduX2JveChyLGVwc2lsb24pIGFzc2lnbnMgZXBzaWxvbiB0
byBldmVyeSBjb21wb25lbnQgb2YgdGhlIHZlY3RvciByLg0NLy8gUmV0dXJucyBhIHNldCBv
ZiBibG9jay1pbnRlcnZhbHMgKHN1Yi1ibG9ja3Mgb2YgY3VycmVudCksIHdoaWNoIG1pZ2h0
IGNvbnRhaW4gemVyb3Mgb2YgZi4NDS8vIFRoZSBkaWNob3RvbXkgaXMgc3RvcHBlZCB3aGVu
IHRoZSB3aWR0aCBvZiBzdWJpbnRlcnZhbHMgaXMgPD0gcHJlY2lzaW9uLg10ZW1wbGF0ZSA8
IGNsYXNzIEZ1bmN0aW9uICwgY2xhc3MgT3V0cHV0SXRlcmF0b3IgLCBjbGFzcyBUID4NT3V0
cHV0SXRlcmF0b3INc29sdmUgKCBGdW5jdGlvbiBmLCBPdXRwdXRJdGVyYXRvciBvaXQgLA12
ZWN0b3IgPCBpbnRlcnZhbCA8VD4gPiBjb25zdCAmIGN1cnJlbnQgLCBUIGNvbnN0ICYgcHJl
Y2lzaW9uID0gMCkNew10eXBlZGVmIGludGVydmFsIDxUPiBJOw0xOSh3YXMgcHJldmlvdXMg
cGFnZSBudW1iZXIpDQ10eXBlZGVmIHZlY3RvciA8ST4gQTsgDS8vIHZlY3RvcjxJPiBvZiBk
aW1lbnNpb24gbg10eXBlZGVmIHR5cGVuYW1lIEZ1bmN0aW9uIDo6IHJlc3VsdF90eXBlIFI7
IA0vLyB2ZWN0b3I8ST4gb2YgZGltZW5zaW9uIG0NUiByZXMgPSBmKCBjdXJyZW50ICk7IA0v
LyBFdmFsdWF0ZSBmKCkgb3ZlciBjdXJyZW50IGludGVydmFsLg0NLy8gU2hvcnQgY2lyY3Vp
dCBpZiBjdXJyZW50IGRvZXMgbm90IGNvbnRhaW4gYSB6ZXJvIG9mIGYNaWYgKCEgY29udGFp
bnNfemVybyAocmVzICkpIHJldHVybiBvaXQ7DQ0vLyBTdG9wIHRoZSBkaWNob3RvbXkgaWYg
cmVzIGlzIHNtYWxsIGVub3VnaCAodGhpcyBwcmV2ZW50cyAobW9zdCBwcm9iYWJseSkgdXNl
bGVzcyB3b3JrKS4NDS8vIEFsc28gc3RvcCBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIG1heGlt
YWwgcHJlY2lzaW9uLg1SIHIocmVzICk7IA0vLyBpbml0aWFsaXplIGRpbWVuc2lvbiBpbiBj
YXNlIFIgaXMgYSB2ZWN0b3INYXNzaWduX2JveCAociwgSSggLXN0ZCA6OiBudW1lcmljX2xp
bWl0cyA8VCA+OjogbWluICgpLCAtc3RkIDo6IG51bWVyaWNfbGltaXRzIDxUID46OiBtaW4g
KCkgKSApOw1pZiAoIGNvbnRhaW5zIChyLCByZXMpIHx8IHdpZHRoICggY3VycmVudCApIDw9
IHByZWNpc2lvbiApIHsNKm9pdCArKyA9IGN1cnJlbnQgOw1yZXR1cm4gb2l0Ow19DQ0vLyBP
dGhlcndpc2UgYmlzZWN0IGFsb25nIGV2ZXJ5IGRpbWVuc2lvbg1BIGJlZ2luICggY3VycmVu
dCApLCBlbmQoIGN1cnJlbnQgKTsNZm9yICggc2l6ZV90IHM9MDsgczwgY3VycmVudCAuIHNp
emUgKCk7ICsrcykgew1zdGQgOjogcGFpciA8SSxJPiBwID0gYmlzZWN0ICggY3VycmVudCBb
c10pOw1iZWdpbiBbc10gPSBwLiBmaXJzdCA7IGVuZFtzXSA9IHAuIHNlY29uZCA7DQ0vLyBT
dG9wIGlmIHdlIGhpdCBhIHNpbmdsZXRvbiBhbG9uZyBhbnkgZGltZW5zaW9uDWlmICggaXNf
c2luZ2xldG9uICggYmVnaW4gW3NdKSB8fCBpc19zaW5nbGV0b24gKGVuZFtzXSkpIHsNKm9p
dCArKyA9IGN1cnJlbnQgOw1yZXR1cm4gb2l0Ow19DX0NDS8vIFVzZSBiaW5hcnkgZW51bWVy
YXRpb24gb2YgYWxsIHRoZSBzdWItYm94ZXMgb2YgY3VycmVudA1BIGl0KCBiZWdpbiApOw13
aGlsZSAoIHRydWUgKQ17DQ0vLyBTb2x2ZSByZWN1cnNpdmVseQ0AAAAAAAYAABQIAAAVCAAA
FggAADsIAAA8CAAAVwgAAFgIAABoCAAAaggAAH0IAAB/CAAAiwgAAIwIAACNCAAApAgAAKUI
AACtCAAArggAALcIAAC4CAAAuQgAAN8IAADgCAAA4QgAAPkIAAD6CAAA+wgAABYJAAAXCQAA
GAkAACwJAAAtCQAALgkAAE8JAABQCQAAUQkAALUJAAC2CQAAtwkAABEKAAASCgAAEwoAAHAK
AABxCgAAcgoAAM8KAADQCgAA0QoAAC0LAAAuCwAALwsAAIsLAACMCwAAjQsAAOgLAADpCwAA
6gsAAEcMAABIDAAASQwAAKcMAACoDAAAqQwAAAUNAAAGDQAABw0AAGYNAABnDQAAaA0AAMYN
AADHDQAAyA0AAN8NAADgDQAA4Q0AAEQOAABFDgAARg4AAPn18fnx+fH56Pno+eji+fH58fnb
8fnb8fnb8fnb8fnb8fnb8dTNxtTNxtTNxtTNxtTNxtTNxtTNxtTNxtTNxtTNxtTNxtTNxvnb
8dTNxgAADBVobVDOABZodTI4AAAMFWhtUM4AFmjoflUAAAwVaG1QzgAWaNcoCgAADBVo1ygK
ABZo6H5VAAAKFmh1MjgAMEoVAAAQFWiSGHcAFmjXKAoAMEoVAAAGFmh1MjgAAAYWaJ92/QAA
DBVo1ygKABZo1ygKAE4ABgAAFggAADwIAABYCAAAjQgAAKUIAACuCAAAuQgAAOEIAAD7CAAA
GAkAAC4JAABRCQAAtwkAABMKAAByCgAA0QoAAC8LAACNCwAA6gsAAEkMAACpDAAABw0AAGgN
AADIDQAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA6QAAAAAAAAAA
AAAAAOAAAAAAAAAAAAAAAADbAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANYAAAAAAAAAAAAA
AADWAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANYAAAAAAAAAAAAAAADWAAAAAAAAAAAAAAAA
0QAAAAAAAAAAAAAAANEAAAAAAAAAAAAAAADRAAAAAAAAAAAAAAAA0QAAAAAAAAAAAAAAANEA
AAAAAAAAAAAAAADRAAAAAAAAAAAAAAAA0QAAAAAAAAAAAAAAANEAAAAAAAAAAAAAAADRAAAA
AAAAAAAAAAAA0QAAAAAAAAAAAAAAANEAAAAAAAAAAAAAAADRAAAAAAAAAAAAAAAAAAAAAAAA
AAQSAGdknj7CAAAEEQBnZGIMgAAABA8AZ2RIVfAACQAANyQAOCQASCQAZ2TXKAoADAAAAyQB
NyQAOCQASCQAYSQBZ2SXSSgAAAQQAGdkYgyAAAAEFABnZJIYdwAAGAAGAAB44QIAJOICAP39
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAABAQAAQECyA0AAOENAABGDgAAdQ4AANsOAABCDwAAWg8AAGgPAAC7DwAALhAAAIAQ
AACeEAAAnxAAAMUQAADtEAAALBEAAFgRAACmEQAA2BEAABgSAABZEgAAnhIAANMSAAAcEwAA
NBMAAPMTAAD6AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD1AAAAAAAA
AAAAAAAA9QAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA7AAAAAAAAAAA
AAAAAOwAAAAAAAAAAAAAAADsAAAAAAAAAAAAAAAA4gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAA
AADdAAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA
9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUA
AAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAN0AAAAAAAAAAAAAAAD1AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDwBnZEhV8AAACRIAZ2SePsIAb8YHAQEAhomjpgkA
ADckADgkAEgkAGdk1ygKAAAEEgBnZJ4+wgAABBEAZ2RiDIAAABlGDgAAcw4AAHQOAAB1DgAA
2Q4AANoOAADbDgAAQA8AAEEPAABCDwAAWA8AAFkPAABaDwAAZg8AAGcPAABoDwAAaQ8AALoP
AAC7DwAAvA8AAC0QAAAuEAAALxAAAH8QAACAEAAAgRAAAIIQAACDEAAAnhAAAJ8QAADEEAAA
xRAAAOwQAADtEAAAKhEAACsRAAAsEQAAVhEAAFcRAABYEQAApBEAAKURAACmEQAA1hEAANcR
AADYEQAAFhIAABcSAAAYEgAAVxIAAFgSAABZEgAAnBIAAJ0SAACeEgAA0RIAAPny7ufg2efg
2fny7vny7s7Du87Du87Du6OUo5TZ+e7n2eeN2eeN2eeN2eeN2eeN2eeN2eeN2ecAAAAMFWht
UM4AFmifdv0AABwBCIEESAEABWgri6OmFWiYFqkAFmiYFqkANgiBAC4ACIEVaJgWqQAWaIBf
LgAXaJgWqQA2CIFjSAEAZGgAAAAAZGgAAAAAZGgri6OmAA4WaHUyOABDShAAYUoQAAAUFWjX
KAoAFmjXKAoAQ0oQAGFKEAAAFBVo1ygKABZo1ygKAENKDABhSgwAAAwVaG1QzgAWaHUyOAAA
DBVobVDOABZo6H5VAAAMFWhtUM4AFmjXKAoAAAYWaHUyOAAADBVo1ygKABZo6H5VAAAMFWjX
KAoAFmjXKAoAN9ESAADSEgAA0xIAABoTAAAbEwAAHBMAADMTAAA0EwAAlhMAAJcTAADxEwAA
8hMAAPMTAABFFAAAXhQAAGAUAABhFAAAYhQAAJcUAACYFAAAnRQAAJ4UAADHFAAA2BQAAPQU
AAD1FAAALBUAAC0VAABxFQAAhBUAAEUWAABGFgAAlhYAAJcWAAC6FgAA1hYAANcWAAAIFwAA
HBcAAB4XAAAiFwAAJhcAADoXAABoFwAAehcAAPny6/ny5ODr+ev58uvTxLXE08TTxNPE08TT
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
AAAAAAAAAAAAAAAAAAAAAAAEEgBnZJ4+wgAARxIAQyQBRcaAAAABAC8ko8YAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABnZJ4+wgAASxIAD4RoAUMkAUXGgAAAAQAwJKPGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXoRoAWdkFXcMAAAF
2iQAAOUkAADmJAAA6iQAAOskAADtJAAA7iQAAO8kAADwJAAAiyUAAIwlAADyJQAA8yUAAFom
AABbJgAAySYAAMomAAApJwAAKicAACsnAACYJwAAmScAAAUoAAAGKAAADSgAAA8oAAAUKAAA
GCgAACcoAABpKAAAaygAAGwoAABtKAAAbigAAHcoAADy4/LU8se6rbqgmZKZkpmSmZKLmZKZ
kpl2mWCZYHaZklmZAAAAAAwVaG1QzgAWaFwJ7QAAKwAIgRVobVDOABZo1ygKABdoXHHdAGNI
AQBkaAAAAABkaAAAAABkaNkgo8YpFWhtUM4AFmjXKAoAQ0oPAGFKDwCJygcBAQCGiaOmgyoB
Q0oUAGFKFAAMFWhtUM4AFmh1MjgAAAwVaG1QzgAWaJ92/QAADBVobVDOABZo1ygKAAAZAQiB
BEgBAAVowSCjxhVobVDOABZoRgfFABkBCIEESAEABWgvJKPGFWhtUM4AFmgKV+UAGQEIgQRI
AQAFaC4ko8YVaG1QzgAWaApX5QAZAQiBBEgBAAVo1yCjxhVobVDOABZoXHHdABwBCIEESAEA
BWjXIKPGFWhtUM4AFmhccd0ANgiBABwBCIEESAEABWjWIKPGFWhtUM4AFmhccd0ANgiBABkB
CIEESAEABWjWIKPGFWhtUM4AFmhccd0AACJ3KAAAeCgAALYoAAC3KAAAuCgAABEpAAASKQAA
EykAAHUpAAB2KQAAfykAAIApAACBKQAAgikAAI4pAACPKQAA3ikAAOApAADhKQAA4ikAAOMp
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
AAAAAGRoAAAAAGRouAijZhkBCIEESAEABWi3CKNmFWhtUM4AFmiGe1sAKwAIgRVobVDOABZo
1ygKABdoswvQAGNIAQBkaAAAAABkaAAAAABkaGw7o0YQFWgeKx0AFmjXKAoAMEoaAAAZAQiB
BEgBAAVoODyjRhVobVDOABZoMEUUABkBCIEESAEABWg3PKNGFWhtUM4AFmgwRRQAGQEIgQRI
AQAFaDY8o0YVaG1QzgAWaDBFFAAZAQiBBEgBAAVoNTyjRhVobVDOABZoMEUUAAwVaG1QzgAW
aJRI+wAADBVobVDOABZo1ygKABpUNQAAcDUAAHo1AACuNQAAtDUAALU1AAC2NQAAtzUAAMM1
AADENQAAyDUAANA1AADfNQAA4DUAAPw1AAAANgAABzYAABc2AAAbNgAAHDYAAB02AAAeNgAA
LzYAADA2AAA4NgAAOTYAADw2AABQNgAA8uXy5fLe5dHlwrPRrJ+ShXhrXmuFa4VrhU+FAAAA
AAAAAAAAAAAAAAAAAAAAABwBCIEESAEABWiILKMGFWhtUM4AFmgYY8IANgiBABkBCIEESAEA
BWiLLKMGFWhtUM4AFmgYY8IAGQEIgQRIAQAFaIYsowYVaG1QzgAWaBhjwgAZAQiBBEgBAAVo
hSyjBhVobVDOABZoGGPCABkBCIEESAEABWiHLKMGFWhtUM4AFmgYY8IAGQEIgQRIAQAFaEgk
o8YVaG1QzgAWaKFX5wAZAQiBBEgBAAVoRySjxhVobVDOABZooVfnAAwVaG1QzgAWaHUyOAAA
HQEIgQRIAQAFaMEIo2YVaB4rHQAWaCF2IQAwShUAHQEIgQRIAQAFaMAIo2YVaB4rHQAWaCF2
IQAwShUAGQEIgQRIAQAFaMEIo2YVaG1QzgAWaCF2IQAMFWhtUM4AFmifdv0AABkBCIEESAEA
BWjACKNmFWhtUM4AFmghdiEAGQEIgQRIAQAFaLsIo2YVaG1QzgAWaCF2IQAAG1A2AABcNgAA
XTYAAGM2AABkNgAAaTYAAGo2AABrNgAAeDYAAHk2AAB8NgAAgzYAAIQ2AACKNgAAlzYAAJ82
AACgNgAApTYAAKY2AAC1NgAAujYAAMM2AADVNgAA2DYAAOk2AADqNgAA8jYAAPM2AAD8NgAA
8uPUxdTj8riruJ64q7iRgpGCkXVodVl148XjdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
FmhdTy4AMEoaABkBCIEESAEABWhLPKNGFWhtUM4AFmgwRRQAGQEIgQRIAQAFaEo8o0YVaG1Q
zgAWaDBFFAAZAQiBBEgBAAVoTDyjRhVobVDOABZoXU8uABkBCIEESAEABWhMPKNGFWhtUM4A
FmgwRRQAGQEIgQRIAQAFaEg8o0YVaG1QzgAWaDBFFAAZAQiBBEgBAAVoRzyjRhVobVDOABZo
MEUUABkBCIEESAEABWgZPKNGFWhtUM4AFmgwRRQAGQEIgQRIAQAFaEk8o0YVaG1QzgAWaDBF
FAAZAQiBBEgBAAVoGTyjRhVobVDOABZoYDVQABkBCIEESAEABWgFPKNGFWhtUM4AFmiddXwA
ABX6SgAABEsAAAlLAABGSwAAS0sAAJZLAACYSwAAz0sAANBLAADTSwAA2ksAADBMAAA4TAAA
OUwAAEZMAABHTAAATEwAAE1MAABaTAAAZEwAAGVMAACOTAAAqkwAALVMAADy4/Lj8tTyx7qt
uq2gkYR3andbd2pOPwAAAAAAAAAdAQiBBEgBAAVoYTyjRhVoHisdABZoRielADBKGgAZAQiB
BEgBAAVoYTyjRhVobVDOABZoRielAB0BCIEESAEABWhTPKNGFWgeKx0AFmhdTy4AMEoaABkB
CIEESAEABWhUPKNGFWhtUM4AFmhdTy4AGQEIgQRIAQAFaFM8o0YVaG1QzgAWaF1PLgAZAQiB
BEgBAAVoRjyjRhVobVDOABZoMEUUABwBCIEESAEABWhFPKNGFWhtUM4AFmgwRRQANgiBABkB
CIEESAEABWgZPKNGFWhtUM4AFmhgNVAAGQEIgQRIAQAFaFI8o0YVaG1QzgAWaF1PLgAZAQiB
BEgBAAVoUTyjRhVobVDOABZoXU8uABkBCIEESAEABWhgPKNGFWhtUM4AFmhGJ6UAHAEIgQRI
AQAFaGA8o0YVaG1QzgAWaF1PLgA2CIEAHQEIgQRIAQAFaGA8o0YVaB4rHQAWaF1PLgAwShoA
GQEIgQRIAQAFaGA8o0YVaG1QzgAWaF1PLgAAF7VMAAC2TAAAyEwAAMlMAADKTAAAy0wAAOZM
AADvTAAA8EwAAPhMAAD5TAAA+kwAAPtMAAAyTQAANU0AADlNAABDTQAAUE0AAFFNAABYTQAA
WU0AAFtNAABcTQAA8uXY5cm6q7qcjbqAc2ZzZllmTDxMWQAAAAAAAB8BCIEESAEABWgrPKNG
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
AAAAAAAAAAD6AAAAAAAAAAAAAAAA8QAAAAAAAAAAAAAAAOcAAAAAAAAAAAAAAADWAAAAAAAA
AAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAA
AAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAA
AAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREgADJAFhJAFn
ZJ4+wgBvxgcBAQCGiaOmZCYBAyQAYSQAAAkSAGdknj7CAG/GBwEBAIaJo6YJAAA3JAA4JABI
JABnZNcoCgAABBIAZ2SePsIAABgcYgAAHWIAAB5iAAB6YgAAe2IAALNiAAC0YgAAtWIAABZj
AAAXYwAAN2MAADhjAAA5YwAAY2MAAGRjAABlYwAAyWMAAMpjAAAsZAAALWQAAJJkAACTZAAA
9WQAAPZkAAD6ZAAA+2QAAPxkAAAiZQAAI2UAACRlAACIZQAAiWUAAOxlAADtZQAA7mUAAPBl
AAAdZgAAHmYAAB9mAAAjZgAAOmYAADtmAABfZgAAYGYAAGFmAADEZgAAxWYAAOVmAADmZgAA
52YAAEpnAABLZwAAn2cAAKBnAAChZwAA2GcAANlnAADaZwAAPGgAAD1oAACdaAAAnmgAAOZo
AAD58uvy6/ny6+Tr+fLr+fLr5Ovk6+Tr5Ov58uv58uvk6/ny2c7Gua2e8uv58uvk6/ny6+Tr
+fLr+fLr5Ovk6wAAHAEIgQRIAQAFaCuLo6YVaJgWqQAWaJgWqQA2CIEAFgEIgQRIAQAFaC2L
o6YWaJgWqQA2CIEAGQEIgQRIAQAFaCuLo6YVaG1QzgAWaJgWqQAOFmh1MjgAQ0oQAGFKEAAA
FBVo1ygKABZo1ygKAENKEABhShAAABQVaNcoCgAWaNcoCgBDSgwAYUoMAAAMFWhtUM4AFmiU
SPsAAAwVaG1QzgAWaNcoCgAADBVobVDOABZodTI4AAAMFWhtUM4AFmifdv0APuZoAADnaAAA
6GgAAABpAAABaQAAZ2kAAGhpAADMaQAAzWkAAC9qAAAwagAAlGoAAJVqAACWagAA82oAAPRq
AAAPawAAEGsAABFrAAAvawAAMGsAAJNrAACUawAA8WsAAPJrAAAobAAAKWwAACpsAABvbAAA
cGwAAHFsAADObAAAz2wAAC9tAAAwbQAARW0AAEZtAABHbQAAcG0AAHFtAABybQAA1W0AANZt
AACabgAAm24AAP9uAAAAbwAAWG8AAFlvAABabwAAcW8AAHJvAABzbwAA0W8AANJvAAAecQAA
+fLr8uvk6+Tr5Ov58uvk6/ny6/Lr5Ovk6/ny6/ny6+Tr5Ov58s64os6MzozOjM64ouv58uvk
6wArAAiBFWhtUM4AFmiUSPsAF2jFenoAY0gBAGRoAAAAAGRoAAAAAGRojDujRisACIEVaG1Q
zgAWaHUyOAAXaMV6egBjSAEAZGgAAAAAZGgAAAAAZGiMO6NGKwAIgRVobVDOABZon3b9ABdo
xXp6AGNIAQBkaAAAAABkaAAAAABkaIw7o0YrAAiBFWhtUM4AFmjXKAoAF2jFenoAY0gBAGRo
AAAAAGRoAAAAAGRojDujRgwVaG1QzgAWaJRI+wAADBVobVDOABZo1ygKAAAMFWhtUM4AFmh1
MjgAAAwVaG1QzgAWaJ92/QA3KmwAAHFsAABHbQAAcm0AAFpvAABzbwAA2HEAAPpxAAAecwAA
vXMAAIN0AAAbdQAAXHUAALB2AADNdgAAznYAAMB3AAAGeAAAuXsAADR8AAA7fgAAqYAAAPeA
AAAnggAAaoIAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA7wAAAAAAAAAAAAAAAO8AAAAA
AAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAO8AAAAAAAAAAAAAAADvAAAAAAAA
AAAAAAAA7wAAAAAAAAAAAAAAAO8AAAAAAAAAAAAAAADvAAAAAAAAAAAAAAAA7wAAAAAAAAAA
AAAAAO8AAAAAAAAAAAAAAADlAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAO8AAAAAAAAAAAAA
AADvAAAAAAAAAAAAAAAA7wAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA
+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAABESAAMkAWEkAWdknj7CAG/GBwEBAIaJo6ZkJgEDJABhJAAACRIAZ2SePsIA
b8YHAQEAhomjpgsSAGdknj7CAG/GBwEBAIaJo6ZkJgEABBIAZ2SePsIAABgecQAAIHEAANRx
AADWcQAA2HEAAPhxAAD6cQAAZHIAAGVyAADJcgAAynIAABxzAAAecwAAgnMAAINzAAC7cwAA
vHMAAL1zAAAddAAAHnQAAIF0AACCdAAAg3QAAOV0AADmdAAAGXUAABp1AAAbdQAAWnUAAFt1
AAD58uvkzrjOos6izqLOos6MuM6izoy4zqLOjLh2YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAArAAiBFWhtUM4AFmifdv0AF2j1BQEAY0gBAGRoAAAAAGRo
AAAAAGRodoOjhisACIEVaG1QzgAWaNcoCgAXaPUFAQBjSAEAZGgAAAAAZGgAAAAAZGh2g6OG
KwAIgRVobVDOABZon3b9ABdookvdAGNIAQBkaAAAAABkaAAAAABkaEQko8YrAAiBFWhtUM4A
FmiUSPsAF2iiS90AY0gBAGRoAAAAAGRoAAAAAGRoRCSjxisACIEVaG1QzgAWaHUyOAAXaKJL
3QBjSAEAZGgAAAAAZGgAAAAAZGhEJKPGKwAIgRVobVDOABZo1ygKABdookvdAGNIAQBkaAAA
AABkaAAAAABkaEQko8YMFWhtUM4AFmh1MjgAAAwVaG1QzgAWaJ92/QAADBVobVDOABZo1ygK
AAAMFWhtUM4AFmiUSPsAHVt1AABcdQAAtHUAALV1AAAcdgAAHXYAAIN2AACEdgAArnYAAK92
AACwdgAAsXYAALJ2AAC2dgAAzXYAAM52AAApdwAAKncAAIR3AACFdwAAv3cAAOnTvdO9073T
p+mRhHhpYkw2TDZMAAAAACsACIEVaG1QzgAWaJRI+wAXaPUFAQBjSAEAZGgAAAAAZGgAAAAA
ZGh3g6OGKwAIgRVobVDOABZo1ygKABdo9QUBAGNIAQBkaAAAAABkaAAAAABkaHeDo4YMFWht
UM4AFmh1MjgAABwBCIEESAEABWgri6OmFWiYFqkAFmiYFqkANgiBABYBCIEESAEABWgti6Om
FmiYFqkANgiBABkBCIEESAEABWgri6OmFWhtUM4AFmiYFqkAKwAIgRVobVDOABZogF8uABdo
mBapAGNIAQBkaAAAAABkaAAAAABkaCuLo6YrAAiBFWhtUM4AFmifdv0AF2j1BQEAY0gBAGRo
AAAAAGRoAAAAAGRodoOjhisACIEVaG1QzgAWaJRI+wAXaPUFAQBjSAEAZGgAAAAAZGgAAAAA
ZGh2g6OGKwAIgRVobVDOABZo1ygKABdo9QUBAGNIAQBkaAAAAABkaAAAAABkaHaDo4YrAAiB
FWhtUM4AFmh1MjgAF2j1BQEAY0gBAGRoAAAAAGRoAAAAAGRodoOjhgAUv3cAAMB3AAACeAAA
BHgAAAZ4AADKeAAAzHgAAIp5AACMeQAAKXoAACp6AACMegAAjXoAAPF6AADyegAAW3sAAFx7
AACzewAAtHsAALd7AAC4ewAAuXsAABd8AAAYfAAAMnwAADN8AAA0fAAAmHwAAJl8AAD9fAAA
/nwAAGV9AABmfQAAyX0AAMp9AAAxfgAAMn4AADl+AAA6fgAAO34AAJx+AACdfgAA/H4AAP1+
AABdfwAAXn8AAL1/AADp072n05HTkdOR05HTkdOR05HTvaeKg4p8dYqDioOKg4qDioOKfHWK
g4qDioOKDBVobVDOABZodTI4AAAMFWhtUM4AFmifdv0AAAwVaG1QzgAWaJRI+wAADBVobVDO
ABZo1ygKAAArAAiBFWhtUM4AFmiUSPsAF2gwRRQAY0gBAGRoAAAAAGRoAAAAAGRoIzyjRisA
CIEVaG1QzgAWaHUyOAAXaDBFFABjSAEAZGgAAAAAZGgAAAAAZGgjPKNGKwAIgRVobVDOABZo
n3b9ABdoMEUUAGNIAQBkaAAAAABkaAAAAABkaCM8o0YrAAiBFWhtUM4AFmjXKAoAF2gwRRQA
Y0gBAGRoAAAAAGRoAAAAAGRoIzyjRisACIEVaG1QzgAWaHUyOAAXaPUFAQBjSAEAZGgAAAAA
ZGgAAAAAZGh3g6OGAC69fwAAvn8AACCAAAAhgAAAg4AAAISAAACogAAAqYAAAPWAAAD2gAAA
94AAAFuBAABcgQAAwYEAAMKBAAAlggAAJoIAACeCAABoggAAaYIAAGqCAADOggAAz4IAAC2D
AAAugwAAk4MAAJSDAADagwAA24MAAOKDAADkgwAA8YMAAAeEAAAIhAAAHIQAACCEAABShAAA
U4QAAFSEAACHhAAAiIQAAImEAADRhAAA0oQAANOEAADzhAAA9IQAAPWEAABUhQAAVYUAALaF
AAC3hQAAAYYAAAKGAAADhgAAYIYAAGGGAAC8hgAA+fL58vny6/Lk6/L58vny5Ovy5Ovy+fL5
8vnyzrjOq/L58p6Rnuvy5Ovy5Ovy5Ovy+fL58uTr8vnyABkBCIEESAEABWiBg6OGFWhtUM4A
FmhPGrUAGQEIgQRIAQAFaICDo4YVaG1QzgAWaE8atQAZAQiBBEgBAAVog4OjhhVobVDOABZo
Txq1ACsACIEVaG1QzgAWaNcoCgAXaE8atQBjSAEAZGgAAAAAZGgAAAAAZGiBg6OGKwAIgRVo
bVDOABZo1ygKABdoTxq1AGNIAQBkaAAAAABkaAAAAABkaIKDo4YMFWhtUM4AFmifdv0AAAwV
aG1QzgAWaHUyOAAADBVobVDOABZo1ygKAAAMFWhtUM4AFmiUSPsAOWqCAABUhAAAiYQAANOE
AAD1hAAAA4YAAAqHAAA1iAAAnIgAALiIAAC5iAAArokAANuJAAD9iQAADYoAAPWLAAAsjAAA
F44AAIOOAACfjgAAmZAAAB2SAACGkwAAp5MAAMiTAAD+kwAA+gAAAAAAAAAAAAAAAPoAAAAA
AAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAA
AAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA3wAAAAAAAAAA
AAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAA
AAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA
+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAANoA
AAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAAAAAAAAAABA8AZ2RIVfAA
ERIAAyQBYSQBZ2SePsIAb8YHAQEAhomjpmQmAQMkAGEkAAAJEgBnZJ4+wgBvxgcBAQCGiaOm
AAQSAGdknj7CAAAZvIYAAL2GAAAIhwAACYcAAAqHAAB0hwAAdYcAANSHAADVhwAAM4gAADSI
AAA1iAAAmogAAJyIAACdiAAAoYgAALiIAAC5iAAAGYkAABqJAAB7iQAAfIkAAKyJAACtiQAA
rokAANmJAADaiQAA24kAAPuJAAD8iQAA/YkAAAyKAAANigAAZooAAGeKAADEigAAxYoAACOL
AAAkiwAAiosAAIuLAADriwAA7IsAAPOLAAD0iwAA9YsAACqMAAArjAAALIwAAI6MAACPjAAA
7IwAAO2MAABLjQAATI0AAKqNAACrjQAADI4AAA2OAAAVjgAAFo4AABeOAAB7jgAAfI4AAICO
AACBjgAA+fLr5PL58vny6+Ty+dfLvOTy+fL58uvk8uvk8uvk8uTy+fL58vny+fL58uvk8uvk
8vny+fL58vny+fLr5PL58usAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAABwBCIEESAEABWgri6OmFWiYFqkAFmiYFqkANgiBABYBCIEESAEABWgti6Om
FmiYFqkANgiBABkBCIEESAEABWgri6OmFWhtUM4AFmiYFqkADBVobVDOABZodTI4AAAMFWht
UM4AFmifdv0AAAwVaG1QzgAWaNcoCgAADBVobVDOABZolEj7AEGBjgAAgo4AAIOOAACejgAA
n44AAAaPAAAHjwAAX48AAGCPAADDjwAAxI8AAC+QAAAwkAAAipAAAIuQAACXkAAAmJAAAJmQ
AAD9kAAA/pAAAF+RAABgkQAAwZEAAMKRAAAbkgAAHJIAAB2SAAB9kgAAfpIAAOCSAADhkgAA
P5MAAECTAACEkwAAhZMAAIaTAACmkwAAp5MAAMaTAADHkwAAyJMAAP2TAAD+kwAAH5QAACCU
AAAhlAAAJZQAADyUAAA9lAAAUJQAAFGUAABilAAAY5QAAIGUAACClAAAoJQAAKGUAADOlAAA
z5QAAOLb1NvUzdTN1M3UzdTN1Mbb1M3UzdTN1Mbb1M3UzdTN1Mbbv7vUxtvU29TbrqKT29Tb
1NvU29Tb1NscAQiBBEgBAAVoK4ujphVomBapABZomBapADYIgQAWAQiBBEgBAAVoLYujphZo
mBapADYIgQAZAQiBBEgBAAVoK4ujphVobVDOABZomBapAAYWaHUyOAAADBVo1ygKABZo1ygK
AAAMFWhtUM4AFmifdv0AAAwVaG1QzgAWaJRI+wAADBVobVDOABZo1ygKAAAMFWhtUM4AFmh1
MjgAADoDagAAAAAVaG1QzgAWaHRntwAwShcAPAgBVQgBicoHAQEAhomjpoMqAQNqAAAAAENK
FABVCAFhShQAOv6TAAAglAAAPJQAAD2UAABRlAAAY5QAAIKUAAChlAAAz5QAAOaUAADwlAAA
FJUAAEGVAACHlQAAsJUAAN2VAABdlgAA3ZYAAOSZAAD6AAAAAAAAAAAAAAAA8AAAAAAAAAAA
AAAAAN8AAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAA
AAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA
+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAANoA
AAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAABA8AZ2TlapYAERIAAyQBYSQBZ2SePsIAb8YHAQEAhomjpmQmAQMk
AGEkAAAJEgBnZJ4+wgBvxgcBAQCGiaOmAAQSAGdknj7CAAASz5QAAOWUAADmlAAA75QAAPCU
AAATlQAAFJUAAD+VAABAlQAAQZUAAIWVAACGlQAAh5UAAK+VAACwlQAA3JUAAN2VAADflQAA
R5YAAEiWAABblgAAXJYAAF2WAABflgAAxJYAAMWWAADblgAA3JYAAN2WAADflgAA85YAAPiW
AAAxlwAAMpcAAEiXAABKlwAA+fL58vny+evy+evy+fLk4Mv5xPnr8sv5xPnr8qibjpuBdGcA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAQiBBEgBAAVoDhOjhhVobVDOABZoqx2WABkB
CIEESAEABWgME6OGFWhtUM4AFmirHZYAGQEIgQRIAQAFaKkVo4YVaG1QzgAWaFs+gQAZAQiB
BEgBAAVoKROjhhVobVDOABZoGQV9ABkBCIEESAEABWgLE6OGFWhtUM4AFmirHZYANgEIAQRI
AQAFaAsTo4YVaG1QzgAWaKsdlgBDShAAYUoQAInKBwEBAIaJo6aDKgFDShQAYUoUAAAMFWht
UM4AFmiUSPsAACkVaG1QzgAWaNcoCgBDShAAYUoQAInKBwEBAIaJo6aDKgFDShQAYUoUAAYW
aHUyOAAADBVo1ygKABZo1ygKAAAMFWhtUM4AFmifdv0AAAwVaG1QzgAWaHUyOAAADBVobVDO
ABZo1ygKACNKlwAATZcAAE6XAABPlwAAUpcAAFWXAABklwAAe5cAAIGXAACClwAAg5cAAIiX
AACJlwAAipcAAIuXAACYlwAAoJcAALKXAAC/lwAAypcAAM6XAADklwAA55cAAPGXAADx5NfK
vcq9sL2hvaG9lNeFeGvXXlFEUQAAAAAAAAAAAAAAAAAAAAAAGQEIgQRIAQAFaBcTo4YVaG1Q
zgAWaPEqsgAZAQiBBEgBAAVoFhOjhhVobVDOABZo8SqyABkBCIEESAEABWgVE6OGFWhtUM4A
FmjxKrIAGQEIgQRIAQAFaLIVo4YVaG1QzgAWaCR8XwAZAQiBBEgBAAVoqRWjhhVobVDOABZo
JHxfAB0BCIEESAEABWipFaOGFWgeKx0AFmhbPoEAMEoaABkBCIEESAEABWgTE6OGFWhtUM4A
FmirHZYAHAEIgQRIAQAFaA0To4YVaG1QzgAWaKsdlgA2CIEAGQEIgQRIAQAFaLEVo4YVaG1Q
zgAWaIpVNAAZAQiBBEgBAAVoDROjhhVobVDOABZoqx2WABkBCIEESAEABWgME6OGFWhtUM4A
FmirHZYAGQEIgQRIAQAFaKkVo4YVaG1QzgAWaFs+gQAZAQiBBEgBAAVoDhOjhhVobVDOABZo
qx2WABwBCIEESAEABWgOE6OGFWhtUM4AFmirHZYANgiBF/GXAAD4lwAAAZgAAAKYAAAGmAAA
HZgAAB6YAAAfmAAANZgAADyYAABGmAAAR5gAAE6YAABWmAAAV5gAAJCYAACTmAAAlJgAAJuY
AACnmAAArpgAALWYAADx4tPGuaydkKyDdqx2nXZpXGlNPmkAAAAAAAAAAAAAAAAAAAAcAQiB
BEgBAAVoGhOjhhVobVDOABZo8SqyADUIgQAcAQiBBEgBAAVoIBOjhhVobVDOABZoYGlvADUI
gQAZAQiBBEgBAAVoGROjhhVobVDOABZo8SqyABkBCIEESAEABWgaE6OGFWhtUM4AFmjxKrIA
GQEIgQRIAQAFaBgTo4YVaG1QzgAWaPEqsgAZAQiBBEgBAAVorhWjhhVobVDOABZoJS94ABkB
CIEESAEABWitFaOGFWhtUM4AFmglL3gAHAEIgQRIAQAFaKsVo4YVaG1QzgAWaCUveAA2CIEA
GQEIgQRIAQAFaKsVo4YVaG1QzgAWaCUveAAZAQiBBEgBAAVoFxOjhhVobVDOABZo8SqyABkB
CIEESAEABWgWE6OGFWhtUM4AFmjxKrIAHAEIgQRIAQAFaBcTo4YVaG1QzgAWaPEqsgA2CIEA
HAEIgQRIAQAFaB4To4YVaG1QzgAWaPEqsgA2CIEAHAEIgQRIAQAFaBYTo4YVaG1QzgAWaPEq
sgA2CIEVtZgAAM+YAAD5mAAAFZkAABiZAAAbmQAAJJkAAEmZAABbmQAAXJkAAF2ZAABvmQAA
cJkAAJOZAACUmQAAlZkAAMCZAADBmQAAwpkAAMyZAADjmQAA5JkAAOaZAADy5djLvuXysaSX
inuKboqXe5dupGFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANgEIAQRIAQAFaGuDo4YVaG1Q
zgAWaMI+0ABDShAAYUoQAInKBwEBAIaJo6aDKgFDShQAYUoUAAAZAQiBBEgBAAVoR4OjhhVo
bVDOABZoqx2WABkBCIEESAEABWj3E6OGFWhtUM4AFmjRTuoAHAEIgQRIAQAFaPYTo4YVaG1Q
zgAWaNFO6gA2CIEAGQEIgQRIAQAFaPYTo4YVaG1QzgAWaNFO6gAZAQiBBEgBAAVoHxOjhhVo
bVDOABZoYGlvABkBCIEESAEABWggE6OGFWhtUM4AFmhgaW8AGQEIgQRIAQAFaB8To4YVaG1Q
zgAWaPEqsgAZAQiBBEgBAAVoIROjhhVobVDOABZoYGlvABkBCIEESAEABWj1E6OGFWhtUM4A
FmjRTuoAGQEIgQRIAQAFaCETo4YVaG1QzgAWaNFO6gAZAQiBBEgBAAVoGhOjhhVobVDOABZo
8SqyABkBCIEESAEABWgbE6OGFWhtUM4AFmjxKrIAABbmmQAA75kAAICbAACBmwAAg5sAAKub
AADCmwAAw5sAABqcAAAbnAAAJZwAACacAABBnAAAQpwAAEicAABJnAAAYZwAAGKcAABknAAA
ZZwAAGacAADx5Ne7rp+SroWueK6SrmmuWkuuPgAAAAAAAAAAAAAAAAAAAAAAAAAAGQEIgQRI
AQAFaEyDo4YVaG1QzgAWaBRU+QAcAQiBBEgBAAVoTIOjhhVobVDOABZoFFT5AEgqAQAcAQiB
BEgBAAVoTIOjhhVobVDOABZoFFT5ADYIgQAcAQiBBEgBAAVoS4OjhhVobVDOABZoFFT5ADYI
gQAZAQiBBEgBAAVoUYOjhhVobVDOABZoFFT5ABkBCIEESAEABWhQg6OGFWhtUM4AFmgUVPkA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnZJ4+wgAARxIAQyQBRcaAAAABAF+D
o4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABnZJ4+wgAAC5igAACaoAAAsaAAACKhAAAjoQAAQqEAAFGhAACFoQAA
hqEAAJyhAACdoQAAo6EAAMOhAADEoQAAxaEAAMmhAADLoQAA26EAANyhAADdoQAA3qEAAOSh
AAD6oQAA+6EAAPyhAAD9oQAAE6IAABSiAAAVogAAFqIAAByiAAAeogAAH6IAAOTVyLvIrMi7
yJ2QyJ2QyJDIkMiBdMiBZXTIdIFldMhTAAAiAQiBBEgBAAVoYoOjhglqAQAt8BVobVDOABZo
TxZ0ADUIgQAcAQiBBEgBAAVoYoOjhhVobVDOABZoTxZ0AEgqAQAZAQiBBEgBAAVoYoOjhhVo
bVDOABZoTxZ0ABwBCIEESAEABWhig6OGFWhtUM4AFmhPFnQANgiBABkBCIEESAEABWhhg6OG
FWhtUM4AFmhPFnQAHAEIgQRIAQAFaGGDo4YVaG1QzgAWaE8WdAA2CIEAHAEIgQRIAQAFaF+D
o4YVaG1QzgAWaE8WdAA1CIEAGQEIgQRIAQAFaGCDo4YVaG1QzgAWaE8WdAAZAQiBBEgBAAVo
X4OjhhVobVDOABZoTxZ0ABwBCIEESAEABWhfg6OGFWhtUM4AFmhPFnQANgiBADYBCAEESAEA
BWhrg6OGFWhtUM4AFmjCPtAAQ0oQAGFKEACJygcBAQCGiaOmgyoBQ0oUAGFKFAAgH6IAACyi
AABDogAARKIAAHKiAABzogAAn6IAAK6iAACvogAAvKIAAL6iAAAMowAADaMAAE6jAABPowAA
UqMAAHGjAAByowAAq6MAAKyjAAC7owAAvKMAAL2jAADVowAA1qMAAPmjAAD6owAAHqQAAB+k
AABEpAAARaQAAHCkAABxpAAAcqQAAIqkAACLpAAAzqQAAM+kAAAopQAAKaUAAHalAAB3pQAA
xKUAAMWlAAAIpgAACaYAAGKmAABjpgAAsKYAALGmAAD+pgAA/6YAAFinAABZpwAApqcAAKen
AAD0pwAA9acAAE6oAADx5Nfk1+TKvcq95L3kveTKsKmim5eTm5ebl5uXm5ebl5Obl5uXm5eb
l5uXm5ebl5uXm5ebl5uXm5ebBhZo5WqWAAAGFmh1MjgAAAwVaNcoCgAWaNcoCgAADBVoVXva
ABZodTI4AAAMFWhVe9oAFmjXKAoAABkBCIEESAEABWheg6OGFWhtUM4AFmhPFnQAGQEIgQRI
AQAFaGaDo4YVaG1QzgAWaEp5jgAZAQiBBEgBAAVoX4OjhhVobVDOABZoSnmOABkBCIEESAEA
BWhlg6OGFWhtUM4AFmhKeY4AGQEIgQRIAQAFaF+Do4YVaG1QzgAWaE8WdAAcAQiBBEgBAAVo
X4OjhhVobVDOABZoTxZ0ADUIgTpxpAAAcqQAAIukAADPpAAAKaUAAHelAADFpQAACaYAAGOm
AACxpgAA/6YAAFmnAACnpwAA9acAAE+oAACdqAAA66gAAAepAAAIqQAACakAAB6pAABPqQAA
cKkAALCpAADhqQAAAqoAAEiqAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAA
AAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAA
APoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6
AAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAN8AAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAA
AAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAA
AAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAABESAAMkAWEkAWdknj7CAG/GBwEB
AIaJo6ZkJgEDJABhJAAACRIAZ2SePsIAb8YHAQEAhomjpgAEFABnZJIYdwAAGk6oAABPqAAA
nKgAAJ2oAADqqAAA66gAAOyoAADwqAAAB6kAAAipAAALqQAAHakAAB6pAABOqQAAT6kAAG+p
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
ArUAAAO1AAAutQAAL7UAAGy1AABttQAAnLUAAJ21AADStQAA+fX59fn1+fXo3M3G+fX59fn1
+fX59fn1+fX59fn1+fX59fnC+fW79fn1t/n1+fX59fn1+fX59fn1+fX59fn1+fX59fn1+fX5
AAAGFmhVe9oAAAwVaLtDxwAWaNcoCgAABhZo5WqWAAAMFWhtUM4AFmh1MjgAABwBCIEESAEA
BWgri6OmFWiYFqkAFmiYFqkANgiBABYBCIEESAEABWgti6OmFmiYFqkANgiBABkBCIEESAEA
BWgri6OmFWhtUM4AFmiYFqkABhZodTI4AAAMFWjXKAoAFmjXKAoASMezAADXswAA2LMAAPyz
AAD+swAADrQAABe0AAAytAAAP7QAAFm0AAB2tAAAqLQAAM+0AAADtQAAL7UAAG21AACdtQAA
07UAAP+1AAAWtgAALbYAAFy2AACMtgAAvLYAAOy2AAActwAAZbcAAK+3AAD5twAAQ7gAAPoA
AAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAA
AAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAA
AAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAA
AAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAA
APoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6
AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAAAAAA
AAQUAGdkkhh3AAAd0rUAANO1AADetQAA9LUAAP61AAD/tQAAFbYAABa2AAAstgAALbYAAFu2
AABctgAAi7YAAIy2AAC7tgAAvLYAAOu2AADstgAAG7cAABy3AABktwAAZbcAAK63AACvtwAA
+LcAAPm3AABCuAAAQ7gAAIy4AACNuAAAr7gAALC4AACyuAAAs7gAALW4AAC5uAAA0LgAANG4
AAD1uAAA9rgAAPe4AAD4uAAACLkAAAm5AAARuQAAErkAAC25AAAuuQAAOrkAADu5AABUuQAA
VbkAAHK5AABzuQAAprkAAKe5AADSuQAA07kAABC6AAARugAANroAADe6AABsugAAbboAAHi6
AACOugAA/Obc1fzV/NX81fzV/NX81fzV/NX81fzV/NX81fzV/NX8yLytptX81fzV/NX81fzV
/NX81fzV/NX81fzV/NX85twAAAAMFWhtUM4AFmh1MjgAABwBCIEESAEABWgri6OmFWiYFqkA
FmiYFqkANgiBABYBCIEESAEABWgti6OmFmiYFqkANgiBABkBCIEESAEABWgri6OmFWhtUM4A
FmiYFqkADBVo1ygKABZo1ygKAAATAQiBBEgBAAVopIOjhhZoVXvaACsACIEVaNcoCgAWaNco
CgAXaFV72gBjSAEAZGgAAAAAZGgAAAAAZGikg6OGBhZodTI4AEFDuAAAjbgAALC4AACzuAAA
0LgAANG4AAD2uAAA+LgAAAm5AAASuQAALrkAADu5AABVuQAAc7kAAKe5AADTuQAAEboAADe6
AABtugAAmboAALG6AADJugAA+roAACy7AABeuwAAkLsAAMK7AAD6AAAAAAAAAAAAAAAA+gAA
AAAAAAAAAAAAAPoAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA3wAAAAAAAAAAAAAAAPoAAAAA
AAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAA
AAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAA
AAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAA
AAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA
+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAABES
AAMkAWEkAWdknj7CAG/GBwEBAIaJo6ZkJgEDJABhJAAACRIAZ2SePsIAb8YHAQEAhomjpgAE
FABnZJIYdwAAGo66AACYugAAmboAALC6AACxugAAyLoAAMm6AAD5ugAA+roAACu7AAAsuwAA
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
xoAAAAEAnFOjpgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdkkhh3AAAEGwBnZCwGRgAABBIAZ2SePsIAAAQUAGdk
khh3AAATQsMAAEPDAABEwwAATcMAAFDDAABTwwAAVMMAAFXDAABWwwAAWMMAAKPDAACkwwAA
ssMAALPDAADPwwAA0svEvcS0rZdyXEY5KjkAAAAAAAAAAAAAHAEIgQRIAQAFaLGDo4YVaG1Q
zgAWaFQAmwA2CIEAGQEIgQRIAQAFaLGDo4YVaG1QzgAWaFQAmwArAAiBFWhtUM4AFmifdv0A
F2hUAJsAY0gBAGRoAAAAAGRoAAAAAGRosYOjhisACIEVaG1QzgAWaNcoCgAXaFQAmwBjSAEA
ZGgAAAAAZGgAAAAAZGixg6OGSAAIARVobVDOABZo1ygKABdoVACbAENKEABhShAAY0gBAGRo
AAAAAGRoAAAAAGRosYOjhonKBwEBAIaJo6aDKgFDShQAYUoUAAArAAiBFWhtUM4AFmh1MjgA
F2hUAJsAY0gBAGRoAAAAAGRoAAAAAGRosYOjhgwVaG1QzgAWaJ92/QAAEBVoHisdABZo1ygK
ADBKGgAADBVobVDOABZo7RyjAAAMFWhtUM4AFmjXKAoAAAwVaG1QzgAWaFQAmwAAWQAIAQNq
AAAAABVobVDOABZo7RyjABdoVACbADBKFwA8CAFVCAFjSAEAZGgAAAAAZGgAAAAAZGitg6OG
icoHAQEAhomjpoMqAQNqAAAAAENKFABVCAFhShQAAA7hwgAAVsMAAAPEAAAExAAAHcQAAE7E
AACVxAAAhsUAAIfFAAD0AAAAAAAAAAAAAAAArgAAAAAAAAAAAAAAAKkAAAAAAAAAAAAAAACp
AAAAAAAAAAAAAAAAlwAAAAAAAAAAAAAAAJcAAAAAAAAAAAAAAACSAAAAAAAAAAAAAAAASgAA
AAAAAAAAAAAAAAAAAAAAAAAAAEcSAEMkAUXGgAAAAQD4hKOGAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AM+Lo6YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABIJABnZNcoCgAAEcXxAADG8QAAzPEAAM3xAADl8QAA5vEAAP/x
AAAA8gAAIPIAACHyAABW8gAAV/IAAFjyAABZ8gAAb/IAAHDyAABx8gAAcvIAAHTyAAB78gAA
ffIAAH/yAACB8gAAgvIAAIPyAACI8gAA4/IAAOTyAAD88gAACfMAABHzAAAS8wAAE/MAACLz
AAAj8wAAJPMAAPz1/PX89fz1/PX89fz1/PX84tPMvbmzopPMjMyCzIJ2gsxgAAAAAAAAAAAA
AAAAACoBCAEESAEABWjOi6OmFWioUsIAFmioUsIAicoHAQEAzoujpoMqATBKGgAAFgEIgQRI
AQAFaM6Lo6YWaKhSwgA2CIEAEwEIgQRIAQAFaM6Lo6YWaKhSwgAMFWhtUM4AFmiUSPsAABwV
aCdnMwAWaNcoCgCJygcBAQDNi6OmgyoBNQgBACAVaBdmgwAWaCdnMwA1CAGJygcBAQDJi6Om
gyoBMEodAAAKFmioUsIAMEodAAAGFmgnZzMAAB0VaCdnMwAWaNcoCgCJygcBAQDMi6OmgyoB
MEoaAAwVaG1QzgAWaNcoCgAAHBVoJ2czABZo1ygKAInKBwEBAMyLo6aDKgE1CAEAJRVoJ2cz
ABZo1ygKAENKEABhShAAicoHAQEAzIujpoMqATBKHQAMFWjXKAoAFmjXKAoAAAYWaHUyOAAj
JPMAACXzAAAm8wAAJ/MAAGDzAABh8wAAlPMAAJXzAACX8wAAAvQAAAP0AAAz9AAANPQAAGf0
AABo9AAAavQAANb0AADX9AAAB/UAAAj1AABB9QAAQvUAAET1AACi9QAAo/UAAKT1AACm9QAA
qvUAAMH1AADC9QAA+PUAAPn1AAD79QAAYvYAAGP2AACZ9gAAmvYAAJv2AADZ9gAA2vYAANz2
AAAH9wAA6eLb1NvNybTUrdTbzcm01K3U283JtNTi26CUhdvNybTUrdTi283JemkAIRVoshbE
ABZo1ygKADBKEwCJygcBAQAWi6OmgyoBQ0oUABQVaNcoCgAWaNcoCgBDShAAYUoQAAAcAQiB
BEgBAAVoKIujphVomBapABZomBapADYIgQAWAQiBBEgBAAVoLYujphZomBapADYIgQAZAQiB
BEgBAAVoKIujphVobVDOABZomBapAAwVaG1QzgAWaJRI+wAAKRVobVDOABZo1ygKAENKEABh
ShAAicoHAQEAhomjpoMqAUNKFABhShQABhZodTI4AAAMFWjXKAoAFmjXKAoAAAwVaG1QzgAW
aNcoCgAADBVobVDOABZodTI4AAAMFWhtUM4AFmifdv0AACsACIEVaG1QzgAWaNcoCgAXaKhS
wgBjSAEAZGgAAAAAZGgAAAAAZGjOi6OmACmB8gAAJ/MAAGHzAACV8wAANPQAAGj0AAAI9QAA
QvUAAKT1AADB9QAAwvUAAPn1AACb9gAA2vYAAAn3AAC3AAAAAAAAAAAAAAAAqgAAAAAAAAAA
AAAAAKUAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAApQAAAAAAAAAAAAAAAKAAAAAAAAAAAAAA
AAClAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAJYAAAAAAAAAAAAAAACFAAAAAAAAAAAAAAAA
pQAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAClAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAA
AAAAAAkAADckADgkAEgkAGdk1ygKABESAAMkAWEkAWdknj7CAG/GBwEBAIaJo6ZkJgEDJABh
JAAACRIAZ2SePsIAb8YHAQEAhomjpgAEEgBnZJ4+wgAABBQAZ2SSGHcADRIAZ2SoUsIAb8YH
AQEA0IujpmQmAQBGGwAARxIAQyQBRcaAAAABAMyLo6YAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnZJ4+wgAADgf3
AAAI9wAACfcAAEv3AABM9wAATvcAAGn3AABr9wAAc/cAAHT3AAB19wAAtvcAALf3AAD39wAA
+PcAAPr3AAAp+AAAKvgAACv4AABh+AAAYvgAAKL4AACj+AAApfgAAOH4AADi+AAA4/gAADT5
AAA1+QAAN/kAAJj5AACZ+QAAxvkAAMf5AADI+QAAyvkAAB/6AAAg+gAAIfoAAHv6AAB8+gAA
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
AAAAAABnZEYZZQBvxgcBAQBZi6OmZCYBAEYSAFAbAEMkAUXGgAAAAQCXi6OmAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAZ2RGGWUAb8YHAQEAWYujpmQmAQBGEgAACJ8IAQDLCAEAzAgBAM0IAQA1CQEANgkBAJsJ
AQCcCQEAnQkBAAEKAQACCgEAFQoBABcKAQAfCgEAIQoBACsKAQAtCgEALgoBAC8KAQCcCgEA
nQoBAM4KAQDPCgEA0QoBAAULAQAGCwEACAsBAC8LAQAwCwEAMgsBAEYLAQBHCwEASQsBAE0L
AQBkCwEAZQsBAHQLAQB1CwEAeAsBAKALAQChCwEA3wsBAOALAQAeDAEAHwwBAF0MAQD58uv5
5Pny6/nk+c/5z/nP8uv55PnrxLmxxLmxxLmxpJiJ64J+dIJ+gn6CfoIAAAATAQiBBEgBAAVo
lIOjhhZo5WqWAAYWaHUyOAAADBVo1ygKABZo1ygKAAAcAQiBBEgBAAVoK4ujphVomBapABZo
mBapADYIgQAWAQiBBEgBAAVoLYujphZomBapADYIgQAZAQiBBEgBAAVoK4ujphVobVDOABZo
mBapAA4WaHUyOABDShAAYUoQAAAUFWjXKAoAFmjXKAoAQ0oQAGFKEAAAFBVo1ygKABZo1ygK
AENKDABhSgwAACkVaG1QzgAWaNcoCgBDSg8AYUoPAInKBwEBAIaJo6aDKgFDShQAYUoUAAwV
aG1QzgAWaJRI+wAADBVobVDOABZodTI4AAAMFWhtUM4AFmifdv0AAAwVaG1QzgAWaNcoCgAt
zwoBAAYLAQAwCwEARwsBAGQLAQBlCwEAdQsBAHYLAQChCwEA4AsBAB8MAQBeDAEAmwwBANoM
AQAXDQEAVA0BAJQNAQDXDQEAHg4BAHEOAQC4DgEA9Q4BADQPAQBzDwEAsA8BAPYAAAAAAAAA
AAAAAAD2AAAAAAAAAAAAAAAA9gAAAAAAAAAAAAAAAOwAAAAAAAAAAAAAAADbAAAAAAAAAAAA
AAAA1gAAAAAAAAAAAAAAANYAAAAAAAAAAAAAAADWAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAA
ANYAAAAAAAAAAAAAAADWAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANYAAAAAAAAAAAAAAADW
AAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANYAAAAAAAAAAAAAAADWAAAAAAAAAAAAAAAA1gAA
AAAAAAAAAAAAANYAAAAAAAAAAAAAAADWAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAANYAAAAA
AAAAAAAAAADWAAAAAAAAAAAAAAAA1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQA
Z2SSGHcAERIAAyQBYSQBZ2SePsIAb8YHAQEAhomjpmQmAQMkAGEkAAAJEgBnZJ4+wgBvxgcB
AQCGiaOmCQAANyQAOCQASCQAZ2TXKAoAABhdDAEAXgwBAJoMAQCbDAEA2QwBANoMAQAWDQEA
Fw0BAFMNAQBUDQEAkw0BAJQNAQDWDQEA1w0BAB0OAQAeDgEAcA4BAHEOAQC3DgEAuA4BAPQO
AQD1DgEAMw8BADQPAQByDwEAcw8BAK8PAQCwDwEA7g8BAO8PAQDxDwEA9A8BAAUQAQAGEAEA
MBABADEQAQAyEAEAmhABAJsQAQD+EAEA/xABAGsRAQBsEQEAoBEBAKERAQCiEQEA/xEBAAAS
AQAyEgEAMxIBADQSAQBOEgEATxIBALUSAQC2EgEAIRMBACITAQArEwEALBMBAC0TAQAwEwEA
jRMBAI4TAQCPEwEAkhMBANoTAQDbEwEA3BMBABgUAQAZFAEAJxQBACgUAQBQFAEAURQBAIgU
AQCJFAEAihQBAIsUAQCqFAEArRQBANAUAQDRFAEA0hQBAPz1/PX89fz1/PX89fz1/PX89fz1
/PX89fz1/PX89fH1/PXt/Obf5t/m3+bY0ebf5tjR9fzm3+bf5tjR8fXt/PH17fz1/PX89fz1
/PX89fH17fwAAAAADBVobVDOABZodTI4AAAMFWhtUM4AFmifdv0AAAwVaG1QzgAWaJRI+wAA
DBVobVDOABZo1ygKAAAGFmifdv0AAAYWaOVqlgAADBVo1ygKABZo1ygKAAAGFmh1MjgAUrAP
AQDvDwEA8g8BAAYQAQAyEAEAohEBADQSAQBPEgEALRMBAC4TAQCPEwEAkBMBANwTAQAZFAEA
KBQBAFEUAQCJFAEAixQBAKsUAQDSFAEA0xQBAAwVAQAzFQEANBUBAI8VAQCQFQEAxxUBAPoA
AAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAADwAAAA
AAAAAAAAAAAA8AAAAAAAAAAAAAAAAOcAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAA+gAAAAAA
AAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAA
AAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAA
APoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAADckADgkAEgkAGdk1ygKAAAEEgBnZJ4+
wgAABA8AZ2RIVfAAAAQUAGdkkhh3AAAa0hQBANUUAQALFQEADBUBADIVAQAzFQEANhUBAI0V
AQCOFQEAjxUBAJIVAQDFFQEAxhUBAMcVAQAlFgEAJhYBAGMWAQBkFgEAZhYBAGoWAQCBFgEA
ghYBAJUWAQCWFgEAoRYBAKIWAQCjFgEApBYBAKcWAQDKFgEAyxYBAMwWAQD3FgEA+BYBAPsW
AQAgFwEAIRcBACIXAQBhFwEAYhcBAHUXAQB2FwEAgRcBAIIXAQCDFwEAhBcBALEXAQCyFwEA
4RcBAOIXAQDjFwEA5BcBAFIYAQBTGAEAnxgBAKAYAQDZGAEA2hgBAAAZAQABGQEAQxkBAEQZ
AQBKGQEASxkBAIEZAQCCGQEAjBkBAI0ZAQDKGQEAyxkBAPz18fXx/PXt8fz17fH18fXx4NTF
vvXx9fH18fz17fH18fz17fH18fXx9fH18fXx9fH18bewt7718fXx9fH18fXx9fH18QAAAAwV
aG1QzgAWaJRI+wAADBVobVDOABZo1ygKAAAMFWhtUM4AFmh1MjgAABwBCIEESAEABWgri6Om
FWiYFqkAFmiYFqkANgiBABYBCIEESAEABWgti6OmFmiYFqkANgiBABkBCIEESAEABWgri6Om
FWhtUM4AFmiYFqkABhZon3b9AAAGFmh1MjgAAAwVaNcoCgAWaNcoCgAABhZo5WqWAEXHFQEA
JhYBAGQWAQCBFgEAghYBAJYWAQCiFgEApBYBAKUWAQDMFgEA+BYBAPkWAQAiFwEAYhcBAHYX
AQCCFwEAhBcBALIXAQDiFwEA5BcBAKAYAQDaGAEAARkBAEQZAQBLGQEAghkBAPoAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAN8AAAAAAAAAAAAAAAD6AAAAAAAAAAAA
AAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAA
APoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6
AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAA
AAAAAAAAAAAAAPoAAAAAAAAAAAAAAADaAAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAA
AAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAAAAAA
AAQSAGdknj7CABESAAMkAWEkAWdknj7CAG/GBwEBAIaJo6ZkJgEDJABhJAAACRIAZ2SePsIA
b8YHAQEAhomjpgAEFABnZJIYdwAAGYIZAQCNGQEAyxkBAOcZAQAZGgEASxoBAIYaAQC0GgEA
4hoBABAbAQCIGwEAphsBANsdAQDcHQEAOR4BADoeAQCGHgEAwx4BANIeAQD7HgEAPh8BAEAf
AQBYHwEAdR8BAHYfAQD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6
AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAA
AAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA7AAAAAAAAAAAAAAAAPUAAAAA
AAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAA
AAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAA
AAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA4gAAAAAAAAAAAAAAANEAAAAAAAAAAAAA
AAAAAAAAAAAREgADJAFhJAFnZJ4+wgBvxgcBAQCGiaOmZCYBAyQAYSQAAAkSAGdknj7CAG/G
BwEBAIaJo6YJAAA3JAA4JABIJABnZNcoCgAABBIAZ2SePsIAAAQUAGdkkhh3AAAYyxkBAOYZ
AQDnGQEAGBoBABkaAQBKGgEASxoBAIUaAQCGGgEAsxoBALQaAQDhGgEA4hoBAA8bAQAQGwEA
fRsBAH4bAQCGGwEAhxsBAIgbAQClGwEAphsBAAwcAQANHAEAchwBAHMcAQCaHAEAmxwBAAId
AQADHQEAbh0BAG8dAQDQHQEA0R0BANkdAQDaHQEA2x0BAN4dAQA3HgEAOB4BADkeAQA8HgEA
hB4BAIUeAQCGHgEAwh4BAMMeAQDRHgEA0h4BAPoeAQD7HgEAPR8BAD4fAQA/HwEAQB8BAFcf
AQBYHwEAWh8BAF4fAQB1HwEAdh8BAIwfAQCPHwEAqB8BAKkfAQDVHwEA2B8BAPn1+fX59fn1
+fX59fn17ufu4Nn59e7n7ufu5+7n7ufu5+7g2dX50fXV+dH1+fX59fn1+fX59fn1xLip2fnV
+fX51QAAAAAcAQiBBEgBAAVoK4ujphVomBapABZomBapADYIgQAWAQiBBEgBAAVoLYujphZo
mBapADYIgQAZAQiBBEgBAAVoK4ujphVobVDOABZomBapAAYWaJ92/QAABhZo5WqWAAAMFWht
UM4AFmh1MjgAAAwVaG1QzgAWaJ92/QAADBVobVDOABZolEj7AAAMFWhtUM4AFmjXKAoAAAYW
aHUyOAAADBVo1ygKABZo1ygKAEJ2HwEAjR8BAKkfAQDWHwEA8h8BAAkgAQAwIAEAMSABAGog
AQCSIAEAkyABAO4gAQDvIAEAJiEBADIhAQBgIQEAwiEBAP8hAQATIgEAHyIBACEiAQAiIgEA
TCIBAHEiAQCgIgEAzSIBAPkiAQD6IgEALCMBAGcjAQD6AAAAAAAAAAAAAAAA+gAAAAAAAAAA
AAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAA
AAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA
+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoA
AAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAA
AAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAA
AAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAAAAAAAEFABnZJIYdwAAHdgfAQDxHwEA
8h8BAAggAQALIAEALiABAC8gAQAwIAEAMyABAGkgAQBqIAEAkSABAJIgAQCVIAEA7CABAO0g
AQDuIAEA8SABACQhAQAlIQEAJiEBADEhAQA0IQEAXyEBAGAhAQDBIQEAwiEBAP4hAQD/IQEA
EiIBABMiAQAeIgEAHyIBACAiAQAhIgEAJCIBAEsiAQBMIgEAcCIBAHEiAQCfIgEAoCIBAMwi
AQDNIgEA+CIBAPkiAQD8IgEAKyMBACwjAQBmIwEAZyMBAHojAQB7IwEAhiMBAIcjAQCIIwEA
iSMBAIojAQCLIwEAjiMBAMUjAQDGIwEA1CMBANUjAQDjIwEA5CMBAOUjAQDmIwEA6SMBAPsj
AQD8IwEAANACACfQAgAo0AIAK9ACADXQAgA20AIAYtACAGPQAgBk0AIAZdACAInQAgCK0AIA
tdACALjQAgC+0AIAv9ACANfQAgDa0AIA29ACAOPQAgDk0AIA89ACAPTQAgD59fnx+e318fn1
+fXx+e318fnt9fnx+fX59fn1+fX59fn18fn1+fX59fn1+fXx+fX59fn1+fX59fn18fn1+fX5
9fn18fn16/n18fn1+fX59fn1+fH59fnx9fn1+fUAA1UIAQYWaJ92/QAABhZo5WqWAAAGFmh1
MjgAAAwVaNcoCgAWaNcoCgBdZyMBAHsjAQCHIwEAiSMBAIsjAQCMIwEAxiMBANUjAQDkIwEA
5iMBAOcjAQD8IwEAKNACACnQAgA20AIAY9ACAGXQAgCK0AIAttACAL/QAgDY0AIA29ACAOTQ
AgD00AIA/NACAP7QAgAA0QIAAtECAATRAgD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoA
AAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAA
AAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAA
AAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAA
AAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAA
APoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAZ2SSGHcAABxvaXQgPSBzb2x2
ZSAoZiwgb2l0ICwgaXQgLCBwcmVjaXNpb24gKTsNDS8vIERvIHRoZSArKw1mb3IgKCBzaXpl
X3Qgcz0wOyBzPCBjdXJyZW50IC4gc2l6ZSAoKTsgKytzKQ17DWlmIChpbmYoaXRbc10pID49
IHN1cCggYmVnaW4gW3NdKSkgew1pZiAocyA9PSBjdXJyZW50IC4gc2l6ZSAoKSAtMSkgcmV0
dXJuIG9pdDsgDS8vIGRvbmUhDWVsc2UgaXRbc10gPSBiZWdpbiBbc107IA0vLw19IGVsc2Ug
ew1pdFtzXSA9IGVuZFtzXTsNYnJlYWsgOw19DX0NfQ19DUFnYWluLCB0aGlzIHNvbHZlciBp
cyB3cmFwcGVkIGluIHRoZSBleGFtcGxlIGNvZGUgc3VibWl0dGVkIHdpdGggdGhpcyBwcm9w
b3NhbCB1c2luZyBhIGRyaXZlciB0aGF0IHBhcnNlcyBleHByZXNzaW9ucyAodXNpbmcgQm9v
c3Quc3Bpcml0KSBhbmQgcHJvZHVjZXMgYW4gb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxv
d2luZyBvdXRwdXQ6DWVudGVyIHRoZSBudW1iZXIgb2YgdmFyaWFibGVzIDogMg1lbnRlciB0
aGUgdmFyaWFibGUgbmFtZXMNdmFyaWFibGUgMDogeA12YXJpYWJsZSAxOiB5DWVudGVyIHRo
ZSBudW1iZXIgb2YgZXF1YXRpb25zIG9mIHRoZSBzeXN0ZW0gLi4uIG9yIFtxIG9yIFFdIHRv
IHF1aXQNMg1UeXBlIDIgZXhwcmVzc2lvbnMgb2YgdGhlIHZhcmlhYmxlcyAuLi4NMjANZXhw
ciA6IHgqeCArIHkqeSAtIDQNcGFyc2luZyBzdWNjZWVkZWQNZXhwciA6ICh4IC0xKSooeCAt
MSkgKyAoeSAtMSkqKHkgLTEpIC00DXBhcnNpbmcgc3VjY2VlZGVkDWVudGVyIHRoZSBib3Vu
ZHMgb2YgdGhlIGludGVydmFsIGJveCBvdmVyIHdoaWNoIHRvIHNlYXJjaCBmb3IgemVyb2Vz
IDoNZGltIDA6IC0xMCAxMA1kaW0gMTogLTEwIDEwDWVudGVyIHRoZSBwcmVjaXNpb24gd2l0
aCB3aGljaCB0byBpc29sYXRlIHRoZSB6ZXJvZXMgOg0wLjAwMDAwMDAwMQ1Tb2x2ZWQgd2l0
aCA2MzMgcmVjdXJzaXZlIGNhbGxzDVNvbHV0aW9ucyAoaWYgYW55KSBsaWUgaW4gOg1bMS44
MjI4NzU2NTQ5MDY5NjU3OTIyOzEuODIyODc1NjU1NDg5MDQyNDAxM10gWyAtMC44MjI4NzU2
NTYzMDM5NDk2NTQxOyAtMC44MjI4NzU2NTU3MjE4NzMwNDQ5N10NWzEuODIyODc1NjU0OTA2
OTY1NzkyMjsxLjgyMjg3NTY1NTQ4OTA0MjQwMTNdIFsgLTAuODIyODc1NjU1NzIxODczMDQ0
OTc7IC0wLjgyMjg3NTY1NTEzOTc5NjQzNTgzXQ1bMS44MjI4NzU2NTU0ODkwNDI0MDEzOzEu
ODIyODc1NjU2MDcxMTE5MDEwNF0gWyAtMC44MjI4NzU2NTU3MjE4NzMwNDQ5NzsgLTAuODIy
ODc1NjU1MTM5Nzk2NDM1ODNdDVsgLTAuODIyODc1NjU2MzAzOTQ5NjU0MTsgLTAuODIyODc1
NjU1NzIxODczMDQ0OTddIFsxLjgyMjg3NTY1NDkwNjk2NTc5MjI7MS44MjI4NzU2NTU0ODkw
NDI0MDEzXQ1bIC0wLjgyMjg3NTY1NTcyMTg3MzA0NDk3OyAtMC44MjI4NzU2NTUxMzk3OTY0
MzU4M10gWzEuODIyODc1NjU0OTA2OTY1NzkyMjsxLjgyMjg3NTY1NTQ4OTA0MjQwMTNdDVsg
LTAuODIyODc1NjU1NzIxODczMDQ0OTc7IC0wLjgyMjg3NTY1NTEzOTc5NjQzNTgzXSBbMS44
MjI4NzU2NTU0ODkwNDI0MDEzOzEuODIyODc1NjU2MDcxMTE5MDEwNF0NVklJIEFja25vd2xl
ZGdlbWVudHMNV2UgYXJlIGdyYXRlZnVsIHRvIHRoZSBCb29zdCBjb21tdW5pdHkgZm9yIGl0
cyBzdXBwb3J0LCBhbmQgdGhlIGRlZXAgcGVlciByZXZpZXcgb2YgdGhlIEJvb3N0LkludGVy
dmFsIGxpYnJhcnkuIFNwZWNpYWwgdGhhbmtzIGdvIHRvIEplbnMgTWF1cmVyIGZvciBzdGFy
dGluZyB0aGUgZmlyc3QgdmVyc2lvbiBvZiB3aGF0IGJlY2FtZSBCb29zdC5JbnRlcnZhbCwg
YW5kIHRvIGhpbSBhbmQgdGhlIHJlbGlhYmxlIGNvbXB1dGluZyBjb21tdW5pdHkgZm9yIGFy
Y2hpdmluZyB0aGUgZGlzY3Vzc2lvbnMgYW5kIGRlc2lnbiBkZWNpc2lvbnMgdGhhdCBncmVh
dGx5IGhlbHBlZCB0aGUgcHJlcGFyYXRpb24gb2YgdGhpcyBwcm9wb3NhbC4NV2UgYWxzbyB3
b3VsZCBsaWtlIHRvIHRoYW5rIGEgbG90IG9mIHBlb3BsZSBmb3IgdGhlaXIgY29tbWVudHMg
b24gdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIHByb3Bvc2FsIDogTGF3cmVuY2UgQ3Jv
d2wgYW5kIGhpcyBjb2xsZWFndWVzIGF0IFN1biwgR2VvcmdlIENvcmxpc3MgYW5kIGhpcyBj
b2xsZWFndWVzIGZyb20gdGhlIEludGVydmFsIFN1YnJvdXRpbmUgTGlicmFyeSBwcm9qZWN0
LCBhbmQgYSBsb3Qgb2YgcGVvcGxlIGhhdmluZyBtYWRlIGNvbW1lbnRzIG9uIHBhcnRzIG9m
IHRoZSBwcm9wb3NhbCA6IFN0ZWZhbiBTY2hpcnJhLCBKb3JpcyBWYW4gRGVyIEhvZXZlbiwg
QmVybmFyZCBNb3VycmFpbi4uLg1GaW5hbGx5LCB0aGFua3MgdG8gdGhlIExpYnJhcnlXb3Jr
aW5nIEdyb3VwIGZvciB0aGUgY29tbWVudHMgYW5kIHBvc2l0aXZlIGZlZWRiYWNrIG9uIHRo
ZSBpbml0aWFsIHZlcnNpb24gcHJlc2VudGVkIGluIE1vbnQtVHJlbWJsYW50Lg1SZWZlcmVu
Y2VzDVsxXSBBTlNJL0lFRUUuIElFRUUgU3RhbmRhcmQgNzU0IGZvciBCaW5hcnkgRmxvYXRp
bmctUG9pbnQgQXJpdGhtZXRpYy4gSUVFRSwgTmV3IFlvcmssIDE5ODUNWzJdIEguIEJy9m5u
aW1hbm4sIEcuIE1lbHF1aW9uZCwgYW5kIFMuIFBpb24uIFRoZSBkZXNpZ24gb2YgdGhlIEJv
b3N0IGludGVydmFsIGFyaXRobWV0aWMgbGlicmFyeS4NQWNjZXB0ZWQgZm9yIHB1YmxpY2F0
aW9uIGluIFRoZW9yZXRpY2FsIENvbXB1dGVyIFNjaWVuY2UsIFNwZWNpYWwgSXNzdWUgb24g
UmVhbCBOdW1iZXJzDWFuZCBDb21wdXRlcnMgKFJOQzUpLiBQcmVwcmludCBhdmFpbGFibGUg
YXQgaHR0cDovL3Bob3Rvbi5wb2x5LmVkdS9+aGJyL3B1YmxpLyBib29zdC1pbnRlcnZhbC1y
bmM1L3Rjcy5wZGYNWzNdIEguIEJy9m5uaW1hbm4sIEcuIE1lbHF1aW9uZCwgYW5kIFMuIFBp
b24uIFRoZSBCb29zdCBpbnRlcnZhbCBhcml0aG1ldGljIGxpYnJhcnkuIGh0dHA6Ly93d3cu
DWJvb3N0Lm9yZy9saWJzL251bWVyaWMvaW50ZXJ2YWwvZG9jL2ludGVydmFsLmh0bQ1bNF0g
W0NHQUxdIENHQUwuIENvbXB1dGF0aW9uYWwgR2VvbWV0cnkgQWxnb3JpdGhtcyBMaWJyYXJ5
LiBodHRwOi8vd3d3LmNnYWwub3JnLw1bNV0gVC4gSGlja2V5IGFuZCBRLiBKdSBhbmQgTS4g
SC4gVmFuIEVtZGVuLCBJbnRlcnZhbCBhcml0aG1ldGljOiBGcm9tIHByaW5jaXBsZXMgdG8g
aW1wbGVtZW50YXRpb24uDUouIEFDTSwgNDgoNCk6MTAzOJYxMDY4LCAyMDAxLg1bNl0gSW50
ZXJ2YWwgQ29tcHV0YXRpb25zLiBodHRwOi8vd3d3LmNzLnV0ZXAuZWR1L2ludGVydmFsLWNv
bXAvDVs3XSBMLiBKYXVsaW4sIE0uIEtpZWZmZXIsIE8uIERpZHJpdCwgYW5kIEUuV2FsdGVy
LiBBcHBsaWVkIEludGVydmFsIEFuYWx5c2lzLCB3aXRoIEV4YW1wbGVzIGluIFBhcmFtZXRl
ciBhbmQgU3RhdGUgRXN0aW1hdGlvbiwgUm9idXN0IENvbnRyb2wgYW5kIFJvYm90aWNzLiBT
cHJpbmdlci1WZXJsYWcsIDIwMDEuDTIxKHdhcyBwcmV2aW91cyBwYWdlIG51bWJlcikNDVs4
XSBPLiBLbnVlcHBlbC4gUFJPRklML0JJQVMgLSBBIEZhc3QgSW50ZXJ2YWwgTGlicmFyeS4g
Q09NUFVUSU5HIFZvbC4gNTMsIE5vLiAzLTQsIHAuIDI3Ny0yODcuDWh0dHA6Ly93d3cudGkz
LnR1LWhhcmJ1cmcuZGUva251ZXBwZWwvcHJvZmlsLw1bOV0gTS4gTGVyY2gsIEcuIFRpc2No
bGVyLCBKLiBXb2xmZiB2b24gR3VkZW5iZXJnLCBXLiBIb2ZzY2h1c3RlciwgYW5kIFcuIEty
5G1lci4gRklMSUIrKyBJbnRlcnZhbCBMaWJyYXJ5LiBodHRwOi8vd3d3Lm1hdGgudW5pLXd1
cHBlcnRhbC5kZS9vcmcvV1JTVC9zb2Z0d2FyZS9maWxpYi5odG1sDVsxMF0gUi4gQmFrZXIg
S2VhcmZvdHQgYW5kIFYuIEtyZWlub3ZpY2ggKGVkcy4pIEFwcGxpY2F0aW9ucyBvZiBJbnRl
cnZhbCBDb21wdXRhdGlvbnMuIEtsdXdlciwgMTk5Ni4NWzExXSBSLkUuIE1vb3JlLiBJbnRl
cnZhbCBBbmFseXNpcy4gUHJlbnRpY2UtSGFsbCwgRW5nbGV3b29kIENsaWZmcywgTkosIDE5
NjYuDVsxMl0gTi4gUmV2b2wgYW5kIEYuIFJvdWlsbGllci4gTVBGSSAxLjAsIE11bHRpcGxl
IFByZWNpc2lvbiBGbG9hdGluZy1Qb2ludCBJbnRlcnZhbCBMaWJyYXJ5LiBodHRwOiAvL3d3
dy5lbnMtbHlvbi5mci9+bnJldm9sL21wZmlfdG9jLmh0bWwNWzEzXSBHYW9sLCBOb3QgSnVz
dCBBbm90aGVyIEludGVydmFsIExpYnJhcnkuIGh0dHA6Ly93d3cuc291cmNlZm9yZ2UubmV0
L3Byb2plY3RzL2dhb2wvDVsxNF0gU3VuIE1pY3Jvc3lzdGVtcy4gQysrIEludGVydmFsIEFy
aXRobWV0aWMgUHJvZ3JhbW1pbmcgUmVmZXJlbmNlLiBodHRwOi8vZG9jcy5zdW4uY29tL2Ri
LyBkb2MvODA2LTc5OTgNWzE1XSBHLiBXaWxsaWFtIFdhbHN0ZXIuIFRoZSBFeHRlbmRlZCBS
ZWFsIEludGVydmFsIFN5c3RlbS4gTWFudXNjcmlwdCwgMTk5OC4gUHJlcHJpbnQgYXZhaWxh
YmxlIGF0IGh0dHA6Ly93d3cubXNjcy5tdS5lZHUvfmdsb2Jzb2wvd2Fsc3Rlci1wYXBlcnMu
aHRtbA0yMih3YXMgcHJldmlvdXMgcGFnZSBudW1iZXIpDQVSZW1vdmUgYWxsIGNvbG9ucyBp
biB0aGVzZSBoZWFkaW5ncw0FV2Ugc3VwcG9ydCB0aGUgdmlldyBleHByZXNzZWQgaW4gYSBw
dWJsaWMgY29tbWVudCwgdGhhdCBjYWxsIGJ5IHZhbHVlIHNob3VsZCBiZSB1c2VkLg0FSSBk
b26SdCB0aGluayBOVEJTIGlzIHVuZGVyc3Rvb2QgYnkgZXZlcnlvbmUuDQ0NAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTQAgD70AIA/NACAP3QAgD+0AIA
/9ACAADRAgAB0QIAAtECAAPRAgAE0QIAbdECAG7RAgDG0QIAx9ECAOjRAgDp0QIAAdICAALS
AgAP0gIAENICAB3SAgAe0gIAYdICAGLSAgBj0gIAZNICAIrSAgCL0gIAjNICAI7SAgCP0gIA
o9ICAKTSAgC10gIAttICAN3SAgDe0gIA79ICAPDSAgA20wIAN9MCAETTAgBF0wIAUtMCAFPT
AgCJ0wIAitMCAJXTAgCW0wIAtdMCALbTAgDR0wIA0tMCADLUAgAz1AIAlNQCAJXUAgD21AIA
99QCAFfVAgBY1QIAudUCALrVAgAb1gIAHNYCADDWAgAx1gIAl9YCAJjWAgD/1gIAANcCAGfX
AgBo1wIAl9cCAJjXAgCZ1wIAAdgCAALYAgBq2AIAa9gCANXYAgDW2AIA+NgCAPnYAgD59fn1
+fX59fn17ufu4Pn1+fX59fn1+fX59fnc9e7g+fX59fn1+fX59fn1+fX59fn1+fX59fn1+fX5
9fn1+fX59fn17ufu5+7n7tXg7ufu5+7n7tUAAAwVaG1QzgAWaJ92/QAABhZon3b9AAAMFWht
UM4AFmh1MjgAAAwVaG1QzgAWaJRI+wAADBVobVDOABZo1ygKAAAGFmh1MjgAAAwVaNcoCgAW
aNcoCgBUBNECAMfRAgDp0QIAAtICABDSAgAe0gIAYtICAGTSAgCM0gIAj9ICAKTSAgC20gIA
3tICAPDSAgA30wIARdMCAFPTAgCK0wIAltMCALbTAgDS0wIAM9QCAJXUAgD31AIAWNUCALrV
AgAc1gIAMdYCAJnXAgD6AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1
AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAA
AAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAA
AAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAA
AAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAA
AAAAAPUAAAAAAAAAAAAAAAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPUAAAAAAAAAAAAA
AAD1AAAAAAAAAAAAAAAA9QAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA
AAQPAGdkSFXwAAAEFABnZJIYdwAABBIAZ2SePsIAAByZ1wIA+tgCAIHZAgCM2QIA6NkCAEva
AgCj2gIADtsCAG/bAgCg2wIA8dsCAFbcAgB13AIAttwCAGrdAgCH3QIAiN0CAOjdAgAW3gIA
wN4CACXfAgB03wIAAOACAFjgAgDD4AIAW+ECAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA
9QAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoA
AAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAA
AAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA6wAAAAAA
AAAAAAAAANoAAAAAAAAAAAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAA
AAAAAAD6AAAAAAAAAAAAAAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAD6AAAAAAAAAAAA
AAAA+gAAAAAAAAAAAAAAAPoAAAAAAAAAAAAAAAAAAAAAAAAAERIAAyQBYSQBZ2SePsIAb8YH
AQEAhomjpmQmAQMkAGEkAAAJEgBnZJ4+wgBvxgcBAQCGiaOmAAQPAGdkSFXwAAAEEgBnZJ4+
wgAAGfnYAgD62AIAY9kCAGTZAgB/2QIAgNkCAIHZAgCL2QIAjNkCAOfZAgDo2QIASdoCAEra
AgBL2gIAotoCAKPaAgDx2gIA8toCAA3bAgAO2wIAbdsCAG7bAgBv2wIAn9sCAKDbAgDw2wIA
8dsCAFTcAgBV3AIAVtwCAHPcAgB03AIAddwCALXcAgC23AIAH90CACDdAgBo3QIAad0CAGrd
AgBs3QIAcN0CAIfdAgCI3QIA5t0CAOfdAgDo3QIAFd4CABbeAgB43gIAed4CAL/eAgDA3gIA
I98CACTfAgAl3wIAct8CAHPfAgB03wIA198CANjfAgD/3wIAAOACAFfgAgBY4AIAteACALbg
AgDC4AIAw+ACACbhAgAn4QIA+fLr8uT53dny+fLk+fL58uvy+fLk+fL58vny5Pny5Pny+fLr
8uT5zMCx+fLk+fL58uvy+fLk+fLk+fLr8vny+fLr8vny6xwBCIEESAEABWgri6OmFWiYFqkA
FmiYFqkANgiBABYBCIEESAEABWgti6OmFmiYFqkANgiBABkBCIEESAEABWgri6OmFWhtUM4A
FmiYFqkABhZodTI4AAAMFWjXKAoAFmjXKAoAAAwVaG1QzgAWaJ92/QAADBVobVDOABZolEj7
AAAMFWhtUM4AFmjXKAoAAAwVaG1QzgAWaHUyOABGJ+ECAFrhAgBb4QIAXOECAF3hAgBh4QIA
d+ECAHjhAgB54QIAneECAJ7hAgD04QIA9eECACPiAgAk4gIAJeICAPny+evf0Mm/u7+7v7u3
yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABhZoqFLCAAAGFmgnZzMAABMDagAAAAAWaCdnMwAwShcAVQgB
DBVobVDOABZo51IkAAAcAQiBBEgBAAVoL4ujphVomBapABZomBapADYIgQAWAQiBBEgBAAVo
L4ujphZomBapADYIgQAMFWhtUM4AFmjoflUAAAwVaG1QzgAWaHUyOAAADBVobVDOABZo1ygK
AA9b4QIAeOECAJ3hAgD04QIAI+ICACTiAgAl4gIA7gAAAAAAAAAAAAAAAOwAAAAAAAAAAAAA
AADsAAAAAAAAAAAAAAAA7AAAAAAAAAAAAAAAAOoAAAAAAAAAAAAAAADuAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEYABESAAMkAWEk
AWdknj7CAG/GBwEBAIaJo6ZkJgEDJABhJAAABjUAEjAAHFABADpw1ygKAB+w0C8gsOA9IbAI
ByKwCAcjkKAFJJCgBSWwAAAXsNACGLDQAgyQ0AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
SgAWJAEXJAFJZgEAAAABlgAAIXYAAmgBNdYFAAEDTBE11gUBAgNMESN2AAJMETpWHgAClmwA
CnQAAOABFPYBAAAVNgE11gUAAgNMEUoAFiQBFyQBSWYBAAAAAZYAACF2AAJoATXWBQABA0wR
NdYFAQIDTBEjdgACTBE6Vh4AApZsAAp0AADgART2AQAAFTYBNdYFAAIDTBFKABYkARckAUlm
AQAAAAGWAAAhdgACaAE11gUAAQNMETXWBQECA0wRI3YAAkwROlYeAAKWbAAKdAAA4AEU9gEA
ABU2ATXWBQACA0wRSgAWJAEXJAFJZgEAAAABlgAAIXYAAmgBNdYFAAEDTBE11gUBAgNMESN2
AAJMETpWHgAClmwACnQAAOABFPYBAAAVNgE11gUAAgNMEUoAFiQBFyQBSWYBAAAAAZYAACF2
AAJoATXWBQABA0wRNdYFAQIDTBEjdgACTBE6Vh4AApZsAAp0AADgART2AQAAFTYBNdYFAAID
TBFKABYkARckAUlmAQAAAAGWAAAhdgACaAE11gUAAQNMETXWBQECA0wRI3YAAkwROlYeAAKW
bAAKdAAA4AEU9gEAABU2ATXWBQACA0wRSgAWJAEXJAFJZgEAAAABlgAAIXYAAmgBNdYFAAED
TBE11gUBAgNMESN2AAJMETpWHgAClmwACnQAAOABFPYBAAAVNgE11gUAAgNMEQAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYCHwASAAEA
nAAPAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEDx/wIA
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
AABCngAAVp4AAJWeAAClngAApp4AAMqeAADMngAA3J4AAOWeAAAAnwAADZ8AACefAABEnwAA
dp8AAJ2fAADRnwAA/Z8AADugAABroAAAzaAAAOSgAAD7oAAAKqEAAFqhAACKoQAAuqEAAOqh
AAAzogAAfaIAAMeiAAARowAAW6MAAH6jAACBowAAnqMAAJ+jAADEowAAxqMAANejAADgowAA
/KMAAAmkAAAjpAAAQaQAAHWkAAChpAAA36QAAAWlAABnpQAAf6UAAJelAADIpQAA+qUAACym
AABepgAAkKYAANqmAAAlpwAAcKcAALunAAAGqAAAKqgAAC2oAABYqAAAWqgAAHCoAAB5qAAA
mqgAAKeoAADBqAAA5KgAACKpAABIqQAAm6kAALipAADVqQAAEaoAAE6qAACLqgAAqKoAAKmq
AADmqgAAI6sAAHOrAADEqwAAFawAAGasAAC3rAAA4awAAOSsAADnrAAA+6wAAPysAAA0rQAA
Na0AAEKtAABrrQAAk60AAJStAADRrgAAVLAAAFWwAAB9sAAAQLEAAISxAADJsQAAsrMAAC62
AAAvtgAAW7YAAPS2AAAwtwAABLkAADy5AABZuQAABroAAEm6AADLugAAi7sAALi7AAApvAAA
KrwAAKm8AAADvQAAMb0AAAu+AAAJvwAACr8AAI7AAACPwAAAz8AAAPXAAAD2wAAANsEAAFzB
AABdwQAAncEAAMPBAADEwQAABMIAACrCAAArwgAARcMAAIvDAACMwwAAyMQAAOXEAAAsxQAA
LcUAAHnFAAAPxgAAVsYAAP7GAAA4yQAAuMkAAO3JAADuyQAAUsoAAKrKAAACywAAJssAACfL
AACzzAAAF80AAG/NAADHzQAA680AAOzNAABQzgAAqM4AAADPAAAkzwAAJc8AAInPAADhzwAA
OdAAAF3QAABe0AAAjtAAAKvQAACs0AAA3dAAAOzTAAD70wAAY9UAANHVAAAv1gAAdNYAAKXW
AADG1gAAEdcAABPXAAA81wAATdcAAFjXAABf1wAAeNcAAJLXAACz1wAA6dcAAOvXAAAC2AAA
BNgAALnYAADz2AAAJ9kAAMbZAAD62QAAmtoAANTaAAA22wAAU9sAAFTbAACL2wAALdwAAGzc
AACb3AAA3twAAAfdAABJ3QAAit0AAL3dAAD03QAANd4AAHXeAADH3gAAWt8AALPfAAAO4AAA
jeAAANzgAAAH4QAAW+EAAMrhAAAh4gAAjuIAAKviAACs4gAACuMAAJDjAADp4wAAYeQAAKDk
AADN5AAAduUAAGLmAACh5gAAw+YAACPnAABs5wAAiucAAOrnAAAc6AAAX+gAANnpAADr6QAA
8+kAAPTpAAD66QAA/ukAAP/pAAAM6gAAEeoAABLqAAAj6gAAMeoAADLqAAA86gAAS+oAAEzq
AACw6gAAkusAAJPrAACa6wAAsusAALPrAAAi7AAAJ+0AAIbtAACc7QAAsu0AAMjtAABf7gAA
L+8AAMHvAABh8AAAmPAAAMLwAADZ8AAA9vAAAPfwAAAH8QAACPEAADPxAABy8QAAsfEAAPDx
AAAt8gAAbPIAAKnyAADm8gAAJvMAAGnzAACw8wAAA/QAAEr0AACH9AAAxvQAAAX1AABC9QAA
gfUAAIT1AACY9QAAxPUAADT3AADG9wAA4fcAAL/4AADA+AAAIfkAACL5AABu+QAAq/kAALr5
AADj+QAAG/oAAB36AAA9+gAAZPoAAGX6AACe+gAAxfoAAMb6AAAh+wAAIvsAAFn7AAC4+wAA
9vsAABP8AAAU/AAAKPwAADT8AAA2/AAAN/wAAF78AACK/AAAi/wAALT8AAD0/AAACP0AABT9
AAAW/QAARP0AAHT9AAB2/QAAMv4AAGz+AACT/gAA1v4AAN3+AAAU/wAAH/8AAF3/AAB5/wAA
q/8AAN3/AAAYAAEARgABAHQAAQCiAAEAGgEBADgBAQBtAwEAbgMBAMsDAQDMAwEAGAQBAFUE
AQBkBAEAjQQBANAEAQDSBAEA6gQBAAcFAQAIBQEAHwUBADsFAQBoBQEAhAUBAJsFAQDCBQEA
wwUBAPwFAQAkBgEAJQYBAIAGAQCBBgEAuAYBAMQGAQDyBgEAVAcBAJEHAQClBwEAsQcBALMH
AQC0BwEA3gcBAAMIAQAyCAEAXwgBAIsIAQCMCAEAvggBAPkIAQANCQEAGQkBABsJAQAdCQEA
HgkBAFgJAQBnCQEAdgkBAHgJAQB5CQEAjgkBALYJAQC3CQEAxAkBAPEJAQDzCQEAGAoBAEQK
AQBNCgEAZgoBAGkKAQByCgEAggoBAIoKAQCMCgEAjgoBAJAKAQCSCgEAVQsBAHcLAQCQCwEA
ngsBAKwLAQDwCwEA8gsBABoMAQAdDAEAMgwBAEQMAQBsDAEAfgwBAMUMAQDTDAEA4QwBABgN
AQAkDQEARA0BAGANAQDBDQEAIw4BAIUOAQDmDgEASA8BAKoPAQC/DwEAJxEBAIgSAQAPEwEA
GhMBAHYTAQDZEwEAMRQBAJwUAQD9FAEALhUBAH8VAQDkFQEAAxYBAEQWAQD4FgEAFRcBABYX
AQB2FwEApBcBAE4YAQCzGAEAAhkBAI4ZAQDmGQEAURoBAOkaAQC0GwEAAAEAAMAhAADI+QEA
AAEAAMAhAADIyQMAAAEAAMAhAADIyQMAAAEAAMAhAADbsQIAAAEAAMAhAACNrAIAAAEAAMAh
AAArOwMAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAABeyAEAAAEAAMAh
AABeyAEAAAEAAMAhAABeyAEAAgEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAArOwMA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAArOwMAAAIAAMAhAAB2OgIAAAcAAMAhAAB2OgIABP8AAMAh
AABFgxIABP8AAMAhAABu3gsAAAMAAMAhAAB2OgIABP8AAMAhAABu3gsAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAh
AAB2OgIAAAQAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAhAAB2OgIA
AAEAAMAhAABeyAEAAAEAAMAhAABeyAEAAAEAAMAhAABeyAEAAAEAAMAhAABeyAEAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAIAAMAhAAB2OgIAAAEAAMAhAAArOwMAAAMAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAh
AAB2OgIAAAEAAMAhAAArOwMAAAQAAMAhAAB2OgIAAAEAAMAhAAB2OgIABP8AAMAhAADOuBIA
AAEAAMAhAAB2OgIABP8AAMAhAAAxPg4AAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAIAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIABP8AAMAhAABaDg4A
BP8AAMAhAACS0xIAAAEAAMAhAAB2OgIABP8AAMAhAACDaQcABP8AAMAhAACUYxAAAAIAAMAh
AAA6VQIABP8AAMAhAAD4owkABP8AAMAhAADPSBAAAAEAAMAhAAB2OgIAAAQAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAYAAMAh
AAB2OgIAAAQAAMAhAAB2OgIAAAMAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAIAAMAhAAB2OgIAAAQAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAhAAB2OgIAAAIAAMAh
AAB2OgIAAAMAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAQAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAhAAB2OgIAAAEAAMAh
AABeyAEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAhAAB2OgIA
AAIAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAMAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAQAAMAh
AAB2OgIAAAIAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAMAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAIAAMAhAAB2OgIAAAQAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAUAAMAhAAB2OgIAAAYAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAMAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAMAAMAhAAB2OgIAAAMAAMAhAAB2OgIAAAMAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAMAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAUAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAUAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAUAAMAhAAB2OgIAAAQAAMAhAAB2OgIA
AAQAAMAhAAB2OgIAAAEAAMAhAAArOwMAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAArOwMAAAIAAMAhAAB2OgIAAAIAAMAhAAB2OgIABP8AAMAhAABFgxIAAAQAAMAh
AAB2OgIAAAIAAMAhAAB2OgIABP8AAMAhAAANLwUABP8AAMAhAAANLwUABP8AAMAhAACDaQcA
BP8AAMAhAACDJAUABP8AAMAhAAAwzQcABP8AAMAhAAD4owkAAAQAAMAhAAB2OgIAAAEAAMAh
AACNrAIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAACNrAIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAACNrAIAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEA
AAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAACNrAIA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEA
BP8AAMAhAADRSQUAAAEAAMAhAAB2OgIAAAEAAMAhAAA6VQIABP8AAMAhAAAsyw4AAAEAAMAh
AAA6VQIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAEAAMAhAADI+QEA
BP8AAMAhAADRSQUAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AAA6VQIABP8AAMAhAACDJAUABP8AAMAhAACDJAUAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAIAAMAh
AAA6VQIABP8AAMAhAADRSQUAAAEAAMAhAAB2OgIAAAEAAMAhAACNrAIAAAEAAMAhAAB2OgIA
AAEAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAh
AAA6VQIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAEAAMAhAAB2OgIA
AAEAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAADI+QEABP8AAMAhAADRSQUAAAEAAMAhAAB2OgIAAAEAAMAh
AAB2OgIABP8AAMAhAACDJAUAAAEAAMAhAACNrAIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAEAAMAh
AAB2OgIAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEA
AAEAAMAhAAA6VQIAAAEAAMAhAAB2OgIAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAh
AADI+QEAAAEAAMAhAAA6VQIAAAEAAMAhAAB2OgIAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEA
AAIAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAEAAMAhAAB2OgIAAAEAAMAhAACNrAIAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAA6VQIA
AAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAAA6VQIAAAEAAMAhAACNrAIAAAEAAMAhAADI+QEAAAIAAMAh
AAB2OgIAAAEAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIA
AAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAEAAMAh
AADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAACNrAIA
AAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAACNrAIAAAEAAMAhAADI+QEAAAEAAMAh
AAB2OgIAAAIAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAIAAMAhAADI+QEA
AAIAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAIAAMAhAADI+QEAAAEAAMAh
AAB2OgIAAAIAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIA
AAIAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAIAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAMAAMAhAAB2OgIAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAACNrAIAAAEAAMAhAADI+QEAAAEAAMAh
AAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAACNrAIABP8AAMAhAACB2QkAAAEAAHQQAAB2OgIA
AAEAAHQQAAB2OgIAAAAAAAAAAABJzwIAAAEAAHQQAAD1RgIAAAEAAHQQAADDXwIAAAAAAAAA
AACX9AIAAAEAAHQQAAA6VQIAAAEAAHQQAADDXwIAAAAAAAAAAACX9AIAAAEAAHQQAAA6VQIA
AAEAAHQQAAB2OgIAAAAAAAAAAAAN6gIAAAEAAHQQAADI+QEAAAEAAHQQAAB2OgIAAAAAAAAA
AABJzwIABP8AAHQQAADRSQUABP8AAHQQAAC8AwwAAAAAAAAAAAC7AwwAAAEAAHQQAAA6VQIA
AAEAAHQQAAA6VQIAAAAAAAAAAAAN6gIAAAIAAMAhAAB2OgIABP8AAMAhAADjpwcAAAEAAMAh
AADDXwIAAAEAAMAhAAB2OgIAAAEAAMAhAAArOwMAAAEAAMAhAACNrAIAAAIAAMAhAAB2OgIA
AAIAAMAhAAB2OgIAAAIAAMAhAAB2OgIAAAIAAMAhAAB2OgIAAAEAAMAhAABeyAEAAAEAAMAh
AABeyAEAAAEAAMAhAABeyAEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAAArOwMAAAQAAMAh
AAB2OgIAAAIAAMAhAAB2OgIAAAEAAMAhAACNrAIAAAMAAMAhAAB2OgIAAAEAAMAhAADI+QEA
AAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAIAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAEAAMAhAACNrAIAAAYAAMAhAAB2OgIA
AAEAAMAhAADI+QEAAAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAIAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAAB2OgIAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEA
AAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAh
AADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAEAAMAhAADI+QEAAAIAAMAhAADI+QEA
AAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAhAADI+QEAAAIAAMAh
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
AAA+lAAAfpQAAK+UAADQlAAAFpUAABeVAAAilQAAVJUAAIaVAAC+lQAA85UAADCWAABxlgAA
dZYAAI2WAADOlgAADZcAAA6XAAAhlwAAYJcAAKWXAAD2lwAARpgAAJ2YAAD3mAAATJkAAIuZ
AAC0mQAA85kAABOaAAAUmgAAKpoAAFiaAABomgAAaZoAAH6aAACNmgAAj5oAAJuaAACkmgAA
u5oAAMiaAADimgAA+poAACKbAABUmwAAh5sAALybAADomwAA+5sAAA6cAAAwnAAATJwAAE2c
AABwnAAAk5wAALacAADZnAAAGp0AAFydAACenQAA4J0AACKeAAA8ngAAP54AAEKeAABWngAA
lZ4AAKWeAACmngAAyp4AAMyeAADcngAA5Z4AAACfAAANnwAAJ58AAESfAAB2nwAAnZ8AANGf
AAD9nwAAO6AAAGugAAChoAAAzaAAAOSgAAD7oAAAKqEAAFqhAACKoQAAuqEAAOqhAAAzogAA
faIAAMeiAAARowAAW6MAAH6jAACBowAAnqMAAJ+jAADEowAAxqMAANejAADgowAA/KMAAAmk
AAAjpAAAQaQAAHWkAAChpAAA36QAAAWlAAA7pQAAZ6UAAH+lAACXpQAAyKUAAPqlAAAspgAA
XqYAAJCmAADapgAAJacAAHCnAAC7pwAABqgAACqoAAAtqAAAWKgAAFqoAABwqAAAeagAAJqo
AACnqAAAwagAAOSoAAAiqQAASKkAAG+pAACbqQAAuKkAANWpAAARqgAATqoAAIuqAACoqgAA
qaoAAOaqAAAjqwAAc6sAAMSrAAAVrAAAZqwAALesAADhrAAA5KwAAOesAAD7rAAA/KwAADSt
AAA1rQAAQq0AAGutAACTrQAAlK0AAK+tAAAkrgAA0a4AANKuAADrrgAAHK8AAGOvAABUsAAA
VbAAAH2wAABAsQAAhLEAAMmxAACyswAA77MAAGi1AADFtQAALrYAAC+2AABbtgAAkrYAAMO2
AAD0tgAAMLcAAPW3AAAyuAAAXrgAAJu4AAAEuQAAPLkAAFm5AABauQAAo7kAAAa6AABJugAA
y7oAAIu7AAC4uwAAubsAAOW7AAApvAAAKrwAAD28AACDvAAAqbwAALy8AAADvQAAMb0AAAu+
AAB4vgAACb8AAAq/AABGvwAAlL8AAE3AAACOwAAAj8AAAM/AAAD1wAAA9sAAADbBAABcwQAA
XcEAAJ3BAADDwQAAxMEAAATCAAAqwgAAK8IAAHfCAAAUwwAARcMAAIvDAACMwwAA2MMAALXE
AADIxAAA5cQAACzFAAAtxQAAecUAAA/GAABWxgAAV8YAAJ/GAACyxgAA/sYAAJTHAADnxwAA
+scAADjJAABxyQAAuMkAANHJAADtyQAA7skAAFLKAACqygAAAssAACbLAAAnywAAbcsAANvL
AACQzAAAs8wAABfNAABvzQAAx80AAOvNAADszQAAUM4AAKjOAAAAzwAAJM8AACXPAACJzwAA
4c8AADnQAABd0AAAXtAAAI7QAACr0AAArNAAAN3QAAD+0AAARdEAALvSAABT0wAAedMAAOzT
AAD70wAA/NMAAK3UAAAy1QAAY9UAAITVAADR1QAA0tUAAC/WAAB01gAApdYAAMbWAAAR1wAA
E9cAADzXAABN1wAAWNcAAF/XAAB41wAAktcAALPXAADp1wAA69cAAALYAAAE2AAAE9gAALnY
AADz2AAAJ9kAAMbZAAD62QAAmtoAANTaAAA22wAAU9sAAFTbAACL2wAALdwAAGzcAACb3AAA
3twAAAfdAABJ3QAAit0AAL3dAAD03QAANd4AAHXeAADH3gAAWt8AALPfAAAO4AAAjeAAANzg
AAAH4QAAW+EAAMrhAAAh4gAAjuIAAKviAACs4gAACuMAAJDjAADp4wAAYeQAAKDkAADN5AAA
duUAAGLmAACh5gAAw+YAACPnAABs5wAAiucAAOrnAAAc6AAAX+gAANnpAADr6QAA8+kAAPTp
AAD66QAA/ukAAP/pAAAM6gAAEeoAABLqAAAj6gAAMeoAADLqAAA86gAAS+oAAEzqAACw6gAA
kusAAJPrAACa6wAAsusAALPrAAAi7AAAJ+0AAIbtAACc7QAAsu0AAMjtAABf7gAAL+8AAMHv
AABh8AAAmPAAAMLwAADZ8AAA9vAAAPfwAAAH8QAACPEAADPxAABy8QAAsfEAAPDxAAAt8gAA
bPIAAKnyAADm8gAAJvMAAGnzAACw8wAAA/QAAEr0AACH9AAAxvQAAAX1AABC9QAAgfUAAIT1
AACY9QAAxPUAADT3AADG9wAA4fcAAL/4AADA+AAAIfkAACL5AABu+QAAq/kAALr5AADj+QAA
G/oAAB36AAA9+gAAZPoAAGX6AACe+gAAxfoAAMb6AAAh+wAAIvsAAFn7AAC4+wAA9vsAABP8
AAAU/AAAKPwAADT8AAA2/AAAN/wAAF78AACK/AAAi/wAALT8AAD0/AAACP0AABT9AAAW/QAA
RP0AAHT9AAB2/QAAMv4AAGz+AACT/gAA1v4AAN3+AAAU/wAAH/8AAF3/AAB5/wAAq/8AAN3/
AAAYAAEARgABAHQAAQCiAAEAGgEBADgBAQBtAwEAbgMBAMsDAQDMAwEAGAQBAFUEAQBkBAEA
jQQBANAEAQDSBAEA6gQBAAcFAQAIBQEAHwUBADsFAQBoBQEAhAUBAJsFAQDCBQEAwwUBAPwF
AQAkBgEAJQYBAIAGAQCBBgEAuAYBAMQGAQDyBgEAVAcBAJEHAQClBwEAsQcBALMHAQC0BwEA
3gcBAAMIAQAyCAEAXwgBAIsIAQCMCAEAvggBAPkIAQANCQEAGQkBABsJAQAdCQEAHgkBAFgJ
AQBnCQEAdgkBAHgJAQB5CQEAjgkBALYJAQC3CQEAxAkBAPEJAQDzCQEAGAoBAEQKAQBNCgEA
ZgoBAGkKAQByCgEAggoBAIoKAQCMCgEAjgoBAJAKAQCSCgEAVQsBAHcLAQCQCwEAngsBAKwL
AQDwCwEA8gsBABoMAQAdDAEAMgwBAEQMAQBsDAEAfgwBAMUMAQDTDAEA4QwBABgNAQAkDQEA
RA0BAGANAQDBDQEAIw4BAIUOAQDmDgEASA8BAKoPAQC/DwEAJxEBAIgSAQAPEwEAGhMBAHYT
AQDZEwEAMRQBAJwUAQD9FAEALhUBAH8VAQDkFQEAAxYBAEQWAQD4FgEAFRcBABYXAQB2FwEA
pBcBAE4YAQCzGAEAAhkBAI4ZAQDmGQEAURoBAOkaAQAGGwEAKxsBAIIbAQCxGwEAtBsBAJgA
AAAUMAAAAAAAAAEAAAAAgAAAAAAAAAAAAACYAAAAEDAAAAAAAAABAAAAAIAAAAAAAAAAAIAA
mAAAABAwAAAAAAAAAQAAAACAAAAAAAAAAACAAJgAAAAAMAAAAAAAAAEAAAAAgAAAAAAAAAAA
gACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmAAAAA8wAAAAAAAAAIAAAACAAAAAAAAA
AACAAJgAAAARMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAAETAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmAAAABEwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAARMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYAAAAETAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmAAAABEwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJgAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmAAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYAAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmAAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJgAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmAAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYAAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmAAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAARMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmAAAABEwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mAAAABEwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAARMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYAAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmAAAAAAwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJgAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAPMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAAA8wAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJAB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
kAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAAMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAAAAwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAPMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
gAGYQAAADzAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIgB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
gAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIgBmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIgBmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAiAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIgB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
gAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAADzAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAPMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJAB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
kAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAGzAAAAAAAAAAgAAAAIAAAAAA
AAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACQAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABswAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAGzAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJAB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABswAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAkAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIgBmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJAB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
iAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAB
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAA
gAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAZhAAAAbMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIABmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAB
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
iAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACIAZhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACIAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIgBmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAbMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAB
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAAMAAAAAAAAACAAAAAgAAA
AAAAAAAAkAGYQAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAAAMAAAAAAAAACA
AAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAADAAAAAA
AAAAgAAAAIAAAAAAAAAAAJABmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABswAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAB
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIgBmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAAMAAAAAAAAACAAAAAgAAA
AAAAAAAAkAGYQAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACIAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAiAGYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAAAAwAAAAAAAA
AIAAAACAAAAAAAAAAACQAZhAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAAAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAAAAAZhAAAAbMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAABABmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAAMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAbMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAbMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAAMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAAAQAZhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAbMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAGzAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AAAQAalAAAASMAAAAAAAAACAAAAAgAEAAAAAAAAAsAGpQAAAEjAAAAAAAAAAgAAAAIABAAAA
AAAAALABmUAAAAAwAAAAAAAAAIAAAACAAQAABAAAAACwAalAAAASMAAAAAAAAACAAAAAgAEA
AAAAAAAAsAGpQAAAEjAAAAAAAAAAgAAAAIABAAAAAAAAALABmUAAAAAwAAAAAAAAAIAAAACA
AQAABAAAAACwAalAAAASMAAAAAAAAACAAAAAgAEAAAAAAAAAsAGpQAAAEjAAAAAAAAAAgAAA
AIABAAAAAAAAALABmUAAAAAwAAAAAAAAAIAAAACAAQAABAAAAACwAalAAAASMAAAAAAAAACA
AAAAgAEAAAAAAAAAsAGpQAAAEjAAAAAAAAAAgAAAAIABAAAAAAAAALABmUAAAAAwAAAAAAAA
AIAAAACAAQAABAAAAACwAalAAAASMAAAAAAAAACAAAAAgAEAAAAAAAAAsAGpQAAAEjAAAAAA
AAAAgAAAAIABAAAAAAAAALABmUAAAAAwAAAAAAAAAIAAAACAAQAABAAAAACwAalAAAASMAAA
AAAAAACAAAAAgAEAAAAAAAAAsAGpQAAAEjAAAAAAAAAAgAAAAIABAAAAAAAAALABmUAAAAAw
AAAAAAAAAIAAAACAAQAABAAAAACwAalAAAASMAAAAAAAAACAAAAAgAEAAAAAAAAAsAGpQAAA
EjAAAAAAAAAAgAAAAIABAAAAAAAAALABmUAAAAAwAAAAAAAAAIAAAACAAQAABAAAAACwAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAkAGYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAJAB
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
kAGYQAAADzAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAADAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAAAAwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAAMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAJABmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAJABmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmAAAABQwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJgAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAAACYQAAADzAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAADAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAAACYAAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAAAAAJgAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYAAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAABQwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJgA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAAACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mAAAABQwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJgAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
AACYAAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAmAAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AAAAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmAAAABIwAAAAAAAAAIAAAACAAAAAAAAAAAAQAJgAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAAACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAAAAmAAAABQwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYAAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAAABmAAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAAAAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAAAAwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACQAZhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAB
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAZhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgAGYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAAAGYAAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAAAB
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAAABmAAAABQwAAAAAAAAAIAAAACAAAAAAAAAAAAAAZhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJgAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAAAGYAAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAAABmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAAAGYAAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAAABmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmAAAABQwAAAAAAAAAIAAAACAAAAAAAAAAAAAAZgAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAAAGYAAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAAABmAAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAAAAAZhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAA
AAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
FDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAAUMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAFDAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABQwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAAPMAAAAAAAAACAAAAAgAAAAAAAAAAA
gACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAA
AACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAADzAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAA
AAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACA
AAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAA
AIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACA
AAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAA
AIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYAAAAEjAAAAAA
AAAAgAAAAIAAAAAAAAAAABABmAAAABIwAAAAAAAAAIAAAACAAAAAAAAAAAAAAJhAAAASMAAA
AAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIw
AAAAAAAAAIAAAACAAAAAAAAAAACAAJhAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAA
EjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAAmEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJhA
AAASMAAAAAAAAACAAAAAgAAAAAAAAAAAgACYQAAAEjAAAAAAAAAAgAAAAIAAAAAAAAAAAIAA
mEAAABIwAAAAAAAAAIAAAACAAAAAAAAAAACAAJgAAAASMAAAAAAAAACAAAAAgAAAAAAAAAAA
AACYQAAAGDAAAAAAAAAAgAAAAIAAAAAAAAAAAIABmEAAABgwAAAAAAAAAIAAAACAAAAAAAAA
AACAAZhAAAAYMAAAAAAAAACAAAAAgAAAAAAAAAAAgAGYAAAAADAAAAAAAAAAgAAAAIAAAAAA
AAAAAIAHAAAAAPMLAAC6DgAA6hEAAMkTAADEFAAAbRUAAOcWAAD1GAAANBkAAFMZAABrGQAA
lRkAAPAZAACMGgAAUiAAAKYgAADTIAAA7yAAAKsmAAC8JgAA4CoAAPwqAADULQAA/C0AADgw
AAB0OwAAAD0AANs/AADcPwAA+D8AAKtBAADKQQAAR0MAAPJRAAC8UgAA7FIAAAhTAAD4WAAA
P1kAABVaAABAWgAAKFwAAEFcAAC6XQAAy10AAOxeAACLXwAAUWAAAOlgAAAqYQAAfmIAAJti
AACcYgAAjmMAANFjAACHZgAA+5sAAA6cAAAwnAAATJwAAFujAAB+owAAgaMAAJ6jAABVsAAA
fbAAAECxAACEsQAAybEAALKzAADvswAAaLUAAPS2AAAwtwAA9bcAADK4AABeuAAAm7gAAAS5
AAB3wgAAFMMAAEXDAACLwwAA2MMAALXEAADIxAAA5cQAAC3FAAB5xQAAD8YAAFbGAABXxgAA
XdAAAF7QAACO0AAAq9AAANHVAADS1QAAL9YAAHTWAACa2gAA1NoAADbbAABT2wAAyuEAACHi
AACO4gAAq+IAAIrnAADq5wAAHOgAAF/oAADZ6QAA6+kAAPPpAAD06QAA+ukAAP7pAAD/6QAA
DOoAABHqAAAS6gAAI+oAADHqAAAy6gAAPOoAAEvqAABM6gAAsOoAAJLrAACT6wAAmusAALLr
AACz6wAAIuwAACftAACY8AAAwvAAANnwAAD28AAAxvcAAOH3AAC/+AAAwPgAACH5AAAd+gAA
PfoAAGT6AABl+gAAxfoAAMb6AAAh+wAAIvsAAGcJAQB2CQEAeAkBAHkJAQC0GwEAScgAMAAw
AAAAAAAAAQAAAAQAAAABAAAAALCxB0nIADAAMAAAAAAAAAEAAAADAAAAAAAAAAAAkAdJyAAw
ADAAAAAAAAACAAAAAQAAAAAAAAAAAJAHEEAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAQB0nI
ADAEMAAAAAAAAAEAAAADAAAAAAAAAAAAkAdJyAAwBDAAAAAAAAACAAAAAQAAAAAAAAAAAIgH
AEAAAAAwAAAAAAAAAAAAAP//AAAAAAAAAACAB0nIADAAMAAAAAAAAAEAAAAAAAAAAAAAAAAA
kAdJyAAwADAAAAAAAAABAAAAAAAAAAAAAAAAAJAHScgAMAAwAAAAAAAAAQAAAAAAAAAAAAAA
AACQB0nIADAAMAAAAAAAAAEAAAAAAAAAAAAAAAAAkAdJyAAwADAAAAAAAAABAAAAAAAAAAAA
AAAAAJAHScgAMAAwAAAAAAAAAQAAAAAAAAAAAAAAAACQB0nIADAAMAAAAAAAAAEAAAAAAAAA
AAAAAAAAkAdJyAAwDjAAAAAAAAABAAAABAAAAA8AAACMPs8HScgAMA4wAAAAAAAAAQAAAAMA
AAAAAAAAAACAAUnIADAOMAAAAAAAAAIAAAABAAAAAAAAAAAAgAEAQAAAADAAAAAAAAAAAAAA
NCkAAAAAAAAAAJAHScgAMBIwAAAAAAAAAQAAAAwAAAATAAAAKD/PB0nIADASMAAAAAAAAAEA
AAALAAAAAAAAAAAAgAFJyAAwEjAAAAAAAAACAAAACQAAAAAAAAAAAIAHScgAMBIwAAAAAAAA
AQAAAAQAAAAAAAAAAACQB0nIADASMAAAAAAAAAEAAAAIAAAAAAAAAAAAkAdJyAAwEjAAAAAA
AAABAAAACAAAAAAAAAAAAJAHScgAMBIwAAAAAAAAAQAAAAgAAAAAAAAAAACQB0nIADASMAAA
AAAAAAEAAAAIAAAAEwAAACg/zwdJyAAwEjAAAAAAAAABAAAABAAAAAAAAAAAAJAHScgAMBIw
AAAAAAAAAQAAAAMAAAAAAAAAAACQB0nIADASMAAAAAAAAAIAAAABAAAAAAAAAAAAkAcAQAAA
ADAAAAAAAAC6JgAANCkAAAAAAAAAAIgHScgAMAAwAAAAAAAAAQAAAAAAAAAAAAAAAACIB0nI
ADAXMAAAAAAAAAIAAAABAAAAAAAAAAAAgAcoQAAAATAAAAAAAQAAAAAAAAAAAAAAAAAAAIAH
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
tZgAAOaZAABmnAAA1ZwAAAOeAABvnwAACaAAAJigAAAfogAATqgAAP+rAAAPsQAA0rUAAI66
AADDvwAAQsMAAM/DAACTxAAAr8UAAPHFAABHxgAAc8YAAOPGAABqxwAA58cAAIbIAADoyAAA
kckAALbKAAA0ywAAwswAAObNAABszgAAAs8AAGbPAADMzwAAGNEAAKLRAAAI0gAAi9IAAATT
AADq0wAAMtQAAHLUAAC11AAA/tQAAD3VAAC41QAAhtYAANbWAAAe1wAAyNcAAFLYAACu2AAA
atkAAFvaAAD/2gAASNsAAHfbAAC43AAA8N0AALXeAACI3wAASuAAABnhAACT4QAA7OIAAIPj
AACt5AAAD+UAAJnlAABA6AAAy+oAADbsAAA37QAAWe4AABrvAABC8AAAxfEAACTzAAAH9wAA
+foAAM/+AACbAgEAVgMBAEcEAQBwBAEAvAQBAD0FAQCXBQEABgYBADgHAQCfCAEAXQwBANIU
AQDLGQEA2B8BAPTQAgD52AIAJ+ECACXiAgCSAAAAlgAAAJcAAACZAAAAmgAAAJsAAACdAAAA
ngAAAKEAAACiAAAApAAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAK0AAACuAAAAsQAAALIA
AACzAAAAtAAAALUAAAC2AAAAuAAAALkAAAC6AAAAuwAAAL0AAAC/AAAAwQAAAMMAAADEAAAA
xgAAAMcAAADIAAAAyQAAAMsAAADMAAAAzgAAAM8AAADQAAAA0QAAANIAAADUAAAA1gAAANcA
AADZAAAA2gAAANwAAADdAAAA3wAAAOEAAADkAAAA5gAAAOgAAADqAAAA7AAAAO4AAADvAAAA
8QAAAPIAAADzAAAA9AAAAPUAAAD2AAAA9wAAAPgAAAD5AAAA+gAAAPsAAAD8AAAA/gAAAP8A
AAABAQAAAgEAAAMBAAAFAQAABgEAAAcBAAAIAQAACgEAAAsBAAAOAQAADwEAABABAAARAQAA
EwEAABQBAAAVAQAAFgEAABgBAAAZAQAAGwEAABwBAAAdAQAAHwEAACABAAAiAQAAIwEAACQB
AAAlAQAAJwEAACgBAAAqAQAAKwEAAC0BAAAuAQAALwEAADEBAAAyAQAANAEAADUBAAA2AQAA
OAEAADoBAAA7AQAAPQEAAD8BAABAAQAAQgEAAEMBAABFAQAARwEAAEkBAABKAQAASwEAAE0B
AABQAQAAVAEAAFUBAABWAQAAWQEAAFsBAABdAQAAXwEAAGEBAABkAQAAZgEAAHIBAAB1AQAA
dgEAAAAGAADIDQAA8xMAAJIdAAD1IwAAayQAAG4oAACsLQAA1DgAAHw8AACuPwAAhkgAADlM
AABXTgAADlMAAPteAAAqbAAAaoIAAP6TAADkmQAA+5sAAJmdAABSnwAAcaQAAEiqAAB4rQAA
FLAAAMezAABDuAAAwrsAANu/AADhwgAAh8UAADTLAACIzQAAkM8AADjSAAD90gAA6tMAALXU
AAA91gAAPNcAAAHZAABc2gAAFNwAAEHfAAAw4AAAH+MAAJ/kAAAW6QAAzOoAAMHtAABp7gAA
nfAAAIHyAAAJ9wAAeP0AAM0CAQBhBAEAbAQBAHoEAQCABAEAuQQBAB4FAQABBgEAIQYBAJUH
AQDPCgEAsA8BAMcVAQCCGQEAdh8BAGcjAQAE0QIAmdcCAFvhAgAl4gIAkwAAAJUAAACYAAAA
nAAAAJ8AAACgAAAAowAAAKUAAACsAAAArwAAALAAAAC3AAAAvAAAAL4AAADAAAAAwgAAAMUA
AADKAAAAzQAAANMAAADVAAAA2AAAANsAAADeAAAA4AAAAOIAAADjAAAA5QAAAOcAAADpAAAA
6wAAAO0AAADwAAAA/QAAAAABAAAEAQAACQEAAAwBAAANAQAAEgEAABcBAAAaAQAAHgEAACEB
AAAmAQAAKQEAACwBAAAwAQAAMwEAADcBAAA5AQAAPAEAAD4BAABBAQAARAEAAEYBAABIAQAA
TAEAAE4BAABPAQAAUQEAAFIBAABTAQAAVwEAAFgBAABaAQAAXAEAAF4BAABgAQAAYgEAAGMB
AABlAQAAZwEAAHMBAAB0AQAAdwEAAAAGAAAk4gIAlAAAAA8AAPA4AAAAAAAG8BgAAAACCAAA
AgAAAAEAAAABAAAAAQAAAAIAAABAAB7xEAAAAP//AAAAAP8AgICAAPcAABAADwAC8JIAAAAQ
AAjwCAAAAAEAAAABBAAADwAD8DAAAAAPAATwKAAAAAEACfAQAAAAAAAAAAAAAAAAAAAAAAAA
AAIACvAIAAAAAAQAAAUAAAAPAATwQgAAABIACvAIAAAAAQQAAAAOAABTAAvwHgAAAL8BAAAQ
AMsBAAAAAP8BAAAIAAQDCQAAAD8DAQABAAAAEfAEAAAAAQAAAP//IgAAAAYARa32HhEAAQAM
8hgABgBGrfYeEQABALwqGQAGAEit9h4RAAEAPCsZAAYAng3/ABAAAQD8zRsABgBJrfYeEQAB
AHwrGQAGAEqt9h4RAAEAvCsZAAYAS632HhEAAQD8KxkABgBOrfYeEQABALwsGQAGAKAN/wAQ
AAEAPCwZAAYAUK32HhEAAQA8LRkABgChDf8AEAABAPwsGQAGAKIN/wAQAAEAhJOrAgYAow3/
ABAAAQCU3qMCBgCkDf8AEAABANTgowIGAKUN/wAQAAEAhNyjAgYApg3/ABAAAQD8jqkCBgCn
Df8AEAABALT5owIGAKgN/wAQAAEAfDseAAYAqQ3/ABAAAQCEPKUCBgCqDf8AEAABAPwqGQAG
AKsN/wAQAAEAvC9RBAYArA3/ABAAAQBMr6MCBgCtDf8AEAABANRfpAIGAI8N/wARAAEAZJmr
AgYArg3/ABAAAQB836MCBgCRDf8AEQABAPTiowIGAK8N/wAQAAEAtHIZAAYAkw3/ABEAAQD0
chkABgCaDf8AEAABABxBpAIGAJUN/wAQAAEA/EikAgYAlg3/ABEAAQCs4aMCBgCbDf8AEAAB
AFwspAIGAJgN/wARAAEAjKghAAYAnA3/ABAAAQD0gxoAbgcAAHoHAACVBwAAlQcAAJ8HAACi
BwAAqQcAAAYIAAAGCAAAWwgAAFsIAABIKAAAujIAAMwzAAA6NAAAODkAABE7AABtOwAA7TwA
APs8AACqPQAASz4AAKNDAADWagAA1moAALSEAAC0hAAAIfcAACH3AADXDAEAZxMBAGcTAQDm
GAEA5hgBALQbAQAAAAAAAQABAAAAAQACAAAAAgAGAAAAAgADAAAAAgAEAAAAAgAFAAAAAgAH
AAAAAgAIAAAAAgAJAAAAAgAKAAAAAgALAAAAAQAMAAAAAQANAAAAAQAOAAAAAQAPAAAAAQAQ
AAAAAQARAAAAAQASAAAAAQATAAAAAQAUAAAAAQAVAAAAAQAWAAAAAQAXAAAAAgAYAAAAAgAZ
AAAAAgAaAAAAAgAbAAAAAgAcAAAAAgAdAAAAAQAeAAAAAgAfAAAAAgAgAAAAAgAhAAAAAgB5
BwAAhAcAAJ0HAAChBwAApwcAAKwHAACsBwAADAgAAAwIAABhCAAAYQgAAEsoAAC9MgAAzzMA
AD00AAA7OQAAFDsAAHA7AADwPAAA/jwAAK09AABOPgAApkMAANxqAADcagAAu4QAALuEAAAn
9wAAJ/cAAN0MAQBvEwEAbxMBAO8YAQDvGAEAtBsBAAAAAAABAAAAAgABAAQAAQAFAAEABgAA
AAMAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAAT
AAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAA
ACEAAAAIAAAAQgAAAB0AHAAqgHVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNt
YXJ0dGFncw6AY291bnRyeS1yZWdpb24AgD4AAAAeAB0AKoB1cm46c2NoZW1hcy1taWNyb3Nv
ZnQtY29tOm9mZmljZTpzbWFydHRhZ3MKgFBvc3RhbENvZGUAgD0AAAAhACEAKoB1cm46c2No
ZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzbWFydHRhZ3MJgFBsYWNlVHlwZQCAPQAAACIA
IgAqgHVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNtYXJ0dGFncwmAUGxhY2VO
YW1lAIA4AAAAIAAgACqAdXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c21hcnR0
YWdzBIBDaXR5AIA5AAAAHwAeACqAdXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6
c21hcnR0YWdzBYBTdGF0ZQCAOQAAABQAHwAqgHVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206
b2ZmaWNlOnNtYXJ0dGFncwWAcGxhY2UAgDgAAAAXAAUAKoB1cm46c2NoZW1hcy1taWNyb3Nv
ZnQtY29tOm9mZmljZTpzbWFydHRhZ3MEgHRpbWUAgAwAAAFM7EgBBAAAAAGAMQKAMTAEgEhv
dXIGgE1pbnV0ZSIAAAAAACEAAAAAACAAAAAAABQAAAAAAB8AAAAAAB4AAAAAAB0AAAAAAB0A
AAAAABQAAAAAAB0AAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQA
AAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAABQAAAAAACAAAAAAABQAAAAAACAA
AAAAABQAAAAAACAAAAAAABQAAAAAABcAAgAAAAIAAAAAAAAAAwAAAAEAAAAfAAAAAAAUAAAA
AAAgAAAAAAAUAAAAAAAAAAAAWAAAAF0AAABeAAAAaAAAAHQAAAB9AAAAhwAAAIsAAADmBQAA
6wUAAHoGAACIBgAAigcAAJMHAAC8BwAAwQcAAMIHAADJBwAAygcAANQHAADhBwAA5gcAAOcH
AADvBwAA/AcAAAEIAABKCAAAUwgAAFQIAABZCAAAsAkAALMJAABjCgAAZgoAAFkTAABfEwAA
3RUAAOIVAABzGQAAeBkAAJ0ZAACkGQAAyx4AANMeAABVHwAAWh8AADkgAABRIAAAISIAACYi
AAAOIwAAOyMAABQoAAAZKAAASCgAAEsoAAB3KAAAgygAAMwpAADUKQAA+SkAAP0pAAAqKgAA
MioAAMQqAADIKgAAOSsAADwrAADVKwAA2CsAAOorAADtKwAAHywAACIsAAAlLAAALSwAADgt
AAA+LQAAhy4AAIguAABCLwAARC8AAEcvAABMLwAAVy8AAFkvAAB+LwAAgC8AAFcwAABYMAAA
CjEAAA8xAAC6MgAAvTIAAMwzAADPMwAAOjQAAD00AAA4OQAAOzkAABE7AAAUOwAAbTsAAHA7
AADtPAAA8DwAAPs8AAD+PAAAqj0AAK09AABLPgAATj4AAIc/AACKPwAAo0MAAKZDAAD9QwAA
EEQAAApFAAAYRQAAhEYAAJJGAADuRgAA80YAACxHAAAxRwAA5UgAAOpIAAACSQAAC0kAAFZN
AABdTQAAzE8AAN1PAAA7UAAASVAAABZRAAAaUQAApFEAALJRAABfUgAAZlIAAHJSAAB+UgAA
rFMAALJTAADNWQAA2VkAACldAAA4XQAAlWYAAJ1mAADMZgAA0GYAAFFnAABVZwAAhWcAAIln
AACKZwAAi2cAAJZnAACaZwAAtGcAALVnAADHZwAAyGcAABtoAAAoaAAAimgAAI5oAACPaAAA
kGgAAJhoAACZaAAAcGkAAHFpAAC6aQAAwWkAAO9qAAD2agAAWGsAAGFrAADvawAA8msAADhv
AABGbwAAhG8AAJJvAACqbwAAsm8AAO1vAAD1bwAA9m8AAAJwAABZcAAAYXAAAIVwAACMcAAA
OXEAAEpxAABacgAAYnIAANNyAADbcgAA3HIAAOhyAACecwAApnMAAKpzAACycwAACXQAABR0
AACFdAAAknQAABJ1AAAedQAAo3UAAK51AAAndwAAK3cAAHd3AAB7dwAA13cAAON3AABBeAAA
RXgAAJp7AACdewAAhH4AAIx+AADVfgAA3X4AAAt/AAAUfwAAZX8AAG1/AACtfwAAsn8AALV/
AAC8fwAAS4AAAFOAAACVgAAAqYAAAJaBAACagQAAGIIAABuCAAAQhwAAFYcAACmHAAAuhwAA
YYkAAGOJAABjjgAAeI4AAAaUAAALlAAAHZQAACqUAAAslAAAMZQAAEuUAABYlAAAWpQAAF+U
AACYlAAAnZQAAK+UAAC8lAAAvpQAAMOUAADdlAAA6pQAAOyUAADxlAAAOJUAADuVAADvlgAA
85YAADWXAAA5lwAAOpcAAEaXAAB0lwAAeJcAALmXAAC9lwAACpgAAA6YAABamAAAXpgAAEqa
AABWmgAApJoAAKuaAACumgAAuJoAAMebAADLmwAAzJsAAN2bAAB/ngAAk54AAOWeAADsngAA
854AAP2eAACsoAAAsKAAALGgAADCoAAA4KMAAOejAADvowAA+aMAAEalAABKpQAAS6UAAFyl
AAB5qAAAgKgAAI2oAACXqAAAeqkAAH6pAAB/qQAAkKkAAB6tAAAyrQAAba0AAHqtAABOsAAA
UbAAAO+zAADwswAAjLYAAI+2AAA2uwAAQ7sAAIu7AACMuwAAxLsAAMi7AADJuwAA2rsAAHm9
AACGvQAAyb0AANa9AADNvgAA0L4AACy/AABEvwAAyMAAAMvAAADvwAAA8sAAAC/BAAAywQAA
VsEAAFnBAACWwQAAmcEAAL3BAADAwQAA/cEAAADCAAAkwgAAJ8IAAHDCAABzwgAAkMIAAJPC
AADRwwAA1MMAAPLDAAD1wwAAcsUAAHXFAACTxQAAlsUAAPfGAAD6xgAAGMcAABvHAABfyQAA
b8kAAEvKAABOygAAo8oAAKbKAAD7ygAA/soAACHLAAAkywAAJswAADPMAAAQzQAAE80AAGjN
AABrzQAAwM0AAMPNAADmzQAA6c0AAEnOAABMzgAAoc4AAKTOAAD5zgAA/M4AAB/PAAAizwAA
gs8AAIXPAADazwAA3c8AADLQAAA10AAAWNAAAFvQAAB90AAAjNAAAMbQAADL0AAA3dAAAOrQ
AADs0AAA8dAAAAvRAAAY0QAAGtEAAB/RAADI0QAAz9EAANPRAADf0QAAqdMAALTTAAC10wAA
wdMAANTTAADg0wAATNUAAFHVAABj1QAAcNUAAHLVAAB31QAAkdUAAJ7VAACg1QAApdUAALLV
AAC01QAABtYAAAjWAACO1gAAk9YAAKXWAACy1gAAtNYAALnWAADT1gAA4NYAAOLWAADn1gAA
9NYAAPbWAAAO1wAAD9cAABPXAAAm1wAAKNcAAC3XAABA1wAAQdcAAGnXAABr1wAAgtcAAITX
AACG1wAAjNcAAKDXAACi1wAAv9cAAMDXAADV1wAA1tcAAPLXAAD01wAA+NcAAP3XAAAP2AAA
EdgAANvYAADx2AAACdkAAAzZAAAy2QAAOdkAAFHZAABk2QAAf9kAAJTZAACY2QAAq9kAALDZ
AAC82QAABdoAAAzaAAAl2gAAONoAAFPaAABo2gAAbNoAAH/aAACE2gAAkNoAAODaAADj2gAA
G9wAAB7cAAAt3QAAR90AAGrdAABu3QAApt0AAKjdAADe3QAA8t0AAAjeAAAM3gAADd4AABne
AABZ3gAAXN4AAIneAACN3gAAF98AABrfAAAh3wAAJN8AAMffAADL3wAAB+AAAArgAAAh4AAA
JOAAAEngAABM4AAAVeAAAFjgAABh4AAAZOAAAGXgAABo4AAAceAAAHTgAACh4AAApeAAANXg
AADY4AAAAeEAAAThAAAb4QAAH+EAAIvhAACO4QAAn+EAAKLhAADe4QAA4uEAAFriAABd4gAA
beIAAHDiAABR4wAAWeMAAFrjAABd4wAAYuMAAGXjAABr4wAAc+MAACLkAAAq5AAAK+QAAC7k
AAAz5AAANuQAADzkAABE5AAAAuUAAAblAABU5QAAWOUAAPTlAAD35QAATecAAGrnAACi5wAA
tecAAMXnAADY5wAA9ucAAAnoAAAO6AAAGugAAEToAABd6AAA0OgAANzoAACb6QAAnukAAPbp
AAD56QAA/+kAAALqAAAI6gAAC+oAALftAAC87QAABO4AAAnuAAB57gAAfO4AALruAADC7gAA
lO8AAJvvAABq8AAAjvAAAJrwAADA8AAAVPEAAFjxAACT8QAAl/EAANLxAADW8QAAEfIAABTy
AABH8wAASvMAAGLzAABl8wAAivMAAI3zAADR8wAA1PMAACT0AAAn9AAAqPQAAKz0AADn9AAA
6/QAAGP1AABn9QAAJPYAACv2AADJ9gAA0PYAAJb3AADD9wAAy/cAANn3AAA5+AAAR/gAAJD5
AACe+QAAq/kAALn5AADO+QAA3PkAAN35AADg+QAAwPoAAMP6AADf+gAA4voAAGb7AABp+wAA
dPsAAIL7AACZ+wAAp/sAAMf7AADK+wAAFfwAABj8AAAv/AAAMvwAAHH8AABz/AAAufwAAMX8
AADH/AAAyfwAANb8AADi/AAA5PwAAOb8AAD1/AAA+PwAAA/9AAAS/QAAFv0AABn9AAAm/QAA
Kf0AACz9AAA0/QAAVf0AAFj9AABb/QAAZP0AAOz9AAD4/QAApgABAK0AAQANAgEAFQIBACMD
AQAtAwEALgMBADcDAQA6BAEASAQBAFUEAQBjBAEAeAQBAIYEAQCHBAEAigQBANIEAQDZBAEA
CAUBAA8FAQA7BQEAQgUBAEMFAQBLBQEAWAUBAGMFAQCGBQEAiQUBAAIGAQAPBgEAEQYBABQG
AQAfBgEAIgYBAD4GAQBBBgEAugYBALsGAQC8BgEAvwYBAPIGAQD8BgEADAcBABoHAQAyBwEA
QAcBAGYHAQBpBwEAkgcBAJUHAQCsBwEArwcBAAkIAQAPCAEAwwgBAM8IAQDgCAEA7AgBAPoI
AQD9CAEAFAkBABcJAQCOCQEAkQkBAJ4JAQChCQEAygkBANAJAQD3CQEA+gkBAD4KAQBBCgEA
DwsBABsLAQAdDAEAIQwBAEQMAQBIDAEAFxABACUQAQB+EAEAjBABAJkRAQCeEQEAwREBAMgR
AQBVEgEAXBIBAF4SAQBjEgEAaBIBAGsSAQBsEgEAchIBAHwSAQCEEgEAnxIBAK0SAQAEEwEA
DRMBAH0TAQCHEwEAjBMBAJUTAQCeEwEAohMBAKMUAQCtFAEAshQBALsUAQDEFAEAyBQBAJQV
AQCWFQEApRUBAKoVAQBLFgEAURYBAFYWAQBdFgEAYhYBAGgWAQBuFgEAdhYBAOoWAQDwFgEA
HRcBACUXAQCrFwEAsBcBALUXAQC9FwEAzBcBANUXAQDaFwEA5RcBAO4XAQD0FwEAXBgBAGQY
AQBsGAEAdhgBAKUYAQCrGAEAChkBAA8ZAQAXGQEAIBkBAGEaAQBoGgEABhsBALQbAQAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABsA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcA
HAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwABwAcAAcAHAAHABwA
BwAcAAcAHAAHAAcAAAAAADwAAAA+AAAAmQAAAKEAAAAaAgAAIgIAAHkCAACBAgAA2AIAAOAC
AAA2AwAAPgMAAJQDAACcAwAA8QMAAPkDAABQBAAAWAQAALAEAAC4BAAARgYAAHEGAABoBwAA
rQcAAOkIAADsCAAAAgkAAAQJAAA0CQAAPQkAALAJAACzCQAAGgoAACEKAABjCgAAZwoAAMsK
AADNCgAAfAsAAJMLAACXDAAAnAwAAAIPAAAEDwAAig8AAJAPAAByFQAAdxUAAPUYAAD8GAAA
NBkAADoZAABrGQAAchkAAJUZAACcGQAARxoAAFIaAABqHAAAbBwAAHgcAAB9HAAAcB0AAHsd
AAC6HQAAwR0AADkgAABRIAAAUiAAAFkgAADEKgAAySoAADorAAA8KwAAUC0AAFUtAADULgAA
1i4AABkvAAAcLwAAUTAAAFcwAADVMAAA2zAAADsxAAA9MQAAYDYAAGM2AADmNwAA6DcAAEc4
AABJOAAA4joAAO86AAADOwAADDsAAHQ7AACjOwAAAD0AACM9AAD9PQAAAz4AAFs+AABkPgAA
zj4AANQ+AACHPwAAiz8AAGRDAABpQwAA0UMAANdDAACzSAAAukgAAFZNAABdTQAAzE0AANNN
AABfUgAAZlIAAIZUAACRVAAA4VcAAOdXAAB/WAAAhVgAACpZAAAwWQAAelkAAIBZAADUWQAA
2lkAAHZcAAB8XAAAKWgAACtoAACKaAAAj2gAALJpAABcagAA8GsAAPJrAACSbQAAnG0AADdx
AAA5cQAATXEAAE9xAACHcwAAj3MAAKh1AACudQAAz3UAANx1AAB8dgAAgXYAAMx7AADOewAA
dX4AAJV+AADHfgAAy34AALV/AAC8fwAAd4AAAH2AAACrgQAAxYEAABmCAAAbggAAsoQAALyE
AADuhAAA+oQAAJqHAAC7hwAA0ogAANeIAAAsigAANIoAAGaLAAB/iwAA7owAAPGMAAB6jgAA
g44AAKSOAACsjgAAyI4AANCOAADtjgAA9Y4AABOPAAAbjwAAWY8AAGGPAACdjwAApY8AAPeP
AAD/jwAARZAAAE2QAACTkAAAm5AAANeQAADfkAAAMZEAADmRAAB/kQAAh5EAAM2RAADVkQAA
J5IAAC+SAAB1kgAAfZIAAMOSAADLkgAAHZMAACWTAABrkwAAc5MAAOyTAAD0kwAALJQAADOU
AAA+lAAARpQAAH6UAACGlAAAvpQAAMWUAADQlAAA2JQAACKVAAAqlQAAVJUAAFyVAACGlQAA
jpUAAL6VAADGlQAA85UAAPuVAACNlgAAlZYAAM6WAADWlgAAIZcAACmXAABglwAAaJcAAKWX
AACtlwAA9pcAAP6XAABGmAAATpgAAJ2YAAClmAAA95gAAP+YAABMmQAAVJkAAIuZAACQmQAA
tJkAALyZAADzmQAA+ZkAACaaAAApmgAAMZoAADmaAABYmgAAYZoAAGmaAABxmgAAfpoAAIOa
AACbmgAAo5oAAKSaAACrmgAAu5oAAMOaAADImgAA0JoAAOKaAADqmgAA+poAAAKbAAAimwAA
KpsAAFSbAABcmwAAh5sAAI+bAADHmwAAy5sAAPObAAD6mwAABpwAAA2cAAAOnAAAFpwAAE2c
AABVnAAAcJwAAHicAACTnAAAm5wAALacAAC+nAAA2ZwAAOGcAAAanQAAIp0AAFydAABknQAA
np0AAKadAADgnQAA6J0AACKeAAAongAAUp4AAFWeAABdngAAZZ4AAJWeAACengAApp4AAK6e
AADMngAA0Z4AANyeAADkngAA5Z4AAOyeAAAAnwAACJ8AAA2fAAAVnwAAJ58AAC+fAABEnwAA
TJ8AAHafAAB+nwAAnZ8AAKWfAADRnwAA2Z8AAP2fAAAFoAAAO6AAAEOgAABroAAAc6AAAKyg
AACwoAAAzaAAANKgAADkoAAA6aAAAPugAAADoQAAKqEAADKhAABaoQAAYqEAAIqhAACSoQAA
uqEAAMKhAADqoQAA8qEAADOiAAA7ogAAfaIAAIWiAADHogAAz6IAABGjAAAZowAAW6MAAGGj
AACfowAAp6MAAMajAADMowAA16MAAN+jAADgowAA56MAAPyjAAAEpAAACaQAABGkAAAjpAAA
K6QAAEGkAABJpAAAdaQAAH2kAAChpAAAqaQAAN+kAADnpAAABaUAAA2lAABGpQAASqUAAGel
AABtpQAAf6UAAIWlAACXpQAAn6UAAMilAADQpQAA+qUAAAKmAAAspgAANKYAAF6mAABmpgAA
kKYAAJimAADapgAA4qYAACWnAAAtpwAAcKcAAHinAAC7pwAAw6cAAAaoAAAMqAAALagAADWo
AABaqAAAXqgAAHCoAAB4qAAAeagAAICoAACaqAAAoqgAAKeoAACvqAAAwagAAMmoAADkqAAA
7KgAACKpAAAqqQAASKkAAFCpAAB6qQAAfqkAAJupAACfqQAAuKkAALypAADVqQAA3akAABGq
AAAZqgAATqoAAFaqAACpqgAAsaoAAOaqAADuqgAAI6sAACurAABzqwAAe6sAAMSrAADMqwAA
FawAAB2sAABmrAAAbqwAALesAAC9rAAA96wAAPqsAAADrQAAC60AADWtAAA9rQAAgq0AAIit
AACUrQAAnK0AANKuAADargAAT7AAAFGwAABVsAAAXbAAAGiyAABwsgAAt7IAAMCyAAB4swAA
gbMAAC+2AAA3tgAAjbYAAI+2AAD0tgAA/LYAAAS5AAAMuQAAxLsAAMi7AAA1vAAAPLwAALS8
AAC7vAAAHL0AACK9AABtvgAAdb4AAM2+AADRvgAAEb8AABm/AABGvwAATr8AAEbAAABIwAAA
j8AAAJfAAADtwAAA78AAAPbAAAD+wAAAVMEAAFbBAABdwQAAZcEAALvBAAC9wQAAxMEAAMzB
AAAiwgAAJMIAACvCAAAzwgAAJcMAACjDAACMwwAAlMMAAGrEAABtxAAALcUAADXFAAALxgAA
DsYAALLGAAC6xgAAkMcAAJPHAAA/yQAAR8kAAHHJAAB5yQAA7skAAPbJAABSygAAWsoAAKrK
AACyygAAF8sAABnLAAAnywAAL8sAANfLAADaywAAs8wAALvMAAAXzQAAH80AAG/NAAB3zQAA
3M0AAN7NAADszQAA9M0AAFDOAABYzgAAqM4AALDOAAAVzwAAF88AACXPAAAtzwAAic8AAJHP
AADhzwAA6c8AAE7QAABQ0AAAZdAAAG3QAACs0AAAtNAAAOzQAADz0AAA/tAAAAbRAACp0wAA
tdMAADLVAAA61QAActUAAHnVAACE1QAAjNUAAHTWAAB81gAAtNYAALvWAADG1gAAztYAACjX
AAAv1wAAPNcAAD7XAABY1wAAXNcAAF/XAABg1wAAeNcAAHnXAACS1wAAk9cAAOvXAADx1wAA
wNgAAMjYAADz2AAA+9gAADLZAAA62QAAr9kAALPZAADG2QAAztkAAAXaAAAN2gAAg9oAAIfa
AACa2gAAotoAAOXaAADn2gAAVNsAAFzbAACW2wAAmNsAAC3cAAA13AAAm9wAAKPcAAAO3QAA
Ft0AAEndAABR3QAApt0AAKjdAAD03QAA/N0AAFneAABd3gAAdd4AAH3eAAAX3wAAG98AALPf
AAC73wAAVeAAAFngAACN4AAAleAAAOfgAADw4AAAB+EAAA/hAABk4QAAe+EAAMrhAADS4QAA
KuIAAEHiAACs4gAAtOIAAE/jAABR4wAAkOMAAJjjAAAg5AAAIuQAAGHkAABp5AAAoOQAAKXk
AACc5QAApeUAAPTlAAD45QAAYuYAAGrmAACh5gAAp+YAAGznAABy5wAADegAABHoAACM6AAA
legAABPrAAAU6wAAjusAAJHrAADH7AAAyuwAAPfwAAAA8QAAM/EAADvxAABy8QAAevEAALHx
AAC58QAA8PEAAPjxAAAt8gAANfIAAGzyAAB08gAAqfIAALHyAADm8gAA7vIAACbzAAAu8wAA
afMAAHHzAACw8wAAuPMAAAP0AAAL9AAASvQAAFL0AACH9AAAj/QAAMb0AADO9AAABfUAAA31
AABC9QAASvUAAJT1AACX9QAAmPUAAMP1AADJ9gAA0PYAACX5AAAo+QAAbvkAAHb5AAC6+QAA
v/kAAOP5AADr+QAAHfoAACX6AABJ+gAAS/oAAJ76AACg+gAAJfsAACn7AAC4+wAAuvsAAB78
AAAn/AAAKPwAAC78AAA6/AAAPvwAAF78AABj/AAAtPwAALb8AAD+/AAAB/0AAAj9AAAO/QAA
Fv0AABn9AABE/QAASv0AAG3+AABv/gAAev4AAHz+AACT/gAAmP4AAN3+AADi/gAAU/8AAFz/
AAB0/wAAeP8AAHn/AAB8/wAAq/8AAK7/AADd/wAA4P8AAC4AAQBEAAEAXAABAHIAAQCKAAEA
oAABAC8DAQA3AwEAzwMBANIDAQAYBAEAIAQBAGQEAQBpBAEAjQQBAJMEAQDSBAEA2QQBAAgF
AQAPBQEAOwUBAEIFAQCMBQEAjgUBAKcFAQCpBQEA/AUBAP4FAQCEBgEAiAYBALoGAQC8BgEA
VAcBAFYHAQCbBwEApAcBAKUHAQCrBwEAtwcBAMAHAQDmBwEA7wcBAAMIAQAGCAEAMggBADcI
AQBfCAEAZAgBAL4IAQDACAEAAwkBAAwJAQANCQEAEwkBAFoJAQBdCQEAZwkBAGwJAQB8CQEA
gQkBAI4JAQCRCQEAxAkBAMcJAQDzCQEA9QkBABgKAQAaCgEATQoBAFEKAQByCgEAdQoBAIIK
AQCJCgEAVQsBAFoLAQB3CwEAfAsBAJALAQCYCwEAngsBAKYLAQCsCwEAsQsBAAwMAQAZDAEA
HQwBACMMAQAyDAEAOQwBAEQMAQBKDAEAbAwBAHMMAQB+DAEAgwwBAMUMAQDIDAEA0wwBANYM
AQDhDAEA5gwBAFsNAQBfDQEAdg0BAIwNAQCODQEAkQ0BANcNAQDtDQEA7w0BAPINAQA5DgEA
Tw4BAFEOAQBUDgEAhQ4BAIgOAQDODgEA5A4BAOYOAQDpDgEAMA8BAEYPAQBIDwEASw8BAJIP
AQCoDwEAdhMBAKMTAQCkEwEA2BMBADEUAQA0FAEAnBQBAMkUAQDKFAEA8BQBAD8VAQBpFQEA
RBYBAHcWAQB4FgEA4BYBAOEWAQD3FgEAThcBAHUXAQCkFwEA9RcBAPYXAQAPGAEApRgBALIY
AQDEGAEA1hgBANcYAQABGQEAAhkBACEZAQBXGQEAXhkBAGAZAQBkGQEAohkBAKkZAQD9GQEA
KxoBAGoaAQCMGgEAjRoBAJ4aAQAGGwEAtBsBAAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoA
BwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwA6AAcA
OgAHADoABwA6AAcAOgAHADoABwA6AAcAOgAHADoABwAHAAAAAACACAAAgAgAALHqAAAh+wAA
IfsAAPb7AAD2+wAA+PsAAPj7AAA2/AAANvwAAIr8AACK/AAAjfwAAI38AABtAwEAbQMBAMsD
AQDLAwEA6gQBAOoEAQDsBAEA7AQBAB4FAQAeBQEAZwUBAGcFAQCaBQEAmgUBAMIFAQDCBQEA
JAYBACQGAQCABgEAgAYBAMMGAQDDBgEAswcBALMHAQCLCAEAiwgBAB0JAQAdCQEAeAkBAHgJ
AQC2CQEAtgkBAEMKAQBDCgEAZQoBAGUKAQD4FgEA+BYBAPoWAQD6FgEABRsBAAUbAQAGGwEA
BhsBACsbAQArGwEAghsBAIIbAQCxGwEAsRsBALQbAQADAAQAAgADAAQAAwAEAAMABAADAAQA
AwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMA
BAADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMABAAHAAQABwAEAAcABAAHAAQA
BwAAAAAABhsBALQbAQAHAAcAAQAvZdUBxDIuEP8P/w//D/8P/w//D/8P/w//DxAAAQAAABcQ
AAAAAAAAAAAAAGgBAAAAAAAAFRgAAA+E0AIRhJj+FcYFAAHQAgZehNACYISY/k9KAQBRSgEA
bygAh2gAAAAAiEgAAAEAt/ABAAAAF5AAAAAAAAAAAAAAaAEAAAAAAAAZGAAAD4SgBRGEmP4V
xgUAAaAFBl6EoAVghJj+T0oDAFFKAwBeSgMAbygAh2gAAAAAiEgAAAEAbwABAAAAF5AAAAAA
AAAAAAAAaAEAAAAAAAAVGAAAD4RwCBGEmP4VxgUAAXAIBl6EcAhghJj+T0oFAFFKBQBvKACH
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7/AAAFAQIAAAAAAAAA
AAAAAAAAAAAAAAEAAAAC1c3VnC4bEJOXCAArLPmuMAAAAAgBAAAMAAAAAQAAAGgAAAAPAAAA
cAAAAAUAAACUAAAABgAAAJwAAAARAAAApAAAABcAAACsAAAACwAAALQAAAAQAAAAvAAAABMA
AADEAAAAFgAAAMwAAAANAAAA1AAAAAwAAADqAAAAAgAAAOQEAAAeAAAAHAAAACBSTUNTLCBD
cmFuZmllbGQgVW5pdmVyc2l0eQADAAAAAQIAAAMAAACQAAAAAwAAAHYaAQADAAAA5hULAAsA
AAAAAAAACwAAAAAAAAALAAAAAAAAAAsAAAAAAAAAHhAAAAEAAAAKAAAARG9jIE5vOiBOAAwQ
AAACAAAAHgAAAAYAAABUaXRsZQADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYA
AAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAA
FAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEA
AAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAA
LwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwA
AAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAA
SgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcA
AABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAA
ZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIA
AABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AAAA
gAAAAIEAAACCAAAAgwAAAIQAAACFAAAAhgAAAIcAAACIAAAAiQAAAIoAAACLAAAAjAAAAI0A
AACOAAAAjwAAAJAAAACRAAAAkgAAAJMAAACUAAAAlQAAAJYAAACXAAAAmAAAAJkAAACaAAAA
mwAAAJwAAACdAAAAngAAAJ8AAACgAAAAoQAAAKIAAACjAAAApAAAAKUAAACmAAAApwAAAKgA
AACpAAAAqgAAAKsAAACsAAAArQAAAK4AAACvAAAAsAAAALEAAACyAAAAswAAALQAAAC1AAAA
tgAAALcAAAC4AAAAuQAAALoAAAC7AAAAvAAAAL0AAAC+AAAAvwAAAMAAAADBAAAAwgAAAMMA
AADEAAAAxQAAAMYAAADHAAAAyAAAAMkAAADKAAAAywAAAMwAAADNAAAAzgAAAM8AAADQAAAA
0QAAANIAAADTAAAA1AAAANUAAADWAAAA1wAAANgAAADZAAAA2gAAANsAAADcAAAA3QAAAN4A
AADfAAAA4AAAAOEAAADiAAAA4wAAAOQAAADlAAAA5gAAAOcAAADoAAAA6QAAAOoAAADrAAAA
7AAAAO0AAADuAAAA7wAAAPAAAADxAAAA8gAAAPMAAAD0AAAA9QAAAPYAAAD3AAAA+AAAAPkA
AAD6AAAA+wAAAPwAAAD9AAAA/gAAAP8AAAAAAQAAAQEAAAIBAAADAQAABAEAAAUBAAAGAQAA
BwEAAAgBAAAJAQAACgEAAAsBAAAMAQAADQEAAA4BAAAPAQAAEAEAABEBAAASAQAAEwEAABQB
AAAVAQAAFgEAABcBAAAYAQAAGQEAABoBAAAbAQAAHAEAAB0BAAAeAQAAHwEAACABAAAhAQAA
IgEAACMBAAAkAQAAJQEAACYBAAAnAQAAKAEAACkBAAAqAQAAKwEAACwBAAAtAQAALgEAAC8B
AAAwAQAAMQEAADIBAAAzAQAANAEAADUBAAA2AQAANwEAADgBAAA5AQAAOgEAADsBAAA8AQAA
PQEAAD4BAAA/AQAAQAEAAEEBAABCAQAAQwEAAEQBAABFAQAARgEAAEcBAABIAQAASQEAAEoB
AABLAQAATAEAAE0BAABOAQAATwEAAFABAABRAQAAUgEAAFMBAABUAQAAVQEAAFYBAABXAQAA
WAEAAFkBAABaAQAAWwEAAFwBAABdAQAAXgEAAF8BAABgAQAAYQEAAGIBAABjAQAAZAEAAGUB
AABmAQAAZwEAAGgBAABpAQAAagEAAGsBAABsAQAAbQEAAG4BAABvAQAAcAEAAHEBAAByAQAA
cwEAAHQBAAB1AQAAdgEAAHcBAAB4AQAA/v///3oBAAB7AQAAfAEAAH0BAAB+AQAAfwEAAIAB
AAD+////ggEAAIMBAACEAQAAhQEAAIYBAACHAQAAiAEAAIkBAACKAQAAiwEAAIwBAACNAQAA
jgEAAI8BAACQAQAAkQEAAJIBAACTAQAAlAEAAJUBAACWAQAAlwEAAJgBAACZAQAAmgEAAJsB
AACcAQAAnQEAAJ4BAACfAQAAoAEAAKEBAACiAQAAowEAAKQBAAClAQAApgEAAKcBAACoAQAA
qQEAAKoBAACrAQAArAEAAK0BAACuAQAArwEAALABAACxAQAAsgEAALMBAAC0AQAAtQEAALYB
AAC3AQAAuAEAALkBAAC6AQAAuwEAALwBAAC9AQAAvgEAAL8BAADAAQAAwQEAAMIBAADDAQAA
xAEAAMUBAADGAQAAxwEAAMgBAADJAQAAygEAAMsBAADMAQAAzQEAAM4BAADPAQAA0AEAANEB
AADSAQAA0wEAANQBAADVAQAA1gEAANcBAADYAQAA2QEAANoBAADbAQAA3AEAAN0BAADeAQAA
3wEAAOABAADhAQAA4gEAAOMBAADkAQAA5QEAAOYBAADnAQAA6AEAAOkBAADqAQAA6wEAAOwB
AADtAQAA7gEAAO8BAADwAQAA8QEAAPIBAADzAQAA9AEAAPUBAAD2AQAA9wEAAPgBAAD5AQAA
+gEAAPsBAAD8AQAA/QEAAP4BAAD/AQAAAAIAAAECAAACAgAAAwIAAAQCAAAFAgAA/v///wcC
AAAIAgAACQIAAAoCAAALAgAADAIAAA0CAAD+////DwIAABACAAARAgAAEgIAABMCAAAUAgAA
FQIAAP7////9/////f////3////9/////f///xwCAAD+/////v////7/////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
UgBvAG8AdAAgAEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAABYABQH//////////wMAAAAGCQIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAA
cNYoudlJxgEeAgAAgAAAAAAAAABEAGEAdABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgACAf///////////////wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkBAAAAEAAAAAAAADEAVABhAGIAbABlAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAIB
AQAAAAYAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQEAAPQJ
AQAAAAAAVwBvAHIAZABEAG8AYwB1AG0AZQBuAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAABoAAgECAAAABQAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAN/ACAAAAAAAFAFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0A
YQB0AGkAbwBuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAACAf///////////////wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYCAAAAEAAAAAAAAAUARABvAGMA
dQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBuAGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAA
AAA4AAIBBAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
DgIAAAAQAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgD///////////////8AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////
/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
AAD+////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////AQD+/wMKAAD/////BgkCAAAAAADAAAAAAAAARh8A
AABNaWNyb3NvZnQgT2ZmaWNlIFdvcmQgRG9jdW1lbnQACgAAAE1TV29yZERvYwAQAAAAV29y
ZC5Eb2N1bWVudC44APQ5snEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAG8A
bwB0ACAARQBuAHQAcgB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAFgAFAf//////////AwAAAAYJAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAACgwI5K
3EnGASQCAADAAwAAAAAAAEQAYQB0AGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIB////////////////AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQEAAAAQAAAAAAAAMQBUAGEAYgBsAGUAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAgEBAAAA
BgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAQAA9AkBAAAA
AABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAGgACAQIAAAAFAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA38AIAAAAAAAECAAACAgAAAwIAAAQCAAAFAgAA/v///wcCAAAIAgAA
CQIAAAoCAAALAgAADAIAAA0CAAD+////////////////////////////////////////////
///9/////f////3////9//////////////////////////////8jAgAA/f////7////+////
/v///yICAAD/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////AQAAAP7/
//8DAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAD+////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//////////////////////////9IAQAABQAAAHwBAAAGAAAAuAEAAAUAAAACAAAAFAAAAF8A
QQBkAEgAbwBjAFIAZQB2AGkAZQB3AEMAeQBjAGwAZQBJAEQAAAADAAAAEAAAAF8ATgBlAHcA
UgBlAHYAaQBlAHcAQwB5AGMAbABlAAAABAAAAA4AAABfAEUAbQBhAGkAbABTAHUAYgBqAGUA
YwB0AAAABQAAAA0AAABfAEEAdQB0AGgAbwByAEUAbQBhAGkAbAAAAAAABgAAABgAAABfAEEA
dQB0AGgAbwByAEUAbQBhAGkAbABEAGkAcwBwAGwAYQB5AE4AYQBtAGUAAAACAAAAsAQAABMA
AAAJCAAAAwAAAFRTEvYfAAAAAQAAAAAAAAAfAAAAFgAAAEMAKwArACAASQBuAHQAZQByAHYA
YQBsACAAUwB0AGEAbgBkAGEAcgBkAAAAHwAAABoAAABKAC4ARAAuAFAAcgB5AGMAZQBAAGMA
cgBhAG4AZgBpAGUAbABkAC4AYQBjAC4AdQBrAAAAHwAAAAwAAABQAHIAeQBjAGUAIABEAHIA
IABKAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAUwB1AG0A
bQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAoAAIB////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BgIAAAAQAAAAAAAABQBEAG8AYwB1AG0AZQBuAHQAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIA
bQBhAHQAaQBvAG4AAAAAAAAAAAAAADgAAgEEAAAA//////////8AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAJAMAAAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAP//////////
/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAQD+/wMKAAD/////BgkCAAAAAADAAAAAAAAARh8AAABNaWNy
b3NvZnQgT2ZmaWNlIFdvcmQgRG9jdW1lbnQACgAAAE1TV29yZERvYwAQAAAAV29yZC5Eb2N1
bWVudC44APQ5snEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/wAABQECAAAAAAAAAAAA
AAAAAAAAAAACAAAAAtXN1ZwuGxCTlwgAKyz5rkQAAAAF1c3VnC4bEJOXCAArLPmuTAEAAAgB
AAAMAAAAAQAAAGgAAAAPAAAAcAAAAAUAAACUAAAABgAAAJwAAAARAAAApAAAABcAAACsAAAA
CwAAALQAAAAQAAAAvAAAABMAAADEAAAAFgAAAMwAAAANAAAA1AAAAAwAAADqAAAAAgAAAOQE
AAAeAAAAHAAAACBSTUNTLCBDcmFuZmllbGQgVW5pdmVyc2l0eQADAAAAAQIAAAMAAACQAAAA
AwAAAHYaAQADAAAA5hULAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAAsAAAAAAAAAHhAAAAEA
AAAKAAAARG9jIE5vOiBOAAwQAAACAAAAHgAAAAYAAABUaXRsZQADAAAAAQAAANgBAAAIAAAA
AAAAAEgAAAABAAAAJAEAAAAAAIAsAQAAAgAAADQBAAADAAAAPAEAAAQAAAA=

--B_3227619819_5455820--

From first.i.last@comcast.net Tue Apr 11 23:17:51 2006
Received: from rwcrmhc13.comcast.net (rwcrmhc13.comcast.net [204.127.192.83])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3C6Hojd001691
	for <std-interval@compgeom.poly.edu>; Tue, 11 Apr 2006 23:17:50 -0700
Received: from rmailcenter19.comcast.net ([204.127.197.129])
          by comcast.net (rwcrmhc13) with SMTP
          id <20060412042800m1300r5ksge>; Wed, 12 Apr 2006 04:28:00 +0000
Received: from [71.192.84.143] by rmailcenter19.comcast.net;
	Wed, 12 Apr 2006 04:27:58 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] response from ISL
Date: Wed, 12 Apr 2006 04:27:58 +0000
Message-Id: <041220060427.13881.443C81CE000ABE860000363922069984999B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Aug  4 2005)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 12 Apr 2006 06:17:51 -0000

 -------------- Original message ----------------------
From: George Corliss <George.Corliss@marquette.edu>
> Sylvain,

[snip] 


> I am most interested in the question of whether the
> standard should specify a mathematical model for intervals in the sense
> discussed here, and if so, what that model should be.  The attached response
> argues that there should be a mathematical model, but that it should be
> implementation-defined, since there has not been a consensus.  One of the
> threads over the past couple weeks seems to suggest that leaving such an
> issue to be defined by the implementation guarantees lack of portability.

It may be worthwhile to place explicit limits on the future 
interpretation of the standard as far as restricting the models implementations may use.  For example, nothing in the standard should restrict an implementor from selecting a model wherein the elements contained in the set representing an interval can be from the union of all values representable on the underlying machine and all values representable in IEEE-754/854.  In addition to placing nothing in the standard indicating such a restriction, it may be useful to state that there is no such restriction.

-- Lee Winter
From crowl@philmont.sfbay.sun.com Mon Apr 24 20:26:12 2006
Received: from nwkea-mail-5.sun.com (nwkea-mail-5.sun.com [192.18.42.27])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3P3QCjd012339
	for <std-interval@compgeom.poly.edu>; Mon, 24 Apr 2006 20:26:12 -0700
Received: from sfbaymail1sca.SFBay.Sun.COM ([129.145.154.35])
	by nwkea-mail-5.sun.com (8.12.10/8.12.9) with ESMTP id k3P1edaN025215
	for <std-interval@compgeom.poly.edu>;
	Mon, 24 Apr 2006 18:40:40 -0700 (PDT)
Received: from philmont.sfbay.sun.com (philmont.SFBay.Sun.COM
	[129.146.86.162])with ESMTP id k3P1edoc015991
	for <std-interval@compgeom.poly.edu>;
	Mon, 24 Apr 2006 18:40:39 -0700 (PDT)
Received: from philmont (localhost [127.0.0.1])k3P1edbd016343
	for <std-interval@compgeom.poly.edu>;
	Mon, 24 Apr 2006 18:40:39 -0700 (PDT)
Message-Id: <200604250140.k3P1edbd016343@philmont.sfbay.sun.com>
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: [std-interval] Parameter Passing Performance
From: Lawrence.Crowl@Sun.com
Date: Mon, 24 Apr 2006 18:40:39 -0700
Sender: crowl@philmont.sfbay.sun.com
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence.Crowl@Sun.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 25 Apr 2006 03:26:13 -0000

Steve Clamage wrote:
 >> I compiled and ran on 64-bit sparc (US II) and 64-bit amd64 (Opteron).
 >> According to my earlier claims, pass-by-value should have been faster.
 >> 
 >> 64-bit sparc:
 >> addByValue:     690000 ticks 4.1e+08
 >> addByRef:       680000 ticks 4.1e+08
 >> addByConstRef:  450000 ticks 4.1e+08
 >> 
 >> 64-bit amd64:
 >> addByValue:     1280000 ticks 4.1e+08
 >> addByRef:        670000 ticks 4.1e+08
 >> addByConstRef:   670000 ticks 4.1e+08
 >> 
 >> Color my face red. :-)
 >> 
 >> This result is quite different from other experiments with small structs
 >> that showed pass-by-value performing better. One possibility is that the
 >> compiler is missing some optimization opportunities. Another is that
 >> this example is not representative.

Sorry for the delay on responding, but I have been burdened with other
issues.  I decided to write my own benchmark that I found more
convincing in terms of likely use.  I chose to implement a simple
interval saxpy, but with the primitive operations out of line.  I will
not pretend this code is good interval arithmetic, but it should
provide a reasonable upper bound on the cost of parameters.  The source
is as follows.

% cat interval.h
#ifndef INTERVAL_H
#define INTERVAL_H

class interval;

#ifdef VALUE
typedef interval interval_in;
#else
typedef const interval & interval_in;
#endif

struct interval
{
        double lo, hi;
        interval() { }
        interval( double x, double y ) : lo( x ), hi( y ) { }
        interval & operator +=( interval_in x );
        friend interval operator +( interval_in x, interval_in y );
        friend interval operator *( interval_in x, interval_in y );
};

interval operator +( interval_in x, interval_in y );
interval operator *( interval_in x, interval_in y );

#endif

% cat interval.cc
#include "interval.h"

interval & interval::operator +=( interval_in x )
{
        lo += x.lo;
        hi += x.hi;
        return *this;
}

interval operator +( interval_in x, interval_in y )
{
        return interval( x.lo + y.lo, x.hi + y.hi );
}

interval operator *( interval_in x, interval_in y )
{
        double min = x.lo * y.lo;
        double max = min;
        double next = x.lo * y.hi;
        if ( next < min ) min = next;
        if ( next > max ) max = next;
        next = x.hi * y.lo;
        if ( next < min ) min = next;
        if ( next > max ) max = next;
        next = x.hi * y.hi;
        if ( next < min ) min = next;
        if ( next > max ) max = next;
        return interval( min, max );
}

% cat saxpy.h
#ifndef SAXPY_H
#define SAXPY_H

#include "interval.h"

interval saxpy( interval_in a, interval x[], interval y[], int n );

#endif

% cat saxpy.cc
#include "saxpy.h"

interval saxpy( interval_in a, interval x[], interval y[], int n )
{
        interval sum( 0.0, 0.0 );
        for ( int i = 0; i < n; ++i )
                sum += a * x[i] * y[i];
        return sum;
}

% cat benchmark.cc
#include <stdio.h>
#include "interval.h"
#include "saxpy.h"

const int size = 10000;

interval x[size];
interval y[size];
interval sum( 0.0, 0.0 );

int main()
{
        for ( int i = 0; i < size; ++i )
        {
                x[i].lo = 1.0 - i / (double)size;
                x[i].hi = 1.0 + i / (double)size;
                y[i].lo = -1.0 - i / (double)size;
                y[i].hi = -1.0 + i / (double)size;
        }
        for ( int i = 0; i < size; ++i )
        {
                sum += saxpy( x[i], x, y, size );
        }
        printf( "[%f;%f]\n", sum.lo, sum.hi );
        return 0;
}

I tested the result on four platforms and the two parameter
mechanisms.  The result is times in seconds.

    C++ param decl		refer	--------value-----------
    impl struct passing			pointer	stack	register

    SPARC v8 (32-bit)		6.3	11.3
    SPARC v9 (64-bit)		14.6			19.4
    IA32     (32-bit)		7.1		9.0
    AMD64    (64-bit)		2.8			4.3

In all cases, pass by const reference was faster.  I looked in detail
at the generated code and discovered that in all cases our compiler was
introducing an unnecessary copy for each value parameter.  It is a bug,
probably in the higher levels of the compiler.  Once one corrects for
the unnecessary copying, the value parameters are faster.

Note that performance is not the only criteria for choosing value
parameters.  The reduced aliasing means less exposure to program
errors.

  Lawrence Crowl             650-786-6146   Sun Microsystems, Inc.
                   Lawrence.Crowl@Sun.com   16 Network Circle, UMPK16-303
           http://www.Crowl.org/Lawrence/   Menlo Park, California, 94025
From guillaume.melquiond@ens-lyon.fr Wed Apr 26 10:51:52 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QHppjd015503
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 10:51:52 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 6CFA415B8BD
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 18:07:12 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 11200-49 for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 18:07:11 +0200 (CEST)
Received: from [140.77.13.110] (unknown [140.77.13.110])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id DB59415B8BC
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 18:07:10 +0200 (CEST)
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
Content-Type: text/plain
Date: Wed, 26 Apr 2006 18:06:56 +0200
Message-Id: <1146067616.7160.67.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 7bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
Subject: [std-interval] Interval comparison operators
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 17:51:52 -0000

Hi,

On the last draft of the proposal I posted, I had removed everything
related to interval comparisons because we felt this needed some more
work. Before tackling this issue, we would like to get your opinions on
the subject of comparing intervals.

For those who did not get to read our very first proposal, I will detail
what our approach was, so as to have a starting point for discussing.
The operators on intervals were directly derived from the order on real
numbers. Given two intervals X and Y, the result of (X < Y) was defined
as:
  - false if there are some values x in X and y in Y such that x >= y,
  - true if x < y for all the values x in X and y in Y,
  - a thrown exception if the intervals overlap or are empty.

As a first consequence, it reduces surprise for developers since a
property like (X < Y) == !(X >= Y) always holds true. But this is not
why we chose this definition in the first place. We wanted generic code
to be usable with intervals. Let's consider the following toy example:
computing accurately the sign of a 2x2 determinant. A generic C++
template implementation would look like:

        template< class T > sign_t det2(T a, T b, T c, T d) {
          T u = a * d, v = b * c;
          if (u < v) return negative;
          if (u > v) return positive;
          return zero;
        }

Now let's try to compute the sign of a floating-point determinant.
det2<double> is a fast but not reliable implementation. det2<exact>
(with "exact" being an exact arithmetic type) is reliable but slow. The
following implementation is generally fast and always reliable:

        sign_t good_det2(double a, double b, double c, double d) {
          try { return det2< interval<double> >(a, b, c, d); }
          catch(...) { return det2< exact >(a, b, c, d); }
        }

So first an interval evaluation is done, and if the result is not
guaranteed, an exception is thrown during the first comparison in the
generic code and the specific code falls back to the exact evaluation.
This example was inspired from the arithmetic filters of computational
geometry. Only generic code has to be written and it can then be used
with interval arithmetic to produce guaranteed results.

Now people may be reluctant to use exceptions (because of runtime cost,
code complexity, and so on) when specifically designing an interval
code. So, in our proposal, the comparison (X < Y) does not directly
throw; an exception is thrown only when the result of a comparison is
converted to a boolean value, for example in an "if" conditional
expression. This allows for other ways of comparing two intervals.

In particular, interval libraries usually provide explicit functions for
comparing intervals, something like "certainly less than" or "possibly
less than" functions that would always return a boolean value and never
throw. We believe C++ features should be used to provide a nicer syntax
though. Instead of cerlt(X,Y), a "certainly less than" comparison would
then be written as:

        if (certainly(X < Y)) ...

This should make a rather detailed overview of our opinion on comparison
operators for intervals. Now we are interested in what the opinions of
other interval developers are. Should the user be allowed to compare
intervals in C++? And if so, what should the semantic of these
comparisons be?

Best regards,

Guillaume

From rbk@louisiana.edu Wed Apr 26 11:34:15 2006
Received: from marnier.ucs.louisiana.edu (marnier.ucs.louisiana.edu
	[130.70.132.233])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QIYAjd015553
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 11:34:10 -0700
Received: from MATH-FOS101A (h158065.louisiana.edu [130.70.158.65])
	SMTP id k3QGn6mL027141	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 11:49:11 -0500 (CDT)
Message-Id: <2.2.32.20060426164911.009f6a30@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Wed, 26 Apr 2006 11:49:11 -0500
To: std-interval@compgeom.poly.edu
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: Re: [std-interval] Interval comparison operators
X-Virus-Scanned: ClamAV version 0.88, clamav-milter version 0.87 on
	marnier.ucs.louisiana.edu
X-Virus-Status: Clean
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 18:34:15 -0000

Guillaume et al,

I am glad you brought this point up again.

You are proposing an interesting way of handling the "three-valued"
logic of interval comparisons within existing boolean language
constructs.  I'll be interested in seeing what others think about it.

Actually, I have a small (possible) correction to your explanation.
You had:
>  - false if there are some values x in X and y in Y such that x >= y,
>  - true if x < y for all the values x in X and y in Y,
>  - a thrown exception if the intervals overlap or are empty.

Didn't you mean
   - false if there are ANY  values x in X and y in Y such that x >= y,

???

Best regards,

Baker


At 06:06 PM 4/26/2006 +0200, Guillaume Melquiond wrote:
>Hi,
>
>On the last draft of the proposal I posted, I had removed everything
>related to interval comparisons because we felt this needed some more
>work. Before tackling this issue, we would like to get your opinions on
>the subject of comparing intervals.
>
>For those who did not get to read our very first proposal, I will detail
>what our approach was, so as to have a starting point for discussing.
>The operators on intervals were directly derived from the order on real
>numbers. Given two intervals X and Y, the result of (X < Y) was defined
>as:
>  - false if there are some values x in X and y in Y such that x >= y,
>  - true if x < y for all the values x in X and y in Y,
>  - a thrown exception if the intervals overlap or are empty.
>
>As a first consequence, it reduces surprise for developers since a
>property like (X < Y) == !(X >= Y) always holds true. But this is not
>why we chose this definition in the first place. We wanted generic code
>to be usable with intervals. Let's consider the following toy example:
>computing accurately the sign of a 2x2 determinant. A generic C++
>template implementation would look like:
>
>        template< class T > sign_t det2(T a, T b, T c, T d) {
>          T u = a * d, v = b * c;
>          if (u < v) return negative;
>          if (u > v) return positive;
>          return zero;
>        }
>
>Now let's try to compute the sign of a floating-point determinant.
>det2<double> is a fast but not reliable implementation. det2<exact>
>(with "exact" being an exact arithmetic type) is reliable but slow. The
>following implementation is generally fast and always reliable:
>
>        sign_t good_det2(double a, double b, double c, double d) {
>          try { return det2< interval<double> >(a, b, c, d); }
>          catch(...) { return det2< exact >(a, b, c, d); }
>        }
>
>So first an interval evaluation is done, and if the result is not
>guaranteed, an exception is thrown during the first comparison in the
>generic code and the specific code falls back to the exact evaluation.
>This example was inspired from the arithmetic filters of computational
>geometry. Only generic code has to be written and it can then be used
>with interval arithmetic to produce guaranteed results.
>
>Now people may be reluctant to use exceptions (because of runtime cost,
>code complexity, and so on) when specifically designing an interval
>code. So, in our proposal, the comparison (X < Y) does not directly
>throw; an exception is thrown only when the result of a comparison is
>converted to a boolean value, for example in an "if" conditional
>expression. This allows for other ways of comparing two intervals.
>
>In particular, interval libraries usually provide explicit functions for
>comparing intervals, something like "certainly less than" or "possibly
>less than" functions that would always return a boolean value and never
>throw. We believe C++ features should be used to provide a nicer syntax
>though. Instead of cerlt(X,Y), a "certainly less than" comparison would
>then be written as:
>
>        if (certainly(X < Y)) ...
>
>This should make a rather detailed overview of our opinion on comparison
>operators for intervals. Now we are interested in what the opinions of
>other interval developers are. Should the user be allowed to compare
>intervals in C++? And if so, what should the semantic of these
>comparisons be?
>
>Best regards,
>
>Guillaume
>
>_______________________________________________
>Std-interval mailing list
>Std-interval@compgeom.poly.edu
>http://compgeom.poly.edu/mailman/listinfo/std-interval
>
>

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------

From rbk@louisiana.edu Wed Apr 26 11:36:37 2006
Received: from marnier.ucs.louisiana.edu (marnier.ucs.louisiana.edu
	[130.70.132.233])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QIaajd015567
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 11:36:36 -0700
Received: from MATH-FOS101A (h158065.louisiana.edu [130.70.158.65])
	SMTP id k3QGpe5a027343	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 11:51:45 -0500 (CDT)
Message-Id: <2.2.32.20060426165145.009fdbe8@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Wed, 26 Apr 2006 11:51:45 -0500
To: std-interval@compgeom.poly.edu
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: OOPS Re: [std-interval] Interval comparison operators
X-Virus-Scanned: ClamAV version 0.88, clamav-milter version 0.87 on
	marnier.ucs.louisiana.edu
X-Virus-Status: Clean
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 18:36:37 -0000

Guillaume et al,

OOPS, I meant my correction to read:

Didn't you mean
   - false if for every x in X and y in Y,  x >= y,

???

Otherwise, it includes the case of overlapping intervals.

Baker


>Date: Wed, 26 Apr 2006 11:49:11 -0500
>To: std-interval@compgeom.poly.edu
>From: "R. Baker Kearfott" <rbk@louisiana.edu>
>Subject: Re: [std-interval] Interval comparison operators
>
>Guillaume et al,
>
>I am glad you brought this point up again.
>
>You are proposing an interesting way of handling the "three-valued"
>logic of interval comparisons within existing boolean language
>constructs.  I'll be interested in seeing what others think about it.
>
>Actually, I have a small (possible) correction to your explanation.
>You had:
>>  - false if there are some values x in X and y in Y such that x >= y,
>>  - true if x < y for all the values x in X and y in Y,
>>  - a thrown exception if the intervals overlap or are empty.
>
>Didn't you mean
>   - false if there are ANY  values x in X and y in Y such that x >= y,
>
>???
>
>Best regards,
>
>Baker
>
>
>At 06:06 PM 4/26/2006 +0200, Guillaume Melquiond wrote:
>>Hi,
>>
>>On the last draft of the proposal I posted, I had removed everything
>>related to interval comparisons because we felt this needed some more
>>work. Before tackling this issue, we would like to get your opinions on
>>the subject of comparing intervals.
>>
>>For those who did not get to read our very first proposal, I will detail
>>what our approach was, so as to have a starting point for discussing.
>>The operators on intervals were directly derived from the order on real
>>numbers. Given two intervals X and Y, the result of (X < Y) was defined
>>as:
>>  - false if there are some values x in X and y in Y such that x >= y,
>>  - true if x < y for all the values x in X and y in Y,
>>  - a thrown exception if the intervals overlap or are empty.
>>
>>As a first consequence, it reduces surprise for developers since a
>>property like (X < Y) == !(X >= Y) always holds true. But this is not
>>why we chose this definition in the first place. We wanted generic code
>>to be usable with intervals. Let's consider the following toy example:
>>computing accurately the sign of a 2x2 determinant. A generic C++
>>template implementation would look like:
>>
>>        template< class T > sign_t det2(T a, T b, T c, T d) {
>>          T u = a * d, v = b * c;
>>          if (u < v) return negative;
>>          if (u > v) return positive;
>>          return zero;
>>        }
>>
>>Now let's try to compute the sign of a floating-point determinant.
>>det2<double> is a fast but not reliable implementation. det2<exact>
>>(with "exact" being an exact arithmetic type) is reliable but slow. The
>>following implementation is generally fast and always reliable:
>>
>>        sign_t good_det2(double a, double b, double c, double d) {
>>          try { return det2< interval<double> >(a, b, c, d); }
>>          catch(...) { return det2< exact >(a, b, c, d); }
>>        }
>>
>>So first an interval evaluation is done, and if the result is not
>>guaranteed, an exception is thrown during the first comparison in the
>>generic code and the specific code falls back to the exact evaluation.
>>This example was inspired from the arithmetic filters of computational
>>geometry. Only generic code has to be written and it can then be used
>>with interval arithmetic to produce guaranteed results.
>>
>>Now people may be reluctant to use exceptions (because of runtime cost,
>>code complexity, and so on) when specifically designing an interval
>>code. So, in our proposal, the comparison (X < Y) does not directly
>>throw; an exception is thrown only when the result of a comparison is
>>converted to a boolean value, for example in an "if" conditional
>>expression. This allows for other ways of comparing two intervals.
>>
>>In particular, interval libraries usually provide explicit functions for
>>comparing intervals, something like "certainly less than" or "possibly
>>less than" functions that would always return a boolean value and never
>>throw. We believe C++ features should be used to provide a nicer syntax
>>though. Instead of cerlt(X,Y), a "certainly less than" comparison would
>>then be written as:
>>
>>        if (certainly(X < Y)) ...
>>
>>This should make a rather detailed overview of our opinion on comparison
>>operators for intervals. Now we are interested in what the opinions of
>>other interval developers are. Should the user be allowed to compare
>>intervals in C++? And if so, what should the semantic of these
>>comparisons be?
>>
>>Best regards,
>>
>>Guillaume
>>
>>_______________________________________________
>>Std-interval mailing list
>>Std-interval@compgeom.poly.edu
>>http://compgeom.poly.edu/mailman/listinfo/std-interval
>>
>>
>

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------

From guillaume.melquiond@ens-lyon.fr Wed Apr 26 12:00:10 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QJ09jd015611
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 12:00:10 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 8391815B851
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 19:15:27 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 17402-34 for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 19:15:27 +0200 (CEST)
Received: from [140.77.13.110] (unknown [140.77.13.110])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id ECA0315B8A1
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 19:15:25 +0200 (CEST)
Subject: Re: OOPS Re: [std-interval] Interval comparison operators
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <2.2.32.20060426165145.009fdbe8@pop.louisiana.edu>
References: <2.2.32.20060426165145.009fdbe8@pop.louisiana.edu>
Content-Type: text/plain; charset=UTF-8
Date: Wed, 26 Apr 2006 19:15:11 +0200
Message-Id: <1146071711.7160.69.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 19:00:10 -0000

Le mercredi 26 avril 2006 Ã  11:51 -0500, R. Baker Kearfott a Ã©crit :
> Guillaume et al,
> 
> OOPS, I meant my correction to read:
> 
> Didn't you mean
>    - false if for every x in X and y in Y,  x >= y,
> 
> ???
> 
> Otherwise, it includes the case of overlapping intervals.

Right. Thanks for spotting the mistake.

Best regards,

Guillaume

From first.i.last@comcast.net Wed Apr 26 13:02:04 2006
Received: from rwcrmhc12.comcast.net (rwcrmhc12.comcast.net [216.148.227.152])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QK24jd015701
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 13:02:04 -0700
Received: from rmailcenter73.comcast.net ([204.127.197.155](misconfigured
	sender))          by comcast.net (rwcrmhc12) with SMTP
	id <20060426181713m1200cnm1re>; Wed, 26 Apr 2006 18:17:14 +0000
Received: from [71.192.84.143] by rmailcenter73.comcast.net;
	Wed, 26 Apr 2006 18:17:12 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
Date: Wed, 26 Apr 2006 18:17:12 +0000
Message-Id: <042620061817.14212.444FB928000E5A8A0000378422073007939B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 20:02:04 -0000

 -------------- Original message ----------------------
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> Hi,

[...]

I expect to provide a detailed response, but I am confused by this section of your message:

> In particular, interval libraries usually provide explicit functions for
> comparing intervals, something like "certainly less than" or "possibly
> less than" functions that would always return a boolean value and never
> throw. We believe C++ features should be used to provide a nicer syntax
> though. Instead of cerlt(X,Y), a "certainly less than" comparison would
> then be written as:
> 
>         if (certainly(X < Y)) ...

Does this mean 

    if ( certainly_lt(X,Y) )

Or does operator<(interval,interval) return a specialized object that certainly(/*special object*/) reduces to a boolean or an exception?

If not, how do you expect the expression certainly(X<Y) to be evaluated?

-- Lee Winter

From guillaume.melquiond@ens-lyon.fr Wed Apr 26 13:34:01 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QKY1jd015734
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 13:34:01 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id F337115B900
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 20:49:23 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 24836-92 for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 20:49:22 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id B5AD415B8E7
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 20:49:22 +0200 (CEST)
Subject: Re: [std-interval] Interval comparison operators
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <042620061817.14212.444FB928000E5A8A0000378422073007939B9C0E04D207D29B9C9D0700@comcast.net>
References: 
	<042620061817.14212.444FB928000E5A8A0000378422073007939B9C0E04D207D29B9C9D0700@comcast.net>
Content-Type: text/plain; charset=ISO-8859-1
Date: Wed, 26 Apr 2006 20:49:04 +0200
Message-Id: <1146077344.3811.6.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 20:34:01 -0000

Le mercredi 26 avril 2006 à 18:17 +0000, first.i.last@comcast.net a
écrit :

> >         if (certainly(X < Y)) ...
> 
> Does this mean 
> 
>     if ( certainly_lt(X,Y) )
> 
> Or does operator<(interval,interval) return a specialized object that
> certainly(/*special object*/) reduces to a boolean or an exception?

I really meant "certainly(X < Y)". And yes, this presumably requires the
use of some kind of an expression template as the return type of
operator<. So "certainly" will do the actual comparison and return a
boolean (and it will _never_ throw an exception).

Best regards,

Guillaume

From fernando_cacciola@datafull.com Wed Apr 26 14:25:36 2006
Received: from postinofz1.prima.com.ar (postinofz1.prima.com.ar
	[200.42.0.149])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k3QLPYjd015805
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 14:25:35 -0700
Received: (qmail 65604 invoked from network); 26 Apr 2006 19:40:40 -0000
Received: from unknown (HELO SciSoft0) (200.122.82.9)
  by postinofz1.prima.com.ar with SMTP; 26 Apr 2006 19:40:40 -0000
Message-ID: <00a901c66969$85cc9e60$6401a8c0@SciSoft0>
From: "Fernando Cacciola" <fernando_cacciola@datafull.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
References:
	<042620061817.14212.444FB928000E5A8A0000378422073007939B9C0E04D207D29B9C9D0700@comcast.net>
	<1146077344.3811.6.camel@saline>
Subject: Re: [std-interval] Interval comparison operators
Date: Wed, 26 Apr 2006 16:42:16 -0300
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Fernando Cacciola <fernando_cacciola@datafull.com>, For discussions
	concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 21:25:36 -0000

Guillaume Melquiond wrote:
> Le mercredi 26 avril 2006 à 18:17 +0000, first.i.last@comcast.net a
> écrit :
>
>>>         if (certainly(X < Y)) ...
>>
>> Does this mean
>>
>>     if ( certainly_lt(X,Y) )
>>
>> Or does operator<(interval,interval) return a specialized object that
>> certainly(/*special object*/) reduces to a boolean or an exception?
>
> I really meant "certainly(X < Y)". And yes, this presumably requires
> the use of some kind of an expression template as the return type of
> operator<. So "certainly" will do the actual comparison and return a
> boolean (and it will _never_ throw an exception).
>
FWIW the operator doesn't "have to" return an expression template letting 
"certainly" do the actual comparison.
It could also be that the operator returns a tribool, or a discrete interval 
over 'bool', so that "certainly" just turns that into a true/false.

The proposal itself could be more abstract, like:

Interval comparison operators return an object of an unspecified type 
representing a tristate boolean with valid states True, False and neither 
True nor False.
These states are accessible via:

bool certainly    (value) -> true if the state is True, false otherwise
bool certainly_not(value) -> true if the state is False, false otherwise
bool possibly     (value) -> true if the state is NOT False, false otherwise
bool possibly_not (value) -> true if the state is NOT True, false otherwise

and can be logically combined via:

valueR = valueL | valueR (OR)
valueR = valueL & valueR (AND)

In a boolean context, such object shows undefined behaviour if the state is 
not True or False.


That is, the specification of the comparison operator's result can be 
spelled as a Concept rather than a concrete type.
This leaves the details of the actual representation of the operator result 
to the implementator. The proposal itself would only list the "states" 
required for each result.

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com/


From guillaume.melquiond@ens-lyon.fr Wed Apr 26 14:37:46 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QLbijd015825
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 14:37:44 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 0835E15B8C9
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 21:53:08 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 01594-05 for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 21:53:07 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 7E3D315B8BF
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 21:53:07 +0200 (CEST)
Subject: Re: [std-interval] Interval comparison operators
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <00a901c66969$85cc9e60$6401a8c0@SciSoft0>
References: 
	<042620061817.14212.444FB928000E5A8A0000378422073007939B9C0E04D207D29B9C9D0700@comcast.net>
	<00a901c66969$85cc9e60$6401a8c0@SciSoft0>
Content-Type: text/plain; charset=ISO-8859-1
Date: Wed, 26 Apr 2006 21:52:54 +0200
Message-Id: <1146081174.3811.16.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 21:37:46 -0000

Le mercredi 26 avril 2006 à 16:42 -0300, Fernando Cacciola a écrit :

> > I really meant "certainly(X < Y)". And yes, this presumably requires
> > the use of some kind of an expression template as the return type of
> > operator<. So "certainly" will do the actual comparison and return a
> > boolean (and it will _never_ throw an exception).
> >
> FWIW the operator doesn't "have to" return an expression template letting 
> "certainly" do the actual comparison.
> It could also be that the operator returns a tribool, or a discrete interval 
> over 'bool', so that "certainly" just turns that into a true/false.

Right. And a discrete interval over bool is actually used in the
original draft and in our toy implementation :-). I just missed a part
of my sentence: I wanted to say that, _for performance reasons_, the
return type will presumably be an expression template. A discrete
interval works well, but since the comparison is not delayed, it
requires some more tests (usually three instead of one floating-point
comparison) and a compiler cannot optimize them away without some
interval arithmetic related knowledge. We also intended for the
comparison operators to produce such a discrete interval (originally
called interval<bool>, but there was a lot of complains about the name)
when needed.

Best regards,

Guillaume

From fernando_cacciola@datafull.com Wed Apr 26 13:47:09 2006
Received: from postinofz1.prima.com.ar (postinofz1.prima.com.ar
	[200.42.0.149])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k3QKl7jd016198
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 13:47:08 -0700
Received: (qmail 95658 invoked from network); 26 Apr 2006 20:47:21 -0000
Received: from unknown (HELO SciSoft0) (200.122.82.9)
  by postinofz1.prima.com.ar with SMTP; 26 Apr 2006 20:47:21 -0000
Message-ID: <00bb01c66972$d67cf720$6401a8c0@SciSoft0>
From: "Fernando Cacciola" <fernando_cacciola@datafull.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
References:
	<042620061817.14212.444FB928000E5A8A0000378422073007939B9C0E04D207D29B9C9D0700@comcast.net><00a901c66969$85cc9e60$6401a8c0@SciSoft0>
	<1146081174.3811.16.camel@saline>
Subject: Re: [std-interval] Interval comparison operators
Date: Wed, 26 Apr 2006 17:48:50 -0300
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Fernando Cacciola <fernando_cacciola@datafull.com>, For discussions
	concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 20:47:09 -0000

Guillaume Melquiond wrote:
> Le mercredi 26 avril 2006 à 16:42 -0300, Fernando Cacciola a écrit :
>
>>> I really meant "certainly(X < Y)". And yes, this presumably requires
>>> the use of some kind of an expression template as the return type of
>>> operator<. So "certainly" will do the actual comparison and return a
>>> boolean (and it will _never_ throw an exception).
>>>
>> FWIW the operator doesn't "have to" return an expression template
>> letting "certainly" do the actual comparison.
>> It could also be that the operator returns a tribool, or a discrete
>> interval over 'bool', so that "certainly" just turns that into a
>> true/false.
>
> Right. And a discrete interval over bool is actually used in the
> original draft and in our toy implementation :-). I just missed a part
> of my sentence: I wanted to say that, _for performance reasons_, the
> return type will presumably be an expression template. A discrete
> interval works well, but since the comparison is not delayed, it
> requires some more tests (usually three instead of one floating-point
> comparison) and a compiler cannot optimize them away without some
> interval arithmetic related knowledge. We also intended for the
> comparison operators to produce such a discrete interval (originally
> called interval<bool>, but there was a lot of complains about the
> name)
> when needed.
>
Ineed.
I knew about interval<bool> and I also figured you were just considering an 
optimal implementation.

The goal of my post was to propose that you DO NOT include interval<bool> or 
any form of tribool in the proposal to make room for such clever 
implementations. Just state the requirements on suh a tribool type or branch 
out a separate "tribool CONCEPT" proposal (I know the std doesn't specfic 
mere concepts yet, but this one seems like a good candidate to start)

Best

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com/ 


From george.corliss@marquette.edu Wed Apr 26 16:29:12 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3QNTCjd016391
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 16:29:12 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Wed, 26 Apr 2006 18:29:32 -0500
Received: from 134.48.165.228 ([134.48.165.228]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.167]) with Microsoft Exchange Server HTTP-DAV ;
	Wed, 26 Apr 2006 23:29:32 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Wed, 26 Apr 2006 18:29:31 -0500
From: George Corliss <George.Corliss@marquette.edu>
To: <std-interval@compgeom.poly.edu>
Message-ID: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
Thread-Topic: Interval comparison operators
Thread-Index: AcZpiUSog1MzatV8EdqrMAAKlZKJfg==
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 26 Apr 2006 23:29:32.0160 (UTC)
	FILETIME=[455A0000:01C66989]
Subject: [std-interval] Interval comparison operators
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 26 Apr 2006 23:29:12 -0000

Friends,

My thoughts on this thread:

#1  In my own interval programming work, I don't think I have ever used
certainly/possibly operators or tri-valued logic, mostly because I have to
think too hard.  Instead, I use <double> tests on interval endpoints, e.g.,
lo(A) <= hi(B), and similar.  I must think carefully through all cases, but
boolean tests work as I am familiar.  I think I am not alone in that
practice.  I believe it leads to code that is more easily maintained by
people with only intermediate expertise.

#2  I do NOT favor making it as easy as possible for programmers to take
legacy code, change double to interval, and expect to get anything sensible.

If I ruled the world, I would have no interval to interval comparisons.  If
I did accept them, I'd use the CERTAINLY interpretation, that is
   X < Y is hi(X) < lo(Y)

I do not want the responsibility of ruling the world, and I am certainly
sympathetic to the argument that interval code should be as familiar as
possible to experienced programmers of <double>, suggesting the standard
should support interval to interval comparisons.

I also favor simplicity.  If this group argues about interpretations, what
is the plight of someone new to intervals.  Who would read the several pages
required to specify the semantics of several alternatives?

I am not sure what is the simplest solution, and I'll gladly follow further
discussions.  At the moment, I favor providing the CERTAINLY interpretation,
   X < Y is hi(X) < lo(Y), etc.,
although I am painfully aware that makes it easy to write code that violates
the Principle of Least Astonishment and can deliver results that a user
could interpret as violation of containment.

If we cannot accept
   1. No interval to interval comparisons
or
   2. Interpret comparisons as CERTAINLY,
my third choice is the interval<bool>.  When I first saw it, I was
horrified, but I've come to rather like the idea.  It has the advantage of
making boolean operators consistent with the cset interpretation for
numerical operators.  I like that design consistency.

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu


From avitzur@PacificT.com Wed Apr 26 17:28:46 2006
Received: from red.evocative.com (red.evocative.com [67.131.251.18])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3R0Sjjd016460
	for <std-interval@compgeom.poly.edu>; Wed, 26 Apr 2006 17:28:46 -0700
Received: from [192.168.1.100] (open-131-161-241-26.cliq.com [131.161.241.26])
	by red.evocative.com (8.13.4/8.12.5) with SMTP id k3R0HXbZ010162
	for <std-interval@compgeom.poly.edu>;
	Wed, 26 Apr 2006 17:17:34 -0700 (PDT)
X-Local-Message: <MX[192.168.1.100]>[192.168.1.100]
Mime-Version: 1.0
X-Sender: w1019@mail.pacifict.com
Message-Id: <p06100508c075b66ee755@[192.168.1.100]>
In-Reply-To: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
References: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
Date: Wed, 26 Apr 2006 17:11:47 -0700
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
From: Ron Avitzur <avitzur@PacificT.com>
Subject: Re: [std-interval] Interval comparison operators
Content-Type: text/plain; charset="us-ascii" ; format="flowed"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2006 00:28:46 -0000

Hello,

I use the equivalents to certainly, possibly, and interval<bool> in 
interval graphics code.  Given both the care that must be taken to 
think through the cases, and that interval methods will be novel to 
many programmers using the library, I would tend towards an API which 
preferred safety over convenience.

If a programmer constructs an STL container of intervals which uses 
operator< by default, it would be safer if that failed to compile (if 
it has the wrong signature and there is no automatic conversion to 
bool, for example), rather than if it compiled but sometimes failed 
at run-time because either operator< or the automatic conversion to 
bool threw an exception, which is not allowed to happen for 
comparisons used in standard containers.

Being able to write certainly(X < Y) makes for readable code. 
Allowing if(X < Y) to compile with some default meaning introduces 
potential for confusion and subtle run-time errors.

A tradeoff is that then examples such as this need to be written in a 
way that is less elegant.

At 6:06 PM +0200 4/26/06, Guillaume Melquiond wrote:
>         template< class T > sign_t det2(T a, T b, T c, T d) {
>           T u = a * d, v = b * c;
>           if (u < v) return negative;
>           if (u > v) return positive;
>           return zero;
>         }
>
>         sign_t good_det2(double a, double b, double c, double d) {
>           try { return det2< interval<double> >(a, b, c, d); }
>           catch(...) { return det2< exact >(a, b, c, d); }
>         }

An appropriate question here is, how often is it useful to have 
functions template <class T> f(....) were T can be either scalar or 
interval?

- Ron Avitzur


>#1  In my own interval programming work, I don't think I have ever used
>certainly/possibly operators or tri-valued logic, mostly because I have to
>think too hard.  Instead, I use <double> tests on interval endpoints, e.g.,
>lo(A) <= hi(B), and similar.  I must think carefully through all cases, but
>boolean tests work as I am familiar.  I think I am not alone in that
>practice.  I believe it leads to code that is more easily maintained by
>people with only intermediate expertise.
>
>#2  I do NOT favor making it as easy as possible for programmers to take
>legacy code, change double to interval, and expect to get anything sensible.
>
>If I ruled the world, I would have no interval to interval comparisons.  If
>I did accept them, I'd use the CERTAINLY interpretation, that is
>    X < Y is hi(X) < lo(Y)
>
>I do not want the responsibility of ruling the world, and I am certainly
>sympathetic to the argument that interval code should be as familiar as
>possible to experienced programmers of <double>, suggesting the standard
>should support interval to interval comparisons.
>
>I also favor simplicity.  If this group argues about interpretations, what
>is the plight of someone new to intervals.  Who would read the several pages
>required to specify the semantics of several alternatives?
>
>I am not sure what is the simplest solution, and I'll gladly follow further
>discussions.  At the moment, I favor providing the CERTAINLY interpretation,
>    X < Y is hi(X) < lo(Y), etc.,
>although I am painfully aware that makes it easy to write code that violates
>the Principle of Least Astonishment and can deliver results that a user
>could interpret as violation of containment.
>
>If we cannot accept
>    1. No interval to interval comparisons
>or
>    2. Interpret comparisons as CERTAINLY,
>my third choice is the interval<bool>.  When I first saw it, I was
>horrified, but I've come to rather like the idea.  It has the advantage of
>making boolean operators consistent with the cset interpretation for
>numerical operators.  I like that design consistency.
From guillaume.melquiond@ens-lyon.fr Thu Apr 27 02:05:36 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3R95Zjd017174
	for <std-interval@compgeom.poly.edu>; Thu, 27 Apr 2006 02:05:36 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 5742815B805
	for <std-interval@compgeom.poly.edu>;
	Thu, 27 Apr 2006 11:06:11 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 07024-66 for <std-interval@compgeom.poly.edu>;
	Thu, 27 Apr 2006 11:06:10 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id BE8A415B7EA
	for <std-interval@compgeom.poly.edu>;
	Thu, 27 Apr 2006 11:06:10 +0200 (CEST)
Subject: Re: [std-interval] Interval comparison operators
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <p06100508c075b66ee755@[192.168.1.100]>
References: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
	 <p06100508c075b66ee755@[192.168.1.100]>
Content-Type: text/plain; charset=ISO-8859-1
Date: Thu, 27 Apr 2006 11:05:56 +0200
Message-Id: <1146128756.3901.42.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2006 09:05:36 -0000

Le mercredi 26 avril 2006 à 17:11 -0700, Ron Avitzur a écrit :

> A tradeoff is that then examples such as this need to be written in a 
> way that is less elegant.
[...]
> An appropriate question here is, how often is it useful to have 
> functions template <class T> f(....) were T can be either scalar or 
> interval?

Not that often, I would say. Yet, whenever you are using intervals to
control roundoff errors on a scalar type, it makes sense to use the same
syntax for both the code using the scalar type and the code using the
interval type. An exception is then thrown when two computed values are
too close for being comparable due to roundoff errors.

Anyway, the default implicit conversion to bool is a concern I
understand. A solution would be to require it to be explicit, something
similar to possibly and certainly (I don't have any idea of a good name
though). It would still be possible to annotate the scalar code with
dummy identity functions so that it remains generic.

Best regards,

Guillaume

From guillaume.melquiond@ens-lyon.fr Thu Apr 27 02:06:00 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3R960jd017196
	for <std-interval@compgeom.poly.edu>; Thu, 27 Apr 2006 02:06:00 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 85CBC15B806
	for <std-interval@compgeom.poly.edu>;
	Thu, 27 Apr 2006 11:06:40 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 08104-39 for <std-interval@compgeom.poly.edu>;
	Thu, 27 Apr 2006 11:06:40 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 187D215B805
	for <std-interval@compgeom.poly.edu>;
	Thu, 27 Apr 2006 11:06:40 +0200 (CEST)
Subject: Re: [std-interval] Interval comparison operators
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
References: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1
Date: Thu, 27 Apr 2006 11:06:27 +0200
Message-Id: <1146128787.3901.44.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.4.2.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2006 09:06:00 -0000

Le mercredi 26 avril 2006 à 18:29 -0500, George Corliss a écrit :
> Friends,
> 
> My thoughts on this thread:
> 
> #1  In my own interval programming work, I don't think I have ever used
> certainly/possibly operators or tri-valued logic, mostly because I have to
> think too hard.  Instead, I use <double> tests on interval endpoints, e.g.,
> lo(A) <= hi(B), and similar.  I must think carefully through all cases, but
> boolean tests work as I am familiar.  I think I am not alone in that
> practice.  I believe it leads to code that is more easily maintained by
> people with only intermediate expertise.

I agree, but only partly. Handling bounds directly makes it look
simpler, but only as long as you are sure your intervals are not empty.
For example, "A.lower() <= B.upper()" will be undefined if one of the
intervals is empty, while "possibly(A <= B)" will return false. With
possibly empty intervals, it becomes necessary to add new tests and this
may decrease both performance and readability.

I suppose it's only a matter of habits though. People who are used to
handling bounds directly will keep handling bounds directly, while
people who are used to multi-valued logics will keep using them, and so
on. So, in a sense, the question could become: into which habits do we
want people who are new to interval arithmetic to get? Personally, I
wouldn't mind students using possibly / certainly so that they have to
think about what they really want to express rather than directly going
to lower level manipulation of bounds :-).

Best regards,

Guillaume

From george.corliss@marquette.edu Thu Apr 27 03:51:47 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3RApkjd017306
	for <std-interval@compgeom.poly.edu>; Thu, 27 Apr 2006 03:51:46 -0700
Received: from EMARQ2.marqnet.mu.edu ([134.48.20.150] RDNS failed) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 27 Apr 2006 05:52:15 -0500
Received: from 65.29.133.38 ([65.29.133.38]) by EMARQ2.marqnet.mu.edu
	([134.48.20.151]) via Exchange Front-End Server emarq.marquette.edu
	([134.48.20.166]) with Microsoft Exchange Server HTTP-DAV ;
	Thu, 27 Apr 2006 10:52:15 +0000
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Thu, 27 Apr 2006 05:52:16 -0500
Subject: Re: [std-interval] Interval comparison operators
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C0760C90.4B74%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Interval comparison operators
Thread-Index: AcZp6KWz5Het2NXbEdq86AAKlZKJfg==
In-Reply-To: <1146128787.3901.44.camel@saline>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 27 Apr 2006 10:52:15.0929 (UTC)
	FILETIME=[A5A91A90:01C669E8]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2006 10:51:47 -0000

Guillaume,

>> #1  In my own interval programming work, I don't think I have ever used
>> certainly/possibly operators or tri-valued logic, mostly because I have to
>> think too hard.  Instead, I use <double> tests on interval endpoints, e.g.,
>> lo(A) <= hi(B), and similar.  I must think carefully through all cases, but
>> boolean tests work as I am familiar.  I think I am not alone in that
>> practice.  I believe it leads to code that is more easily maintained by
>> people with only intermediate expertise.
> 
> I agree, but only partly. Handling bounds directly makes it look
> simpler, but only as long as you are sure your intervals are not empty.
Absolutely, but I probably am checking for non-empty in my algorithms
anyway.

> For example, "A.lower() <= B.upper()" will be undefined if one of the
> intervals is empty, while "possibly(A <= B)" will return false. With
> possibly empty intervals, it becomes necessary to add new tests and this
> may decrease both performance and readability.
> 
> I suppose it's only a matter of habits though. People who are used to
> handling bounds directly will keep handling bounds directly, while
> people who are used to multi-valued logics will keep using them, and so
> on. So, in a sense, the question could become: into which habits do we
> want people who are new to interval arithmetic to get? Personally, I
> wouldn't mind students using possibly / certainly so that they have to
> think about what they really want to express rather than directly going
> to lower level manipulation of bounds :-).
Good point.

Any handling I can think of adds surprises, e.g.,
(X < Y) || (X == Y) || (X > Y)
is almost surely FALSE.

Add that to the list
    a - a != 0
    a^2 != a*a
    distributive law does not hold
of surprises awaiting the unwary.  These are unavoidable consequences of the
theory, but the longer is the list of surprises, the more challenging is
adoption.

I accept that we'll end up with interval to interval comparisons.  I urge a
simple alternative, (relatively) easy to understand, in some sense.

Dr. George F. Corliss
Electrical and Computer Engineering
Marquette University
PO Box 1881 
1515 W. Wisconsin Ave.
Milwaukee WI 53201-1881 USA
414-288-6599; Fax: 288-5579; Dept. 288-6280
Office: Haggerty Engineering 296
George.Corliss@Marquette.edu


From fernando_cacciola@datafull.com Thu Apr 27 06:14:24 2006
Received: from postino14.prima.com.ar (postino14.prima.com.ar [200.42.0.187])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k3RDENjd017894
	for <std-interval@compgeom.poly.edu>; Thu, 27 Apr 2006 06:14:24 -0700
Received: (qmail 63292 invoked from network); 27 Apr 2006 13:14:53 -0000
Received: from unknown (HELO ?192.168.1.100?)
	(fernando?cacciola@ciudad.com.ar@200.122.82.9)
	by postino14.prima.com.ar with SMTP; 27 Apr 2006 13:14:53 -0000
Message-ID: <4450C431.7090608@datafull.com>
Date: Thu, 27 Apr 2006 10:16:33 -0300
From: Fernando Cacciola <fernando_cacciola@datafull.com>
User-Agent: Debian Thunderbird 1.0.2 (X11/20050331)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
References: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
	<p06100508c075b66ee755@[192.168.1.100]>
In-Reply-To: <p06100508c075b66ee755@[192.168.1.100]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: fernando_cacciola@datafull.com, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2006 13:14:24 -0000

Ron Avitzur wrote:

> Hello,
>
> If a programmer constructs an STL container of intervals which uses 
> operator< by default, it would be safer if that failed to compile (if 
> it has the wrong signature and there is no automatic conversion to 
> bool, for example), rather than if it compiled but sometimes failed at 
> run-time because either operator< or the automatic conversion to bool 
> threw an exception, which is not allowed to happen for comparisons 
> used in standard containers.
>
> Being able to write certainly(X < Y) makes for readable code. Allowing 
> if(X < Y) to compile with some default meaning introduces potential 
> for confusion and subtle run-time errors.
>
OK, you make a good point. I'm inclined to agree, but it must be noticed 
that removing the throwing conversion to bool altogether requires a new 
level of complexity in the library. Consider:

template< class T > sign_t det2(T a, T b, T c, T d) {
          T u = a * d, v = b * c;
          if (u < v ) return negative;
          if ( u > v ) return positive;
          return zero;
        }

sign_t good_det2(double a, double b, double c, double d) {
          try { return det2< interval<double> >(a, b, c, d); }
          catch(...) { return det2< exact >(a, b, c, d); }
        }

And let's imagine that there are no throwing conversions to bool (not 
even explicit for the sake of the argument).
Since there are no exceptions one should be able to, after changing 
det2() accordingly, get rid of the try block right?
But how does the "filtering" function knows that the det2() wasn't 
computed robustly without exceptions?
det2() just can't return sign_t anymore.

A solution, which is the one that CGAL uses, could be:

template< class T >
interval<sign_t> det2(T a, T b, T c, T d)
{
  T u = a * d, v = b * c;
   if (certainly(u < v) ) return negative;
   if (certainly(u > v) ) return positive;
   if (certainly(u == v) ) return zero ;
   return interval<sign_t>::empty();
}

sign_t good_det2(double a, double b, double c, double d)
{
  sign_t r = det2< interval<double> >(a, b, c, d);
  if ( is_empty(r)  )
    r = det2< exact >(a, b, c, d);
  return r ;
}

But as you can see this is more complicated: first, there has to be a 
discrete interval<E> and not just interval<bool>; second, the programmer 
must be much more explicitly aware of the trivalued logic.
For instance, if det2() is written as this it won't work correctly:

template< class T >
interval<sign_t> det2(T a, T b, T c, T d)
{
  T u = a * d, v = b * c;
   if (certainly(u < v) ) return negative;
   if (certainly(u > v) ) return positive;
   return zero ; // WRONG. It will return zero when in reality the 
intervals overlapped
}

OTOH, the presence of the throwing conversion to bool _and_ inertial<E> 
can also lead to bugs.
That is, say I love to be utterly explicit so I try to stay away from 
conversion to bool, but I write:

template< class T >
interval<sign_t> det2(T a, T b, T c, T d)
{
  T u = a * d, v = b * c;
   if (certainly(u < v) ) return negative;
   if (certainly(u > v) ) return positive;
   if (u == v ) return zero ; // HERE
   return interval<sign_t>::empty();
}

The intention is to avoid having to put det2() in a try block (that's 
the purpose of the wrapped result type), but I made a mistake: the 
conversion to bool in (u==v) will throw instead of fall thru the final 
return as was the intention.

So, without a throwing conversion to bool, the proposal must incorporate 
interval<E> for all discrete types besides bool in order to let the user 
actually get away without exceptions.

FWIW, in CGAL interval<E> is spelled uncertain<E> to make it more clear 
and it has it's own set of functions (that is, there are no arithmetic 
or comparison operators for uncertain<E>, is_empty() is spelled 
is_indeterminate(), etc...)

But this goes out of the scope of the proposal (unless you bring it into 
scope :)

Best

Fernando Cacciola


From avitzur@PacificT.com Thu Apr 27 10:33:54 2006
Received: from red.evocative.com (red.evocative.com [67.131.251.18])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3RHXrjd018201
	for <std-interval@compgeom.poly.edu>; Thu, 27 Apr 2006 10:33:54 -0700
Received: from [192.168.1.100] (open-131-161-241-26.cliq.com [131.161.241.26])
	by red.evocative.com (8.13.4/8.12.5) with SMTP id k3RHYuiR036655;
	Thu, 27 Apr 2006 10:35:07 -0700 (PDT)
X-Local-Message: <MX[192.168.1.100]>[192.168.1.100]
Mime-Version: 1.0
X-Sender: w1019@mail.pacifict.com
Message-Id: <p06100502c076a77ce809@[192.168.1.100]>
In-Reply-To: <4450C431.7090608@datafull.com>
References: <C0756C8B.4AE9%George.Corliss@Marquette.edu>
 <p06100508c075b66ee755@[192.168.1.100]> <4450C431.7090608@datafull.com>
Date: Thu, 27 Apr 2006 10:33:37 -0700
To: fernando_cacciola@datafull.com,<std-interval@compgeom.poly.edu>
From: Ron Avitzur <avitzur@PacificT.com>
Subject: Re: [std-interval] Interval comparison operators
Content-Type: text/plain; charset="us-ascii" ; format="flowed"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2006 17:33:55 -0000

>But how does the "filtering" function knows that the det2() wasn't 
>computed robustly without exceptions?
>det2() just can't return sign_t anymore.
>
>A solution, which is the one that CGAL uses, could be:
>
>template< class T >
>interval<sign_t> det2(T a, T b, T c, T d)
>{
>  T u = a * d, v = b * c;
>   if (certainly(u < v) ) return negative;
>   if (certainly(u > v) ) return positive;
>   if (certainly(u == v) ) return zero ;
>   return interval<sign_t>::empty();
>}
>So, without a throwing conversion to bool, the proposal must 
>incorporate interval<E> for all discrete types besides bool in order 
>to let the user actually get away without exceptions.

It is not clear from this example that interval<E> is required for discrete
types. All that is required is that det2 return an error, somehow. It may
throw an exception (explicitly or implicitly via an interval operator),
or it may return a separate error code in a parameter, or it may use an
enum type including {negative, positive, zero, and error}.

The question at hand is whether the interval library should throw
that exception itself. As long as one is explicitly considering the
interval cases, one could as easily write, for example:

  if (certainly(u < v) ) return negative;
  if (certainly(u > v) ) return positive;
  if (certainly(u == v) ) return zero ;
  throw (interval_comparison_exception); // or return error;

It is a tradeoff between being able to write concise code and requiring
one to write more explicitly what is intended in interval cases.

By the way, if anyone on the list would like a copy of our software
to play with (Mac or Windows), send me an e-mail privately.
  http://PacificT.com/Examples/ExampleB6.html

- Ron Avitzur

From Sylvain.Pion@sophia.inria.fr Thu Apr 27 15:32:40 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k3RMWdjd018501
	for <std-interval@compgeom.poly.edu>; Thu, 27 Apr 2006 15:32:40 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k3RMXJZB026499
	for <std-interval@compgeom.poly.edu>; Fri, 28 Apr 2006 00:33:19 +0200
Received: from [192.168.0.1] (lns-bzn-52-82-65-117-245.adsl.proxad.net
	[82.65.117.245])	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k3RMXEmF026486
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Fri, 28 Apr 2006 00:33:15 +0200
Message-ID: <445146AA.3010301@sophia.inria.fr>
Date: Fri, 28 Apr 2006 00:33:14 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
User-Agent: Thunderbird 1.5.0.2 (Macintosh/20060415)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
References: <1146067616.7160.67.camel@localhost>
In-Reply-To: <1146067616.7160.67.camel@localhost>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Fri, 28 Apr 2006
	00:33:15 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 27 Apr 2006 22:32:40 -0000

I just read the thread.  Let me add a couple of comments.

First, concerning the "tribool", or "three-valued boolean logic":
since we have empty intervals, I think it is more sensible to
introduce a type which allows to store 4 values.  I was thinking
about naming it "bool_set", whose 4 possible values would have
been: {}, {true}, {false} and {true, false}.  With the operators &,
| and ^ defined on it (with semantics compatible with the inclusion
property of intervals), and mixed operations with bool, as well
as the certainly() and possibly() functions that Guillaume described.
I am unsure about the (throwing) conversion to bool, but it's appealing.
I think such a class can have its place in the standard library,
even independently from the interval class.

Concerning expression-templates.
I think I would prefer to have the compiler know the invariant
of interval<> and perform the optimizations based on that,
rather than adding more complexity in the standard for very
little gain here.
Moreover, thanks to my second remark below, users can also
provide such "expression-templates" comparison operators
if they wish the last bit of speed if the compiler does not
provide it.

Another note concerning the conversion to bool: currently the
language provides "implicit" conversion operators, and no
"explicit" ones.  But there is a proposal to add explicit
conversion operators, and it received good support in Berlin,
IIRC.  So this might be another option.  My next remark
should make this issue less important I hope.


Second, when I presented the interval comparisons in Dagstuhl,
a few people were surprised (to say the least...) about the
fact that they existed, and the choice of semantics.  What this
shows is that it is going to be hard to have a one-fits-all
solution.  We can choose to not offer anything, but I think
it would be nicer to provide something convenient if we can.
The argument of playing nicely with template code has been
raised by Guillaume and Fernando.  Let me add that we can
also anticipate that template code will in the future be
severely impacted by the new concepts and concept_maps (*).
In our case, it means that the semantic of operator< could
be chosen thanks to such a concept_map, and need not be
universal.
So, a soft solution could be to provide various sets of
comparison operators: a "certainly", a "possibly", and a
"returning bool_set" ones.  These 3 sets being defined
inside some namespaces like std::possibly, std::certainly
and std::???.
This way, template code can use concepts_maps, and non-template
code can use "using namespace" directives to choose the
set of comparison operators it prefers.  And code which
does nothing of this kind will simply fail to compile
inadvertant calls to "<" (and people who like the low
level comparisons between interval bounds should be happy).


-- 
Sylvain

(*) Concepts: there are some proposals floating around for
introducing this new feature in the language.  I heard in Berlin
that good progress had been made and that an updated proposal will
soon be available together with a first implementation based on GCC.

Note that the standard committee is currently debating whether
library proposals should depend on new language features or not.
My point of view is that we should anticipate positively concerning
the concepts, and I think we can offer something nice which
does not depend on it, but which will benefit a lot when/if it
will be added to the language.

One of the key feature is that, when a function is parameterized
by a concept (= list of requirements), the mapping between the
requirement list and the type you instantiate the function with,
can be specified via a concept_map, which allows to "redefine"
functions.
From first.i.last@comcast.net Sat May 27 21:52:03 2006
Received: from rwcrmhc13.comcast.net (rwcrmhc13.comcast.net [204.127.192.83])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4S4q2jd023202
	for <std-interval@compgeom.poly.edu>; Sat, 27 May 2006 21:52:02 -0700
Received: from rmailcenter09.comcast.net ([204.127.197.119])
          by comcast.net (rwcrmhc13) with SMTP
          id <20060528050256m13009t09ie>; Sun, 28 May 2006 05:02:56 +0000
Received: from [71.192.84.143] by rmailcenter09.comcast.net;
	Sun, 28 May 2006 05:02:55 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
Date: Sun, 28 May 2006 05:02:55 +0000
Message-Id: <052820060502.9147.44792EFF0001125F000023BB22007614389B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="NextPart_Webmail_9m3u9jl4l_9147_1148792575_0"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 28 May 2006 04:52:03 -0000


--NextPart_Webmail_9m3u9jl4l_9147_1148792575_0
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

 -------------- Original message ----------------------
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
>  Now we are interested in what the opinions of
> other interval developers are. Should the user be allowed to
> compare intervals in C++? And if so, what should the semantic
> of these comparisons be?

The attached file contains our detailed response to the issue of comparison of intervals.  Readers interested in specifics without explanation or rationale should not read it.

George Corliss wrote:

> #1  In my own interval programming work, I don't think
> I have ever used certainly/possibly operators or
> tri-valued logic, mostly because I have to think too hard.
> Instead, I use <double> tests on interval endpoints, e.g.,
> lo(A) <= hi(B), and similar.  I must think carefully through
> all cases, but boolean tests work as I am familiar.  I think
> I am not alone in that practice.  I believe it leads to code
> that is more easily maintained by people with only
> intermediate expertise.

This is an effective endorsement of the KISS principle.  We agree that comparison operations need to be as simple, clear, and readable as possible.  We believe that expresion templates or any other specialized technique, e.g., exceptions, that is not widely used in other comparison contexts will retard the widespread use of intervals.

Devil's Advocate question: how much of your habitual resistance to the use of higher level comparisons is due to the non-portability of the various implementations?  AFAICT tests of the bounds are the only reliable cross-platform conventions, so they may be the only reasonable habits at present.

> #2  I do NOT favor making it as easy as possible for
> programmers to take legacy code, change double to
> interval, and expect to get anything sensible.

This is a properly cautionary warnng, but with respect to comparison operators, we disagree.  The warning applies to retaining point-wise algorithms instead of adopting interval algorithms.  We do not believe it applies to primitive operations.  Rather, primitive interval operations should be as similar as possible to built-in floating point operations.

Ron Avitzur wrote:

> Being able to write certainly(X < Y) makes for readable
> code. Allowing if(X < Y) to compile with some default
> meaning introduces potential for confusion and subtle
> run-time errors.

The readability issue is important.  I suspect that to a typical C++ user "if ( certainly( X < Y ) )..." looks more like a syntax error than it does readable code.  Since "if ( certainly_lt(X, Y ) )..." is approximately as readable even to a person without knowledge of the specialized expression templates that affect only intervals, it is absolutely more readable than the former.

The issue of default meaning is even more important.  The default meaning of the comparison operators has to be so simple that it is hard to get it wrong.  And it has to work everywhere, including within the STL.

Guillaume Melquiond wrote:

> Ron Avitzur a écrit :
> > An appropriate question here is, how often is it useful to have 
> > functions template <class T> f(....) were T can be either scalar
> >  or interval?

> Not that often, I would say. Yet, whenever you are using
> intervals to control roundoff errors on a scalar type, it makes
> sense to use the same syntax for both the code using the
> scalar type and the code using the interval type. An exception
> is then thrown when two computed values are too close for
> being comparable due to roundoff errors.

In order to promote compatibility with the STL we suggest the avoidance of exceptions in favor of a handler function such as Interval::indistinct() modeled on _matherr() which would be called whenever an indistinct comparison was detected.  We have used this successfully, but found the principal value concept (detailed in the attached document) to be a simpler and thus superior solution.

>>>>>>

> I suppose it's only a matter of habits though. People who
> are used to handling bounds directly will keep handling bounds
> directly, while people who are used to multi-valued logics will
> keep using them, and so on. So, in a sense, the question could
> become: into which habits do we want people who are new to
> interval arithmetic to get? Personally, I wouldn't mind students
> using possibly / certainly so that they have to think about what
> they really want to express rather than directly going to lower
> level manipulation of bounds :-).

The question of the desirable habits for new users is absolutely fundamental.  The answer to that question forms the criteria that should be used to evaluate the entire interval proposal, particularly interval comparisons.  My company has spent a great deal of effort attempting to make it easy for C++ users to incorporate intervals into their programs, but our results are will not be ready for release for some months yet.

It may be worth soliciting an opinion from the author of the Frink programming language.  He added support for interval arithmetic in the form of triplex numbers a year or so ago.  His implementation is perfectly straightforward and lacks many of the features of other interval arithmetic implementations.  But due to the simplicity of his implementation he may be able to offer useful insiight into the issue of making intervals easy to use safely.

Lee Winter


--NextPart_Webmail_9m3u9jl4l_9147_1148792575_0
Content-Type: application/x-tar; name="comparison.zip"
Content-Transfer-Encoding: base64

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

--NextPart_Webmail_9m3u9jl4l_9147_1148792575_0--
From Sylvain.Pion@sophia.inria.fr Sun May 28 02:18:29 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4S9ISjd023481
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 02:18:28 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k4S9Tavd007807
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 11:29:36 +0200
Received: from [192.168.0.1] (lns-bzn-42-82-255-119-26.adsl.proxad.net
	[82.255.119.26])	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k4S9TS1e007797
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 11:29:33 +0200
Message-ID: <44796D77.7020805@sophia.inria.fr>
Date: Sun, 28 May 2006 11:29:27 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
User-Agent: Thunderbird 1.5.0.2 (Macintosh/20060415)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
References: <052820060502.9147.44792EFF0001125F000023BB22007614389B9C0E04D207D29B9C9D0700@comcast.net>
In-Reply-To: <052820060502.9147.44792EFF0001125F000023BB22007614389B9C0E04D207D29B9C9D0700@comcast.net>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Sun, 28 May 2006
	11:29:33 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 28 May 2006 09:18:29 -0000

Dear Lee,

Before going anywhere further on technical issues, I'm surprised by
the copyright statement of your document.  It seems to imply that
quoting/copying it from the text of the standard would add the
requirement to add your copyright notice to it.
I let you imagine what would happen if everybody did that for such
minor points.

If this is the case, then I'm not even willing to read it and take
any risk.

-- 
Sylvain
From first.i.last@comcast.net Sun May 28 06:22:38 2006
Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [216.148.227.151])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4SDMcjd031653
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 06:22:38 -0700
Received: from rmailcenter76.comcast.net ([204.127.197.158])
          by comcast.net (rwcrmhc11) with SMTP
          id <20060528133349m1100k3cnpe>; Sun, 28 May 2006 13:33:49 +0000
Received: from [71.192.84.143] by rmailcenter76.comcast.net;
	Sun, 28 May 2006 13:33:48 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>,<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
Date: Sun, 28 May 2006 13:33:48 +0000
Message-Id: <052820061333.20312.4479A6BC0003D80A00004F5822064244139B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 28 May 2006 13:22:38 -0000

 -------------- Original message ----------------------
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
> Dear Lee,
> 
> Before going anywhere further on technical issues, I'm surprised by
> the copyright statement of your document.  It seems to imply that
> quoting/copying it from the text of the standard would add the
> requirement to add your copyright notice to it.

That is not the intent.  When the interval  proposal is adopted or our implementation is released to the public our interest inconfidentiality expires.  Until one of those events occurs public dissemination of our documentation is premature, so we hope to limit it.

We have no interest in affecting the text of the standard, nor would we claim rights on the text of the standard nor anything published with it.

> I let you imagine what would happen if everybody did that for such
> minor points.

It would be a silly situation.

> 
> If this is the case, then I'm not even willing to read it and take
> any risk.

I understand.

In the interest of supporting the proposal we are willing to make a limited disclosure.  If the only acceptable support is public disclosure, then we cannot comply for some months yet.

-- Lee Winter
From guillaume.melquiond@ens-lyon.fr Sun May 28 06:50:23 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4SDoNjd031680
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 06:50:23 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id F102415B861
	for <std-interval@compgeom.poly.edu>;
	Sun, 28 May 2006 16:01:47 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 15947-97 for <std-interval@compgeom.poly.edu>;
	Sun, 28 May 2006 16:01:45 +0200 (CEST)
Received: from vpn-user-204-67.ens-lyon.fr (vpn-user-204-67.ens-lyon.fr
	[140.77.204.67])	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 294A115B851
	for <std-interval@compgeom.poly.edu>;
	Sun, 28 May 2006 16:01:45 +0200 (CEST)
Subject: Re: [std-interval] Interval comparison operators
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <052820060502.9147.44792EFF0001125F000023BB22007614389B9C0E04D207D29B9C9D0700@comcast.net>
References: 
	<052820060502.9147.44792EFF0001125F000023BB22007614389B9C0E04D207D29B9C9D0700@comcast.net>
Content-Type: text/plain; charset=ISO-8859-1
Date: Sun, 28 May 2006 15:59:49 +0200
Message-Id: <1148824789.7149.89.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 28 May 2006 13:50:23 -0000

Le dimanche 28 mai 2006 à 05:02 +0000, first.i.last@comcast.net a
écrit :
> >  Now we are interested in what the opinions of
> > other interval developers are. Should the user be allowed to
> > compare intervals in C++? And if so, what should the semantic
> > of these comparisons be?
> 
> The attached file contains our detailed response to the issue of
> comparison of intervals.  Readers interested in specifics without
> explanation or rationale should not read it.

I have taken a quick look at your document and I have a few questions.

First, I'm a bit confused. You are speaking of "subsets of the machine
number line" while the proposal is clearly aimed at representing
(convex) subsets of the real number line. I hope this was only an
oversight.

I do not understand what you mean by "Present day STL experts may be
mislead by the set-based description of intervals, but would not be
confused by a line-segment-based description of intervals". According to
the previous paragraph of your document, I thought this was supposed to
be the exact same notion. Also how would it achieve not to confuse them?
STL comparison operators are lexicographic total ordering while your
line-segment comparison operators are inclusion partial ordering (or
perhaps they aren't?). Later you also say that "they are also fully
compatible with the STL". This does not strike me as obvious since STL
algorithms usually require this property to hold: !(x < y) && !(y < x)
implies that x and y are equivalent.

Concerning your neighborhood model, I disagree. You are saying that "the
certain and possible comparison functions are based on this model". But
somebody performing global optimization or value-range propagation will
use them, while the intervals are nothing like a neighborhood. So
certain and possible comparisons should not be associated to a "point
model" in my opinion.

Do you have some bibliographic references for the principal value model?
This looks like a center-radius model of intervals, but this isn't it,
so I'm a bit lost. For now, I will just ask how different is the "loose"
comparaison from the "possible" comparison. Since the "loose" comparison
is using "the implicit epsilon provided by the radius of the actual
intervals", it seems to me the results will always be the same. Also you
are saying this model appeals to a "much wider audience"; could you give
some examples where it is used?

Later, you say that "empty interval arguments should always yield
false". This statement contradicts your line-segment model, since the
empty set is included in every set. It also goes against your
neighborhood model, since the classical interpretation is: if something
is not possible, then its contrary is certain (and reciprocally).

Your overload of the shift operators looks like a nice idea to me.

Finally, you are proposing that the interval operators compare their
midpoint. This kind of goes against the whole point of providing
interval arithmetic so that people can do certified computations. So I
am a bit reluctant to consider your proposal.

Best regards,

Guillaume

From first.i.last@comcast.net Sun May 28 09:44:31 2006
Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [216.148.227.151])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4SGiUjd031860
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 09:44:30 -0700
Received: from rmailcenter09.comcast.net ([204.127.197.119])
          by comcast.net (rwcrmhc11) with SMTP
          id <20060528165544m1100k1j97e>; Sun, 28 May 2006 16:55:44 +0000
Received: from [71.192.84.143] by rmailcenter09.comcast.net;
	Sun, 28 May 2006 16:55:44 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
Date: Sun, 28 May 2006 16:55:44 +0000
Message-Id: <052820061655.28452.4479D60F000C6D2100006F2422007614389B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 28 May 2006 16:44:31 -0000

 -------------- Original message ----------------------
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> Le dimanche 28 mai 2006 à 05:02 +0000, first.i.last@comcast.net a
> écrit :
> > >  Now we are interested in what the opinions of
> > > other interval developers are. Should the user be allowed to
> > > compare intervals in C++? And if so, what should the semantic
> > > of these comparisons be?
> > 
> > The attached file contains our detailed response to the issue of
> > comparison of intervals.  Readers interested in specifics without
> > explanation or rationale should not read it.
> 
> I have taken a quick look at your document and I have a
> few questions.
> 
> First, I'm a bit confused. You are speaking of "subsets of the
> machine number line" while the proposal is clearly aimed at
> representing (convex) subsets of the real number line. I hope
> this was only an oversight.

It was not an oversight.  It may have been a poor chioce of adjective in the document and a copy/paste omission on your part.  In fact it says "CONTIGUOUS subsets of the machine number line"[emphsis added].   Perhaps it should have said convex rather than contiguous.  In this context I think they mean the same thing (denotation) except that the term contiguous suggests (connotation) continuity, which is a fundamental property that line segments and typical intervals do have, but that sets in general do not have.

> 
> I do not understand what you mean by "Present day STL
> experts may be mislead by the set-based description of
> intervals, but would not be confused by a line-segment-
> based description of intervals". According to the previous
> paragraph of your document, I thought this was supposed
> to be the exact same notion. Also how would it achieve
> not to confuse them?

The set and segment implementations are identical.  It is the method of describing them that is different.  IMHO the term segment is better than the term set precisely because it indicates a fundamental property of typical intervals -- convexity.

Describing intervals as containing sets would suggest to an STL expert that they can hold any subset, which suggestion is false and thus misleading.  Describing intervals as containing line segments would suggest that they can only hold convex/contiguous subsets, which is accurate and thus not misleading.

> Later you also say that "they are also fully compatible with
> the STL". This does not strike me as obvious since STL
> algorithms usually require this property to hold:
> !(x < y) && !(y < x) implies that x and y are equivalent.

The sentence following the fragment you quoted states that they lack general applicability because they are often too strict.  In those two sentences I meant that they meet the general requirements, but aren't always useful because they may fail specific requirements such as the one you stated above about deducible equivalance.

> 
> Concerning your neighborhood model, I disagree. You are
> saying that "the certain and possible comparison functions
> are based on this model". But somebody performing global
> optimization or value-range propagation will use them, while
> the intervals are nothing like a neighborhood.  So certain and
> possible comparisons should not be associated to a "point
> model" in my opinion.

The sticking point here appears to be that "intervals are nothing like a 
neighborhood".  If they are not, what are they like?  I.e., what conceptual model do you believe the certain/possible comparisons to be based upon?  Note that the conceptual models are not used to describe to high levels of the software such as functions, algorithms, programs, or applications.  They are only useful to describe the rationale for having multiple sets of comparisons.  So they are properly applied only to distinguish the kinds of low-level 
operations available.

But we have a fundamental disagreement.  The reason certain and possible comparisons are characterized as based upon points is that the results of the comparisons desribe the presence or absence of points. Possible comparisons indicate that there exists some point in each object that satisfies the relation in question.  Certain comparisons indicate that there is one (and only one) point that satisfies the relation in question (except of course for cne() which 
indicates that there is no point that satisfies the relation).

> 
> Do you have some bibliographic references for the principal value model?

Not yet.  That is one of the reasons why it says that it would be understandable if they are not part of the standard.  The reasons for mentioning them at all is that it may benefit the team making the proposal to the committee to be aware that there is on-going research and development in this area.  It may be that there should be no operator notation for comparison until the various candidates have been evaluated in the field.  The candidates that have been suggested include set/segment, certainty, and principal value.

> This looks like a center-radius model of intervals, but this
> isn't it, so I'm a bit lost. For now, I will just ask how different
> is the "loose" comparaison from the "possible" comparison.
> Since the "loose" comparison is using "the implicit epsilon
> provided by the radius of the actual intervals", it seems to
> me the results will always be the same.

The results will not be the same.  The auithoritative definitions of the principal value comparisons can be found in Knuth, D.E. /The art of computer programming/ (vol II).  A brief description of its usage and utility can be found in the beginning of: <http://www.boost.org/libs/test/doc/components/     
test_tools/floating_point_comparison.html>

The difference between loose and possible is that peq() is true whenever one of the intervals overlaps any portion of the other, but leq() is true only whenever one of the intervals overlaps the center of the other.

> Also you are saying this model appeals to a "much wider
> audience"; could you give some examples where it is used?

At present it is not used AFAIK.  But one of the claims is that the PV model makes intervals suitable for direct replacement of built-in floating point types (in the sense of the Liskov substitution principle).   If that claim is valid then the PV model makes intervals appeal to every C++ programmer who uses built-in floating point types.

> Later, you say that "empty interval arguments should always
> yield false". This statement contradicts your line-segment
> model, since the empty set is included in every set.

What is the contradiction?  Equivalence and ordering comparisons do not deal with subsets.  The functions in() and contains() should affirm that an empty interval is included in every other interval.  But the empty interval is neither less then nor more than any other interval.  And given the the empty interval is not part of the machine number line one can claim that it is Not an Interval (NaI).  So, just as NaN is not equal to any other floating point value, not even an identical NaN, NaI should not be equal to any other interval, not even an identical NaI.

In fact this conflict illustrates some of the problems caused by the interval-as-set terminology.  It suggests that an empty interval is an empty set, and so seq(empty,empty) should return true.  But the interval-as-segment terminology suggests that an empty interval is not a segment.  (Nor is it a point.  The width is not zero, it is NaN).
So based upon the interval-as-segment terminology seq(empty,empty) should return false.

Is there a case to be made that empty intervals are less than or greater then non-empty intervals?

> It also goes against your neighborhood model, since the
> classical interpretation is: if something is not possible,
> then its contrary is certain (and reciprocally).

The classical interpretation fails anytime a NaN is encountered because they are not part of the number line.  Similarly empty intervals are not intervals (they need have no sensible bounds nor center/radius).  Moreover the classical interpretation cannot be applied to intervals at all because there are more relationships amoung intervals than there are among points on the machine number line.

> Finally, you are proposing that the interval operators compare their
> midpoint. This kind of goes against the whole point of providing
> interval arithmetic so that people can do certified computations.

The reason the conceptual models are worth discussing is that there is no single model for interval usage.  There can be a single model for the computation of interval values (i.e., outward rounding), but there cannot be a single model for interval applications.  C++ is often mentioned as a multi-paradigm language.  If conceptual models are paradigms then there are definitely multiple interval paradigms.

This is only a problem when one must choose a single paradigm to use in a linguistic feature such as operator notation.  The problme is that one must choose zero or one paradigm.  But selecting a single conceptual model for comparison operators does not "go against" the other models.  They still exist and are exactly as useful as they were prior to the selection.

In fact several accomplished users of intervals have written
that they prefer explicit bounds tests rather than comparison functions.  From this one can deduce that they can do certified computations without comparison functions, which certainly implies that they can do without an operator notation for those functions.

The point of operator notation is to make it easier to express simple concepts.  It may be that there is no simple concept related to intervals, in which case there should be no operator notation for comparison of intervals.

But there is an opposing viewpoint.  When adding up a column of figures, say measurements taken during an experiment, one might want to know how accurate the total was.  Adding up intervals constructed from the measurements and their associated errors makes it trivial to find the error for the total of the measurements.  So the utility of intervals for common-place calculcations is extremely high.  One need not be doing a global optimization to prefer intervals over built-in types.

Comparison operators are quite useful in common-place calculations, and they can be used quite naturally without danger of misleading the programmer.  For example given the need to sort some numbers the precise details of the sort mechanism are probably irrelevant.  The only universal concern is that the result of the sort operation be reasonably reproducible (e.g., swapping of identical items is usually well tolerated).  Comparison of principal values meets that need for simple and reasonably reproducible results.  None of the other conceptual models can meet that need.

> So I am a bit reluctant to consider your proposal.

I quite understand.  If you believe that the inclusion of PV comparisons would inhibit the development of certified computations you should definitely not add them to your standardization proposal.

-- Lee Winter
From guillaume.melquiond@ens-lyon.fr Sun May 28 11:02:35 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4SI2Yjd032011
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 11:02:35 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 2ACB215B71C
	for <std-interval@compgeom.poly.edu>;
	Sun, 28 May 2006 20:14:01 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 07197-79 for <std-interval@compgeom.poly.edu>;
	Sun, 28 May 2006 20:14:00 +0200 (CEST)
Received: from vpn-user-204-67.ens-lyon.fr (vpn-user-204-67.ens-lyon.fr
	[140.77.204.67])	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 215F215B70E
	for <std-interval@compgeom.poly.edu>;
	Sun, 28 May 2006 20:13:59 +0200 (CEST)
Subject: Re: [std-interval] Interval comparison operators
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <052820061655.28452.4479D60F000C6D2100006F2422007614389B9C0E04D207D29B9C9D0700@comcast.net>
References: 
	<052820061655.28452.4479D60F000C6D2100006F2422007614389B9C0E04D207D29B9C9D0700@comcast.net>
Content-Type: text/plain; charset=ISO-8859-1
Date: Sun, 28 May 2006 20:10:11 +0200
Message-Id: <1148839811.8327.56.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 28 May 2006 18:02:35 -0000

Le dimanche 28 mai 2006 à 16:55 +0000, first.i.last@comcast.net a
écrit :

> > First, I'm a bit confused. You are speaking of "subsets of the
> > machine number line" while the proposal is clearly aimed at
> > representing (convex) subsets of the real number line. I hope
> > this was only an oversight.
> 
> It was not an oversight.  It may have been a poor chioce of adjective
> in the document and a copy/paste omission on your part.  In fact it
> says "CONTIGUOUS subsets of the machine number line"[emphsis added].
> Perhaps it should have said convex rather than contiguous.  In this
> context I think they mean the same thing (denotation) except that the
> term contiguous suggests (connotation) continuity, which is a
> fundamental property that line segments and typical intervals do have,
> but that sets in general do not have.

Then I need to stress again that our proposal deals with intervals of
the _real_ number line. The machine number line is a discrete set of
values with its own arithmetic operators. An interval arithmetic can be
built on it, but this is not the one described in our proposal, while
the Boost interval library would support it for example (this interval
arithmetic is especially useful to statically certify the behavior of
floating-point applications).

[...]

> > Concerning your neighborhood model, I disagree. You are
> > saying that "the certain and possible comparison functions
> > are based on this model". But somebody performing global
> > optimization or value-range propagation will use them, while
> > the intervals are nothing like a neighborhood.  So certain and
> > possible comparisons should not be associated to a "point
> > model" in my opinion.
> 
> The sticking point here appears to be that "intervals are nothing like
> a neighborhood".  If they are not, what are they like?  I.e., what
> conceptual model do you believe the certain/possible comparisons to be
> based upon?

The natural interval extension of the comparison operators between real
numbers are comparison operators between intervals that return a value
in interval<bool> (which also happens to be the powerset of bool).
Certain and possible comparisons are two kind of maps from the powerset
of bool to bool. There is no need to speak of models, this is just a
reasonable way of constraining interval operators to a bool result.

[...]

> > Later, you say that "empty interval arguments should always
> > yield false". This statement contradicts your line-segment
> > model, since the empty set is included in every set.
> 
> What is the contradiction?  Equivalence and ordering comparisons do
> not deal with subsets.  The functions in() and contains() should
> affirm that an empty interval is included in every other interval.
> But the empty interval is neither less then nor more than any other
> interval.

It seems I didn't understand what your line-segment model is. I thought
its comparison operators were based on the set inclusion relation (hence
the functions slt, sle, and so on, as they are named in a few interval
arithmetic libraries, Sun's one for example).

> And given the the empty interval is not part of the machine number
> line one can claim that it is Not an Interval (NaI).  So, just as NaN
> is not equal to any other floating point value, not even an identical
> NaN, NaI should not be equal to any other interval, not even an
> identical NaI.

The empty interval _is_ an interval. It is not unreasonable to add a NaI
value in the same way there is a NaN floating-point value, but this does
not mean there is no empty interval. Would you forbid intersecting two
intervals that do not overlap?

> > It also goes against your neighborhood model, since the
> > classical interpretation is: if something is not possible,
> > then its contrary is certain (and reciprocally).
> 
> The classical interpretation fails anytime a NaN is encountered
> because they are not part of the number line.  Similarly empty
> intervals are not intervals (they need have no sensible bounds nor
> center/radius).  Moreover the classical interpretation cannot be
> applied to intervals at all because there are more relationships
> amoung intervals than there are among points on the machine number
> line.

NaN are not real numbers, they are never encountered in common
arithmetic on real numbers. Our proposal is about convex subsets of the
real numbers, not about convex subsets of machine numbers. I meant
classical interpretation to refer to computer science fields where the
"certain" and "possible" words are commonly used: probability
computations, fuzzy logic, and so on.

[...]

> But there is an opposing viewpoint.  When adding up a column of
> figures, say measurements taken during an experiment, one might want
> to know how accurate the total was.  Adding up intervals constructed
> from the measurements and their associated errors makes it trivial to
> find the error for the total of the measurements.  So the utility of
> intervals for common-place calculations is extremely high.  One need
> not be doing a global optimization to prefer intervals over built-in
> types.

How will it help to have comparison operators do midpoint comparisons on
this example?

[...]

Best regards,

Guillaume


From Sylvain.Pion@sophia.inria.fr Sun May 28 12:33:04 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4SJX3jd032137
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 12:33:03 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k4SJiKi6003624
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 21:44:20 +0200
Received: from [192.168.0.1] (lns-bzn-43-82-249-191-158.adsl.proxad.net
	[82.249.191.158])	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k4SJiFgn003597
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Sun, 28 May 2006 21:44:18 +0200
Message-ID: <4479FD8E.7070407@sophia.inria.fr>
Date: Sun, 28 May 2006 21:44:14 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
User-Agent: Thunderbird 1.5.0.2 (Macintosh/20060415)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Sun, 28 May 2006
	21:44:18 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
Subject: [std-interval] list of functions for intervals
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 28 May 2006 19:33:04 -0000

Dear all,

We have been thinking about the list of floating-point functions
which we could propose an interval version for.
More precisely, we have looked at the current list of floating-point
functions from the latest draft of C++0x
(http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2006/n2009.pdf).

As a starting point, here is the list of functions coming from
<cmath> which operate over floating-point types (page 794):

abs       cosh   fmod     logb       rint
acos      erf    frexp    lrint      round
acosh     erfc   hypot    lround     scalbln
asin      exp    ilogb    modf       scalbn
asinh     exp2   ldexp    nan        sin
atan      expm1  lgamma   nearbyint  sinh
atan2     fabs   llrint   nextafter  sqrt
atanh     fdim   llround  nexttoward tan
cbrt      floor  log      pow        tanh
ceil      fma    log10    remainder  tgamma
copysign  fmax   log1p    remquo     trunc
cos       fmin   log2
fpclassify  isgreaterequal  islessequal    isnan     isunordered
isfinite    isinf           islessgreater  isnormal  signbit
isgreater   isless

A description of those functions can be found in the following
almost-final draft of the ISO C99 standard:
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n869/n869.pdf.gz


We suggest to select the following functions for std::interval<T>:
abs       cosh     logb
acos
acosh     hypot    scalbln
asin      exp      scalbn
asinh     exp2     ldexp      sin
atan      expm1    sinh       cos
atan2     fabs     sqrt
atanh     fdim     tan
cbrt      log      pow        tanh
fma       log10    log2
fmin      fmax     log1p
erf       erfc     lgamma     tgamma


Notes:
- fmin, fmax : we propose to return interval<T>, while we could
   return double (the lower or upper bound), but we choose the
   consistency with the treatment done to other functions, and
   it is easy to extract the lower/upper bound of the resulting
   interval anyway.
- erf, erfc, lgamma, tgamma: we are not sure if interval versions
   of these functions would be useful.
- atan2, acos, asin: the range of the result interval should
   probably be specified differently than for floating-point
   (where it must be in [-pi,+pi] for atan2 for example).


We therefore propose to exclude the following functions,
for the following reasons:
- fmod, remainder, remquo : we do not see them useful for intervals.
   We did not find any good specification for interval counterparts.
- frexp, ilogb : because they would have to return an interval<int>,
   (or refer to it for ilogb) and they are probably not useful.
- copysign : no good specification found for intervals.
- rint, lrint, llrint, nearbyint, round, lround, llround, trunc,
   modf, floor, ceil:
   we believe that there is no typical use for intervals.
   It is however probably easy to define and implement them over
   intervals.
   In general, functions relating to Z (integers) probably do not make
   much sense for intervals, as intervals are expected to be used in a
   more numerical context.
- nan : does not make sense.
- nextafter, nexttoward : if an interval needs to be enlarged by
   one ulp (or more), then one can simply add interval<T>::min()
   (the smallest interval strictly containing 0 but not as bounds).
- fpclassify  isgreaterequal  islessequal    isnan     isunordered
   isfinite    isinf           islessgreater  isnormal  signbit
   isgreater   isless :
   do not make sense for intervals, as the treatment of NaNs,
   comparisons, infinities is different from what floating-point
   types do.



What do you think of these lists ?
Is something important excluded ?
Is there anything that should be excluded ?

Note that existing implementations do not necessarily offer all
proposed functions, so any comment on the implementation
difficulty (for interval<float>, interval<double> and
interval<long double>) would be appreciated.


-- 
Sylvain
From george.corliss@marquette.edu Mon May 29 11:05:12 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4TI5Bjd003589
	for <std-interval@compgeom.poly.edu>; Mon, 29 May 2006 11:05:12 -0700
Received: from its-exfe3.marqnet.mu.edu ([134.48.20.166]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Mon, 29 May 2006 13:16:47 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe3.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Mon, 29 May 2006 13:16:45 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Mon, 29 May 2006 13:16:39 -0500
Subject: Re: [std-interval] Interval comparison operators
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C0A0A4B7.57F%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Interval comparison operators
Thread-Index: AcaDTAdORbUrdu8/Edq5pQAKlZKJfg==
In-Reply-To: <052820060502.9147.44792EFF0001125F000023BB22007614389B9C0E04D207D29B9C9D0700@comcast.net>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 29 May 2006 18:16:45.0650 (UTC)
	FILETIME=[0B459320:01C6834C]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 29 May 2006 18:05:12 -0000

All,

Warning: Rather long.  My comments are interspersed for the entire thread to
date.


On 5/28/06 12:02 AM, "first.i.last@comcast.net" <first.i.last@comcast.net>
wrote:

>  -------------- Original message ----------------------
> From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
>>  Now we are interested in what the opinions of
>> other interval developers are. Should the user be allowed to
>> compare intervals in C++? And if so, what should the semantic
>> of these comparisons be?
> 
> The attached file contains our detailed response to the issue of comparison of
> intervals.  Readers interested in specifics without explanation or rationale
> should not read it.

Some reactions ...

Copyright: Since I intend to quote portions of your document, I assert that
the quoted portions are subject to: "Permission is hereby granted to
distribute this document to all past, present, and future members of the
mailing list <std-interval@compgeom.poly.edu>; all past, present, and future
members of the team proposing the adoption of intervals into the C++
language; and all past, present, and future members of the C++ Standards
Committee and staff thereof.  Any such reproduction, distribution, or
copying of this document must include the above copyright statement and this
permission paragraph.  All other reproduction, distribution, or copying of
this document requires specific, written permission of the copyright
holder."

Personally, find find the requirement to include that slightly cumbersome.
However, I consider it a STRONG endorsement to the C++ committee of the
interest in an interval standard that your firm cares enough about intervals
to be that protective.  Hence, I joyfully comply with your copyright notice
(I hope).


Good analysis.  Well-thought out.  Thank you for the effort.


"... it is probably worth the effort to get as much as possible as right as
possible so long as it does not inhibit the timely adoption of the interval
proposal."

I'd even allow a modest delay in adoption, if we can develop a consensus on
what "right" is.


Principal Value Model: Hmmm.  Very interesting.  The purist side of me is
appalled; the engineering side of me applauds.  I agree that it can be a
stepping-stone.  I fear that it allows the less-than-careful programmer to
violate containment, which I consider the touch-stone of interval
algorithms.  I'd have to try it out in a non-trivial application to see
which side is stronger.


"Empty interval arguments should always yield false." and following.
Then you are including "I don't know" with FALSE?  Or TRUE means, "I am sure
this is true," and FALSE means, "I cannot assert TRUE."  I can live with
that, but I assert that is not the common understanding of FALSE.

I prefer exception-free (or exception-nearly-free) execution, too, but I
think you lose valuable information to lump "I don't know" with FALSE.
Tough issue.  I'll be interested to see whether we approach consensus.


"If improper intervals are not considered empty then improper intervals
should also always return false."
By "improper interval." do you mean semi-infinite, e.g., [1, inf]?  If so,
then shouldn't some of the 'possible' operators be able to return TRUE in
certain cases?


Standard Terminology:  Your proposal makes sense to me.



> George Corliss wrote:
> 
>> #1  In my own interval programming work, I don't think
>> I have ever used certainly/possibly operators or
>> tri-valued logic, mostly because I have to think too hard.
>> Instead, I use <double> tests on interval endpoints, e.g.,
>> lo(A) <= hi(B), and similar.  I must think carefully through
>> all cases, but boolean tests work as I am familiar.  I think
>> I am not alone in that practice.  I believe it leads to code
>> that is more easily maintained by people with only
>> intermediate expertise.
> 
> This is an effective endorsement of the KISS principle.  We agree that
> comparison operations need to be as simple, clear, and readable as possible.
> We believe that expresion templates or any other specialized technique, e.g.,
> exceptions, that is not widely used in other comparison contexts will retard
> the widespread use of intervals.
> 
> Devil's Advocate question: how much of your habitual resistance to the use of
> higher level comparisons is due to the non-portability of the various
> implementations?  AFAICT tests of the bounds are the only reliable
> cross-platform conventions, so they may be the only reasonable habits at
> present.
Answer to DA: None.  Even comparing endpoints has slightly different syntax
in different packages.

I'm an old Fortran programmer (in any of several parsing alternatives).  My
habits were formed long ago, when I wrote several of my own packages,
thinking they were for my own use, unconstrained by the practices of others.
Comparing endpoints gave me all the tools I ever needed.  In retrospect, I
think that habit encouraged me to think carefully through sometimes
exhaustive cases.  My codes are full of segments including character
graphics suggesting various cases of endpoint comparisons.
   //    [===========]
   //              [========>>>
I think at least I understand what I am doing.

I do not oppose more sophisticated comparisons as you propose.  However, I
am likely to advise non-experts to save themselves the effort of
understanding interval comparisons by restricting themselves to endpoint
comparisons until such time as they feel stifled.  But that's a question of
habit, as you suggest below.


>> #2  I do NOT favor making it as easy as possible for
>> programmers to take legacy code, change double to
>> interval, and expect to get anything sensible.
> 
> This is a properly cautionary warnng, but with respect to comparison
> operators, we disagree.  The warning applies to retaining point-wise
> algorithms instead of adopting interval algorithms.  We do not believe it
> applies to primitive operations.  Rather, primitive interval operations should
> be as similar as possible to built-in floating point operations.
The question, "Is A < B?" is different for floating point numbers A & B and
for intervals A & B.  As evidence of that assertion, I submit your document,
at least 25 years discussion in the interval community, and the fact that so
many variants exist.

Having primitive interval operators that LOOK like primitive floating-point
operators, but have different semantics OR that potentially violate
containment requires careful consideration.

If the floating-point and the interval question are different, ANY syntax
for posing the question is potentially confusing.  That is why I asserted
above I'd even accept a modest delay in adoption, if we can develop a
consensus on what "right" is.

That said, your proposal is a good step in that direction.  When I say
"potentially violate containment," I agree that your comparisons, used as
you intend, are (probably) safe.  My fear is that they may be easy to
miss-use.  I fear WAY too many examples of people writing code with
violations of containment and blaming us, rather than themselves.  I want to
make if hard to violate containment, even by miss-informed programmers.


> Ron Avitzur wrote:
> 
>> Being able to write certainly(X < Y) makes for readable
>> code. Allowing if(X < Y) to compile with some default
>> meaning introduces potential for confusion and subtle
>> run-time errors.
> 
> The readability issue is important.  I suspect that to a typical C++ user "if
> ( certainly( X < Y ) )..." looks more like a syntax error than it does
> readable code.  Since "if ( certainly_lt(X, Y ) )..." is approximately as
> readable even to a person without knowledge of the specialized expression
> templates that affect only intervals, it is absolutely more readable than the
> former.
> 
> The issue of default meaning is even more important.  The default meaning of
> the comparison operators has to be so simple that it is hard to get it wrong.
> And it has to work everywhere, including within the STL.
We are in violent agreement there!



>> I suppose it's only a matter of habits though. People who
>> are used to handling bounds directly will keep handling bounds
>> directly, while people who are used to multi-valued logics will
>> keep using them, and so on. So, in a sense, the question could
>> become: into which habits do we want people who are new to
>> interval arithmetic to get? Personally, I wouldn't mind students
>> using possibly / certainly so that they have to think about what
>> they really want to express rather than directly going to lower
>> level manipulation of bounds :-).
I agree it is a matter of habit, where we each see the rationale for OUR
habit.  Hence, it is wise to support multiple habits, UNLESS there is a
large complexity cost.

> The question of the desirable habits for new users is absolutely fundamental.
Agreed.

> The answer to that question forms the criteria that should be used to evaluate
> the entire interval proposal, particularly interval comparisons.  My company
> has spent a great deal of effort attempting to make it easy for C++ users to
> incorporate intervals into their programs, but our results are will not be
> ready for release for some months yet.
Wonderful.  You may not wish to say, but if you did sound usability testing
and can (eventually) publish your results for peer review, any reservations
I have for your proposal would disappear.

> It may be worth soliciting an opinion from the author of the Frink programming
> language.  He added support for interval arithmetic in the form of triplex
> numbers a year or so ago.  His implementation is perfectly straightforward and
> lacks many of the features of other interval arithmetic implementations.  But
> due to the simplicity of his implementation he may be able to offer useful
> insiight into the issue of making intervals easy to use safely.
Good suggestion.  Have you approached him?  If not, may I or someone else
use your message and your "Comparison of Intervals in C++" to approach him?



Lee Winter responds to response from Guillaume Melquiond:
>> I have taken a quick look at your document and I have a
>> few questions.
>> 
. . .

>> 
>> I do not understand what you mean by "Present day STL
>> experts may be mislead by the set-based description of
>> intervals, but would not be confused by a line-segment-
>> based description of intervals". According to the previous
>> paragraph of your document, I thought this was supposed
>> to be the exact same notion. Also how would it achieve
>> not to confuse them?
> 
> The set and segment implementations are identical.  It is the method of
> describing them that is different.  IMHO the term segment is better than the
> term set precisely because it indicates a fundamental property of typical
> intervals -- convexity.
> 
> Describing intervals as containing sets would suggest to an STL expert that
> they can hold any subset, which suggestion is false and thus misleading.
> Describing intervals as containing line segments would suggest that they can
> only hold convex/contiguous subsets, which is accurate and thus not
> misleading.
And talking about line segments might deflect the scorn of constructivists
who do not believe in set theory :-)

Do we all implicitly assume CLOSED line segments, with the possible
exception of semi-infinite [a, infinity)?  If whole is an interval, it is
closed, isn't it, because its complement is open (and closed)?  Then is the
semi-infinite line segment [a, infinity] closed because its complement
[-infinity, a) is open?

>> Later you also say that "they are also fully compatible with
>> the STL". This does not strike me as obvious since STL
>> algorithms usually require this property to hold:
>> !(x < y) && !(y < x) implies that x and y are equivalent.
> 
> The sentence following the fragment you quoted states that they lack general
> applicability because they are often too strict.  In those two sentences I
> meant that they meet the general requirements, but aren't always useful
> because they may fail specific requirements such as the one you stated above
> about deducible equivalence.
This example illustrates my point above that the questions are different for
floating-point and for intervals.  We are making progress, but we have not
yet converged on a consistent view of how to reconcile the differences.


>> Concerning your neighborhood model, I disagree. You are
>> saying that "the certain and possible comparison functions
>> are based on this model". But somebody performing global
>> optimization or value-range propagation will use them, while
>> the intervals are nothing like a neighborhood.  So certain and
>> possible comparisons should not be associated to a "point
>> model" in my opinion.
> 
> The sticking point here appears to be that "intervals are nothing like a
> neighborhood".  If they are not, what are they like?  I.e., what conceptual
> model do you believe the certain/possible comparisons to be based upon?  Note
> that the conceptual models are not used to describe to high levels of the
> software such as functions, algorithms, programs, or applications.  They are
> only useful to describe the rationale for having multiple sets of comparisons.
> So they are properly applied only to distinguish the kinds of low-level
> operations available.
Are neighborhoods open or closed line segments?

The AGREEMENT here is that a model is necessary to underlie the
specifications.

> But we have a fundamental disagreement.  The reason certain and possible
> comparisons are characterized as based upon points is that the results of the
> comparisons describe the presence or absence of points. Possible comparisons
> indicate that there exists some point in each object that satisfies the
> relation in question.  Certain comparisons indicate that there is one (and
> only one) point that satisfies the relation in question (except of course for
> cne() which 
> indicates that there is no point that satisfies the relation).
> 
>> 
>> Do you have some bibliographic references for the principal value model?
> 
> Not yet.  That is one of the reasons why it says that it would be
> understandable if they are not part of the standard.  The reasons for
> mentioning them at all is that it may benefit the team making the proposal to
> the committee to be aware that there is on-going research and development in
> this area.  It may be that there should be no operator notation for comparison
> until the various candidates have been evaluated in the field.  The candidates
> that have been suggested include set/segment, certainty, and principal value.
Have you plans to submit something for peer reviewed publication?  Or does
that await your commercial release?  I suspect several likely referees are
reading these discussions.

In my opinion, not-yet-published views deserve consideration, but
consideration more careful than published concepts.  I suspect the level of
community oversight may be higher in this forum than in many review
processes, so I am open to a position paper on the principal value model.

>> This looks like a center-radius model of intervals, but this
>> isn't it, so I'm a bit lost. For now, I will just ask how different
>> is the "loose" comparison from the "possible" comparison.
>> Since the "loose" comparison is using "the implicit epsilon
>> provided by the radius of the actual intervals", it seems to
>> me the results will always be the same.
> 
> The results will not be the same.  The authoritative definitions of the
> principal value comparisons can be found in Knuth, D.E. /The art of computer
> programming/ (vol II).  A brief description of its usage and utility can be
> found in the beginning of: <http://www.boost.org/libs/test/doc/components/
> test_tools/floating_point_comparison.html>
> 
> The difference between loose and possible is that peq() is true whenever one
> of the intervals overlaps any portion of the other, but leq() is true only
> whenever one of the intervals overlaps the center of the other.
Intriguing.  I would not mind being able to claim Knuth as an early, albeit
indirect, contributor to the theory of interval arithmetic.

>> Also you are saying this model appeals to a "much wider
>> audience"; could you give some examples where it is used?
> 
> At present it is not used AFAIK.  But one of the claims is that the PV model
> makes intervals suitable for direct replacement of built-in floating point
> types (in the sense of the Liskov substitution principle).   If that claim is
> valid then the PV model makes intervals appeal to every C++ programmer who
> uses built-in floating point types.
AFAIK = As Far As I Know?

>> Later, you say that "empty interval arguments should always
>> yield false". This statement contradicts your line-segment
>> model, since the empty set is included in every set.
> 
> What is the contradiction?  Equivalence and ordering comparisons do not deal
> with subsets.  The functions in() and contains() should affirm that an empty
> interval is included in every other interval.  But the empty interval is
> neither less then nor more than any other interval.  And given the the empty
> interval is not part of the machine number line one can claim that it is Not
> an Interval (NaI).  So, just as NaN is not equal to any other floating point
> value, not even an identical NaN, NaI should not be equal to any other
> interval, not even an identical NaI.
> 
> In fact this conflict illustrates some of the problems caused by the
> interval-as-set terminology.  It suggests that an empty interval is an empty
> set, and so seq(empty,empty) should return true.  But the interval-as-segment
> terminology suggests that an empty interval is not a segment.  (Nor is it a
> point.  The width is not zero, it is NaN).
In my Real Analyis class many years ago, I was told that inf(empty) =
+infinity.  I do NOT suggest that means empty == whole, but it might suggest
width(empty) = infinity.

The answer to width(empty) = ? Does not matter.  What matters is that we are
able to specify operator returns which
   are internally consistent, and
   do not lead to violations of containment.
The best (only?) way to achieve that is to have a single, sound underlying
model.

> So based upon the interval-as-segment terminology seq(empty,empty) should
> return false.
> 
> Is there a case to be made that empty intervals are less than or greater then
> non-empty intervals?
TRUE means, "I am sure this is true," and FALSE means, "I cannot assert
TRUE."  That is your convention?

>> It also goes against your neighborhood model, since the
>> classical interpretation is: if something is not possible,
>> then its contrary is certain (and reciprocally).
> 
> The classical interpretation fails anytime a NaN is encountered because they
> are not part of the number line.  Similarly empty intervals are not intervals
> (they need have no sensible bounds nor center/radius).  Moreover the classical
> interpretation cannot be applied to intervals at all because there are more
> relationships among intervals than there are among points on the machine
> number line.
NaN is taking a critical role in this discussion.

There is some sentiment to minimize dependence on NaN in the interests of
speed, although my understanding of the examples is missing.  One problem,
as I recall, is that in IEEE 754 arithmetic, -infinity + infinity yields
NaN, while we might prefer, at least in outwardly directed rounding modes,
to get whole.

I recall someone telling me that IEEE 754 NaN admits multiple bit patterns.
Hence, rather than overloading NaN as we seem to be doing, we might have
several NaNs, each with distinct meanings, all of which propagate as IEEE
754.  I suspect that is a BAD idea because propagation of different NaN bit
patterns is probably not portable across hardware.

The standard should specify the syntax and semantics, but not the
implementation.  However, it would be unwise to specify something whose best
implementation is "too" expensive, whatever "too" is.  Much of this NaN
discussion probably does not belong in the standard, although having it
available for implementers in another form should be a big help in having
the proposed standard accepted.  This discussion is VERY helpful in
formulating a wise specification.

It sounds to me as though reliance on the properties of IEEE 754 NaN buys us
so many benefits, that we probably prefer to accept any performance penalty
for now and add to the chorus for improved performance for any NaN
processing in future hardware.

Does anyone have hard experimental data on the performance costs of NaN?

>> Finally, you are proposing that the interval operators compare their
>> midpoint. This kind of goes against the whole point of providing
>> interval arithmetic so that people can do certified computations.
> 
> The reason the conceptual models are worth discussing is that there is no
> single model for interval usage.  There can be a single model for the
> computation of interval values (i.e., outward rounding), but there cannot be a
> single model for interval applications.  C++ is often mentioned as a
> multi-paradigm language.  If conceptual models are paradigms then there are
> definitely multiple interval paradigms.
> 
> This is only a problem when one must choose a single paradigm to use in a
> linguistic feature such as operator notation.  The problem is that one must
> choose zero or one paradigm.  But selecting a single conceptual model for
> comparison operators does not "go against" the other models.  They still exist
> and are exactly as useful as they were prior to the selection.
> 
> In fact several accomplished users of intervals have written
> that they prefer explicit bounds tests rather than comparison functions.  From
> this one can deduce that they can do certified computations without comparison
> functions, which certainly implies that they can do without an operator
> notation for those functions.
> 
> The point of operator notation is to make it easier to express simple
> concepts.  It may be that there is no simple concept related to intervals, in
> which case there should be no operator notation for comparison of intervals.
> 
> But there is an opposing viewpoint.  When adding up a column of figures, say
> measurements taken during an experiment, one might want to know how accurate
> the total was.  Adding up intervals constructed from the measurements and
> their associated errors makes it trivial to find the error for the total of
> the measurements.  So the utility of intervals for common-place calculations
> is extremely high.  One need not be doing a global optimization to prefer
> intervals over built-in types.
> 
> Comparison operators are quite useful in common-place calculations, and they
> can be used quite naturally without danger of misleading the programmer.  For
> example given the need to sort some numbers the precise details of the sort
> mechanism are probably irrelevant.  The only universal concern is that the
> result of the sort operation be reasonably reproducible (e.g., swapping of
> identical items is usually well tolerated).  Comparison of principal values
> meets that need for simple and reasonably reproducible results.  None of the
> other conceptual models can meet that need.
Excellent argument.

>> So I am a bit reluctant to consider your proposal.
> 
> I quite understand.  If you believe that the inclusion of PV comparisons would
> inhibit the development of certified computations you should definitely not
> add them to your standardization proposal.
I'm intrigued.  I insist on "Thou shalt not lie."  I favor simple.  I favor
considering carefully constructs which lead the unwary to write code that
appears to lie.

Let's continue the discussion.  Who else has opinions?

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


From fernando_cacciola@datafull.com Mon May 29 15:31:22 2006
Received: from postinofz1.prima.com.ar (postinofz1.prima.com.ar
	[200.42.0.149])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k4TMVKjd003899
	for <std-interval@compgeom.poly.edu>; Mon, 29 May 2006 15:31:21 -0700
Received: (qmail 96047 invoked from network); 29 May 2006 22:42:55 -0000
Received: from unknown (HELO SciSoft0) (200.122.82.9)
  by postinofz1.prima.com.ar with SMTP; 29 May 2006 22:42:55 -0000
Message-ID: <010801c68371$a0b8da50$6401a8c0@SciSoft0>
From: "Fernando Cacciola" <fernando_cacciola@datafull.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
References: <052820060502.9147.44792EFF0001125F000023BB22007614389B9C0E04D207D29B9C9D0700@comcast.net>
Subject: Re: [std-interval] Interval comparison operators
Date: Mon, 29 May 2006 19:45:47 -0300
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Fernando Cacciola <fernando_cacciola@datafull.com>, For discussions
	concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 29 May 2006 22:31:22 -0000

Hello Lee,

For now just a question and a quick comment:

Can you justify your claim that:

given a non-degenerate interval X, the expression ceq(X,X) will return false


Maybe I'm just totally missing a point but your Prinicpal Model doesn't look 
to me like a usefull model of interval numbers. Aren't "bounds" the central 
notion of anything called an "interval"?? This models looks to me like the 
"arithmetic expansions" described by Priest here:

http://citeseer.ist.psu.edu/priest91algorithms.html

In such an expansion, roughly, a "result" is given explicitely as a 
"principal value" and a sequence of error terms.
The comparison semantics that you suggest are in line with those concepts, 
but not so much IMO with interval artihmetic.

IOW, the comparison semantics that take into account the "accumulated 
roundoff" (those you cite from Knuth) are well suited for a model which is 
centered around the fact that a result is always a real-point-value but 
which is represented as machine-point-value which differs from the actual 
value by some error. That's why these comparisons are essentiually 
point-based.
But IIUC the very purpose of interval arithmetic when applied to certified 
computations in the presence of roundoff is precisely to provide an 
alternative view centered not on the "principal" value but the error 
bounds...
If you want a number conceptually centered around an "actual value" which 
can't be exactly represented due to roundoff, OK, but I woudn't call that an 
interval.

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com/


From first.i.last@comcast.net Tue May 30 09:10:34 2006
Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [216.148.227.151])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4UGAYjd005550
	for <std-interval@compgeom.poly.edu>; Tue, 30 May 2006 09:10:34 -0700
Received: from rmailcenter17.comcast.net ([204.127.197.127])
          by comcast.net (rwcrmhc11) with SMTP
          id <20060530162229m1100k50b1e>; Tue, 30 May 2006 16:22:29 +0000
Received: from [71.192.84.143] by rmailcenter17.comcast.net;
	Tue, 30 May 2006 16:22:26 +0000
From: first.i.last@comcast.net
To: Fernando Cacciola <fernando_cacciola@datafull.com>,
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
Date: Tue, 30 May 2006 16:22:26 +0000
Message-Id: <053020061622.16384.447C7142000B6CE70000400022058891169B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 30 May 2006 16:10:35 -0000

 -------------- Original message ----------------------
From: "Fernando Cacciola" <fernando_cacciola@datafull.com>
> Hello Lee,
> 
> For now just a question and a quick comment:
> 
> Can you justify your claim that:
> 
> given a non-degenerate interval X, the expression ceq(X,X) will
> return false

In order to preserve the containment invariant ("not lie") it is necessary for ceq() to assume the independence of any variables that cannot be proven dependent.  So if intervals have no history (e.g., are PODs or close to) and the comparison function is declared as ...

    bool ceq(interval<T> lhs, interval<T> rhs);

... then it cannot distinguish the following cases:

    interval X("[1,2]"), Y("[1,2]");
    bool A = ceq(X,Y);  // independent arguments
    bool B = ceq(X,X);  // dependent arguments
    Y = X;  // create inter-variable dependency
    bool C = ceq(X,Y);  // dependent arguments

So ceq() must return false for all of them.

However, if the function is declared as ...
 
    bool ceq( interval<T> const & lhs, interval<T> const & lhs );

Then it can detect the dependency in case B and return true.  Sun's documentation states that they do this for arithmetic functions, but I am not certain what they do to comparison functions.

In order to detect the dependency in case C either intervals require history (non-PODs with deep copies etc.) or the compiler has to be much smarter than any I've ever heard of.

> Maybe I'm just totally missing a point but your Prinicpal Model
> doesn't look to me like a usefull model of interval numbers.

It isn't particularly useful when the goal is complete rigor as is typical of certified computation.  But it is useful when complete rigor is not required.

> Aren't "bounds" the central notion of anything called
> an "interval"??

I don't think so.  They are aften the exact focus of the user's attention when implementnig reliable computing, but my understanding of the central notion of IA is containment.  The implicit statement about which "thou shalt not lie" being "the true/exact result is contained in such-and-such region".  The region can be described by:
  -- explicit bounds: X..Y
  -- a point with a pair of directional error bounds: X +Y/-Z
  -- a point with symmetric error bounds such as:
  --  -- magnitude: X +/-Y
  --  -- precision limit: X to N sig. digits
  --  -- tolerance: X +/- Y%

Just to be clear, in addressing this issue it is necessary to distinguish representation from conceptual model.  The vast majority of interval implementations use bounds to represent intervals.  But alternate representations, such as center/radius are also useful, especially for problems/spaces of high dimension.

The conceptual models are not tied to the representation of intervals.  All of the conceptual models can be applied to all of the representations.

> This models looks to me like the 
> "arithmetic expansions" described by Priest here:
> 
> http://citeseer.ist.psu.edu/priest91algorithms.html
> 
> In such an expansion, roughly, a "result" is given explicitely as a 
> "principal value" and a sequence of error terms.
> The comparison semantics that you suggest are in line with
> those concepts, but not so much IMO with interval artihmetic.

Is it your conclusion that PV comparison semantics _cannot_ or _should_not_ be applied within interval arithmetic?

> IOW, the comparison semantics that take into account the
> "accumulated roundoff" (those you cite from Knuth) are
> well suited for a model which is centered around the fact
> that a result is always a real-point-value but which is
> represented as machine-point-value which differs from
> the actual value by some error. That's why these
> comparisons are essentiually point-based.

We are in complete agreement up to this point except that our definitions of the term "interval arithmetic" may be distinct.  I interpret your statements to indicate a belief that interval arithmetic consists only of operations that are useful for certified computations.

My definition of IA is the collection of techniques that apply to interval objects .AND. do not interfere with the definition of operations that are necessary for certified computations .AND. are useful for some reasonable purposes.  Thus I think my defintion would produce a proper superset of your definition.

> But IIUC the very purpose of interval arithmetic when applied
> to certified computations in the presence of roundoff is
> precisely to provide an alternative view centered not on
> the "principal" value but the error bounds...

The key phrase in your statement is "... when applied o certified computations...".  I believe that interval arithmetic has wider applicability than certified computations.  This is not to denigrate certified computations, but to suggest that there is a spectrum of rigor and utility ranging from certified computations at the end emphasizing rigor down to convenience for simple calculations at the end where rigor is less critical.

Is it your opinion that interval arithmethic should be used _only_ for certified computations?

> If you want a number conceptually centered around an
> "actual value" which can't be exactly represented due to
> roundoff, OK, but I woudn't call that an interval.

Is this simply a terminology issue?

Reductio:  Should we create a separate set of features whiich look/walk/quack like intervals and are implemented exactly as intervals are, but that we call something different, say "duplex numbers"?  Is this a branding issue where the term interval arithmetic should be reserved for only those systems and applications based on certified computations?

I suspect this issue is a consequence of the fact that there could be several goals for the standardization effort.  Is the goal to improve C++ for (only) users intending to create certified computations, or is the goal to improve C++ for as wide a set of users as possible?

The interest of my company is in the latter, but only to the extent that features designed for the wider audience do not detract from the utility of the proposal for users pursuing maximum rigor.

-- Lee Winter

From lawrence.crowl@gmail.com Tue May 30 10:45:20 2006
Received: from nf-out-0910.google.com (nf-out-0910.google.com
	[64.233.182.189])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4UHjJjd005671
	for <std-interval@compgeom.poly.edu>; Tue, 30 May 2006 10:45:20 -0700
Received: by nf-out-0910.google.com with SMTP id a27so271009nfc
	for <std-interval@compgeom.poly.edu>;
	Tue, 30 May 2006 10:57:14 -0700 (PDT)
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=beta; d=gmail.com;
	h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references;
	b=LXuzAtaxe7jOeaVLo5y2UnYPHyvq5YHAM7SYbBxvlQlhwuLVvEaB/8gOVbCKjkAalnKZyUSgdIKG4IyhRlSeTZWajcGeziQm6jCVspGeQLv0PXpt9M9t+ZEtn0oLIkKaFvaZcYhqmY4MDRxyw0f+tLyAvrhRmJ6pNnpX5+9E4N4=
Received: by 10.49.5.1 with SMTP id h1mr2798957nfi;
        Tue, 30 May 2006 10:57:14 -0700 (PDT)
Received: by 10.48.232.11 with HTTP; Tue, 30 May 2006 10:57:13 -0700 (PDT)
Message-ID: <90228e530605301057t25958bf7v6bc3a04ba6fc89c8@mail.gmail.com>
Date: Tue, 30 May 2006 10:57:13 -0700
From: "Lawrence Crowl" <lawrence.crowl@gmail.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] list of functions for intervals
In-Reply-To: <4479FD8E.7070407@sophia.inria.fr>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
References: <4479FD8E.7070407@sophia.inria.fr>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence@Crowl.org, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 30 May 2006 17:45:20 -0000

On 5/28/06, Sylvain Pion <Sylvain.Pion@sophia.inria.fr> wrote:
> - fmin, fmax : we propose to return interval<T>, while we could
>    return double (the lower or upper bound), but we choose the
>    consistency with the treatment done to other functions, and
>    it is easy to extract the lower/upper bound of the resulting
>    interval anyway.

How do you propose to define this interval? It is not clear to me.

-- 
Lawrence Crowl
From guillaume.melquiond@ens-lyon.fr Tue May 30 11:59:23 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k4UIxNjd005744
	for <std-interval@compgeom.poly.edu>; Tue, 30 May 2006 11:59:23 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id BDBC915B8C2;
	Tue, 30 May 2006 21:11:31 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 29580-02; Tue, 30 May 2006 21:11:31 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 1434615B8BE;
	Tue, 30 May 2006 21:11:30 +0200 (CEST)
Subject: Re: [std-interval] list of functions for intervals
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: Lawrence@crowl.org, std-interval@compgeom.poly.edu
In-Reply-To: <90228e530605301057t25958bf7v6bc3a04ba6fc89c8@mail.gmail.com>
References: <4479FD8E.7070407@sophia.inria.fr>
	 <90228e530605301057t25958bf7v6bc3a04ba6fc89c8@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
Date: Tue, 30 May 2006 21:11:13 +0200
Message-Id: <1149016274.6795.6.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 30 May 2006 18:59:28 -0000

Le mardi 30 mai 2006 à 10:57 -0700, Lawrence Crowl a écrit :
> On 5/28/06, Sylvain Pion <Sylvain.Pion@sophia.inria.fr> wrote:
> > - fmin, fmax : we propose to return interval<T>, while we could
> >    return double (the lower or upper bound), but we choose the
> >    consistency with the treatment done to other functions, and
> >    it is easy to extract the lower/upper bound of the resulting
> >    interval anyway.
> 
> How do you propose to define this interval? It is not clear to me.

The fmin(interval<T>,interval<T>) function is defined as the interval
extension of the fmin(T,T) function (so this is consistent with every
arithmetic operator of the proposal).

Mathematically, Min(X,Y) = { min(x,y) | x in X, y in Y }.

>From an implementation point of view, this means that if X and Y are not
empty, the result is
  [ fmin(X.lower(), Y.lower()), fmin(X.upper(), Y.upper()) ]

Best regards,

Guillaume

From eliasen@mindspring.com Wed May 31 18:13:36 2006
Received: from elasmtp-kukur.atl.sa.earthlink.net
	(elasmtp-kukur.atl.sa.earthlink.net [209.86.89.65])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k511DZjd009606
	for <std-interval@compgeom.poly.edu>; Wed, 31 May 2006 18:13:35 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=R+TAcUoreWfZtX/sQHmBGNOzL3sgNGzP/YcpdfXiavL3+NF1MpNVHYQLsB0OaVQM;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [68.165.198.161] (helo=[192.168.1.101])
	by elasmtp-kukur.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1Flbwl-0006yJ-EV
	for std-interval@compgeom.poly.edu; Wed, 31 May 2006 21:26:00 -0400
Message-ID: <447E4225.8030202@mindspring.com>
Date: Wed, 31 May 2006 19:25:57 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.13) Gecko/20060414
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
References: <C0A0A4B7.57F%George.Corliss@Marquette.edu>
In-Reply-To: <C0A0A4B7.57F%George.Corliss@Marquette.edu>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac45072e97e5596d58822e6389aae3a729a224350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 68.165.198.161
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 01 Jun 2006 01:13:36 -0000

George Corliss wrote:
> I recall someone telling me that IEEE 754 NaN admits multiple bit patterns.
> Hence, rather than overloading NaN as we seem to be doing, we might have
> several NaNs, each with distinct meanings, all of which propagate as IEEE
> 754.  I suspect that is a BAD idea because propagation of different NaN bit
> patterns is probably not portable across hardware.

   While bit patterns in NaNs may vary (they are represented as all 1s
in the exponent, and a non-zero fraction,) there are really only 2
categories of NaN that we should rely on, or expect to see : One is a
"quiet" NaN, (MSB of fraction = 1) and a "signaling" NaN, (MSB of
fraction = 0).  I know of no portable functions other than std::isnan()
(defined in cmath) which simply detects if it's a NaN or not, so you
shouldn't even expect to differentiate between these two.  You are also
not allowed to expect that if you set some specific bit pattern in the
fraction, that it will be maintained.

   The quiet NaN simply propagates itself when used in a calculation.
The signaling NaN, on the other hand, may trigger a floating-point
exception or trap when it is used in a calculation.  In UN*X-like
environments, you can set or modify the signal handler for SIGFPE to
handle/log the error condition when a signaling NaN is used.

   Using signaling NaNs is often very good, or necessary to prevent a
program that uses NaN from silently lying to you.

   For example, if variable "x" is set to a quiet NaN for some reason,
adding to it simply propagates the NaN value and you may see it:

   // x contains quiet NaN
   double b;
   b = x + 1.0;    // Value of b is now NaN, "tainted" by operation with x.

   If you display b, you'll see that its value is NaN, and you'll know
something is wrong.  However, if you do a boolean comparison, your
results may be silently poisoned and you'll never know you were wrong.

   // x contains (quiet) NaN
   if (x < 1.0)
       ... do the unintended thing, silently
   else
       ... do another unintended thing, silently

   What is going to happen when that comparison is made?  You'll never
know that a NaN was used in the comparison, and all further results of
your program may be wrong, or at the very least, untrustable!  (One
would be rather surprised and shocked to see how many of these
comparisons and invalid uses of NaNs there were in a product I worked on
until I added signaling NaN behavior to help enforce correctness.)

   Thus, an implementation that uses NaN should probably use signaling
NaNs to indicate the error condition.  When a *signaling* NaN is used in
the calculations above, a SIGFPE signal is generated, and the program's
incorrect behavior can be noted.  It would be nicer to flag an
exception, as signal handlers don't give you much chance to recover, but
it's probably better than continuing to run for two more weeks and lying
about your results.

   If used in a simple isnan() test, a signaling NaN doesn't trigger
signal handlers (at least in compilers I've seen.)  So that doesn't slow
you down.  If used in mathematical expressions, it does.

> The standard should specify the syntax and semantics, but not the
> implementation.  However, it would be unwise to specify something whose best
> implementation is "too" expensive, whatever "too" is.  Much of this NaN
> discussion probably does not belong in the standard, although having it
> available for implementers in another form should be a big help in having
> the proposed standard accepted.  This discussion is VERY helpful in
> formulating a wise specification.

   A clever implementer will probably make use of NaN for indicating
certain conditions and making the coding simpler.  A smart proposal will
probably be written as if NaN were being used.

> It sounds to me as though reliance on the properties of IEEE 754 NaN buys us
> so many benefits, that we probably prefer to accept any performance penalty
> for now and add to the chorus for improved performance for any NaN
> processing in future hardware.
> 
> Does anyone have hard experimental data on the performance costs of NaN?

   I've used NaNs widely in some large simulation/modelling projects.
Using them often buys quite a bit of performance *improvement* in
less-obvious ways.  The most obvious improvement is that memory usage is
often greatly reduced.  For example, if you want to have a large array
of double values, and have some way of indicating that each initialized
or not, NaN is an obvious choice.  The other options would be to
initialize to some number (dangerous, as that number might show up in
regular calculations), or to keep a separate flag indicating whether the
number was initialized or not.  Due to memory alignment issues, even
adding a boolean flag to your structure or class might double memory usage.

   This improves cache locality, and reduces the nonlinear performance
issues when swapping to disk or slower main memory.

   As for hard experimental data, here's some runs for a sample that
just adds either valid numbers (1.0) to a running sum, or NaN to that
same sum (which you'd never really want to do.)

Linux x86_64, g++ (GCC) 4.1.1 20060525 (Red Hat 4.1.1-1)

-O0:
add1:                   6880000 ticks   Sum: 1e+09
addQNaN:                5940000 ticks   Sum: nan
addSNaN:                6140000 ticks   Sum: nan

-O1:
add1:                   5970000 ticks   Sum: 1e+09
addQNaN:                5990000 ticks   Sum: nan
addSNaN:                6010000 ticks   Sum: nan

-O2:
add1:                   5800000 ticks   Sum: 1e+09
addQNaN:                5810000 ticks   Sum: nan
addSNaN:                5840000 ticks   Sum: nan

-O3:
add1:                   1830000 ticks   Sum: 1e+09
addQNaN:                1840000 ticks   Sum: nan
addSNaN:                1830000 ticks   Sum: nan


   In short, using NaNs in calculations don't make your program
significantly slower.  A real-world program would involve more memory
usage, and use of NaNs would possibly make it faster due to improved
cache locality.

   Program here:

   http://futureboy.us/temp/NaN.cc


-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From eliasen@mindspring.com Wed May 31 19:29:18 2006
Received: from smtpauth07.mail.atl.earthlink.net
	(smtpauth07.mail.atl.earthlink.net [209.86.89.67])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k512THjd009691
	for <std-interval@compgeom.poly.edu>; Wed, 31 May 2006 19:29:18 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=tCsTLYuiwaFjsX01nP/roHBogMqY/lC3sM3fWZFUBsSwT4tmJTukUuhOA0epnmJY;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [68.165.198.161] (helo=[192.168.1.101])
	by smtpauth07.mail.atl.earthlink.net with asmtp (Exim 4.34)
	id 1Fld82-0001Iy-SY
	for std-interval@compgeom.poly.edu; Wed, 31 May 2006 22:41:43 -0400
Message-ID: <447E53E5.6070902@mindspring.com>
Date: Wed, 31 May 2006 20:41:41 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.13) Gecko/20060414
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
References: <C0A0A4B7.57F%George.Corliss@Marquette.edu>
In-Reply-To: <C0A0A4B7.57F%George.Corliss@Marquette.edu>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac450771f3a8d4f08a805f6003a2ed73b5247c350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 68.165.198.161
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 01 Jun 2006 02:29:18 -0000

George Corliss wrote:
> Does anyone have hard experimental data on the performance costs of NaN?

   Here's some additional data on a different operating system,
processor, and compiler version.  This makes a huge difference!

Processor: Pentium III
Windows 2000
g++ (GCC) 3.4.2 (mingw-special)

-O0:
add1:                   10455 ticks     Sum: 1e+009
addQNaN:                166990 ticks    Sum: 1.#QNAN
addSNaN:                167741 ticks    Sum: 1.#QNAN

-O1:
add1:                   10344 ticks     Sum: 1e+009
addQNaN:                158759 ticks    Sum: 1.#QNAN
addSNaN:                159970 ticks    Sum: 1.#QNAN

-O2:
add1:                   10334 ticks     Sum: 1e+009
addQNaN:                163325 ticks    Sum: 1.#QNAN
addSNaN:                163405 ticks    Sum: 1.#QNAN

-O3:
add1:                   10344 ticks     Sum: 1e+009
addQNaN:                163496 ticks    Sum: 1.#QNAN
addSNaN:                163515 ticks    Sum: 1.#QNAN

   It looks like the cost of doing operations with NaN on this older
architecture is quite high!  I should reiterate that you almost never
actually want to *do* operations with NaN, (you usually just want to
test with isnan() ) but on this platform, it's about 16 times slower!

   As before, sample program is here:

   http://futureboy.us/temp/NaN.cc

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From hbr@poly.edu Sat Jun  3 02:24:28 2006
Received: from smtp.cegetel.net (mf01.sitadelle.com [212.94.174.68])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k539OSjd019701
	for <std-interval@compgeom.poly.edu>; Sat, 3 Jun 2006 02:24:28 -0700
Received: from [192.168.0.242] (unknown [84.7.109.41])
	by smtp.cegetel.net (Postfix) with ESMTP id EDD016A0342;
	Sat,  3 Jun 2006 11:37:34 +0200 (CEST)
In-Reply-To: <447E4225.8030202@mindspring.com>
References: <C0A0A4B7.57F%George.Corliss@Marquette.edu>
	<447E4225.8030202@mindspring.com>
Mime-Version: 1.0 (Apple Message framework v750)
Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
Message-Id: <DAC8C9B0-13AE-4260-AF21-A40D5935CFA5@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Subject: Re: [std-interval] Interval comparison operators
Date: Sat, 3 Jun 2006 11:37:39 +0200
To: Alan Eliasen <eliasen@mindspring.com>,
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.750)
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k539OSjd019701
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sat, 03 Jun 2006 09:24:28 -0000



On Jun 1, 2006, at 3:25 AM, Alan Eliasen wrote:
> I know of no portable functions other than std::isnan()
> (defined in cmath) which simply detects if it's a NaN or not, so you
> shouldn't even expect to differentiate between these two.

FWIW, std::numeric_limits<T> has members has_quiet_NaN and  
has_signaling_NaN along with quiet_NaN and signaling_NaN.  What you  
can expect is to differentiate between them IF your platform supports  
them (and the numeric_limits given by your system is accurate for the  
platform, as it should).
--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu
From first.i.last@comcast.net Sat Jun  3 17:17:02 2006
Received: from rwcrmhc13.comcast.net (rwcrmhc13.comcast.net [204.127.192.83])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k540Gxjd021436
	for <std-interval@compgeom.poly.edu>; Sat, 3 Jun 2006 17:17:00 -0700
Received: from rmailcenter09.comcast.net ([204.127.197.119])
          by comcast.net (rwcrmhc13) with SMTP
          id <20060604003024m1300g77r7e>; Sun, 4 Jun 2006 00:30:25 +0000
Received: from [71.192.84.143] by rmailcenter09.comcast.net;
	Sun, 04 Jun 2006 00:30:23 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] list of functions for intervals
Date: Sun, 04 Jun 2006 00:30:23 +0000
Message-Id: <060420060030.15630.4482299F00049F7C00003D0E22007614389B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="NextPart_Webmail_9m3u9jl4l_15630_1149381023_0"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 04 Jun 2006 00:17:02 -0000


--NextPart_Webmail_9m3u9jl4l_15630_1149381023_0
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

 -------------- Original message ----------------------
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
> Dear all,
> 
> We have been thinking about the list of floating-point functions
> which we could propose an interval version for.
> More precisely, we have looked at the current list of floating-point
> functions from the latest draft of C++0x

[...] 

> What do you think of these lists ?
> Is something important excluded ?
> Is there anything that should be excluded ?
> 
> Note that existing implementations do not necessarily offer all
> proposed functions, so any comment on the implementation
> difficulty (for interval<float>, interval<double> and
> interval<long double>) would be appreciated.

Attached is a file containing comments on the issues you raised and suggested specifications for many of the functions at issue.  Having studied this issue in great detail, implemented all of the <cmath> functions, and designed implementations of the c99 functions I can assure you that the implementation of the interval versions of the <cmath> functions, including disjoint results, is quite reasonable.

Using typical elementary functions as a benchmark (trig, hyperbolics, and exponentials) all but two of the c99 functions require similar or lesser implementation effort.  We are still studying the recalcitrant pair of functions, beta() and ellint_1(), with an eye to efficient and robust implementation.

The attached document is a summary aimed at raising issues and identifying areas meriting additional discussion rather than a comprehensive specification with endless detail but no rationale.  Therefore readers who are only concerned with concrete suggestions should not read it.

-- Lee Winter

--NextPart_Webmail_9m3u9jl4l_15630_1149381023_0
Content-Type: application/x-tar; name="cmath.zip"
Content-Transfer-Encoding: base64

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

--NextPart_Webmail_9m3u9jl4l_15630_1149381023_0--
From first.i.last@comcast.net Sun Jun  4 10:02:29 2006
Received: from rwcrmhc13.comcast.net (rwcrmhc13.comcast.net [204.127.192.83])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k54H2Sjd030524
	for <std-interval@compgeom.poly.edu>; Sun, 4 Jun 2006 10:02:29 -0700
Received: from rmailcenter18.comcast.net ([204.127.197.128])
          by comcast.net (rwcrmhc13) with SMTP
          id <20060604171558m1300g7hg4e>; Sun, 4 Jun 2006 17:15:58 +0000
Received: from [71.192.84.143] by rmailcenter18.comcast.net;
	Sun, 04 Jun 2006 17:15:57 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Interval comparison operators
Date: Sun, 04 Jun 2006 17:15:57 +0000
Message-Id: <060420061715.1635.4483154C0007DB7D0000066322070009539B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 04 Jun 2006 17:02:29 -0000

Dear Prof. Corliss,

While I am quite interested in the issues you raised, I fear that the proposal team may not share that interest.  So I am responding privately in order to avoid the censure that an open discussion would court.

Liberal snippage in effect.

 -------------- Original message ----------------------
From: George Corliss <George.Corliss@marquette.edu>
> 
> On 5/28/06 12:02 AM, "first.i.last@comcast.net" <first.i.last@comcast.net>
> wrote:
> 
> >  -------------- Original message ----------------------
> > From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> >>  Now we are interested in what the opinions of
> >> other interval developers are. Should the user be allowed to
> >> compare intervals in C++? And if so, what should the semantic
> >> of these comparisons be?
> > 
> Some reactions ...
> 
> Copyright: Since I intend to quote portions of your document, I assert that
> the quoted portions are subject to: "Permission is hereby granted to
> distribute this document to all past, present, and future members of the
> mailing list <std-interval@compgeom.poly.edu>; all past, present, and future
> members of the team proposing the adoption of intervals into the C++
> language; and all past, present, and future members of the C++ Standards
> Committee and staff thereof.  Any such reproduction, distribution, or
> copying of this document must include the above copyright statement and this
> permission paragraph.  All other reproduction, distribution, or copying of
> this document requires specific, written permission of the copyright
> holder."
> 
> Personally, find find the requirement to include that
> slightly cumbersome.

That's hardly accurate.  It is a royale PITA all the way around.

> However, I consider it a STRONG endorsement to
> the C++ committee of the interest in an interval
> standard that your firm cares enough about intervals
> to be that protective.

An interesting perspective.  I hope the committee sees things that way.

>  Hence, I joyfully comply with your copyright notice
> (I hope).

Technically you did not because you omitted the actual copyright declaration.  ;-)

It's far more of a hassle than it first appears.  :-(

> 
> I'd even allow a modest delay in adoption, if we can
> develop a consensus on what "right" is.

I have hopes in that direction, but am skeptical.  Do you have reason to believe that a consensus is possible?  My understanding is that the FORTRAN proposal failed due to conflicts within the interval community.  I have no evidence to indicate that those conflicts have been resolved.  I fear that the disclosure of our approach to the issues may create additional conflicts.

> 
> 
> Principal Value Model: Hmmm.  Very interesting.  The purist
> side of me is appalled; the engineering side of me applauds.
> I agree that it can be a stepping-stone.  I fear that it allows
> the less-than-careful programmer to violate containment,
> which I consider the touch-stone of interval
> algorithms.

We are extremely interested in any example you have or find of a way to mis-use the proposed functions that produces a containment violation.  Of course they make better damned fools every year, so we are certain that nothing can be foolproof.  

> I'd have to try it out in a non-trivial application
> to see which side is stronger.

It may help to consider the difference in approach to numeric software that differentiates the PV model from classical interval designs.  In brief the classical interval designs are very careful about what is known and what is not known.  The value of outward rounding is that it efficiently provides an explicit boundary on the known/unkown which can be used in a sophisticated system to produce provably-good results.

The PV model is based upon the opposite approach.  Most numeric software is hopelessly bad.  Floating point is notoriously difficult to "get right", and even when you know how it takes a great deal of effort.  Intervals cannot cure that problem.  As you have written one cannot transform a point algorithm into an interval algorithm by substitution of intervals for floating point types.

But intervals can help.  Substitution of triplex numbers for floating point types does not alter the results of a calculation.  It does yield a bound on the error associated with the result.  That additional information, even if not used by the software, but simply reported as an output, is a tremendous improvement over the typical abysmal state of numeric software development.

Once you have triplex numbers in use then it becomes much easier to find and fix the bad parts of a software system.  In the limit you can gradually transform the software into a robust system for numerics.

The PV model arose from the fact that there are two semantics available to the user of triplex numbers.  One can use the point value or one can use the interval.  In fact we have an implementation where the semantics can be determined at run time, so a particular function can be exercised in both modes to determine what effect the change in semantics has on the result and the process by which the result is produced.

But what does it mean to "use the interval" in a typical numeric software package?  We needed a specification for intervals equivalent to the IEEE-754 for floating point types.  One that completely defined the results of every operation at the lowest level.  And one that was completely consistent.  That specification is deferred rounding.  Given deferred rounding, the principal value model does the same thing for intervals that round-to-nearest does for floating point -- it minimizes rounding error.

The initial goal was to get intervals into typical software development without the steep initial ramp required for classical intervals as used in reliable computing.  We succeeded in that because we found a seven-step process that takes an existing system using floating point and converts it to use intervals.  No source code changes needed.

The interesting thing about the conversion process is that the seven steps aren't large.  They are baby steps so simple that it is possible to test the system at each step of the conversion to determine that it still works as it originally did and fix anything that was broken by the conversion.  I/O and all.  Including <stdio.h>.  The only thing we do not support is overwriting numeric objects (via pointer casts, abuse of unions, binary IO, etc.).

But along the way we found that the PV model is so much better than classical floating point that it has very serious utility in its own right.  I would be interested in your reaction to the whole system once we are able to make it available.

> "Empty interval arguments should always yield false."
> and following. Then you are including "I don't know"
> with FALSE?

Nit: "I don't know" is not appropriate.  It suggests that there is or might be an answer that is either true or false but whose actual value is unknown even though knowable.  More accurate alternatives would be "I can't (ever) know", "meaningless" or "Bzzzzt -- bad question" (same as "meaningless").  Note that it does _not_ mean "indeterminate".

This is an interesting point, but it is not limited to intervals.  How about tan(pi/2)? sqrt(negative underflow)?  What is the ratio of one to zero (and no B.S. about limits)?  Any sane answer is complex because the result is undefined within the working number system.

Similarly, an empty interval does not have any relationship with any other interval.  Nor does it have any of the properties of an interval.  Since "undefined" is certainly not "true" it has to be lumped in with "false" if you ask a boolean query

>  Or TRUE means, "I am sure this is true," and FALSE means,
> "I cannot assert TRUE."  I can live with that, but I assert
> that is not the common understanding of FALSE.

I suspect the common understanding of false is defective.  Fuzzy systems have built a lot of good stuff on that defect.

> 
> I prefer exception-free (or exception-nearly-free) execution,
> too, but I think you lose valuable information to lump
> "I don't know" with FALSE.

I disagree.  If you ask an inappropriate question {such as plt([1],mpty)} you have not "lost" information due to the limitations on the response.  The info is still available if you ask a more sensible question {such as isempty(mpty)||plt([1],mpty)}.

IMHO the real issue appears to be how much support developers get in detecting inappropriate queries.

> Tough issue.  I'll be interested to see whether we approach consensus.

Definitely tough politically.  But even assuming the use of exceptions does not let us avoid finding a good answer.  When exceptions are disabled (e.g., in the no-throw() version) we still need to produce a sensible result.

> "If improper intervals are not considered empty then
> improper intervals should also always return false."
> By "improper interval." do you mean semi-infinite, e.g.,
> [1, inf]?

That was not my intent.  I don't comprehend what is improper about [1,inf].  Nor do I consider them to include infinity (another discussion some other time).

By "improper" I meant one whose lower bound was greater than its upper bound.  The typical response of "undefined behavior" is probably not acceptable in this context because we are looking for rigor rather than ease of implementation.

> > George Corliss wrote:
> > 
> >> #1  In my own interval programming work, I don't think
> >> I have ever used certainly/possibly operators or
> >> tri-valued logic, mostly because I have to think too hard.
> >> Instead, I use <double> tests on interval endpoints, e.g.,
> >> lo(A) <= hi(B), and similar.  I must think carefully through
> >> all cases, but boolean tests work as I am familiar.  I think
> >> I am not alone in that practice.  I believe it leads to code
> >> that is more easily maintained by people with only
> >> intermediate expertise.
> > 
> > This is an effective endorsement of the KISS principle.  We agree that
> > comparison operations need to be as simple, clear, and readable as possible.
> > We believe that expresion templates or any other specialized technique, e.g.,
> > exceptions, that is not widely used in other comparison contexts will retard
> > the widespread use of intervals.
> > 
> > Devil's Advocate question: how much of your habitual resistance to the use of
> > higher level comparisons is due to the non-portability of the various
> > implementations?  AFAICT tests of the bounds are the only reliable
> > cross-platform conventions, so they may be the only reasonable habits at
> > present.
> Answer to DA: None.  Even comparing endpoints has slightly
> different syntax in different packages.
> 
> I'm an old Fortran programmer (in any of several
> parsing alternatives).  My habits were formed long ago,
> when I wrote several of my own packages,
> thinking they were for my own use, unconstrained
> by the practices of others. Comparing endpoints gave
> me all the tools I ever needed.  In retrospect, I
> think that habit encouraged me to think carefully
> through sometimes exhaustive cases.  My codes
> are full of segments including character
> graphics suggesting various cases of endpoint comparisons.
>    //    [===========]
>    //              [========>>>
> I think at least I understand what I am doing.
> 
> I do not oppose more sophisticated comparisons as
> you propose.  However, I am likely to advise non-experts
> to save themselves the effort of understanding interval
> comparisons by restricting themselves to endpoint
> comparisons until such time as they feel stifled.  But that's
> a question of habit, as you suggest below.

I think Ron Avitur suggested it actually.

I think your suggestion re restraint until confidence grows is sensible when the domain is classical IA for reliable computing.  But the PV models are designed to be used "out of the box" as replacements for floating point comparisons.  OTOH, even with the Knuth variants it would be wise to make new users code their tolerance/epsilon tests explicitly until they have digested the concepts and can appreciate the higher-level concepts expressed by the comparison functions.  Note that the most important reason to use the higher-level comparisons is to make the code readable by others.

But for adoption in C++ I suspect powerful, succinct concepts are what will make the proposal fly.

> >> #2  I do NOT favor making it as easy as possible for
> >> programmers to take legacy code, change double to
> >> interval, and expect to get anything sensible.
> > 
> > This is a properly cautionary warnng, but with respect
>>  to comparison operators, we disagree.  The warning
> > applies to retaining point-wise algorithms instead of
> > adopting interval algorithms.  We do not believe it
> > applies to primitive operations.  Rather, primitive interval
> > operations should be as similar as possible to built-in 
> > floating point operations.
> The question, "Is A < B?" is different for floating point
> numbers A & B and for intervals A & B.  As evidence of
> that assertion, I submit your document, at least 25 years
> discussion in the interval community, and the fact that so
> many variants exist.

Stipulated.  But observe that your statement applies to classical interval arithmetic rather than the PV-based "duplex" arithmetic.  For PV-based arithmetic the expression "A < B" is the same for floating point and "duplex" numbers.

> 
> Having primitive interval operators that LOOK like primitive
> floating-point operators, but have different semantics OR
> that potentially violate containment requires careful
> consideration.

Yeah.  There's the rub.  No matter how good/useful the PV model is having them along side the classical interval relations is going to cause confusion.  The concepts are quite distinct, but I have oscillated from a desire for full integration to a desire to a completely separate naming convention (e.g., duplex numbers with all interval functionality rewrapped, repackaged, and repainted) many times.  The decision as to which is the most appropriate to propose is a bit of cart-before-horse.  The experiential data required to make a wise decision requires a great deal of exposure/usage by the target population.  But once that experience has been gained it becomes difficult to correct any mistakes in the original proposal.

I'm not that worried about containment violations (can you suggest how they might evolve?) but I am concerned about misuse due to misunderstood complexity -- too many choices.

> 
> If the floating-point and the interval question are different,
> ANY syntax for posing the question is potentially confusing.
> That is why I asserted above I'd even accept a modest
> delay in adoption, if we can develop a consensus on what
> "right" is.

Agreed, with the proviso that consensus on this kind of issue is no guarantee of wisdom.

> 
> That said, your proposal is a good step in that direction.
> When I say "potentially violate containment," I agree that
> your comparisons, used as you intend, are (probably) safe.
>  My fear is that they may be easy to miss-use.  I fear WAY
> too many examples of people writing code with violations
> of containment and blaming us, rather than themselves.
>  I want to make if hard to violate containment, even by
> miss-informed programmers.

I think we agree, but we might not.  I see the threat of naive programmers using the wrong function and thus getting a wrong answer.  But that does not create a containment violation as I understand the term.  Am I missing something?

> > Ron Avitzur wrote:
> > 
> >> I suppose it's only a matter of habits though. People who
> >> are used to handling bounds directly will keep handling bounds
> >> directly, while people who are used to multi-valued logics will
> >> keep using them, and so on. So, in a sense, the question could
> >> become: into which habits do we want people who are new to
> >> interval arithmetic to get? Personally, I wouldn't mind students
> >> using possibly / certainly so that they have to think about what
> >> they really want to express rather than directly going to lower
> >> level manipulation of bounds :-).
> I agree it is a matter of habit, where we each see the rationale
> for OUR habit.  Hence, it is wise to support multiple habits,
> UNLESS there is a large complexity cost.

There is not a large compile or run-time compleity cost.  There might be a perceptual or cognitive complexity cost.

The full triplex arithmetic has about eleven (11) distinct sets of comparison functions.  I don't find that complex because I comprehend each of the models on which they are based.  But if I spent 11 minutes describing them to an accomplished programmer, even an experienced interval arithmetic developer they would walk away hopelessly confused.  I'd guess it would take two hours to present them all intelligibly.  And 4-6 hours of problem sets to insure retention.  That's a lot.

This stuff is not simple.  We need powerful, abstract concepts to encapsulate the complexity and make it usable.  It is possible that C++ concept_maps might solve a lot of this packaging problem.

> > The answer to that question forms the criteria that should
> > be used to evaluate the entire interval proposal, particularly
> > interval comparisons.  My company has spent a great deal
> > of effort attempting to make it easy for C++ users to
> > incorporate intervals into their programs, but our results are
> > will not be ready for release for some months yet.
> Wonderful.  You may not wish to say, but if you did sound
> usability testing and can (eventually) publish your results for
> peer review, any reservations I have for your proposal
> would disappear.

We have some interest from the science departments at Harvard and have discussed a formal usability test to be performed by American Institutes for Research (specialists is human factors evaluation).  But neither of those projects can be actually started until we complete the implementation -- we probably won't have funds to repeat the projects if a major revision is needed.

Our testing philosophy is based on certification rather than evaluation.  We expect to find and fix all of the problems before we get into the field.  So we do a great deal of internal testing.  When we get independent test results they either pass/certify the results we expect or we go back to the drawing board and start over.  We are not comfortable with last-minute patches.

We definitely want as much rigor in the independent evaluations as we can get.

The bulk of this problem is not the functionality, but how to package and describe it to the user.  So it is basically a doc problem.  And the secret to good doc is the same as the secret to any kind or writing: lots of rewriting.  So that's what we do.

> > It may be worth soliciting an opinion from the author of the Frink programming
> > language.  He added support for interval arithmetic in the form of triplex
> > numbers a year or so ago.  His implementation is perfectly straightforward and
> > lacks many of the features of other interval arithmetic implementations.  But
> > due to the simplicity of his implementation he may be able to offer useful
> > insiight into the issue of making intervals easy to use safely.
> Good suggestion.  Have you approached him?

I have not.  I thought that decision should lie with the proposal team.

>  If not, may I or someone else use your message and
> your "Comparison of Intervals in C++" to approach him?

It appears that he is now a member of the mailing list so you are welcome to discuss any part of that paper with him.

Note that Frink only supports point semantics for its triplex numbers, so it does not have the PV-based comparisons.  I made the suggestion in the hope that he had considered additional functionality and would express an opinion about it that might be useful.

> Lee Winter responds to response from Guillaume Melquiond:
> >> I have taken a quick look at your document and I have a
> >> few questions.
> >> 
> . . .
> 
> Do we all implicitly assume CLOSED line segments, with the 
> possible exception of semi-infinite [a, infinity)?  If whole is
> an interval, it is closed, isn't it, because its complement is
> open (and closed)?  Then is the semi-infinite line segment
> [a, infinity] closed because its complement [-infinity, a) is
> open?

Grrrr.  All of the proposals I have seen assume closed intervals.

But there is a great deal of terminology abuse in the above (another discussion another time).

> >> Concerning your neighborhood model, I disagree. You are
> >> saying that "the certain and possible comparison functions
> >> are based on this model". But somebody performing global
> >> optimization or value-range propagation will use them, while
> >> the intervals are nothing like a neighborhood.  So certain and
> >> possible comparisons should not be associated to a "point
> >> model" in my opinion.
> > 
> > The sticking point here appears to be that "intervals are nothing like a
> > neighborhood".  If they are not, what are they like?  I.e., what conceptual
> > model do you believe the certain/possible comparisons to be based upon?  Note
> > that the conceptual models are not used to describe to high levels of the
> > software such as functions, algorithms, programs, or applications.  They are
> > only useful to describe the rationale for having multiple sets of comparisons.
> > So they are properly applied only to distinguish the kinds of low-level
> > operations available.
> Are neighborhoods open or closed line segments?

Closed AFAICT.

> 
> The AGREEMENT here is that a model is necessary to underlie the
> specifications.

Meaning a single model?  I believe that systems like Sun's forte already have at least two models in use (set/segment and neighborhood of uncertainty).  I proposed a third model (PV) for use in "bottom up" improvements to numeric software.

> 
> > But we have a fundamental disagreement.  The reason certain and possible
> > comparisons are characterized as based upon points is that the results of the
> > comparisons describe the presence or absence of points. Possible comparisons
> > indicate that there exists some point in each object that satisfies the
> > relation in question.  Certain comparisons indicate that there is one (and
> > only one) point that satisfies the relation in question (except of course for
> > cne() which 
> > indicates that there is no point that satisfies the relation).
> > 
> >> 
> >> Do you have some bibliographic references for the principal value model?
> > 
> > Not yet.  That is one of the reasons why it says that it would be
> > understandable if they are not part of the standard.  The reasons for
> > mentioning them at all is that it may benefit the team making the proposal to
> > the committee to be aware that there is on-going research and development in
> > this area.  It may be that there should be no operator notation for comparison
> > until the various candidates have been evaluated in the field.  The candidates
> > that have been suggested include set/segment, certainty, and principal value.
> Have you plans to submit something for peer reviewed
> publication?

Interest but no plans.  We do not have experience or skill in that process.

>  Or does that await your commercial release?

Definitely.

We are taking a great risk by the premature disclosure to the C++ standardization effort.  We aren't worried about competition -- the more the merrier.  We are worried about premature evaluation such that when the complete system description is available people will already have made up their minds and dismissed it due to a shallow/incomplete description such as is going on re the standardization proposal.

After all we are going to be making claims that violate most of the existing body of knowledge about interval arithmetic.  So we'll be easy to dismiss as cranks.

> I suspect several likely referees are reading these discussions.

I do not doubt it.

> 
> In my opinion, not-yet-published views deserve consideration, but
> consideration more careful than published concepts.

Of course.

> I suspect the level of community oversight may be higher
> in this forum than in many review processes, so I am open
> to a position paper on the principal value model.

In addition to lack of skill and experience, we also lack bandwidth.  You want to volunteer?  An objective and thorough white paper would be quite valuable to us.
 
> >> Also you are saying this model appeals to a "much wider
> >> audience"; could you give some examples where it is used?
> > 
> > At present it is not used AFAIK.  But one of the claims is that the PV model
> > makes intervals suitable for direct replacement of built-in floating point
> > types (in the sense of the Liskov substitution principle).   If that claim is
> > valid then the PV model makes intervals appeal to every C++ programmer who
> > uses built-in floating point types.
> AFAIK = As Far As I Know?

Yes.

> 
> >> Later, you say that "empty interval arguments should always
> >> yield false". This statement contradicts your line-segment
> >> model, since the empty set is included in every set.
> > 
> > What is the contradiction?  Equivalence and ordering comparisons do not deal
> > with subsets.  The functions in() and contains() should affirm that an empty
> > interval is included in every other interval.  But the empty interval is
> > neither less then nor more than any other interval.  And given the the empty
> > interval is not part of the machine number line one can claim that it is Not
> > an Interval (NaI).  So, just as NaN is not equal to any other floating point
> > value, not even an identical NaN, NaI should not be equal to any other
> > interval, not even an identical NaI.
> > 
> > In fact this conflict illustrates some of the problems caused by the
> > interval-as-set terminology.  It suggests that an empty interval is an empty
> > set, and so seq(empty,empty) should return true.  But the interval-as-segment
> > terminology suggests that an empty interval is not a segment.  (Nor is it a
> > point.  The width is not zero, it is NaN).
> In my Real Analyis class many years ago, I was told that inf(empty) =
> +infinity.

Presumably that was before in-band error values such as NaN were available.  That kind of convention is still in use in both C and C++ in the <math.h> symbol HUGE_VAL.  In specific situation you describe with lower(empty)>upper(empty) the properties indicate that empty is an improper interval, so while the properties were well defined, they were not meaningful.  

Is that a violation of interval consistency?  Is that a lie?  IMHO it is, but only a white one -- i.e. not hidden and justified by necessity.

>  I do NOT suggest that means empty == whole, but it might suggest
> width(empty) = infinity.

I suggest that extension of that concept indicates width(empty) = -infinity rather han +infinity.  That difference is probably the more recent availability of affine systems whereas most legacy systems that even have an infinity were projective.

> 
> The answer to width(empty) = ? Does not matter.  What matters is that we are
> able to specify operator returns which
>    are internally consistent, and
>    do not lead to violations of containment.
> The best (only?) way to achieve that is to have a single, sound underlying
> model.

That's a blivet.  Certainly soundness of the underlying theory is a necessity.  But the theory cannot have a single conceptual model because there is more than one way to view/use/interpret an interval.  There are at least two mutually incompatible such models widely used within the existing community of interval practitioners.  I expect we will have to settle for well defined operations over intervals, and all based upon outward rounding and containment.  But we'll have a variety of operations not all combinations of which will be useful.

Formally we have to expect that because any useful interval system is as least as powerful as basic arithmetic [Godel] and the language of which it is a part is complete [Turing].

> 
> > So based upon the interval-as-segment terminology seq(empty,empty) should
> > return false.
> > 
> > Is there a case to be made that empty intervals are less than or greater then
> > non-empty intervals?
> TRUE means, "I am sure this is true," and FALSE means, "I cannot assert
> TRUE."  That is your convention?

That is the convention I suggest should be used.  I'll take the blame for it, but I would be hesitant to take credit for it.  It is common in many domains.

> 
> >> It also goes against your neighborhood model, since the
> >> classical interpretation is: if something is not possible,
> >> then its contrary is certain (and reciprocally).
> > 
> > The classical interpretation fails anytime a NaN is encountered because they
> > are not part of the number line.  Similarly empty intervals are not intervals
> > (they need have no sensible bounds nor center/radius).  Moreover the classical
> > interpretation cannot be applied to intervals at all because there are more
> > relationships among intervals than there are among points on the machine
> > number line.
> NaN is taking a critical role in this discussion.

Not as a necessary component of intervals, but as a model for the consistent extension of a system.  I raised the the topic of NaN to indicate that the classical interpretation of logic (where !false implies true) already does not apply to modern numerics.  So insisting upon the classical interpretation within interval operations is a serious mistake.

> There is some sentiment to minimize dependence on NaN in the interests of
> speed, although my understanding of the examples is missing.  One problem,
> as I recall, is that in IEEE 754 arithmetic, -infinity + infinity yields
> NaN, while we might prefer, at least in outwardly directed rounding modes,
> to get whole.

I understand that desire and can sympathize.  But it is a containment violation.  The interval [-inf,+inf] does not contain all possible results of operations on intervals.  In only contains the numeric results.  So using it in place of the IEEE-defined result is unacceptable if the goal is complete rigor.

If one is willing to ignore non-numeric results then [-inf,+inf] is a panacea.  But ignoring non-numeric results is not acceptable because it to bad software.  This is directly related to one of the aspects of the incompleteness of Pryce's cset paper.  I don't know where we've gotten on that, but I will find out.

> 
> I recall someone telling me that IEEE 754 NaN admits multiple bit patterns.
> Hence, rather than overloading NaN as we seem to be doing, we might have
> several NaNs, each with distinct meanings, all of which propagate as IEEE
> 754.  I suspect that is a BAD idea because propagation of different NaN bit
> patterns is probably not portable across hardware.

It is not yet portable.  But it will be.  It is not an important issue though because given two NaN inputs getting either out is good enough even if arbitrary.

IMHO we should not worry about bad hardware.  We should be designing good software and then building machines to execute it.  We should not be designing (and limiting) software to tell bad hardware what to do [Dijkstra '72 I think].

> 
> The standard should specify the syntax and semantics, but not the
> implementation.  However, it would be unwise to specify something whose best
> implementation is "too" expensive, whatever "too" is.

Why?

Changing rounding modes is extremely expensive on commodity hardware.  We can show a trivial hardware change that eliminates the need for mode changes and thus eliminates all of the pipeline flushes that plague interval implementations.  It only requires a single, non-sticky bit in the FPU status register and a tiny amount of logic.  If performance were a grave concern it would be quickly adopted.  But there is little interest in the public discussions about it, even in math fora.

If some CPUs don't handle NaNs quickly, that's too bad for those CPUs.  Other CPUs will handle them quickly.  Any other approach will crippled interval sofware by embedding (and thus tacitly approving) support for bad CPU designs.

> Much of this NaN
> discussion probably does not belong in the standard, although having it
> available for implementers in another form should be a big help in having
> the proposed standard accepted.  This discussion is VERY helpful in
> formulating a wise specification.
> 
> It sounds to me as though reliance on the properties of IEEE 754 NaN buys us
> so many benefits, that we probably prefer to accept any performance penalty
> for now and add to the chorus for improved performance for any NaN
> processing in future hardware.

That is my opinion.

> 
> Does anyone have hard experimental data on the performance costs of NaN?

It does not matter how bad they are today, so those performance numbers are irrelevant to the issues under discussion.

However, as a point of reference, recent intel CPUs are unbelievably bad.  They are documented to be 1000x slower on special values (such as NaN, inf, denorm) than on non-special values.  AMDs recent CPUs are orders of magnitude better on special values, even though their handling of special values has slipped somewhat over time.

> > 
> > I quite understand.  If you believe that the inclusion of PV comparisons would
> > inhibit the development of certified computations you should definitely not
> > add them to your standardization proposal.
>
> I'm intrigued.  I insist on "Thou shalt not lie."  I favor simple.  I favor
> considering carefully constructs which lead the unwary to write code that
> appears to lie.
> 
> Let's continue the discussion.  Who else has opinions?

I think the dynamics of the std-interval forum are not as vigorous as one might find in a typical discussion forum.  That might be on purpose.

-- Lee Winter
From first.i.last@comcast.net Sun Jun  4 10:29:13 2006
Received: from rwcrmhc13.comcast.net (rwcrmhc13.comcast.net [216.148.227.153])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k54HTCjd030580
	for <std-interval@compgeom.poly.edu>; Sun, 4 Jun 2006 10:29:13 -0700
Received: from rmailcenter88.comcast.net ([204.127.197.188])
          by comcast.net (rwcrmhc13) with SMTP
          id <20060604174247m1300gau16e>; Sun, 4 Jun 2006 17:42:52 +0000
Received: from [71.192.84.143] by rmailcenter88.comcast.net;
	Sun, 04 Jun 2006 17:42:47 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Date: Sun, 04 Jun 2006 17:42:47 +0000
Message-Id: <060420061742.14740.44831B970008326C0000399422092299279B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
Subject: [std-interval] Address error
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 04 Jun 2006 17:29:13 -0000

 -------------- Original message ----------------------
From: first.i.last@comcast.net

> Dear Prof. Corliss,

[...]

The message was addressed incorrectly.  Please discard.

-- Lee Winter
 
From rbk@louisiana.edu Sun Jun  4 10:59:04 2006
Received: from centrmmtao02.cox.net (centrmmtao02.cox.net [70.168.83.82])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k54Hx4jd030626
	for <std-interval@compgeom.poly.edu>; Sun, 4 Jun 2006 10:59:04 -0700
Received: from Inspiron-8200 ([68.226.133.93]) by centrmmtao02.cox.net
          (InterMail vM.6.01.06.01 201-2131-130-101-20060113) with SMTP
          id <20060604181240.DYUF12772.centrmmtao02.cox.net@Inspiron-8200>
          for <std-interval@compgeom.poly.edu>;
          Sun, 4 Jun 2006 14:12:40 -0400
Message-Id: <2.2.32.20060604181211.01634824@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sun, 04 Jun 2006 13:12:11 -0500
To: For discussions concerning the C++ standardization of
	intervals<std-interval@compgeom.poly.edu>
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: Re: [std-interval] Interval comparison operators
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 04 Jun 2006 17:59:04 -0000

Lee,

At 05:15 PM 6/4/2006 +0000, first.i.last@comcast.net wrote:
>Dear Prof. Corliss,
>
.
.
.

>
>> 
>> I'd even allow a modest delay in adoption, if we can
>> develop a consensus on what "right" is.
>
>I have hopes in that direction, but am skeptical.  Do you have reason to
believe that a consensus is possible?  My understanding is that the FORTRAN
proposal failed due to conflicts within the interval community.  I have no
evidence to indicate that those conflicts have been resolved.  I fear that
the disclosure of our approach to the issues may create additional conflicts.
>

The failure within the Fortran community was more complicated than
that, although lack of consensus within the interval community 
was a factor.  I am much more optimistic with the C++ proposal, due
to various facets of the discussion.

My view is that, if there is a hopeless lack of consensus, it may
indicate that there isn't a single "right" way, but choosing 
a particular way and having a standard is better than having none.
However, we should strive to maximize the utility of the language
in the standard.

Sincerely,

Baker
  

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------


From george.corliss@marquette.edu Sun Jun  4 18:26:34 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k551QXjd031104
	for <std-interval@compgeom.poly.edu>; Sun, 4 Jun 2006 18:26:34 -0700
Received: from its-exfe3.marqnet.mu.edu ([134.48.20.166]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 4 Jun 2006 20:40:14 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe3.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 4 Jun 2006 20:40:14 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Sun, 04 Jun 2006 20:40:04 -0500
Subject: Re: [std-interval] list of functions for intervals
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C0A8F5A4.9C0%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] list of functions for intervals
Thread-Index: AcaIQPeaNhYHmvQ0EdqSfwAKlZKJfg==
In-Reply-To: <060420060030.15630.4482299F00049F7C00003D0E22007614389B9C0E04D207D29B9C9D0700@comcast.net>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 05 Jun 2006 01:40:14.0110 (UTC)
	FILETIME=[FDA0DBE0:01C68840]
cc: ISL List <isl@interval.louisiana.edu>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 01:26:34 -0000

Lee and all,

Excellent.  I like your proposal better than mine, but (of course?) I have
some questions for you and the list.  I had in mind a minimalist standard;
you are more ambitious.  If we can summon support for an ambitious standard,
LET'S DO IT. 


Q1, p. 1, par. 2.  "Standardization of the interval functions should not
mandate that containment, which is a QoI issue."  Do you mean containment in
the sense that the set of interval standard functions should contain the
floating point ones?  Or that (shudder) containment of values returned
should not be mandated?

Q2, par. 4.  "the result of an interval version of a <cmath> function is the
hull of all of the results ..." is close to the cset definition, except that
csets enclose also results of limits.  Several of us are preparing a cset
draft for posting here within a few days.  _IF_ csets are accepted, say, for
divide, it would be natural to use them to specify results of cmath
functions, too?  I'd have to look more closely for differences in returned
values.

Q3, par. 7. "existence of a type designed to hold multiple instances of
values"  Such a type could improve the practicality of our cset proposal,
too.  Thank you!

Q4, par. 9. "wrong" and "nacceptably wide"
--> "wrong" and "unacceptably wide"


Q5. isnan() and nan().  I see where you are going with the "Set of interval
functions must contain the set of floating-point functions, and interval
functions on singleton intervals must agree with their floating-point
counterpart" argument.  I'm sympathetic.

It is a mistake for a standard to give too detailed an implementation, but
many are concerned that the standard also should not mandate a slow
implementation.  I assume we want to represent an <empty> set and probably a
<whole> set.  If we use [NaN, NaN] as an internal, opaque implementation of
<empty>, there are very few performance-robbing tests.  If an implementation
DOES decide to use NaN to represent <empty>, I guess isnan() does no harm,
and I guess nan() would be the equivalent of <empty>.

Q6.  Additions?
   interval square( interval X )?

Many interval coders are accustomed to
   double mag( interval X ); // or magnitude := max abs(X)
   double mig( interval X ); // or mignitude := min abs(X),
where "abs(X)" is the interval abs as I imagine you'd specify it.

Q7. Function forms of operators: Hooray!  Then the C++ interval is (nearly)
a C interval library plus a C++ wrapper class?  Then I can use it if I am
restricted to C, for some reason.  Or is that an empty opportunity?

I appreciate you suggesting that implementations are not too hard.  In
addition, we should note there are at least a couple quite good (tight)
implementations of most of the common elementary functions, more evidence
that a vendor's barrier to entry is not high.

My reservation is that by putting more advanced tools (your twin functions)
in the hands of people inexperienced with interval algorithms, you provide
more opportunities for screwing up :-)

(In preparing this response, I have consulted on some, but not all, of these
points with John Pryce, R. Baker Kearfott, Ned Nedialkov, and Spencer
Smith.)

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


On 6/3/06 7:30 PM, "first.i.last@comcast.net" <first.i.last@comcast.net>
wrote:

>  -------------- Original message ----------------------
> From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
>> Dear all,
>> 
>> We have been thinking about the list of floating-point functions
>> which we could propose an interval version for.
>> More precisely, we have looked at the current list of floating-point
>> functions from the latest draft of C++0x
> 
> [...] 
> 
>> What do you think of these lists ?
>> Is something important excluded ?
>> Is there anything that should be excluded ?
>> 
>> Note that existing implementations do not necessarily offer all
>> proposed functions, so any comment on the implementation
>> difficulty (for interval<float>, interval<double> and
>> interval<long double>) would be appreciated.
> 
> Attached is a file containing comments on the issues you raised and suggested
> specifications for many of the functions at issue.  Having studied this issue
> in great detail, implemented all of the <cmath> functions, and designed
> implementations of the c99 functions I can assure you that the implementation
> of the interval versions of the <cmath> functions, including disjoint results,
> is quite reasonable.
> 
> Using typical elementary functions as a benchmark (trig, hyperbolics, and
> exponentials) all but two of the c99 functions require similar or lesser
> implementation effort.  We are still studying the recalcitrant pair of
> functions, beta() and ellint_1(), with an eye to efficient and robust
> implementation.
> 
> The attached document is a summary aimed at raising issues and identifying
> areas meriting additional discussion rather than a comprehensive specification
> with endless detail but no rationale.  Therefore readers who are only
> concerned with concrete suggestions should not read it.
> 
> -- Lee Winter
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval


From j.d.pryce@ntlworld.com Sun Jun  4 21:48:00 2006
Received: from mtaout03-winn.ispmail.ntl.com (mta09-winn.ispmail.ntl.com
	[81.103.221.49])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k554lxjd031288
	for <std-interval@compgeom.poly.edu>; Sun, 4 Jun 2006 21:47:59 -0700
Received: from aamtaout01-winn.ispmail.ntl.com ([81.103.221.35])
	by mtaout03-winn.ispmail.ntl.com with ESMTP
	<20060605050143.TWYS27969.mtaout03-winn.ispmail.ntl.com@aamtaout01-winn.ispmail.ntl.com>;
	Mon, 5 Jun 2006 06:01:43 +0100
Received: from 142kingshill.ntlworld.com ([86.21.71.156])
	by aamtaout01-winn.ispmail.ntl.com with ESMTP
	<20060605050143.PZZE19763.aamtaout01-winn.ispmail.ntl.com@142kingshill.ntlworld.com>;
	Mon, 5 Jun 2006 06:01:43 +0100
Message-Id: <6.2.5.6.0.20060604213551.02ecd4f0@ntlworld.com>
X-Mailer: QUALCOMM Windows Eudora Version 6.2.5.6
Date: Sun, 04 Jun 2006 23:04:43 +0100
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>,
	"R. Baker Kearfott" <rbk@louisiana.edu>
From: Dr John Pryce <j.d.pryce@ntlworld.com>
Subject: Re: [std-interval] Interval comparison operators
In-Reply-To: <2.2.32.20060604181211.01634824@pop.louisiana.edu>
References: <2.2.32.20060604181211.01634824@pop.louisiana.edu>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"; format=flowed
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 04:48:00 -0000

Lee, and participants in this group

At 19:12 04/06/06, R. Baker Kearfott wrote:
>My view is that, if there is a hopeless lack of consensus, it may
>indicate that there isn't a single "right" way, but choosing
>a particular way and having a standard is better than having none.
>However, we should strive to maximize the utility of the language
>in the standard.

Like Baker, I feel optimistic that a consensus will emerge. I 
STRONGLY agree with Baker's paragraph above.

Lee, you have written eloquently of the Principal Value (PV) model 
that you have been working on. If it is as different in 
concept/philosophy/goals (I don't know enough about it to know which 
of those words are most appropriate) from the "classical interval 
model" as you say, then certainly it needs a different standard from 
one that supports the classical model. Therefore, I do not see you as 
in conflict with the classical intervallers, but as complementary.

However I speak as the principal author of containment set (cset) 
theory for the last few years. Csets are NOT the most widely held 
view of classical intervals, and when I started working on them for 
Bill Walster under contract to Sun around 2001 they were generally 
seen as an eccentricity that would soon die out.

Evaluation of cset theory by the interval community was delayed 
slightly by commercial confidentiality. That prohibited putting some 
aspects of csets in the public domain - mainly Sun's implementation 
detail. The main reason for delay was that Bill and I had serious 
disagreement, not over what a cset-based interval implementation 
should do, but about what the results *meant*. I believed, and still 
do, that Bill's philosophy of csets at that time was mathematically 
inconsistent. As a result we could not agree on a paper to submit to 
the open literature. We spoke at conferences etc, but some of the 
assertions we made were incompatible, which was not good for credibility.

Maybe it was a blessing in disguise, because then I joined the ISL 
project steering committee, and working with 3 guys who have jointly 
over 50 years interval programming experience, plus a professional 
software engineer, widened my outlook so that the paper I eventually 
wrote, Pryce and Corliss "Interval arithmetic with containment sets" 
(2006), submitted to "Computing", see
     http://homepage.ntlworld.com/j.d.pryce/isloct05/IntvlArithCsets.pdf
was far clearer and more concise than it would otherwise have been.

And, to my surprise, my ISL colleagues decided of their own accord 
that a cset-based interval system was the one they preferred, though 
the well-known packages they had up to then used, and in one case 
written, were based on what I call the Simple System.

How did this come about? I believe it was because I had been able to 
write an account that showed such a system is
- rock-solid mathematically,
- actually useful.

Both are necessary conditions for acceptance in this corner of 
scientific computing (sadly, not sufficient). I urge you to move the 
task of writing up what PV intervals are all about to near the top of 
your priorities, if not the actual top. And get it into the open 
literature so that people can pull your ideas to pieces (as my cset 
ideas have been for several years), force you to refine them, and 
eventually be convinced you are making sense.

I find many things you write very weird or downright false (e.g. 
distinctions between line segments and sets, and tests on the empty 
set). That is because I am matching it against my model, which is 
firmly based on classical set theory. You have work to do to convince 
me, but my mind is open. As I am a mathematician, the "rock-solid 
mathematically" interests me more, initially, than the "actually 
useful". I think many people with more interval experience and/or 
more influence in the scientific world than I would agree with me.

PV intervals must be mathematically consistent, or they will die. But 
there is more than that. You must have an underlying purpose for 
them, or philosophy about them, that explains why this consistent bit 
of mathematics actually helps humans solve real life problems. From 
what you write, you are a fair way towards having both, but you won't 
convince the world unless you WRITE IT UP for public evaluation.

Best wishes for that project.

John Pryce

From first.i.last@comcast.net Mon Jun  5 03:03:55 2006
Received: from rwcrmhc14.comcast.net (rwcrmhc14.comcast.net [204.127.192.84])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55A3sjd031623
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 03:03:54 -0700
Received: from rmailcenter88.comcast.net ([204.127.197.188])
          by comcast.net (rwcrmhc14) with SMTP
          id <20060605101748m14007ot4le>; Mon, 5 Jun 2006 10:17:48 +0000
Received: from [71.192.84.143] by rmailcenter88.comcast.net;
	Mon, 05 Jun 2006 10:17:46 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] extra functions for intervals
Date: Mon, 05 Jun 2006 10:17:46 +0000
Message-Id: <060520061017.1343.448404CA0003420D0000053F22092299279B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="NextPart_Webmail_9m3u9jl4l_1343_1149502666_0"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 10:03:55 -0000


--NextPart_Webmail_9m3u9jl4l_1343_1149502666_0
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

 -------------- Original message ----------------------
From: George Corliss <George.Corliss@marquette.edu>
> Lee and all,

[...]

> Q1, p. 1, par. 2.  "Standardization of the interval functions
> should not mandate that containment, which is a QoI issue."
>  Do you mean containment in the sense that the set of
> interval standard functions should contain the floating point
> ones?  Or that (shudder) containment of values returned
> should not be mandated?

The latter.  The standard should require that the mathematically correct answer be contained within the interval result.  However, the result of the corresponding floating point function can be arbitrarily far from the mathematically correct answer (QoI of the FP library).  Thus requiring that the FP result be contained within the interval result can have an adverse effect upon the sharpness of the interval result.  So it comes down to a choice between the QoI of the interval implementation versus the consistency between the FP and interval implementations.

We choose consistency for our implementation.  But as much we have a very strong preference for systems that are consistent, we do not believe the standard should make that consistency mandatory because we suspect it would operate to the detriment of the QoI of the interval library.  So we reluctantly suggest that it be left as a recommendation rather than a requirement..  (I would love for 
the consensus to form the opposite conclusion!)

> Q2, par. 4.  "the result of an interval version of a <cmath>
> function is the hull of all of the results ..." is close to the cset
> definition, except that csets enclose also results of limits.

And except that cset theory as I comprehend it considers only the numeric values rather than the full spectrum of function results.

> Several of us are preparing a cset draft for posting here
> within a few days.  _IF_ csets are accepted, say, for
> divide, it would be natural to use them to specify results of
> cmath functions, too?  I'd have to look more closely for
> differences in returned values.

We would love the safe expression rearrangement that a comprehensive cset theory would allow.  And of course that rearrangement should be viable for elementary functions.  So it would appear to be a natural extension of the theory.  But I 
am concerned about the completeness of the theory.  There are function domain issues, the handling of special vaules (Nan & Inf), and the mapping between the real and machine number lines.

The cset issue is certainly bigger than the <cmath> discussion, and might be bigger (or longer) than the standardization discussion. 

> Q4, par. 9. "wrong" and "nacceptably wide"
> --> "wrong" and "unacceptably wide"

Yes.

> Q5. isnan() and nan().  I see where you are going with the
> "Set of interval functions must contain the set of
> floating-point functions, and interval functions on singleton
> intervals must agree with their floating-point counterpart"
> argument.  I'm sympathetic.
> 
> It is a mistake for a standard to give too detailed an
> implementation, but many are concerned that the
> standard also should not mandate a slow implementation.

On whose hardware?  We intend to buy hardware that will execute a good implementation quickly.  People who buy slow hardware should not blame the standard.

Certainly the standard should not mandate an implementation that _cannot_ be executed efficiently.  But we are far from that.

Historical note: One of the very contentious issues in the original adoption of the IEEE-754 standard was that some major vendors (IBM, DEC, etc.) felt that the extra features such as NaN, Inf, and especially denormal numbers would slow down the processing of normal numbers.  The story is that DEC lost a lot of credit as 
a leader in the field when their rep stated categorically that the proposed features _could_not_ be implemented efficiently.  Of course he was wrong, Intel already had an efficient implementation.

Let us not take counsel of our fears.

> I assume we want to represent an <empty> set and
> probably a <whole> set.  If we use [NaN, NaN] as an
> internal, opaque implementation of <empty>, there are
> very few performance-robbing tests.

My understanding is that Sun choose NaNs for empty due to the similarity of the propagation rules for NaN and empty.  Which means that same thing you said above.

But the standard should neither prohibit nor mandate any implementation of empty.  It should describe the properties of empty completely.  In our view all of those properties (lower, upper, midpt, radius, diameter, etc.) are not numbers.  So they should be NaN or HUGE_VAL depending upon the platform capabilities.

> If an implementation DOES decide to use NaN to represent
> <empty>, I guess isnan() does no harm, and I guess nan()
> would be the equivalent of <empty>.

Is there a problem with that?  We tend to view it as a feature.  In fact we support a variety of NaN-based values including:
    "none"   empty
    "init"      uninitialized
    "dead"   destroyed
    "div0"    division by zero
    "imag"   sqrt(negative)
    "EIO "    IO error (read)
    "EDOM" domain error
    "ERNG"  range error

All of these are treated as empty.
    
> 
> Q6.  Additions?
>    interval square( interval X )?

It is a very specific solution to a widespread problem: inconsistent evaluation of dependencies.  Sun uses automatic identity checking which is a slightly more general solution.

There should be a general solution such as rearrangement at compile time and dependency tracking at run-time.  Note that some kind of ru-time is inevitable because of separate compilation and/or irreducible expressions.

> 
> Many interval coders are accustomed to
>    double mag( interval X ); // or magnitude := max abs(X)
>    double mig( interval X ); // or mignitude := min abs(X),
> where "abs(X)" is the interval abs as I imagine you'd specify it.

We have a "little list" but the functions are not part of <cmath>, which was the subject the proposal team wanted addressed.  I attached a list of examples to this message for the benefit of those interested.

> 
> Q7. Function forms of operators: Hooray!  Then the
> C++ interval is (nearly) a C interval library plus a C++
> wrapper class?

Yes.  There are still template and overloading problems that require a set of adapter declarations, but the layer we implemented is quite thin.

> Then I can use it if I am restricted to C, for some reason.

Or FORTRAN.

>  Or is that an empty opportunity?

In terms of new code the opportunity is probably not large for general applications.  For embedded applications where reliability is very highly prized, we believe there will be substantial demand.

And in terms of maintaining and enhancing existing sofware the opportunity is quite large.

> 
> I appreciate you suggesting that implementations are not
> too hard.  In addition, we should note there are at least a
> couple quite good (tight) implementations of most of the
> common elementary functions, more evidence that a
> vendor's barrier to entry is not high.

We do not have information on the effort required to produce sharp implementations.  But ours is designed for extreme portability, complete consistency (which blunts some results), and maximum rigor with little or no concern for performance.  We expect fast/tight implementations on specific plaforms to be about the same level of difficulty.

> My reservation is that by putting more advanced tools
> (your twin functions) in the hands of people inexperienced
> with interval algorithms, you provide more opportunities
> for screwing up :-)

Other than the multiplication of entities, part of which is mitigated by a simple naming convention, how do twin functions pose a risk?

We have the expectation (based on a small sample of users) that they solve the problem of user frustration with very wide results leading to abandonment of the interval forms.  For example, a user who gets what he considers silly results, such as interval::f() returning [-inf +inf], is tempted to revert to using std::f() because he has no interval alternative that gives him an answer he considers useful.  That is the threat the twin functions tend to counter.

-- Lee Winter

--NextPart_Webmail_9m3u9jl4l_1343_1149502666_0
Content-Type: application/x-tar; name="extras.zip"
Content-Transfer-Encoding: base64

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
AAEAOAAAAAESAAAAAA==

--NextPart_Webmail_9m3u9jl4l_1343_1149502666_0--
From guillaume.melquiond@ens-lyon.fr Mon Jun  5 06:39:09 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55Dd8jd032214
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 06:39:08 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 97EF115B95A
	for <std-interval@compgeom.poly.edu>;
	Mon,  5 Jun 2006 15:53:14 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 16468-50 for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 15:53:14 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 11DB715B957
	for <std-interval@compgeom.poly.edu>;
	Mon,  5 Jun 2006 15:53:13 +0200 (CEST)
Subject: Re: [std-interval] list of functions for intervals
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <060420060030.15630.4482299F00049F7C00003D0E22007614389B9C0E04D207D29B9C9D0700@comcast.net>
References: 
	<060420060030.15630.4482299F00049F7C00003D0E22007614389B9C0E04D207D29B9C9D0700@comcast.net>
Content-Type: text/plain; charset=ISO-8859-1
Date: Mon, 05 Jun 2006 15:52:58 +0200
Message-Id: <1149515579.6834.58.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 13:39:09 -0000

Le dimanche 04 juin 2006 à 00:30 +0000, first.i.last@comcast.net a
écrit :

> The attached document is a summary aimed at raising issues and
> identifying areas meriting additional discussion rather than a
> comprehensive specification with endless detail but no rationale.
> Therefore readers who are only concerned with concrete suggestions
> should not read it.

If I correctly understand your document, you have extended the atan2
function as three interval functions. For Y=[-1,1] and X=[-2,-1], they
will answer:

        twin_atan2  => [-Pi,-Pi/2] | [Pi/2,Pi]
        atan2_sharp => [Pi/2,3Pi/2]
        atan2_blunt => [-Pi,Pi]

In our current proposal, we have preferred to provide less functions yet
be more generic; this idea was inspired by interval arithmetic libraries
like gaol. First there is an atan2 function which is the natural
interval extension, namely your atan2_blunt function. Second there is a
relational function atan2_rel defined as:

        atan2_rel(Y,X,R) contains { r in R ; cos(r) in X and sin(r) in
        Y }

Because of its two arguments, the atan2 example may not be the clearest
one. So let's consider the acos function instead.two interval functions
are defined:

        acos(X) contains { acos(x) ; x in X } = { r in [0,Pi] ; cos(r) in X }
        acos_rel(X,R) contains { r in R ; cos(r) in X }

Note: if Pi was exactly representable by a floating-point number, only
one function would be needed. The result of acos(X) would be defined as
acos_rel(X,[0,Pi]).

Why provide this function acos_rel? Because it is needed when doing
global optimization and constraints programming. Indeed, after doing
some forward and backward propagations, you usually come to the point
where you have an equality "b = cos(a)" and constraints "a in A" and "b
in B". Then you can compute improved constraints:

        B' <- intersection(cos(A), B)
        A' <- acos_rel(B, A)

If acos_rel was not available, the second assignation could be written
A' <- intersection(acos(B), A). But the set A' would then be wrong if
the initial sets were A = B = [-1,1].

Best regards,

Guillaume

From rmoore17@columbus.rr.com Mon Jun  5 07:00:32 2006
Received: from ms-smtp-04.ohiordc.rr.com (ms-smtp-04.ohiordc.rr.com
	[65.24.5.138])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55E0Wjd032245
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 07:00:32 -0700
Received: from Moore (cpe-65-24-104-31.columbus.res.rr.com [65.24.104.31])
	k55EEPb2002852	for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 10:14:27 -0400 (EDT)
Message-ID: <000301c688aa$76647230$0202a8c0@Moore>
From: "Ray Moore" <rmoore17@columbus.rr.com>
To: <std-interval@compgeom.poly.edu>
References: <200606051004.k55A44jf031635@compgeom.poly.edu>
Date: Mon, 5 Jun 2006 10:15:13 -0400
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
X-Virus-Scanned: Symantec AntiVirus Scan Engine
Subject: [std-interval] Re: Std-interval Digest, Vol 5, Issue 5
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 14:00:32 -0000

John and George,

Thanks for the link to your paper "Interval arithmetic with containment 
sets" (2006), submitted to Computing.
It is a fine effort. I think you are on the right track with containment 
sets.
Good luck with the ISL Project !

Ray Moore


----- Original Message ----- 
From: <std-interval-request@compgeom.poly.edu>
To: <std-interval@compgeom.poly.edu>
Sent: Monday, June 05, 2006 6:04 AM
Subject: Std-interval Digest, Vol 5, Issue 5


> Send Std-interval mailing list submissions to
> std-interval@compgeom.poly.edu
>
> To subscribe or unsubscribe via the World Wide Web, visit
> http://compgeom.poly.edu/mailman/listinfo/std-interval
> or, via email, send a message with subject or body 'help' to
> std-interval-request@compgeom.poly.edu
>
> You can reach the person managing the list at
> std-interval-owner@compgeom.poly.edu
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Std-interval digest..."
>
>
> Today's Topics:
>
>   1. Re: list of functions for intervals (George Corliss)
>   2. Re: Interval comparison operators (Dr John Pryce)
>   3. Re: extra functions for intervals (first.i.last@comcast.net)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Sun, 04 Jun 2006 20:40:04 -0500
> From: George Corliss <George.Corliss@marquette.edu>
> Subject: Re: [std-interval] list of functions for intervals
> To: For discussions concerning the C++ standardization of intervals
> <std-interval@compgeom.poly.edu>
> Cc: ISL List <isl@interval.louisiana.edu>
> Message-ID: <C0A8F5A4.9C0%George.Corliss@Marquette.edu>
> Content-Type: text/plain; charset="US-ASCII"
>
> Lee and all,
>
> Excellent.  I like your proposal better than mine, but (of course?) I have
> some questions for you and the list.  I had in mind a minimalist standard;
> you are more ambitious.  If we can summon support for an ambitious 
> standard,
> LET'S DO IT.
>
>
> Q1, p. 1, par. 2.  "Standardization of the interval functions should not
> mandate that containment, which is a QoI issue."  Do you mean containment 
> in
> the sense that the set of interval standard functions should contain the
> floating point ones?  Or that (shudder) containment of values returned
> should not be mandated?
>
> Q2, par. 4.  "the result of an interval version of a <cmath> function is 
> the
> hull of all of the results ..." is close to the cset definition, except 
> that
> csets enclose also results of limits.  Several of us are preparing a cset
> draft for posting here within a few days.  _IF_ csets are accepted, say, 
> for
> divide, it would be natural to use them to specify results of cmath
> functions, too?  I'd have to look more closely for differences in returned
> values.
>
> Q3, par. 7. "existence of a type designed to hold multiple instances of
> values"  Such a type could improve the practicality of our cset proposal,
> too.  Thank you!
>
> Q4, par. 9. "wrong" and "nacceptably wide"
> --> "wrong" and "unacceptably wide"
>
>
> Q5. isnan() and nan().  I see where you are going with the "Set of 
> interval
> functions must contain the set of floating-point functions, and interval
> functions on singleton intervals must agree with their floating-point
> counterpart" argument.  I'm sympathetic.
>
> It is a mistake for a standard to give too detailed an implementation, but
> many are concerned that the standard also should not mandate a slow
> implementation.  I assume we want to represent an <empty> set and probably 
> a
> <whole> set.  If we use [NaN, NaN] as an internal, opaque implementation 
> of
> <empty>, there are very few performance-robbing tests.  If an 
> implementation
> DOES decide to use NaN to represent <empty>, I guess isnan() does no harm,
> and I guess nan() would be the equivalent of <empty>.
>
> Q6.  Additions?
>   interval square( interval X )?
>
> Many interval coders are accustomed to
>   double mag( interval X ); // or magnitude := max abs(X)
>   double mig( interval X ); // or mignitude := min abs(X),
> where "abs(X)" is the interval abs as I imagine you'd specify it.
>
> Q7. Function forms of operators: Hooray!  Then the C++ interval is 
> (nearly)
> a C interval library plus a C++ wrapper class?  Then I can use it if I am
> restricted to C, for some reason.  Or is that an empty opportunity?
>
> I appreciate you suggesting that implementations are not too hard.  In
> addition, we should note there are at least a couple quite good (tight)
> implementations of most of the common elementary functions, more evidence
> that a vendor's barrier to entry is not high.
>
> My reservation is that by putting more advanced tools (your twin 
> functions)
> in the hands of people inexperienced with interval algorithms, you provide
> more opportunities for screwing up :-)
>
> (In preparing this response, I have consulted on some, but not all, of 
> these
> points with John Pryce, R. Baker Kearfott, Ned Nedialkov, and Spencer
> Smith.)
>
> Dr. George Corliss
> Electrical and Computer Engineering
> Marquette University
> P.O. Box 1881
> 1515 W. Wisconsin Ave.
> Milwaukee, WI 53201-1881
> George.Corliss@Marquette.edu
> 414-288-6599 (office); 288-4400 (GasDay);
>    288-6280 (Dept.); 288-5579 (fax)
> Office: Haggerty Engineering 296
> Www.eng.mu.edu/corlissg
>
>
> On 6/3/06 7:30 PM, "first.i.last@comcast.net" <first.i.last@comcast.net>
> wrote:
>
>>  -------------- Original message ----------------------
>> From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
>>> Dear all,
>>>
>>> We have been thinking about the list of floating-point functions
>>> which we could propose an interval version for.
>>> More precisely, we have looked at the current list of floating-point
>>> functions from the latest draft of C++0x
>>
>> [...]
>>
>>> What do you think of these lists ?
>>> Is something important excluded ?
>>> Is there anything that should be excluded ?
>>>
>>> Note that existing implementations do not necessarily offer all
>>> proposed functions, so any comment on the implementation
>>> difficulty (for interval<float>, interval<double> and
>>> interval<long double>) would be appreciated.
>>
>> Attached is a file containing comments on the issues you raised and 
>> suggested
>> specifications for many of the functions at issue.  Having studied this 
>> issue
>> in great detail, implemented all of the <cmath> functions, and designed
>> implementations of the c99 functions I can assure you that the 
>> implementation
>> of the interval versions of the <cmath> functions, including disjoint 
>> results,
>> is quite reasonable.
>>
>> Using typical elementary functions as a benchmark (trig, hyperbolics, and
>> exponentials) all but two of the c99 functions require similar or lesser
>> implementation effort.  We are still studying the recalcitrant pair of
>> functions, beta() and ellint_1(), with an eye to efficient and robust
>> implementation.
>>
>> The attached document is a summary aimed at raising issues and 
>> identifying
>> areas meriting additional discussion rather than a comprehensive 
>> specification
>> with endless detail but no rationale.  Therefore readers who are only
>> concerned with concrete suggestions should not read it.
>>
>> -- Lee Winter
>> _______________________________________________
>> Std-interval mailing list
>> Std-interval@compgeom.poly.edu
>> http://compgeom.poly.edu/mailman/listinfo/std-interval
>
>
>
> ------------------------------
>
> Message: 2
> Date: Sun, 04 Jun 2006 23:04:43 +0100
> From: Dr John Pryce <j.d.pryce@ntlworld.com>
> Subject: Re: [std-interval] Interval comparison operators
> To: For discussions concerning the C++ standardization of intervals
> <std-interval@compgeom.poly.edu>, "R. Baker Kearfott"
> <rbk@louisiana.edu>
> Message-ID: <6.2.5.6.0.20060604213551.02ecd4f0@ntlworld.com>
> Content-Type: text/plain; charset="us-ascii"; format=flowed
>
> Lee, and participants in this group
>
> At 19:12 04/06/06, R. Baker Kearfott wrote:
>>My view is that, if there is a hopeless lack of consensus, it may
>>indicate that there isn't a single "right" way, but choosing
>>a particular way and having a standard is better than having none.
>>However, we should strive to maximize the utility of the language
>>in the standard.
>
> Like Baker, I feel optimistic that a consensus will emerge. I
> STRONGLY agree with Baker's paragraph above.
>
> Lee, you have written eloquently of the Principal Value (PV) model
> that you have been working on. If it is as different in
> concept/philosophy/goals (I don't know enough about it to know which
> of those words are most appropriate) from the "classical interval
> model" as you say, then certainly it needs a different standard from
> one that supports the classical model. Therefore, I do not see you as
> in conflict with the classical intervallers, but as complementary.
>
> However I speak as the principal author of containment set (cset)
> theory for the last few years. Csets are NOT the most widely held
> view of classical intervals, and when I started working on them for
> Bill Walster under contract to Sun around 2001 they were generally
> seen as an eccentricity that would soon die out.
>
> Evaluation of cset theory by the interval community was delayed
> slightly by commercial confidentiality. That prohibited putting some
> aspects of csets in the public domain - mainly Sun's implementation
> detail. The main reason for delay was that Bill and I had serious
> disagreement, not over what a cset-based interval implementation
> should do, but about what the results *meant*. I believed, and still
> do, that Bill's philosophy of csets at that time was mathematically
> inconsistent. As a result we could not agree on a paper to submit to
> the open literature. We spoke at conferences etc, but some of the
> assertions we made were incompatible, which was not good for credibility.
>
> Maybe it was a blessing in disguise, because then I joined the ISL
> project steering committee, and working with 3 guys who have jointly
> over 50 years interval programming experience, plus a professional
> software engineer, widened my outlook so that the paper I eventually
> wrote, Pryce and Corliss "Interval arithmetic with containment sets"
> (2006), submitted to "Computing", see
>     http://homepage.ntlworld.com/j.d.pryce/isloct05/IntvlArithCsets.pdf
> was far clearer and more concise than it would otherwise have been.
>
> And, to my surprise, my ISL colleagues decided of their own accord
> that a cset-based interval system was the one they preferred, though
> the well-known packages they had up to then used, and in one case
> written, were based on what I call the Simple System.
>
> How did this come about? I believe it was because I had been able to
> write an account that showed such a system is
> - rock-solid mathematically,
> - actually useful.
>
> Both are necessary conditions for acceptance in this corner of
> scientific computing (sadly, not sufficient). I urge you to move the
> task of writing up what PV intervals are all about to near the top of
> your priorities, if not the actual top. And get it into the open
> literature so that people can pull your ideas to pieces (as my cset
> ideas have been for several years), force you to refine them, and
> eventually be convinced you are making sense.
>
> I find many things you write very weird or downright false (e.g.
> distinctions between line segments and sets, and tests on the empty
> set). That is because I am matching it against my model, which is
> firmly based on classical set theory. You have work to do to convince
> me, but my mind is open. As I am a mathematician, the "rock-solid
> mathematically" interests me more, initially, than the "actually
> useful". I think many people with more interval experience and/or
> more influence in the scientific world than I would agree with me.
>
> PV intervals must be mathematically consistent, or they will die. But
> there is more than that. You must have an underlying purpose for
> them, or philosophy about them, that explains why this consistent bit
> of mathematics actually helps humans solve real life problems. From
> what you write, you are a fair way towards having both, but you won't
> convince the world unless you WRITE IT UP for public evaluation.
>
> Best wishes for that project.
>
> John Pryce
>
>
> ------------------------------
>
> Message: 3
> Date: Mon, 05 Jun 2006 10:17:46 +0000
> From: first.i.last@comcast.net
> Subject: Re: [std-interval] extra functions for intervals
> To: For discussions concerning the C++ standardization of intervals
> <std-interval@compgeom.poly.edu>
> Message-ID:
> <060520061017.1343.448404CA0003420D0000053F22092299279B9C0E04D207D29B9C9D0700@comcast.net>
>
> Content-Type: text/plain; charset="us-ascii"
>
> -------------- Original message ----------------------
> From: George Corliss <George.Corliss@marquette.edu>
>> Lee and all,
>
> [...]
>
>> Q1, p. 1, par. 2.  "Standardization of the interval functions
>> should not mandate that containment, which is a QoI issue."
>>  Do you mean containment in the sense that the set of
>> interval standard functions should contain the floating point
>> ones?  Or that (shudder) containment of values returned
>> should not be mandated?
>
> The latter.  The standard should require that the mathematically correct 
> answer be contained within the interval result.  However, the result of 
> the corresponding floating point function can be arbitrarily far from the 
> mathematically correct answer (QoI of the FP library).  Thus requiring 
> that the FP result be contained within the interval result can have an 
> adverse effect upon the sharpness of the interval result.  So it comes 
> down to a choice between the QoI of the interval implementation versus the 
> consistency between the FP and interval implementations.
>
> We choose consistency for our implementation.  But as much we have a very 
> strong preference for systems that are consistent, we do not believe the 
> standard should make that consistency mandatory because we suspect it 
> would operate to the detriment of the QoI of the interval library.  So we 
> reluctantly suggest that it be left as a recommendation rather than a 
> requirement..  (I would love for
> the consensus to form the opposite conclusion!)
>
>> Q2, par. 4.  "the result of an interval version of a <cmath>
>> function is the hull of all of the results ..." is close to the cset
>> definition, except that csets enclose also results of limits.
>
> And except that cset theory as I comprehend it considers only the numeric 
> values rather than the full spectrum of function results.
>
>> Several of us are preparing a cset draft for posting here
>> within a few days.  _IF_ csets are accepted, say, for
>> divide, it would be natural to use them to specify results of
>> cmath functions, too?  I'd have to look more closely for
>> differences in returned values.
>
> We would love the safe expression rearrangement that a comprehensive cset 
> theory would allow.  And of course that rearrangement should be viable for 
> elementary functions.  So it would appear to be a natural extension of the 
> theory.  But I
> am concerned about the completeness of the theory.  There are function 
> domain issues, the handling of special vaules (Nan & Inf), and the mapping 
> between the real and machine number lines.
>
> The cset issue is certainly bigger than the <cmath> discussion, and might 
> be bigger (or longer) than the standardization discussion.
>
>> Q4, par. 9. "wrong" and "nacceptably wide"
>> --> "wrong" and "unacceptably wide"
>
> Yes.
>
>> Q5. isnan() and nan().  I see where you are going with the
>> "Set of interval functions must contain the set of
>> floating-point functions, and interval functions on singleton
>> intervals must agree with their floating-point counterpart"
>> argument.  I'm sympathetic.
>>
>> It is a mistake for a standard to give too detailed an
>> implementation, but many are concerned that the
>> standard also should not mandate a slow implementation.
>
> On whose hardware?  We intend to buy hardware that will execute a good 
> implementation quickly.  People who buy slow hardware should not blame the 
> standard.
>
> Certainly the standard should not mandate an implementation that _cannot_ 
> be executed efficiently.  But we are far from that.
>
> Historical note: One of the very contentious issues in the original 
> adoption of the IEEE-754 standard was that some major vendors (IBM, DEC, 
> etc.) felt that the extra features such as NaN, Inf, and especially 
> denormal numbers would slow down the processing of normal numbers.  The 
> story is that DEC lost a lot of credit as
> a leader in the field when their rep stated categorically that the 
> proposed features _could_not_ be implemented efficiently.  Of course he 
> was wrong, Intel already had an efficient implementation.
>
> Let us not take counsel of our fears.
>
>> I assume we want to represent an <empty> set and
>> probably a <whole> set.  If we use [NaN, NaN] as an
>> internal, opaque implementation of <empty>, there are
>> very few performance-robbing tests.
>
> My understanding is that Sun choose NaNs for empty due to the similarity 
> of the propagation rules for NaN and empty.  Which means that same thing 
> you said above.
>
> But the standard should neither prohibit nor mandate any implementation of 
> empty.  It should describe the properties of empty completely.  In our 
> view all of those properties (lower, upper, midpt, radius, diameter, etc.) 
> are not numbers.  So they should be NaN or HUGE_VAL depending upon the 
> platform capabilities.
>
>> If an implementation DOES decide to use NaN to represent
>> <empty>, I guess isnan() does no harm, and I guess nan()
>> would be the equivalent of <empty>.
>
> Is there a problem with that?  We tend to view it as a feature.  In fact 
> we support a variety of NaN-based values including:
>    "none"   empty
>    "init"      uninitialized
>    "dead"   destroyed
>    "div0"    division by zero
>    "imag"   sqrt(negative)
>    "EIO "    IO error (read)
>    "EDOM" domain error
>    "ERNG"  range error
>
> All of these are treated as empty.
>
>>
>> Q6.  Additions?
>>    interval square( interval X )?
>
> It is a very specific solution to a widespread problem: inconsistent 
> evaluation of dependencies.  Sun uses automatic identity checking which is 
> a slightly more general solution.
>
> There should be a general solution such as rearrangement at compile time 
> and dependency tracking at run-time.  Note that some kind of ru-time is 
> inevitable because of separate compilation and/or irreducible expressions.
>
>>
>> Many interval coders are accustomed to
>>    double mag( interval X ); // or magnitude := max abs(X)
>>    double mig( interval X ); // or mignitude := min abs(X),
>> where "abs(X)" is the interval abs as I imagine you'd specify it.
>
> We have a "little list" but the functions are not part of <cmath>, which 
> was the subject the proposal team wanted addressed.  I attached a list of 
> examples to this message for the benefit of those interested.
>
>>
>> Q7. Function forms of operators: Hooray!  Then the
>> C++ interval is (nearly) a C interval library plus a C++
>> wrapper class?
>
> Yes.  There are still template and overloading problems that require a set 
> of adapter declarations, but the layer we implemented is quite thin.
>
>> Then I can use it if I am restricted to C, for some reason.
>
> Or FORTRAN.
>
>>  Or is that an empty opportunity?
>
> In terms of new code the opportunity is probably not large for general 
> applications.  For embedded applications where reliability is very highly 
> prized, we believe there will be substantial demand.
>
> And in terms of maintaining and enhancing existing sofware the opportunity 
> is quite large.
>
>>
>> I appreciate you suggesting that implementations are not
>> too hard.  In addition, we should note there are at least a
>> couple quite good (tight) implementations of most of the
>> common elementary functions, more evidence that a
>> vendor's barrier to entry is not high.
>
> We do not have information on the effort required to produce sharp 
> implementations.  But ours is designed for extreme portability, complete 
> consistency (which blunts some results), and maximum rigor with little or 
> no concern for performance.  We expect fast/tight implementations on 
> specific plaforms to be about the same level of difficulty.
>
>> My reservation is that by putting more advanced tools
>> (your twin functions) in the hands of people inexperienced
>> with interval algorithms, you provide more opportunities
>> for screwing up :-)
>
> Other than the multiplication of entities, part of which is mitigated by a 
> simple naming convention, how do twin functions pose a risk?
>
> We have the expectation (based on a small sample of users) that they solve 
> the problem of user frustration with very wide results leading to 
> abandonment of the interval forms.  For example, a user who gets what he 
> considers silly results, such as interval::f() returning [-inf +inf], is 
> tempted to revert to using std::f() because he has no interval alternative 
> that gives him an answer he considers useful.  That is the threat the twin 
> functions tend to counter.
>
> -- Lee Winter
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: not available
> Type: application/x-tar
> Size: 4687 bytes
> Desc: not available
> Url : 
> http://compgeom.poly.edu/pipermail/std-interval/attachments/20060605/c95ad738/attachment.tar
>
> ------------------------------
>
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval
>
>
> End of Std-interval Digest, Vol 5, Issue 5
> ******************************************
> 


From rbk@louisiana.edu Mon Jun  5 08:12:18 2006
Received: from marnier.ucs.louisiana.edu (marnier.ucs.louisiana.edu
	[130.70.132.233])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55FCHjd032333
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 08:12:17 -0700
Received: from MATH-FOS101A (h158065.louisiana.edu [130.70.158.65])
	SMTP id k55FQ60I019002	for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 10:26:11 -0500 (CDT)
Message-Id: <2.2.32.20060605152611.00a06d44@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Date: Mon, 05 Jun 2006 10:26:11 -0500
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: Re: [std-interval] list of functions for intervals
X-Virus-Scanned: ClamAV 0.88.2/1512/Sun Jun  4 04:58:49 2006 on
	marnier.ucs.louisiana.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k55FCHjd032333
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 15:12:18 -0000

Guillaume, Lee,

I am just getting around to reading this thread.  Also, note that the opinions
I give here are my personal ones, subject to change after additional
discussion within this group and within the ISL group.

I quote from the "Example Specifications for Interval Verions (sic) of
<cmath> Functions:"

"A more aggressive interpretation of the compatibility requirement is that 
the result of an interval version of a <cmath> function is the hull of all 
of the results that would be generated by the non-interval version of the 
function if it were fed every combination of non-interval arguments implied 
by the argument intervals."

I agree with the above as a guide for specification of interval
functions.   More precisely, John Pryce's cset theory clarifies
this statement in limiting cases.  

Also, I suggest the the modification,
"contains the hull," rather
than "is the hull."  To demand that it be exactly the hull may be
too difficult in some cases.  In your parlance, "white lies" (meaning
that the returned result isn't the exact range to within roundout,
but merely contains it) are less destructive from a logical point
of view than "outright lies" (where there are values in the range
that are outside the returned result).  The coiners of the idea
"thou shalt not lie" in conjunction with interval arithmetic meant
that the returned result contain the mathematically correct result.
In limiting cases, what is the mathematically correct result is
specified, at least partially, by cset theory.  (There are also
other considerations, such as extending acos to acos_rel, as 
Guillaume suggests.)

If I understand "twin," you envision it to hold two results,
such as returning [-\infty,-1] .union. [1,\infty] as the result
of [1,2] / [-1,1].  I can see a use for that.  However, there is a
"twin arithmetic" in the interval literature that is something else,
so I would recommend using a word other than "twin" in this context. 
I also recommend, if we go this route, that the actual results returned
be set based on the cset theory.

Guillaume,  I understand the  acos_rel can be useful for constraint
propagation.  It seems that similar utility cannot be gained
within Lee's "twin" structure, since the set of all r such that
cos(r) is in X is countably infinite, for a particular x \in X,
-1 <= x <= 1.  Also, results with disjoint intervals as cset,
such as  \sqrt([1,4]) (which yields [-2,1] .union. [1,2] as cset) 
could indeed be handled with sqrt_rel.  All in all, my first impressions
are that this does seem to be somewhat simpler than the "twin" structure.

Sincerely,

Baker

At 03:52 PM 6/5/2006 +0200, Guillaume Melquiond wrote:
>Le dimanche 04 juin 2006 à 00:30 +0000, first.i.last@comcast.net a
>écrit :
>
>> The attached document is a summary aimed at raising issues and
>> identifying areas meriting additional discussion rather than a
>> comprehensive specification with endless detail but no rationale.
>> Therefore readers who are only concerned with concrete suggestions
>> should not read it.
>
>If I correctly understand your document, you have extended the atan2
>function as three interval functions. For Y=[-1,1] and X=[-2,-1], they
>will answer:
>
>        twin_atan2  => [-Pi,-Pi/2] | [Pi/2,Pi]
>        atan2_sharp => [Pi/2,3Pi/2]
>        atan2_blunt => [-Pi,Pi]
>
>In our current proposal, we have preferred to provide less functions yet
>be more generic; this idea was inspired by interval arithmetic libraries
>like gaol. First there is an atan2 function which is the natural
>interval extension, namely your atan2_blunt function. Second there is a
>relational function atan2_rel defined as:
>
>        atan2_rel(Y,X,R) contains { r in R ; cos(r) in X and sin(r) in
>        Y }
>
>Because of its two arguments, the atan2 example may not be the clearest
>one. So let's consider the acos function instead.two interval functions
>are defined:
>
>        acos(X) contains { acos(x) ; x in X } = { r in [0,Pi] ; cos(r) in X }
>        acos_rel(X,R) contains { r in R ; cos(r) in X }
>
>Note: if Pi was exactly representable by a floating-point number, only
>one function would be needed. The result of acos(X) would be defined as
>acos_rel(X,[0,Pi]).
>
>Why provide this function acos_rel? Because it is needed when doing
>global optimization and constraints programming. Indeed, after doing
>some forward and backward propagations, you usually come to the point
>where you have an equality "b = cos(a)" and constraints "a in A" and "b
>in B". Then you can compute improved constraints:
>
>        B' <- intersection(cos(A), B)
>        A' <- acos_rel(B, A)
>
>If acos_rel was not available, the second assignation could be written
>A' <- intersection(acos(B), A). But the set A' would then be wrong if
>the initial sets were A = B = [-1,1].
>
>Best regards,
>
>Guillaume
>
>_______________________________________________
>Std-interval mailing list
>Std-interval@compgeom.poly.edu
>http://compgeom.poly.edu/mailman/listinfo/std-interval
>
>

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------


From rbk@louisiana.edu Mon Jun  5 09:51:47 2006
Received: from marnier.ucs.louisiana.edu (marnier.ucs.louisiana.edu
	[130.70.132.233])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55Gphjd032443
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 09:51:47 -0700
Received: from MATH-FOS101A (h158065.louisiana.edu [130.70.158.65])
	SMTP id k55H5caY025678	for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 12:05:43 -0500 (CDT)
Message-Id: <2.2.32.20060605170543.00a1a600@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Date: Mon, 05 Jun 2006 12:05:43 -0500
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: more Re: [std-interval] list of functions for intervals
X-Virus-Scanned: ClamAV 0.88.2/1512/Sun Jun  4 04:58:49 2006 on
	marnier.ucs.louisiana.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k55Gphjd032443
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 16:51:47 -0000

Guillaume,

What if, in your example below, R contains two disjoint segments
of points r such that cos(r) \in R?  Would you return the interval
hull?  In fact, R could possibly contain an arbitrary number of
such segments.  Thus, acos_rel does give additional utility for
constraint propagation, but can't give the exact cset in all cases.
Also, I note that Lee's "twin" idea, if I understand it correctly,
doesn't handle the case with more than two disjoint intervals in the
cset.  At some point, I'm guessing that we need to accept what
Lee calls "white lies" in some cases, and design a standard that is
a good balance between simplicity and utility in a wide variety
of applications.  (We should also try to not prohibit vendors from
doing more, if they see a market.)

Best regards,

Baker

>Date: Mon, 05 Jun 2006 10:26:11 -0500
>To: For discussions concerning the C++ standardization of intervals
>	<std-interval@compgeom.poly.edu>
>From: "R. Baker Kearfott" <rbk@louisiana.edu>
>Subject: Re: [std-interval] list of functions for intervals
>
>Guillaume, Lee,
>
>I am just getting around to reading this thread.  Also, note that the opinions
>I give here are my personal ones, subject to change after additional
>discussion within this group and within the ISL group.
>
>I quote from the "Example Specifications for Interval Verions (sic) of
><cmath> Functions:"
>
>"A more aggressive interpretation of the compatibility requirement is that 
>the result of an interval version of a <cmath> function is the hull of all 
>of the results that would be generated by the non-interval version of the 
>function if it were fed every combination of non-interval arguments implied 
>by the argument intervals."
>
>I agree with the above as a guide for specification of interval
>functions.   More precisely, John Pryce's cset theory clarifies
>this statement in limiting cases.  
>
>Also, I suggest the the modification,
>"contains the hull," rather
>than "is the hull."  To demand that it be exactly the hull may be
>too difficult in some cases.  In your parlance, "white lies" (meaning
>that the returned result isn't the exact range to within roundout,
>but merely contains it) are less destructive from a logical point
>of view than "outright lies" (where there are values in the range
>that are outside the returned result).  The coiners of the idea
>"thou shalt not lie" in conjunction with interval arithmetic meant
>that the returned result contain the mathematically correct result.
>In limiting cases, what is the mathematically correct result is
>specified, at least partially, by cset theory.  (There are also
>other considerations, such as extending acos to acos_rel, as 
>Guillaume suggests.)
>
>If I understand "twin," you envision it to hold two results,
>such as returning [-\infty,-1] .union. [1,\infty] as the result
>of [1,2] / [-1,1].  I can see a use for that.  However, there is a
>"twin arithmetic" in the interval literature that is something else,
>so I would recommend using a word other than "twin" in this context. 
>I also recommend, if we go this route, that the actual results returned
>be set based on the cset theory.
>
>Guillaume,  I understand the  acos_rel can be useful for constraint
>propagation.  It seems that similar utility cannot be gained
>within Lee's "twin" structure, since the set of all r such that
>cos(r) is in X is countably infinite, for a particular x \in X,
>-1 <= x <= 1.  Also, results with disjoint intervals as cset,
>such as  \sqrt([1,4]) (which yields [-2,1] .union. [1,2] as cset) 
>could indeed be handled with sqrt_rel.  All in all, my first impressions
>are that this does seem to be somewhat simpler than the "twin" structure.
>
>Sincerely,
>
>Baker
>
>At 03:52 PM 6/5/2006 +0200, Guillaume Melquiond wrote:
>>Le dimanche 04 juin 2006 à 00:30 +0000, first.i.last@comcast.net a
>>écrit :
>>
>>> The attached document is a summary aimed at raising issues and
>>> identifying areas meriting additional discussion rather than a
>>> comprehensive specification with endless detail but no rationale.
>>> Therefore readers who are only concerned with concrete suggestions
>>> should not read it.
>>
>>If I correctly understand your document, you have extended the atan2
>>function as three interval functions. For Y=[-1,1] and X=[-2,-1], they
>>will answer:
>>
>>        twin_atan2  => [-Pi,-Pi/2] | [Pi/2,Pi]
>>        atan2_sharp => [Pi/2,3Pi/2]
>>        atan2_blunt => [-Pi,Pi]
>>
>>In our current proposal, we have preferred to provide less functions yet
>>be more generic; this idea was inspired by interval arithmetic libraries
>>like gaol. First there is an atan2 function which is the natural
>>interval extension, namely your atan2_blunt function. Second there is a
>>relational function atan2_rel defined as:
>>
>>        atan2_rel(Y,X,R) contains { r in R ; cos(r) in X and sin(r) in
>>        Y }
>>
>>Because of its two arguments, the atan2 example may not be the clearest
>>one. So let's consider the acos function instead.two interval functions
>>are defined:
>>
>>        acos(X) contains { acos(x) ; x in X } = { r in [0,Pi] ; cos(r) in X }
>>        acos_rel(X,R) contains { r in R ; cos(r) in X }
>>
>>Note: if Pi was exactly representable by a floating-point number, only
>>one function would be needed. The result of acos(X) would be defined as
>>acos_rel(X,[0,Pi]).
>>
>>Why provide this function acos_rel? Because it is needed when doing
>>global optimization and constraints programming. Indeed, after doing
>>some forward and backward propagations, you usually come to the point
>>where you have an equality "b = cos(a)" and constraints "a in A" and "b
>>in B". Then you can compute improved constraints:
>>
>>        B' <- intersection(cos(A), B)
>>        A' <- acos_rel(B, A)
>>
>>If acos_rel was not available, the second assignation could be written
>>A' <- intersection(acos(B), A). But the set A' would then be wrong if
>>the initial sets were A = B = [-1,1].
>>
>>Best regards,
>>
>>Guillaume
>>
>>_______________________________________________
>>Std-interval mailing list
>>Std-interval@compgeom.poly.edu
>>http://compgeom.poly.edu/mailman/listinfo/std-interval
>>
>>
>
>---------------------------------------------------------------
>R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
>(337) 482-5270 (work)                     (337) 993-1827 (home)
>URL: http://interval.louisiana.edu/kearfott.html
>Department of Mathematics, University of Louisiana at Lafayette
>(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
>Box 4-1010, Lafayette, LA 70504-1010, USA
>---------------------------------------------------------------
>
>
>_______________________________________________
>Std-interval mailing list
>Std-interval@compgeom.poly.edu
>http://compgeom.poly.edu/mailman/listinfo/std-interval
>
>

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------


From first.i.last@comcast.net Mon Jun  5 10:15:12 2006
Received: from rwcrmhc12.comcast.net (rwcrmhc12.comcast.net [216.148.227.152])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55HFBjd032497
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 10:15:11 -0700
Received: from rmailcenter80.comcast.net ([204.127.197.180])
          by comcast.net (rwcrmhc12) with SMTP
          id <20060605172911m1200mb3c1e>; Mon, 5 Jun 2006 17:29:12 +0000
Received: from [71.192.84.143] by rmailcenter80.comcast.net;
	Mon, 05 Jun 2006 17:29:10 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] cset theory as fundamental
Date: Mon, 05 Jun 2006 17:29:10 +0000
Message-Id: <060520061729.7498.448469E6000B687500001D4A22007601809B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 17:15:12 -0000

 -------------- Original message ----------------------
From: "R. Baker Kearfott" <rbk@louisiana.edu>
> Guillaume, Lee,
> 

[...]

> I quote from the "Example Specifications for Interval Verions
> (sic) of <cmath> Functions:"
> 
> "A more aggressive interpretation of the compatibility
> requirement is that the result of an interval version
> of a <cmath> function is the hull of all  of the results
> that would be generated by the non-interval version
> of the function if it were fed every combination of
> non-interval arguments implied by the argument intervals."
> 
> I agree with the above as a guide for specification of interval
> functions.   More precisely, John Pryce's cset theory clarifies
> this statement in limiting cases. 

As I understand the cset theory it contains only the numeric function results (including +/-inf) and does not address the issue of a function whose return values could be NaN.

In addition the cset theory appears to apply to the mathemetically correct value is if computed with arbitrary precision, while the above was intended to propose the inclusion of the result computed by the coresponding finite precision floating point implementation.  The mathematically correct result and the floating point result are usually not identical.
 
> 
> Also, I suggest the the modification, "contains the hull," rather
> than "is the hull."  To demand that it be exactly the hull may be
> too difficult in some cases.

I understand the issue, but stand by the proposed criteria in the sense that it sets the desired standard.  IFF there are cases that are too hard/slow they should be described in some way as exceptions from the normal/general expectations.  Those exceptions should be implementation defined.

The rationale we used for propsing that standard is that "contains the hull" (of the floating point implementation) is quite a general permission for bluntness.  The existence of that permission tends to erode the confidence of new users.  Like maintaining a public bug list demonstrates the confidence of software develpers and builds confidence in the sofware users (that they will not be blind-sided), so too do explicit bluntness specs demonstrate the confidence of the implementors and build confidence in the interval users that they will not get useless results.

This may be more of a sales issue than a correctness issue.  But there are a very large number of users who need to be convinced that intervals are worth considering as a replacement for floating point.

> In your parlance, "white lies" (meaning
> that the returned result isn't the exact range to within roundout,
> but merely contains it) are less destructive from a logical point
> of view than "outright lies" (where there are values in the range
> that are outside the returned result).  The coiners of the idea
> "thou shalt not lie" in conjunction with interval arithmetic meant
> that the returned result contain the mathematically correct result.
> In limiting cases, what is the mathematically correct result is
> specified, at least partially, by cset theory.  (There are also
> other considerations, such as extending acos to acos_rel, as 
> Guillaume suggests.)

Understood.  My version of the proposal is clearly out of date with respect to relational extensions (2005-08-01).

> 
> If I understand "twin," you envision it to hold two results,
> such as returning [-\infty,-1] .union. [1,\infty] as the result
> of [1,2] / [-1,1].  I can see a use for that.  However, there is a
> "twin arithmetic" in the interval literature that is something else,
> so I would recommend using a word other than "twin" in this context. 

OK.  Good point.

> I also recommend, if we go this route, that the actual
> results returned be set based on the cset theory.

What is it about disjoint results in particular that recommends the cset theory over the alternative classical interval theories?

-- Lee Winter

From rbk@louisiana.edu Mon Jun  5 11:07:25 2006
Received: from marnier.ucs.louisiana.edu (marnier.ucs.louisiana.edu
	[130.70.132.233])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55I7Pjd032569
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 11:07:25 -0700
Received: from MATH-FOS101A (h158065.louisiana.edu [130.70.158.65])
	SMTP id k55ILGaX006068;	Mon, 5 Jun 2006 13:21:21 -0500 (CDT)
Message-Id: <2.2.32.20060605182121.00ed7f9c@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Mon, 05 Jun 2006 13:21:21 -0500
To: For discussions concerning the C++ standardization of
	intervals<std-interval@compgeom.poly.edu>
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: Re: [std-interval] cset theory as fundamental
X-Virus-Scanned: ClamAV 0.88.2/1512/Sun Jun  4 04:58:49 2006 on
	marnier.ucs.louisiana.edu
X-Virus-Status: Clean
cc: isl@interval.louisiana.edu
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 18:07:35 -0000

Lee (C++ standardization, and ISL),

At 05:29 PM 6/5/2006 +0000, first.i.last@comcast.net wrote:
> -------------- Original message ----------------------
>From: "R. Baker Kearfott" <rbk@louisiana.edu>
>> Guillaume, Lee,
>> 
>
>[...]
>

>> 
>> If I understand "twin," you envision it to hold two results,
>> such as returning [-\infty,-1] .union. [1,\infty] as the result
>> of [1,2] / [-1,1].  I can see a use for that.  However, there is a
>> "twin arithmetic" in the interval literature that is something else,
>> so I would recommend using a word other than "twin" in this context. 
>
>OK.  Good point.
>
>> I also recommend, if we go this route, that the actual
>> results returned be set based on the cset theory.
>
>What is it about disjoint results in particular that recommends the cset
theory over the alternative classical interval theories?
>

I am recommending cset arithmetic generally because it is an extensively
well-thought-out theory that guides specification of results and gives
results that are provable.  Having worked with extended interval
arithmetic for quite some time, I've found specifications to sometimes
be ad-hoc and to perhaps give unexpected results to someone not
familiar with the particular implementation. For instance, there is a
significant (>3) number of different ways I have seen division by 
an interval that contains zero defined. With a solid mathematical
theory, it both constrains the way the results can be define and 
allows one to predict what the computations will do. 

There is nothing about disjoint results in particular that leads me
to recommend cset theory, other than in cases, such as division by
an interval that contains zero, when the disjoint results are obtained
as limiting cases.

To what "alternative classical theory" are you referring?

In any case, John may have some additional comment on this.

Sincerely,

Baker

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------

From guillaume.melquiond@ens-lyon.fr Mon Jun  5 12:02:11 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55J2Ajd032642
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 12:02:11 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id CF09D15B995
	for <std-interval@compgeom.poly.edu>;
	Mon,  5 Jun 2006 21:16:25 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 21316-08 for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 21:16:23 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 5566615B9FC
	for <std-interval@compgeom.poly.edu>;
	Mon,  5 Jun 2006 21:16:23 +0200 (CEST)
Subject: Re: more Re: [std-interval] list of functions for intervals
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <2.2.32.20060605170543.00a1a600@pop.louisiana.edu>
References: <2.2.32.20060605170543.00a1a600@pop.louisiana.edu>
Content-Type: text/plain; charset=ISO-8859-1
Date: Mon, 05 Jun 2006 21:16:09 +0200
Message-Id: <1149534969.6834.115.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 19:02:11 -0000

Le lundi 05 juin 2006 à 12:05 -0500, R. Baker Kearfott a écrit :
> What if, in your example below, R contains two disjoint segments
> of points r such that cos(r) \in R?  Would you return the interval
> hull?

Yes, the result is an interval and it contains all the values matching
the relation, so that the result does not lie. But I don't see this
truth as an issue. Indeed, lots of interval applications tend to split
their domain into sub-domains if the results they have computed are not
precise enough. In that case, they will get to a point where the various
Rs contain only one single contiguous interval.

> In fact, R could possibly contain an arbitrary number of
> such segments.  Thus, acos_rel does give additional utility for
> constraint propagation, but can't give the exact cset in all cases.

Right, but this is a proposal for interval arithmetic, not for arbitrary
set arithmetic. Having acos_rel([0,1], [-inf,inf]) return an infinite
set of implicitly defined intervals is possible but it goes well beyond
what we want to propose here.

And obtaining the "exact" cset is anyway out-of-reach because of bounds
rounding. As a matter of fact, this rounding phenomenon is why I'm not
really fond of cset intervals when they have floating-point bounds (I'm
only speaking for myself here). For example, it means that multiplying
four intervals containing positive and finite numbers can lead to an
interval containing negative values. But I'm digressing.

> Also, I note that Lee's "twin" idea, if I understand it correctly,
> doesn't handle the case with more than two disjoint intervals in the
> cset.  At some point, I'm guessing that we need to accept what
> Lee calls "white lies" in some cases, and design a standard that is
> a good balance between simplicity and utility in a wide variety
> of applications.

Note that Lee's twin idea is fundamentally different from the idea I
presented. First, it only applies to atan2 with respect to trigonometric
functions. For example, there is no meaning in a twin version of acos
since the set extension of acos only returns intervals when it is fed
with intervals. Second, the result of the twin version of atan2 is
constrained to [-Pi,Pi] while cosine and sine on the whole real line.

I'm not saying that the twin idea is a bad idea. As a matter of fact we
have used it for the division in the Boost library, and I still think it
was a good idea. I'm just saying that this is not what people doing
constraints programming are expecting in my opinion. But this could be
useful for other people.

Best regards,

Guillaume

From rbk@louisiana.edu Mon Jun  5 12:29:23 2006
Received: from marnier.ucs.louisiana.edu (marnier.ucs.louisiana.edu
	[130.70.132.233])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55JTMjd032671
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 12:29:22 -0700
Received: from MATH-FOS101A (h158065.louisiana.edu [130.70.158.65])
	SMTP id k55JhKxk021790	for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 14:43:25 -0500 (CDT)
Message-Id: <2.2.32.20060605194325.00ee8660@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Date: Mon, 05 Jun 2006 14:43:25 -0500
To: For discussions concerning the C++ standardization of
	intervals<std-interval@compgeom.poly.edu>
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: Re: more Re: [std-interval] list of functions for intervals
X-Virus-Scanned: ClamAV 0.88.2/1513/Mon Jun  5 12:41:42 2006 on
	marnier.ucs.louisiana.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k55JTMjd032671
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 19:29:23 -0000

Guillaume,

At 09:16 PM 6/5/2006 +0200, Guillaume Melquiond wrote:
>Le lundi 05 juin 2006 à 12:05 -0500, R. Baker Kearfott a écrit :
>> What if, in your example below, R contains two disjoint segments
>> of points r such that cos(r) \in R?  Would you return the interval
>> hull?
>
>Yes, the result is an interval and it contains all the values matching
>the relation, so that the result does not lie. But I don't see this
>truth as an issue. Indeed, lots of interval applications tend to split
>their domain into sub-domains if the results they have computed are not
>precise enough. In that case, they will get to a point where the various
>Rs contain only one single contiguous interval.
>
>> In fact, R could possibly contain an arbitrary number of
>> such segments.  Thus, acos_rel does give additional utility for
>> constraint propagation, but can't give the exact cset in all cases.
>
>Right, but this is a proposal for interval arithmetic, not for arbitrary
>set arithmetic. Having acos_rel([0,1], [-inf,inf]) return an infinite
>set of implicitly defined intervals is possible but it goes well beyond
>what we want to propose here.
>

I agree fully with the above choice.  I have previously thought 
a bit about arbitrary set arithmetic, and am of the opinion that
it is more complicated than something we want to standardize at
present.

>And obtaining the "exact" cset is anyway out-of-reach because of bounds
>rounding. As a matter of fact, this rounding phenomenon is why I'm not
>really fond of cset intervals when they have floating-point bounds (I'm
>only speaking for myself here). For example, it means that multiplying
>four intervals containing positive and finite numbers can lead to an
>interval containing negative values. But I'm digressing.
>

Picking up on your "digression," I don't see how multiplying four positive
intervals and getting an interval containing negative numbers as 
a result is related to cset arithmetic.  Isn't this related to
the definition of interval multiplication, which, for finite intervals,
is the same as the old-fashioned definition of multiplication
of intervals?  That is, isn't this a quality of implementation issue?
(Lower bounds that are positive but rounded down should be rounded
down to exactly zero, and a result that is exactly zero shouldn't 
be rounded down. Isn't that what IEEE-754 does?)  Otherwise, are
you thinking of an example with infinite end points that I missed?

>> Also, I note that Lee's "twin" idea, if I understand it correctly,
>> doesn't handle the case with more than two disjoint intervals in the
>> cset.  At some point, I'm guessing that we need to accept what
>> Lee calls "white lies" in some cases, and design a standard that is
>> a good balance between simplicity and utility in a wide variety
>> of applications.
>
>Note that Lee's twin idea is fundamentally different from the idea I
>presented. 

Yes, it is different, for a different purpose.

>First, it only applies to atan2 with respect to trigonometric
>functions. For example, there is no meaning in a twin version of acos
>since the set extension of acos only returns intervals when it is fed
>with intervals. Second, the result of the twin version of atan2 is
>constrained to [-Pi,Pi] while cosine and sine on the whole real line.
>
>I'm not saying that the twin idea is a bad idea. As a matter of fact we
>have used it for the division in the Boost library, and I still think it
>was a good idea. I'm just saying that this is not what people doing
>constraints programming are expecting in my opinion. But this could be
>useful for other people.
>


Yes, I understand the use of the acos_rel function in constraint
propagation.  I also think I understand that Lee's idea is to extend
all floating point functions in a natural way, using the classically
restricted domains of the inverse trig functions.
 
Best regards,

Baker

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------


From rmoore17@columbus.rr.com Mon Jun  5 12:46:48 2006
Received: from ms-smtp-03.ohiordc.rr.com (ms-smtp-03.ohiordc.rr.com
	[65.24.5.137])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55Jkmjd032696
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 12:46:48 -0700
Received: from Moore (cpe-65-24-104-31.columbus.res.rr.com [65.24.104.31])
	k55K0iJ4029053	for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 16:00:46 -0400 (EDT)
Message-ID: <001001c688da$bb868080$0202a8c0@Moore>
From: "Ray Moore" <rmoore17@columbus.rr.com>
To: <std-interval@compgeom.poly.edu>
Date: Mon, 5 Jun 2006 16:00:45 -0400
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_000D_01C688B9.34289540"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
X-Virus-Scanned: Symantec AntiVirus Scan Engine
Subject: [std-interval] csets
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 19:46:48 -0000

This is a multi-part message in MIME format.

------=_NextPart_000_000D_01C688B9.34289540
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

John and all,

The one thing that bothers me about the cset approach is=20
returning a result like [0, 1] when feeding the argument=20
[-4, 1] to the square root function. I mean there is a very useful =
extension of the square root function to complex values, for which the =
result would be something else, like
[0, 1] U [-2, 2] i.

I understand the difficulty of allowing complex values. To make it =
complete would be another huge project on top of all that is already =
underway.

However, otherwise it will necessary to explain the restriction to real =
results. Furthermore, things like
(sqrt [-4, 1])^4 would produce [0, 1] without including complex numbers, =
whereas it should produce [0, 16]
with complex numbers allowed.=20

What is the proposal for dealing with such concerns ?

Ray Moore
 
------=_NextPart_000_000D_01C688B9.34289540
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2900.2873" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>John and all,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>The one thing that bothers me about the =
cset=20
approach is </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>returning a result like [0, 1] when =
feeding the=20
argument </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>[-4, 1] to the square root function. I =
mean there=20
is a very useful extension of the square root function to complex =
values, for=20
which the result would be something else,&nbsp;like</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>[0, 1] U [-2, 2] i.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>I understand the difficulty of allowing =
complex=20
values. To make it complete would be another huge project on top of all =
that is=20
already underway.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>However, otherwise&nbsp;it&nbsp;will =
necessary to=20
explain the restriction to real results. Furthermore, things =
like</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>(sqrt [-4, 1])^4 would produce [0, 1] =
without=20
including complex numbers, whereas it should produce [0, =
16]</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>with complex numbers allowed. =
</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>What is the proposal for dealing with =
such concerns=20
?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Ray Moore</FONT></DIV>
<DIV>&nbsp;</DIV></BODY></HTML>

------=_NextPart_000_000D_01C688B9.34289540--


From guillaume.melquiond@ens-lyon.fr Mon Jun  5 12:47:51 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55Jlojd032708
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 12:47:51 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id AA20515BA11
	for <std-interval@compgeom.poly.edu>;
	Mon,  5 Jun 2006 22:02:06 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 23803-52 for <std-interval@compgeom.poly.edu>;
	Mon, 5 Jun 2006 22:02:06 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 16C1F15BA0F
	for <std-interval@compgeom.poly.edu>;
	Mon,  5 Jun 2006 22:02:06 +0200 (CEST)
Subject: Re: more Re: [std-interval] list of functions for intervals
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: std-interval@compgeom.poly.edu
In-Reply-To: <2.2.32.20060605194325.00ee8660@pop.louisiana.edu>
References: <2.2.32.20060605194325.00ee8660@pop.louisiana.edu>
Content-Type: text/plain; charset=ISO-8859-1
Date: Mon, 05 Jun 2006 22:01:52 +0200
Message-Id: <1149537712.6834.143.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 19:47:51 -0000

Le lundi 05 juin 2006 à 14:43 -0500, R. Baker Kearfott a écrit :

> Picking up on your "digression," I don't see how multiplying four positive
> intervals and getting an interval containing negative numbers as 
> a result is related to cset arithmetic.  Isn't this related to
> the definition of interval multiplication, which, for finite intervals,
> is the same as the old-fashioned definition of multiplication
> of intervals?  That is, isn't this a quality of implementation issue?
> (Lower bounds that are positive but rounded down should be rounded
> down to exactly zero, and a result that is exactly zero shouldn't 
> be rounded down. Isn't that what IEEE-754 does?)  Otherwise, are
> you thinking of an example with infinite end points that I missed?

Yes, an infinite end-point is involved. But this is unfortunately easy
to obtain because of rounding. For example,

interval<double>
  a(1.3e-200, 5), b(2.7e-150, 8), c(0.8, 4.2e100), d(17, 7.3e250),
  e = (a * b) * (c * d);

The lower bound of a * b is rounded to zero and the upper bound of c * d
is rounded to infinity in double precision floating-point arithmetic. As
a consequence, their product e will contain negative values. Indeed the
cset of 0*inf contains -inf; hence e is forced to include the whole
extended real line. Without rounding (e.g. with rational bounds),
interval e would have contained only positive and finite values. With
rounding and without cset, interval e would have been [0,+inf).

By reverting the bounds, it is possible to distinguish between
overflowed infinities and real infinities (I think there is a paper by
Hickey on this subject) and hence prevent this issue. But interval
computations will get a bit expensive because of this trick.

Best regards,

Guillaume

From hbr@poly.edu Mon Jun  5 13:00:19 2006
Received: from smtp.cegetel.net (mf00.sitadelle.com [212.94.174.67])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55K0Jjd032729
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 13:00:19 -0700
Received: from [192.168.0.194] (unknown [84.7.76.88])
	by smtp.cegetel.net (Postfix) with ESMTP id 54E221A4388;
	Mon,  5 Jun 2006 22:14:20 +0200 (CEST)
In-Reply-To: <001001c688da$bb868080$0202a8c0@Moore>
References: <001001c688da$bb868080$0202a8c0@Moore>
Mime-Version: 1.0 (Apple Message framework v750)
X-Priority: 3
Content-Type: text/plain; charset=WINDOWS-1252; delsp=yes; format=flowed
Message-Id: <CD9F5754-9AA7-4F95-8399-F770BFA51568@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Subject: Re: [std-interval] csets
Date: Mon, 5 Jun 2006 22:14:29 +0200
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.750)
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k55K0Jjd032729
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 20:00:19 -0000

Dear Ray:
In the interval proposal as it stands, we have considered this and  
also proposed to ignore negative values in sqrt. There is an item in  
the rationale about this:

> — What is the behavior on out-of-range argument values? E.g.,  
> should sqrt(x) throw if interval
> x contains negative values?

> We decided to interpret the inclusion property as allowing negative  
> values for sqrt without throwing
> exception, simply saying that sqrt(i) contains sqrt(x) for any  
> positive x in i (and is empty if i is
> entirely negative). Similarly for any function whose domain is a  
> subset of the representable T. This is
> the most inclusive view since it allows for silent error  
> propagation and recovery for sqrt(i) where
> i is (in theory) guaranteed to represent a positive number but its  
> interval enclosure contains negative
> numbers.

Note that this will be the overwhelmingly common case, due to  
roundoff errors. Thus likely sqrt(x) will be invoked with very small  
values for inf(x). And the user should either be guaranteed that x  
represents a non-negative number (hence the inclusion property is not  
violated), or manually test that x>=0, which if this is done using  
intervals, will also correctly detect the cases where x could be  
negative, in which case the user will necessarily have to handle the  
situation.

> Note that, it is always possible for the user to check manually the  
> range of the arguments (e.g.,
> does i contain negative numbers) and to choose the appropriate  
> action. As Bill Walster puts it:
> “Depending on the context, an empty result of an arithmetic  
> operation or function evaluation may
> or may not indicate that an error has been made. An exception-like  
> feature is needed to provide
> a test for expression continuity, which is an assumption for the  
> interval Newton algorithm and the
> Brouwer fixed-point theorem. This will only be needed in special  
> circumstances and therefore needs
> to be invokable only when required.”

In response to your concern about imaginary numbers:  if (sqrt [-4,  
1])^4 is indeed intended to return [0,16], then special handling is  
necessary from the user of the class interval<> since the class won't  
do it by itself.  On the other hand, it's not impossible to extend  
complex< interval<T> > (although the effect is unspecified in the C++  
standard, and therefore non-portable). But that is clearly not what  
we intend to standardize.

Regards,
--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu


On Jun 5, 2006, at 10:00 PM, Ray Moore wrote:

> John and all,
>
> The one thing that bothers me about the cset approach is
> returning a result like [0, 1] when feeding the argument
> [-4, 1] to the square root function. I mean there is a very useful  
> extension of the square root function to complex values, for which  
> the result would be something else, like
> [0, 1] U [-2, 2] i.
>
> I understand the difficulty of allowing complex values. To make it  
> complete would be another huge project on top of all that is  
> already underway.
>
> However, otherwise it will necessary to explain the restriction to  
> real results. Furthermore, things like
> (sqrt [-4, 1])^4 would produce [0, 1] without including complex  
> numbers, whereas it should produce [0, 16]
> with complex numbers allowed.
>
> What is the proposal for dealing with such concerns ?
>
> Ray Moore
>
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval


From fernando_cacciola@datafull.com Mon Jun  5 13:00:25 2006
Received: from postinofz1.prima.com.ar (postinofz1.prima.com.ar
	[200.42.0.149])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k55K0Ojd032732
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 13:00:25 -0700
Received: (qmail 77032 invoked from network); 5 Jun 2006 20:14:23 -0000
Received: from unknown (HELO SciSoft0) (200.122.82.9)
  by postinofz1.prima.com.ar with SMTP; 5 Jun 2006 20:14:23 -0000
Message-ID: <007b01c688dd$124a5890$6401a8c0@SciSoft0>
From: "Fernando Cacciola" <fernando_cacciola@datafull.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
References:
	<060420060030.15630.4482299F00049F7C00003D0E22007614389B9C0E04D207D29B9C9D0700@comcast.net>
	<1149515579.6834.58.camel@saline>
Subject: Re: [std-interval] list of functions for intervals
Date: Mon, 5 Jun 2006 17:17:29 -0300
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Fernando Cacciola <fernando_cacciola@datafull.com>, For discussions
	concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 20:00:25 -0000

Guillaume Melquiond wrote:
>
>        A' <- acos_rel(B, A)
>
> If acos_rel was not available, the second assignation could be written
> A' <- intersection(acos(B), A). But the set A' would then be wrong if
> the initial sets were A = B = [-1,1].
>
Hmm, I thought I understood the xyz_rel(X,R) functions to be precisely the 
equivalent of intersection(xyz(X),R), yet you explicetely state here that is 
not; but I can't follow: why would intersection(acos([-1,1]),[-1,1]) be 
wrong? That is, what exactly is the result of acos_rel([-1,1],[-1,1]) and 
how is that different from the explicit restriction to R?

TIA

Fernando Cacciola
SciSoft
http://fcacciola.50webs.com/


From rbk@louisiana.edu Mon Jun  5 13:11:43 2006
Received: from marnier.ucs.louisiana.edu (marnier.ucs.louisiana.edu
	[130.70.132.233])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55KBhjd000303
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 13:11:43 -0700
Received: from MATH-FOS101A (h158065.louisiana.edu [130.70.158.65])
	SMTP id k55KPf6R025317;	Mon, 5 Jun 2006 15:25:46 -0500 (CDT)
Message-Id: <2.2.32.20060605202546.00eef8c0@pop.louisiana.edu>
X-Sender: rbk5287@pop.louisiana.edu
X-Mailer: Windows Eudora Pro Version 2.2 (32)
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Date: Mon, 05 Jun 2006 15:25:46 -0500
To: For discussions concerning the C++ standardization of
	intervals<std-interval@compgeom.poly.edu>
From: "R. Baker Kearfott" <rbk@louisiana.edu>
Subject: Re: more Re: [std-interval] pros and cons of csets
X-Virus-Scanned: ClamAV 0.88.2/1513/Mon Jun  5 12:41:42 2006 on
	marnier.ucs.louisiana.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k55KBhjd000303
cc: isl@interval.louisiana.edu
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 20:11:43 -0000

Guillaume,

At 10:01 PM 6/5/2006 +0200, Guillaume Melquiond wrote:
>Le lundi 05 juin 2006 à 14:43 -0500, R. Baker Kearfott a écrit :
>
>> Picking up on your "digression," I don't see how multiplying four positive
>> intervals and getting an interval containing negative numbers as 
>> a result is related to cset arithmetic.  Isn't this related to
>> the definition of interval multiplication, which, for finite intervals,
>> is the same as the old-fashioned definition of multiplication
>> of intervals?  That is, isn't this a quality of implementation issue?
>> (Lower bounds that are positive but rounded down should be rounded
>> down to exactly zero, and a result that is exactly zero shouldn't 
>> be rounded down. Isn't that what IEEE-754 does?)  Otherwise, are
>> you thinking of an example with infinite end points that I missed?
>
>Yes, an infinite end-point is involved. But this is unfortunately easy
>to obtain because of rounding. For example,
>
>interval<double>
>  a(1.3e-200, 5), b(2.7e-150, 8), c(0.8, 4.2e100), d(17, 7.3e250),
>  e = (a * b) * (c * d);
>
>The lower bound of a * b is rounded to zero and the upper bound of c * d
>is rounded to infinity in double precision floating-point arithmetic. As
>a consequence, their product e will contain negative values. Indeed the
>cset of 0*inf contains -inf; hence e is forced to include the whole
>extended real line. Without rounding (e.g. with rational bounds),
>interval e would have contained only positive and finite values. With
>rounding and without cset, interval e would have been [0,+inf).
>

Thank you.  That clarifies it.  

Let me think about this some more and also allow (possibly) others to
respond.  I'm thinking there are possibly other cases where not including
the -\infty will result in a set that does not contain points that
are expected.

>By reverting the bounds, it is possible to distinguish between
>overflowed infinities and real infinities (I think there is a paper by
>Hickey on this subject) and hence prevent this issue. But interval
>computations will get a bit expensive because of this trick.
>

That is true.  Also, certainly, we'd like the interval arithmetic to
be reasonably fast.  However, regardless of exactly how the extended
interval arithmetic is defined in the standard, it should be possible
to make it clear to users, in a simple explanation, what particular
results will be.  If cset arithmetic is used, hopefully there aren't
too many cases in which what classically has been called "overflows"
and "underflows" occur :-)

Best regards,

Baker
 

---------------------------------------------------------------
R. Baker Kearfott,    rbk@louisiana.edu   (337) 482-5346 (fax)
(337) 482-5270 (work)                     (337) 993-1827 (home)
URL: http://interval.louisiana.edu/kearfott.html
Department of Mathematics, University of Louisiana at Lafayette
(Room 217 Maxim D. Doucet Hall, 1403 Johnston Street)
Box 4-1010, Lafayette, LA 70504-1010, USA
---------------------------------------------------------------


From eliasen@mindspring.com Mon Jun  5 14:00:03 2006
Received: from elasmtp-banded.atl.sa.earthlink.net
	(elasmtp-banded.atl.sa.earthlink.net [209.86.89.70])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55L03jd000371
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 14:00:03 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=DKTiOHKYZMsCiHEug0/tAK9qjuSHJgcWKxE7BdXx1ClBosobOb2jWJkKQ4Q9JKfG;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.238] (helo=[192.168.1.101])
	by elasmtp-banded.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1FnMOk-0002UX-G9
	for std-interval@compgeom.poly.edu; Mon, 05 Jun 2006 17:14:07 -0400
Message-ID: <44849E92.8080709@mindspring.com>
Date: Mon, 05 Jun 2006 15:13:54 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.13) Gecko/20060414
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: [Fwd: Re: [std-interval] Interval comparison operators]
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac4507bc988d18258ebe7867a62bbcc89ce066350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.238
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 21:00:03 -0000


> On Jun 1, 2006, at 3:25 AM, Alan Eliasen wrote:
> 
>> I know of no portable functions other than std::isnan()
>> (defined in cmath) which simply detects if it's a NaN or not, so you
>> shouldn't even expect to differentiate between these two.

Hervé Brönnimann wrote:
> FWIW, std::numeric_limits<T> has members has_quiet_NaN and 
> has_signaling_NaN along with quiet_NaN and signaling_NaN.  What you  can
> expect is to differentiate between them IF your platform supports  them
> (and the numeric_limits given by your system is accurate for the 
> platform, as it should).

   If the implementations I've looked at are proper, has_quiet_NaN and
has_signaling_NaN are only boolean fields (not functions!) which only
tell you if a particular numeric type (e.g. double or int) has a special
value which could represent those NaNs.  They tell you nothing about
whether a particular number *is* a NaN of either type.

   In, say, gcc 4.1.1, has_signaling_NaN is simply defined as:

 static const bool has_signaling_NaN = has_quiet_NaN;

   So, again, without lack of evidence to the contrary, I stand by my
assertion that isnan() is the only standard function available to detect
if a number is a NaN or not, and it can't distinguish between quiet and
signaling NaNs.

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu

From guillaume.melquiond@ens-lyon.fr Mon Jun  5 14:11:31 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55LBVjd000398
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 14:11:31 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 3EEFD37E50;
	Mon,  5 Jun 2006 23:25:48 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 00613-16; Mon, 5 Jun 2006 23:25:45 +0200 (CEST)
Received: from [192.168.0.1] (sabine.succu.be [82.227.117.3])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id ABEFC37E4D;
	Mon,  5 Jun 2006 23:25:45 +0200 (CEST)
Subject: Re: [std-interval] list of functions for intervals
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: Fernando Cacciola <fernando_cacciola@datafull.com>,
	<std-interval@compgeom.poly.edu>
In-Reply-To: <007b01c688dd$124a5890$6401a8c0@SciSoft0>
References: 
	<060420060030.15630.4482299F00049F7C00003D0E22007614389B9C0E04D207D29B9C9D0700@comcast.net>
	<007b01c688dd$124a5890$6401a8c0@SciSoft0>
Content-Type: text/plain; charset=ISO-8859-1
Date: Mon, 05 Jun 2006 23:25:31 +0200
Message-Id: <1149542731.8502.27.camel@saline>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.1 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 21:11:32 -0000

Le lundi 05 juin 2006 à 17:17 -0300, Fernando Cacciola a écrit :
> Guillaume Melquiond wrote:
> >
> >        A' <- acos_rel(B, A)
> >
> > If acos_rel was not available, the second assignation could be written
> > A' <- intersection(acos(B), A). But the set A' would then be wrong if
> > the initial sets were A = B = [-1,1].
> >
> Hmm, I thought I understood the xyz_rel(X,R) functions to be precisely the 
> equivalent of intersection(xyz(X),R), yet you explicetely state here that is 

If they simply were some intersections, there wouldn't be much point in
adding these functions :-).

> not; but I can't follow: why would intersection(acos([-1,1]),[-1,1]) be 
> wrong? That is, what exactly is the result of acos_rel([-1,1],[-1,1]) and 
> how is that different from the explicit restriction to R?

When R is included in the domain of the reciprocal function and the set
intersection of the set result with R is contiguous, then both
expressions will have the same result. For acos_rel([-1,1],[-1,1]), the
intersection is indeed contiguous, but R is not included in the domain
(for acos it is [0,Pi]), so this will give different results:

intersection(acos([-1,1]), [-1,1]) = [0,1]
acos_rel([-1,1], [-1,1]) = [-1,1]

Indeed, the set of values x in [-1,1] such that cos(x) is in [-1,1]
(always true) is simply [-1,1]. This example may seem idiotic so let's
consider smaller intervals: what are the values x in [-0.2,-0.1] such
that cos(x) is in [0.99,1]?

The answer as a set is [-0.142,-0.1]. Since this is a contiguous set,
this will be the interval result given by acos_rel. On the other hand,
acos([0.99,1]) = [0,0.142], so the intersection would have given the
empty set (meaning that there is no solution, this is wrong). The
xyz_rel functions are meant as a tool to correctly solve (in)equations
involving trigonometric functions.

Best regards,

Guillaume

From first.i.last@comcast.net Mon Jun  5 16:45:35 2006
Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [216.148.227.151])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k55NjZjd000549
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 16:45:35 -0700
Received: from rmailcenter04.comcast.net ([204.127.197.114])
          by comcast.net (rwcrmhc11) with SMTP
          id <20060605235940m1100jnnkpe>; Mon, 5 Jun 2006 23:59:41 +0000
Received: from [71.192.84.143] by rmailcenter04.comcast.net;
	Mon, 05 Jun 2006 23:59:39 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: [std-interval] detecting NaN
Date: Mon, 05 Jun 2006 23:59:39 +0000
Message-Id: <060520062359.17872.4484C56B000800E4000045D022007503309B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Mon, 05 Jun 2006 23:45:35 -0000

 -------------- Original message ----------------------
From: Alan Eliasen <eliasen@mindspring.com>

> So, again, without lack of evidence to the contrary, I stand
> by my assertion that isnan() is the only standard function
> available to detect if a number is a NaN or not, and it
> can't distinguish between quiet and signaling NaNs.

Do you not like the use of fpclassify() to detect NaNs?  On x86 platforms there is hardware support for classification based on the fxam instruction.

-- Lee Winter
From first.i.last@comcast.net Mon Jun  5 18:22:41 2006
Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [216.148.227.151])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k561Mfjd000689
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 18:22:41 -0700
Received: from rmailcenter08.comcast.net ([204.127.197.118])
          by comcast.net (rwcrmhc11) with SMTP
          id <20060606013633m1100jsgbee>; Tue, 6 Jun 2006 01:36:48 +0000
Received: from [71.192.84.143] by rmailcenter08.comcast.net;
	Tue, 06 Jun 2006 01:36:30 +0000
From: first.i.last@comcast.net
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: more Re: [std-interval] list of functions for intervals
Date: Tue, 06 Jun 2006 01:36:30 +0000
Message-Id: <060620060136.29018.4484DC1D000EF46A0000715A22007507849B9C0E04D207D29B9C9D0700@comcast.net>
X-Mailer: AT&T Message Center Version 1 (Apr 11 2006)
X-Authenticated-Sender: Zmlyc3QuaS5sYXN0QGNvbWNhc3QubmV0
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 06 Jun 2006 01:22:41 -0000

 -------------- Original message ----------------------
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
> Le lundi 05 juin 2006 à 14:43 -0500, R. Baker Kearfott a écrit :
> 

[...]

> Indeed the cset of 0*inf contains -inf; hence e is forced to include the whole extended real line. 

[...]

> Without rounding (e.g. with rational bounds),
> interval e would have contained only positive and finite values. With
> rounding and without cset, interval e would have been [0,+inf).

This is an issue with the present state-of-the-art in csets, but I believe it to be fixable.  It derives from the concern over the topology of the number line near zero, but I believe there at least one sensible and rigorous definition that can be used to eliminate the issue and restore the IEEE-754 sense of rounding.

-- Lee Winter
From eliasen@mindspring.com Mon Jun  5 22:25:53 2006
Received: from elasmtp-mealy.atl.sa.earthlink.net
	(elasmtp-mealy.atl.sa.earthlink.net [209.86.89.69])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k565Prjd000982
	for <std-interval@compgeom.poly.edu>; Mon, 5 Jun 2006 22:25:53 -0700
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=dk20050327; d=mindspring.com;
	b=fhKuaSOcyrg+jmEke3B1n7YNLn3P5SWEdKwmWo6cq+0ce4gJXCyQiCHWMEVcA9HU;
	h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type:Content-Transfer-Encoding:X-ELNK-Trace:X-Originating-IP;
Received: from [69.3.123.238] (helo=[192.168.1.101])
	by elasmtp-mealy.atl.sa.earthlink.net with asmtp (Exim 4.34)
	id 1FnUIO-0001Jq-1f
	for std-interval@compgeom.poly.edu; Tue, 06 Jun 2006 01:40:04 -0400
Message-ID: <44851531.2040103@mindspring.com>
Date: Mon, 05 Jun 2006 23:40:01 -0600
From: Alan Eliasen <eliasen@mindspring.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US;
	rv:1.7.13) Gecko/20060414
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] detecting NaN
References: <060520062359.17872.4484C56B000800E4000045D022007503309B9C0E04D207D29B9C9D0700@comcast.net>
In-Reply-To: <060520062359.17872.4484C56B000800E4000045D022007503309B9C0E04D207D29B9C9D0700@comcast.net>
X-Enigmail-Version: 0.93.0.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-ELNK-Trace: b37d7a0c977428ea9649176a89d694c0f43c108795ac4507d4b51ec103f5a5ed34f6fcb22123b5da350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c
X-Originating-IP: 69.3.123.238
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 06 Jun 2006 05:25:53 -0000

Alan Eliasen wrote:
>> So, again, without lack of evidence to the contrary, I stand by my
>> assertion that isnan() is the only standard function available to
>> detect if a number is a NaN or not, and it can't distinguish
>> between quiet and signaling NaNs.

Lee Winter wrote:
> Do you not like the use of fpclassify() to detect NaNs?  On x86
> platforms there is hardware support for classification based on the
> fxam instruction.

   Thanks; I was not aware of fpclassify, only the boolean conditions
like isnan().  It appears from the documentation in gcc 4.1.1 that
isnan() "returns a non-zero value if (fpclassify(x) == FP_NAN)", so one
is simply defined in terms of the other, and confers no clear advantages
when testing for NaN.

   Still, it doesn't affect my point that there isn't a standardized
function to distinguish between quiet and signaling NaNs, other than
working directly with the bit patterns as I noted in my first posting on
the subject.

-- 
  Alan Eliasen                 |  "When trouble is solved before it
  eliasen@mindspring.com       |    forms, who calls that clever?"
  http://futureboy.us/         |              --Sun Tzu
From j.d.pryce@ntlworld.com Tue Jun  6 02:20:39 2006
Received: from mtaout02-winn.ispmail.ntl.com (mta08-winn.ispmail.ntl.com
	[81.103.221.48])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k569Kdjd001215
	for <std-interval@compgeom.poly.edu>; Tue, 6 Jun 2006 02:20:39 -0700
Received: from aamtaout03-winn.ispmail.ntl.com ([81.103.221.35])
	by mtaout02-winn.ispmail.ntl.com with ESMTP
	<20060606093453.EBJQ29040.mtaout02-winn.ispmail.ntl.com@aamtaout03-winn.ispmail.ntl.com>
	for <std-interval@compgeom.poly.edu>;
	Tue, 6 Jun 2006 10:34:53 +0100
Received: from 142kingshill.ntlworld.com ([86.21.71.156])
	by aamtaout03-winn.ispmail.ntl.com with ESMTP
	<20060606093452.EHGF16286.aamtaout03-winn.ispmail.ntl.com@142kingshill.ntlworld.com>
	for <std-interval@compgeom.poly.edu>;
	Tue, 6 Jun 2006 10:34:52 +0100
Message-Id: <6.2.5.6.0.20060605223335.030189e0@ntlworld.com>
X-Mailer: QUALCOMM Windows Eudora Version 6.2.5.6
Date: Tue, 06 Jun 2006 10:38:35 +0100
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
From: Dr John Pryce <j.d.pryce@ntlworld.com>
Subject: Re: [std-interval] csets
In-Reply-To: <001001c688da$bb868080$0202a8c0@Moore>
References: <001001c688da$bb868080$0202a8c0@Moore>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"; format=flowed
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 06 Jun 2006 09:20:39 -0000

Ray and all

At 21:00 05/06/06, Ray Moore wrote:
>The one thing that bothers me about the cset approach is
>returning a result like [0, 1] when feeding the argument
>[-4, 1] to the square root function. I mean there is a very useful 
>extension of the square root function to complex values, for which 
>the result would be something else, like
>[0, 1] U [-2, 2] i.
>
>I understand the difficulty of allowing complex values. To make it 
>complete would be another huge project on top of all that is already underway.
>
>However, otherwise it will necessary to explain the restriction to 
>real results. Furthermore, things like
>(sqrt [-4, 1])^4 would produce [0, 1] without including complex 
>numbers, whereas it should produce [0, 16]
>with complex numbers allowed.
>
>What is the proposal for dealing with such concerns ?

I will answer the query "how to apply csets over the complex 
numbers?" (mathematics). That leaves aside the important question of 
"when, in a program, to decide to move from the reals to the complex 
numbers?" (language and library design and semantics).-

To set up a cset system you need
- An underlying number system S - preferably a field such as the 
reals or complex numbers of course.
- A compact topological space S* in which S is embedded as a dense subset.

Then the cset value of any (possibly vector) "function of 
S-variables", i.e. f : S^n -> S^m, is defined for any subset of 
(S*)^n to be a subset of (S*)^m, defined in terms of graph closure. 
Compactness implies the Fundamental Theorem holds, which ensures 
containment in the resulting interval system.

To convert this into an interval cset system you need
- A set I of subsets of S* that you deem to be "intervals". They must 
be compact, and the S* must be a member of I.
- An algorithm "interval hull" that encloses an arbitrary subset X of 
S* in a member of I, call it hull(X). This is the "exact arithmetic" version.

To convert this to a machine interval cset system you need
- A subset I_T of I, deemed to be the "machine intervals" for a given 
machine version T of the underlying system S.
- An algorithm "machine interval hull" that encloses an arbitrary 
subset of S* in a member of I_T, call it hull_T(X).

   I guess hull_T(X) must always enclose hull(X). Not a problem when 
intervals are boxes in (R*)^m, but a bit tricky when intervals are 
wrap-around ones (not always an obvious UNIQUE exact hull), or discs 
in the complex plane (easily get a good-enough, but not easily a 
best, machine hull).

That summarizes the theoretical needs. Rump's INTLAB has an 
implementation with intervals being *finite* discs in the complex 
plane C. The most natural compact extension C* is C plus one point at 
infinity, as used for 150 years in complex analysis. The set I could 
then be all the finite discs, plus the "infinite discs" which are 
half-planes, plus the whole of C*, plus the empty set. This set is 
closed under +, - and reciprocal (not multiplication or division).

The set I_T could be all discs that have machine-representable centre 
and radius - with a special way to represent the half planes.

I haven't worked on this system, so I don't know any of the practical 
snags. But it makes sense in principle.

John

Dr John and Mrs Kate Pryce
142 Kingshill Rd
Swindon, Wiltshire SN1 4LW
UK
Tel (+44)1793-331062 

From george.corliss@marquette.edu Wed Jun  7 03:49:35 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k57AnZjd003489
	for <std-interval@compgeom.poly.edu>; Wed, 7 Jun 2006 03:49:35 -0700
Received: from its-exfe3.marqnet.mu.edu ([134.48.20.166]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Wed, 7 Jun 2006 06:04:11 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe3.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Wed, 7 Jun 2006 06:04:11 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Wed, 07 Jun 2006 06:04:06 -0500
From: George Corliss <George.Corliss@marquette.edu>
To: <std-interval@compgeom.poly.edu>
Message-ID: <C0AC1CD6.B79%George.Corliss@Marquette.edu>
Thread-Topic: Draft standard based on csets
Thread-Index: AcaKIhfVVmYLvvYVEdqoMwAKlZKJfg==
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 07 Jun 2006 11:04:11.0304 (UTC)
	FILETIME=[1AFE6A80:01C68A22]
Subject: [std-interval] Draft standard based on csets
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 07 Jun 2006 10:49:35 -0000

All,

We have prepared a completely revised a draft of a proposed
standard based on the draft of March 2006 by Br\"onnimann,
Melquiond, and Pion. Although the attached document bears
the names of Br\"onnimann, Melquiond, and Pion, it is the
result of work by John Pryce on their earlier version, and
there has not yet been discussion on whether they accept
the document in this revised form.

The document is too large to send as an attachment to this
Alias.  The draft is available for download from
    http://homepage.ntlworld.com/j.d.pryce/isloct05/

This draft differs from the March 2006 draft primarily in its explanation of
an underlying abstract mathematical model based on containment sets and (we
think) simplifications which follow from that.  We have tried to strengthen
considerably the conceptual rationale for interval arithmetic.

This version has been the subject of extensive discussions among Interval
Subroutine Library (ISL) project members John Pryce, George Corliss, R.
Baker Kearfott, Ned Nedialkov, and Spencer Smith.  We intend this draft as a
catalyst for further discussion. We argue for the importance of specifying
an abstract mathematical model.  We favour a one-model cset-based standard,
but a standard that supports both this and the Simple System would be
acceptable.

In preparing this revision, the ISL project has focused in the interval
abstract mathematical model and the semantics.  We intend that C++ experts
in the community continue to refine the C++ aspects.

This draft does not reflect recent discussions of cmath or of comparison
operators.  We continue to follow those discussion threads with interest.

John Pryce, George Corliss, R. Baker Kearfott, Ned Nedialkov, and Spencer
Smith 



From lawrence.crowl@gmail.com Fri Jun  9 19:38:20 2006
Received: from nf-out-0910.google.com (nf-out-0910.google.com
	[64.233.182.188])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k5A2cKjd012527
	for <std-interval@compgeom.poly.edu>; Fri, 9 Jun 2006 19:38:20 -0700
Received: by nf-out-0910.google.com with SMTP id a27so472814nfc
	for <std-interval@compgeom.poly.edu>;
	Fri, 09 Jun 2006 19:53:51 -0700 (PDT)
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=beta; d=gmail.com;
	h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references;
	b=T/F55eziZQaEalcUCVKT774gaKKRlH8MeIWUlfjCXeY32gFORTnZ3k8SFTaNZ1ioyLYliig7xCHvzu3FgQg1kBMCfjSZPhC2GVmW6N/HRLj1M2bU58KANELzXwxuPBhZlNNTM/z7mkUEIHhbWytNi87SkViuHo2i2ty8HCy1jrI=
Received: by 10.48.213.11 with SMTP id l11mr2916557nfg;
        Fri, 09 Jun 2006 19:53:51 -0700 (PDT)
Received: by 10.48.236.4 with HTTP; Fri, 9 Jun 2006 19:53:51 -0700 (PDT)
Message-ID: <90228e530606091953y69340ecfk2c17fd42e30fd831@mail.gmail.com>
Date: Fri, 9 Jun 2006 19:53:51 -0700
From: "Lawrence Crowl" <lawrence.crowl@gmail.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Draft standard based on csets
In-Reply-To: <C0AC1CD6.B79%George.Corliss@Marquette.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
References: <C0AC1CD6.B79%George.Corliss@Marquette.edu>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence@Crowl.org, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sat, 10 Jun 2006 02:38:31 -0000

On 6/7/06, George Corliss <George.Corliss@marquette.edu> wrote:
> We have prepared a completely revised a draft of a proposed
> standard based on the draft of March 2006 by Br\"onnimann,
> Melquiond, and Pion.

IV.4 : API issues : Internal and external form for intervals

I don't recall that "infty" is a standard form for writing infinities.
I think the C++ standard should not introduce yet another form, as it
make interoperability and shared implementations harder.

26.6 : Interval numbers

Do not use "abstract model" as a short form for "abstract interval model".
There is too great a chance of confusion in the full standard, where
the context is much broader.

26.6.3 paragraph 3 : interval( const char *s )

You must state which exception is raised.

26.6.3 paragraph 6 : interval( const T& lo, const T& hi)

Likewise.

26.6.3 paragraph 7 bullet 3

The functions to specify semi-infinite intervals must be defined.
Alternatively, one could require NaN/infinity support.

26.6.3 paragraph 9

Again, needs to state which exception.

26.6.4 : Interval member operators

All assignment operators should return references to objects,
not values.

26.6.5 : Interval non-member operations

The definition "Returns: interval<T>(lhs) += rhs" is incorrect.
The result of the assignment operator is a reference.  The result
of an addition operator should be an object.  Likewise for the
others.

2.6.6 : Extended division function

Is there a particular reason that you did not define xdiv to
write to non-const reference parameters?  E.g.,

template< typename T >
void xdiv( const interval<T>& dividend, const interval<T>& divisor,
           interval<T>& primary, interval<T>& secondary );

It strikes me that one is likely to want to unpack the pair immediately,
and therefore directly setting variables would be better.

26.6.9 : Interval value operations

I note the potential confusion between "inf" as a floating point value
and an interval operation.  I don't think it is a bit problem, nor
do I have a solution.

26.6.12 : Interval static value operations

Given pi, why not e, etc.?

26.6.13 : External numbers and intervals

The statement "An implementation may provide features beyone the above"
is dangerous.  It grants permission to vendors to claim that non-portable
code is standards-conformant.  Vendors can always add extensions, but
sanctioning them without enumeration is dangerous.  Define what you want
all compilers to conform to and do not mention the rest.  Under that rule,

    [2*pi] requires an expression interpreter in the input library,
    and therefore is difficult to define, annoying to implement, and
    potentially expensive at run time.  So, I would not standardize it.

    [1.1;1.2]e15 is difficult to parse effectively and I would exclude it.

    hexidecimal base numbers are permitted in the C99 standard, and I see
    no particular difficulty in defining them.  Furthermore, they provide
    a means to avoid extending intervals on I/O, and so I recommend putting
    them into the standard.

-- 
Lawrence Crowl
From george.corliss@marquette.edu Mon Jun 12 18:28:06 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k5D1S6jd000338
	for <std-interval@compgeom.poly.edu>; Mon, 12 Jun 2006 18:28:06 -0700
Received: from its-exfe3.marqnet.mu.edu ([134.48.20.166]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Mon, 12 Jun 2006 20:44:32 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe3.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Mon, 12 Jun 2006 20:44:32 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Mon, 12 Jun 2006 20:44:30 -0500
From: George Corliss <George.Corliss@marquette.edu>
To: <std-interval@compgeom.poly.edu>
Message-ID: <C0B382AE.EB7%George.Corliss@Marquette.edu>
Thread-Topic: Intervals mentioned  in an education paper
Thread-Index: AcaOhu6rXwn5hHrERcmGAh7h5SdZ4wAA/rKw
In-Reply-To: <77B4C8824930004AAC10E1B01576254AAC4200@itdsrvmail01.utep.edu>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 13 Jun 2006 01:44:32.0553 (UTC)
	FILETIME=[EAFA2190:01C68E8A]
Subject: [std-interval] FW: Intervals mentioned  in an education paper
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 13 Jun 2006 01:28:06 -0000

If you are not on the RC mailing alias ...

------ Forwarded Message
> From: "Kreinovich, Vladik" <vladik@utep.edu>
> Date: Mon, 12 Jun 2006 19:14:00 -0600
> To: <reliable_computing@interval.louisiana.edu>
> Cc: "Kosheleva, Olga" <olgak@utep.edu>, "Kreinovich, Vladik" <vladik@utep.edu>
> Conversation: Intervals mentioned  in an education paper
> Subject: Intervals mentioned  in an education paper
> 
> Dear Friends, 
> 
> This is just FYI.
> 
> The latest issue (Vol. 25, No. 3, 2006) of the Journal of Computers in
> Mathematics and Science Teaching published by the Association for the
> Advancement of Computing in Education (AACE) starts with an article by
> William Richardson from Francis Marion University on the treatment of
> computational precision etc. in an introduction programming course for
> scientists and engineers.
> 
> The article starts with a known problem - that round off errors
> sometimes make results of numerical computations unreliable - and cites
> interval arithmetic as the most natural solution to this problem (with a
> reference to Hayes' 2003 popular article in American Scientist).
> Following Hayes, Richardson cites the lack of hardware support and the
> lack of standardized treatment of intervals in programming langauges
> among the main reasons why interval computations are not as widely used
> as they could be.
> 
> He also mentions the need for operations with large integers and large
> reals. 
> 
> It is very good that intervals are mentioned in an article aimed at
> those who teach math and science, additional exposure is never a bad
> idea. 
> 
> Anecdotal evidence shows that (while there is only 1-2 pages about
> intervals, still) thos article is a good exposure: I learned about this
> article from my wife Olga who is now teaching future math teachers at
> our College of Education and who is subscibed to this joirnal as part of
> her membership in AACE; the article is first in this issue.
> 
> Maybe someone from our field can submit, to this (or similar
> education-orineted) journal an education-oriented article specifically
> devoted to intervals?
> 
> Vladik
> 
> 

------ End of Forwarded Message


From Sylvain.Pion@sophia.inria.fr Wed Jun 21 09:23:18 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k5LGNIjd000326
	for <std-interval@compgeom.poly.edu>; Wed, 21 Jun 2006 09:23:18 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k5LGgm92030843
	for <std-interval@compgeom.poly.edu>; Wed, 21 Jun 2006 18:42:48 +0200
Received: from [138.96.83.37] (mouche.inria.fr [138.96.83.37])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k5LGgBx4030691
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Wed, 21 Jun 2006 18:42:11 +0200
Message-ID: <449976E3.1070505@sophia.inria.fr>
Date: Wed, 21 Jun 2006 18:42:11 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Wed, 21 Jun 2006
	18:42:11 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
Subject: [std-interval] separate bool_set proposal available
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 21 Jun 2006 16:23:18 -0000

Dear all,

We have worked on separating the bool_set type (previously named
interval<bool>) into its own proposal.  Let me remind you that
this is used as the return type for the comparisons of intervals,
and it implements multi-valued logic (akeen to Boost.Tribool).

It is going to be document number N2046 in the mid-term mailing.
The PDF is available at :
http://www-sop.inria.fr/geometrica/team/Sylvain.Pion/cxx/bool_set/bool_set_N2046.pdf

Some sample code can also be found here :
http://www-sop.inria.fr/geometrica/team/Sylvain.Pion/cxx/


We plan to release an updated interval proposal at some point
(as soon as possible...).  And we are currently reading through
the cset documents.

-- 
Herve, Guillaume, Sylvain
From avitzur@PacificT.com Wed Jun 21 10:56:31 2006
Received: from red.evocative.com (red.evocative.com [67.131.251.18])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k5LHuVjd000432
	for <std-interval@compgeom.poly.edu>; Wed, 21 Jun 2006 10:56:31 -0700
Received: from [192.168.1.100] (open-131-161-241-26.cliq.com [131.161.241.26])
	by red.evocative.com (8.13.4/8.12.5) with SMTP id k5LIGj0Q060650;
	Wed, 21 Jun 2006 11:16:51 -0700 (PDT)
X-Local-Message: <MX[192.168.1.100]>[192.168.1.100]
Mime-Version: 1.0
X-Sender: w1019@mail.pacifict.com
Message-Id: <p06100505c0bf2bcc57d2@[192.168.1.100]>
In-Reply-To: <449976E3.1070505@sophia.inria.fr>
References: <449976E3.1070505@sophia.inria.fr>
Date: Wed, 21 Jun 2006 11:13:01 -0700
To: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>,
   std-interval@compgeom.poly.edu
From: Ron Avitzur <avitzur@PacificT.com>
Subject: Re: [std-interval] separate bool_set proposal available
Content-Type: text/plain; charset="us-ascii" ; format="flowed"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 21 Jun 2006 17:56:31 -0000

>We have worked on separating the bool_set type (previously named
>interval<bool>) into its own proposal.  Let me remind you that
>this is used as the return type for the comparisons of intervals,
>and it implements multi-valued logic (akeen to Boost.Tribool).
>
>It is going to be document number N2046 in the mid-term mailing.
>The PDF is available at :
>http://www-sop.inria.fr/geometrica/team/Sylvain.Pion/cxx/bool_set/bool_set_N2046.pdf
>
>Some sample code can also be found here :
>http://www-sop.inria.fr/geometrica/team/Sylvain.Pion/cxx/
>
>
>We plan to release an updated interval proposal at some point
>(as soon as possible...).  And we are currently reading through
>the cset documents.

Hello,

I've made this point on the list before, but it might be
worth mentioning in the discussion of tradeoffs in N2046.

Under the rationale:

>It is primarily used for the result of uncertain comparisons of
>types where comparisons can return a trivalent state (e.g.,
>intervals can be compared or overlap), to avoid systematically
>throwing an exception when the comparison returns a result other
>than true or false.

>In this way, bool_set can be used wherever a bool is used and the
>user can expect the same result except if an exception is raised,
>which she then has to handle.

>The benefits are that the code will not compile when bool is
>changed into bool_set and will trigger a code review. The problem is
>that it may not be possible for the programmer to modify the code if
>it belongs to a library

This mostly covers the tradeoffs involved in choosing an implicit
conversion to bool. However, I would suggest also considering a
discussion of std::set<interval>.

In this case, if interval defines

  bool_set interval::operator<(interval&, interval&)

and bool_set offers an implicit conversion to bool, set<interval>
will compile without error and have an unhandled exception if any of
the intervals overlap. The combination of an automatic conversion to
bool while using bool_set with libraries unaware of the tri-valued
logic is at odds with the desire to avoid systematically throwing an
exception when the comparison returns a result other than true or false.

Here the problem is that set wasn't designed to consider that operator<
might throw an exception, the programmer can't modify the library code
to handle the exception, and it is not useful for the programmer using
set<> to handle the exception outside of set. Of course, you can invoke
set<interval, user_supplied_ordering> with some other comparison
which doesn't throw if you are aware of the risk. The convenience of an
automatic conversion creates runtime errors that would otherwise be caught
at compile time in this case.

- Ron Avitzur
From hbr@poly.edu Wed Jun 21 11:40:51 2006
Received: from duke.poly.edu (duke.poly.edu [128.238.2.92])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k5LIepjd000637
	for <std-interval@compgeom.poly.edu>; Wed, 21 Jun 2006 11:40:51 -0700
Received: from [128.238.34.253] (polytope.poly.edu [128.238.34.253])
	by duke.poly.edu (8.13.1/8.13.1) with ESMTP id k5LJ0FWR026977;
	Wed, 21 Jun 2006 15:00:15 -0400 (EDT)
In-Reply-To: <p06100505c0bf2bcc57d2@[192.168.1.100]>
References: <449976E3.1070505@sophia.inria.fr>
	<p06100505c0bf2bcc57d2@[192.168.1.100]>
Mime-Version: 1.0 (Apple Message framework v750)
Content-Type: text/plain; charset=ISO-8859-1; delsp=yes; format=flowed
Message-Id: <9C2812C2-ABB1-4ED6-9F5D-EA041405B5F8@poly.edu>
From: =?ISO-8859-1?Q?Herv=E9_Br=F6nnimann?= <hbr@poly.edu>
Subject: Re: [std-interval] separate bool_set proposal available
Date: Wed, 21 Jun 2006 15:00:12 -0400
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
X-Mailer: Apple Mail (2.750)
X-Spam-Status: No, score=-2.8 required=5.0 tests=ALL_TRUSTED autolearn=failed 
	version=3.0.1
X-Spam-Checker-Version: SpamAssassin 3.0.1 (2004-10-22) on duke.poly.edu
X-Virus-Scanned: ClamAV version 0.87, clamav-milter version 0.87 on
	duke.poly.edu
X-Virus-Status: Clean
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k5LIepjd000637
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 21 Jun 2006 18:40:54 -0000

Ron:

On Jun 21, 2006, at 2:13 PM, Ron Avitzur wrote:
> In this case, if interval defines
>
>  bool_set interval::operator<(interval&, interval&)
>
> and bool_set offers an implicit conversion to bool, set<interval>
> will compile without error and have an unhandled exception if any of
> the intervals overlap.

Please note that in the current (working) version of the interval  
proposal, we do not define an operator< for intervals.  Instead, we  
offer the "bool_set operator<(interval,interval)" in a separate  
namespace bool_set_ops.  Presumably, if the user includes this  
namespace, he/she is aware of bool_set and how it should be used wrt  
exceptions.  (BTW, there are also other namespaces for certainly and  
possibly comparisons.) Without this, you'll get a compile-time  
failure when using set<interval>.  Hope that answers your concerns,
--
Hervé Brönnimann
CIS, Polytechnic University
hbr@poly.edu


From Sylvain.Pion@sophia.inria.fr Sun Jul  9 08:09:59 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k69F9xjd015681
	for <std-interval@compgeom.poly.edu>; Sun, 9 Jul 2006 08:09:59 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k69FZaa7001833
	for <std-interval@compgeom.poly.edu>; Sun, 9 Jul 2006 17:35:40 +0200
Received: from [192.168.11.194] (pD9E2E7C8.dip.t-dialin.net [217.226.231.200])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.6/8.13.4) with ESMTP id k69FZUhb001825
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Sun, 9 Jul 2006 17:35:32 +0200
Message-ID: <44B0D194.8090700@sophia.inria.fr>
Date: Sun, 09 Jul 2006 11:51:16 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Draft standard based on csets
References: <C0AC1CD6.B79%George.Corliss@Marquette.edu>
In-Reply-To: <C0AC1CD6.B79%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Sun, 09 Jul 2006
	17:35:32 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 09 Jul 2006 15:09:59 -0000

Dear George and the ISL team,

I have read through your modified proposal as well as your cset paper.
They contain interesting ideas, and many should be integrated in
the final proposal.  As far as I understood them, it seems that many
of these ideas are orthogonal to csets, so, for the purpose of
discussion here, it would be nice to consider them separately.
In this mail, I will focus on the cset model itself.

As far as I understood, the cset approach is mostly motivated by
the needs to handle :
1- discontinuity of functions (e.g. division by zero)
2- construction from floating-point infinity
3- re-association capabilities
(am I missing other important ones ?)

In practice, the cset model implies that intervals are enlarged so
as to verify new properties.  To define the cset functions, you have
to look at how the function is defined outside the input intervals,
and take all possible limits of values of the function outside the
intervals. (forgive the short imprecise summary).

This produces "strange" effects, like :
- [0;+inf]*[0;+inf] returns [-inf;+inf], whereas "the simple" model
   can simply return the more "natural" [0;+inf].
- 1/[0;1] returns [-inf;+inf]  ([1;+inf] for the "simple" case)
- sign([0;5]) returns [-1;1] ([0;1] for the "simple" case)
You mention these effects in your paper, although you do not really
propose a way to take care of this.

I understand that the cset model brings in some consistency, which
is a most definitely desired feature.  But it does not come without
constraints.  I am also not convinced that the same kind of consistency
cannot be achieved using a non-cset model.

The main question I have is that I do not find convincing arguments,
in practice, to justify the cset model.  For example, the wrap-around
model is nicely motivated by functions like : f(a,b) = 1/(1/a+1/b).
I miss the equivalent for csets.  I believe that, in the 3 main
reasons listed above, 1- and 3- can be specified in a non-cset model
as well (by a non-cset or "simple" model, I mean a model which does
not have to take into account values of functions outside the input
intervals, this is the most distinctive feature of cset, and the most
problematic to me).
For 2-, I am not sure yet what to think, but I hardly see this as a
reason to justify the cset cost anyway.  I see this cost as :
- larger intervals
- slightly slower implementation
- more complicated definition/specification


As far as the proposal is concerned, we can still propose several
models.  The std::interval could have a policy parameter specifying
the model.  If we do that, we add a lot of complexity to the proposal,
which really needs to be motivated.  We are already not considering
the integration of a wrap-around model or Kaucher model (is it a
mistake ?).  I believe that most people care about speed and tightness
of the intervals, so if we need to choose one model, my current
personnal opinion is that a (well-defined of course) non-cset is
the best choice.


I would be more than happy to read opinions of interval experts on
this issue.  Concrete use-cases requiring csets would be a must.

-- 
Sylvain

From george.corliss@marquette.edu Sun Jul  9 08:47:51 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k69Flpjd015737
	for <std-interval@compgeom.poly.edu>; Sun, 9 Jul 2006 08:47:51 -0700
Received: from its-exfe3.marqnet.mu.edu ([134.48.20.166]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 9 Jul 2006 11:13:27 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe3.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 9 Jul 2006 11:13:27 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Sun, 09 Jul 2006 11:13:24 -0500
Subject: Re: [std-interval] Draft standard based on csets
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C0D69554.18DE%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Draft standard based on csets
Thread-Index: Acajcpp72VCvtg9lEduTRQAKlZKJfg==
In-Reply-To: <44B0D194.8090700@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 09 Jul 2006 16:13:27.0237 (UTC)
	FILETIME=[9C691750:01C6A372]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 09 Jul 2006 15:47:52 -0000

Sylvain,

Thank you for your response.  The ISL team is meeting this week in
Milwaukee.  We will be working on further clarifications  One of the
suggestions of Lee Winter is that we construct a model which is subset-able
in the sense that by omitting certain features, you get recognizable, valid
systems for interval arithmetic.  For example, one subset of the theory
might be "simple," and one might be "cset."  We are working on such a
unification, so far without complete success.  We even think there is some
hope that the unified theory might be simpler in the sense that it is more
general.  Work continues.

George Corliss

> Dear George and the ISL team,
> 
> I have read through your modified proposal as well as your cset paper.
> They contain interesting ideas, and many should be integrated in
> the final proposal.  As far as I understood them, it seems that many
> of these ideas are orthogonal to csets, so, for the purpose of
> discussion here, it would be nice to consider them separately.
> In this mail, I will focus on the cset model itself.
> 
> As far as I understood, the cset approach is mostly motivated by
> the needs to handle :
> 1- discontinuity of functions (e.g. division by zero)
> 2- construction from floating-point infinity
> 3- re-association capabilities
> (am I missing other important ones ?)
> 
> In practice, the cset model implies that intervals are enlarged so
> as to verify new properties.  To define the cset functions, you have
> to look at how the function is defined outside the input intervals,
> and take all possible limits of values of the function outside the
> intervals. (forgive the short imprecise summary).
> 
> This produces "strange" effects, like :
> - [0;+inf]*[0;+inf] returns [-inf;+inf], whereas "the simple" model
>    can simply return the more "natural" [0;+inf].
> - 1/[0;1] returns [-inf;+inf]  ([1;+inf] for the "simple" case)
> - sign([0;5]) returns [-1;1] ([0;1] for the "simple" case)
> You mention these effects in your paper, although you do not really
> propose a way to take care of this.
> 
> I understand that the cset model brings in some consistency, which
> is a most definitely desired feature.  But it does not come without
> constraints.  I am also not convinced that the same kind of consistency
> cannot be achieved using a non-cset model.
> 
> The main question I have is that I do not find convincing arguments,
> in practice, to justify the cset model.  For example, the wrap-around
> model is nicely motivated by functions like : f(a,b) = 1/(1/a+1/b).
> I miss the equivalent for csets.  I believe that, in the 3 main
> reasons listed above, 1- and 3- can be specified in a non-cset model
> as well (by a non-cset or "simple" model, I mean a model which does
> not have to take into account values of functions outside the input
> intervals, this is the most distinctive feature of cset, and the most
> problematic to me).
> For 2-, I am not sure yet what to think, but I hardly see this as a
> reason to justify the cset cost anyway.  I see this cost as :
> - larger intervals
> - slightly slower implementation
> - more complicated definition/specification
> 
> 
> As far as the proposal is concerned, we can still propose several
> models.  The std::interval could have a policy parameter specifying
> the model.  If we do that, we add a lot of complexity to the proposal,
> which really needs to be motivated.  We are already not considering
> the integration of a wrap-around model or Kaucher model (is it a
> mistake ?).  I believe that most people care about speed and tightness
> of the intervals, so if we need to choose one model, my current
> personnal opinion is that a (well-defined of course) non-cset is
> the best choice.
> 
> 
> I would be more than happy to read opinions of interval experts on
> this issue.  Concrete use-cases requiring csets would be a must.


From george.corliss@marquette.edu Sat Aug 12 06:09:52 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7CD9qjd019158
	for <std-interval@compgeom.poly.edu>; Sat, 12 Aug 2006 06:09:52 -0700
Received: from its-exfe1.marqnet.mu.edu ([134.48.20.165]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sat, 12 Aug 2006 08:47:12 -0500
Received: from [192.168.1.101] ([134.48.233.100] RDNS failed) by
	its-exfe1.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sat, 12 Aug 2006 08:47:12 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Sat, 12 Aug 2006 08:47:05 -0500
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C1034609.2C37%George.Corliss@Marquette.edu>
Thread-Topic: Comparisons
Thread-Index: Aca+FcvVCjQiOioJEduanQAKlZKJfg==
In-Reply-To: <44B0D194.8090700@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 12 Aug 2006 13:47:12.0301 (UTC)
	FILETIME=[D02F9DD0:01C6BE15]
Subject: [std-interval] Comparisons
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sat, 12 Aug 2006 13:09:52 -0000

As this groups does not yet appear to have reached a consensus on comparison
operators, there are some additional thoughts.

I've been asked to teach a database class for the first time in my career,
so I am reading about SQL (Structured Query Language).  Interestingly, SQL
uses a three-valued logic with values TRUE, FALSE, and UNKNOWN.

The rationale seems to be
   1. Fields in a database often have values NULL
   2. Comparisons with NULL yield UNKNOWN
   3. Need "Boolean" operators on results of comparisons

The analogy with intervals is not perfect, but it is informative.  Since
databases are more widely used than intervals, their standards have endured
severe scrutiny and extensive practical applications.  We may have something
to learn.

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


From Sylvain.Pion@sophia.inria.fr Sat Aug 12 08:47:47 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7CFlhjd019352
	for <std-interval@compgeom.poly.edu>; Sat, 12 Aug 2006 08:47:47 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k7CGP6xW001659
	for <std-interval@compgeom.poly.edu>; Sat, 12 Aug 2006 18:25:10 +0200
Received: from [192.168.0.1] (lns-bzn-50f-62-147-188-197.adsl.proxad.net
	[62.147.188.197])	(authenticated bits=0)
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k7CGP32p001651
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Sat, 12 Aug 2006 18:25:05 +0200
Message-ID: <44DE00DE.4070602@sophia.inria.fr>
Date: Sat, 12 Aug 2006 18:25:02 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
User-Agent: Thunderbird 1.5.0.2 (Macintosh/20060415)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Comparisons
References: <C1034609.2C37%George.Corliss@Marquette.edu>
In-Reply-To: <C1034609.2C37%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Sat, 12 Aug 2006
	18:25:05 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sat, 12 Aug 2006 15:47:47 -0000

George Corliss wrote:
> As this groups does not yet appear to have reached a consensus on comparison
> operators, there are some additional thoughts.

As far as I'm concerned, I understand that several different semantics
are desired.  I am unsure about the best way to provide these in C++,
but so far the proposal puts them in separate namespaces, so at least
they are easily available.  I am keeping an eye on the evolution of the
language, most importantly the concepts, if we can find better ways to
provide the various semantics.

> I've been asked to teach a database class for the first time in my career,
> so I am reading about SQL (Structured Query Language).  Interestingly, SQL
> uses a three-valued logic with values TRUE, FALSE, and UNKNOWN.
> 
> The rationale seems to be
>    1. Fields in a database often have values NULL
>    2. Comparisons with NULL yield UNKNOWN
>    3. Need "Boolean" operators on results of comparisons
> 
> The analogy with intervals is not perfect, but it is informative.  Since
> databases are more widely used than intervals, their standards have endured
> severe scrutiny and extensive practical applications.  We may have something
> to learn.

Thanks for the information, George.  It's good to see that
the SQL semantic is covered by our bool_set proposal.  It
makes one more motivation to standardize something like this.

I would be curious about the details, though.  What happens
if you do "if(UNKNOWN)" (or the equivalent in SQL, if there
is an equivalent) ?

-- 
Sylvain
From george.corliss@marquette.edu Sun Aug 13 05:52:31 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7DCqVjd028783
	for <std-interval@compgeom.poly.edu>; Sun, 13 Aug 2006 05:52:31 -0700
Received: from its-exfe1.marqnet.mu.edu ([134.48.20.165]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 13 Aug 2006 08:30:16 -0500
Received: from [192.168.1.101] ([134.48.233.100] RDNS failed) by
	its-exfe1.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Sun, 13 Aug 2006 08:30:16 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Sun, 13 Aug 2006 08:30:04 -0500
Subject: Re: [std-interval] Comparisons
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C104938C.2C77%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Comparisons
Thread-Index: Aca+3JWv1CowzSrPEduaRQAKlZKJfg==
In-Reply-To: <44DE00DE.4070602@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 13 Aug 2006 13:30:16.0342 (UTC)
	FILETIME=[9D0A5360:01C6BEDC]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Sun, 13 Aug 2006 12:52:31 -0000

Sylvain,

>> I've been asked to teach a database class for the first time in my career,
>> so I am reading about SQL (Structured Query Language).  Interestingly, SQL
>> uses a three-valued logic with values TRUE, FALSE, and UNKNOWN.
>> 
>> The rationale seems to be
>>    1. Fields in a database often have values NULL
>>    2. Comparisons with NULL yield UNKNOWN
>>    3. Need "Boolean" operators on results of comparisons
>> 
>> The analogy with intervals is not perfect, but it is informative.  Since
>> databases are more widely used than intervals, their standards have endured
>> severe scrutiny and extensive practical applications.  We may have something
>> to learn.
> 
> Thanks for the information, George.  It's good to see that
> the SQL semantic is covered by our bool_set proposal.  It
> makes one more motivation to standardize something like this.
> 
> I would be curious about the details, though.  What happens
> if you do "if(UNKNOWN)" (or the equivalent in SQL, if there
> is an equivalent) ?

Yes, I think it strengthens our case to say, "We are similar to the
heavily-used SQL practice," if we are.

Others more knowledgeable may correct me, but I do not find control
structures.  SQL is a declarative language, so conditionals act more like
guards, for example,
   SELECT name FROM employees WHERE birthdate > '1936-08-12';

If birthdate has the value NULL, (birthdate > '1936-08-12') evaluates to
UNKNOWN, and the record is NOT selected.  In general, only those
combinations that evaluate to TRUE are selected.  UNKNOWN propagates from
comparisons (birthdate > '1936-08-12'), through logical operators (AND, OR,
NOT), but when SQL needs to make a select/no-select decision, TRUE means,
"I'm sure the condition is true," and FALSE means, "I cannot safely assert
TRUE."

In our context, Boolean TRUE is what we sometimes call CERTAINLY TRUE, and
FALSE is not TRUE.  With a careful interpretation, FALSE is an enclosure of
TRUE, in the sense that the correct value is true, but we cannot guarantee
that, so we return a "larger interval."

At least, that is how I interpret the SQL practice in an interval analogy.

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


From george.corliss@marquette.edu Tue Aug 15 13:55:25 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7FKtPjd002731
	for <std-interval@compgeom.poly.edu>; Tue, 15 Aug 2006 13:55:25 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Tue, 15 Aug 2006 16:33:54 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Tue, 15 Aug 2006 16:33:54 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Tue, 15 Aug 2006 16:33:49 -0500
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C107A7ED.2DFA%George.Corliss@Marquette.edu>
Thread-Topic: applications
Thread-Index: AcbAsn7CvV+USiylEdupTQAKlZKJfg==
In-Reply-To: <6E584669-2AFF-48D1-A3A1-56B865929D7F@mcmaster.ca>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 15 Aug 2006 21:33:54.0182 (UTC)
	FILETIME=[81D8D260:01C6C0B2]
Subject: [std-interval] FW: applications
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 15 Aug 2006 20:55:25 -0000

Friends,

Ned Neddialkov had sent this pointer which may be of interest to this list
for use as "ammunition" that intervals are good.

------ Forwarded Message
> From: Ned Nedialkov <nedialk@mcmaster.ca>
> Date: Thu, 27 Jul 2006 13:45:01 -0400
> Subject: applications
> 
> I discovered recently a very thorough study of applications of
> interval methods, in particular integration, to space flight mechanics:
http://www.esa.int/gsp/ACT/doc/ACT-RPT-04-4105-ARIADNA-Assessing_the_Accurac
y_of_Interval_arithmetic_Estimates.pdf

------ End of Forwarded Message

The ESA Technical Officer, Mihaly Markot, was a student of Tibor Tsendes.


Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


From lawrence.crowl@gmail.com Wed Aug 16 14:45:46 2006
Received: from nf-out-0910.google.com (nf-out-0910.google.com
	[64.233.182.184])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7GLjkjd004901
	for <std-interval@compgeom.poly.edu>; Wed, 16 Aug 2006 14:45:46 -0700
Received: by nf-out-0910.google.com with SMTP id q29so836565nfc
	for <std-interval@compgeom.poly.edu>;
	Wed, 16 Aug 2006 15:24:41 -0700 (PDT)
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
	s=beta; d=gmail.com;
	h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references;
	b=s5HQjIBal86ApoQjTRaG70kdW3CTu1Dq8T5JMQHqpqtGoK8StgHkhlgN2bE/oPEtK9TqVX9Agkz6Y+fXwiHAHa5UL7pyEKxk0z8qfYkqKu9RB6JeI/BeHpsXxWfDISDl48FUUdvdMtLbpUttJZfpuV1tiPZiEGvYjesQek+h2e4=
Received: by 10.49.10.3 with SMTP id n3mr1326509nfi;
        Wed, 16 Aug 2006 15:24:41 -0700 (PDT)
Received: by 10.48.163.7 with HTTP; Wed, 16 Aug 2006 15:24:41 -0700 (PDT)
Message-ID: <90228e530608161524v5f4b390dk2998b0afe741aad4@mail.gmail.com>
Date: Wed, 16 Aug 2006 15:24:41 -0700
From: "Lawrence Crowl" <lawrence.crowl@gmail.com>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] FW: applications
In-Reply-To: <C107A7ED.2DFA%George.Corliss@Marquette.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
References: <6E584669-2AFF-48D1-A3A1-56B865929D7F@mcmaster.ca>
	 <C107A7ED.2DFA%George.Corliss@Marquette.edu>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Lawrence@Crowl.org, For discussions concerning the C++
	standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 16 Aug 2006 21:45:51 -0000

I'm not an expert in the domain, but my read of the conclusions
is that the interval approach wasn't helpful.  Apparently, the
integration process failed far earlier than non-interval integration.
How are we interpreting the conclusions differently?

On 8/15/06, George Corliss <George.Corliss@marquette.edu> wrote:
> Friends,
>
> Ned Neddialkov had sent this pointer which may be of interest to this list
> for use as "ammunition" that intervals are good.
>
> ------ Forwarded Message
> > From: Ned Nedialkov <nedialk@mcmaster.ca>
> > Date: Thu, 27 Jul 2006 13:45:01 -0400
> > Subject: applications
> >
> > I discovered recently a very thorough study of applications of
> > interval methods, in particular integration, to space flight mechanics:
> http://www.esa.int/gsp/ACT/doc/ACT-RPT-04-4105-ARIADNA-Assessing_the_Accurac
> y_of_Interval_arithmetic_Estimates.pdf
>
> ------ End of Forwarded Message
>
> The ESA Technical Officer, Mihaly Markot, was a student of Tibor Tsendes.
>
>
> Dr. George Corliss
> Electrical and Computer Engineering
> Marquette University
> P.O. Box 1881
> 1515 W. Wisconsin Ave.
> Milwaukee, WI 53201-1881
> George.Corliss@Marquette.edu
> 414-288-6599 (office); 288-4400 (GasDay);
>     288-6280 (Dept.); 288-5579 (fax)
> Office: Haggerty Engineering 296
> Www.eng.mu.edu/corlissg
>
>
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval
>


-- 
Lawrence Crowl
From markot@sztaki.hu Thu Aug 17 02:44:03 2006
Received: from rs1.lvs.sztaki.hu (rs1.lvs.sztaki.hu [193.6.200.131])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7H9i2jd005818
	for <std-interval@compgeom.poly.edu>; Thu, 17 Aug 2006 02:44:02 -0700
Received: (qmail 16710 invoked from network); 17 Aug 2006 12:23:07 +0200
Received: from unknown (HELO [10.1.1.44]) (markot@[10.1.1.44])
          (envelope-sender <markot@sztaki.hu>)
          by smtp.sztaki.hu (qmail-ldap-1.03) with SMTP
          for <std-interval@compgeom.poly.edu>; 17 Aug 2006 12:23:07 +0200
Message-ID: <44E4438B.7010406@sztaki.hu>
Date: Thu, 17 Aug 2006 12:23:07 +0200
From: =?ISO-8859-1?Q?Mih=E1ly_Csaba_Mark=F3t?= <markot@sztaki.hu>
User-Agent: Thunderbird 1.5.0.5 (Windows/20060719)
MIME-Version: 1.0
To: std-interval@compgeom.poly.edu
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Subject: [std-interval] Re: applications in space science
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 17 Aug 2006 09:44:03 -0000

Dear Colleagues,

I would like to add some comments to the discussion as a Technical 
Officer of the mentioned study: (The T.O. title means that I represented 
the ESA side which awarded a research contract in this subject.)

- The study was intended to be a very initial assessment of the 
applicability of interval ODE solvers for special space flight problems. 
Because of the short contract period (4 months) I did not expect any 
particularly detailed results.

- The numerical results indeed proved that the tested existing 
general-purpose, "off-the-shelf" interval solvers are not comparable 
with non-interval ones in term of the time of propagation, due to the 
overestimation. Nothing really surprising...

- Note that the study was done by a team which has primary focus on 
space research and had less previous expertize with interval tools. 
Unfortunately, I was not successful with my plan to award a parallel 
contract also to a primarily interval-oriented team. This way I got a 
report on "what happens in some simple scenarios", but nothing on "why 
the interval solvers fail so earlier" and "how to improve/tune these 
solvers to achieve better results".

- All in all, I still find this study as a good "ammunition" - not 
because of the achieved results but because we pointed out the need of 
reliable methods in this field and made some initial contacts with the 
space science community - in the hope of further collaborations.

Regards,
Mihaly

-- 
Dr. Mihaly Csaba Markot
Computer and Automation Research Institute
Hungarian Academy of Sciences
Phone: +36 1 279 6112, Fax: +36 1 209 5267

----------------------------- Original message -----------------------------
Subject:   Re: [std-interval] FW: applications
Sent by:  "Lawrence Crowl" <lawrence.crowl@gmail.com>
Date:   Thu, August 17, 2006 12:24 am
Address: "For discussions concerning the C++ standardization of 
intervals" <std-interval@compgeom.poly.edu>
--------------------------------------------------------------------------

I'm not an expert in the domain, but my read of the conclusions
is that the interval approach wasn't helpful.  Apparently, the
integration process failed far earlier than non-interval integration.
How are we interpreting the conclusions differently?

On 8/15/06, George Corliss <George.Corliss@marquette.edu> wrote:
 > > Friends,
 > >
 > > Ned Neddialkov had sent this pointer which may be of interest to 
this list
 > > for use as "ammunition" that intervals are good.
 > >
 > > ------ Forwarded Message
 >> > > From: Ned Nedialkov <nedialk@mcmaster.ca>
 >> > > Date: Thu, 27 Jul 2006 13:45:01 -0400
 >> > > Subject: applications
 >> > >
 >> > > I discovered recently a very thorough study of applications of
 >> > > interval methods, in particular integration, to space flight 
mechanics:
 > > 
http://www.esa.int/gsp/ACT/doc/ACT-RPT-04-4105-ARIADNA-Assessing_the_Accurac
 > > y_of_Interval_arithmetic_Estimates.pdf
 > >
 > > ------ End of Forwarded Message
 > >
 > > The ESA Technical Officer, Mihaly Markot, was a student of Tibor 
Tsendes.
 > >
 > >
 > > Dr. George Corliss
 > > Electrical and Computer Engineering
 > > Marquette University
 > > P.O. Box 1881
 > > 1515 W. Wisconsin Ave.
 > > Milwaukee, WI 53201-1881
 > > George.Corliss@Marquette.edu
 > > 414-288-6599 (office); 288-4400 (GasDay);
 > >     288-6280 (Dept.); 288-5579 (fax)
 > > Office: Haggerty Engineering 296
 > > Www.eng.mu.edu/corlissg
 > >
 > >
 > > _______________________________________________
 > > Std-interval mailing list
 > > Std-interval@compgeom.poly.edu
 > > http://compgeom.poly.edu/mailman/listinfo/std-interval
 > >


-- Lawrence Crowl _______________________________________________ 
Std-interval mailing list Std-interval@compgeom.poly.edu 
http://compgeom.poly.edu/mailman/listinfo/std-interval
From george.corliss@marquette.edu Thu Aug 17 03:00:33 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7HA0Wjd005843
	for <std-interval@compgeom.poly.edu>; Thu, 17 Aug 2006 03:00:32 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 17 Aug 2006 05:39:29 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 17 Aug 2006 05:39:29 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Thu, 17 Aug 2006 05:39:22 -0500
Subject: Re: [std-interval] Re: applications in space science
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C109B18A.2EF3%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Re: applications in space science
Thread-Index: AcbB6WagpVPFji3cEduo+QAKlZKJfg==
In-Reply-To: <44E4438B.7010406@sztaki.hu>
Mime-version: 1.0
Content-type: text/plain;
	charset="ISO-8859-1"
X-OriginalArrivalTime: 17 Aug 2006 10:39:29.0332 (UTC)
	FILETIME=[6AFFAF40:01C6C1E9]
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k7HA0Wjd005843
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 17 Aug 2006 10:00:33 -0000

Mihaly,

Great to hear from you.  Thanks for putting in your perspective.

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg



On 8/17/06 5:23 AM, "Mihály Csaba Markót" <markot@sztaki.hu> wrote:

> Dear Colleagues,
> 
> I would like to add some comments to the discussion as a Technical
> Officer of the mentioned study: (The T.O. title means that I represented
> the ESA side which awarded a research contract in this subject.)
> 
> - The study was intended to be a very initial assessment of the
> applicability of interval ODE solvers for special space flight problems.
> Because of the short contract period (4 months) I did not expect any
> particularly detailed results.
> 
> - The numerical results indeed proved that the tested existing
> general-purpose, "off-the-shelf" interval solvers are not comparable
> with non-interval ones in term of the time of propagation, due to the
> overestimation. Nothing really surprising...
> 
> - Note that the study was done by a team which has primary focus on
> space research and had less previous expertize with interval tools.
> Unfortunately, I was not successful with my plan to award a parallel
> contract also to a primarily interval-oriented team. This way I got a
> report on "what happens in some simple scenarios", but nothing on "why
> the interval solvers fail so earlier" and "how to improve/tune these
> solvers to achieve better results".
> 
> - All in all, I still find this study as a good "ammunition" - not
> because of the achieved results but because we pointed out the need of
> reliable methods in this field and made some initial contacts with the
> space science community - in the hope of further collaborations.
> 
> Regards,
> Mihaly



From markus.neher@math.uni-karlsruhe.de Fri Aug 18 00:25:24 2006
Received: from smtp2.rz.uni-karlsruhe.de (smtp2.rz.uni-karlsruhe.de
	[129.13.185.218])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7I7POjd007778
	for <std-interval@compgeom.poly.edu>; Fri, 18 Aug 2006 00:25:24 -0700
Received: from [129.13.114.121] (iamlapc32.mathematik.uni-karlsruhe.de
	[129.13.114.121])
	by smtp2.rz.uni-karlsruhe.de with esmtp (Exim 4.50 #1)
	id 1GDzLP-0001sw-63; Fri, 18 Aug 2006 10:04:43 +0200
Message-ID: <44E5749B.6050008@math.uni-karlsruhe.de>
Date: Fri, 18 Aug 2006 10:04:43 +0200
From: Markus Neher <markus.neher@math.uni-karlsruhe.de>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de-AT;
	rv:1.7.13) Gecko/20060411
X-Accept-Language: de-de, en-us, en
MIME-Version: 1.0
To: std-interval@compgeom.poly.edu
References: <200608171900.k7HJ01jg006832@compgeom.poly.edu>
In-Reply-To: <200608171900.k7HJ01jg006832@compgeom.poly.edu>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Subject: [std-interval] Re: ESA Study on Interval Methods for Inegration
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 18 Aug 2006 07:25:24 -0000

Dear colleagues,

> Message: 1
> Date: Wed, 16 Aug 2006 15:24:41 -0700
> From: "Lawrence Crowl" <lawrence.crowl@gmail.com>
> Subject: Re: [std-interval] FW: applications
> To: "For discussions concerning the C++ standardization of intervals"
> 	<std-interval@compgeom.poly.edu>
> Message-ID:
> 	<90228e530608161524v5f4b390dk2998b0afe741aad4@mail.gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> 
> I'm not an expert in the domain, but my read of the conclusions
> is that the interval approach wasn't helpful.  Apparently, the
> integration process failed far earlier than non-interval integration.
> How are we interpreting the conclusions differently?

In my opinion, the ESA study only shows that two existing interval
solvers for ODEs failed earlier than non-interval integration.

It is well known that validated integration with Taylor model methods
performes much better for these IVPs than the tested interval solvers,
see for example

@article{HoBeMa03a,
      author    = "J. Hoefkens and M. Berz and K. Makino",
      title     = "Controlling the Wrapping Effect in the Solution of
                   {ODEs} for Asteroids",
      journal   = "Reliable Computing",
      volume    = "9",
      pages     = "21-41",
      year      = "2003",
      }

Regards,

Markus
From rmoore17@columbus.rr.com Fri Aug 18 12:43:00 2006
Received: from ms-smtp-01.ohiordc.rr.com (ms-smtp-01.ohiordc.rr.com
	[65.24.5.135])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k7IJh0jd009033
	for <std-interval@compgeom.poly.edu>; Fri, 18 Aug 2006 12:43:00 -0700
Received: from Moore (cpe-24-160-174-75.columbus.res.rr.com [24.160.174.75])
	k7IKMTGK027737	for <std-interval@compgeom.poly.edu>;
	Fri, 18 Aug 2006 16:22:30 -0400 (EDT)
Message-ID: <006801c6c304$244624a0$0202a8c0@Moore>
From: "Ray Moore" <rmoore17@columbus.rr.com>
To: <std-interval@compgeom.poly.edu>
References: <200608181900.k7IJ02jf008972@compgeom.poly.edu>
Date: Fri, 18 Aug 2006 16:23:17 -0400
MIME-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="iso-8859-1";
	reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962
X-Virus-Scanned: Symantec AntiVirus Scan Engine
Subject: [std-interval] Re: Std-interval Digest, Vol 7, Issue 5
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Fri, 18 Aug 2006 19:43:00 -0000

Markus and All:

Indeed, among the conclusions of the ESA study, we find:
"All interval integrators which have been tested in this work try to avoid 
the wrapping effect using a linear expansion of the solution of the ODE with 
respect to the initial conditions. However, the works of Berz and Makino 
showed that important improvements on the control of this effect cam be 
achieved when higher order methods on initial conditions are applied. As a 
consequence, further intensive investigations should be accomplished, aimed 
at estimating the performances of such promising methods on the integration 
of typical space-related problems."

Ray Moore


----- Original Message ----- 
From: <std-interval-request@compgeom.poly.edu>
To: <std-interval@compgeom.poly.edu>
Sent: Friday, August 18, 2006 3:00 PM
Subject: Std-interval Digest, Vol 7, Issue 5


> Send Std-interval mailing list submissions to
> std-interval@compgeom.poly.edu
>
> To subscribe or unsubscribe via the World Wide Web, visit
> http://compgeom.poly.edu/mailman/listinfo/std-interval
> or, via email, send a message with subject or body 'help' to
> std-interval-request@compgeom.poly.edu
>
> You can reach the person managing the list at
> std-interval-owner@compgeom.poly.edu
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Std-interval digest..."
>
>
> Today's Topics:
>
>   1. Re: ESA Study on Interval Methods for Inegration (Markus Neher)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Fri, 18 Aug 2006 10:04:43 +0200
> From: Markus Neher <markus.neher@math.uni-karlsruhe.de>
> Subject: [std-interval] Re: ESA Study on Interval Methods for
> Inegration
> To: std-interval@compgeom.poly.edu
> Message-ID: <44E5749B.6050008@math.uni-karlsruhe.de>
> Content-Type: text/plain; charset=us-ascii
>
> Dear colleagues,
>
>> Message: 1
>> Date: Wed, 16 Aug 2006 15:24:41 -0700
>> From: "Lawrence Crowl" <lawrence.crowl@gmail.com>
>> Subject: Re: [std-interval] FW: applications
>> To: "For discussions concerning the C++ standardization of intervals"
>> <std-interval@compgeom.poly.edu>
>> Message-ID:
>> <90228e530608161524v5f4b390dk2998b0afe741aad4@mail.gmail.com>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>
>> I'm not an expert in the domain, but my read of the conclusions
>> is that the interval approach wasn't helpful.  Apparently, the
>> integration process failed far earlier than non-interval integration.
>> How are we interpreting the conclusions differently?
>
> In my opinion, the ESA study only shows that two existing interval
> solvers for ODEs failed earlier than non-interval integration.
>
> It is well known that validated integration with Taylor model methods
> performes much better for these IVPs than the tested interval solvers,
> see for example
>
> @article{HoBeMa03a,
>      author    = "J. Hoefkens and M. Berz and K. Makino",
>      title     = "Controlling the Wrapping Effect in the Solution of
>                   {ODEs} for Asteroids",
>      journal   = "Reliable Computing",
>      volume    = "9",
>      pages     = "21-41",
>      year      = "2003",
>      }
>
> Regards,
>
> Markus
>
> ------------------------------
>
> _______________________________________________
> Std-interval mailing list
> Std-interval@compgeom.poly.edu
> http://compgeom.poly.edu/mailman/listinfo/std-interval
>
>
> End of Std-interval Digest, Vol 7, Issue 5
> ******************************************
> 


From lcglopes@sapo.pt Tue Aug 22 16:23:14 2006
Received: from sapo.pt (relay5.ptmail.sapo.pt [212.55.154.25])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k7MNNDjd028003
	for <std-interval@compgeom.poly.edu>; Tue, 22 Aug 2006 16:23:13 -0700
Received: (qmail 4047 invoked from network); 23 Aug 2006 00:04:13 -0000
Received: from unknown (HELO sapo.pt) (10.134.35.157)
  by relay6 with SMTP; 23 Aug 2006 00:04:13 -0000
Received: (qmail 17600 invoked from network); 23 Aug 2006 00:04:13 -0000
X-AntiVirus: PTMail-AV 0.3-0.88.4
X-Virus-Status: Clean (0.01263 seconds)
Received: from unknown (HELO nome4cca87a7b4)
	(lcglopes@sapo.pt@[81.193.164.114])
	(envelope-sender <lcglopes@sapo.pt>)
	by mta7 (qmail-ldap-1.03) with SMTP
	for <lopes@uma.pt>; 23 Aug 2006 00:04:13 -0000
From: "Luiz C. G. Lopes" <lcglopes@sapo.pt>
To: <std-interval@compgeom.poly.edu>
Date: Wed, 23 Aug 2006 01:04:09 +0100
Message-ID: <000001c6c647$a8790940$0301a8c0@nome4cca87a7b4>
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_0001_01C6C650.0A3D7140"
X-Mailer: Microsoft Office Outlook 11
Thread-Index: AcbGR6gLtfkxzVbmQby3PSxystVctQ==
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962
cc: lopes@uma.pt
Subject: [std-interval] 
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 22 Aug 2006 23:23:22 -0000

This is a multi-part message in MIME format.

------=_NextPart_000_0001_01C6C650.0A3D7140
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Dear colleagues,
Does anyone know any implementation of real and/or complex interval
arithmetic (with outward rounding) in Python?
Thank you in advance for your advice.
Luiz Lopes

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Luiz C. G. Lopes
Dept. of Mathematics and Engineering
University of Madeira, Penteada Campus
9000-390 Funchal, Madeira Is., Portugal
Phone: +351 291 705 151
Fax:   +351 291 705 199
E-mail: lopes@uma.pt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 
 

------=_NextPart_000_0001_01C6C650.0A3D7140
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<META content=3D"MSHTML 6.00.2900.2963" name=3DGENERATOR></HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Dear=20
colleagues,</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Does =
anyone know any=20
implementation of real and/or complex interval arithmetic (with outward=20
rounding) in Python?</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Thank =
you in advance=20
for your advice.</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Luiz=20
Lopes</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006><FONT =
face=3DArial=20
size=3D2><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>Luiz C. G. =
Lopes<BR>Dept.=20
of Mathematics and Engineering<BR>University of Madeira, Penteada=20
Campus<BR>9000-390 Funchal, Madeira Is., Portugal<BR>Phone: +351 291 705 =

151<BR>Fax:&nbsp;&nbsp; +351 291 705 199<BR>E-mail: <A =
title=3Dmailto:lopes@uma.pt=20
href=3D"mailto:lopes@uma.pt">lopes@uma.pt</A><BR>~~~~~~~~~~~~~~~~~~~~~~~~=
~~~~~~~~~~~~~~~<BR></DIV></FONT></SPAN></FONT>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D109414723-22082006></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D109414723-22082006></SPAN></FONT>&nbsp;</DIV></FONT></DIV></BODY>=
</HTML>

------=_NextPart_000_0001_01C6C650.0A3D7140--


From lcglopes@sapo.pt Tue Aug 22 16:24:34 2006
Received: from sapo.pt (relay5.ptmail.sapo.pt [212.55.154.25])
	by compgeom.poly.edu (8.12.8/8.12.8) with SMTP id k7MNOXjd028015
	for <std-interval@compgeom.poly.edu>; Tue, 22 Aug 2006 16:24:33 -0700
Received: (qmail 4459 invoked from network); 23 Aug 2006 00:05:34 -0000
Received: from unknown (HELO sapo.pt) (10.134.35.152)
  by relay6 with SMTP; 23 Aug 2006 00:05:34 -0000
Received: (qmail 14375 invoked from network); 23 Aug 2006 00:05:34 -0000
X-AntiVirus: PTMail-AV 0.3-0.88.4
X-Virus-Status: Clean (0.01254 seconds)
Received: from unknown (HELO nome4cca87a7b4)
	(lcglopes@sapo.pt@[81.193.164.114])
	(envelope-sender <lcglopes@sapo.pt>)
	by mta2 (qmail-ldap-1.03) with SMTP
	for <lopes@uma.pt>; 23 Aug 2006 00:05:34 -0000
From: "Luiz C. G. Lopes" <lcglopes@sapo.pt>
To: <std-interval@compgeom.poly.edu>
Date: Wed, 23 Aug 2006 01:05:30 +0100
Message-ID: <000501c6c647$d8d3ba90$0301a8c0@nome4cca87a7b4>
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_000_0006_01C6C650.3A982290"
X-Mailer: Microsoft Office Outlook 11
Thread-Index: AcbGR9iV/x1DFYmNQKGw07muizL9Cw==
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962
cc: lopes@uma.pt
Subject: [std-interval] Interval arithmetic in Python
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 22 Aug 2006 23:24:34 -0000

This is a multi-part message in MIME format.

------=_NextPart_000_0006_01C6C650.3A982290
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Dear colleagues,
Does anyone know any implementation of real and/or complex interval
arithmetic (with outward rounding) in Python?
Thank you in advance for your advice.
Luiz Lopes

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Luiz C. G. Lopes
Dept. of Mathematics and Engineering
University of Madeira, Penteada Campus
9000-390 Funchal, Madeira Is., Portugal
Phone: +351 291 705 151
Fax:   +351 291 705 199
E-mail: lopes@uma.pt
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 
 

------=_NextPart_000_0006_01C6C650.3A982290
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<META content=3D"MSHTML 6.00.2900.2963" name=3DGENERATOR></HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Dear=20
colleagues,</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Does =
anyone know any=20
implementation of real and/or complex interval arithmetic (with outward=20
rounding) in Python?</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Thank =
you in advance=20
for your advice.</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006>Luiz=20
Lopes</SPAN></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><SPAN class=3D109414723-22082006><FONT =
face=3DArial=20
size=3D2><BR>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR>Luiz C. G. =
Lopes<BR>Dept.=20
of Mathematics and Engineering<BR>University of Madeira, Penteada=20
Campus<BR>9000-390 Funchal, Madeira Is., Portugal<BR>Phone: +351 291 705 =

151<BR>Fax:&nbsp;&nbsp; +351 291 705 199<BR>E-mail: <A =
title=3Dmailto:lopes@uma.pt=20
href=3D"mailto:lopes@uma.pt">lopes@uma.pt</A><BR>~~~~~~~~~~~~~~~~~~~~~~~~=
~~~~~~~~~~~~~~~<BR></DIV></FONT></SPAN></FONT>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D109414723-22082006></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><SPAN=20
class=3D109414723-22082006></SPAN></FONT>&nbsp;</DIV></FONT></DIV></BODY>=
</HTML>

------=_NextPart_000_0006_01C6C650.3A982290--


From Sylvain.Pion@sophia.inria.fr Tue Sep 12 00:28:03 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8C7S2jd012828
	for <std-interval@compgeom.poly.edu>; Tue, 12 Sep 2006 00:28:03 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8C8G5Rv010391
	for <std-interval@compgeom.poly.edu>; Tue, 12 Sep 2006 10:16:05 +0200
Received: from [138.96.83.37] (mouche.inria.fr [138.96.83.37])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8C8G1oJ010314
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Tue, 12 Sep 2006 10:16:04 +0200
Message-ID: <45066CC1.5000706@sophia.inria.fr>
Date: Tue, 12 Sep 2006 10:16:01 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Tue, 12 Sep 2006
	10:16:04 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
Subject: [std-interval] Revised document available
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Tue, 12 Sep 2006 07:28:03 -0000

Dear std-intervalers,

A revised version of the proposal is now available at:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2067.pdf

The accompanying "bool_set" proposal is still at:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2046.pdf

Any comment is more than welcome, especially before the ISO/WG21
meeting in Portland in October.

Best regards,
-- 
Sylvain
From george.corliss@marquette.edu Tue Sep 12 18:18:53 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8D1Irjd016664
	for <std-interval@compgeom.poly.edu>; Tue, 12 Sep 2006 18:18:53 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Tue, 12 Sep 2006 21:07:11 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Tue, 12 Sep 2006 21:07:10 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Tue, 12 Sep 2006 21:07:02 -0500
Subject: Re: [std-interval] Revised document available
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C12CD1F6.3C12%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Revised document available
Thread-Index: AcbW2U1Qi8lBWULMEdu3WwAKlZKJfg==
In-Reply-To: <45066CC1.5000706@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 13 Sep 2006 02:07:10.0616 (UTC)
	FILETIME=[52731980:01C6D6D9]
cc: ISL List <isl@interval.louisiana.edu>
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 13 Sep 2006 01:18:53 -0000

Sylvain,

I appreciate the clear effort your team has put into this version.  I hope
it generates additional discussion.

A couple of easy points, in the title, I'd capitalize Add.

On p. 31 Acknowledgments, I ask that you mention John Pryce instead of (or
in addition) to me.  John did FAR more of the work in crafting our
discussions than I did.

Reference [15] is no longer available from that URL, as I lost my account on
that server some time ago.  It is probably most appropriate to say a
preprint is available from the author.

I'll be working with John Pryce to offer other comments.

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


On 9/12/06 3:16 AM, "Sylvain Pion" <Sylvain.Pion@sophia.inria.fr> wrote:

> Dear std-intervalers,
> 
> A revised version of the proposal is now available at:
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2067.pdf
> 
> The accompanying "bool_set" proposal is still at:
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2046.pdf
> 
> Any comment is more than welcome, especially before the ISO/WG21
> meeting in Portland in October.
> 
> Best regards,


From Sylvain.Pion@sophia.inria.fr Wed Sep 13 00:25:56 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8D7Pujd017102
	for <std-interval@compgeom.poly.edu>; Wed, 13 Sep 2006 00:25:56 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8D8EJFd015927
	for <std-interval@compgeom.poly.edu>; Wed, 13 Sep 2006 10:14:19 +0200
Received: from [138.96.83.37] (mouche.inria.fr [138.96.83.37])
	(authenticated bits=0)
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8D8E1tN015810
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Wed, 13 Sep 2006 10:14:02 +0200
Message-ID: <4507BDC9.7040003@sophia.inria.fr>
Date: Wed, 13 Sep 2006 10:14:01 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
Organization: INRIA Sophia Antipolis, France
User-Agent: Mozilla Thunderbird 1.0.7-1.1.fc3 (X11/20050929)
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Revised document available
References: <C12CD1F6.3C12%George.Corliss@Marquette.edu>
In-Reply-To: <C12CD1F6.3C12%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Wed, 13 Sep 2006
	10:14:02 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 13 Sep 2006 07:25:56 -0000

George Corliss wrote:
> I appreciate the clear effort your team has put into this version.  I hope
> it generates additional discussion.

Thanks.  We did the best we could with our limited time.

> A couple of easy points, in the title, I'd capitalize Add.
> 
> On p. 31 Acknowledgments, I ask that you mention John Pryce instead of (or
> in addition) to me.  John did FAR more of the work in crafting our
> discussions than I did.
> 
> Reference [15] is no longer available from that URL, as I lost my account on
> that server some time ago.  It is probably most appropriate to say a
> preprint is available from the author.

I agree on these points, I will fix these for the next iteration.

> I'll be working with John Pryce to offer other comments.

Thanks in advance.

-- 
Sylvain
From Jean-Pierre.Merlet@sophia.inria.fr Wed Sep 13 02:41:10 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8D9f9jd017221
	for <std-interval@compgeom.poly.edu>; Wed, 13 Sep 2006 02:41:10 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8DATZjO026209;
	Wed, 13 Sep 2006 12:29:35 +0200
Received: from [138.96.116.27] (caphorn.inria.fr [138.96.116.27])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8DASx6k026059;
	Wed, 13 Sep 2006 12:29:03 +0200
Message-ID: <4507DD6A.3060400@sophia.inria.fr>
Date: Wed, 13 Sep 2006 12:28:58 +0200
From: Jean-Pierre Merlet <Jean-Pierre.Merlet@sophia.inria.fr>
User-Agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.7.3) Gecko/20041202
X-Accept-Language: fr-FR, en
MIME-Version: 1.0
To: std-interval@compgeom.poly.edu, Jean-Pierre.Merlet@sophia.inria.fr
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-2.0.2
	(sophia.inria.fr [138.96.64.20]); Wed, 13 Sep 2006 12:29:03 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
Subject: [std-interval] Re:proposed C++ Interval standard
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: Jean-Pierre.Merlet@sophia.inria.fr, For discussions concerning the
	C++ standardization of intervals <std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 13 Sep 2006 09:41:10 -0000

Nice job by Herve, Guillaume and Sylvain.

I have two questions:

-should not be some definition about the returned enclosure of inverse 
functions such as:
2 Returns: an enclosure of {acos(x) | x in X and x in [ 1,1]}. template 
< class T> interval <T> acosh ( interval <T> X);
Should we impose that the enclosure be include in the range [0,pi] ?


-you are not talking about interval vectors and matrices except in VI.2.
where you are using is[s], s being the index, starting at s=0. This will 
not be compatible with PROFIL notations using is(s) with s starting at 
1. I am not that familiar with C++ but I guess we may template another 
vector definition compatible with PROFIL while still using the C++ 
standard ?

Otherwise sound good at a first look. Best


From guillaume.melquiond@ens-lyon.fr Wed Sep 13 04:13:45 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8DBDijd017793
	for <std-interval@compgeom.poly.edu>; Wed, 13 Sep 2006 04:13:45 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 643E815B741;
	Wed, 13 Sep 2006 14:02:09 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 23979-05; Wed, 13 Sep 2006 14:02:06 +0200 (CEST)
Received: from [140.77.13.110] (unknown [140.77.13.110])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 82B4115B9B4;
	Wed, 13 Sep 2006 13:59:56 +0200 (CEST)
Subject: Re: [std-interval] Re:proposed C++ Interval standard
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: Jean-Pierre.Merlet@sophia.inria.fr, std-interval@compgeom.poly.edu
In-Reply-To: <4507DD6A.3060400@sophia.inria.fr>
References: <4507DD6A.3060400@sophia.inria.fr>
Content-Type: text/plain; charset=UTF-8
Date: Wed, 13 Sep 2006 13:59:35 +0200
Message-Id: <1158148775.24186.51.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.3 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Wed, 13 Sep 2006 11:13:45 -0000

Le mercredi 13 septembre 2006 Ã  12:28 +0200, Jean-Pierre Merlet a
Ã©crit :
> Nice job by Herve, Guillaume and Sylvain.

Thanks.

> I have two questions:
> 
> -should not be some definition about the returned enclosure of inverse 
> functions such as:
> 2 Returns: an enclosure of {acos(x) | x in X and x in [ 1,1]}. template 
> < class T> interval <T> acosh ( interval <T> X);
> Should we impose that the enclosure be include in the range [0,pi] ?

In the current draft, this is left as a matter of quality of
implementation. Due to Pi not being representable by a floating-point
matter, writing a specification is not simple. Let's name Pi+ the first
floating-point number after Pi.

The floating-point enclosure of acos([-1,-1]) has to contain Pi+, so we
are necessarily outside the mathematical range [0,Pi]. Due to the
mathematical properties of acos, we could still avoid this problem by
saying: unless the input interval contains -1, the output interval has
to be included in the mathematical range [0,Pi].

The problem becomes, however, more difficult for the atan function. A
lot of floating-point bounds require the output interval to contain Pi
+/2 and/or its opposite. So we can't have a simple specification that
requires the output to be included in [-Pi/2,Pi/2].

Now we could write a specification that simply requires the output
interval to be included in [-Pi+/2,Pi+/2]. I don't really see the point
of such a specification, as it allows for values outside the
mathematical range. It the user algorithm supports a bound like Pi+/2,
but not the next few floating-point numbers, then it should simply
perform an interval intersection to remove these values.

As a consequence, I would say that there is no need to impose more than
this design decision: "the standard should not require implementations
to return the sharpest intervals possible, but only preserve the
containment property for all functions."

> -you are not talking about interval vectors and matrices except in VI.2.
> where you are using is[s], s being the index, starting at s=0. This will 
> not be compatible with PROFIL notations using is(s) with s starting at 
> 1. I am not that familiar with C++ but I guess we may template another 
> vector definition compatible with PROFIL while still using the C++ 
> standard ?

This question is easier to answer. Section VI.2 contains an example that
relies on features that have existed since the first standardization of
C++, namely std::vector. C++ provides three kinds of vector/matrix
structures: classical C arrays, std::vector, and std::valarray. They can
all be used with an interval value type, and they all use the square
brackets and start at index 0. If the C++ standard ever describes a
generic linear algebra library, I'm quite sure it will rely on the same
syntax. So, with the array syntax you describe, PROFIL is quite off from
C++ practice in my opinion.

But this is actually irrelevant. Our proposal only describes the basic
interval type. If we start to define vector and matrix types, we will
have to define arithmetic operators on them, and so on. This is out of
the scope of our proposal. An additional proposal could be written
afterwards (though I think C++ developers would be a lot more receptive
to a generic linear algebra library rather than a specific interval
linear algebra library).

Best regards,

Guillaume

From Frederic.Goualard@univ-nantes.fr Thu Sep 14 00:33:01 2006
Received: from smtp1.univ-nantes.fr (Smtp1.univ-nantes.fr [193.52.82.18])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8E7X1jd019209
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 00:33:01 -0700
Received: from localhost (debian [127.0.0.1])
	by smtp1.univ-nantes.fr (Postfix) with ESMTP id 6E80E2123B
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 10:21:45 +0200 (CEST)
Received: from smtp1.univ-nantes.fr ([172.20.12.55])port 10024)
	with LMTP id 20697-10-92 for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 10:21:45 +0200 (CEST)
Received: from [172.16.9.59] (ipcop.lina.sciences.univ-nantes.fr
	[193.52.99.103])
	by smtp1.univ-nantes.fr (Postfix) with ESMTP id 57D1D20CF3
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 10:21:45 +0200 (CEST)
Message-ID: <45091119.9090307@univ-nantes.fr>
Date: Thu, 14 Sep 2006 10:21:45 +0200
From: =?ISO-8859-1?Q?Fr=E9d=E9ric_Goualard?=
	<Frederic.Goualard@univ-nantes.fr>
User-Agent: Thunderbird 1.5.0.4 (X11/20060516)
MIME-Version: 1.0
To: std-interval@compgeom.poly.edu
X-Enigmail-Version: 0.94.0.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p7 (Debian) at smtp.univ-nantes.fr
Subject: [std-interval] Mathematical relations and default initialization
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 07:33:01 -0000

Dear all,

I have just read the latest revision of the proposal (2006-09-05
revision 1) and I would like to comment on two specific issues:

* Mathematical relations
As I understand it from the discussion on the list, these methods
(acos_rel, ...) were inspired from the ones that exist in the gaol
library (the idea is much older, though, and such operators were already
present in BNR Prolog back in the 80s).
Gaol provides an nth_root_rel() operator to compute the relational
inverse nth root of an interval J wrt. an interval I. With constraint
programming methods, this operator is necessary to solve constraints
involving exponentiations.
The nth_root_rel() operator does not appear in the standard. Is this
omission on purpose? If indeed it is, why is it so?

Side notes:
  - on Page 12, the signatures for the mathematical relations are wrong
(compare with page 27).
  - div_rel() does not appear on page 27 while it is listed on page 12


* Default initialization
I see on page 15 that the default constructor creates an empty interval.
 At some point in the discussion, Sylvain gave 6 possible ways of
implementing this constructor:

1- no default constructor at all
2- [0,0]
3- empty
4- whole
5- uninitialized tag
6- see below (something a la "singular iterator")

Possibility 4 was brushed away from the start, and the remaining
possibilities heavily debated. In my opinion, it makes sense to have the
default constructor return "whole" since interval arithmetic is often
used in processes that try to gain some information on the possible
value of a variable (that is, we start from a wide interval and narrow
it down to some reasonably small one).


Best regards,

FG.
-- 
Frédéric Goualard                                 LINA - FRE CNRS 2729
                           Univ. of Nantes - Ecole des Mines de Nantes
Tel.: +33 2 51 12 58 38            2, rue de la Houssinière - BP 92208
Fax.: +33 2 51 12 58 12                         F-44322 NANTES CEDEX 3
http://goualard.free.fr/
From j.d.pryce@ntlworld.com Thu Sep 14 02:58:25 2006
Received: from mtaout02-winn.ispmail.ntl.com (mtaout02-winn.ispmail.ntl.com
	[81.103.221.48])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8E9wPjd019371
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 02:58:25 -0700
Received: from aamtaout03-winn.ispmail.ntl.com ([81.103.221.35])
	by mtaout02-winn.ispmail.ntl.com with ESMTP
	<20060914104706.YCAF27023.mtaout02-winn.ispmail.ntl.com@aamtaout03-winn.ispmail.ntl.com>
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 11:47:06 +0100
Received: from 142kingshill.ntlworld.com ([86.18.89.224])
	by aamtaout03-winn.ispmail.ntl.com with ESMTP
	<20060914104706.BXWM11710.aamtaout03-winn.ispmail.ntl.com@142kingshill.ntlworld.com>
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 11:47:06 +0100
Message-Id: <6.2.5.6.0.20060914114546.02c956e0@ntlworld.com>
X-Mailer: QUALCOMM Windows Eudora Version 6.2.5.6
Date: Thu, 14 Sep 2006 11:50:01 +0100
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
From: Dr John Pryce <j.d.pryce@ntlworld.com>
Subject: Re: [std-interval] Mathematical relations and default
  initialization
In-Reply-To: <45091119.9090307@univ-nantes.fr>
References: <45091119.9090307@univ-nantes.fr>
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"; format=flowed
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k8E9wPjd019371
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 09:58:25 -0000

Dear all

At 09:21 14/09/06, Frédéric Goualard wrote:
>* Default initialization
>I see on page 15 that the default constructor creates an empty interval.
>  At some point in the discussion, Sylvain gave 6 possible ways of
>implementing this constructor:
>
>1- no default constructor at all
>2- [0,0]
>3- empty
>4- whole
>5- uninitialized tag
>6- see below (something a la "singular iterator")
>
>Possibility 4 was brushed away from the start, and the remaining
>possibilities heavily debated. In my opinion, it makes sense to have the
>default constructor return "whole" since interval arithmetic is often
>used in processes that try to gain some information on the possible
>value of a variable (that is, we start from a wide interval and narrow
>it down to some reasonably small one).

I am delighted that someone else takes this view. 
The ISL team came down in favour of returning 
"whole" many months ago, for exactly the reason you cite.

Regards

John Pryce
Dr John and Mrs Kate Pryce
142 Kingshill Rd
Swindon, Wiltshire SN1 4LW
UK
Tel (+44)1793-331062


From george.corliss@marquette.edu Thu Sep 14 06:04:45 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8ED4ijd019953
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 06:04:45 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 08:53:34 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 08:53:32 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Thu, 14 Sep 2006 08:53:19 -0500
Subject: Re: [std-interval] Mathematical relations and default
 initialization
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C12EC8FF.3D3E%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Mathematical relations and default
 initialization
Thread-Index: AcbYBSJjYK9E10P4Edu45QAKlZKJfg==
In-Reply-To: <45091119.9090307@univ-nantes.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="ISO-8859-1"
X-OriginalArrivalTime: 14 Sep 2006 13:53:33.0305 (UTC)
	FILETIME=[2AE9F690:01C6D805]
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by compgeom.poly.edu id
	k8ED4ijd019953
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 13:04:45 -0000

Friends,

On 9/14/06 3:21 AM, "Frédéric Goualard" <Frederic.Goualard@univ-nantes.fr>
wrote:

> * Default initialization
> I see on page 15 that the default constructor creates an empty interval.
>  At some point in the discussion, Sylvain gave 6 possible ways of
> implementing this constructor:
> 
> 1- no default constructor at all
> 2- [0,0]
> 3- empty
> 4- whole
> 5- uninitialized tag
> 6- see below (something a la "singular iterator")
> 
> Possibility 4 was brushed away from the start, and the remaining
> possibilities heavily debated. In my opinion, it makes sense to have the
> default constructor return "whole" since interval arithmetic is often
> used in processes that try to gain some information on the possible
> value of a variable (that is, we start from a wide interval and narrow
> it down to some reasonably small one).

My first choice is #5, assuming that tags are permitted.

A close second is #4. If we read "[a, b]" as "If an answer exists, it
satisfies a <= x <= b," then #4 does not lie, while #3 often does lie.  If
there is a number, but we have no constraints on its value, it must belong
to R*.

The argument for #3, as I understand it, is that <empty> propagates through
most operations, so that if a coder unintentionally computes with an
uninitialized variable, the eventual result is likely to be <empty>, or some
other obviously incorrect value, and the error is more likely to be caught.
I am sympathetic to that argument, too.

There is no perfect answer.  The danger is that we unintentionally use an
uninitialized variable as if it were initialized.  The trouble comes about
because using two bit patterns, usually interpreted as hi and lo, does not
have enough expressive power.  Raising an exception is one means of adding
expressive power, but there seems to be agreement that intervals should
raise exceptions rarely, if ever.

To express "uninitialized" and several other states an interval object might
have, I favor tags, a concept which has not proven itself in practice.

I suggest the standard should PERMIT a tagged implementation.  I believe the
current proposal does.  Page 9, paragraph 3 says in interval is specified by
two values of type T, but I find on where the proposal forbids the memory
footprint being more.

For the mathematical result to be returned by a default constructor, I favor
#4, <whole> because I value containment above ease of debugging.

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg



From george.corliss@marquette.edu Thu Sep 14 08:10:45 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EFAjjd020130
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 08:10:45 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 10:59:36 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 10:59:34 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Thu, 14 Sep 2006 10:59:28 -0500
Subject: Re: [std-interval] Revised document available
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C12EE690.3D69%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Revised document available
Thread-Index: AcbYFsHcAIlLKkQKEdu45QAKlZKJfg==
In-Reply-To: <45066CC1.5000706@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 14 Sep 2006 15:59:35.0049 (UTC)
	FILETIME=[C6108790:01C6D816]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 15:10:45 -0000

Sylvain and all,

> A revised version of the proposal is now available at:
> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2067.pdf

Can you help me understand the difference between "undefined" and
"implementation-dependent" or "implementation-defined"?

I am not familiar with the vocabulary of standards, but it would seem to me
that "undefined" means that not only does the standard not specify what the
result should be, but that no one else does, either.  In principle, the
result is permitted to be non-deterministic on a single machine, let alone
on a single implementation.

I would expect "implementation-dependent" to mean that the choice is up to
the implementation.  I see you often use "implementation-defined," which I
would interpret to mean that it is the responsibility of the implementation
to specify what it will do and then to do what it specified?

If those interpretations are consistent with standard writing practice, is
there a reason to leave ANYTHING "undefined?"  If we cannot specify results
for each implementation, should not the implementers be required to specify,
that is, to be "implementation-defined"?

If that makes sense, would it also make sense to specify that
implementations on IEEE machines take advantage of IEEE support?  For
example, one might say, "On machines that support infinities, ... On other
machines, ... is implementation-defined."  That would be a MUCH stronger
specification of portability without imposing additional requirements in
practice.

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


From Stephen.Clamage@Sun.COM Thu Sep 14 09:48:29 2006
Received: from nwkea-pix-1.sun.com (nwk-ea-fw-1.sun.com [192.18.42.249])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EGmSjd020248
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 09:48:29 -0700
Received: from d1-sfbay-09.sun.com ([192.18.39.119])k8EHb90B007672
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 10:37:09 -0700 (PDT)
Received: from conversion-daemon.d1-sfbay-09.sun.com by d1-sfbay-09.sun.com
 (Sun Java System Messaging Server 6.2-4.02 (built Sep  9 2005))
 id <0J5L00J01FJSAD00@d1-sfbay-09.sun.com>
 (original mail from Stephen.Clamage@Sun.COM)
 for std-interval@compgeom.poly.edu; Thu, 14 Sep 2006 10:37:09 -0700 (PDT)
Received: from [129.146.86.168] by d1-sfbay-09.sun.com
 (Sun Java System Messaging Server 6.2-4.02 (built Sep  9 2005))
 with ESMTPSA id <0J5L00F08FLX19C2@d1-sfbay-09.sun.com> for
 std-interval@compgeom.poly.edu; Thu, 14 Sep 2006 10:37:09 -0700 (PDT)
Date: Thu, 14 Sep 2006 10:37:54 -0700
From: Steve Clamage <Stephen.Clamage@Sun.COM>
Subject: Re: [std-interval] Revised document available
In-reply-to: <C12EE690.3D69%George.Corliss@Marquette.edu>
Sender: Stephen.Clamage@Sun.COM
To: std-interval@compgeom.poly.edu
Message-id: <45099372.5030401@sun.com>
Organization: Sun Microsystems, Inc.
MIME-version: 1.0
Content-type: text/plain; format=flowed; charset=us-ascii
Content-transfer-encoding: 7BIT
X-Accept-Language: en-us, en
References: <C12EE690.3D69%George.Corliss@Marquette.edu>
User-Agent: Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.7) Gecko/20051122
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 16:48:29 -0000

George Corliss wrote:

> 
> Can you help me understand the difference between "undefined" and
> "implementation-dependent" or "implementation-defined"?


The C and C++ standards define these terms.

1. Undefined behavior means the standard places no requirements on the 
compile-time or run-time systems. Common responses to code having undefined 
behavior are
- refuse to compile
- compile, but fail to link
- link, but crash at run time
- run, but produce an undesired result
- run and produce the result the programmer wanted
Other responses are possible, such as the legendary "reformat the hard drive."
(Suppose a wild jump via an uninitialized pointer goes to the BIOS reformat 
command.)

An implementation is allowed to define the behavior of code that is formally 
undefined in the standard. Example: Divide-by-zero has undefined behavior, but 
an implementation could say that it will always raise a signal, or always abort, 
or always return a particular value.


2. Implementation defined means that the standard allows a list or range of 
possible behaviors, and the implementation is required to tell you what it does. 
Example: Type int must be capable of representing values in the range 
[-32767,32767]. The implementation must document what the actual range is, which 
almost always wider.


3. Unspecified (a category you didn't list) is similar to 
implementation-defined, but the implementation need not tell you what it does. 
Example: All the arguments to a function must be fully evaluated before the 
function is called, but the evaluation order is unspecified. An implementation 
can evaluate them in any order, and does not have to document the order. The 
order need not be consistent.


4. Implementation dependent is a generic term that means that the behavior can 
vary among systems. The term includes undefined, implementation-defined, and 
unspecified behavior.

---
Steve Clamage, stephen.clamage@sun.com
From guillaume.melquiond@ens-lyon.fr Thu Sep 14 10:22:14 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EHMEjd020300
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 10:22:14 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id A2D2D15B9BC
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 20:11:06 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 16936-27 for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 20:11:04 +0200 (CEST)
Received: from [140.77.13.110] (unknown [140.77.13.110])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id E084115B9BF
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 20:11:01 +0200 (CEST)
Subject: Re: [std-interval] Mathematical relations and default
	initialization
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
In-Reply-To: <45091119.9090307@univ-nantes.fr>
References: <45091119.9090307@univ-nantes.fr>
Content-Type: text/plain; charset=utf-8
Date: Thu, 14 Sep 2006 20:10:38 +0200
Message-Id: <1158257438.28491.75.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.3 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 17:22:14 -0000

Le jeudi 14 septembre 2006 Ã  10:21 +0200, FrÃ©dÃ©ric Goualard a Ã©crit :

> The nth_root_rel() operator does not appear in the standard. Is this
> omission on purpose? If indeed it is, why is it so?

The nth_root_rel is purposely out of the proposal because nth_root is
out too :-). I don't think the omission is on purpose though. If people
feel it is useful, it can be added.

> Side notes:
>   - on Page 12, the signatures for the mathematical relations are wrong
> (compare with page 27).
>   - div_rel() does not appear on page 27 while it is listed on page 12

Thanks, I will take a look.

> * Default initialization
> I see on page 15 that the default constructor creates an empty interval.
>  At some point in the discussion, Sylvain gave 6 possible ways of
> implementing this constructor:
> 
> 1- no default constructor at all
> 2- [0,0]
> 3- empty
> 4- whole
> 5- uninitialized tag
> 6- see below (something a la "singular iterator")
> 
> Possibility 4 was brushed away from the start, and the remaining
> possibilities heavily debated. In my opinion, it makes sense to have the
> default constructor return "whole" since interval arithmetic is often
> used in processes that try to gain some information on the possible
> value of a variable (that is, we start from a wide interval and narrow
> it down to some reasonably small one).

I don't remember 4 being brushed right away (proposition 1 was). As a
matter of fact, propositions 3 and 4 have reached a point in my opinion
where I consider them to be equally useful. So, at least on my side, it
is still 4 in the proposal, only because of inertia.

Best regards,

Guillaume

From guillaume.melquiond@ens-lyon.fr Thu Sep 14 10:22:17 2006
Received: from pilet.ens-lyon.fr (pilet.ens-lyon.fr [140.77.167.16])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EHMFjd020303
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 10:22:15 -0700
Received: from localhost (localhost [127.0.0.1])
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 0A95815B9BC
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 20:11:08 +0200 (CEST)
Received: from pilet.ens-lyon.fr ([127.0.0.1])
	by localhost (pilet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
	id 16325-33 for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 20:11:04 +0200 (CEST)
Received: from [140.77.13.110] (unknown [140.77.13.110])
	(using TLSv1 with cipher RC4-MD5 (128/128 bits))
	(Client did not present a certificate)
	by pilet.ens-lyon.fr (Postfix) with ESMTP id 1C3F815B9C6
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 20:11:03 +0200 (CEST)
Subject: Re: [std-interval] Revised document available
From: Guillaume Melquiond <guillaume.melquiond@ens-lyon.fr>
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
In-Reply-To: <C12EE690.3D69%George.Corliss@Marquette.edu>
References: <C12EE690.3D69%George.Corliss@Marquette.edu>
Content-Type: text/plain; charset=utf-8
Date: Thu, 14 Sep 2006 20:10:39 +0200
Message-Id: <1158257439.28491.76.camel@localhost>
Mime-Version: 1.0
X-Mailer: Evolution 2.6.3 
Content-Transfer-Encoding: 8bit
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at ens-lyon.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 17:22:18 -0000

Le jeudi 14 septembre 2006 Ã  10:59 -0500, George Corliss a Ã©crit :
> Sylvain and all,
> 
> > A revised version of the proposal is now available at:
> > http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2067.pdf
> 
> Can you help me understand the difference between "undefined" and
> "implementation-dependent" or "implementation-defined"?

I don't think we put "implementation-dependent" situations on purpose.
It may simply be mistakes at places where we meant "implementation-
defined". I should review them.

"Implementation-defined" means "behavior, for a well-formed program
construct and correct data, that depends on the implementation and that
each implementation shall document." So it is a documented yet not
portable behavior. For example, the number of bits of an int is
implementation-defined.

"Undefined" (not "unspecified") applies when using "an erroneous program
construct or erroneous data". For example, overflowing signed integers
brings about undefined behavior in C and C++. It could fail an assertion
in debug mode or simplify execution paths when optimizing. In
particular, the compiler is allowed to assume that the sum of two
negative numbers is a negative number. Note that undefined behavior
situations are generally perfectly identified in the Standard.

> I am not familiar with the vocabulary of standards, but it would seem to me
> that "undefined" means that not only does the standard not specify what the
> result should be, but that no one else does, either.  In principle, the
> result is permitted to be non-deterministic on a single machine, let alone
> on a single implementation.

Yes, non-deterministic describes it fine.

> I would expect "implementation-dependent" to mean that the choice is up to
> the implementation.  I see you often use "implementation-defined," which I
> would interpret to mean that it is the responsibility of the implementation
> to specify what it will do and then to do what it specified?

Exactly. The behavior could even depend on a compiler option.

> If those interpretations are consistent with standard writing practice, is
> there a reason to leave ANYTHING "undefined?"  If we cannot specify results
> for each implementation, should not the implementers be required to specify,
> that is, to be "implementation-defined"?

When you specify that, for some entries, the result is implementation-
defined, it means you force the implementer to test for these specific
entries, to define a result, and to document it. Let us consider the two
ways of querying a lower bound in the proposal.

On one hand, x.lower() returns the lower bound of x. But if x is empty,
the result is undefined. On the other hand, inf(x) returns the lower
bound of x, or infinity if x is empty. But if x is empty and infinities
do not exist, the result is implementation-defined.

As a consequence, a library implementer is allowed to write a trivial
version of lower: this is just a memory read. It is also possible to
assert that the interval is not empty. Indeed, a failed assertion is a
typical example of undefined behavior, so this is allowed.

For inf, the situation is different: the behavior is always defined,
whether x is empty or not. The implementation has to test for this case
and deal with it in a documented manner. If the implementation provides
infinities, the standard specify what the result is. Otherwise, it is up
to the implementation to specify it.

I hope this illustrates that allowing undefined behavior on some inputs
allows to write more efficient code. The lower member could have been
changed to "implementation-defined", but then it may have considerably
slowed down codes that are known not to generate empty intervals. On the
other hand, it means the user has to be careful and use inf if the code
can generate empty intervals. I think this is a good compromise.

> If that makes sense, would it also make sense to specify that
> implementations on IEEE machines take advantage of IEEE support?  For
> example, one might say, "On machines that support infinities, ... On other
> machines, ... is implementation-defined."  That would be a MUCH stronger
> specification of portability without imposing additional requirements in
> practice.

Note that this is already the case for inf(). For other functions, it
would depend on what you put behind your "..." dots. Note also that the
current wording impose the use of infinities for arithmetic functions if
the implementation supports them, as they are the only way to enclose
some theoretical interval results. So the question becomes: should we
impose implementations to document the results they return when they
would have to return an interval containing an infinite bound? I'm not
sure it is worth it, as I don't see how such a documentation would help
developers.

Best regards,

Guillaume

From george.corliss@marquette.edu Thu Sep 14 10:40:49 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EHenjd020344
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 10:40:49 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 13:29:42 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 13:29:41 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Thu, 14 Sep 2006 13:28:30 -0500
Subject: Re: [std-interval] Mathematical relations and default
 initialization
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C12F097E.3D9F%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Mathematical relations and default
 initialization
Thread-Index: AcbYK5O10o9XekQeEdu45QAKlZKJfg==
In-Reply-To: <1158257438.28491.75.camel@localhost>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 14 Sep 2006 18:29:41.0546 (UTC)
	FILETIME=[BE5AE8A0:01C6D82B]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 17:40:49 -0000

Guillaume,

Thank you for your response.

>> * Default initialization
>> I see on page 15 that the default constructor creates an empty interval.
>>  At some point in the discussion, Sylvain gave 6 possible ways of
>> implementing this constructor:
>> 
>> 1- no default constructor at all
>> 2- [0,0]
>> 3- empty
>> 4- whole
>> 5- uninitialized tag
>> 6- see below (something a la "singular iterator")
>> 
>> Possibility 4 was brushed away from the start, and the remaining
>> possibilities heavily debated. In my opinion, it makes sense to have the
>> default constructor return "whole" since interval arithmetic is often
>> used in processes that try to gain some information on the possible
>> value of a variable (that is, we start from a wide interval and narrow
>> it down to some reasonably small one).
> 
> I don't remember 4 being brushed right away (proposition 1 was). As a
> matter of fact, propositions 3 and 4 have reached a point in my opinion
> where I consider them to be equally useful. So, at least on my side, it
> is still 4 in the proposal, only because of inertia.
P. 15, 26.6.4, par. 1 & 2 says empty, which is #3.

As I discussed in an earlier message, I favor <whole>

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


From george.corliss@marquette.edu Thu Sep 14 11:06:53 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EI6qjd020383
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 11:06:52 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 13:55:46 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 13:55:45 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Thu, 14 Sep 2006 13:55:36 -0500
Subject: Re: [std-interval] Revised document available
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C12F0FD8.3DA9%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Revised document available
Thread-Index: AcbYL1zhm6bRbEQiEdu45QAKlZKJfg==
In-Reply-To: <1158257439.28491.76.camel@localhost>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 14 Sep 2006 18:55:45.0959 (UTC)
	FILETIME=[62D16370:01C6D82F]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 18:06:53 -0000

Guillaume,

Very helpful response.  Thank you.

>> If that makes sense, would it also make sense to specify that
>> implementations on IEEE machines take advantage of IEEE support?  For
>> example, one might say, "On machines that support infinities, ... On other
>> machines, ... is implementation-defined."  That would be a MUCH stronger
>> specification of portability without imposing additional requirements in
>> practice.
> 
> Note that this is already the case for inf(). For other functions, it
> would depend on what you put behind your "..." dots.
I am not studying every line of the proposal for instances such as this, but
I hope you are, and that you are satisfied with what you see.

> Note also that the
> current wording impose the use of infinities for arithmetic functions if
> the implementation supports them, as they are the only way to enclose
> some theoretical interval results.
Correct.  That should be clear:  Implementations on IEEE machines are
required to use IEEE features :-)

> So the question becomes: should we
> impose implementations to document the results they return when they
> would have to return an interval containing an infinite bound? I'm not
> sure it is worth it, as I don't see how such a documentation would help
> developers.
I favor the clearest warnings I can convince you to accept.  For example,
suppose x = [1, max_real]; y = x^2.  If the implementation supports
infinity, we are safe with [1, +oo] (really meaning the mathematical
semi-open [1, +oo)).  If we have no infinity, what are our choices?
   1. LIE with something like [1, max_real]
   2. Raise an exception, which no one likes
   3. Some other special bit pattern
   4. Tag to indicate overflow, but we still need to return a value

I believe the most common implementation decision (with no infinities) is to
choose to lie, #1.  I have written a couple packages myself that did that.
I am willing to accept that as an engineering design choice, but with ANY
possible violation of containment, I prefer the strongest, clearest possible
warnings.  I'd like a run-time warning, although that is nearly equivalent
to unpopular exceptions.  AT LEAST mandate a strong warning in the
documentation that an overflow can introduce a containment failure.

We are in violent agreement on most of the proposal.  At points like this, I
think I am a bit more focused on the guarantee of containment, and you are a
bit more focused on speed.

I certainly agree that speed is important.  In fact, I suggest somewhere,
perhaps in the first half of p. 3, you include a reminder to the effect that
EVERYTHING in this standard will perform MUCH better is there is built-in
hardware support for intervals [credit two anonymous referees of one of my
recent papers for reminding us].

I know you agree that containment is important.

Hence, many of these points of discussion are about where on the
speed-safety spectrum we want to be.  Whatever compromises we settle on, we
should clearly document so developers know where they are.

Dr. George Corliss
Electrical and Computer Engineering
Marquette University
P.O. Box 1881
1515 W. Wisconsin Ave.
Milwaukee, WI 53201-1881
George.Corliss@Marquette.edu
414-288-6599 (office); 288-4400 (GasDay);
    288-6280 (Dept.); 288-5579 (fax)
Office: Haggerty Engineering 296
Www.eng.mu.edu/corlissg


From Frederic.Goualard@univ-nantes.fr Thu Sep 14 13:15:45 2006
Received: from smtp2-g19.free.fr (smtp2-g19.free.fr [212.27.42.28])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EKFijd020638
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 13:15:44 -0700
Received: from [192.168.0.2] (lgp44-1-82-67-132-42.fbx.proxad.net
	[82.67.132.42])
	by smtp2-g19.free.fr (Postfix) with ESMTP id 6E25B75BBE
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 23:04:35 +0200 (CEST)
Message-ID: <4509C43F.1070904@univ-nantes.fr>
Date: Thu, 14 Sep 2006 23:06:07 +0200
From: =?UTF-8?B?RnLDqWTDqXJpYyBHb3VhbGFyZA==?=
 <Frederic.Goualard@univ-nantes.fr>
User-Agent: Thunderbird 1.5.0.5 (X11/20060719)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Mathematical relations and default	initialization
References: <45091119.9090307@univ-nantes.fr>
	<1158257438.28491.75.camel@localhost>
In-Reply-To: <1158257438.28491.75.camel@localhost>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 20:15:45 -0000

Guillaume Melquiond wrote:
> Le jeudi 14 septembre 2006 Ã  10:21 +0200, FrÃ©dÃ©ric Goualard a Ã©crit :
> 
>> The nth_root_rel() operator does not appear in the standard. Is this
>> omission on purpose? If indeed it is, why is it so?
> 
> The nth_root_rel is purposely out of the proposal because nth_root is
> out too :-). I don't think the omission is on purpose though. If people
> feel it is useful, it can be added.

In my experience, nth_root() may safely be excluded from the standard 
because it is seldom used. On the other hand, nth_root_rel() is *very* 
important since it is necessary to handle constraints with 
exponentiations, such as constraints on polynomials!

For example, to handle the constraint

x^5 = y

with a backward/forward algorithm (see "Revising hull and box 
consistency". F. Benhamou, F. Goualard, L. Granvilliers, and J.-F. 
Puget, Procs. of ICLP'99, pp. 230-244, MIT Press), we would use:

y <- y \cap pow(x,5)
x <- x \cap nth_root_rel(y,5,x)

Excluding nth_root_rel() from the standard makes the introduction of the 
other relational operators basically useless since I believe we have 
more often to deal with constraints containing exponentiations than with 
constraints involving, say, trigonometric functions.

> 
>> Side notes:
>>   - on Page 12, the signatures for the mathematical relations are wrong
>> (compare with page 27).
>>   - div_rel() does not appear on page 27 while it is listed on page 12
> 
> Thanks, I will take a look.
> 
>> * Default initialization
>> I see on page 15 that the default constructor creates an empty interval.
>>  At some point in the discussion, Sylvain gave 6 possible ways of
>> implementing this constructor:
>>
>> 1- no default constructor at all
>> 2- [0,0]
>> 3- empty
>> 4- whole
>> 5- uninitialized tag
>> 6- see below (something a la "singular iterator")
>>
>> Possibility 4 was brushed away from the start, and the remaining
>> possibilities heavily debated. In my opinion, it makes sense to have the
>> default constructor return "whole" since interval arithmetic is often
>> used in processes that try to gain some information on the possible
>> value of a variable (that is, we start from a wide interval and narrow
>> it down to some reasonably small one).
> 
> I don't remember 4 being brushed right away (proposition 1 was). As a
> matter of fact, propositions 3 and 4 have reached a point in my opinion
> where I consider them to be equally useful. So, at least on my side, it
> is still 4 in the proposal, only because of inertia.

You mean "3" of course :o)



Cheers,

FG.
-- 
FrÃ©dÃ©ric Goualard                                 LINA - FRE CNRS 2729
Tel.: +33 2 51 12 58 38    Univ. of Nantes - Ecole des Mines de Nantes
Fax.: +33 2 51 12 58 12            2, rue de la HoussiniÃ¨re - BP 92208
http://goualard.free.fr/                        F-44322 NANTES CEDEX 3

From Sylvain.Pion@sophia.inria.fr Thu Sep 14 13:36:51 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EKapjd020669
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 13:36:51 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8ELPgxb019103
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 23:25:46 +0200
Received: from [192.168.0.1] (lns-bzn-50f-62-147-188-197.adsl.proxad.net
	[62.147.188.197])	(authenticated bits=0)
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8ELPbC0019087
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 23:25:38 +0200
Message-ID: <4509C8D0.7000903@sophia.inria.fr>
Date: Thu, 14 Sep 2006 23:25:36 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
User-Agent: Thunderbird 1.5.0.2 (Macintosh/20060415)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Mathematical relations and default	initialization
References: <45091119.9090307@univ-nantes.fr>
	<1158257438.28491.75.camel@localhost>
In-Reply-To: <1158257438.28491.75.camel@localhost>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Thu, 14 Sep 2006
	23:25:38 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 20:36:51 -0000

Guillaume Melquiond wrote:
> Le jeudi 14 septembre 2006 Ã  10:21 +0200, FrÃ©dÃ©ric Goualard a Ã©crit :
> 
>> The nth_root_rel() operator does not appear in the standard. Is this
>> omission on purpose? If indeed it is, why is it so?
> 
> The nth_root_rel is purposely out of the proposal because nth_root is
> out too :-). I don't think the omission is on purpose though. If people
> feel it is useful, it can be added.

Let's be careful with the list of functions, especially those hard
to implement.  Having too many may trigger resistance from the C++
committee.  I already fear that the changes done in the revision
won't be appreciated a lot on that aspect...  But we'll see.


>> * Default initialization
>> I see on page 15 that the default constructor creates an empty interval.
>>  At some point in the discussion, Sylvain gave 6 possible ways of
>> implementing this constructor:
>>
>> 1- no default constructor at all
>> 2- [0,0]
>> 3- empty
>> 4- whole
>> 5- uninitialized tag
>> 6- see below (something a la "singular iterator")
>>
>> Possibility 4 was brushed away from the start, and the remaining
>> possibilities heavily debated. In my opinion, it makes sense to have the
>> default constructor return "whole" since interval arithmetic is often
>> used in processes that try to gain some information on the possible
>> value of a variable (that is, we start from a wide interval and narrow
>> it down to some reasonably small one).
> 
> I don't remember 4 being brushed right away (proposition 1 was). As a
> matter of fact, propositions 3 and 4 have reached a point in my opinion
> where I consider them to be equally useful. So, at least on my side, it
> is still 4 in the proposal, only because of inertia.

As George says, there is indeed no perfect choice.  I can see good
arguments supporting 2, 3, 4, 6 (I see 5 as a debug mode allowed by 6).

The debug mode, 5, (e.g. using a tag) can be envisioned for the
other cases than 6 as well, but then it's not a bug anymore to not
initialize, so it might become hard to distinguish forgotten
initializations from correct code assuming the documented default
constructed value.

"empty" can help for propagating uninitialized-ness, as George
mentioned, and it was my argument for picking this choice in the
proposal.  But it's incomplete, since there are cases where it
does not propagate (e.g. with branches).
(while at it : concerning the propagation of empty, the current
proposal does not say anything, since any function taking empty
can return any interval: are there opinions on the sharpness of
returned intervals in this case?  we could easily enforce empty
as returned interval)

6 also has the advantage of speed, I'm thinking especially of array
initialization.

I'm not very convinced by the arguments which have been given so
far in favor of "whole", because I think they mix the correctness
issue of forgotten initializations, with the preferred value of
the initializations of variables in *some* algorithms.
Such algorithms should initialize variables explicitly to "whole",
IMO.  And given that there is no clear intuitive default, users
will never remember that "whole" is used as default value, so
in practice it will be better to use "whole" explicitly anyway
for these cases, so no need to make it the default constructed
value.  If somebody thinks it would be too inconvenient to require
an explicit initialization to "whole" for some codes, I would be
interesting in seeing such codes.

My personal preference goes to 6 (i.e. producing an "uninitialized
interval", similar to the behavior of iterators, that is, only
copies/assignments are allowed on them, basically).

-- 
Sylvain
From Sylvain.Pion@sophia.inria.fr Thu Sep 14 14:12:13 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8ELCDjd020727
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 14:12:13 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8EM19wK026425
	for <std-interval@compgeom.poly.edu>; Fri, 15 Sep 2006 00:01:09 +0200
Received: from [192.168.0.1] (lns-bzn-50f-62-147-188-197.adsl.proxad.net
	[62.147.188.197])	(authenticated bits=0)
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8EM18Cv026419
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Fri, 15 Sep 2006 00:01:08 +0200
Message-ID: <4509D123.9080501@sophia.inria.fr>
Date: Fri, 15 Sep 2006 00:01:07 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
User-Agent: Thunderbird 1.5.0.2 (Macintosh/20060415)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Mathematical relations and default initialization
References: <45091119.9090307@univ-nantes.fr>
	<1158257438.28491.75.camel@localhost> <4509C8D0.7000903@sophia.inria.fr>
	<p06100502c12f7cffcbc9@[192.168.1.100]>
In-Reply-To: <p06100502c12f7cffcbc9@[192.168.1.100]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Fri, 15 Sep 2006
	00:01:08 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 21:12:13 -0000

(Ron, I guess you mistakenly replied to me personally,
  so I re-reply on the list).

Ron Avitzur wrote:
>>>>  1- no default constructor at all
>>>>  2- [0,0]
>>>>  3- empty
>>>>  4- whole
>>>>  5- uninitialized tag
>>>>  6- see below (something a la "singular iterator")
>>
>> As George says, there is indeed no perfect choice.  I can see good
>> arguments supporting 2, 3, 4, 6 (I see 5 as a debug mode allowed by 6).
> 
> In defense of 1, I'll reiterate my concern from April that folks expect
> declaring  { double foo[kSize]; ...} is free while having any default
> constructor can make { interval<double> foo[kSize]; ... } in an inner
> loop be very costly.
> 
> I encountered precisely this a few years ago in a context that made it
> very difficult to recognize the inefficiency.

So, you are arguing for 6, like me.

1 means no default constructor, that is, a private one.
At least, this is how I understood 1.

-- 
Sylvain
From chu@uca.edu Thu Sep 14 14:22:12 2006
Received: from GWIA1.UCA.EDU (grpws1.uca.edu [161.31.24.34])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8ELMBjd020747
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 14:22:12 -0700
Received: from GWDMN1-MTA by GWIA1.UCA.EDU
	with Novell_GroupWise; Thu, 14 Sep 2006 17:11:04 -0500
Message-Id: <45098D1E.853A.0064.0@uca.edu>
X-Mailer: Novell GroupWise Internet Agent 7.0.1 
Date: Thu, 14 Sep 2006 17:10:56 -0500
From: "Chenyi Hu" <chu@uca.edu>
To: "For discussions concerning the C++ standardization of intervals"
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Mathematical relations and default
	initialization
References: <45091119.9090307@univ-nantes.fr>
 <1158257438.28491.75.camel@localhost> <4509C8D0.7000903@sophia.inria.fr>
 <p06100502c12f7cffcbc9@[192.168.1.100]> <4509D123.9080501@sophia.inria.fr>
In-Reply-To: <4509D123.9080501@sophia.inria.fr>
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 21:22:12 -0000

Agree with George that there is no perfect answer. Not seeing explicit
support for 2 - [0,0] yet. However, it saves initialization time
significantly for applications involving large-scale sparse systems.

Chenyi

>>> Sylvain Pion <Sylvain.Pion@sophia.inria.fr> 9/14/2006 5:01 PM >>>

Ron Avitzur wrote:
>>>>  1- no default constructor at all
>>>>  2- [0,0]
>>>>  3- empty
>>>>  4- whole
>>>>  5- uninitialized tag
>>>>  6- see below (something a la "singular iterator")
>>
>> As George says, there is indeed no perfect choice.  I can see good
>> arguments supporting 2, 3, 4, 6 (I see 5 as a debug mode allowed by
6).
> 
> In defense of 1, I'll reiterate my concern from April that folks
expect
> declaring  { double foo[kSize]; ...} is free while having any
default
> constructor can make { interval<double> foo[kSize]; ... } in an
inner
> loop be very costly.
> 
> I encountered precisely this a few years ago in a context that made
it
> very difficult to recognize the inefficiency.

So, you are arguing for 6, like me.

1 means no default constructor, that is, a private one.
At least, this is how I understood 1.

-- 
Sylvain
_______________________________________________
Std-interval mailing list
Std-interval@compgeom.poly.edu 
http://compgeom.poly.edu/mailman/listinfo/std-interval
From Sylvain.Pion@sophia.inria.fr Thu Sep 14 14:32:31 2006
Received: from sophia.inria.fr (sophia.inria.fr [138.96.64.20])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8ELWUjd020784
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 14:32:31 -0700
Received: from localhost (localhost [127.0.0.1])
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8EMLQCF030219
	for <std-interval@compgeom.poly.edu>; Fri, 15 Sep 2006 00:21:26 +0200
Received: from [192.168.0.1] (lns-bzn-50f-62-147-188-197.adsl.proxad.net
	[62.147.188.197])	(authenticated bits=0)
	by sophia.inria.fr (8.13.8/8.13.4) with ESMTP id k8EMLLQO030198
	(version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO)
	for <std-interval@compgeom.poly.edu>; Fri, 15 Sep 2006 00:21:22 +0200
Message-ID: <4509D5E1.5030906@sophia.inria.fr>
Date: Fri, 15 Sep 2006 00:21:21 +0200
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
User-Agent: Thunderbird 1.5.0.2 (Macintosh/20060415)
MIME-Version: 1.0
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
Subject: Re: [std-interval] Mathematical relations and default	initialization
References: <45091119.9090307@univ-nantes.fr>
	<1158257438.28491.75.camel@localhost> <4509C8D0.7000903@sophia.inria.fr>
	<p06100502c12f7cffcbc9@[192.168.1.100]> <4509D123.9080501@sophia.inria.fr>
	<45098D1E.853A.0064.0@uca.edu>
In-Reply-To: <45098D1E.853A.0064.0@uca.edu>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by
	milter-greylist-2.0.2 (sophia.inria.fr [138.96.64.20]); Fri, 15 Sep 2006
	00:21:22 +0200 (MEST)
X-Virus-Scanned: by amavisd-new at sophia.inria.fr
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 21:32:31 -0000

Chenyi Hu wrote:
> Agree with George that there is no perfect answer. Not seeing explicit
> support for 2 - [0,0] yet. However, it saves initialization time
> significantly for applications involving large-scale sparse systems.

6 is even faster than 2 anyway, since it does not require to do
anything.

2 may indeed be faster than 3 and 4, if zero-initialization of memory
is faster than initialization to something else.  I don't know if some 
platforms show such behavior.

The only argument I see for 2 is that is it similar to std::complex,
and similar to built-in floating-point types for the explicit
zero-initialization (i.e. "double d = double();" actually initializes
to 0).


> Chenyi
> 
>>>> Sylvain Pion <Sylvain.Pion@sophia.inria.fr> 9/14/2006 5:01 PM >>>
> 
> Ron Avitzur wrote:
>>>>>  1- no default constructor at all
>>>>>  2- [0,0]
>>>>>  3- empty
>>>>>  4- whole
>>>>>  5- uninitialized tag
>>>>>  6- see below (something a la "singular iterator")
>>> As George says, there is indeed no perfect choice.  I can see good
>>> arguments supporting 2, 3, 4, 6 (I see 5 as a debug mode allowed by
> 6).
>> In defense of 1, I'll reiterate my concern from April that folks
> expect
>> declaring  { double foo[kSize]; ...} is free while having any
> default
>> constructor can make { interval<double> foo[kSize]; ... } in an
> inner
>> loop be very costly.
>>
>> I encountered precisely this a few years ago in a context that made
> it
>> very difficult to recognize the inefficiency.
> 
> So, you are arguing for 6, like me.
> 
> 1 means no default constructor, that is, a private one.
> At least, this is how I understood 1.
> 


-- 
Sylvain
From avitzur@PacificT.com Thu Sep 14 14:35:09 2006
Received: from red.evocative.com (red.evocative.com [67.131.251.18])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8ELZ8jd020798
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 14:35:09 -0700
Received: from [192.168.1.100] (open-131-161-241-26.cliq.com [131.161.241.26])
	by red.evocative.com (8.13.4/8.12.5) with SMTP id k8EMPJG1070764
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 15:25:20 -0700 (PDT)
X-Local-Message: <MX[192.168.1.100]>[192.168.1.100]
Mime-Version: 1.0
X-Sender: w1019@mail.pacifict.com
Message-Id: <p06100504c12f85d8de9c@[192.168.1.100]>
In-Reply-To: <4509D123.9080501@sophia.inria.fr>
References: <45091119.9090307@univ-nantes.fr>
 <1158257438.28491.75.camel@localhost> <4509C8D0.7000903@sophia.inria.fr>
 <p06100502c12f7cffcbc9@[192.168.1.100]> <4509D123.9080501@sophia.inria.fr>
Date: Thu, 14 Sep 2006 15:22:11 -0700
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
From: Ron Avitzur <avitzur@PacificT.com>
Subject: Re: [std-interval] Mathematical relations and default
 initialization
Content-Type: text/plain; charset="us-ascii" ; format="flowed"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 21:35:09 -0000

>>>>>   1- no default constructor at all
>>>>>   2- [0,0]
>>>>>   3- empty
>>>>>   4- whole
>>>>>   5- uninitialized tag
>>>>>   6- see below (something a la "singular iterator")
>
>So, you are arguing for 6, like me.
>
>1 means no default constructor, that is, a private one.
>At least, this is how I understood 1.

Yes. I had misremembered the earlier discussion. Going back to

  http://compgeom.poly.edu/pipermail/std-interval/2006-April/000040.html

6 most closely resembles the behavior of built-in types.
From avitzur@PacificT.com Thu Sep 14 15:09:05 2006
Received: from red.evocative.com (red.evocative.com [67.131.251.18])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EM95jd020856
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 15:09:05 -0700
Received: from [192.168.1.100] (open-131-161-241-26.cliq.com [131.161.241.26])
	by red.evocative.com (8.13.4/8.12.5) with SMTP id k8EMxBDO071861
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 15:59:17 -0700 (PDT)
X-Local-Message: <MX[192.168.1.100]>[192.168.1.100]
Mime-Version: 1.0
X-Sender: w1019@mail.pacifict.com
Message-Id: <p06100505c12f87282d88@[192.168.1.100]>
In-Reply-To: <4509D5E1.5030906@sophia.inria.fr>
References: <45091119.9090307@univ-nantes.fr>
 <1158257438.28491.75.camel@localhost> <4509C8D0.7000903@sophia.inria.fr>
 <p06100502c12f7cffcbc9@[192.168.1.100]>
 <4509D123.9080501@sophia.inria.fr>	<45098D1E.853A.0064.0@uca.edu>
 <4509D5E1.5030906@sophia.inria.fr>
Date: Thu, 14 Sep 2006 15:54:04 -0700
To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
From: Ron Avitzur <avitzur@PacificT.com>
Subject: Re: [std-interval] Mathematical relations and default
 initialization
Content-Type: text/plain; charset="us-ascii" ; format="flowed"
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 22:09:05 -0000

>if zero-initialization of memory is faster than initialization to
>something else.  I don't know if some platforms show such behavior.

Zero initialization of arrays can be much faster on PowerPC with the
dcbz instruction which zeros a cache line. This is much faster than
assigning the 0 value to memory because the assignment may first cause the
entire cache line to be read in from main memory which can be very slow.
That's unnecessary when the entire cache line is to be overwritten anyway.

Also, if I recall correctly on Mac OS X, the Mach kernel zero-fills
memory as a security feature when an anonymous memory page is used
for the first time.

However, I'm just responding to the specific question about
initialization to zero. I don't think this level of system-specific
performance lore is relevant to the discussion.
From george.corliss@marquette.edu Thu Sep 14 15:09:17 2006
Received: from its-exsmtp2.marqnet.mu.edu (email2.marquette.edu
	[134.48.20.170])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8EM9Hjd020868
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 15:09:17 -0700
Received: from its-exfe2.marqnet.mu.edu ([134.48.20.167]) by
	its-exsmtp2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 17:58:05 -0500
Received: from [192.168.1.101] ([65.29.133.38] RDNS failed) by
	its-exfe2.marqnet.mu.edu with Microsoft SMTPSVC(6.0.3790.1830);
	Thu, 14 Sep 2006 17:58:04 -0500
User-Agent: Microsoft-Entourage/11.2.3.060209
Date: Thu, 14 Sep 2006 17:57:58 -0500
Subject: Re: [std-interval] Mathematical relations and default
 initialization
From: George Corliss <George.Corliss@marquette.edu>
To: For discussions concerning the C++ standardization of intervals
 <std-interval@compgeom.poly.edu>
Message-ID: <C12F48A6.3DF6%George.Corliss@Marquette.edu>
Thread-Topic: [std-interval] Mathematical relations and default
 initialization
Thread-Index: AcbYUTiWdvsvT0REEdu45QAKlZKJfg==
In-Reply-To: <4509C8D0.7000903@sophia.inria.fr>
Mime-version: 1.0
Content-type: text/plain;
	charset="US-ASCII"
Content-transfer-encoding: 7bit
X-OriginalArrivalTime: 14 Sep 2006 22:58:04.0540 (UTC)
	FILETIME=[3C7CCBC0:01C6D851]
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 22:09:17 -0000

Sylvain and all,

>>> 1- no default constructor at all
>>> 2- [0,0]
>>> 3- empty
>>> 4- whole
>>> 5- uninitialized tag
>>> 6- see below (something a la "singular iterator")
Could someone fill me in?  I'm not familiar with "singular iterator", and I
found nothing "below" in the original message that helped me understand what
is #6.  Is #6 equivalent to "undefined," in the sense that what you get is
whatever bit pattern happened to be in that memory location from its
previous use?

> (while at it : concerning the propagation of empty, the current
> proposal does not say anything, since any function taking empty
> can return any interval: are there opinions on the sharpness of
> returned intervals in this case?  we could easily enforce empty
> as returned interval)
Ouch!  Yes, that is a (unintended?) consequence of not specifying tightness.

> 6 also has the advantage of speed, I'm thinking especially of array
> initialization.
My understanding of C++ is that happens often, since in some parameter
passing, a default constructor is called and then the appropriate values are
copied into those locations.  Is that close?  Is that why is is a TOTAL
waste of time to initialize an array that is about to be filled anyway?

> I'm not very convinced by the arguments which have been given so
> far in favor of "whole", because I think they mix the correctness
> issue of forgotten initializations, with the preferred value of
> the initializations of variables in *some* algorithms.
> Such algorithms should initialize variables explicitly to "whole",
> IMO.  
No, we agree that it is bad programming practice to rely on default
initializations, no matter what they are.  I am talking about the extent to
which we can protect the careless programmer who forgets to initialize the
variable before using it.

> And given that there is no clear intuitive default, users
> will never remember that "whole" is used as default value, so
> in practice it will be better to use "whole" explicitly anyway
> for these cases, so no need to make it the default constructed
> value.  If somebody thinks it would be too inconvenient to require
> an explicit initialization to "whole" for some codes, I would be
> interesting in seeing such codes.
Does the same argument apply for empty?

I think whole and empty are equivalent in that argument.

Here are two careless programs:

Example 1.
Interval X I think is 1, but it is built with a default constructor that
defaults to empty.
Y = [-1]
Z = HULL (X, Y) 
I think Z encloses all values of sin, but it does not because it is [-1]
I assert that is a containment failure.

Example 2.
Interval X I think is 1, but it is built with a default constructor that
defaults to whole.
Y = [2, 4]
Z = [-3] + set difference Y \ X.
I think Z encloses all values of sin, but it does not because it is empty
I assert that is a containment failure.

Conclusion: NEITHER empty nor whole are immune to containment failure.

I think whole and empty are equivalent in that argument.

Conclusion 2: My case against #6 is pretty weak.

My case favoring whole over empty is not very good, either.


> My personal preference goes to 6 (i.e. producing an "uninitialized
> interval", similar to the behavior of iterators, that is, only
> copies/assignments are allowed on them, basically).
Assuming I have understood what you mean by #6, I am forced to agree.

George


From j.d.pryce@ntlworld.com Thu Sep 14 14:37:53 2006
Received: from mtaout01-winn.ispmail.ntl.com (mtaout01-winn.ispmail.ntl.com
	[81.103.221.47])
	by compgeom.poly.edu (8.12.8/8.12.8) with ESMTP id k8ELbojd020811
	for <std-interval@compgeom.poly.edu>; Thu, 14 Sep 2006 14:37:51 -0700
Received: from aamtaout01-winn.ispmail.ntl.com ([81.103.221.35])
	by mtaout01-winn.ispmail.ntl.com with ESMTP
	<20060914222646.IFCR15018.mtaout01-winn.ispmail.ntl.com@aamtaout01-winn.ispmail.ntl.com>
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 23:26:46 +0100
Received: from 142kingshill.ntlworld.com ([86.18.89.224])
	by aamtaout01-winn.ispmail.ntl.com with ESMTP
	<20060914222610.UGTT644.aamtaout01-winn.ispmail.ntl.com@142kingshill.ntlworld.com>
	for <std-interval@compgeom.poly.edu>;
	Thu, 14 Sep 2006 23:26:10 +0100
Message-Id: <6.2.5.6.0.20060914143906.02ceeeb0@ntlworld.com>
X-Mailer: QUALCOMM Windows Eudora Version 6.2.5.6
Date: Thu, 14 Sep 2006 23:29:03 +0100
To: <std-interval@compgeom.poly.edu>
From: Dr John Pryce <j.d.pryce@ntlworld.com>
Subject: Re: [std-interval] Revised document available
In-Reply-To: <45066CC1.5000706@sophia.inria.fr>
References: <45066CC1.5000706@sophia.inria.fr>
Mime-Version: 1.0
Content-Type: multipart/mixed;
	boundary="=====================_135644110==_"
X-Mailman-Approved-At: Thu, 14 Sep 2006 17:10:13 -0700
X-BeenThere: std-interval@compgeom.poly.edu
X-Mailman-Version: 2.1.1
Precedence: list
Reply-To: For discussions concerning the C++ standardization of intervals
	<std-interval@compgeom.poly.edu>
List-Id: For discussions concerning the C++ standardization of intervals
	<std-interval.compgeom.poly.edu>
List-Unsubscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=unsubscribe>
List-Archive: <http://compgeom.poly.edu/pipermail/std-interval>
List-Post: <mailto:std-interval@compgeom.poly.edu>
List-Help: <mailto:std-interval-request@compgeom.poly.edu?subject=help>
List-Subscribe: <http://compgeom.poly.edu/mailman/listinfo/std-interval>,
	<mailto:std-interval-request@compgeom.poly.edu?subject=subscribe>
X-List-Received-Date: Thu, 14 Sep 2006 21:37:53 -0000

--=====================_135644110==_
Content-Type: text/plain; charset="us-ascii"; format=flowed

Dear std-intervalers,

At 09:16 12/09/06, Sylvain Pion wrote:
>A revised version of the proposal is now available at:
>http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2067.pdf

I aim to comment on the revised proposal in several separate messages 
addressing various aspects. Here is the first one. The views are my 
own, but mostly shared by the other four members of the ISL project team.

As you will know, ISL favours a cset-based standard. In case readers 
have missed them, please find attached the following.
- The current version of ISL's interval standard proposal, dated 7 June 2006.
   We are working on a revision in the light of [std-interval] discussions.
   In particular we support Lee Winter's arguments in favour of allowing (but
   not mandating) tags.
- The paper by Pryce and Corliss "Interval Arithmetic with Containment
   Sets", accepted for publication in Springer "Computing". This is a
   wide ranging discussion of theoretical and practical issues.

Herve, Guillaume, Sylvain: Your current version improves on the 
previous in many ways. In particular the specifications of arithmetic 
operations are now much cleaner and closer to the mathematics. It is 
now mandatory for I/O to respect inclusion. The C++ code has been 
tidied up, e.g. by removing the "numeric specializations" to float, 
double & long double, which turned out to be unnecessary.

I want to comment first on the use of "undefined". Is it appropriate 
to specify an "undefined" result in so many cases?
E.g. p15-16 #4,10,12,15,... These are functions central to the 
interval system, yet using any of them, even once, makes it 
impossible to assert portability of a program. For a package aimed at 
high-integrity programming this makes no sense.

For instance. At present "interval(NaN)" is mandated to return empty, 
but "interval(NaN, NaN)" need not. What happens if a safety-critical 
program developed on a system where "interval(NaN, NaN)" returns 
empty is ported to one where it returns whole, or some other value, 
or raises an exception?

The vast majority of machines on which interval computation will be used are
- IEEE-conforming;
- used by the general scientific community, for whom portability and
   future-proofing of code is vastly important.

On a non-IEEE machine, if interval computation is used I believe it 
will be for a specialist purpose (e.g. embedded processor in 
avionics). Portability FROM such a machine TO a different platform 
will not be so important.

The standard should respect the needs of both these types of application.

I propose that it leave NOTHING undefined on IEEE platforms, while 
allowing "undefined", "unspecified" or "implementation-defined" on 
non-IEEE platforms. (Maybe the choice between these three options, 
for a platform whose users are not concerned with portability, should 
be left to the house-rules defined by their managers.) Actually, of 
the 10 occurrences of "undefined" in your draft standard text, I 
don't see a reason against changing them all to 
"implementation-defined" for non-IEEE, and giving a specific 
definition for IEEE.

Regards

John Pryce  
--=====================_135644110==_
Content-Type: application/pdf; name="cpponemodel.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="cpponemodel.pdf"

JVBERi0xLjIKOSAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0YxCi9G
b250RGVzY3JpcHRvciA4IDAgUgovQmFzZUZvbnQvUk5BVEZVK0NNUjE3Ci9GaXJzdENoYXIgMzMK
L0xhc3RDaGFyIDE5NgovV2lkdGhzWzI0OS42IDQ1OC42IDc3Mi4xIDQ1OC42IDc3Mi4xIDcxOS44
IDI0OS42IDM1NC4xIDM1NC4xIDQ1OC42IDcxOS44IDI0OS42IDMwMS45CjI0OS42IDQ1OC42IDQ1
OC42IDQ1OC42IDQ1OC42IDQ1OC42IDQ1OC42IDQ1OC42IDQ1OC42IDQ1OC42IDQ1OC42IDQ1OC42
IDI0OS42IDI0OS42CjI0OS42IDcxOS44IDQzMi41IDQzMi41IDcxOS44IDY5My4zIDY1NC4zIDY2
Ny42IDcwNi42IDYyOC4yIDYwMi4xIDcyNi4zIDY5My4zIDMyNy42CjQ3MS41IDcxOS40IDU3NiA4
NTAgNjkzLjMgNzE5LjggNjI4LjIgNzE5LjggNjgwLjUgNTEwLjkgNjY3LjYgNjkzLjMgNjkzLjMg
OTU0LjUgNjkzLjMKNjkzLjMgNTYzLjEgMjQ5LjYgNDU4LjYgMjQ5LjYgNDU4LjYgMjQ5LjYgMjQ5
LjYgNDU4LjYgNTEwLjkgNDA2LjQgNTEwLjkgNDA2LjQgMjc1LjgKNDU4LjYgNTEwLjkgMjQ5LjYg
Mjc1LjggNDg0LjcgMjQ5LjYgNzcyLjEgNTEwLjkgNDU4LjYgNTEwLjkgNDg0LjcgMzU0LjEgMzU5
LjQgMzU0LjEKNTEwLjkgNDg0LjcgNjY3LjYgNDg0LjcgNDg0LjcgNDA2LjQgNDU4LjYgOTE3LjIg
NDU4LjYgNDU4LjYgNDU4LjYgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTc2IDc3Mi4xIDcxOS44IDY0MS4xIDYxNS4zIDY5
My4zCjY2Ny42IDcxOS44IDY2Ny42IDcxOS44IDAgMCA2NjcuNiA1MjUuNCA0OTkuMyA0OTkuMyA3
NDguOSA3NDguOSAyNDkuNiAyNzUuOCA0NTguNgo0NTguNiA0NTguNiA0NTguNiA0NTguNiA2OTMu
MyA0MDYuNCA0NTguNiA2NjcuNiA3MTkuOCA0NTguNiA4MzcuMiA5NDEuNyA3MTkuOCAyNDkuNgo0
NTguNl0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8Ci9UeXBlL0ZvbnQKL1N1YnR5cGUvVHlwZTEKL05h
bWUvRjIKL0ZvbnREZXNjcmlwdG9yIDExIDAgUgovQmFzZUZvbnQvTkhETllJK0NNUjEyCi9GaXJz
dENoYXIgMzMKL0xhc3RDaGFyIDE5NgovV2lkdGhzWzI3MiA0ODkuNiA4MTYgNDg5LjYgODE2IDc2
MS42IDI3MiAzODAuOCAzODAuOCA0ODkuNiA3NjEuNiAyNzIgMzI2LjQgMjcyIDQ4OS42CjQ4OS42
IDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDI3
MiAyNzIgMjcyIDc2MS42IDQ2Mi40CjQ2Mi40IDc2MS42IDczNCA2OTMuNCA3MDcuMiA3NDcuOCA2
NjYuMiA2MzkgNzY4LjMgNzM0IDM1My4yIDUwMyA3NjEuMiA2MTEuOCA4OTcuMgo3MzQgNzYxLjYg
NjY2LjIgNzYxLjYgNzIwLjYgNTQ0IDcwNy4yIDczNCA3MzQgMTAwNiA3MzQgNzM0IDU5OC40IDI3
MiA0ODkuNiAyNzIgNDg5LjYKMjcyIDI3MiA0ODkuNiA1NDQgNDM1LjIgNTQ0IDQzNS4yIDI5OS4y
IDQ4OS42IDU0NCAyNzIgMjk5LjIgNTE2LjggMjcyIDgxNiA1NDQgNDg5LjYKNTQ0IDUxNi44IDM4
MC44IDM4Ni4yIDM4MC44IDU0NCA1MTYuOCA3MDcuMiA1MTYuOCA1MTYuOCA0MzUuMiA0ODkuNiA5
NzkuMiA0ODkuNiA0ODkuNgo0ODkuNiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2MTEuOCA4MTYKNzYxLjYgNjc5LjYgNjUy
LjggNzM0IDcwNy4yIDc2MS42IDcwNy4yIDc2MS42IDAgMCA3MDcuMiA1NzEuMiA1NDQgNTQ0IDgx
NiA4MTYgMjcyCjI5OS4yIDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDQ4OS42IDczNCA0MzUuMiA0
ODkuNiA3MDcuMiA3NjEuNiA0ODkuNiA4ODMuOCA5OTIuNgo3NjEuNiAyNzIgNDg5LjZdCj4+CmVu
ZG9iagoxNSAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0YzCi9Gb250
RGVzY3JpcHRvciAxNCAwIFIKL0Jhc2VGb250L1RBTURaUytDTUJYOQovRmlyc3RDaGFyIDMzCi9M
YXN0Q2hhciAxOTYKL1dpZHRoc1szNjAuMiA2MTcuNiA5ODYuMSA1OTEuNyA5ODYuMSA5MjAuNCAz
MjguNyA0NjAuMiA0NjAuMiA1OTEuNyA5MjAuNCAzMjguNyAzOTQuNAozMjguNyA1OTEuNyA1OTEu
NyA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyAz
MjguNyAzMjguNwozNjAuMiA5MjAuNCA1NTguOCA1NTguOCA5MjAuNCA4OTIuOSA4NDAuOSA4NTQu
NiA5MDYuNiA3NzYuNSA3NDMuNyA5MjkuOSA5MjQuNCA0NDYuMwo2MTAuOCA5MjUuOCA3MTAuOCAx
MTIxLjYgOTI0LjQgODg4LjkgODA4IDg4OC45IDg4Ni43IDY1Ny40IDgyMy4xIDkwOC42IDg5Mi45
IDEyMjEuNgo4OTIuOSA4OTIuOSA3MjMuMSAzMjguNyA2MTcuNiAzMjguNyA1OTEuNyAzMjguNyAz
MjguNyA1NzUuMiA2NTcuNCA1MjUuOSA2NTcuNCA1NDMKMzYxLjYgNTkxLjcgNjU3LjQgMzI4Ljcg
MzYxLjYgNjI0LjUgMzI4LjcgOTg2LjEgNjU3LjQgNTkxLjcgNjU3LjQgNjI0LjUgNDg4LjEgNDY2
LjgKNDYwLjIgNjU3LjQgNjI0LjUgODU0LjYgNjI0LjUgNjI0LjUgNTI1LjkgNTkxLjcgMTE4My4z
IDU5MS43IDU5MS43IDU5MS43IDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDcxMC44IDk4Ni4xIDkyMC40IDgyNy4yCjc4OC45
IDkyNC40IDg1NC42IDkyMC40IDg1NC42IDkyMC40IDAgMCA4NTQuNiA2OTAuMyA2NTcuNCA2NTcu
NCA5ODYuMSA5ODYuMSAzMjguNwozNjEuNiA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyA1OTEuNyA4
OTIuOSA1MjUuOSA2MTYuOCA4NTQuNiA5MjAuNCA1OTEuNyAxMDcxIDEyMDIuNQo5MjAuNCAzMjgu
NyA1OTEuN10KPj4KZW5kb2JqCjE4IDAgb2JqCjw8Ci9UeXBlL0ZvbnQKL1N1YnR5cGUvVHlwZTEK
L05hbWUvRjQKL0ZvbnREZXNjcmlwdG9yIDE3IDAgUgovQmFzZUZvbnQvSU1aVlJHK0NNUjkKL0Zp
cnN0Q2hhciAzMwovTGFzdENoYXIgMTk2Ci9XaWR0aHNbMjg1LjUgNTEzLjkgODU2LjUgNTEzLjkg
ODU2LjUgNzk5LjQgMjg1LjUgMzk5LjcgMzk5LjcgNTEzLjkgNzk5LjQgMjg1LjUgMzQyLjYKMjg1
LjUgNTEzLjkgNTEzLjkgNTEzLjkgNTEzLjkgNTEzLjkgNTEzLjkgNTEzLjkgNTEzLjkgNTEzLjkg
NTEzLjkgNTEzLjkgMjg1LjUgMjg1LjUKMjg1LjUgNzk5LjQgNDg1LjMgNDg1LjMgNzk5LjQgNzcw
LjcgNzI3LjkgNzQyLjMgNzg1IDY5OS40IDY3MC44IDgwNi41IDc3MC43IDM3MSA1MjguMQo3OTku
MiA2NDIuMyA5NDIgNzcwLjcgNzk5LjQgNjk5LjQgNzk5LjQgNzU2LjUgNTcxIDc0Mi4zIDc3MC43
IDc3MC43IDEwNTYuMiA3NzAuNwo3NzAuNyA2MjguMSAyODUuNSA1MTMuOSAyODUuNSA1MTMuOSAy
ODUuNSAyODUuNSA1MTMuOSA1NzEgNDU2LjggNTcxIDQ1Ny4yIDMxNCA1MTMuOQo1NzEgMjg1LjUg
MzE0IDU0Mi40IDI4NS41IDg1Ni41IDU3MSA1MTMuOSA1NzEgNTQyLjQgNDAyIDQwNS40IDM5OS43
IDU3MSA1NDIuNCA3NDIuMwo1NDIuNCA1NDIuNCA0NTYuOCA1MTMuOSAxMDI3LjggNTEzLjkgNTEz
LjkgNTEzLjkgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgNjQyLjMgODU2LjUgNzk5LjQgNzEzLjYgNjg1LjIgNzcwLjcgNzQy
LjMgNzk5LjQKNzQyLjMgNzk5LjQgMCAwIDc0Mi4zIDU5OS41IDU3MSA1NzEgODU2LjUgODU2LjUg
Mjg1LjUgMzE0IDUxMy45IDUxMy45IDUxMy45IDUxMy45CjUxMy45IDc3MC43IDQ1Ni44IDUxMy45
IDc0Mi4zIDc5OS40IDUxMy45IDkyNy44IDEwNDIgNzk5LjQgMjg1LjUgNTEzLjldCj4+CmVuZG9i
agoyMSAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0Y1Ci9Gb250RGVz
Y3JpcHRvciAyMCAwIFIKL0Jhc2VGb250L1RWTVJLTitDTUJYMTAKL0ZpcnN0Q2hhciAzMwovTGFz
dENoYXIgMTk2Ci9XaWR0aHNbMzUwIDYwMi44IDk1OC4zIDU3NSA5NTguMyA4OTQuNCAzMTkuNCA0
NDcuMiA0NDcuMiA1NzUgODk0LjQgMzE5LjQgMzgzLjMgMzE5LjQKNTc1IDU3NSA1NzUgNTc1IDU3
NSA1NzUgNTc1IDU3NSA1NzUgNTc1IDU3NSAzMTkuNCAzMTkuNCAzNTAgODk0LjQgNTQzLjEgNTQz
LjEgODk0LjQKODY5LjQgODE4LjEgODMwLjYgODgxLjkgNzU1LjYgNzIzLjYgOTA0LjIgOTAwIDQz
Ni4xIDU5NC40IDkwMS40IDY5MS43IDEwOTEuNyA5MDAKODYzLjkgNzg2LjEgODYzLjkgODYyLjUg
NjM4LjkgODAwIDg4NC43IDg2OS40IDExODguOSA4NjkuNCA4NjkuNCA3MDIuOCAzMTkuNCA2MDIu
OAozMTkuNCA1NzUgMzE5LjQgMzE5LjQgNTU5IDYzOC45IDUxMS4xIDYzOC45IDUyNy4xIDM1MS40
IDU3NSA2MzguOSAzMTkuNCAzNTEuNCA2MDYuOQozMTkuNCA5NTguMyA2MzguOSA1NzUgNjM4Ljkg
NjA2LjkgNDczLjYgNDUzLjYgNDQ3LjIgNjM4LjkgNjA2LjkgODMwLjYgNjA2LjkgNjA2LjkKNTEx
LjEgNTc1IDExNTAgNTc1IDU3NSA1NzUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgNjkxLjcgOTU4LjMgODk0LjQgODA1LjYg
NzY2LjcgOTAwIDgzMC42IDg5NC40IDgzMC42IDg5NC40IDAgMCA4MzAuNiA2NzAuOAo2MzguOSA2
MzguOSA5NTguMyA5NTguMyAzMTkuNCAzNTEuNCA1NzUgNTc1IDU3NSA1NzUgNTc1IDg2OS40IDUx
MS4xIDU5Ny4yIDgzMC42IDg5NC40CjU3NSAxMDQxLjcgMTE2OS40IDg5NC40IDMxOS40IDU3NV0K
Pj4KZW5kb2JqCjI0IDAgb2JqCjw8Ci9UeXBlL0ZvbnQKL1N1YnR5cGUvVHlwZTEKL05hbWUvRjYK
L0ZvbnREZXNjcmlwdG9yIDIzIDAgUgovQmFzZUZvbnQvUEJEUFJKK0NNVEkxMAovRmlyc3RDaGFy
IDMzCi9MYXN0Q2hhciAxOTYKL1dpZHRoc1szMDYuNyA1MTQuNCA4MTcuOCA3NjkuMSA4MTcuOCA3
NjYuNyAzMDYuNyA0MDguOSA0MDguOSA1MTEuMSA3NjYuNyAzMDYuNyAzNTcuOAozMDYuNyA1MTEu
MSA1MTEuMSA1MTEuMSA1MTEuMSA1MTEuMSA1MTEuMSA1MTEuMSA1MTEuMSA1MTEuMSA1MTEuMSA1
MTEuMSAzMDYuNyAzMDYuNwozMDYuNyA3NjYuNyA1MTEuMSA1MTEuMSA3NjYuNyA3NDMuMyA3MDMu
OSA3MTUuNiA3NTUgNjc4LjMgNjUyLjggNzczLjYgNzQzLjMgMzg1LjYKNTI1IDc2OC45IDYyNy4y
IDg5Ni43IDc0My4zIDc2Ni43IDY3OC4zIDc2Ni43IDcyOS40IDU2Mi4yIDcxNS42IDc0My4zIDc0
My4zIDk5OC45Cjc0My4zIDc0My4zIDYxMy4zIDMwNi43IDUxNC40IDMwNi43IDUxMS4xIDMwNi43
IDMwNi43IDUxMS4xIDQ2MCA0NjAgNTExLjEgNDYwIDMwNi43CjQ2MCA1MTEuMSAzMDYuNyAzMDYu
NyA0NjAgMjU1LjYgODE3LjggNTYyLjIgNTExLjEgNTExLjEgNDYwIDQyMS43IDQwOC45IDMzMi4y
IDUzNi43CjQ2MCA2NjQuNCA0NjMuOSA0ODUuNiA0MDguOSA1MTEuMSAxMDIyLjIgNTExLjEgNTEx
LjEgNTExLjEgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgNjI3LjIgODE3LjggNzY2LjcgNjkyLjIgNjY0LjQgNzQzLjMgNzE1
LjYKNzY2LjcgNzE1LjYgNzY2LjcgMCAwIDcxNS42IDYxMy4zIDU2Mi4yIDU4Ny44IDg4MS43IDg5
NC40IDMwNi43IDMzMi4yIDUxMS4xIDUxMS4xCjUxMS4xIDUxMS4xIDUxMS4xIDgzMS4zIDQ2MCA1
MzYuNyA3MTUuNiA3MTUuNiA1MTEuMSA4ODIuOCA5ODUgNzY2LjcgMjU1LjYgNTExLjFdCj4+CmVu
ZG9iagoyNyAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5cGUxCi9OYW1lL0Y3Ci9Gb250
RGVzY3JpcHRvciAyNiAwIFIKL0Jhc2VGb250L0JISElGQytDTUJYMTIKL0ZpcnN0Q2hhciAzMwov
TGFzdENoYXIgMTk2Ci9XaWR0aHNbMzQyLjYgNTgxIDkzNy41IDU2Mi41IDkzNy41IDg3NSAzMTIu
NSA0MzcuNSA0MzcuNSA1NjIuNSA4NzUgMzEyLjUgMzc1IDMxMi41CjU2Mi41IDU2Mi41IDU2Mi41
IDU2Mi41IDU2Mi41IDU2Mi41IDU2Mi41IDU2Mi41IDU2Mi41IDU2Mi41IDU2Mi41IDMxMi41IDMx
Mi41IDM0Mi42Cjg3NSA1MzEuMyA1MzEuMyA4NzUgODQ5LjUgNzk5LjggODEyLjUgODYyLjMgNzM4
LjQgNzA3LjIgODg0LjMgODc5LjYgNDE5IDU4MSA4ODAuOAo2NzUuOSAxMDY3LjEgODc5LjYgODQ0
LjkgNzY4LjUgODQ0LjkgODM5LjEgNjI1IDc4Mi40IDg2NC42IDg0OS41IDExNjIgODQ5LjUgODQ5
LjUKNjg3LjUgMzEyLjUgNTgxIDMxMi41IDU2Mi41IDMxMi41IDMxMi41IDU0Ni45IDYyNSA1MDAg
NjI1IDUxMy4zIDM0My44IDU2Mi41IDYyNSAzMTIuNQozNDMuOCA1OTMuOCAzMTIuNSA5MzcuNSA2
MjUgNTYyLjUgNjI1IDU5My44IDQ1OS41IDQ0My44IDQzNy41IDYyNSA1OTMuOCA4MTIuNSA1OTMu
OAo1OTMuOCA1MDAgNTYyLjUgMTEyNSA1NjIuNSA1NjIuNSA1NjIuNSAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2NzUuOSA5
MzcuNSA4NzUgNzg3IDc1MCA4NzkuNiA4MTIuNSA4NzUgODEyLjUgODc1IDAgMCA4MTIuNQo2NTYu
MyA2MjUgNjI1IDkzNy41IDkzNy41IDMxMi41IDM0My44IDU2Mi41IDU2Mi41IDU2Mi41IDU2Mi41
IDU2Mi41IDg0OS41IDUwMCA1NzQuMQo4MTIuNSA4NzUgNTYyLjUgMTAxOC41IDExNDMuNSA4NzUg
MzEyLjUgNTYyLjVdCj4+CmVuZG9iagozMCAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1R5
cGUxCi9OYW1lL0Y4Ci9Gb250RGVzY3JpcHRvciAyOSAwIFIKL0Jhc2VGb250L0lXQk9LVCtDTVIx
MAovRmlyc3RDaGFyIDMzCi9MYXN0Q2hhciAxOTYKL1dpZHRoc1syNzcuOCA1MDAgODMzLjMgNTAw
IDgzMy4zIDc3Ny44IDI3Ny44IDM4OC45IDM4OC45IDUwMCA3NzcuOCAyNzcuOCAzMzMuMyAyNzcu
OAo1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDI3Ny44IDI3Ny44
IDI3Ny44IDc3Ny44IDQ3Mi4yIDQ3Mi4yIDc3Ny44Cjc1MCA3MDguMyA3MjIuMiA3NjMuOSA2ODAu
NiA2NTIuOCA3ODQuNyA3NTAgMzYxLjEgNTEzLjkgNzc3LjggNjI1IDkxNi43IDc1MCA3NzcuOAo2
ODAuNiA3NzcuOCA3MzYuMSA1NTUuNiA3MjIuMiA3NTAgNzUwIDEwMjcuOCA3NTAgNzUwIDYxMS4x
IDI3Ny44IDUwMCAyNzcuOCA1MDAgMjc3LjgKMjc3LjggNTAwIDU1NS42IDQ0NC40IDU1NS42IDQ0
NC40IDMwNS42IDUwMCA1NTUuNiAyNzcuOCAzMDUuNiA1MjcuOCAyNzcuOCA4MzMuMyA1NTUuNgo1
MDAgNTU1LjYgNTI3LjggMzkxLjcgMzk0LjQgMzg4LjkgNTU1LjYgNTI3LjggNzIyLjIgNTI3Ljgg
NTI3LjggNDQ0LjQgNTAwIDEwMDAgNTAwCjUwMCA1MDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjI1IDgzMy4zCjc3Ny44
IDY5NC40IDY2Ni43IDc1MCA3MjIuMiA3NzcuOCA3MjIuMiA3NzcuOCAwIDAgNzIyLjIgNTgzLjMg
NTU1LjYgNTU1LjYgODMzLjMgODMzLjMKMjc3LjggMzA1LjYgNTAwIDUwMCA1MDAgNTAwIDUwMCA3
NTAgNDQ0LjQgNTAwIDcyMi4yIDc3Ny44IDUwMCA5MDIuOCAxMDEzLjkgNzc3LjgKMjc3LjggNTAw
XQo+PgplbmRvYmoKMzIgMCBvYmoKPDwKL0ZpbHRlclsvRmxhdGVEZWNvZGVdCi9MZW5ndGggMTk3
MAo+PgpzdHJlYW0KeNrlWEmT2zYTvedX6AhVPiHExuVox7EzzubKTCWHTA6QBM3Q5qKPyzj69+kF
pDSW4iRVqdgpX0QIS6Px+nXjkYtEJsnibkGPF4unN188VwuVSa0WN7uFsotVlsq0WNw8+0U8Wa5M
osWrrt0vVzoVbe8r7hpafj7ZbrGhxFWz1E4MoXtYOi14mhJPunK4r8NQbh4vG+4DN778/HOeeT34
Zuu77fLXm5cLlWcy0YuVVrJQ5Mm35brz3QFHv3iuFwoGHPq7UuBtbmBqLnN2+mv0QWfiVqfp0qZa
4Fbg/NPu1iR2afNCtE1T1r5p4FBJbsWLsawqP9Zx4neh+v9Yts2Whp24PlRwKCt82fCEVzAYl75s
76kzA5AOm8DeZ4nUObhkpCGPXo5NNJ39jyfrJElp7lc3FAGzyGWR4oF0kkrr4Fw5RMFxFNb90PnN
cLrAzgtsIR1ClWipU5ofw5VDuAKcwcK+Q/htiK2Wnz1OKUTYlLsD9/gGn5mAU8JajmRGkbQQ2U3l
+36ewKYwiNigIJLRKYg0r4oxAwjh2Nam4i2wgcdej/1Q3mqXbfyAaOLRVsrIHI6iEjoanMRjDIzV
Yu036NSbu64dm608RcItiogErEPUrZHMmWdlD16Xdegk8yadp6ZKumyRRJLD8arhvh3vwDmT48HK
HluZ2LZLl4gNUKMZeGyNHWHplPBdP00PPLvxdYgL2x0/I+mcSmbSIQUKc2QZ/XfxrLAE2UV9VpQD
d4E7BBC7vYrsB99560KLjtzqx2rg/7Q/7PK27d5wa33gZ2QstJCxfBpe0vATbJYdzwg47LuqDB2P
PYSuL9u4fusHmrDlse88ObG5579IcQw7JDkfjU13Jzve+54tNe3AjUNglienh1wj2gR5wJ2BlFuI
7NhHT+A/P3Px9j7QFvQHWgdueTrmhizscSc3BQ0G3wmxY36zAaIB9LDTD2VPXmy5c9d29QkTF9rJ
DKqnzvLJ8RsyYLMT3PAPHRsbRy4FGlIxpTIj+nH9msDdDDyCAcU1kMih6cuHOO+IRLTp67a54+ZV
g0lMCQwzr8c1HaMdh7IJbBSrKof4EDPQysKeYn8rrq6/vV1iFmZizwZek8voGHbWoeZzUDrYfCIY
tGaCIZ1tIV7QidoOl98FXv5lC/Tqe5wBYz9KXvnUv6EwQvObSMJdOwxx1vdzGGD8e+Zg6as37UPc
KNaNXFzvaf+GY9+dcosrzHUNJQk2zU0hfkZUoKaXgBsasFC4mAPYu2WkdhiP3AiKIUzwPErn9IOv
Dn2cAPTgGbuxY1KSlTleuKlN5k05ee7G8M5qZgR6Ve8ZPaixfJzzTCGSWIvFfWIW1veSGAH9VOKh
Dnu8UchjoheM1B42gp+SD1LFXsqNbajA2UwrdhbW7/xDO6KDlgGAR9uE1TydV2/6MKyIG35OHPKO
bwmaixUihao6DpO1s0PN0+fMG+79wCnaj/s9DgAqMVVpvxavGZ7JKZxHSlBXTPxrQLSa2hC2UMci
0o7Vlpux8tC6x0XEr6twIfmNyWXGtw8IopVL8pg0Yc9XBoUCu9kzlxTH4sJ139kYdByD5OPGWeqh
DSokOLqLNWyG2SVcxnBwNlbO9QD/PeYAmjvjwOWSgFFWMcp4JkoVFzUd9vRgpAErPbLGGmYN9M95
RZMxhNhi8eCwsjFrKZQWWqQzjoY1J1lb12NTDge2yV2wW0OZA39I4LjpRkSJ0cT90c4Zu1iAYnxP
k2boo2TIQBFLY1EzwDKjEQtaBsXcgMnAj/59isSCurZcbq6WoG5SuPzboXxYQoPVD1zy0y0JmX69
Qf1mWLgmGjLGnDAt2jSFNNlkE1yAX1ek4vkSpARqJDLMboEyk8pFtXPBFKgKXTw2BZujqyC5ruo9
EcRAUWJPzSR47FG0g5RUqRPu3HhupGbbP4FB0DTPQl/eRUPPQH72l/10p4jmM6Ixz2zhcCrblQri
CwJrtmysaPEN4AE1I1C+DG9RD+dCItGTD/+wRfHhnVB5oR5FLGILtSMKaIBWM7TzKwiBCxUAZA6X
APwP9/eIwjdPi48G4n8tiH8IoypkMlPURIqCRGDMurDvQg/lA4AcYhUosk8JvzM2JiK/AKNRMpnp
aCMdX109Zp5VxafAtX8i44sLGFs96WHA2DHGP4ZqupwAaPpwYwwqKxLm0Nx7Fl1YbXfcxRcDNI4f
AnB4+hCwKkDqfWy8M8A7ZS6A4uz08QlASRmUH6bjn1DPJJ9s0v6V8miAc6f4nusjh5/wWCSARkgB
T/6CBSKEv2ChVLhBYUNfsVAr0esRKpAoRcypFLEuT4U61yKuAHHOX+RAaUBE08ShTCcd14Ecs/zd
EuxT51gvDb6koybit1vY8BcgsyzfWSQbnPnO/F9R7xQme+TKBS2TgndpPruFaiYDzXfFVwN9hkvZ
MUis+BmOki3A+wt+gqF/k1/zGniXqtCFRLn/4nVAaZmdp2WqtUztES39PrRqeKfT+E6IcmWqW7ux
2bA4/mPgJK3M55UYzNQWHwUuSujkAi7GSlcccTF/G5f40Th0fmi7vwWObPcIkEk/ICT6AiQ2le6E
KvZ9kDRts/ozWP6MNAyDK8yHlwinoCioe07B2ytUQX5lVBGsz34HtwQipwplbmRzdHJlYW0KZW5k
b2JqCjM0IDAgb2JqCjw8Ci9GMSA5IDAgUgovRjIgMTIgMCBSCi9GMyAxNSAwIFIKL0Y0IDE4IDAg
UgovRjUgMjEgMCBSCi9GNiAyNCAwIFIKL0Y3IDI3IDAgUgovRjggMzAgMCBSCj4+CmVuZG9iago2
IDAgb2JqCjw8Ci9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFnZUNdCi9Gb250IDM0IDAgUgo+PgplbmRv
YmoKMzkgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UeXBlMQovTmFtZS9GOQovRm9udERl
c2NyaXB0b3IgMzggMCBSCi9CYXNlRm9udC9BVkRFSkwrQ01UVDEwCi9GaXJzdENoYXIgMzMKL0xh
c3RDaGFyIDE5NgovV2lkdGhzWzUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUy
NSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNQo1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUg
NTI1IDUyNQo1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1
MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNQo1MjUgNTI1IDUyNSA1MjUgNTI1IDUy
NSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1
IDUyNQo1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDAgMCA1MjUK
NTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1
MjUgNTI1IDUyNSA1MjUgNTI1IDUyNSA1MjUKNTI1IDUyNV0KPj4KZW5kb2JqCjQwIDAgb2JqCjw8
Ci9GaWx0ZXJbL0ZsYXRlRGVjb2RlXQovTGVuZ3RoIDk5NQo+PgpzdHJlYW0KeNrlmMty2zYUhvd9
Ci7JBWHcL0unjjPuTOPORO4mzoIiYYVTivSIlOu+fQ8IUKKoSzKdpFacjShiAInnw3/+c8AII4yj
RdRf3kVvZhfXOjLIyGj2EFGBFI9SxpGG+6uPMZVIIpGkivP47XNn68IWScoYi4vyqWzLpvZ3D+s6
78Idjz9W5RyVdUJV3NnVUyJknFXoGZZ8SlLNWYySVGB8NhfCDI4pSz7NfovezoDJAIJLpMkWhHQz
Lq7NhhejDhTuZ8ybpmpt56dskTL4wsKULqE6/ucxSQGM9eCyuvDMBoKtH99DKBzCeb+08Z/u34Cn
kuRcCPJ9gkIjNZKS8lK6mWjDx5w3y8dsVbaDqBpHSsd2lXXN6iQXv9I6dUlxVvErjBTdxq9PxR+i
WffSoOPwD+hCjlNrsxI1jy1Q4JqfWXIdQKMpkmqLxpxCs8y6zxY+ynwY+ap8ccsAh8T8xQGIfQCG
IznSBsGw30cJOGuZZsWXwoc1QRBGnZ3p7tBR+3QIhsoz0gchJ/F0ThwH8igAUzvAjpUo/yt76SSo
+b7h6wPhE43EWB3Uh++q8Koewu4DWC9dXZmHKNtJYZkGeUwxPQD73D00q6WzECm/885zYw7yIId5
MIz4WA4syOHiNl3ZKuuGxuSrjKFs3LZy85+e8cUT5gghThFnW0KX7vF5fGXbchEqat10NnC5B2G4
rQbBPzk49j4Bm6DkTG3iW6QZwyNoXCPpoAmOmB5BQ2Azkqj4na3BMUKaLdZlYauydvCE1C8Rwf+m
xF5fB1FJidhYX4h6VLNEg9/Mq0FazYO/TrPOtzX5ppLBMO9tFtYpTF6VrJRGdEdWzLP6o7Xroklz
38MXNjT/zcojgS7Hf3lz6Vq829adl8QPnXdHxGQwojti4kFMQGByypIUMRKOUFc3H369fT+7eX93
e/dhetZSBFETJt5TibOFszTxw6frUYoUU0TMmKII7jUyrL4oDgJb12XnNQeVoCtrR0jpV2jslHBE
+BiNHLkVxB7OnFn7BUYTU7NZ7lzt8/S9B8GUn3G+UYCAd5SiPA7b5W6d7/aIVO4iDX+dbcA3U9nF
tdi4DsFIA2Du7f7PG5huXJ+eLR99SdRBPXBdt9nCOTycz4chb/m6L5eM+HIpuS+XMJpXWQs/QgnV
sLNk/Ah77+2ogAERHsM1Mpzg+K4ui3Jpa/eyztdgHrdN5Zs+ULwW5GfdULLfRFOoIWYgSD3B39dV
V6YnIXJJfzp69GQ6GIY03WQECBs+tZLxZZ4wHP9VNwn0gn9XtlhY4OpueqfFmNCY8Wllp4QhLiKX
EUgEGwt//8u/pdTbQAplbmRzdHJlYW0KZW5kb2JqCjQxIDAgb2JqCjw8Ci9GOCAzMCAwIFIKL0Y5
IDM5IDAgUgovRjUgMjEgMCBSCj4+CmVuZG9iagozNiAwIG9iago8PAovUHJvY1NldFsvUERGL1Rl
eHQvSW1hZ2VDXQovRm9udCA0MSAwIFIKPj4KZW5kb2JqCjQ2IDAgb2JqCjw8Ci9UeXBlL0ZvbnQK
L1N1YnR5cGUvVHlwZTEKL05hbWUvRjEwCi9Gb250RGVzY3JpcHRvciA0NSAwIFIKL0Jhc2VGb250
L1ZOV0VBRytDTU1JMTAKL0ZpcnN0Q2hhciAzMwovTGFzdENoYXIgMTk2Ci9XaWR0aHNbNjIyLjUg
NDY2LjMgNTkxLjQgODI4LjEgNTE3IDM2Mi44IDY1NC4yIDEwMDAgMTAwMCAxMDAwIDEwMDAgMjc3
LjggMjc3LjggNTAwCjUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAg
Mjc3LjggMjc3LjggNzc3LjggNTAwIDc3Ny44IDUwMCA1MzAuOQo3NTAgNzU4LjUgNzE0LjcgODI3
LjkgNzM4LjIgNjQzLjEgNzg2LjIgODMxLjMgNDM5LjYgNTU0LjUgODQ5LjMgNjgwLjYgOTcwLjEg
ODAzLjUKNzYyLjggNjQyIDc5MC42IDc1OS4zIDYxMy4yIDU4NC40IDY4Mi44IDU4My4zIDk0NC40
IDgyOC41IDU4MC42IDY4Mi42IDM4OC45IDM4OC45CjM4OC45IDEwMDAgMTAwMCA0MTYuNyA1Mjgu
NiA0MjkuMiA0MzIuOCA1MjAuNSA0NjUuNiA0ODkuNiA0NzcgNTc2LjIgMzQ0LjUgNDExLjggNTIw
LjYKMjk4LjQgODc4IDYwMC4yIDQ4NC43IDUwMy4xIDQ0Ni40IDQ1MS4yIDQ2OC44IDM2MS4xIDU3
Mi41IDQ4NC43IDcxNS45IDU3MS41IDQ5MC4zCjQ2NSAzMjIuNSAzODQgNjM2LjUgNTAwIDI3Ny44
IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAowIDAg
MCAwIDAgMCAwIDYxNS4zIDgzMy4zIDc2Mi44IDY5NC40IDc0Mi40IDgzMS4zIDc3OS45IDU4My4z
IDY2Ni43IDYxMi4yIDAgMCA3NzIuNAo2MzkuNyA1NjUuNiA1MTcuNyA0NDQuNCA0MDUuOSA0Mzcu
NSA0OTYuNSA0NjkuNCAzNTMuOSA1NzYuMiA1ODMuMyA2MDIuNSA0OTQgNDM3LjUKNTcwIDUxNyA1
NzEuNCA0MzcuMiA1NDAuMyA1OTUuOCA2MjUuNyA2NTEuNCAyNzcuOF0KPj4KZW5kb2JqCjQ5IDAg
b2JqCjw8Ci9UeXBlL0ZvbnQKL1N1YnR5cGUvVHlwZTEKL05hbWUvRjExCi9Gb250RGVzY3JpcHRv
ciA0OCAwIFIKL0Jhc2VGb250L0NGQVhLRitDTVNZMTAKL0ZpcnN0Q2hhciAzMwovTGFzdENoYXIg
MTk2Ci9XaWR0aHNbMTAwMCA1MDAgNTAwIDEwMDAgMTAwMCAxMDAwIDc3Ny44IDEwMDAgMTAwMCA2
MTEuMSA2MTEuMSAxMDAwIDEwMDAgMTAwMCA3NzcuOAoyNzUgMTAwMCA2NjYuNyA2NjYuNyA4ODgu
OSA4ODguOSAwIDAgNTU1LjYgNTU1LjYgNjY2LjcgNTAwIDcyMi4yIDcyMi4yIDc3Ny44IDc3Ny44
CjYxMS4xIDc5OC41IDY1Ni44IDUyNi41IDc3MS40IDUyNy44IDcxOC43IDU5NC45IDg0NC41IDU0
NC41IDY3Ny44IDc2MiA2ODkuNyAxMjAwLjkKODIwLjUgNzk2LjEgNjk1LjYgODE2LjcgODQ3LjUg
NjA1LjYgNTQ0LjYgNjI1LjggNjEyLjggOTg3LjggNzEzLjMgNjY4LjMgNzI0LjcgNjY2LjcKNjY2
LjcgNjY2LjcgNjY2LjcgNjY2LjcgNjExLjEgNjExLjEgNDQ0LjQgNDQ0LjQgNDQ0LjQgNDQ0LjQg
NTAwIDUwMCAzODguOSAzODguOSAyNzcuOAo1MDAgNTAwIDYxMS4xIDUwMCAyNzcuOCA4MzMuMyA3
NTAgODMzLjMgNDE2LjcgNjY2LjcgNjY2LjcgNzc3LjggNzc3LjggNDQ0LjQgNDQ0LjQKNDQ0LjQg
NjExLjEgNzc3LjggNzc3LjggNzc3LjggNzc3LjggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAwIDAgMCAwIDAgNzc3LjggMjc3LjggNzc3Ljgg
NTAwIDc3Ny44IDUwMCA3NzcuOCA3NzcuOCA3NzcuOCA3NzcuOCAwIDAgNzc3LjgKNzc3LjggNzc3
LjggMTAwMCA1MDAgNTAwIDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44
IDc3Ny44IDc3Ny44IDc3Ny44Cjc3Ny44IDc3Ny44IDEwMDAgMTAwMCA3NzcuOCA3NzcuOCAxMDAw
IDc3Ny44XQo+PgplbmRvYmoKNTIgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UeXBlMQov
TmFtZS9GMTIKL0ZvbnREZXNjcmlwdG9yIDUxIDAgUgovQmFzZUZvbnQvVlpJT0tQK01TQk0xMAov
Rmlyc3RDaGFyIDAKL0xhc3RDaGFyIDEyNwovV2lkdGhzWzc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44
IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44Cjc3
Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44
IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44Cjc3Ny44IDc3Ny44IDc3Ny44IDg4OC45IDg4OC45IDc3
Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44IDc3Ny44Cjc3Ny44
IDc3Ny44IDc3Ny44IDUwMCAyNzcuOCAyMjIuMiAzODguOSA2MTEuMSA3MjIuMiA2MTEuMSA3MjIu
MiA3NzcuOCA3NzcuOCA3NzcuOAo3NzcuOCAxMDAwIDEwMDAgMTAwMCAxMDAwIDEwMDAgMTAwMCA3
NzcuOCA3NzcuOCA1NTUuNiA3MjIuMiA2NjYuNyA3MjIuMiA3MjIuMiA2NjYuNwo2MTEuMSA3Nzcu
OCA3NzcuOCAzODguOSA1MDAgNzc3LjggNjY2LjcgOTQ0LjQgNzIyLjIgNzc3LjggNjExLjEgNzc3
LjggNzIyLjI
